Lots of updates

This commit is contained in:
paul
2026-03-18 23:32:45 -04:00
parent 0e19326bcb
commit b202ec9954
33 changed files with 4312 additions and 648 deletions

View File

@@ -0,0 +1,269 @@
# Build Resume Workflow
Quick reference guide for building customized resumes and cover letters for job applications.
---
## Directory Structure
All job applications follow this standardized structure:
```
applications/
└── company-name/
└── position-slug/
├── paul-halvorsen-resume.md
├── paul-halvorsen-resume.pdf
├── paul-halvorsen-cover-letter.md
├── paul-halvorsen-cover-letter.pdf
└── job-breakdown.md (analysis & strategy)
```
**Examples:**
- `applications/zapier/backend-engineer/`
- `applications/stripe/backend-engineer/`
- `applications/files/senior-backend-engineer/`
---
## Quick Start (2 minutes)
### Invoke the Skill
```
/build-resume [paste job description or provide details]
```
The `/build-resume` skill will:
1. Check if you've already applied (prevents duplicates)
2. Create the directory structure
3. Analyze the job requirements
4. Generate customized resume and cover letter
5. Create `job-breakdown.md` with strategy notes
6. Build PDFs automatically
---
## Manual Build Process
If creating files manually instead of using `/build-resume`:
### Step 1: Create Directory
```bash
mkdir -p applications/company/position
```
### Step 2: Create Resume Markdown
File: `applications/company/position/paul-halvorsen-resume.md`
Copy the YAML template from `YAML-TEMPLATE.md` and add customized content.
### Step 3: Create Cover Letter Markdown
File: `applications/company/position/paul-halvorsen-cover-letter.md`
Use the same YAML template header.
### Step 4: Build PDFs
**Modern template (recommended for tech companies):**
```bash
make resume-modern FILE_NAME=applications/company/position/paul-halvorsen-resume
make resume-modern FILE_NAME=applications/company/position/paul-halvorsen-cover-letter
```
**Classic template (for traditional industries):**
```bash
make resume FILE_NAME=applications/company/position/paul-halvorsen-resume
make resume FILE_NAME=applications/company/position/paul-halvorsen-cover-letter
```
**Awesome-CV template (for startups/bold designs):**
```bash
make resume-awesome FILE_NAME=applications/company/position/paul-halvorsen-resume
make resume-awesome FILE_NAME=applications/company/position/paul-halvorsen-cover-letter
```
---
## Customization Checklist (5 minutes)
Before submitting your resume:
### ✅ Resume Content
- [ ] Summary tailored to role requirements
- [ ] Work experience reordered (most relevant first)
- [ ] Skills section includes role-specific technologies
- [ ] Metrics and achievements highlighted
- [ ] Length: 1 page (or 1-2 if detailed background needed)
- [ ] **CRITICAL: No fabricated numbers** — all facts from `paul-halvorsen-resume-detailed.md`
### ✅ YAML Metadata
- [ ] Contact info formatted correctly (quoted strings)
- [ ] Keywords match job requirements
- [ ] Email, phone, GitHub, LinkedIn all present
- [ ] Blog link included (optional but recommended)
### ✅ Cover Letter
- [ ] Addresses company mission/vision
- [ ] Acknowledges any experience gaps honestly
- [ ] Emphasizes transferable skills
- [ ] Tone is professional and authentic
- [ ] Length: 4-5 paragraphs (fits on one page)
- [ ] Specific to the company (not generic)
### ✅ PDF Quality
- [ ] Built with appropriate template for industry
- [ ] Layout clean and readable
- [ ] No broken formatting or overlapping text
- [ ] Opens without errors in PDF viewer
---
## No-Fabrication Rule (CRITICAL ⚠️)
**BLOCKING REQUIREMENT:** All numbers and metrics must come from `paul-halvorsen-resume-detailed.md`.
### ✅ Allowed
- Reordering existing information
- Reframing for clarity
- Removing less relevant details
- Using exact metrics from detailed resume
### ❌ Not Allowed
- Inventing metrics ("40+ engineers")
- Making up achievements not documented
- Exaggerating scales or customer counts
- Creating statistics not in detailed resume
### Pre-Write Checklist
For every bullet point with a number:
- [ ] Is this in `paul-halvorsen-resume-detailed.md`?
- [ ] If NO: remove it or rephrase without the number
- [ ] If YES: use the exact number/metric
---
## Post-Build Checklist (After Creating Resume)
### ✅ File Organization
- [ ] Files created in correct directory structure
- [ ] PDFs generated successfully
- [ ] Resume and cover letter both present
- [ ] Job breakdown created if using `/build-resume`
### ✅ Application Tracking
- [ ] Application logged in memory (if using `/build-resume`)
- [ ] Company/position combination recorded to prevent duplicates
- [ ] Application link saved for follow-up
### ✅ Before Submitting
- [ ] Verify job posting still active
- [ ] Check application deadline
- [ ] Find company career page
- [ ] Prepare LinkedIn connection message for hiring manager
---
## Template Selection Guide
| Template | Best For | Industry Examples |
|----------|----------|------------------|
| **jb2resume-modern** | Tech companies, startups | Stripe, GitLab, Zapier |
| **jb2resume** | Traditional industries | Banks, gov, established corps |
| **awesome-cv** | Growth-stage startups | Series A-C companies, design-forward |
---
## Useful Commands
### View Help
```bash
make help
```
### Clean Build Artifacts
```bash
make clean # Remove LaTeX logs
make cleanpaper # Remove specific PDF
make cleanall # Remove everything
```
### Build from Detailed Resume
All customized resumes draw facts from:
```
/home/paul/Public/resume/paul-halvorsen-resume-detailed.md
```
This is your source of truth for metrics, roles, and achievements.
---
## Finding Job Postings
See: `JOB-BOARDS-TO-SEARCH.md` (in parent resume directory)
Quick reference:
- **Daily:** WeWorkRemotely, RemoteOK, Built In
- **Weekly:** LinkedIn, Indeed, Cord.co, specialized boards
- **Monthly:** Secondary boards, target company careers pages
---
## Application Follow-Up
After building and submitting:
1. **LinkedIn connection:** Connect with hiring manager, mention your application
2. **Calendar reminder:** Set 1-week follow-up for non-responses
3. **Track responses:** Update job search dashboard with status
4. **Interview prep:** Review job-breakdown.md talking points
5. **Salary expectations:** Reference notes in job-breakdown.md
---
## Common Customizations
### Reordering Work Experience
Move most relevant role to top. Example: For Zapier backend engineer role, list Abnormal AI before Binary Defense because K8s/API experience is more directly relevant.
### Emphasizing Specific Skills
If role requires Kubernetes: mention "10 auto-scaling K8s clusters" in summary and relevant bullet. If role emphasizes API design: lead with REST API experience.
### Addressing Gaps
Use cover letter to honestly address missing technologies:
- "I haven't worked with [tech], but I'm fluent in [similar tech] and have quickly mastered new frameworks."
- Example: Django gap → "Python expert, REST APIs are my core strength, DRF is learnable"
### Metrics Worth Highlighting
From your background:
- 10 K8s clusters (Abnormal AI)
- 90% CPU reduction (Binary Defense)
- 80% network optimization (Binary Defense)
- Thousands of Fortune 500 endpoints (Binary Defense)
- Thousands of records at scale (NSA)
- 15+ years API development (career)
---
## File Locations Reference
- **Skill directory:** `/home/paul/Public/resume/.claude/skills/build-resume/`
- **Resume source:** `/home/paul/Public/resume/paul-halvorsen-resume-detailed.md`
- **Job boards:** `/home/paul/Public/resume/JOB-BOARDS-TO-SEARCH.md`
- **LinkedIn guide:** `/home/paul/Public/resume/LINKEDIN-OPTIMIZATION.md`
- **Job search dashboard:** `/home/paul/Public/resume/job_search.html`
- **Application tracker:** `/home/paul/.claude/projects/-home-paul-Public-resume/memory/applications_tracker.md`
---
## Quick Links
- **Your GitHub:** https://github.com/malwhile
- **Your Blog:** https://flow.halvo.me
- **Detailed Resume:** `/home/paul/Public/resume/paul-halvorsen-resume-detailed.md`
---
## Last Updated
March 18, 2026

View File

@@ -0,0 +1,122 @@
# build-resume Skill
Local project skill for generating tailored resumes and cover letters for job applications.
## Files in This Directory
- **skill.md** — Skill definition, documentation, and guidelines
- **BUILD-RESUME-WORKFLOW.md** — Step-by-step workflow and checklists
- **YAML-TEMPLATE.md** — Copy-paste YAML metadata template with examples
- **README.md** — This file
## Quick Start
```
/build-resume [paste job description or provide details]
```
## How to Use
### Automatic (Recommended)
```
/build-resume [job description]
```
The skill will:
1. Check for duplicate applications (prevents re-applying to same role)
2. Create directory structure: `company/position/`
3. Generate customized resume and cover letter
4. Create job analysis with fit assessment and strategy
5. Build PDFs automatically
### Manual
1. Create `company/position/` directory
2. Copy YAML template from `YAML-TEMPLATE.md`
3. Customize resume and cover letter markdown files
4. Build PDFs with make commands
See `BUILD-RESUME-WORKFLOW.md` for detailed steps and checklists.
## Key Files and Locations
```
/home/paul/Public/resume/
├── paul-halvorsen-resume-detailed.md ← Source of truth for all facts
├── JOB-BOARDS-TO-SEARCH.md ← Where to find job postings
├── LINKEDIN-OPTIMIZATION.md ← Profile optimization guide
├── job_search.html ← Job dashboard (35+ positions)
├── .gitignore ← Includes applications/
├── .claude/
│ └── skills/
│ └── build-resume/ ← This skill
│ ├── skill.md
│ ├── BUILD-RESUME-WORKFLOW.md
│ ├── YAML-TEMPLATE.md
│ └── README.md (you are here)
└── applications/ ← All job applications (not committed)
└── [company]/
└── [position]/
├── paul-halvorsen-resume.md
├── paul-halvorsen-resume.pdf
├── paul-halvorsen-cover-letter.md
├── paul-halvorsen-cover-letter.pdf
└── job-breakdown.md
```
## Important Rules
### ⚠️ No Fabrication
**All numbers and metrics must come from `paul-halvorsen-resume-detailed.md`**
Examples of violations:
- ❌ "$9 trillion in assets" (not in detailed resume)
- ❌ "40+ engineers" (not in detailed resume)
- ✓ "10 auto-scaling K8s clusters" (IS in detailed resume)
- ✓ "90% CPU reduction" (IS in detailed resume)
### YAML Formatting
- All contact info must be quoted: `"Email: paul.halvorsen@pm.me"`
- Keywords are comma-separated
- Use exact contact info (no variations)
### Cover Letter
- Be honest about gaps ("I haven't worked with X, but...")
- Address company mission
- Focus on transferable skills
- Professional and authentic tone
## Template Selection
| Template | Best For |
|----------|----------|
| `jb2resume-modern` | Tech companies, startups |
| `jb2resume` | Traditional industries |
| `awesome-cv` | Growth-stage startups |
## Workflow
1. Find job posting (see `JOB-BOARDS-TO-SEARCH.md`)
2. Use `/build-resume [description]`
3. Review job-breakdown.md for fit and strategy
4. Customize resume/cover letter if needed
5. Verify position on company careers page
6. Apply directly on company website
7. Connect with hiring manager on LinkedIn
## Making Changes
To update skill documentation:
1. Edit files in this directory: `/home/paul/Public/resume/.claude/skills/build-resume/`
2. Changes are local to this project
3. Git will track changes to `.claude/skills/`
## Need Help?
- **Workflow steps?** See `BUILD-RESUME-WORKFLOW.md`
- **YAML format?** See `YAML-TEMPLATE.md`
- **Full skill docs?** See `skill.md`
- **Detailed background?** See `/home/paul/Public/resume/paul-halvorsen-resume-detailed.md`
---
**Last Updated:** March 18, 2026

View File

@@ -0,0 +1,185 @@
# YAML Metadata Template
Copy this template into the top of every customized resume and cover letter markdown file.
## Standard Template
```yaml
---
name: Paul Halvorsen
keywords: backend engineer, api design, python, [ADD ROLE-SPECIFIC KEYWORDS]
left-column:
- "Email: paul.halvorsen@pm.me"
- "Phone: +1-410-236-4665"
right-column:
- "GitHub: github.com/malwhile"
- "LinkedIn: linkedin.com/in/paul-halvorsen"
- "Blog: flow.halvo.me"
fontsize: 10pt
fontenc: T1
urlcolor: blue
linkcolor: magenta
numbersections: false
---
```
## Important Notes
### Quoted Strings (CRITICAL)
- **All contact info must be quoted** to avoid YAML parsing issues
- Format: `"Label: value"`
- ✓ Correct: `- "Email: paul.halvorsen@pm.me"`
- ❌ Wrong: `- Email: paul.halvorsen@pm.me`
### Keywords
- Add role-specific keywords to improve ATS matching
- Examples:
- Backend role: `backend engineer, python, api design, rest api, distributed systems, kubernetes`
- Full-stack role: `full-stack engineer, python, react, javascript, frontend, backend`
- Security role: `security engineer, python, cryptography, authentication, oauth`
- Aim for 8-12 keywords
### Contact Info Guidelines
- Email: Always include (paul.halvorsen@pm.me)
- Phone: Always include (+1-410-236-4665)
- GitHub: Always include (github.com/malwhile)
- LinkedIn: Always include (linkedin.com/in/paul-halvorsen)
- Blog: Optional but recommended (flow.halvo.me)
- DO NOT include: "Citizen of the United States", generic titles like "Remote"
### Font & Color Options
These are sensible defaults. Rarely need to change:
- `fontsize: 10pt` — standard resume font size
- `fontenc: T1` — font encoding for special characters
- `urlcolor: blue` — hyperlink color
- `linkcolor: magenta` — cross-reference link color
- `numbersections: false` — don't number resume sections
### Optional: Add Name Color
```yaml
name-color: DarkSlateGray
```
SVG color names work: `DarkSlateGray`, `Tomato`, `DodgerBlue`, etc.
### Optional: Add Section Header Color
```yaml
section-color: Tomato
```
---
## Example Customizations
### Backend Engineer Focus
```yaml
---
name: Paul Halvorsen
keywords: backend engineer, python, api design, rest apis, oauth, authentication, distributed systems, kubernetes, docker, aws
left-column:
- "Email: paul.halvorsen@pm.me"
- "Phone: +1-410-236-4665"
right-column:
- "GitHub: github.com/malwhile"
- "LinkedIn: linkedin.com/in/paul-halvorsen"
- "Blog: flow.halvo.me"
fontsize: 10pt
fontenc: T1
urlcolor: blue
linkcolor: magenta
numbersections: false
---
```
### Security Engineer Focus
```yaml
---
name: Paul Halvorsen
keywords: security engineer, cryptography, authentication, oauth, python, golang, c, penetration testing, secure systems
left-column:
- "Email: paul.halvorsen@pm.me"
- "Phone: +1-410-236-4665"
right-column:
- "GitHub: github.com/malwhile"
- "LinkedIn: linkedin.com/in/paul-halvorsen"
- "Blog: flow.halvo.me"
fontsize: 10pt
fontenc: T1
urlcolor: blue
linkcolor: magenta
numbersections: false
---
```
### Full-Stack Engineer Focus
```yaml
---
name: Paul Halvorsen
keywords: full-stack engineer, python, react, typescript, javascript, rest apis, distributed systems, kubernetes
left-column:
- "Email: paul.halvorsen@pm.me"
- "Phone: +1-410-236-4665"
right-column:
- "GitHub: github.com/malwhile"
- "LinkedIn: linkedin.com/in/paul-halvorsen"
- "Blog: flow.halvo.me"
fontsize: 10pt
fontenc: T1
urlcolor: blue
linkcolor: magenta
numbersections: false
---
```
---
## Validation Checklist
Before using the template:
- [ ] All contact info is quoted with "Label: value" format
- [ ] Keywords are comma-separated
- [ ] Email is paul.halvorsen@pm.me
- [ ] Phone is +1-410-236-4665
- [ ] GitHub is github.com/malwhile
- [ ] LinkedIn is linkedin.com/in/paul-halvorsen (no https://)
- [ ] Blog is flow.halvo.me (if including)
- [ ] No "Citizen of the United States" in right-column
- [ ] No generic "Remote" keyword unless job-specific
- [ ] fontsize, fontenc, urlcolor, linkcolor match defaults
---
## Date Formatting
Use the `\resumedate{}` macro for smaller dates under section headers:
```markdown
### Software Engineer | Abnormal AI
\resumedate{**January 2026 Present**}
```
This makes dates visually distinct from section headers while keeping them readable.
---
## After YAML Metadata
Start your resume or cover letter content immediately after the closing `---`:
```yaml
---
name: Paul Halvorsen
...
---
## Summary
[Your summary content here]
## Technical Skills
[Skills content here]
```
---
Last Updated: March 18, 2026

View File

@@ -0,0 +1,204 @@
---
name: build-resume
description: Generate tailored resumes and cover letters for specific job applications using Paul's detailed resume as context
type: skill
arguments:
- name: job_description
description: Job posting text or details (paste job description, link, or brief details)
required: true
output:
- resume_md: Customized resume in markdown with YAML metadata
- resume_pdf: Compiled PDF resume
- cover_letter_md: Customized cover letter in markdown
- cover_letter_pdf: Compiled PDF cover letter
- job_breakdown_md: Analysis, fit assessment, and strategy notes
---
# build-resume Skill
Generate tailored resumes and cover letters for specific job applications.
## Quick Start
```
/build-resume [paste job description or provide details]
```
## Output Structure
Creates organized directory structure:
```
applications/
└── company-name/
└── job-title/
├── paul-halvorsen-resume.md
├── paul-halvorsen-resume.pdf
├── paul-halvorsen-cover-letter.md
├── paul-halvorsen-cover-letter.pdf
└── job-breakdown.md (analysis)
```
Examples: `applications/zapier/backend-engineer/`, `applications/stripe/senior-backend-engineer/`
## YAML Metadata Format
**IMPORTANT:** Use quoted strings for contact info to avoid YAML parsing issues.
### Template
```yaml
---
name: Paul Halvorsen
keywords: key1, key2, key3
left-column:
- "Email: paul.halvorsen@pm.me"
- "Phone: +1-410-236-4665"
right-column:
- "GitHub: github.com/malwhile"
- "LinkedIn: linkedin.com/in/paul-halvorsen"
- "Blog: flow.halvo.me"
fontsize: 10pt
fontenc: T1
urlcolor: blue
linkcolor: magenta
numbersections: false
---
```
### Contact Info Guidelines
- Always include email and phone
- Include GitHub link
- Include LinkedIn (preferred over "Remote" keyword)
- Blog link is optional
- Do NOT include "Citizen of the United States" in right-column for job resumes
- Use format: `"Label: value"` (quoted entire string)
## Dates Formatting
Use the `\resumedate{}` macro to make dates smaller than headers:
```markdown
### Job Title | Company
\resumedate{**January 2026 Present**}
```
## Building PDFs
### Classic Template
```bash
make resume FILE_NAME=company/job-title/paul-halvorsen-resume
make resume FILE_NAME=company/job-title/paul-halvorsen-cover-letter
```
### Modern Template (Recommended)
```bash
make resume-modern FILE_NAME=company/job-title/paul-halvorsen-resume
make resume-modern FILE_NAME=company/job-title/paul-halvorsen-cover-letter
```
### Awesome-CV Template
```bash
make resume-awesome FILE_NAME=company/job-title/paul-halvorsen-resume
make resume-awesome FILE_NAME=company/job-title/paul-halvorsen-cover-letter
```
## Resume Customization Strategy
1. **Lead with relevant technical skills** from job description
2. **Reorder work experience** (most relevant first)
3. **Highlight metrics** from roles that match JD requirements
4. **Frame gaps honestly** in cover letter (e.g., "I haven't worked with X, but...")
5. **De-emphasize Sr/Staff titles** when applying to mid-level roles
## CRITICAL: No Fabrication Rule
**BLOCKING REQUIREMENT:** All numbers and metrics must come from `paul-halvorsen-resume-detailed.md`.
### Pre-Write Checklist
For every bullet point with a number:
- [ ] Is this in `paul-halvorsen-resume-detailed.md`?
- [ ] If NO: remove it or rephrase without the number
- [ ] If YES: use the exact number/metric
### Allowed
- Reordering existing information
- Reframing for clarity
- Removing less relevant details
- Using exact metrics from detailed resume
### Not Allowed
- Inventing metrics
- Making up achievements
- Exaggerating scales or customer counts
- Creating statistics not documented
### Examples
- ✓ "Performance improvements: reduced CPU usage ~90%" (IS in detailed resume)
- ✓ "10 auto-scaling clusters" (IS in detailed resume)
- ✓ "Customers: thousands of Fortune 500 endpoints" (IS in detailed resume)
- ❌ "$9 trillion in assets" (NOT in detailed resume)
- ❌ "40+ engineers" (NOT in detailed resume)
## Cover Letter Approach
- **Be upfront about gaps** (e.g., "I haven't worked professionally with C#")
- **Emphasize transferable skills** and learning ability
- **Address company mission** (e.g., travel industry, fintech, etc.)
- **Frame intentional career moves** (e.g., moving away from on-call work to sustainable roles)
- Keep tone professional, confident, and honest—not defensive
## Key Clarifications from Paul's Background
### CompTIA Security+ Certification
- **Status:** Expired 04/04/2024 (no longer active)
- **Note:** Do NOT list as active in resumes
### NSA Experience - Database Scale
- **Database:** Thousands of records (not hundreds of thousands)
- Use in resume: "thousands of records" or similar
### Language Learning Capability
- Paul has mastered 5+ languages (Rust, Python, C, GoLang, Java)
- Use when applying to roles with unfamiliar tech stacks
- Frame as evidence of quick learning ability
### Tech Stack Preferences
- **Primary:** Backend, systems programming, security
- **Secondary:** Full-stack if learning opportunity (new languages/frameworks)
- **Avoid:** Emphasis on junior mentoring, heavy management
## ATS Optimization
- Aim for 75-85% keyword match with job description
- Include role-specific technologies in skills section
- Use exact terminology from JD where possible
- Avoid creative formatting that breaks ATS parsing
## Application Workflow
1. Use `/build-resume [job description]` to generate customized documents
2. Review job-breakdown.md for fit assessment and strategy
3. Update applications_tracker.md to log the application
4. Build PDFs using appropriate template
5. Verify position on company careers page
6. Submit through company site (not job board)
7. Connect with hiring manager on LinkedIn
## File Locations
- **Resume source:** `/home/paul/Public/resume/paul-halvorsen-resume-detailed.md`
- **This skill:** `/home/paul/Public/resume/.claude/skills/build-resume/`
- **Workflow guide:** `/home/paul/Public/resume/.claude/skills/build-resume/BUILD-RESUME-WORKFLOW.md`
- **Job boards:** `/home/paul/Public/resume/JOB-BOARDS-TO-SEARCH.md`
- **LinkedIn guide:** `/home/paul/Public/resume/LINKEDIN-OPTIMIZATION.md`
- **Job search dashboard:** `/home/paul/Public/resume/job_search.html`
- **Application tracker:** `/home/paul/.claude/projects/-home-paul-Public-resume/memory/applications_tracker.md`
## Notes for Implementation
- Update `paul-halvorsen-resume-detailed.md` with any role clarifications (scale, tech, responsibilities)
- Detailed resume serves as source of truth for customized versions
- LinkedIn URL: linkedin.com/in/paul-halvorsen (without https://)
- GitHub URL: github.com/malwhile
- Email: paul.halvorsen@pm.me
- Phone: +1-410-236-4665