|
|
@@ -0,0 +1,330 @@
|
|
|
+<!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>
|