| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <script src="https://unpkg.com/docx@9.5.0/build/index.js"></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
- <style>
- *{box-sizing:border-box;margin:0;padding:0;}
- body{font-family:var(--font-sans,system-ui,sans-serif);background:transparent;}
- .app{display:grid;grid-template-columns:300px 1fr;min-height:640px;}
- .sidebar{background:var(--color-background-secondary);border-right:0.5px solid var(--color-border-tertiary);padding:1.25rem 1rem;display:flex;flex-direction:column;gap:.85rem;overflow-y:auto;}
- h2{font-size:11px;font-weight:500;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.07em;}
- .field{display:flex;flex-direction:column;gap:5px;}
- .field label{font-size:12px;color:var(--color-text-secondary);font-weight:500;}
- .field input,.field textarea{font-size:13px;padding:7px 10px;border:0.5px solid var(--color-border-secondary);border-radius:8px;background:var(--color-background-primary);color:var(--color-text-primary);font-family:inherit;outline:none;}
- .field input:focus,.field textarea:focus{border-color:#185FA5;box-shadow:0 0 0 2px rgba(24,95,165,0.15);}
- .field textarea{resize:vertical;min-height:54px;}
- .toggle-row{display:flex;align-items:center;gap:8px;}
- .toggle{position:relative;width:36px;height:20px;flex-shrink:0;}
- .toggle input{opacity:0;width:0;height:0;}
- .slider{position:absolute;inset:0;border-radius:20px;background:var(--color-border-secondary,#ccc);cursor:pointer;transition:background .2s;}
- .toggle input:checked+.slider{background:#185FA5;}
- .slider:before{content:'';position:absolute;width:14px;height:14px;left:3px;top:3px;border-radius:50%;background:#fff;transition:transform .2s;}
- .toggle input:checked+.slider:before{transform:translateX(16px);}
- .toggle-label{font-size:12px;color:var(--color-text-secondary);}
- .fmt-row{display:flex;gap:8px;}
- .fmt-btn{flex:1;padding:7px 0;font-size:12px;font-weight:500;border:0.5px solid var(--color-border-secondary);border-radius:8px;cursor:pointer;background:var(--color-background-primary);color:var(--color-text-secondary);transition:all .15s;}
- .fmt-btn.active{background:#185FA5;color:#fff;border-color:#185FA5;}
- .dl-btn{width:100%;padding:10px;font-size:13px;font-weight:500;border-radius:8px;border:none;cursor:pointer;background:#185FA5;color:#fff;display:flex;align-items:center;justify-content:center;gap:8px;transition:opacity .15s;margin-top:auto;}
- .dl-btn:disabled{opacity:.55;cursor:not-allowed;}
- .dl-btn:hover:not(:disabled){opacity:.85;}
- .hint{font-size:11px;color:var(--color-text-tertiary);}
- .sep{border:none;border-top:0.5px solid var(--color-border-tertiary);margin:.1rem 0;}
- .preview-wrap{background:#e0dedd;padding:1.5rem;overflow-y:auto;display:flex;justify-content:center;}
- .page{background:#fff;width:100%;max-width:560px;min-height:760px;padding:2.2rem 2.5rem;box-shadow:0 2px 20px rgba(0,0,0,0.12);font-family:Calibri,Georgia,serif;color:#1a1a1a;font-size:11.5px;line-height:1.6;}
- .ltr-name{font-size:21px;font-weight:700;text-align:center;color:#1a1a1a;}
- .ltr-sub{font-size:10.5px;text-align:center;color:#555;font-style:italic;margin-top:2px;}
- .ltr-contact{font-size:9.5px;text-align:center;color:#555;margin-top:2px;}
- .ltr-rule{border:none;border-top:1.5px solid #1A5276;margin:10px 0 14px;}
- .ltr-date{font-size:10.5px;color:#555;margin-bottom:10px;}
- .ltr-addr{font-size:11px;margin-bottom:2px;}
- .ltr-subject{font-size:11px;font-weight:700;color:#1A5276;margin:10px 0 8px;}
- .ltr-body{margin-bottom:7px;text-align:justify;}
- .ltr-closing{margin-top:14px;}
- .ltr-sig{font-weight:700;margin-top:22px;}
- .fname{font-size:11.5px;color:var(--color-text-primary);word-break:break-all;}
- </style>
- </head>
- <body>
- <div class="app">
- <aside class="sidebar">
- <h2>Customise</h2>
- <div class="field">
- <label>Date</label>
- <div class="toggle-row">
- <label class="toggle">
- <input type="checkbox" id="useToday" checked>
- <span class="slider"></span>
- </label>
- <span class="toggle-label">Use today's date</span>
- </div>
- <div id="dateRow" style="display:none;flex-direction:column;gap:4px;">
- <input type="text" id="dateInput" maxlength="8" placeholder="DDMMYYYY" style="margin-top:4px;">
- <span class="hint" id="dateHint"></span>
- </div>
- <span class="hint" id="todayHint"></span>
- </div>
- <hr class="sep">
- <div class="field">
- <label>Hiring Manager Name</label>
- <input type="text" id="manager" placeholder="e.g. Sarah Johnson">
- <span class="hint" id="greetHint">Used in greeting: Dear Hiring Manager,</span>
- </div>
- <div class="field">
- <label>Company Name</label>
- <input type="text" id="company" placeholder="e.g. Google">
- </div>
- <div class="field">
- <label>Subject Line</label>
- <textarea id="subject" rows="3">Application for DevOps / Network Security / SOC Engineer Role</textarea>
- </div>
- <hr class="sep">
- <div class="field">
- <label>Format</label>
- <div class="fmt-row">
- <button class="fmt-btn active" id="btnDocx" onclick="setFmt('docx')">DOCX</button>
- <button class="fmt-btn" id="btnPdf" onclick="setFmt('pdf')">PDF</button>
- </div>
- </div>
- <button class="dl-btn" id="dlBtn" onclick="doDownload()">
- ↓ Download DOCX
- </button>
- <span class="hint" id="fnameHint" style="text-align:center;">Parv_Ashwani_Cover_Company.docx</span>
- </aside>
- <div class="preview-wrap">
- <div class="page" id="previewPage">
- <div class="ltr-name">PARV ASHWANI</div>
- <div class="ltr-sub">Network & Security Engineer | DevOps | Cloud Infrastructure</div>
- <div class="ltr-contact">parvashwaniofficial@gmail.com | +91 7007682851 | Lucknow, India | linkedin.com/in/parvashwani</div>
- <hr class="ltr-rule">
- <div class="ltr-date" id="pvDate"></div>
- <div class="ltr-addr" style="font-weight:700;" id="pvManager">Hiring Manager</div>
- <div class="ltr-addr" id="pvCompany">[Company Name]</div>
- <div class="ltr-subject">Re: <span id="pvSubject">Application for DevOps / Network Security / SOC Engineer Role</span></div>
- <p class="ltr-body" id="pvGreet">Dear Hiring Manager,</p>
- <p class="ltr-body">I am writing to express my strong interest in a DevOps, Network Security, or SOC Analyst role at your organisation. With over 1.5 years of professional experience at HCLTech as a Tech Lead for Citrix NetScaler operations, a Microsoft Azure Network Engineer Associate certification, and a deep passion for automation and infrastructure reliability, I am confident I can deliver immediate and lasting value to your team.</p>
- <p class="ltr-body">At HCLTech, I have been the go-to engineer for complex Citrix CVAD and NetScaler challenges, leading root-cause analysis through detailed network trace and log review using tools like Wireshark and TShark. Beyond my individual contributions, I have taken on a mentorship role, guiding other engineers through Linux and FreeBSD administration, cloud architecture patterns across AWS, Azure, and GCP, and virtualisation platforms including VMware, Hyper-V, and XenServer. This breadth of knowledge positions me well for both hands-on DevOps pipelines and security operations environments.</p>
- <p class="ltr-body">I have a strong scripting background in Python, Bash, and Shell, which I apply to automate repetitive operational tasks and build internal tooling. My personal projects, including a self-hosted Git platform, a browser-based HAR network analyser, and a SAML debugging browser extension, demonstrate my instinct to solve real engineering problems with clean, deployable software. I am equally comfortable at the terminal and in a collaborative DevOps or SOC workflow.</p>
- <p class="ltr-body">I am particularly excited by opportunities that combine infrastructure reliability with security observability, whether that means building CI/CD pipelines, maintaining cloud networking at scale, or monitoring and responding to threats in a SOC environment. I thrive in fast-paced teams and bring an analytical, collaborative mindset to every challenge.</p>
- <p class="ltr-body">I would welcome the opportunity to discuss how my skills and experience align with your team's needs. Thank you for your time and consideration.</p>
- <div class="ltr-closing">Sincerely,</div>
- <div class="ltr-sig">Parv Ashwani</div>
- </div>
- </div>
- </div>
- <script>
- var fmt = 'docx';
- function getTodayStr() {
- var d = new Date();
- var dd = String(d.getDate()).padStart(2,'0');
- var mm = String(d.getMonth()+1).padStart(2,'0');
- var yyyy = String(d.getFullYear());
- return dd+mm+yyyy;
- }
- function formatDate(s) {
- if (!s || s.length !== 8) return '';
- var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];
- var dd = parseInt(s.slice(0,2),10);
- var mm = parseInt(s.slice(2,4),10);
- var yyyy = s.slice(4);
- if (mm < 1 || mm > 12 || dd < 1 || dd > 31) return '';
- return months[mm-1] + ' ' + dd + ', ' + yyyy;
- }
- function safeFilename(c) {
- return (c||'Company').replace(/[^a-zA-Z0-9_ \-]/g,'').replace(/\s+/g,'_') || 'Company';
- }
- function getManager() { return document.getElementById('manager').value.trim() || 'Hiring Manager'; }
- function getCompany() { return document.getElementById('company').value.trim() || '[Company Name]'; }
- function getSubject() { return document.getElementById('subject').value.trim() || 'Application for DevOps / Network Security / SOC Engineer Role'; }
- function getDate() {
- var useToday = document.getElementById('useToday').checked;
- return formatDate(useToday ? getTodayStr() : document.getElementById('dateInput').value);
- }
- function setFmt(f) {
- fmt = f;
- document.getElementById('btnDocx').className = 'fmt-btn' + (f==='docx'?' active':'');
- document.getElementById('btnPdf').className = 'fmt-btn' + (f==='pdf'?' active':'');
- document.getElementById('dlBtn').textContent = '↓ Download ' + f.toUpperCase();
- updateHint();
- }
- function updateHint() {
- var c = safeFilename(getCompany());
- document.getElementById('fnameHint').textContent = 'Parv_Ashwani_Cover_' + c + '.' + fmt;
- }
- function updatePreview() {
- var m = getManager(), co = getCompany(), sub = getSubject(), dt = getDate();
- document.getElementById('pvDate').textContent = dt;
- document.getElementById('pvManager').textContent = m;
- document.getElementById('pvCompany').textContent = co;
- document.getElementById('pvSubject').textContent = sub;
- document.getElementById('pvGreet').textContent = 'Dear ' + m + ',';
- document.getElementById('greetHint').textContent = 'Greeting: Dear ' + m + ',';
- updateHint();
- }
- document.getElementById('useToday').addEventListener('change', function() {
- document.getElementById('dateRow').style.display = this.checked ? 'none' : 'flex';
- document.getElementById('todayHint').textContent = this.checked ? formatDate(getTodayStr()) : '';
- updatePreview();
- });
- document.getElementById('dateInput').addEventListener('input', function() {
- var v = this.value.replace(/\D/g,'').slice(0,8);
- this.value = v;
- document.getElementById('dateHint').textContent = v.length===8 ? formatDate(v) : '';
- updatePreview();
- });
- ['manager','company','subject'].forEach(function(id) {
- document.getElementById(id).addEventListener('input', updatePreview);
- });
- function init() {
- document.getElementById('todayHint').textContent = formatDate(getTodayStr());
- updatePreview();
- }
- init();
- async function doDownload() {
- var btn = document.getElementById('dlBtn');
- btn.disabled = true;
- btn.textContent = 'Generating…';
- try {
- if (fmt === 'docx') await downloadDocx();
- else await downloadPdf();
- } catch(e) {
- alert('Error: ' + e.message);
- }
- btn.disabled = false;
- btn.textContent = '↓ Download ' + fmt.toUpperCase();
- }
- async function downloadDocx() {
- var d = window.docx;
- if (!d) { alert('docx library not loaded yet, please wait a moment and try again.'); return; }
- var { Document, Packer, Paragraph, TextRun, AlignmentType, BorderStyle } = d;
- var m = getManager(), co = getCompany(), sub = getSubject(), dt = getDate() || formatDate(getTodayStr());
- var font = 'Calibri';
- var paras = [
- new Paragraph({ children: [new TextRun({ text: 'PARV ASHWANI', bold: true, size: 40, font, color: '1a1a1a' })], alignment: AlignmentType.CENTER, spacing: { after: 40 } }),
- new Paragraph({ children: [new TextRun({ text: 'Network & Security Engineer | DevOps | Cloud Infrastructure', size: 20, font, color: '555555', italics: true })], alignment: AlignmentType.CENTER, spacing: { after: 40 } }),
- new Paragraph({ children: [new TextRun({ text: 'parvashwaniofficial@gmail.com | +91 7007682851 | Lucknow, India | linkedin.com/in/parvashwani', size: 18, font, color: '555555' })], alignment: AlignmentType.CENTER, spacing: { after: 60 } }),
- new Paragraph({ border: { bottom: { style: BorderStyle.SINGLE, size: 8, color: '1A5276', space: 4 } }, spacing: { before: 40, after: 120 }, children: [] }),
- new Paragraph({ children: [new TextRun({ text: dt, size: 20, font, color: '555555' })], spacing: { before: 200, after: 80 } }),
- new Paragraph({ children: [new TextRun({ text: m, bold: true, size: 22, font })], spacing: { after: 40 } }),
- new Paragraph({ children: [new TextRun({ text: co, size: 22, font })], spacing: { after: 40 } }),
- new Paragraph({ children: [new TextRun({ text: 'Re: ' + sub, bold: true, size: 21, font, color: '1A5276' })], spacing: { before: 160, after: 100 } }),
- new Paragraph({ children: [new TextRun({ text: 'Dear ' + m + ',', size: 22, font })], spacing: { before: 80, after: 80 } }),
- ];
- var bodies = [
- 'I am writing to express my strong interest in a DevOps, Network Security, or SOC Analyst role at your organisation. With over 1.5 years of professional experience at HCLTech as a Tech Lead for Citrix NetScaler operations, a Microsoft Azure Network Engineer Associate certification, and a deep passion for automation and infrastructure reliability, I am confident I can deliver immediate and lasting value to your team.',
- 'At HCLTech, I have been the go-to engineer for complex Citrix CVAD and NetScaler challenges, leading root-cause analysis through detailed network trace and log review using tools like Wireshark and TShark. Beyond my individual contributions, I have taken on a mentorship role, guiding other engineers through Linux and FreeBSD administration, cloud architecture patterns across AWS, Azure, and GCP, and virtualisation platforms including VMware, Hyper-V, and XenServer. This breadth of knowledge positions me well for both hands-on DevOps pipelines and security operations environments.',
- 'I have a strong scripting background in Python, Bash, and Shell, which I apply to automate repetitive operational tasks and build internal tooling. My personal projects, including a self-hosted Git platform, a browser-based HAR network analyser, and a SAML debugging browser extension, demonstrate my instinct to solve real engineering problems with clean, deployable software. I am equally comfortable at the terminal and in a collaborative DevOps or SOC workflow.',
- 'I am particularly excited by opportunities that combine infrastructure reliability with security observability, whether that means building CI/CD pipelines, maintaining cloud networking at scale, or monitoring and responding to threats in a SOC environment. I thrive in fast-paced teams and bring an analytical, collaborative mindset to every challenge.',
- 'I would welcome the opportunity to discuss how my skills and experience align with your team\'s needs. Thank you for your time and consideration.',
- ];
- bodies.forEach(function(txt) {
- paras.push(new Paragraph({ children: [new TextRun({ text: txt, size: 22, font })], spacing: { before: 80, after: 80 }, alignment: AlignmentType.JUSTIFIED }));
- });
- paras.push(new Paragraph({ children: [new TextRun({ text: 'Sincerely,', size: 22, font })], spacing: { before: 200, after: 80 } }));
- paras.push(new Paragraph({ children: [new TextRun({ text: 'Parv Ashwani', bold: true, size: 22, font })], spacing: { before: 80 } }));
- var doc = new Document({
- sections: [{ properties: { page: { size: { width: 12240, height: 15840 }, margin: { top: 1080, right: 1080, bottom: 1080, left: 1080 } } }, children: paras }]
- });
- var buf = await Packer.toBuffer(doc);
- var blob = new Blob([buf], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
- triggerDownload(blob, 'Parv_Ashwani_Cover_' + safeFilename(co) + '.docx');
- }
- async function downloadPdf() {
- var jsPDF = window.jspdf && window.jspdf.jsPDF;
- if (!jsPDF) { alert('jsPDF not loaded yet.'); return; }
- var m = getManager(), co = getCompany(), sub = getSubject(), dt = getDate() || formatDate(getTodayStr());
- var doc = new jsPDF({ unit: 'pt', format: 'letter' });
- var W = doc.internal.pageSize.getWidth(), mg = 54, cw = W - mg * 2;
- doc.setFont('helvetica','bold'); doc.setFontSize(20); doc.setTextColor(26,26,26);
- doc.text('PARV ASHWANI', W/2, 60, { align: 'center' });
- doc.setFont('helvetica','italic'); doc.setFontSize(10); doc.setTextColor(85,85,85);
- doc.text('Network & Security Engineer | DevOps | Cloud Infrastructure', W/2, 75, { align: 'center' });
- doc.setFont('helvetica','normal'); doc.setFontSize(9);
- doc.text('parvashwaniofficial@gmail.com | +91 7007682851 | Lucknow, India | linkedin.com/in/parvashwani', W/2, 89, { align: 'center' });
- doc.setDrawColor(26,82,118); doc.setLineWidth(1.2); doc.line(mg, 98, W-mg, 98);
- var y = 116, lh = 13.5;
- doc.setFont('helvetica','normal'); doc.setFontSize(10); doc.setTextColor(85,85,85);
- doc.text(dt, mg, y); y += lh * 1.5;
- doc.setFont('helvetica','bold'); doc.setFontSize(11); doc.setTextColor(26,26,26);
- doc.text(m, mg, y); y += lh;
- doc.setFont('helvetica','normal');
- doc.text(co, mg, y); y += lh * 1.6;
- doc.setFont('helvetica','bold'); doc.setFontSize(10); doc.setTextColor(26,82,118);
- var subLines = doc.splitTextToSize('Re: ' + sub, cw);
- doc.text(subLines, mg, y); y += subLines.length * lh + 8;
- doc.setFont('helvetica','normal'); doc.setFontSize(10.5); doc.setTextColor(26,26,26);
- var bodyParas = [
- 'Dear ' + m + ',',
- 'I am writing to express my strong interest in a DevOps, Network Security, or SOC Analyst role at your organisation. With over 1.5 years of professional experience at HCLTech as a Tech Lead for Citrix NetScaler operations, a Microsoft Azure Network Engineer Associate certification, and a deep passion for automation and infrastructure reliability, I am confident I can deliver immediate and lasting value to your team.',
- 'At HCLTech, I have been the go-to engineer for complex Citrix CVAD and NetScaler challenges, leading root-cause analysis through detailed network trace and log review using tools like Wireshark and TShark. Beyond my individual contributions, I have taken on a mentorship role, guiding other engineers through Linux and FreeBSD administration, cloud architecture patterns across AWS, Azure, and GCP, and virtualisation platforms including VMware, Hyper-V, and XenServer. This breadth of knowledge positions me well for both hands-on DevOps pipelines and security operations environments.',
- 'I have a strong scripting background in Python, Bash, and Shell, which I apply to automate repetitive operational tasks and build internal tooling. My personal projects, including a self-hosted Git platform, a browser-based HAR network analyser, and a SAML debugging browser extension, demonstrate my instinct to solve real engineering problems with clean, deployable software. I am equally comfortable at the terminal and in a collaborative DevOps or SOC workflow.',
- 'I am particularly excited by opportunities that combine infrastructure reliability with security observability, whether that means building CI/CD pipelines, maintaining cloud networking at scale, or monitoring and responding to threats in a SOC environment. I thrive in fast-paced teams and bring an analytical, collaborative mindset to every challenge.',
- 'I would welcome the opportunity to discuss how my skills and experience align with your team\'s needs. Thank you for your time and consideration.'
- ];
- bodyParas.forEach(function(txt, i) {
- var lines = doc.splitTextToSize(txt, cw);
- var ph = doc.internal.pageSize.getHeight();
- if (y + lines.length * lh > ph - 60) { doc.addPage(); y = mg; }
- doc.text(lines, mg, y); y += lines.length * lh + 8;
- });
- y += 8;
- doc.text('Sincerely,', mg, y); y += lh * 2.5;
- doc.setFont('helvetica','bold');
- doc.text('Parv Ashwani', mg, y);
- doc.save('Parv_Ashwani_Cover_' + safeFilename(co) + '.pdf');
- }
- function triggerDownload(blob, name) {
- var url = URL.createObjectURL(blob);
- var a = document.createElement('a');
- a.href = url; a.download = name; document.body.appendChild(a); a.click();
- setTimeout(function() { URL.revokeObjectURL(url); document.body.removeChild(a); }, 500);
- }
- </script>
- </body>
- </html>
|