Compare commits
9 Commits
ed9c347e6b
...
b202ec9954
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b202ec9954 | ||
|
|
0e19326bcb | ||
|
|
4d7e1b8b58 | ||
|
|
e6a78bab02 | ||
|
|
28592cdede | ||
|
|
27d354ba18 | ||
|
|
62e8397b57 | ||
|
|
697312036f | ||
|
|
649f84aff7 |
99
.claude/commands/local-build-resume.md
Normal file
99
.claude/commands/local-build-resume.md
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
# /build-resume
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
Generate a tailored resume based on the provided job descriptoin and my existing background. Use the file with detailed in it's name as context for my experience. Optimize keywords and align experience with job requirements. Format the output for ATS (Applicat Tracking Systems) compatibility
|
||||||
|
|
||||||
|
### Profile Summary
|
||||||
|
|
||||||
|
- Seeking: Backend/Application/Security/Systems Programming roles (Jr-Mid level ONLY)
|
||||||
|
- Level: Jr-Mid developer (level 1-2) - NO Senior/Sr/Staff/Founding titles
|
||||||
|
- Requirements: Remote, no on-call, $130k+, low responsibility, no mentoring/management
|
||||||
|
- Key Skills: Rust, Python, C, GoLang, MySQL, Docker, REST APIs, Security, CI/CD
|
||||||
|
- Also open to: Other remote roles (non-dev) that pay well and are learnable short-term
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
- Either paste the entire description OR link to the job description immediatly after the command
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
### Step 1: Analyze the Job Description
|
||||||
|
- Extract the top 5-8 hard skills and soft skills required.
|
||||||
|
- Identify the core problems the company is trying to solve with this role.
|
||||||
|
- Note specific keywords, technologies, and metrics emphasized in the text.
|
||||||
|
- Verify with user if anything undesirable flags with the description before continuing
|
||||||
|
|
||||||
|
### Step 2: Create the directory structure
|
||||||
|
- Create or use the directory with the company name
|
||||||
|
- Create a subdirectory of the job title
|
||||||
|
- Inside, put a markdown file of the job description
|
||||||
|
- Put the resume with name paul-halvorsen-resume.md
|
||||||
|
- Put the coverletter with name paul-halvorsen-cover-letter.md
|
||||||
|
- Put the analysis in job-breakdown.md
|
||||||
|
- When building with make, the pdfs of the resume and cover letter will be here as well
|
||||||
|
|
||||||
|
### Step 3: Tailor the Resume Content
|
||||||
|
- **Professional Summary:** Rewrite to directly address the company's mission and the role's primary objectives using the extracted keywords.
|
||||||
|
- **Skills Section:** Reorder and prioritize skills to match the job description's hierarchy.
|
||||||
|
- **Experience Bullets:**
|
||||||
|
- Rewrite bullet points to highlight achievements that mirror the job requirements.
|
||||||
|
- Use the "Action Verb + Task + Result (with Metrics)" formula.
|
||||||
|
- Ensure specific keywords from the JD appear naturally in the context of your past work.
|
||||||
|
- **Gap Analysis:** If the user provided their current resume, identify missing skills or experiences and suggest how to frame existing experience to cover those gaps.
|
||||||
|
- **Metadata Header:**
|
||||||
|
- Always include the following: Email, Phone, Git, Blog, LinkedIn
|
||||||
|
- Include the title of each value
|
||||||
|
- Include "Citizen of the United States"
|
||||||
|
|
||||||
|
### Step 4: Formatting & Output
|
||||||
|
- Generate the resume in **Markdown** format (for easy conversion to PDF/Word).
|
||||||
|
- Ensure clean hierarchy (H1 for Name, H2 for Sections).
|
||||||
|
- Keep it to a maximum of 2 pages (simulated by content density).
|
||||||
|
- Include a "ATS Optimization Score" estimate at the top based on keyword matching.
|
||||||
|
- Chronological work experience (details of older positions can be greatly reduced to save space)
|
||||||
|
|
||||||
|
### Step 5: Cover Letter
|
||||||
|
- Briefly draft a 3-paragraph cover letter hook that connects the user's specific value proposition to the company's stated needs.
|
||||||
|
- If the position is below general experience level, note that in the cover letter and specify that the position is being looked at to provide greater field breadth
|
||||||
|
- Be up front about gaps and provide reasons that previous experience will cover those gaps
|
||||||
|
|
||||||
|
### Step 6: Build the pdfs
|
||||||
|
- Use `jb2resume-modern` theme
|
||||||
|
- Build Resume Command: `make resume-modern FILE_NAME=path/to/resume`
|
||||||
|
- Build Cover Letter Command: `make resume-modern FILE_NAME=path/to/coverletter`
|
||||||
|
|
||||||
|
## Constraints & Guidelines
|
||||||
|
- **Tone:** Professional, confident, and concise.
|
||||||
|
- **Truthfulness:** Do not invent experiences. If a skill is missing, suggest phrasing like "Familiar with..." or "Exposure to..." rather than claiming expertise.
|
||||||
|
- **Metrics:** Prioritize quantifiable results (e.g., "Increased efficiency by 20%") over vague descriptions.
|
||||||
|
- **Privacy:** Remind the user to replace placeholders like `[Phone Number]`, `[Email]`, and `[City, State]` with their actual data before sending.
|
||||||
|
- **Hard Requirements:**
|
||||||
|
- Remote only
|
||||||
|
- No on-call rotations (flag before proceeding if description mentions on-call, pager duty, 24x7, "total ownership", "you own it in production", or similar)
|
||||||
|
- $100k+
|
||||||
|
- No management responsibilities
|
||||||
|
- **Soft Requirements:**
|
||||||
|
- No mgmt/mentoring
|
||||||
|
- No mentoring responsibilities
|
||||||
|
- Jr or Mid level only (level 1-2) - no senior/sr/staff/principal/founding/lead titles
|
||||||
|
- $130k+
|
||||||
|
- **Preferences**
|
||||||
|
- Low responsibility
|
||||||
|
- backend/application/security/systems programming focus
|
||||||
|
- Willing to take mid-level to learn new problem space or tech stack
|
||||||
|
- Willing to take lower salary to learn new problem space or tech stack
|
||||||
|
- **On-call flag protocol**
|
||||||
|
- Before creating resume/cover letter materials, flag any job description language that implies on-call:
|
||||||
|
- Explicit: "on-call rotation", "pager duty", "24x7"
|
||||||
|
- Implicit: "total ownership", "you own systems in production", "production accountability", "incident response"
|
||||||
|
- Ask user whether to proceed before continuing.
|
||||||
|
|
||||||
|
|
||||||
|
## Example Interaction
|
||||||
|
**User:** `/build-resume` [Paste Job Description] OR [Paste link to Job Description]
|
||||||
|
|
||||||
|
**AI Response:**
|
||||||
|
1. **Analysis:** "I've analyzed the Senior Python Engineer role. Key focus areas are AWS Lambda, Django, and scaling microservices..."
|
||||||
|
2. **Resume Draft:** Create the resume in
|
||||||
|
3. **Cover Letter Hook:** [Brief draft]
|
||||||
|
4. **Next Steps:** "Review the 'Skills' section to ensure the AWS certifications are prominent. Would you like me to generate a specific cover letter?"
|
||||||
296
.claude/docs/PROJECT-STRUCTURE.md
Normal file
296
.claude/docs/PROJECT-STRUCTURE.md
Normal file
@@ -0,0 +1,296 @@
|
|||||||
|
# Project Structure
|
||||||
|
|
||||||
|
Complete overview of your resume project's folder and file organization.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Folder Organization
|
||||||
|
|
||||||
|
```
|
||||||
|
/home/paul/Public/resume/
|
||||||
|
│
|
||||||
|
├── 📁 .claude/ ← Claude Code project config
|
||||||
|
│ ├── skills/ ← Local project skills
|
||||||
|
│ │ ├── build-resume/ ← Skill: Generate customized resumes
|
||||||
|
│ │ │ ├── skill.md ← Skill definition & docs
|
||||||
|
│ │ │ ├── BUILD-RESUME-WORKFLOW.md ← Step-by-step workflow
|
||||||
|
│ │ │ ├── YAML-TEMPLATE.md ← Copy-paste metadata templates
|
||||||
|
│ │ │ └── README.md ← Skill overview
|
||||||
|
│ │ │
|
||||||
|
│ │ └── job-search/ ← Skill: Find & verify job positions
|
||||||
|
│ │ ├── skill.md ← Skill definition & docs
|
||||||
|
│ │ ├── SEARCH-STRATEGY.md ← 3-tier search system
|
||||||
|
│ │ ├── CRITERIA-CHECKLIST.md ← Position evaluation & scoring
|
||||||
|
│ │ ├── JOB-BOARDS-TO-SEARCH.md ← 12+ job board references
|
||||||
|
│ │ └── README.md ← Skill overview
|
||||||
|
│ │
|
||||||
|
│ ├── settings.local.json ← Project permissions
|
||||||
|
│ └── commands/ ← Custom commands (if any)
|
||||||
|
│
|
||||||
|
├── 📁 notes/ ← Documentation & optimization guides
|
||||||
|
│ ├── README.md ← Overview of notes folder
|
||||||
|
│ ├── LINKEDIN-OPTIMIZATION.md ← LinkedIn profile optimization audit
|
||||||
|
│ └── [other optimization docs]
|
||||||
|
│
|
||||||
|
├── 📁 search/ ← Search results (not committed ❌)
|
||||||
|
│ └── [discovered positions, temporary files]
|
||||||
|
│
|
||||||
|
├── 📁 applications/ ← Job applications (not committed ❌)
|
||||||
|
│ ├── zapier/
|
||||||
|
│ │ └── backend-engineer/
|
||||||
|
│ │ ├── paul-halvorsen-resume.md
|
||||||
|
│ │ ├── paul-halvorsen-resume.pdf
|
||||||
|
│ │ ├── paul-halvorsen-cover-letter.md
|
||||||
|
│ │ ├── paul-halvorsen-cover-letter.pdf
|
||||||
|
│ │ └── job-breakdown.md
|
||||||
|
│ ├── stripe/
|
||||||
|
│ ├── [23 more companies]
|
||||||
|
│ └── ...
|
||||||
|
│
|
||||||
|
├── 📁 templates/ ← LaTeX resume templates
|
||||||
|
│ ├── jb2resume.latex ← Classic template
|
||||||
|
│ ├── jb2resume-modern.latex ← Modern template (recommended)
|
||||||
|
│ ├── awesome-cv.latex ← Bold modern template
|
||||||
|
│ ├── cover-letter.latex ← Cover letter template
|
||||||
|
│ └── ...
|
||||||
|
│
|
||||||
|
├── 📁 files/ ← Variant resumes/cover letters
|
||||||
|
│ ├── paul-halvorsen-files-backend-engineer.md
|
||||||
|
│ ├── paul-halvorsen-files-backend-engineer.pdf
|
||||||
|
│ └── ...
|
||||||
|
│
|
||||||
|
├── 📄 paul-halvorsen-resume-detailed.md ← ⭐ SOURCE OF TRUTH
|
||||||
|
│ └── Complete background, metrics, all roles, projects, education
|
||||||
|
│
|
||||||
|
├── 📄 paul-halvorsen-resume.md ← Default concise resume
|
||||||
|
├── 📄 paul-halvorsen-resume.pdf
|
||||||
|
├── 📄 job_search.html ← 35+ verified positions dashboard
|
||||||
|
├── 📄 index.html ← Project index (if any)
|
||||||
|
│
|
||||||
|
├── 📄 .gitignore ← Ignores: applications/, search/
|
||||||
|
├── 📄 Makefile ← Build commands (make resume, etc)
|
||||||
|
├── 📄 Dockerfile ← Container for resume building
|
||||||
|
├── 📄 CLAUDE.md ← Project instructions for Claude
|
||||||
|
├── 📄 PROJECT-STRUCTURE.md ← This file
|
||||||
|
│
|
||||||
|
└── 📄 [other git-tracked files]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## File Categories
|
||||||
|
|
||||||
|
### Core Documents (Committed ✅)
|
||||||
|
|
||||||
|
**Resume Source:**
|
||||||
|
- `paul-halvorsen-resume-detailed.md` — **SOURCE OF TRUTH** for all metrics and facts
|
||||||
|
- All roles, responsibilities, metrics
|
||||||
|
- All projects and education
|
||||||
|
- Used to generate all customized resumes
|
||||||
|
|
||||||
|
- `paul-halvorsen-resume.md` — Default concise version
|
||||||
|
- Templates in `templates/` — LaTeX formats for PDF generation
|
||||||
|
|
||||||
|
**Documentation:**
|
||||||
|
- `PROJECT-STRUCTURE.md` — This file (folder overview)
|
||||||
|
- `CLAUDE.md` — Project instructions and rules for Claude Code
|
||||||
|
- `Makefile` — Build and deployment commands
|
||||||
|
|
||||||
|
**Notes & Guides:**
|
||||||
|
- `notes/` folder — Optimization guides and documentation
|
||||||
|
- `LINKEDIN-OPTIMIZATION.md` — LinkedIn profile audit and strategy
|
||||||
|
- [Other reference materials as needed]
|
||||||
|
|
||||||
|
**Dashboards:**
|
||||||
|
- `job_search.html` — Dashboard of 35+ verified positions (or more as you find them)
|
||||||
|
- `index.html` — Main project page (optional)
|
||||||
|
|
||||||
|
### Local (Not Committed ❌)
|
||||||
|
|
||||||
|
**`.gitignore` contents:**
|
||||||
|
- `applications/` — All submitted job applications
|
||||||
|
- Each company has a folder: `zapier/backend-engineer/`, etc.
|
||||||
|
- Contains: resume, cover letter, job breakdown, PDFs
|
||||||
|
- NOT committed (local work only)
|
||||||
|
|
||||||
|
- `search/` — Job search results and discovered positions
|
||||||
|
- Temporary files, tracking documents
|
||||||
|
- NOT committed (local work only)
|
||||||
|
|
||||||
|
### Skills (In `.claude/skills/`)
|
||||||
|
|
||||||
|
**`build-resume/` Skill:**
|
||||||
|
- `skill.md` — Skill definition and documentation
|
||||||
|
- `BUILD-RESUME-WORKFLOW.md` — Workflow steps and checklists
|
||||||
|
- `YAML-TEMPLATE.md` — Copy-paste metadata templates
|
||||||
|
- `README.md` — Quick start guide
|
||||||
|
|
||||||
|
**`job-search/` Skill:**
|
||||||
|
- `skill.md` — Skill definition and documentation
|
||||||
|
- `SEARCH-STRATEGY.md` — 3-tier search system (daily/weekly/monthly)
|
||||||
|
- `CRITERIA-CHECKLIST.md` — Position evaluation template
|
||||||
|
- `JOB-BOARDS-TO-SEARCH.md` — 12+ job board reference list
|
||||||
|
- `README.md` — Quick start guide
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Workflows
|
||||||
|
|
||||||
|
### Building a Resume
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Find position (using /job-search skill)
|
||||||
|
2. Verify on company careers page
|
||||||
|
3. /build-resume [job description]
|
||||||
|
→ Creates: applications/company/position/
|
||||||
|
→ Generates: resume.md, cover-letter.md, job-breakdown.md
|
||||||
|
4. make resume-modern FILE_NAME=applications/company/position/paul-halvorsen-resume
|
||||||
|
→ Generates: resume.pdf, cover-letter.pdf
|
||||||
|
5. Apply to company
|
||||||
|
6. Log in applications_tracker (memory system)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Searching for Jobs
|
||||||
|
|
||||||
|
```
|
||||||
|
1. /job-search find-positions
|
||||||
|
→ Searches job boards from JOB-BOARDS-TO-SEARCH.md
|
||||||
|
2. Evaluate using CRITERIA-CHECKLIST.md (1-10 fit score)
|
||||||
|
3. Verify on company careers page
|
||||||
|
4. /job-search track-found [company] [role] [URL] [fit]
|
||||||
|
→ Saves to search/
|
||||||
|
→ Updates job_search.html
|
||||||
|
5. If good fit → /build-resume to apply
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Files by Purpose
|
||||||
|
|
||||||
|
### If you need to...
|
||||||
|
|
||||||
|
**Build a customized resume:**
|
||||||
|
- Read: `.claude/skills/build-resume/BUILD-RESUME-WORKFLOW.md`
|
||||||
|
- Use: `/build-resume [job description]`
|
||||||
|
- Templates: `.claude/skills/build-resume/YAML-TEMPLATE.md`
|
||||||
|
|
||||||
|
**Find job positions:**
|
||||||
|
- Read: `.claude/skills/job-search/SEARCH-STRATEGY.md`
|
||||||
|
- Use: `/job-search find-positions`
|
||||||
|
- Boards: `.claude/skills/job-search/JOB-BOARDS-TO-SEARCH.md`
|
||||||
|
|
||||||
|
**Evaluate a position:**
|
||||||
|
- Read: `.claude/skills/job-search/CRITERIA-CHECKLIST.md`
|
||||||
|
- Score: 1-10 fit assessment
|
||||||
|
- Track: `/job-search track-found [details]`
|
||||||
|
|
||||||
|
**Optimize LinkedIn:**
|
||||||
|
- Read: `notes/LINKEDIN-OPTIMIZATION.md`
|
||||||
|
- Review: Full audit with recommendations
|
||||||
|
- Action: Follow suggested improvements
|
||||||
|
|
||||||
|
**Understand project rules:**
|
||||||
|
- Read: `CLAUDE.md` (no-fabrication rule, resume guidelines)
|
||||||
|
- Read: `PROJECT-STRUCTURE.md` (this file)
|
||||||
|
|
||||||
|
**Build resume PDFs:**
|
||||||
|
- Command: `make resume-modern FILE_NAME=applications/company/position/paul-halvorsen-resume`
|
||||||
|
- See: `Makefile` for all build options
|
||||||
|
- Requires: Docker/Podman installed
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Memory System
|
||||||
|
|
||||||
|
Located at: `/home/paul/.claude/projects/-home-paul-Public-resume/memory/`
|
||||||
|
|
||||||
|
**Key memory files:**
|
||||||
|
- `applications_tracker.md` — Track all submitted applications
|
||||||
|
- `user_preferences.md` — Your job search criteria and preferences
|
||||||
|
- `job_search_tracker.md` — Platforms, strategies, fit scores
|
||||||
|
- `feedback_no_fabrication.md` — The no-fabrication rule (critical!)
|
||||||
|
|
||||||
|
These persist across conversations and track your application workflow.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Build System
|
||||||
|
|
||||||
|
**Makefile commands:**
|
||||||
|
```bash
|
||||||
|
# Build with modern template (recommended)
|
||||||
|
make resume-modern FILE_NAME=applications/company/position/paul-halvorsen-resume
|
||||||
|
|
||||||
|
# Build with classic template
|
||||||
|
make resume FILE_NAME=applications/company/position/paul-halvorsen-resume
|
||||||
|
|
||||||
|
# Build with awesome-cv template
|
||||||
|
make resume-awesome FILE_NAME=applications/company/position/paul-halvorsen-resume
|
||||||
|
|
||||||
|
# View all options
|
||||||
|
make help
|
||||||
|
```
|
||||||
|
|
||||||
|
**Source:** `paul-halvorsen-resume-detailed.md` is the source of truth. All customized resumes draw facts from here.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Git Tracking
|
||||||
|
|
||||||
|
**Committed (in version control):**
|
||||||
|
- ✅ All `.md` files (guides, documentation, skill docs)
|
||||||
|
- ✅ `CLAUDE.md` (project rules)
|
||||||
|
- ✅ `Makefile`, `Dockerfile` (build system)
|
||||||
|
- ✅ Templates and configurations
|
||||||
|
- ✅ `notes/` folder (documentation)
|
||||||
|
|
||||||
|
**Not committed (in `.gitignore`):**
|
||||||
|
- ❌ `applications/` — Submitted applications (local only)
|
||||||
|
- ❌ `search/` — Search results (local only)
|
||||||
|
- ❌ `.podman-build` — Build cache artifacts
|
||||||
|
|
||||||
|
This keeps your repository clean while preserving all your documentation and guides.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Organization Principles
|
||||||
|
|
||||||
|
1. **Skill documentation lives in `.claude/skills/`**
|
||||||
|
- Self-contained with all needed files
|
||||||
|
- Invoked with `/skill-name` commands
|
||||||
|
|
||||||
|
2. **Optimization guides live in `notes/`**
|
||||||
|
- LinkedIn optimization, strategy docs, etc.
|
||||||
|
- Committed to version control
|
||||||
|
- Reference materials for ongoing improvement
|
||||||
|
|
||||||
|
3. **Job-specific work lives in `applications/`**
|
||||||
|
- One folder per company/position
|
||||||
|
- NOT committed (local work)
|
||||||
|
- Generated by `/build-resume` skill
|
||||||
|
|
||||||
|
4. **Search results live in `search/`**
|
||||||
|
- Discovered positions and searches
|
||||||
|
- NOT committed (ephemeral)
|
||||||
|
- Generated by `/job-search` skill
|
||||||
|
|
||||||
|
5. **Core resume in project root**
|
||||||
|
- `paul-halvorsen-resume-detailed.md` — Source of truth
|
||||||
|
- Never fabricate facts; always reference this
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Extending This Structure
|
||||||
|
|
||||||
|
When adding new documentation:
|
||||||
|
|
||||||
|
- **Skill documentation?** → Add to `.claude/skills/[skill-name]/`
|
||||||
|
- **Optimization guide?** → Add to `notes/`
|
||||||
|
- **Search output?** → Saved in `search/`
|
||||||
|
- **Job application?** → Saved in `applications/[company]/[position]/`
|
||||||
|
|
||||||
|
Update this file if you make structural changes.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated:** March 18, 2026
|
||||||
269
.claude/skills/build-resume/BUILD-RESUME-WORKFLOW.md
Normal file
269
.claude/skills/build-resume/BUILD-RESUME-WORKFLOW.md
Normal 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
|
||||||
122
.claude/skills/build-resume/README.md
Normal file
122
.claude/skills/build-resume/README.md
Normal 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
|
||||||
185
.claude/skills/build-resume/YAML-TEMPLATE.md
Normal file
185
.claude/skills/build-resume/YAML-TEMPLATE.md
Normal 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
|
||||||
204
.claude/skills/build-resume/skill.md
Normal file
204
.claude/skills/build-resume/skill.md
Normal 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
|
||||||
286
.claude/skills/job-search/CRITERIA-CHECKLIST.md
Normal file
286
.claude/skills/job-search/CRITERIA-CHECKLIST.md
Normal file
@@ -0,0 +1,286 @@
|
|||||||
|
# Job Criteria Checklist
|
||||||
|
|
||||||
|
Quick reference for evaluating whether a position matches your requirements.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Hard Requirements (Must-Have)
|
||||||
|
|
||||||
|
These are non-negotiable. Skip if ANY are missing or violated.
|
||||||
|
|
||||||
|
### ✅ Remote Status
|
||||||
|
- [ ] 100% remote OR
|
||||||
|
- [ ] Work from home (no office required) OR
|
||||||
|
- [ ] Async-first with occasional travel
|
||||||
|
|
||||||
|
**Skip if:**
|
||||||
|
- ❌ "Flexible remote" but office-based
|
||||||
|
- ❌ "Remote but HQ in [city]"
|
||||||
|
- ❌ "Hybrid" with required office days
|
||||||
|
- ❌ Relocation required
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ✅ On-Call Status
|
||||||
|
- [ ] No on-call mentioned
|
||||||
|
- [ ] No pager duty mentioned
|
||||||
|
- [ ] No 24/7 support mentioned
|
||||||
|
- [ ] No "production ownership" in incident response context
|
||||||
|
|
||||||
|
**Skip immediately if:**
|
||||||
|
- ❌ "On-call rotation"
|
||||||
|
- ❌ "Pager duty"
|
||||||
|
- ❌ "24/7 support"
|
||||||
|
- ❌ "Incident response team"
|
||||||
|
- ❌ "Weekend on-call"
|
||||||
|
- ❌ "Production ownership requires on-call"
|
||||||
|
|
||||||
|
This is a hard requirement. One mention = reject.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ✅ Salary
|
||||||
|
- [ ] Base salary $130K+ (minimum)
|
||||||
|
- [ ] Salary is transparent or negotiable
|
||||||
|
- [ ] If equity offered: solid base salary (not equity-heavy)
|
||||||
|
|
||||||
|
**Check:**
|
||||||
|
- [ ] Posted salary is $130K+, OR
|
||||||
|
- [ ] Company pays that range for the role, OR
|
||||||
|
- [ ] Willing to negotiate to $130K+
|
||||||
|
|
||||||
|
**Skip if:**
|
||||||
|
- ❌ Salary $120K or below
|
||||||
|
- ❌ "Competitive" with no range
|
||||||
|
- ❌ Mostly equity, low base
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ✅ Role Type
|
||||||
|
- [ ] Backend Engineer OR
|
||||||
|
- [ ] Platform Engineer OR
|
||||||
|
- [ ] Infrastructure Engineer OR
|
||||||
|
- [ ] Site Reliability Engineer (if not heavy on-call)
|
||||||
|
|
||||||
|
**Skip if:**
|
||||||
|
- ❌ Full-stack (unless clear backend focus)
|
||||||
|
- ❌ Junior Developer
|
||||||
|
- ❌ DevOps only (different focus)
|
||||||
|
- ❌ Systems Administrator
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ✅ Technology Stack
|
||||||
|
- [ ] At least one: Python, Go, Rust, Java, C
|
||||||
|
- [ ] REST APIs mentioned or implied
|
||||||
|
- [ ] Modern infrastructure tools (Docker, Kubernetes, AWS, etc.)
|
||||||
|
|
||||||
|
**Preferred stack:**
|
||||||
|
- ✓✓ Python + REST APIs + Kubernetes
|
||||||
|
- ✓✓ Go + REST APIs + Kubernetes
|
||||||
|
- ✓✓ Rust + REST APIs + distributed systems
|
||||||
|
- ✓ Java + REST APIs (learnable from Python)
|
||||||
|
- ✓ C + systems programming (learnable)
|
||||||
|
- ✓ JavaScript/TypeScript (if full-stack opportunity)
|
||||||
|
|
||||||
|
**Skip if:**
|
||||||
|
- ❌ Only C++/C# unless very compelling
|
||||||
|
- ❌ Only legacy languages (COBOL, Fortran, etc.)
|
||||||
|
- ❌ Frontend-heavy with minimal backend
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Strong Positives (+1 point each)
|
||||||
|
|
||||||
|
### Company & Culture
|
||||||
|
- [ ] Explicitly mentions "async-first" or "async culture"
|
||||||
|
- [ ] Remote-first company (not traditional company with remote option)
|
||||||
|
- [ ] Company founded specifically as remote
|
||||||
|
- [ ] Multiple office locations or fully distributed team
|
||||||
|
- [ ] Clear communication about work-life balance
|
||||||
|
- [ ] "No crunch" or "sustainable pace" mentioned
|
||||||
|
|
||||||
|
### Role Quality
|
||||||
|
- [ ] Clear role description and responsibilities
|
||||||
|
- [ ] Growing engineering team (hiring actively)
|
||||||
|
- [ ] Opportunity to learn new tech mentioned
|
||||||
|
- [ ] Mentorship or growth path mentioned
|
||||||
|
- [ ] Architecture/design work emphasized
|
||||||
|
- [ ] API design or system design mentioned
|
||||||
|
|
||||||
|
### Compensation & Benefits
|
||||||
|
- [ ] Salary at top of range ($180K+)
|
||||||
|
- [ ] Equity offered (if profitable/stable company)
|
||||||
|
- [ ] Generous vacation/PTO (unlimited or 25+ days)
|
||||||
|
- [ ] Professional development budget mentioned
|
||||||
|
- [ ] Flexible hours mentioned
|
||||||
|
- [ ] Parental leave or family benefits
|
||||||
|
|
||||||
|
### Mission & Impact
|
||||||
|
- [ ] Mission statement aligns with your values
|
||||||
|
- [ ] Company solves real problems (not just hype)
|
||||||
|
- [ ] Profitable or well-funded (stability)
|
||||||
|
- [ ] Growing rapidly (opportunity for impact)
|
||||||
|
- [ ] Social impact or meaningful work mentioned
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Red Flags (-1 point each)
|
||||||
|
|
||||||
|
### Culture Red Flags
|
||||||
|
- [ ] "Startup hustle" or "high energy" mentioned
|
||||||
|
- [ ] "Move fast and break things" philosophy
|
||||||
|
- [ ] "Startup mentality" emphasized
|
||||||
|
- [ ] "On-call is learning opportunity" framing
|
||||||
|
- [ ] Heavy emphasis on long hours
|
||||||
|
- [ ] "Passionate" mentioned 5+ times
|
||||||
|
- [ ] "Rocket ship", "unicorn", "rapid growth" without context
|
||||||
|
|
||||||
|
### Role Red Flags
|
||||||
|
- [ ] Vague role description
|
||||||
|
- [ ] Too many responsibilities (5+ distinct areas)
|
||||||
|
- [ ] Heavy on meetings or "collaboration"
|
||||||
|
- [ ] Management/mentoring heavily emphasized
|
||||||
|
- [ ] "Wear many hats" or jack-of-all-trades
|
||||||
|
- [ ] Recent team departures (from research)
|
||||||
|
- [ ] High turnover rate (5+ people left in 1 year)
|
||||||
|
|
||||||
|
### Compensation Red Flags
|
||||||
|
- [ ] Mostly equity, low base salary
|
||||||
|
- [ ] "Equity is the real comp" messaging
|
||||||
|
- [ ] Salary negotiable only "for right candidate"
|
||||||
|
- [ ] Significantly below market ($100K for your experience)
|
||||||
|
- [ ] No mentioning of benefits
|
||||||
|
- [ ] Unlimited PTO (often means less vacation)
|
||||||
|
|
||||||
|
### Company Red Flags
|
||||||
|
- [ ] Negative Glassdoor reviews (3.5 stars or below)
|
||||||
|
- [ ] Comments about work-life balance issues
|
||||||
|
- [ ] Recent major departures or layoffs
|
||||||
|
- [ ] Funding running low or burn rate high
|
||||||
|
- [ ] Legal issues or regulatory problems
|
||||||
|
- [ ] Poor remote culture reviews
|
||||||
|
|
||||||
|
### Remote Red Flags
|
||||||
|
- [ ] "Remote but in [time zone]" requirement
|
||||||
|
- [ ] Occasional "required" office days
|
||||||
|
- [ ] "Mostly remote" with unstated expectations
|
||||||
|
- [ ] Timezone restrictions
|
||||||
|
- [ ] Limited async communication
|
||||||
|
- [ ] Heavy emphasis on meetings/sync time
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fit Score Calculation
|
||||||
|
|
||||||
|
Use this to score positions 1-10:
|
||||||
|
|
||||||
|
### Start at 5 points (baseline)
|
||||||
|
|
||||||
|
### Add points for:
|
||||||
|
- [ ] +1: Preferred tech stack (Python, Go, Rust)
|
||||||
|
- [ ] +1: Explicitly remote-first / async culture
|
||||||
|
- [ ] +1: Salary at top of range ($180K+)
|
||||||
|
- [ ] +1: Mission alignment (meaningful work)
|
||||||
|
- [ ] +1: Strong company fundamentals (profitable, stable)
|
||||||
|
- [ ] +1: Team stability (low turnover)
|
||||||
|
- [ ] +1: Growth opportunity (learning or advancement)
|
||||||
|
- [ ] +1: Excellent benefits (25+ PTO, parental leave, dev budget)
|
||||||
|
- [ ] +1: API/system design work mentioned
|
||||||
|
- [ ] +1: Architecture/infrastructure focus
|
||||||
|
|
||||||
|
### Subtract points for:
|
||||||
|
- [ ] -1: Secondary tech stack (Java, JavaScript)
|
||||||
|
- [ ] -1: Traditional company with remote option (not remote-first)
|
||||||
|
- [ ] -1: Salary below $150K
|
||||||
|
- [ ] -1: Mission not aligned
|
||||||
|
- [ ] -1: Early-stage startup (high risk)
|
||||||
|
- [ ] -1: Team appears to be high-churn
|
||||||
|
- [ ] -1: Limited growth opportunity
|
||||||
|
- [ ] -1: "On-call" mentioned (ALSO SKIP THIS, hard requirement)
|
||||||
|
- [ ] -1: Heavy management expectations
|
||||||
|
- [ ] -1: Vague role description
|
||||||
|
|
||||||
|
### Final Score
|
||||||
|
- **9-10:** Perfect match — Apply immediately
|
||||||
|
- **8:** Excellent fit — Apply enthusiastically
|
||||||
|
- **7:** Good fit — Apply with customized materials
|
||||||
|
- **6:** Okay fit — Apply if meeting quota
|
||||||
|
- **5:** Neutral — Consider if other criteria stand out
|
||||||
|
- **Below 5:** Skip — Not a good use of time
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Evaluation (2 minutes)
|
||||||
|
|
||||||
|
Use this if you want to quickly evaluate a position:
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Remote? YES / NO → If NO, skip
|
||||||
|
2. On-call? YES / NO → If YES, skip
|
||||||
|
3. Salary $130K+? YES / NO → If NO, skip
|
||||||
|
4. Backend role? YES / NO → If NO, skip
|
||||||
|
5. Has Python/Go/Rust? YES / NO → If NO, maybe skip
|
||||||
|
6. Red flags? YES / NO → If YES, skip
|
||||||
|
|
||||||
|
If all ✓ (except #5):
|
||||||
|
→ Verify on company site
|
||||||
|
→ Add to dashboard
|
||||||
|
→ Build resume
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Position Evaluation Template
|
||||||
|
|
||||||
|
When you find a promising position:
|
||||||
|
|
||||||
|
**Basic Info:**
|
||||||
|
- Company: _____________
|
||||||
|
- Role: _____________
|
||||||
|
- Posted: _____________
|
||||||
|
- Salary: _____________
|
||||||
|
- Link: _____________
|
||||||
|
|
||||||
|
**Must-Have Check:**
|
||||||
|
- [ ] Remote: YES / NO
|
||||||
|
- [ ] On-call: None / Minimal / Mentioned / Mentioned heavily
|
||||||
|
- [ ] Salary: $_____ (meets $130K+? YES/NO)
|
||||||
|
- [ ] Backend role: YES / NO
|
||||||
|
|
||||||
|
**Tech Stack:**
|
||||||
|
- [ ] Languages: _____________
|
||||||
|
- [ ] Frameworks: _____________
|
||||||
|
- [ ] Infrastructure: _____________
|
||||||
|
- [ ] Fit: ✓ Preferred / ✓ Acceptable / ✗ Not ideal
|
||||||
|
|
||||||
|
**Culture:**
|
||||||
|
- [ ] Red flags found: YES / NO
|
||||||
|
- [ ] If YES, list: _____________
|
||||||
|
- [ ] Strong positives: YES / NO
|
||||||
|
- [ ] If YES, list: _____________
|
||||||
|
|
||||||
|
**Fit Score:** 1-10 ___
|
||||||
|
- [ ] Apply immediately (9-10)
|
||||||
|
- [ ] Apply with care (7-8)
|
||||||
|
- [ ] Apply if quota allows (6)
|
||||||
|
- [ ] Skip (5 or below)
|
||||||
|
|
||||||
|
**Decision:** APPLY / SKIP
|
||||||
|
**Reason:** _____________
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## During Application
|
||||||
|
|
||||||
|
After you decide to apply:
|
||||||
|
|
||||||
|
1. **Use /build-resume** to generate customized materials
|
||||||
|
2. **Double-check on-call** in full job description (final check)
|
||||||
|
3. **Verify on company site** before submitting
|
||||||
|
4. **Log in tracker** with date, company, role, fit score
|
||||||
|
5. **Set follow-up reminder** for 1 week after
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated:** March 18, 2026
|
||||||
191
.claude/skills/job-search/JOB-BOARDS-TO-SEARCH.md
Normal file
191
.claude/skills/job-search/JOB-BOARDS-TO-SEARCH.md
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
# Job Board Search Sources
|
||||||
|
|
||||||
|
**Purpose:** Comprehensive list of job boards to search when looking for remote backend engineer positions.
|
||||||
|
|
||||||
|
**Last Updated:** March 18, 2026
|
||||||
|
|
||||||
|
**Strategy:** Search these boards in order. When finding a position, verify it exists on the company's official careers page before applying directly there.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## PRIMARY JOB BOARDS (Check Daily/Weekly)
|
||||||
|
|
||||||
|
### General Tech Job Boards
|
||||||
|
1. **Company Direct Careers Pages** ⭐ THE GOLDMINE
|
||||||
|
- Best for: Roles that never hit job boards
|
||||||
|
- How to: Search "[Company Name] careers" or company-name.com/jobs
|
||||||
|
- Examples: stripe.com/jobs, gitlab.com/careers, zapier.com/jobs
|
||||||
|
|
||||||
|
2. **Indeed**
|
||||||
|
- URL: https://indeed.com
|
||||||
|
- Best for: Aggregates across the web, catches hidden roles
|
||||||
|
- Filter: Remote, backend engineer, Python/Go
|
||||||
|
|
||||||
|
3. **LinkedIn**
|
||||||
|
- URL: https://linkedin.com/jobs
|
||||||
|
- Best for: World's largest professional network, direct networking
|
||||||
|
- Strategy: See job here, verify on company site, apply directly
|
||||||
|
|
||||||
|
4. **Built In**
|
||||||
|
- URL: https://builtin.com/jobs/remote/dev-engineering/
|
||||||
|
- Best for: Startup and high-growth companies
|
||||||
|
- Filter: Remote, backend engineer, Python/Go/Rust
|
||||||
|
|
||||||
|
### Remote-Specific Job Boards
|
||||||
|
5. **WeWorkRemotely**
|
||||||
|
- URL: https://weworkremotely.com
|
||||||
|
- Best for: Curated, trusted by top remote companies
|
||||||
|
- Focus: Engineering, product, design
|
||||||
|
|
||||||
|
6. **RemoteOK**
|
||||||
|
- URL: https://remoteok.com
|
||||||
|
- Best for: Smart filters, salary and time-zone info upfront
|
||||||
|
- Filter: Backend, Python, Golang, remote
|
||||||
|
|
||||||
|
7. **DailyRemote**
|
||||||
|
- URL: https://dailyremote.com
|
||||||
|
- Best for: Fresh listings daily
|
||||||
|
- Focus: Design, dev, customer support
|
||||||
|
|
||||||
|
### Other Primary Boards
|
||||||
|
8. **Cord.co**
|
||||||
|
- URL: https://cord.co
|
||||||
|
- Best for: Companies apply to YOU (passive matching)
|
||||||
|
- Focus: Developers, designers, product managers
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SECONDARY JOB BOARDS (Check Weekly/Monthly)
|
||||||
|
|
||||||
|
9. **JobServe**
|
||||||
|
- URL: https://jobserve.com
|
||||||
|
- Best for: IT, finance, engineering
|
||||||
|
- Note: Contract roles with less competition
|
||||||
|
|
||||||
|
10. **JustRemote**
|
||||||
|
- URL: https://justremote.co
|
||||||
|
- Best for: Time-zone friendly, "anywhere" roles
|
||||||
|
|
||||||
|
11. **Totaljobs**
|
||||||
|
- URL: https://totaljobs.com
|
||||||
|
- Best for: Mid-level professionals, advanced filters
|
||||||
|
- Reach: Huge UK presence
|
||||||
|
|
||||||
|
12. **Hiring Cafe**
|
||||||
|
- URL: https://hiring.cafe
|
||||||
|
- Best for: Community feel, curated handpicked roles
|
||||||
|
- Vibe: Less corporate, more community-focused
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SPECIALIZED BOARDS BY LANGUAGE/TECHNOLOGY
|
||||||
|
|
||||||
|
### Python
|
||||||
|
- **RemotePython.com** - https://remotepython.com
|
||||||
|
- **Python.org Jobs** - https://python.org/jobs
|
||||||
|
|
||||||
|
### Go/Golang
|
||||||
|
- **Golang.cafe** - https://golang.cafe
|
||||||
|
- **GolangProjects** - https://www.golangprojects.com/golang-remote-jobs.html
|
||||||
|
|
||||||
|
### Rust
|
||||||
|
- **RustJobs.dev** - https://rustjobs.dev
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TARGET COMPANIES (Apply Directly to Careers Pages)
|
||||||
|
|
||||||
|
### High Priority (Apply Weekly)
|
||||||
|
- **Stripe** - https://stripe.com/jobs
|
||||||
|
- **GitLab** - https://gitlab.com/careers
|
||||||
|
- **Automattic** - https://automattic.com/jobs
|
||||||
|
- **Zapier** - https://zapier.com/jobs
|
||||||
|
|
||||||
|
### Medium Priority (Apply Monthly)
|
||||||
|
- **Cloudflare** - https://cloudflare.com/careers
|
||||||
|
- **Vercel** - https://vercel.com/careers
|
||||||
|
- **Shopify** - https://shopify.com/careers/search
|
||||||
|
- **Twilio** - https://twilio.com/careers
|
||||||
|
|
||||||
|
### Growth Companies (Apply As Needed)
|
||||||
|
- **Segment** - https://segment.com/careers
|
||||||
|
- **Datadog** - https://www.datadoghq.com/careers/
|
||||||
|
- **Figma** - https://figma.com/careers
|
||||||
|
- **Notion** - https://notion.so/careers
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SEARCH CRITERIA (When Searching)
|
||||||
|
|
||||||
|
✅ **Must Have:**
|
||||||
|
- Remote (100% remote or explicitly remote-eligible)
|
||||||
|
- Salary: $120K or higher
|
||||||
|
- Backend engineer, platform engineer, or infrastructure engineer roles
|
||||||
|
- Technologies: Python, Go, Rust, Kubernetes, REST APIs
|
||||||
|
|
||||||
|
❌ **Must Avoid:**
|
||||||
|
- On-call rotations
|
||||||
|
- Unnecessary meetings culture
|
||||||
|
- Hype over substance
|
||||||
|
- Positions requiring relocation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## HOW TO USE THIS LIST
|
||||||
|
|
||||||
|
### Daily Search (5 minutes):
|
||||||
|
- [ ] WeWorkRemotely
|
||||||
|
- [ ] RemoteOK
|
||||||
|
- [ ] Built In
|
||||||
|
|
||||||
|
### Weekly Search (15 minutes):
|
||||||
|
- [ ] DailyRemote
|
||||||
|
- [ ] Indeed (with filters)
|
||||||
|
- [ ] LinkedIn (with filters)
|
||||||
|
- [ ] Cord.co (check if any match your profile)
|
||||||
|
- [ ] Golang.cafe (if interested in Go roles)
|
||||||
|
|
||||||
|
### Monthly Search (20 minutes):
|
||||||
|
- [ ] Secondary boards (JobServe, JustRemote, Totaljobs, Hiring Cafe)
|
||||||
|
- [ ] Specialized boards (RemotePython.com, RustJobs.dev)
|
||||||
|
- [ ] Target companies' careers pages (all 4 high priority + 4 medium priority)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## WHEN YOU FIND A POSITION
|
||||||
|
|
||||||
|
1. **See it on job board** (e.g., RemoteOK, WeWorkRemotely, etc.)
|
||||||
|
2. **Go to company website** (e.g., "stripe.com/jobs" or search "[Company Name] careers")
|
||||||
|
3. **Find the exact same role on company site** (verify it's real)
|
||||||
|
4. **Apply directly on company's careers page** (not through job board)
|
||||||
|
5. **Connect with hiring manager on LinkedIn** (mention your application)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## NOTES
|
||||||
|
|
||||||
|
- **Company career pages** = less competition, direct to hiring team
|
||||||
|
- **Job boards** = good for discovery, but apply on company site if possible
|
||||||
|
- **Verify everything** = avoid scams and aggregator links
|
||||||
|
- **Bookmark these** = check daily/weekly for fresh opportunities
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## How to Edit This File
|
||||||
|
|
||||||
|
Edit this file directly: `/home/paul/Public/resume/JOB-BOARDS-TO-SEARCH.md`
|
||||||
|
|
||||||
|
To add a new board:
|
||||||
|
1. Add URL and description in the appropriate section
|
||||||
|
2. Include best use case
|
||||||
|
3. Note any special filters or focus
|
||||||
|
|
||||||
|
To remove a board:
|
||||||
|
1. Delete the entry
|
||||||
|
2. Update the last modified date
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Verified:** March 18, 2026
|
||||||
|
**All URLs Tested:** Yes
|
||||||
|
**Status:** Active and current
|
||||||
298
.claude/skills/job-search/README.md
Normal file
298
.claude/skills/job-search/README.md
Normal file
@@ -0,0 +1,298 @@
|
|||||||
|
# job-search Skill
|
||||||
|
|
||||||
|
Find, verify, and track backend engineer job opportunities with quality filtering.
|
||||||
|
|
||||||
|
## Files in This Directory
|
||||||
|
|
||||||
|
- **skill.md** — Skill definition, job boards, red flags, on-call risks
|
||||||
|
- **SEARCH-STRATEGY.md** — Systematic 3-tier search approach and workflows
|
||||||
|
- **CRITERIA-CHECKLIST.md** — Evaluation template and fit scoring (1-10)
|
||||||
|
- **README.md** — This file
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
```
|
||||||
|
/job-search [search type]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Common Commands
|
||||||
|
|
||||||
|
**Find positions across boards:**
|
||||||
|
```
|
||||||
|
/job-search find-positions
|
||||||
|
/job-search find-positions golang
|
||||||
|
/job-search search-board weworkremotely
|
||||||
|
```
|
||||||
|
|
||||||
|
**Check if position meets criteria:**
|
||||||
|
```
|
||||||
|
/job-search check-criteria [job description or URL]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Verify position on company site:**
|
||||||
|
```
|
||||||
|
/job-search verify-position [company name and role]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Track found position:**
|
||||||
|
```
|
||||||
|
/job-search track-found [company] [role] [URL] [fit-score]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Your Search Criteria
|
||||||
|
|
||||||
|
**Hard Requirements (Skip if Missing):**
|
||||||
|
- ✅ 100% Remote (no office required)
|
||||||
|
- ✅ No on-call/pager duty
|
||||||
|
- ✅ $130K+ salary
|
||||||
|
- ✅ Backend engineer role
|
||||||
|
- ✅ Python, Go, Rust, or similar
|
||||||
|
|
||||||
|
**Red Flags (Auto-Skip):**
|
||||||
|
- ❌ On-call/pager duty mentioned anywhere
|
||||||
|
- ❌ Non-remote despite "flexible remote" claims
|
||||||
|
- ❌ Below $130K salary
|
||||||
|
- ❌ Startup hustle culture
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3-Tier Search System
|
||||||
|
|
||||||
|
### Daily Search (5 min)
|
||||||
|
Focus on new postings on best boards:
|
||||||
|
1. WeWorkRemotely
|
||||||
|
2. RemoteOK
|
||||||
|
3. Built In
|
||||||
|
|
||||||
|
### Weekly Search (20 min)
|
||||||
|
Broader search + targeted platforms:
|
||||||
|
4. LinkedIn
|
||||||
|
5. DailyRemote
|
||||||
|
6. Indeed
|
||||||
|
7. Cord.co
|
||||||
|
8. Specialized boards (Golang.cafe, RemotePython.com, etc.)
|
||||||
|
|
||||||
|
### Monthly Search (45 min)
|
||||||
|
Deep dive into secondary sources:
|
||||||
|
- Secondary boards (JobServe, JustRemote, Totaljobs)
|
||||||
|
- Target company careers pages (Stripe, GitLab, Automattic, Zapier, etc.)
|
||||||
|
- Growth company pages (Cloudflare, Vercel, Shopify, Twilio)
|
||||||
|
|
||||||
|
See **SEARCH-STRATEGY.md** for full details with links.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verification Workflow
|
||||||
|
|
||||||
|
Every position must be verified before applying:
|
||||||
|
|
||||||
|
1. **Find on job board** (RemoteOK, WeWorkRemotely, etc.)
|
||||||
|
2. **Go to company website** (search "[Company] careers")
|
||||||
|
3. **Find exact same role** on company careers page
|
||||||
|
4. **Verify it's real** (posting date, "Apply Now" button works)
|
||||||
|
5. **Check on-call one more time** (final check for red flags)
|
||||||
|
6. **Get direct URL** from company site (use for application)
|
||||||
|
7. **Apply directly** to company (not through job board)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fit Scoring
|
||||||
|
|
||||||
|
Evaluate each position on a 1-10 scale:
|
||||||
|
|
||||||
|
| Score | Action | Notes |
|
||||||
|
|-------|--------|-------|
|
||||||
|
| 9-10 | Apply immediately | Perfect match, all criteria met |
|
||||||
|
| 8 | Apply enthusiastically | Excellent fit, maybe one gap |
|
||||||
|
| 7 | Apply with care | Good fit, one technical gap |
|
||||||
|
| 6 | Apply if quota allows | Okay fit, some gaps but salvageable |
|
||||||
|
| 5 | Consider carefully | Neutral, not compelling |
|
||||||
|
| <5 | Skip | Not worth the effort |
|
||||||
|
|
||||||
|
Use **CRITERIA-CHECKLIST.md** to calculate fit scores.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Requirements Explained
|
||||||
|
|
||||||
|
### Remote (100% or Work-from-Home)
|
||||||
|
- Not: "Flexible remote" with office base
|
||||||
|
- Not: "Hybrid" with required days
|
||||||
|
- Yes: Fully distributed team
|
||||||
|
- Yes: "Work from anywhere"
|
||||||
|
- Yes: "Async-first culture"
|
||||||
|
|
||||||
|
### No On-Call
|
||||||
|
These phrases = SKIP IMMEDIATELY:
|
||||||
|
- "On-call rotation"
|
||||||
|
- "Pager duty"
|
||||||
|
- "24/7 support"
|
||||||
|
- "Production ownership" (in incident context)
|
||||||
|
- "Weekend on-call"
|
||||||
|
- "Incident response rotation"
|
||||||
|
|
||||||
|
This is non-negotiable. One mention = reject.
|
||||||
|
|
||||||
|
### $130K+ Minimum
|
||||||
|
- Base salary, not total comp
|
||||||
|
- Equity is bonus, not replacement
|
||||||
|
- Negotiable if company is great fit
|
||||||
|
- Non-negotiable if mediocre fit
|
||||||
|
|
||||||
|
### Backend Engineer Role
|
||||||
|
- Not: Full-stack (unless 80%+ backend)
|
||||||
|
- Not: Frontend with "backend knowledge"
|
||||||
|
- Not: DevOps (different focus)
|
||||||
|
- Not: QA or test engineering
|
||||||
|
- Yes: Platform engineer, Infrastructure engineer, SRE (if not heavy on-call)
|
||||||
|
|
||||||
|
### Tech Stack
|
||||||
|
- **Preferred:** Python, Go, Rust
|
||||||
|
- **Acceptable:** Java, C, JavaScript (learnable)
|
||||||
|
- **Lower priority:** C++, C# (different paradigms)
|
||||||
|
- **Avoid:** Legacy languages only
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integration with Other Skills
|
||||||
|
|
||||||
|
### Found a Position?
|
||||||
|
Once you've found and verified a position, use the other skill:
|
||||||
|
|
||||||
|
```
|
||||||
|
/build-resume [paste job description]
|
||||||
|
```
|
||||||
|
|
||||||
|
This will:
|
||||||
|
1. Create customized resume
|
||||||
|
2. Generate cover letter
|
||||||
|
3. Create job breakdown with strategy
|
||||||
|
4. Build PDFs ready to submit
|
||||||
|
5. Log application in tracker
|
||||||
|
|
||||||
|
### Application Workflow
|
||||||
|
```
|
||||||
|
Find position → Verify on company site → /build-resume → Apply → Log in tracker
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tools & Files
|
||||||
|
|
||||||
|
**In this skill directory:**
|
||||||
|
- `skill.md` — Comprehensive skill documentation
|
||||||
|
- `SEARCH-STRATEGY.md` — Detailed search workflows
|
||||||
|
- `CRITERIA-CHECKLIST.md` — Evaluation template and scoring
|
||||||
|
- `JOB-BOARDS-TO-SEARCH.md` — Full board list with all links
|
||||||
|
|
||||||
|
**In your project:**
|
||||||
|
- `/home/paul/Public/resume/search/` — Search results (local, not committed)
|
||||||
|
- `/home/paul/Public/resume/applications/` — Job applications (local, not committed)
|
||||||
|
- `/home/paul/Public/resume/job_search.html` — Dashboard of 35+ verified positions
|
||||||
|
- `/home/paul/.claude/projects/-home-paul-Public-resume/memory/applications_tracker.md` — Your application log
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Search Checklist
|
||||||
|
|
||||||
|
### Before Every Search Session
|
||||||
|
|
||||||
|
- [ ] Have JOB-BOARDS-TO-SEARCH.md open (for board links)
|
||||||
|
- [ ] Know your criteria (remote, $130K+, no on-call)
|
||||||
|
- [ ] Have 15-45 min depending on tier (daily/weekly/monthly)
|
||||||
|
- [ ] Plan to evaluate positions with CRITERIA-CHECKLIST.md
|
||||||
|
|
||||||
|
### During Search
|
||||||
|
|
||||||
|
- [ ] Check each board for new postings
|
||||||
|
- [ ] Quick filter: Remote? $130K+? Backend role? Tech stack?
|
||||||
|
- [ ] Note promising roles in job_search.html
|
||||||
|
- [ ] Verify positions on company career pages
|
||||||
|
- [ ] Check for on-call language (final check)
|
||||||
|
|
||||||
|
### After Search
|
||||||
|
|
||||||
|
- [ ] Log verified positions in dashboard
|
||||||
|
- [ ] Evaluate fit scores (1-10)
|
||||||
|
- [ ] Plan which to apply to this week
|
||||||
|
- [ ] Track completed positions in applications_tracker
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Success Metrics
|
||||||
|
|
||||||
|
**Weekly Goals:**
|
||||||
|
- Find: 5-10 positions
|
||||||
|
- Verify: 3-5 on company sites
|
||||||
|
- Apply: 3-5 quality applications
|
||||||
|
- Track: All applications logged
|
||||||
|
|
||||||
|
**Monthly Review:**
|
||||||
|
- Response rate: How many replies?
|
||||||
|
- Interview conversion: How many interviews?
|
||||||
|
- Offer rate: Any offers?
|
||||||
|
- Adjust strategy if needed
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Common Pitfalls to Avoid
|
||||||
|
|
||||||
|
❌ **Applying to every position** — Quality > quantity
|
||||||
|
❌ **Ignoring on-call mentions** — This is your red line
|
||||||
|
❌ **Applying through job boards** — Always apply directly to company site
|
||||||
|
❌ **Not verifying positions** — Confirm on company careers page first
|
||||||
|
❌ **Applying to anything under $130K** — Stick to your minimum
|
||||||
|
❌ **Skipping the verification step** — It takes 2 minutes and saves time
|
||||||
|
❌ **Not customizing resumes** — Generic materials have low conversion
|
||||||
|
|
||||||
|
✅ **Do this instead:**
|
||||||
|
- ✓ 3-5 quality applications per week
|
||||||
|
- ✓ Verify every position first
|
||||||
|
- ✓ Use /build-resume for customization
|
||||||
|
- ✓ Apply directly to company sites
|
||||||
|
- ✓ Track everything in applications_tracker
|
||||||
|
- ✓ Follow up consistently
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
1. **Read SEARCH-STRATEGY.md** — Understand the 3-tier system
|
||||||
|
2. **Review CRITERIA-CHECKLIST.md** — Learn how to evaluate positions
|
||||||
|
3. **Check JOB-BOARDS-TO-SEARCH.md** — See all 12+ boards available
|
||||||
|
4. **Do daily search** — 5 minutes on 3 primary boards
|
||||||
|
5. **Track positions** — Use /job-search track-found or update job_search.html
|
||||||
|
6. **Build resumes** — Use /build-resume for matched positions
|
||||||
|
7. **Monitor applications_tracker** — Track dates, follow up at 1 week
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tips for Success
|
||||||
|
|
||||||
|
**Search smarter, not harder:**
|
||||||
|
- Daily search takes 5 min (just stay aware)
|
||||||
|
- Weekly search takes 20 min (find actual positions)
|
||||||
|
- Monthly search takes 45 min (deep dive)
|
||||||
|
- Total: ~1 hour per week for systematic search
|
||||||
|
|
||||||
|
**Batch your work:**
|
||||||
|
- Search on Monday
|
||||||
|
- Build resumes Tue-Thu
|
||||||
|
- Apply on Friday
|
||||||
|
- Follow up next Friday
|
||||||
|
|
||||||
|
**Use all resources:**
|
||||||
|
- Tier 1 boards (daily)
|
||||||
|
- Tier 2 boards (weekly)
|
||||||
|
- Tier 3 + company pages (monthly)
|
||||||
|
- Set email alerts for consistency
|
||||||
|
|
||||||
|
**Verify everything:**
|
||||||
|
- Before applying, verify on company site
|
||||||
|
- Reduces application rejections
|
||||||
|
- Improves interview conversion
|
||||||
|
- Saves time (2 min verification vs wasted application)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated:** March 18, 2026
|
||||||
380
.claude/skills/job-search/SEARCH-STRATEGY.md
Normal file
380
.claude/skills/job-search/SEARCH-STRATEGY.md
Normal file
@@ -0,0 +1,380 @@
|
|||||||
|
# Job Search Strategy
|
||||||
|
|
||||||
|
Systematic approach to finding quality backend engineer positions that match your criteria.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Your Non-Negotiables ✅
|
||||||
|
|
||||||
|
**Hard Requirements:**
|
||||||
|
- Remote (100% or work-from-home)
|
||||||
|
- No on-call/pager duty
|
||||||
|
- $130K+ salary
|
||||||
|
- Backend engineer role
|
||||||
|
- Technologies: Python, Go, Rust (preferred)
|
||||||
|
|
||||||
|
**Red Flags = Auto-Skip:**
|
||||||
|
- On-call rotation mentioned
|
||||||
|
- Pager duty / 24x7 support
|
||||||
|
- "Startup hustle" culture
|
||||||
|
- Heavy mentoring expectations
|
||||||
|
- Not truly remote
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Three-Tier Search System
|
||||||
|
|
||||||
|
### TIER 1: Daily (5 min)
|
||||||
|
|
||||||
|
**Purpose:** Stay aware of new postings, catch great opportunities early
|
||||||
|
|
||||||
|
**Boards:**
|
||||||
|
1. **WeWorkRemotely** (https://weworkremotely.com)
|
||||||
|
- Filter: Dev Engineering, Remote
|
||||||
|
- Look for: Established companies, explicit remote culture
|
||||||
|
- Why: Curated, trusted companies post here first
|
||||||
|
|
||||||
|
2. **RemoteOK** (https://remoteok.com)
|
||||||
|
- Filter: Backend, Python/Go/Rust, Remote, $130K+
|
||||||
|
- Look for: Salary upfront, time zone info
|
||||||
|
- Why: Smart filters, no guessing on salary
|
||||||
|
|
||||||
|
3. **Built In** (https://builtin.com/jobs/remote/dev-engineering/)
|
||||||
|
- Filter: Remote, backend engineer, Python/Go
|
||||||
|
- Look for: Startup and scale-up companies
|
||||||
|
- Why: Good quality postings from growth companies
|
||||||
|
|
||||||
|
**Action:** 5 minutes, check each board, bookmark promising roles
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### TIER 2: Weekly (20 min)
|
||||||
|
|
||||||
|
**Purpose:** Broader search, check secondary sources, targeted platforms
|
||||||
|
|
||||||
|
**Boards:**
|
||||||
|
4. **LinkedIn** (https://linkedin.com/jobs)
|
||||||
|
- Filter: Remote, Backend Engineer, $130K+, Mid-Senior level
|
||||||
|
- Setup: Create saved search for notifications
|
||||||
|
- Look for: Direct company postings, recruiter outreach
|
||||||
|
- Why: World's largest network, catches hidden roles
|
||||||
|
|
||||||
|
5. **DailyRemote** (https://dailyremote.com)
|
||||||
|
- Filter: Dev, Remote
|
||||||
|
- Look for: Freshly posted daily listings
|
||||||
|
- Why: Curated daily, less saturated than Indeed
|
||||||
|
|
||||||
|
6. **Indeed** (https://indeed.com)
|
||||||
|
- Filter: Remote, Backend Engineer, $130K+, Python/Go
|
||||||
|
- Setup: Notification alerts
|
||||||
|
- Look for: Less covered roles, niche companies
|
||||||
|
- Why: Largest job board, catches everything
|
||||||
|
|
||||||
|
7. **Cord.co** (https://cord.co)
|
||||||
|
- Just browse your matches
|
||||||
|
- Look for: Companies interested in YOU
|
||||||
|
- Why: Passive matching = less competitive
|
||||||
|
|
||||||
|
8. **Language-Specific Boards**
|
||||||
|
- Golang.cafe — https://golang.cafe (if interested in Go)
|
||||||
|
- RemotePython.com — https://remotepython.com (Python focus)
|
||||||
|
- RustJobs.dev — https://rustjobs.dev (Rust focus)
|
||||||
|
|
||||||
|
**Action:** 20 minutes, check each board, bookmark 1-3 interesting roles
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### TIER 3: Monthly (45 min)
|
||||||
|
|
||||||
|
**Purpose:** Deep search, check specialized sources, target specific companies
|
||||||
|
|
||||||
|
**Secondary Boards:**
|
||||||
|
9. JobServe — https://jobserve.com
|
||||||
|
10. JustRemote — https://justremote.co
|
||||||
|
11. Totaljobs — https://totaljobs.com
|
||||||
|
12. Hiring Cafe — https://hiring.cafe
|
||||||
|
|
||||||
|
**Target Company Careers Pages:**
|
||||||
|
|
||||||
|
**High Priority (Check Weekly):**
|
||||||
|
- Stripe — https://stripe.com/jobs
|
||||||
|
- GitLab — https://gitlab.com/careers
|
||||||
|
- Automattic — https://automattic.com/jobs
|
||||||
|
- Zapier — https://zapier.com/jobs
|
||||||
|
|
||||||
|
**Medium Priority (Check Monthly):**
|
||||||
|
- Cloudflare — https://cloudflare.com/careers
|
||||||
|
- Vercel — https://vercel.com/careers
|
||||||
|
- Shopify — https://shopify.com/careers/search
|
||||||
|
- Twilio — https://twilio.com/careers
|
||||||
|
|
||||||
|
**Growth Companies:**
|
||||||
|
- Segment — https://segment.com/careers
|
||||||
|
- Datadog — https://www.datadoghq.com/careers/
|
||||||
|
- Figma — https://figma.com/careers
|
||||||
|
- Notion — https://notion.so/careers
|
||||||
|
|
||||||
|
**Action:** 45 minutes, check secondary boards and target company pages, find 2-5 promising roles
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Filtering Workflow
|
||||||
|
|
||||||
|
### Step 1: Title & Location Check (10 seconds)
|
||||||
|
```
|
||||||
|
Does it say "Backend Engineer" OR "Platform Engineer" OR "Infrastructure Engineer"?
|
||||||
|
Is it marked "Remote" or "Work from home"?
|
||||||
|
→ If NO to either: Skip immediately
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2: Salary Check (10 seconds)
|
||||||
|
```
|
||||||
|
Can you see the salary?
|
||||||
|
→ If shown: Is it $130K+?
|
||||||
|
→ If not shown: Check company size/location clues
|
||||||
|
→ If clearly below $130K: Skip
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: On-Call Check (20 seconds)
|
||||||
|
```
|
||||||
|
Search job description for:
|
||||||
|
- "on-call"
|
||||||
|
- "pager duty"
|
||||||
|
- "24/7 support"
|
||||||
|
- "production ownership"
|
||||||
|
- "incident response"
|
||||||
|
→ If ANY found: SKIP IMMEDIATELY (hard requirement)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 4: Tech Stack Check (20 seconds)
|
||||||
|
```
|
||||||
|
Does job mention:
|
||||||
|
- Python? Go? Rust? (preferred)
|
||||||
|
- Or Java? C? JavaScript? (acceptable)
|
||||||
|
→ If only: C++, C#, .NET, Java only: Lower priority but consider
|
||||||
|
→ If only: Frontend-heavy or full-stack: Consider lower
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 5: Company & Culture Check (30 seconds)
|
||||||
|
```
|
||||||
|
Company mission: Does it align with your values?
|
||||||
|
Company size: Startup? Scale-up? Established?
|
||||||
|
Team size: How many engineers?
|
||||||
|
Growth: Profitable? Funded? Stable?
|
||||||
|
→ Red flags: "Hustle culture", "startup energy", "move fast/break things"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verification Process
|
||||||
|
|
||||||
|
Found a position that passes filters? Verify it's real:
|
||||||
|
|
||||||
|
### 1. Find on Job Board ✓
|
||||||
|
- Position found on WeWorkRemotely, RemoteOK, etc.
|
||||||
|
- Note the posting date
|
||||||
|
- Screenshot or bookmark
|
||||||
|
|
||||||
|
### 2. Go to Company Website
|
||||||
|
- Search: "[Company Name] careers" in Google
|
||||||
|
- Or go directly: company.com/jobs
|
||||||
|
- Example: stripe.com/jobs, gitlab.com/careers
|
||||||
|
|
||||||
|
### 3. Find the Exact Role
|
||||||
|
- Look for same job title and team
|
||||||
|
- Verify posting date (not old)
|
||||||
|
- Check if "Apply Now" button is active
|
||||||
|
- Read full job description for red flags
|
||||||
|
|
||||||
|
### 4. Get Direct Application URL
|
||||||
|
- Copy the direct link from company site
|
||||||
|
- This is what you'll use to apply
|
||||||
|
- Save in job_search.html dashboard
|
||||||
|
|
||||||
|
### 5. Final On-Call Check
|
||||||
|
- Read full job description one more time
|
||||||
|
- Search for: "on-call", "pager", "24/7", "incident response"
|
||||||
|
- If found: Flag as red, skip application
|
||||||
|
- If not found: Proceed to applying
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Application Workflow
|
||||||
|
|
||||||
|
Once you've found and verified a great position:
|
||||||
|
|
||||||
|
### 1. Get Job Description
|
||||||
|
- Copy full job description
|
||||||
|
- Save it
|
||||||
|
|
||||||
|
### 2. Build Resume
|
||||||
|
```
|
||||||
|
/build-resume [paste job description]
|
||||||
|
```
|
||||||
|
This creates:
|
||||||
|
- Customized resume
|
||||||
|
- Customized cover letter
|
||||||
|
- Job breakdown with strategy notes
|
||||||
|
- PDFs ready to submit
|
||||||
|
|
||||||
|
### 3. Apply on Company Site
|
||||||
|
- Use direct URL from company careers page (not job board)
|
||||||
|
- Submit resume and cover letter
|
||||||
|
- Optional: Write personalized cover letter
|
||||||
|
|
||||||
|
### 4. Log Application
|
||||||
|
- Update `/home/paul/.claude/projects/-home-paul-Public-resume/memory/applications_tracker.md`
|
||||||
|
- Record: date applied, company, role, fit score
|
||||||
|
- Set reminder for follow-up (1 week)
|
||||||
|
|
||||||
|
### 5. LinkedIn Connect
|
||||||
|
- Find hiring manager or team member
|
||||||
|
- Send connection request with personal note
|
||||||
|
- Mention: "Just applied for [Role] at [Company]"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Batch Application Strategy
|
||||||
|
|
||||||
|
Research shows **3-5 focused applications per week** is better than:
|
||||||
|
- ❌ Applying to 20+ per day (low quality)
|
||||||
|
- ❌ Waiting weeks between applications (momentum loss)
|
||||||
|
- ✓ 3-5 quality fits with customized materials
|
||||||
|
- ✓ Consistent follow-up cadence
|
||||||
|
|
||||||
|
### Week 1: Find & Apply
|
||||||
|
- Mon: Search, find 3-5 positions
|
||||||
|
- Tue-Thu: Build resumes, customize cover letters
|
||||||
|
- Fri: Submit all applications
|
||||||
|
|
||||||
|
### Week 2: Follow-Up
|
||||||
|
- Connect on LinkedIn with 3-5 hiring managers
|
||||||
|
- Check email for responses
|
||||||
|
- If no response from initial batch: Pursue interviews from interested companies
|
||||||
|
|
||||||
|
### Week 3: Build on Interest
|
||||||
|
- Interview prep for interested companies
|
||||||
|
- Continue search for new positions
|
||||||
|
- Repeat cycle
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Search Optimizations
|
||||||
|
|
||||||
|
### Set Email Alerts
|
||||||
|
- Indeed: Daily email for "remote backend engineer $130K"
|
||||||
|
- LinkedIn: Weekly digest for saved searches
|
||||||
|
- WeWorkRemotely: Weekly job alert email
|
||||||
|
|
||||||
|
### Use Advanced Filters
|
||||||
|
**Indeed search:**
|
||||||
|
```
|
||||||
|
(backend engineer OR platform engineer OR infrastructure engineer)
|
||||||
|
AND remote
|
||||||
|
AND salary:130000
|
||||||
|
```
|
||||||
|
|
||||||
|
**LinkedIn search:**
|
||||||
|
```
|
||||||
|
Title: Backend Engineer, Platform Engineer, or Infrastructure Engineer
|
||||||
|
Location: On my own terms
|
||||||
|
Salary: $130K-$300K
|
||||||
|
Experience: Mid-Senior
|
||||||
|
```
|
||||||
|
|
||||||
|
**RemoteOK search:**
|
||||||
|
```
|
||||||
|
Skills: Backend, Python, Golang, Rust
|
||||||
|
Min Salary: $130,000
|
||||||
|
Job Type: Full-time, Permanent
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customize Searches by Tech
|
||||||
|
If you want Python-heavy roles:
|
||||||
|
- Add "Django" or "FastAPI" to search
|
||||||
|
- Check RemotePython.com weekly
|
||||||
|
|
||||||
|
If interested in Go roles:
|
||||||
|
- Add "Go" or "Golang" to search
|
||||||
|
- Check golang.cafe daily
|
||||||
|
|
||||||
|
If interested in Rust roles:
|
||||||
|
- Check RustJobs.dev weekly
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tracking & Metrics
|
||||||
|
|
||||||
|
### Track These
|
||||||
|
- Positions found per week
|
||||||
|
- Positions verified
|
||||||
|
- Applications submitted
|
||||||
|
- Response rate
|
||||||
|
- Interview conversion
|
||||||
|
|
||||||
|
### Weekly Metric Goals
|
||||||
|
- **Find:** 5-10 positions from daily searches
|
||||||
|
- **Verify:** 3-5 verified on company sites
|
||||||
|
- **Apply:** 3-5 quality applications
|
||||||
|
- **Response:** Track replies, interviews, offers
|
||||||
|
|
||||||
|
### Save Search Results
|
||||||
|
After finding and verifying a position, save to search folder:
|
||||||
|
```
|
||||||
|
/job-search track-found [company] [role] [URL] [fit-score]
|
||||||
|
```
|
||||||
|
|
||||||
|
This saves search results to `/home/paul/Public/resume/search/` and updates `/home/paul/Public/resume/job_search.html` with your new position.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Red Flags Checklist
|
||||||
|
|
||||||
|
### Skip Immediately If:
|
||||||
|
- [ ] On-call/pager duty mentioned
|
||||||
|
- [ ] 24/7 support required
|
||||||
|
- [ ] "Startup hustle" or "move fast" culture
|
||||||
|
- [ ] Non-remote (despite claiming "remote friendly")
|
||||||
|
- [ ] Heavy management/mentoring emphasized
|
||||||
|
- [ ] No salary transparency
|
||||||
|
- [ ] Unclear role responsibilities
|
||||||
|
- [ ] Negative Glassdoor reviews about work-life balance
|
||||||
|
|
||||||
|
### Yellow Flags (Research More):
|
||||||
|
- [ ] Equity-heavy compensation (low base)
|
||||||
|
- [ ] Very high meeting culture
|
||||||
|
- [ ] Frequent "emergency" incidents mentioned
|
||||||
|
- [ ] Rapid team turnover (from research)
|
||||||
|
- [ ] Vague about on-call expectations
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tools & Resources
|
||||||
|
|
||||||
|
**Files in your project:**
|
||||||
|
- `/home/paul/Public/resume/JOB-BOARDS-TO-SEARCH.md` — Complete board list
|
||||||
|
- `/home/paul/Public/resume/job_search.html` — Dashboard of 35+ positions
|
||||||
|
- `/home/paul/.claude/projects/-home-paul-Public-resume/memory/applications_tracker.md` — Your application log
|
||||||
|
|
||||||
|
**Related skills:**
|
||||||
|
- `/build-resume` — Build customized resumes and cover letters
|
||||||
|
- `job-search` — This skill, for finding and filtering positions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Monthly Check-In
|
||||||
|
|
||||||
|
Once per month, evaluate:
|
||||||
|
- **Quality:** Are positions good fits?
|
||||||
|
- **Quantity:** Finding enough positions?
|
||||||
|
- **Success:** Getting interviews? Offers?
|
||||||
|
- **Strategy:** Need to adjust boards or search criteria?
|
||||||
|
|
||||||
|
Update `JOB-BOARDS-TO-SEARCH.md` (in this skill directory) if:
|
||||||
|
- A board is consistently low-quality
|
||||||
|
- A board is consistently excellent
|
||||||
|
- You discover new boards to add
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated:** March 18, 2026
|
||||||
320
.claude/skills/job-search/skill.md
Normal file
320
.claude/skills/job-search/skill.md
Normal file
@@ -0,0 +1,320 @@
|
|||||||
|
---
|
||||||
|
name: job-search
|
||||||
|
description: Find, verify, and track backend engineer job opportunities across multiple platforms
|
||||||
|
type: skill
|
||||||
|
arguments:
|
||||||
|
- name: search_type
|
||||||
|
description: "Type of search: 'find-positions', 'verify-position', 'check-criteria', 'track-found', 'search-board', or 'help'"
|
||||||
|
required: false
|
||||||
|
output:
|
||||||
|
- positions_found: List of matching opportunities
|
||||||
|
- verification_status: Confirmation that position exists on company careers page
|
||||||
|
- dashboard_update: Updated job_search.html with new positions
|
||||||
|
- tracking_record: Entry in applications_tracker memory
|
||||||
|
---
|
||||||
|
|
||||||
|
# job-search Skill
|
||||||
|
|
||||||
|
Find, verify, and track backend engineer job opportunities with quality filtering.
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
```
|
||||||
|
/job-search [search type or query]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Search Types
|
||||||
|
|
||||||
|
### Find Positions
|
||||||
|
```
|
||||||
|
/job-search find-positions [optional: board name or criteria]
|
||||||
|
```
|
||||||
|
|
||||||
|
Searches across configured job boards for matching roles. Returns:
|
||||||
|
- Direct company links
|
||||||
|
- Salary when available
|
||||||
|
- Remote status
|
||||||
|
- On-call/pager duty flags
|
||||||
|
|
||||||
|
### Verify Position
|
||||||
|
```
|
||||||
|
/job-search verify-position [company name and role]
|
||||||
|
```
|
||||||
|
|
||||||
|
Confirms position exists on company's official careers page:
|
||||||
|
- Checks company website directly (not job board)
|
||||||
|
- Validates role details
|
||||||
|
- Finds direct application URL
|
||||||
|
- Warns if position appears to be filled
|
||||||
|
|
||||||
|
### Check Criteria
|
||||||
|
```
|
||||||
|
/job-search check-criteria [position URL or description]
|
||||||
|
```
|
||||||
|
|
||||||
|
Evaluates position against your requirements:
|
||||||
|
- ✅ Remote eligible (100% remote or work-from-home)
|
||||||
|
- ✅ No on-call/pager duty
|
||||||
|
- ✅ Salary $130K+
|
||||||
|
- ✅ Backend engineer role
|
||||||
|
- ✅ Preferred tech stack
|
||||||
|
|
||||||
|
Returns fit assessment and yellow/red flags.
|
||||||
|
|
||||||
|
### Track Found Position
|
||||||
|
```
|
||||||
|
/job-search track-found [company, role, URL, fit score]
|
||||||
|
```
|
||||||
|
|
||||||
|
Adds position to job_search.html dashboard:
|
||||||
|
- Updates dashboard with new position
|
||||||
|
- Logs in applications_tracker memory
|
||||||
|
- Sets on-call status based on job description
|
||||||
|
- Records fit score (1-10)
|
||||||
|
|
||||||
|
### Search Specific Board
|
||||||
|
```
|
||||||
|
/job-search search-board [board name] [optional: filters]
|
||||||
|
```
|
||||||
|
|
||||||
|
Searches a specific job board. Examples:
|
||||||
|
- `search-board weworkremotely backend engineer`
|
||||||
|
- `search-board remoteok python`
|
||||||
|
- `search-board builtin golang`
|
||||||
|
- `search-board golang.cafe`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Your Search Criteria ✅
|
||||||
|
|
||||||
|
**Hard Requirements:**
|
||||||
|
- 🌍 Remote (100% remote or explicitly remote-eligible)
|
||||||
|
- 💰 Salary: $130K+ (minimum)
|
||||||
|
- ⚙️ Backend engineer / Platform engineer / Infrastructure engineer
|
||||||
|
- 🚫 NO on-call rotations / pager duty / 24x7 support
|
||||||
|
|
||||||
|
**Tech Stack Preferences:**
|
||||||
|
- Primary: Python, Go, Rust, Kubernetes, REST APIs
|
||||||
|
- Secondary: Java, C, JavaScript (for full-stack opportunities)
|
||||||
|
|
||||||
|
**Role Preferences:**
|
||||||
|
- Junior to Mid-level (don't emphasize Sr/Staff)
|
||||||
|
- Systems programming and backend focus
|
||||||
|
- No heavy management/mentoring responsibilities
|
||||||
|
|
||||||
|
**Company Preferences:**
|
||||||
|
- Meaningful work > hype
|
||||||
|
- Sustainable pace (no crunch culture)
|
||||||
|
- Async-friendly remote environments
|
||||||
|
- Growing companies with real problems
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Primary Job Boards (Check Daily/Weekly)
|
||||||
|
|
||||||
|
**General Tech:**
|
||||||
|
1. Indeed — https://indeed.com
|
||||||
|
2. LinkedIn — https://linkedin.com/jobs
|
||||||
|
3. Built In — https://builtin.com/jobs/remote/dev-engineering/
|
||||||
|
|
||||||
|
**Remote-Specific:**
|
||||||
|
4. WeWorkRemotely — https://weworkremotely.com
|
||||||
|
5. RemoteOK — https://remoteok.com
|
||||||
|
6. DailyRemote — https://dailyremote.com
|
||||||
|
|
||||||
|
**Other Primary:**
|
||||||
|
7. Cord.co — https://cord.co (passive matching)
|
||||||
|
8. JobServe — https://jobserve.com
|
||||||
|
|
||||||
|
**Specialized (Language-Specific):**
|
||||||
|
9. Golang.cafe — https://golang.cafe
|
||||||
|
10. RemotePython.com — https://remotepython.com
|
||||||
|
11. RustJobs.dev — https://rustjobs.dev
|
||||||
|
|
||||||
|
**Target Companies (Check Monthly):**
|
||||||
|
- Stripe: https://stripe.com/jobs
|
||||||
|
- GitLab: https://gitlab.com/careers
|
||||||
|
- Automattic: https://automattic.com/jobs
|
||||||
|
- Zapier: https://zapier.com/jobs
|
||||||
|
- Cloudflare: https://cloudflare.com/careers
|
||||||
|
- Vercel: https://vercel.com/careers
|
||||||
|
- Shopify: https://shopify.com/careers/search
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## On-Call Risk Flags
|
||||||
|
|
||||||
|
Watch for language that indicates on-call:
|
||||||
|
- "On-call rotation"
|
||||||
|
- "Pager duty"
|
||||||
|
- "24x7 support"
|
||||||
|
- "Production ownership"
|
||||||
|
- "On-call after hours"
|
||||||
|
- "Weekend support"
|
||||||
|
- "Incident response rotation"
|
||||||
|
|
||||||
|
⚠️ Flag for rejection if found.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verification Workflow
|
||||||
|
|
||||||
|
1. **Find position** on job board (RemoteOK, WeWorkRemotely, etc.)
|
||||||
|
2. **Go to company website** (e.g., "stripe.com/jobs" or search "Stripe careers")
|
||||||
|
3. **Find exact same role** on company site
|
||||||
|
4. **Verify it's real** (check posting date, check if hiring)
|
||||||
|
5. **Get direct URL** from company careers page
|
||||||
|
6. **Apply directly** (not through job board) if it meets criteria
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fit Scoring (1-10)
|
||||||
|
|
||||||
|
**10/10** — Perfect match
|
||||||
|
- Exact role match, all preferred tech, remote, good salary
|
||||||
|
|
||||||
|
**9/10** — Excellent fit
|
||||||
|
- One minor gap (e.g., Django experience when you know Python)
|
||||||
|
|
||||||
|
**8/10** — Strong fit
|
||||||
|
- One technical gap you can learn, but core role matches
|
||||||
|
|
||||||
|
**7/10** — Good fit
|
||||||
|
- Multiple small gaps, but core skills match and company is good
|
||||||
|
|
||||||
|
**6/10** — Okay fit
|
||||||
|
- Significant technical gap, or secondary area (e.g., full-stack when backend is preference)
|
||||||
|
|
||||||
|
**5-Below** — Pass
|
||||||
|
- Major gaps, wrong role type, or red flags
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dashboard & Tracking
|
||||||
|
|
||||||
|
**View found positions:**
|
||||||
|
- Open `/home/paul/Public/resume/job_search.html` in browser
|
||||||
|
- 35+ verified positions with filters and sorting
|
||||||
|
- Green (no on-call), yellow (unknown), red (has on-call)
|
||||||
|
- Direct links to all postings
|
||||||
|
|
||||||
|
**Track applications:**
|
||||||
|
- File: `/home/paul/.claude/projects/-home-paul-Public-resume/memory/applications_tracker.md`
|
||||||
|
- Log applied positions with dates
|
||||||
|
- Update status (applied, interviewing, rejected, offer)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Search Strategy
|
||||||
|
|
||||||
|
### Daily (5 minutes)
|
||||||
|
- [ ] Check WeWorkRemotely for new postings
|
||||||
|
- [ ] Scan RemoteOK with filters (backend, $130K+, remote)
|
||||||
|
- [ ] Browse Built In's remote section
|
||||||
|
|
||||||
|
### Weekly (15 minutes)
|
||||||
|
- [ ] DailyRemote — Fresh listings
|
||||||
|
- [ ] LinkedIn — Set custom alerts
|
||||||
|
- [ ] Cord.co — Check if matched to profiles
|
||||||
|
- [ ] Golang.cafe (if interested in Go roles)
|
||||||
|
|
||||||
|
### Monthly (30 minutes)
|
||||||
|
- [ ] Secondary boards (JobServe, JustRemote, Totaljobs, Hiring Cafe)
|
||||||
|
- [ ] Specialized boards (RemotePython.com, RustJobs.dev)
|
||||||
|
- [ ] Target company careers pages (Stripe, GitLab, Automattic, Zapier, Cloudflare, Vercel, Shopify, Twilio)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Common Search Filters
|
||||||
|
|
||||||
|
**Indeed:**
|
||||||
|
- Location: Remote
|
||||||
|
- Job Title: Backend Engineer / Platform Engineer / Software Engineer
|
||||||
|
- Salary: $130,000+
|
||||||
|
- Keywords: Python OR Go OR Rust
|
||||||
|
|
||||||
|
**LinkedIn:**
|
||||||
|
- Location: On my own terms
|
||||||
|
- Title: Backend Engineer / Platform Engineer / Infrastructure Engineer
|
||||||
|
- Salary: $130,000+
|
||||||
|
- Experience Level: Mid-Senior
|
||||||
|
|
||||||
|
**RemoteOK:**
|
||||||
|
- Skills: Backend, Python, Golang, Rust
|
||||||
|
- Min Salary: $130,000
|
||||||
|
- Job Type: Full-time, Permanent
|
||||||
|
|
||||||
|
**WeWorkRemotely:**
|
||||||
|
- Category: Dev Engineering
|
||||||
|
- Salary: $130,000+
|
||||||
|
- Timezone: Any (you handle async)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Red Flags to Avoid
|
||||||
|
|
||||||
|
❌ On-call/pager duty language
|
||||||
|
❌ "Startup hustle" or "high-energy" (often code for crunch)
|
||||||
|
❌ Excessive meeting culture ("fast-paced", "collaborative" without async details)
|
||||||
|
❌ Junior mentoring emphasized heavily
|
||||||
|
❌ Non-remote with "flexible remote options"
|
||||||
|
❌ Equity-heavy compensation (especially if low base)
|
||||||
|
❌ Vague role descriptions
|
||||||
|
❌ No clear career growth path
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Success Checklist
|
||||||
|
|
||||||
|
Before considering a position:
|
||||||
|
- [ ] Position is 100% remote or explicitly work-from-home
|
||||||
|
- [ ] No on-call/pager duty language
|
||||||
|
- [ ] Salary at or above $130K base
|
||||||
|
- [ ] Role is backend/platform/infrastructure focused
|
||||||
|
- [ ] Tech stack matches (Python, Go, Rust preferred)
|
||||||
|
- [ ] Company mission aligns with your values
|
||||||
|
- [ ] Team structure looks healthy
|
||||||
|
- [ ] Position verified on company careers page
|
||||||
|
- [ ] Ready to apply directly to company site
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## File Locations
|
||||||
|
|
||||||
|
- **Job boards list:** `JOB-BOARDS-TO-SEARCH.md` (in this skill directory)
|
||||||
|
- **Search results folder:** `/home/paul/Public/resume/search/` (local, not committed)
|
||||||
|
- **Dashboard:** `/home/paul/Public/resume/job_search.html`
|
||||||
|
- **Applications tracker:** `/home/paul/.claude/projects/-home-paul-Public-resume/memory/applications_tracker.md`
|
||||||
|
- **Job preferences:** `/home/paul/.claude/projects/-home-paul-Public-resume/memory/user_preferences.md`
|
||||||
|
- **Skill directory:** `/home/paul/Public/resume/.claude/skills/job-search/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Integration with build-resume
|
||||||
|
|
||||||
|
Found a great position? Use the other skill:
|
||||||
|
|
||||||
|
```
|
||||||
|
/build-resume [paste job description]
|
||||||
|
```
|
||||||
|
|
||||||
|
This will:
|
||||||
|
1. Create customized resume and cover letter
|
||||||
|
2. Generate job breakdown with strategy
|
||||||
|
3. Build PDFs ready to submit
|
||||||
|
4. Log application in tracker
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- **Job boards change frequently** — Update JOB-BOARDS-TO-SEARCH.md as you discover new ones
|
||||||
|
- **Verify everything** — Always check company careers page before applying through job board
|
||||||
|
- **Apply directly** — Less competition when applying to company site vs job board
|
||||||
|
- **Track everything** — Log all applications so you can follow up consistently
|
||||||
|
- **Batch applications** — Apply to 3-5 positions, then follow up week 1, week 2
|
||||||
|
- **Async communication** — Look for companies that explicitly value async work
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Last Updated: March 18, 2026
|
||||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -1,2 +1,8 @@
|
|||||||
.docker-build
|
.docker-build
|
||||||
.podman-build
|
.podman-build
|
||||||
|
|
||||||
|
# Job applications (local only, not committed)
|
||||||
|
applications/
|
||||||
|
|
||||||
|
# Job search results (local only, not committed)
|
||||||
|
search/
|
||||||
|
|||||||
355
CLAUDE.md
Normal file
355
CLAUDE.md
Normal file
@@ -0,0 +1,355 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ CRITICAL: NEVER FABRICATE NUMBERS OR DETAILS
|
||||||
|
|
||||||
|
**This is checked on every build-resume run. Violation is a critical error.**
|
||||||
|
|
||||||
|
- **ONLY use facts from `paul-halvorsen-resume-detailed.md`**
|
||||||
|
- DO NOT invent: team sizes, customer counts, specific metrics, percentages, achievements, scales
|
||||||
|
- If a detail isn't in the detailed resume, do not include it
|
||||||
|
- Allowed: reframe/reorder existing information, remove less relevant details
|
||||||
|
- **Examples of violations:**
|
||||||
|
- ❌ "$9 trillion in assets" (not in detailed resume)
|
||||||
|
- ❌ "40+ engineers" (not in detailed resume)
|
||||||
|
- ❌ "thousands of security events daily" (not in detailed resume)
|
||||||
|
- ✓ "10 auto-scaling clusters" (IS in detailed resume)
|
||||||
|
- ✓ "~90% CPU reduction" (IS in detailed resume)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
This is a resume builder using Pandoc to convert Markdown resumes with YAML metadata to PDF via LaTeX templates. The build process is containerized using Podman (Docker alternative) for reproducibility and portability.
|
||||||
|
|
||||||
|
## Build and Development Commands
|
||||||
|
|
||||||
|
**Directory Structure:**
|
||||||
|
Resumes are organized by company in subdirectories for easy management:
|
||||||
|
```
|
||||||
|
.
|
||||||
|
├── paul-halvorsen-resume.md (default/main resume)
|
||||||
|
├── paul-halvorsen-resume-detailed.md (comprehensive details)
|
||||||
|
├── templates/
|
||||||
|
│ ├── jb2resume.latex (classic template)
|
||||||
|
│ ├── jb2resume-modern.latex (improved modern template)
|
||||||
|
│ └── awesome-cv.latex (modern awesome-cv inspired)
|
||||||
|
├── files/
|
||||||
|
│ ├── paul-halvorsen-files-backend-engineer.md
|
||||||
|
│ ├── paul-halvorsen-files-backend-engineer.pdf (various templates)
|
||||||
|
│ └── ...
|
||||||
|
├── valon/
|
||||||
|
│ ├── paul-halvorsen-valon-software-engineer.md
|
||||||
|
│ ├── paul-halvorsen-valon-cover-letter.md
|
||||||
|
│ └── paul-halvorsen-valon-software-engineer.pdf (various templates)
|
||||||
|
└── [company]/
|
||||||
|
└── paul-halvorsen-[company]-[role].md
|
||||||
|
```
|
||||||
|
|
||||||
|
**Available Templates:**
|
||||||
|
|
||||||
|
1. **`jb2resume`** - Classic, traditional template
|
||||||
|
- Conservative design
|
||||||
|
- Best for: Traditional industries, classic look
|
||||||
|
- Command: `make resume FILE_NAME=path/to/resume`
|
||||||
|
|
||||||
|
2. **`jb2resume-modern`** (Recommended default)
|
||||||
|
- Modern improvements: better spacing, proper bullets, visual hierarchy
|
||||||
|
- Clean professional look with subtle visual accents
|
||||||
|
- Best for: Tech companies, modern look with substance
|
||||||
|
- Command: `make resume-modern FILE_NAME=path/to/resume`
|
||||||
|
|
||||||
|
3. **`awesome-cv`** - Modern, vibrant template
|
||||||
|
- Bold accent colors, prominent sections, contemporary design
|
||||||
|
- Best for: Startups, tech companies, when you want to stand out
|
||||||
|
- Command: `make resume-awesome FILE_NAME=path/to/resume`
|
||||||
|
|
||||||
|
**Build the resume PDF:**
|
||||||
|
```bash
|
||||||
|
# Build with default (modern) template
|
||||||
|
make resume FILE_NAME=paul-halvorsen-resume
|
||||||
|
|
||||||
|
# Build with modern template (improved jb2resume)
|
||||||
|
make resume-modern FILE_NAME=files/paul-halvorsen-files-backend-engineer
|
||||||
|
|
||||||
|
# Build with awesome-cv template (bold, modern design)
|
||||||
|
make resume-awesome FILE_NAME=valon/paul-halvorsen-valon-software-engineer
|
||||||
|
|
||||||
|
# Show all available commands and examples
|
||||||
|
make help
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example workflow for custom resumes:**
|
||||||
|
```bash
|
||||||
|
# Using /build-resume (recommended)
|
||||||
|
/build-resume [paste job description]
|
||||||
|
|
||||||
|
# Or manual build
|
||||||
|
mkdir -p acme/backend-engineer
|
||||||
|
# Create paul-halvorsen-resume.md in acme/backend-engineer/
|
||||||
|
|
||||||
|
# Build with modern template
|
||||||
|
make resume-modern FILE_NAME=acme/backend-engineer/paul-halvorsen-resume
|
||||||
|
|
||||||
|
# Build cover letter
|
||||||
|
make cover-letter FILE_NAME=acme/backend-engineer/paul-halvorsen-cover-letter
|
||||||
|
|
||||||
|
# Output:
|
||||||
|
# acme/backend-engineer/paul-halvorsen-resume.pdf
|
||||||
|
# acme/backend-engineer/paul-halvorsen-cover-letter.pdf
|
||||||
|
```
|
||||||
|
|
||||||
|
**Clean commands:**
|
||||||
|
- `make clean` - Remove LaTeX log files
|
||||||
|
- `make cleanpaper` - Remove the generated PDF (uses FILE_NAME variable)
|
||||||
|
- `make cleanpodman` - Remove the Podman image and build cache (forces rebuild next time)
|
||||||
|
- `make cleanall` - Remove everything (logs, PDF, and Podman image)
|
||||||
|
|
||||||
|
## High-Level Architecture
|
||||||
|
|
||||||
|
### Resume Processing Pipeline
|
||||||
|
1. **Input**: Markdown file with YAML metadata block (`*.md`)
|
||||||
|
2. **Processing**: Pandoc converts markdown to LaTeX using a template
|
||||||
|
3. **Output**: PDF generated via LaTeX compilation
|
||||||
|
4. **Containerization**: All processing happens in a Podman container to ensure consistent output
|
||||||
|
|
||||||
|
### Key Components
|
||||||
|
|
||||||
|
**Templates** (`templates/` directory):
|
||||||
|
- `jb2resume.latex` - Default resume template (recommended)
|
||||||
|
- `jb2-modern.latex` - Alternative modern template
|
||||||
|
|
||||||
|
Both templates are dual-licensed under GPL v2+ and BSD 3-Clause.
|
||||||
|
|
||||||
|
**Dockerfile**:
|
||||||
|
- Based on `pandoc/latex:latest`
|
||||||
|
- Installs additional LaTeX packages: `enumitem`, `sectsty`, `underscore`
|
||||||
|
- Sets `/data` as the working volume
|
||||||
|
|
||||||
|
**Makefile**:
|
||||||
|
- Uses Podman (not Docker)
|
||||||
|
- `FILE_NAME=paul-halvorsen-resume` - Change this to build a different `.md` file
|
||||||
|
- `USER=paul` - Container user for file permissions
|
||||||
|
- Automatically detects if the Podman image needs rebuilding
|
||||||
|
|
||||||
|
### Resume Structure
|
||||||
|
|
||||||
|
**YAML Metadata Block** (top of `.md` file):
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
name: [Your Name]
|
||||||
|
keywords: [comma-separated keywords for PDF metadata]
|
||||||
|
left-column:
|
||||||
|
- [Line 1 for left column under name]
|
||||||
|
- [Line 2 for left column]
|
||||||
|
right-column:
|
||||||
|
- [Line 1 for right column under name]
|
||||||
|
- [Line 2 for right column]
|
||||||
|
fontsize: [default 10pt]
|
||||||
|
fontenc: [default T1]
|
||||||
|
urlcolor: [default blue]
|
||||||
|
linkcolor: [default magenta]
|
||||||
|
numbersections: [true/false, controls section numbering]
|
||||||
|
name-color: [SVG color name like DarkSlateGray, applies to name]
|
||||||
|
section-color: [SVG color name like Tomato, applies to section headers]
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
The metadata block is required and must appear at the very top of the markdown file before any content.
|
||||||
|
|
||||||
|
**Resume Content**: Standard Markdown after the metadata block. Headers become sections, lists are formatted naturally.
|
||||||
|
|
||||||
|
### Multiple Resume Versions
|
||||||
|
|
||||||
|
The repository contains two main resume files:
|
||||||
|
- `paul-halvorsen-resume.md` - Concise version (built by default via Makefile)
|
||||||
|
- `paul-halvorsen-resume-detailed.md` - Extended version with more details
|
||||||
|
|
||||||
|
To build a different version, either:
|
||||||
|
1. Modify the `FILE_NAME` variable in the Makefile, or
|
||||||
|
2. Run Pandoc directly with the desired input file
|
||||||
|
|
||||||
|
### Important Notes
|
||||||
|
|
||||||
|
- The Makefile assumes Podman is installed and available
|
||||||
|
- Build output (.pdf files) and Podman artifacts (.podman-build file) are not tracked in git
|
||||||
|
- The `.podman-build` marker file prevents unnecessary image rebuilds (remove it to force rebuild)
|
||||||
|
- All LaTeX processing happens inside the container; no local LaTeX installation is needed
|
||||||
|
|
||||||
|
## Creating Customized Resumes for Job Applications
|
||||||
|
|
||||||
|
The detailed resume (`paul-halvorsen-resume-detailed.md`) contains comprehensive information across all roles and projects. To create a customized resume for a specific job application:
|
||||||
|
|
||||||
|
### Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Use /build-resume with job description
|
||||||
|
/build-resume [paste job description]
|
||||||
|
```
|
||||||
|
|
||||||
|
Claude will:
|
||||||
|
- Check if you've already applied to this company/position (prevent duplicates)
|
||||||
|
- Create clean directory structure
|
||||||
|
- Generate customized resume and cover letter
|
||||||
|
- Build PDFs automatically
|
||||||
|
- Create job analysis document
|
||||||
|
|
||||||
|
### Directory Structure
|
||||||
|
|
||||||
|
New standardized format for all applications:
|
||||||
|
|
||||||
|
```
|
||||||
|
company/
|
||||||
|
└── position/
|
||||||
|
├── paul-halvorsen-resume.md
|
||||||
|
├── paul-halvorsen-resume.pdf
|
||||||
|
├── paul-halvorsen-cover-letter.md
|
||||||
|
├── paul-halvorsen-cover-letter.pdf
|
||||||
|
└── job-breakdown.md (analysis & strategy)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Examples:**
|
||||||
|
- `tenstorrent/devrel-engineer/paul-halvorsen-resume.md`
|
||||||
|
- `stripe/backend-engineer/paul-halvorsen-resume.md`
|
||||||
|
- `files/senior-backend-engineer/paul-halvorsen-resume.md`
|
||||||
|
|
||||||
|
### Manual Build
|
||||||
|
|
||||||
|
If manually creating/updating files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build with modern template
|
||||||
|
make resume-modern FILE_NAME=company/position/paul-halvorsen-resume
|
||||||
|
|
||||||
|
# Build cover letter
|
||||||
|
make cover-letter FILE_NAME=company/position/paul-halvorsen-cover-letter
|
||||||
|
|
||||||
|
# Build both
|
||||||
|
make resume-modern FILE_NAME=company/position/paul-halvorsen-resume && \
|
||||||
|
make cover-letter FILE_NAME=company/position/paul-halvorsen-cover-letter
|
||||||
|
```
|
||||||
|
|
||||||
|
### Application Tracking
|
||||||
|
|
||||||
|
All applications tracked in memory at:
|
||||||
|
```
|
||||||
|
~/.claude/projects/-home-paul-Public-resume/memory/applications_tracker.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Prevents duplicate efforts for the same company/position combination.
|
||||||
|
|
||||||
|
### Expected Result
|
||||||
|
|
||||||
|
A 1-2 page resume tailored to the job requirements with:
|
||||||
|
- Reordered work experience (most relevant roles first)
|
||||||
|
- Emphasized skills and metrics matching the job description
|
||||||
|
- Highlighted relevant accomplishments and projects
|
||||||
|
- Customized summary/intro focused on the role
|
||||||
|
- Compelling cover letter addressing company mission and role fit
|
||||||
|
- Job analysis document with fit assessment and strategy notes
|
||||||
|
|
||||||
|
The detailed resume includes proficiency levels, performance metrics, specializations, and comprehensive technical details that allow Claude Code to intelligently match your background to specific job requirements.
|
||||||
|
|
||||||
|
## Template Selection Guide
|
||||||
|
|
||||||
|
### When to Use Each Template
|
||||||
|
|
||||||
|
**`jb2resume` (Classic)**
|
||||||
|
- Traditional companies (finance, government, law)
|
||||||
|
- Conservative industries
|
||||||
|
- When you want a proven, time-tested design
|
||||||
|
- Important: ATS compatibility is high priority
|
||||||
|
- Example: Financial institutions, government agencies
|
||||||
|
|
||||||
|
**`jb2resume-modern` (Recommended for Most Tech)**
|
||||||
|
- Tech startups and established tech companies
|
||||||
|
- Modern, professional look without being flashy
|
||||||
|
- Better spacing and readability than classic
|
||||||
|
- Still ATS-friendly and traditional enough for conservative industries
|
||||||
|
- Best balance of modern and professional
|
||||||
|
- **Default recommendation for Files.com, Valon, and similar companies**
|
||||||
|
|
||||||
|
**`awesome-cv` (Modern & Bold)**
|
||||||
|
- Early-stage startups and growth-stage companies (Series A-C)
|
||||||
|
- Design-forward or forward-thinking companies
|
||||||
|
- When you want to make a visual impression
|
||||||
|
- Companies that explicitly value design and attention to detail
|
||||||
|
- Use when: "We're disrupting X industry" is in the job description
|
||||||
|
- Example: Files.com, Valon, and similar Series C companies
|
||||||
|
|
||||||
|
### Quick Decision Tree
|
||||||
|
|
||||||
|
```
|
||||||
|
Is the company a startup or growth-stage company?
|
||||||
|
├─ YES → Use awesome-cv (bold, modern, stands out)
|
||||||
|
└─ NO → Is it a traditional/conservative industry?
|
||||||
|
├─ YES → Use jb2resume (classic, proven)
|
||||||
|
└─ NO → Use jb2resume-modern (modern but professional)
|
||||||
|
```
|
||||||
|
|
||||||
|
### For Paul's Current Applications
|
||||||
|
|
||||||
|
- **Files.com** (Series C, a16z-backed): awesome-cv recommended
|
||||||
|
- **Valon** (Series C, a16z-backed): awesome-cv recommended
|
||||||
|
- **Enterprise customers**: jb2resume-modern
|
||||||
|
- **Government/DoD contracts**: jb2resume (classic)
|
||||||
|
|
||||||
|
## CRITICAL: Resume Content Rules
|
||||||
|
|
||||||
|
### Never Fabricate Numbers, Metrics, or Details
|
||||||
|
|
||||||
|
**⚠️ BLOCKING REQUIREMENT: DO THIS CHECK BEFORE WRITING EACH RESUME SECTION**
|
||||||
|
|
||||||
|
**ONLY use facts from `paul-halvorsen-resume-detailed.md` as the source of truth.**
|
||||||
|
|
||||||
|
**Do NOT invent:**
|
||||||
|
- Team sizes ("40+ engineers across company")
|
||||||
|
- Customer/endpoint counts unless explicitly documented
|
||||||
|
- Specific metrics not stated in detailed resume
|
||||||
|
- Job responsibilities not listed
|
||||||
|
- Percentages, scales, or achievements without documentation
|
||||||
|
- Any number or quantifiable claim not in detailed resume
|
||||||
|
|
||||||
|
**Pre-write checklist (do this for EVERY bullet point):**
|
||||||
|
- [ ] Is this number/metric in paul-halvorsen-resume-detailed.md?
|
||||||
|
- [ ] If NO, do not include it
|
||||||
|
- [ ] Am I reframing documented information, or inventing new information?
|
||||||
|
- [ ] If inventing, stop and remove the bullet
|
||||||
|
|
||||||
|
**What IS allowed:**
|
||||||
|
- Reorder existing information for job relevance
|
||||||
|
- Rephrase/reframe documentation for clarity
|
||||||
|
- Remove less relevant details to save space
|
||||||
|
- Use exact metrics/percentages from detailed resume
|
||||||
|
|
||||||
|
**Violations Paul has caught (do not repeat):**
|
||||||
|
- ❌ "$9 trillion in assets" (Addepar) — Not in detailed resume
|
||||||
|
- ❌ "40+ engineers across company" (DOPE) — Not in detailed resume
|
||||||
|
- ❌ "thousands of security events daily" (made up) — Not documented anywhere
|
||||||
|
|
||||||
|
**Valid examples (these ARE documented):**
|
||||||
|
- ✓ "Performance improvements: reduced CPU usage ~90%" → Binary Defense section
|
||||||
|
- ✓ "Customers: Fortune 500 companies, thousands of endpoints" → Binary Defense section
|
||||||
|
- ✓ "10 auto-scaling clusters in AWS" → Abnormal AI section
|
||||||
|
- ✓ "MySQL database (thousands of records)" → NSA section
|
||||||
|
|
||||||
|
**Apply this rule to:**
|
||||||
|
- Work experience descriptions
|
||||||
|
- Metrics and achievements
|
||||||
|
- Team structures
|
||||||
|
- Customer information
|
||||||
|
- Technical details
|
||||||
|
- ANY quantifiable claim
|
||||||
|
|
||||||
|
### Job Breakdown File Checklist
|
||||||
|
|
||||||
|
When creating `job-breakdown.md` files:
|
||||||
|
- [ ] All numbers in "Requirements Analysis" table come from job posting OR documented facts
|
||||||
|
- [ ] All numbers in "Strengths in Context" are from paul-halvorsen-resume-detailed.md
|
||||||
|
- [ ] No invented metrics like "years of experience with technology X" unless documented
|
||||||
|
- [ ] Salary recommendations are conservative estimates, not fabricated
|
||||||
|
- [ ] Keyword match % is realistic based on actual resume content
|
||||||
|
- [ ] All claims about Paul's background are verifiable from detailed resume
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
FROM pandoc/latex:latest
|
FROM ubuntu:latest
|
||||||
RUN tlmgr update --self \
|
RUN apt-get update && apt-get install -y pandoc texlive texlive-latex-extra texlive-fonts-recommended
|
||||||
&& tlmgr install enumitem sectsty underscore
|
|
||||||
WORKDIR /data
|
WORKDIR /data
|
||||||
VOLUME ["/data"]
|
VOLUME ["/data"]
|
||||||
|
ENTRYPOINT ["pandoc"]
|
||||||
|
|||||||
76
Makefile
76
Makefile
@@ -1,8 +1,9 @@
|
|||||||
USER=paul
|
USER=paul
|
||||||
FILE_NAME=paul-halvorsen-resume
|
FILE_NAME?=paul-halvorsen-resume
|
||||||
|
TEMPLATE?=jb2resume-modern
|
||||||
|
|
||||||
NAME=build-paul-resume
|
NAME=localhost/build-paul-resume
|
||||||
CONTAINER_NAME=${NAME}-container
|
CONTAINER_NAME=build-paul-resume-container
|
||||||
|
|
||||||
USER_ID=$(shell id -u ${USER})
|
USER_ID=$(shell id -u ${USER})
|
||||||
GROUP_ID=$(shell id -g ${USER})
|
GROUP_ID=$(shell id -g ${USER})
|
||||||
@@ -12,16 +13,81 @@ ifneq ("$(shell podman images -q ${NAME} 2> /dev/null)","")
|
|||||||
CONTAINER_EXISTS=1
|
CONTAINER_EXISTS=1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Available templates:
|
||||||
|
# - jb2resume: Classic template (original)
|
||||||
|
# - jb2resume-modern: Improved with better spacing and typography
|
||||||
|
# - awesome-cv: Modern Awesome-CV based template
|
||||||
|
.PHONY: resume resume-modern resume-awesome resume-ats cover-letter help clean cleanpaper cleanpodman cleanall
|
||||||
|
|
||||||
|
cover-letter: .podman-build
|
||||||
|
podman run --rm \
|
||||||
|
--volume "$(realpath .)":/data \
|
||||||
|
--name ${CONTAINER_NAME} \
|
||||||
|
${NAME} \
|
||||||
|
${FILE_NAME}.md -f markdown --template templates/cover-letter.latex -o ${FILE_NAME}.pdf
|
||||||
|
@echo "✓ Generated ${FILE_NAME}.pdf (cover letter)"
|
||||||
|
|
||||||
|
resume-ats: TEMPLATE=jb2resume-ats
|
||||||
|
resume-ats: .podman-build
|
||||||
|
podman run --rm \
|
||||||
|
--volume "$(realpath .)":/data \
|
||||||
|
--name ${CONTAINER_NAME} \
|
||||||
|
${NAME} \
|
||||||
|
${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/jb2resume-ats.latex -o ${FILE_NAME}.pdf
|
||||||
|
@echo "✓ Generated ${FILE_NAME}.pdf (template: jb2resume-ats)"
|
||||||
|
|
||||||
|
resume: TEMPLATE=jb2resume
|
||||||
resume: .podman-build
|
resume: .podman-build
|
||||||
podman run --rm \
|
podman run --rm \
|
||||||
--volume "$(realpath .)":/data \
|
--volume "$(realpath .)":/data \
|
||||||
--name ${CONTAINER_NAME} \
|
--name ${CONTAINER_NAME} \
|
||||||
${NAME} \
|
${NAME} \
|
||||||
${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/jb2resume.latex -o ${FILE_NAME}.pdf
|
${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/${TEMPLATE}.latex -o ${FILE_NAME}.pdf
|
||||||
|
@echo "✓ Generated ${FILE_NAME}.pdf (template: ${TEMPLATE})"
|
||||||
|
|
||||||
|
resume-modern: TEMPLATE=jb2resume-modern
|
||||||
|
resume-modern: .podman-build
|
||||||
|
podman run --rm \
|
||||||
|
--volume "$(realpath .)":/data \
|
||||||
|
--name ${CONTAINER_NAME} \
|
||||||
|
${NAME} \
|
||||||
|
${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/jb2resume-modern.latex -o ${FILE_NAME}.pdf
|
||||||
|
@echo "✓ Generated ${FILE_NAME}.pdf (template: jb2resume-modern)"
|
||||||
|
|
||||||
|
resume-awesome: TEMPLATE=awesome-cv
|
||||||
|
resume-awesome: .podman-build
|
||||||
|
podman run --rm \
|
||||||
|
--volume "$(realpath .)":/data \
|
||||||
|
--name ${CONTAINER_NAME} \
|
||||||
|
${NAME} \
|
||||||
|
${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/awesome-cv.latex -o ${FILE_NAME}.pdf
|
||||||
|
@echo "✓ Generated ${FILE_NAME}.pdf (template: awesome-cv)"
|
||||||
|
|
||||||
.podman-build:
|
.podman-build:
|
||||||
if [ ${CONTAINER_EXISTS} -ne 1 ]; then podman build -t ${NAME} . && echo "" > .podman-build; fi
|
if [ ${CONTAINER_EXISTS} -ne 1 ]; then podman build -t ${NAME} . && echo "" > .podman-build; fi
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Resume Builder - Available Commands:"
|
||||||
|
@echo ""
|
||||||
|
@echo "Default (modern template with better spacing):"
|
||||||
|
@echo " make resume FILE_NAME=path/to/resume"
|
||||||
|
@echo ""
|
||||||
|
@echo "Templates:"
|
||||||
|
@echo " make resume FILE_NAME=path/to/resume # Classic jb2resume"
|
||||||
|
@echo " make resume-modern FILE_NAME=path/to/resume # Modern improved template"
|
||||||
|
@echo " make resume-awesome FILE_NAME=path/to/resume # Awesome-CV inspired template"
|
||||||
|
@echo " make resume-ats FILE_NAME=path/to/resume # ATS-optimized single-column"
|
||||||
|
@echo ""
|
||||||
|
@echo "Examples:"
|
||||||
|
@echo " make resume-modern FILE_NAME=files/paul-halvorsen-files-backend-engineer"
|
||||||
|
@echo " make resume-awesome FILE_NAME=valon/paul-halvorsen-valon-software-engineer"
|
||||||
|
@echo ""
|
||||||
|
@echo "Cleanup:"
|
||||||
|
@echo " make clean # Remove LaTeX log files"
|
||||||
|
@echo " make cleanpaper # Remove generated PDF"
|
||||||
|
@echo " make cleanpodman # Remove Podman image"
|
||||||
|
@echo " make cleanall # Remove everything"
|
||||||
|
|
||||||
cleanpaper:
|
cleanpaper:
|
||||||
rm -f ${FILE_NAME}.pdf
|
rm -f ${FILE_NAME}.pdf
|
||||||
|
|
||||||
@@ -30,7 +96,7 @@ cleanpodman:
|
|||||||
if [ ${CONTAINER_EXISTS} -ne 0 ]; then podman image rm -f ${NAME} && rm -f .podman-build; fi
|
if [ ${CONTAINER_EXISTS} -ne 0 ]; then podman image rm -f ${NAME} && rm -f .podman-build; fi
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.log
|
find . -name "*.log" -type f -delete
|
||||||
|
|
||||||
cleanall: clean cleanpaper cleanpodman
|
cleanall: clean cleanpaper cleanpodman
|
||||||
@echo "Cleanup everything"
|
@echo "Cleanup everything"
|
||||||
|
|||||||
1247
notes/LINKEDIN-OPTIMIZATION.md
Normal file
1247
notes/LINKEDIN-OPTIMIZATION.md
Normal file
File diff suppressed because it is too large
Load Diff
79
notes/README.md
Normal file
79
notes/README.md
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# Notes Directory
|
||||||
|
|
||||||
|
Documentation, guidance, and optimization notes for your job search and application workflow.
|
||||||
|
|
||||||
|
These files are committed to git because they're reference materials that help guide your process.
|
||||||
|
|
||||||
|
## Files
|
||||||
|
|
||||||
|
### LINKEDIN-OPTIMIZATION.md
|
||||||
|
Complete audit and optimization strategy for your LinkedIn profile.
|
||||||
|
|
||||||
|
**Sections:**
|
||||||
|
- Profile score (current: 96 followers, 0 posts)
|
||||||
|
- 10-point scoring system for each section
|
||||||
|
- Gap analysis and improvement recommendations
|
||||||
|
- Action items for each profile section
|
||||||
|
- Skills analysis and missing keywords
|
||||||
|
- Experience description templates
|
||||||
|
- Content strategy recommendations
|
||||||
|
|
||||||
|
**Use this to:**
|
||||||
|
- Improve your LinkedIn visibility to recruiters
|
||||||
|
- Add missing skills and keywords
|
||||||
|
- Write compelling experience descriptions
|
||||||
|
- Plan content strategy for engagement
|
||||||
|
|
||||||
|
**Related:** See `/search/` for discovered positions and `/applications/` for submitted applications.
|
||||||
|
|
||||||
|
## Adding New Notes
|
||||||
|
|
||||||
|
When creating optimization or guidance documents:
|
||||||
|
|
||||||
|
1. **Profile/Platform Optimization:** Put in this folder
|
||||||
|
- LinkedIn optimization strategies
|
||||||
|
- Resume optimization guides
|
||||||
|
- Cover letter best practices
|
||||||
|
- Interview preparation guides
|
||||||
|
|
||||||
|
2. **Process Documentation:** Put in this folder
|
||||||
|
- Workflow guides (not skill-specific)
|
||||||
|
- Strategy documents
|
||||||
|
- Best practices
|
||||||
|
- Lessons learned
|
||||||
|
|
||||||
|
3. **Skill Documentation:** Keep in `.claude/skills/`
|
||||||
|
- Skill-specific guides (in each skill folder)
|
||||||
|
- Search workflows (`job-search/SEARCH-STRATEGY.md`)
|
||||||
|
- Resume building workflows (`build-resume/BUILD-RESUME-WORKFLOW.md`)
|
||||||
|
- Checklists and templates
|
||||||
|
|
||||||
|
4. **Ephemeral Output:** Put in other folders
|
||||||
|
- Search results → `/search/`
|
||||||
|
- Job applications → `/applications/`
|
||||||
|
- Job boards reference → `/search/` or `.claude/skills/job-search/`
|
||||||
|
|
||||||
|
## Folder Organization
|
||||||
|
|
||||||
|
```
|
||||||
|
/home/paul/Public/resume/
|
||||||
|
├── notes/ ← This folder
|
||||||
|
│ ├── README.md
|
||||||
|
│ ├── LINKEDIN-OPTIMIZATION.md
|
||||||
|
│ └── [other optimization docs]
|
||||||
|
├── search/ ← Search results (not committed)
|
||||||
|
├── applications/ ← Job applications (not committed)
|
||||||
|
├── .claude/
|
||||||
|
│ └── skills/
|
||||||
|
│ ├── build-resume/ ← Resume building skill docs
|
||||||
|
│ └── job-search/ ← Job search skill docs
|
||||||
|
└── [project files]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Current Contents
|
||||||
|
|
||||||
|
- **LINKEDIN-OPTIMIZATION.md** — Profile optimization audit and action plan
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated:** March 18, 2026
|
||||||
@@ -9,18 +9,68 @@
|
|||||||
- Phone: +1-410-236-4665
|
- Phone: +1-410-236-4665
|
||||||
- Links
|
- Links
|
||||||
- Personal Blog: https://flow.halvo.me
|
- Personal Blog: https://flow.halvo.me
|
||||||
- Git Repo: https://git.halvo.me/paul
|
- Git Repo: https://github.com/malwhile
|
||||||
- LinkedIn: https://www.linkedin.com/in/paul-halvorsen
|
- LinkedIn: https://www.linkedin.com/in/paul-halvorsen
|
||||||
- Citizen of the United Stats
|
- Citizen of the United Stats
|
||||||
|
- Security Clearance
|
||||||
|
- Expired TS/SCI
|
||||||
|
|
||||||
|
### Job Target
|
||||||
|
|
||||||
|
- Application development
|
||||||
|
- Backend development
|
||||||
|
- Security/Cybersecurity
|
||||||
|
- Systems programming
|
||||||
|
|
||||||
|
- Remote work environment
|
||||||
|
- No on-call
|
||||||
|
- Flexible minimum of $130000
|
||||||
|
|
||||||
|
- Preferably Jr or Mid developer (level 1 or 2)
|
||||||
|
- Preferably low responsibilities
|
||||||
|
- Preferably no mentoring
|
||||||
|
- No management
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
I'm a Software Engineer with over (started in 2011) years development and (started in 2006) years professional experience, with exposure to Rust, C, Python, PHP, Go, JavaScript, Java, and C++ languages; various SQL DBs; tokio, JQuery, and Pytest frameworks; Docker and GitLab CI/CD; and Rest API, NATS, JSON, XML, and nginx technologies.
|
I'm a Software Engineer with over 15 years of development and 20 years of professional experience, with expertise in Rust, C, Python, and GoLang; various SQL databases; tokio, Pytest, and Docker frameworks; GitLab CI/CD pipelines; and REST APIs, encryption, JSON, and nginx technologies. Specialized in backend development, systems programming, and security-focused applications.
|
||||||
|
|
||||||
### Keywords
|
### Keywords
|
||||||
|
|
||||||
rust, cargo, python, c, docker, containers, TDD, test driven development, pytest, CI/CD, JavaScript, JQuery, PHP, MySQL, rest, API, JSON, XML, git, GitLab, nginx, remote, testing
|
rust, cargo, python, c, docker, containers, TDD, test driven development, pytest, CI/CD, JavaScript, JQuery, PHP, MySQL, rest, API, JSON, XML, git, GitLab, nginx, remote, testing
|
||||||
|
|
||||||
|
### Experience Levels
|
||||||
|
|
||||||
|
#### Languages
|
||||||
|
|
||||||
|
- Advanced
|
||||||
|
- Rust, Cargo, Python, PyTest, GoLang, MySQL, C
|
||||||
|
- Intermediate
|
||||||
|
- JavaScript, PHP, GoLang, JQuery
|
||||||
|
- Beginner
|
||||||
|
- Java, C++,
|
||||||
|
|
||||||
|
#### OSes
|
||||||
|
|
||||||
|
- Intermediate
|
||||||
|
- Linux, Debian, Ubuntu, RHEL, CentOS
|
||||||
|
- Beginner
|
||||||
|
- Windows, MacOS, OpenSUSE, Android, iOS
|
||||||
|
|
||||||
|
#### Browsers
|
||||||
|
|
||||||
|
- Intermediate
|
||||||
|
- Firefox, Chrome
|
||||||
|
- Beginner
|
||||||
|
- IE, Edge, Safari
|
||||||
|
|
||||||
|
#### Technologies
|
||||||
|
|
||||||
|
- Intermediate
|
||||||
|
- MySQL, REST API, JSON, Nginx, Encryption, RSA, Docker, CI/CD
|
||||||
|
- Beginner
|
||||||
|
- Tomcat, Apache, DNS, k8s, AWS, Azure, Ghidra, k8s, Kubernetes
|
||||||
|
|
||||||
## Work Experience
|
## Work Experience
|
||||||
|
|
||||||
### Abnormal AI
|
### Abnormal AI
|
||||||
@@ -28,17 +78,26 @@ rust, cargo, python, c, docker, containers, TDD, test driven development, pytest
|
|||||||
**Software Engineer**: Jan 2026 - Present
|
**Software Engineer**: Jan 2026 - Present
|
||||||
|
|
||||||
- Utilize claude AI, summarize code, aid in coding, planning
|
- Utilize claude AI, summarize code, aid in coding, planning
|
||||||
- Build and maintain k8s and aws infrastructure
|
- Build and maintain k8s and AWS infrastructure
|
||||||
- python
|
- python
|
||||||
- pacman
|
- pacman
|
||||||
- haml
|
- haml
|
||||||
- yaml
|
- yaml
|
||||||
|
- 10 k8s clusters, with auto scale up and down number of instances
|
||||||
- Build and maintain service to aggregate data
|
- Build and maintain service to aggregate data
|
||||||
- golang, python
|
- golang, python
|
||||||
- pytest, unit testing
|
- pytest, unit testing
|
||||||
- running cron jobs in k8s
|
- running cron jobs in k8s
|
||||||
- using kubectl, k9s to control k8s
|
- using kubectl, k9s to control k8s
|
||||||
- RBAC
|
- RBAC
|
||||||
|
- Team of 5
|
||||||
|
- Heavy inter-team communication and coordination
|
||||||
|
- Monorepo with all teams
|
||||||
|
- Customers in US East, US West, EU West, and government
|
||||||
|
- Maintain real time storage and long time storage
|
||||||
|
- Generate aggregated data
|
||||||
|
- Increase efficiency through auto-scaling, and compression
|
||||||
|
- 24x7 call
|
||||||
|
|
||||||
### Binary Defense
|
### Binary Defense
|
||||||
|
|
||||||
@@ -76,10 +135,10 @@ rust, cargo, python, c, docker, containers, TDD, test driven development, pytest
|
|||||||
- Spin up temporary servers
|
- Spin up temporary servers
|
||||||
- Run tests
|
- Run tests
|
||||||
- Performance improvements
|
- Performance improvements
|
||||||
- Reduce CPU usage by filtering out previously observed issues
|
- Reduce CPU usage by filtering out previously observed issues ~ %90
|
||||||
- Reduce memory usage by using regex and filtering
|
- Reduce memory usage by using regex and filtering ~ %60
|
||||||
- Reduce network traffic using regex and filtering
|
- Reduce network traffic using regex and filtering ~ %80
|
||||||
- Reduce disk size by turning multiple strings into regex
|
- Reduce disk size by turning multiple strings into regex ~ %20
|
||||||
- Libraries for watching network traffic on Windows and Linux
|
- Libraries for watching network traffic on Windows and Linux
|
||||||
- Event driven
|
- Event driven
|
||||||
- White and blacklists in regex
|
- White and blacklists in regex
|
||||||
@@ -87,13 +146,14 @@ rust, cargo, python, c, docker, containers, TDD, test driven development, pytest
|
|||||||
- Filesystem changes
|
- Filesystem changes
|
||||||
- User changes
|
- User changes
|
||||||
- Event driven
|
- Event driven
|
||||||
- Windows
|
- Supported OSes
|
||||||
- Server 2009, 2012, 2019
|
- Windows
|
||||||
- xp, 7, 8, 10, 11
|
- Server 2009, 2012, 2019
|
||||||
- Linux
|
- xp, 7, 8, 10, 11
|
||||||
- Debian, Ubuntu
|
- Linux
|
||||||
- Redhat, CentOS
|
- Debian, Ubuntu
|
||||||
- MacOS
|
- Redhat, CentOS
|
||||||
|
- MacOS
|
||||||
- Written RFC and ADR to drive design and decision making on project direction
|
- Written RFC and ADR to drive design and decision making on project direction
|
||||||
- Containment
|
- Containment
|
||||||
- Design and build containment for all platforms upon detected compromise
|
- Design and build containment for all platforms upon detected compromise
|
||||||
@@ -109,6 +169,9 @@ rust, cargo, python, c, docker, containers, TDD, test driven development, pytest
|
|||||||
- Setup database when it doesn't exist
|
- Setup database when it doesn't exist
|
||||||
- Testing performed using VMs built in Proxmox and Virtualbox
|
- Testing performed using VMs built in Proxmox and Virtualbox
|
||||||
- SCRUM
|
- SCRUM
|
||||||
|
- Customers
|
||||||
|
- Small to large (Fortune 500 companies)
|
||||||
|
- Thousands of endpoints
|
||||||
|
|
||||||
### Kyrus Tech
|
### Kyrus Tech
|
||||||
|
|
||||||
@@ -204,7 +267,7 @@ rust, cargo, python, c, docker, containers, TDD, test driven development, pytest
|
|||||||
- Obfuscate
|
- Obfuscate
|
||||||
- PHP and JS obfuscation
|
- PHP and JS obfuscation
|
||||||
- Randomly change the JS and PHP to hide and evade detection
|
- Randomly change the JS and PHP to hide and evade detection
|
||||||
- Design and maintain MySQL database
|
- Design and maintain MySQL database (thousands of records)
|
||||||
- Hold data on each browser, os, and possible exploits
|
- Hold data on each browser, os, and possible exploits
|
||||||
- Hold and relate data for CVEs and available exploits
|
- Hold and relate data for CVEs and available exploits
|
||||||
- Reduce redundancy
|
- Reduce redundancy
|
||||||
@@ -225,6 +288,11 @@ rust, cargo, python, c, docker, containers, TDD, test driven development, pytest
|
|||||||
- Build token scoring system
|
- Build token scoring system
|
||||||
- Keep track of scores and provide feedback to the teams
|
- Keep track of scores and provide feedback to the teams
|
||||||
- Report scoring throughout the competition
|
- Report scoring throughout the competition
|
||||||
|
- Customers
|
||||||
|
- Military branches
|
||||||
|
- DoD
|
||||||
|
- DoJ
|
||||||
|
- Other government departments
|
||||||
|
|
||||||
### NSA
|
### NSA
|
||||||
|
|
||||||
@@ -244,6 +312,7 @@ rust, cargo, python, c, docker, containers, TDD, test driven development, pytest
|
|||||||
- Report sent via Web API to Web UI and alerting system
|
- Report sent via Web API to Web UI and alerting system
|
||||||
- Reduced call-ins
|
- Reduced call-ins
|
||||||
- Organize and train team of contractors
|
- Organize and train team of contractors
|
||||||
|
- Trained up and informally supervised team of 5
|
||||||
- Spun up to work 24x7
|
- Spun up to work 24x7
|
||||||
- Provide SOPs for quick fixes
|
- Provide SOPs for quick fixes
|
||||||
- Provide SOPs for tier 1 to reduce call-ins for 24x7 team
|
- Provide SOPs for tier 1 to reduce call-ins for 24x7 team
|
||||||
@@ -299,10 +368,18 @@ rust, cargo, python, c, docker, containers, TDD, test driven development, pytest
|
|||||||
- Magna Cum-Laude
|
- Magna Cum-Laude
|
||||||
- Security+
|
- Security+
|
||||||
- ID: COMP001021281239
|
- ID: COMP001021281239
|
||||||
- Exp Date: 04/04/2024
|
- Exp Date: 04/04/2024 (EXPIRED - no longer active)
|
||||||
- Royal Military College (RMC Canada)
|
- Royal Military College (RMC Canada)
|
||||||
- Training in OpenBSD development and administration
|
- Training in OpenBSD development and administration
|
||||||
|
|
||||||
|
## Open Source & Personal Projects
|
||||||
|
|
||||||
|
- **testct** & **ctclient** (Rust) - Certificate Transparency testing, validation, and monitoring tools; forked and enhanced for production monitoring scenarios
|
||||||
|
- **sjles-pta-vote** (Go, TypeScript, React) - Full-stack community voting platform for school PTA organization, leveraging Claude Code for planning, code reviews, and development
|
||||||
|
- **baseball-nn** (Python) - Machine learning project demonstrating AI-assisted development with Claude Code for neural network training and prediction
|
||||||
|
- **date-scanned-pics** (Python) - EXIF metadata utility for organizing and dating scanned photograph collections; automatically processes JPG files with date-encoded filenames and updates metadata
|
||||||
|
- **task-organizer-assignment** (Common Lisp) - Recursive algorithm implementation solving task dependency ordering problem; demonstrates functional programming patterns and Docker-based execution
|
||||||
|
|
||||||
## Miscellaneous
|
## Miscellaneous
|
||||||
|
|
||||||
- RedBlue Conference
|
- RedBlue Conference
|
||||||
@@ -311,6 +388,8 @@ rust, cargo, python, c, docker, containers, TDD, test driven development, pytest
|
|||||||
- Presented development of STK scenario building and manipulation
|
- Presented development of STK scenario building and manipulation
|
||||||
- SANS Courses
|
- SANS Courses
|
||||||
- Staying up-to-date on security research
|
- Staying up-to-date on security research
|
||||||
|
- Blog: https://flow.halvo.me
|
||||||
|
- Git: https://github.com/malwhile
|
||||||
- Homelab
|
- Homelab
|
||||||
- Proxmox
|
- Proxmox
|
||||||
- Running email
|
- Running email
|
||||||
|
|||||||
BIN
paul-halvorsen-resume-detailed.pdf
Normal file
BIN
paul-halvorsen-resume-detailed.pdf
Normal file
Binary file not shown.
@@ -1,103 +1,123 @@
|
|||||||
---
|
---
|
||||||
name: Paul Halvorsen
|
name: Paul Halvorsen
|
||||||
keywords: rust, cargo, python, c, docker, containers, TDD, test driven development, pytest, CI/CD, JavaScript, JQuery, PHP, MySQL, rest, API, JSON, XML, git, GitLab, nginx, remote, testing
|
keywords: software engineer, python, golang, rust, java, c, javascript, docker, kubernetes, aws, ci/cd, testing, rest api, mysql, distributed systems
|
||||||
left-column:
|
left-column:
|
||||||
- 'Sr Software Developer'
|
- "Email: paul.halvorsen@pm.me"
|
||||||
- 'Email: [paul.halvorsen@pm.me](mailto:paul.halvorsen@pm.me)'
|
- "Phone: +1-410-236-4665"
|
||||||
- 'Phone: +1-410-236-4665'
|
|
||||||
- 'Last Updated: \today'
|
|
||||||
right-column:
|
right-column:
|
||||||
- 'Personal Blog: [https://flow.halvo.me](https://flow.halvo.me)'
|
- "GitHub: github.com/malwhile"
|
||||||
- 'LinkedIn: [www.linkedin.com/in/paul-halvorsen](www.linkedin.com/in/paul-halvorsen)'
|
- "LinkedIn: linkedin.com/in/paul-halvorsen"
|
||||||
- 'Git Repo: [https://git.halvo.me/paul](https://git.halvo.me/paul)'
|
- "Blog: flow.halvo.me"
|
||||||
- 'Citizen of the United States'
|
fontsize: 10pt
|
||||||
|
fontenc: T1
|
||||||
|
urlcolor: blue
|
||||||
|
linkcolor: magenta
|
||||||
|
numbersections: false
|
||||||
---
|
---
|
||||||
|
|
||||||
# Summary
|
## Summary
|
||||||
|
|
||||||
I'm a Software Engineer with over 14 years development and 18 years professional experience, with exposure to Rust, C, Python, PHP, Go, JavaScript, Java, and C++ languages; various SQL DBs; tokio, JQuery, and Pytest frameworks; Docker and GitLab CI/CD; and Rest API, NATS, JSON, XML, and nginx technologies.
|
Software engineer with 15+ years of development experience building scalable systems and applications. Expertise in Python, Go, Rust, Java, and C; REST APIs; database design; and performance optimization. Experience across infrastructure, backend systems, and full-stack development. Strong foundation in automated testing, CI/CD pipelines, and distributed systems.
|
||||||
|
|
||||||
# Work Experience
|
## Technical Skills
|
||||||
|
|
||||||
## Binary Defense
|
**Languages:** Python, Go, Rust, Java, C, C++, JavaScript, PHP
|
||||||
|
|
||||||
**Sr Software Engineer**: April 2022 - Oct 2025
|
**Databases:** MySQL, SQLite, Postgres
|
||||||
|
|
||||||
- Rust development including: tokio (test), reqwest, anyhow, serde, windows, cargo, cmake, and WIX
|
**Infrastructure & Tools:** Docker, Kubernetes, AWS, GitLab CI/CD, Git, Pytest, automated testing
|
||||||
- Python development using pyenv, pipenv, cython, docker, GitLab pipelines, and static compilation
|
|
||||||
- Develop security alarms for Windows, Linux (Debian and RedHat), and MacOS: Event driven by Windows Events, file and directory updates, and network connections
|
|
||||||
- Written RFC and ADR to drive design and decision making on project direction
|
|
||||||
- Design and build encrypted SQLite DB (configuration and cache), network containment, and secure key exchange and authentication
|
|
||||||
- Design and build HTTP and NATS Rest API for receiving configuration (JSON) and sending data to backend servers and Microsoft Azure
|
|
||||||
- Aid in distributed deployment to dozens of customers with hundreds of endpoints
|
|
||||||
|
|
||||||
## Kyrus Tech
|
**Specializations:** Systems programming, API design, performance optimization, security, TDD
|
||||||
|
|
||||||
**Sr Software Engineer**: Nov 2020 - April 2022
|
## Experience
|
||||||
|
|
||||||
- Perform test driven development: C, Python/Pytest, Docker, GitLab CI/CD, Ghidra
|
### Abnormal AI
|
||||||
- Build covert communications and file transfers proxy: HTTPS, Apache Thrift, Rest API
|
**Software Engineer** | \resumedate{**January 2026 – Present**}
|
||||||
- Design compact router fingerprinting and vulnerability analysis: Android, TCP/IP, StreamCypher
|
|
||||||
- Modify C code to suppress system logging in various Linux Kernel versions
|
|
||||||
|
|
||||||
## Parsons
|
- Microservices and data aggregation systems serving customers across US, EU, and government regions
|
||||||
|
- Python and Go backend services; REST APIs and data processing pipelines
|
||||||
|
- Kubernetes infrastructure: 10 auto-scaling clusters in AWS
|
||||||
|
- Real-time and long-term data management; aggregation pipelines for efficiency
|
||||||
|
- Performance optimization through compression and smart scaling strategies
|
||||||
|
- Cross-team collaboration in monorepo environment
|
||||||
|
- Team of 5 engineers delivering features and platform reliability
|
||||||
|
|
||||||
**Cyber Security Software Engineer**: Apr 2018 - Nov 2020
|
### Binary Defense
|
||||||
|
**Sr Software Engineer** | \resumedate{**April 2022 – October 2025**}
|
||||||
|
|
||||||
- Develop covert Windows application: C, C++, Python
|
- Applications protecting thousands of Fortune 500 company endpoints across Windows, Linux, and macOS
|
||||||
- Build modular solution for plugin architecture and distributed deployment
|
- Rust development: tokio, cargo, cross-compilation, unit testing
|
||||||
- Design custom API for minimal communications on limited bandwidth
|
- Python microservices: REST APIs, event aggregation, data pipelines
|
||||||
- Encrypt storage and comms using AES shared key to maintain confidentiality and integrity
|
- Performance optimization: reduced CPU 90%, memory 60%, network traffic 80%
|
||||||
- Build back-end service for file storage and search: Java, Tomcat, NiagaraFiles (NiFi), nginx, Hadoop, MySQL, LDAP, RBAC
|
- Encrypted SQLite databases and secure key storage
|
||||||
- Create API for uploading files via web interface or CLI
|
- GitLab CI/CD pipelines with Docker (Linux/Windows) and VM testing
|
||||||
- Generate metadata for searching
|
- Public key pinning and certificate transparency for secure API design
|
||||||
|
- Designed RFCs and architecture decision records driving technical direction
|
||||||
|
|
||||||
## NSA
|
### Kyrus Tech
|
||||||
|
**Sr Software Engineer** | \resumedate{**November 2020 – April 2022**}
|
||||||
|
|
||||||
**Security Software Engineer**: Nov 2011 - Apr 2018
|
- Test-driven development: C, Python/Pytest, Docker, GitLab CI/CD
|
||||||
|
- Covert communications proxy: HTTPS, Apache Thrift, REST APIs
|
||||||
|
- Router fingerprinting and vulnerability analysis on Android platforms
|
||||||
|
- Linux kernel modifications for system monitoring
|
||||||
|
|
||||||
- RedTeam DevOps development of browser enumeration, manipulation, and exploitation: PHP, JavaScript, JQuery, CSS, Python, MySQL, Java, Apache, Tomcat, Linux, Windows, Chrome, Firefox, Safari, IE, Edge
|
### Parsons
|
||||||
- Design Rest and JSON API to transfer data between targets, server, and UI
|
**Cyber Security Software Engineer** | \resumedate{**April 2018 – November 2020**}
|
||||||
- Distribute covert JavaScript to targets across US government networks for enumeration and exploitation
|
|
||||||
- Design front-end to provide a dynamic UI with real time target data, graphs, and charts
|
|
||||||
- Design MySQL database to hold and quickly query enumeration and exploitation data
|
|
||||||
- Advise and develop vulnerability mitigation strategies for various military and government customers
|
|
||||||
- Train and provide SOPs to NSA RedTeam operators for various tools
|
|
||||||
|
|
||||||
**Systems Engineer**: Sept 2009 - Nov 2011
|
- Modular Windows application in C, C++, Python with distributed plugin architecture
|
||||||
|
- Custom API design for minimal bandwidth communications
|
||||||
|
- AES-encrypted storage and communications
|
||||||
|
- Backend file storage service: Java, Tomcat, NiFi, nginx, Hadoop, MySQL, LDAP, RBAC
|
||||||
|
- File upload APIs and metadata generation for search functionality
|
||||||
|
|
||||||
- Deploy, maintain, and monitor 30+ systems with 130+ Red Hat Enterprise Linux (RHEL) servers: LDAP, DNS, Apache, NiFi, Hadoop, Apache, Puppet, DHCP, PXE
|
### NSA
|
||||||
- Develop and deploy monitoring, reporting, and issue correcting scripts: Python
|
**Security Software Engineer** | \resumedate{**November 2011 – April 2018**}
|
||||||
- Organize, train, and participate in team performing 24x7 call-in rotation
|
|
||||||
- Responsible for 5+ domestic and foreign system deployments
|
|
||||||
|
|
||||||
## Salisbury University
|
- Browser security platform: PHP, JavaScript, jQuery, Python, MySQL, Java
|
||||||
|
- REST and JSON APIs for data transfer between targets and backend servers
|
||||||
|
- Dynamic UI with real-time data visualization, graphs, and charts
|
||||||
|
- MySQL database design and optimization for enumeration and exploitation data
|
||||||
|
- Vulnerability mitigation strategies for military and government customers
|
||||||
|
- Training and documentation for operators and developers
|
||||||
|
|
||||||
**Software Developer**: Nov 2006 - May 2008
|
**Systems Engineer** | \resumedate{**September 2009 – November 2011**}
|
||||||
|
|
||||||
- Funded through the Wallops Flight Facility (NASA)
|
- Deployment and maintenance of 30+ systems with 130+ RHEL servers
|
||||||
- Provide simplified UI and scenario builder for the Satellite Tool Kit (STK): Managed C++
|
- LDAP, DNS, Apache, NiFi, Hadoop, Puppet, DHCP, PXE services
|
||||||
- Design risk assessment scenarios for launch vehicles and UAVs over the DELMARVA peninsula
|
- Python monitoring, reporting, and issue correction scripts
|
||||||
- Collaborate with Geographic Information Science (GIS) for mapping
|
- 24x7 call-in rotation rotation coordination and team training
|
||||||
|
|
||||||
**Lab Administrator**: Sept 2007 - May 2009
|
### Salisbury University
|
||||||
|
|
||||||
- Support Math and CS departments at SU
|
**Software Developer** | \resumedate{**November 2006 – May 2008**}
|
||||||
- Maintain the Linux labs on campus: dual boot OpenSUSE, WindowsXP, and OpenSUSE server
|
|
||||||
- Perform backups, updates, user management (LDAP), disk quotas, and remote access
|
|
||||||
|
|
||||||
# Education
|
- Simplified UI and scenario builder for Satellite Tool Kit (STK) in Managed C++
|
||||||
|
- Risk assessment scenarios for launch vehicles and UAVs
|
||||||
|
- GIS collaboration for mapping and visualization
|
||||||
|
|
||||||
- **University of Maryland Baltimore Campus**: Masters in Computer Science; 2013. Thesis: "Stateless Detection of Malicious Traffic: Emphasis on User Privacy"
|
**Lab Administrator** | \resumedate{**September 2007 – May 2009**}
|
||||||
- **Salisbury University**: Bachelors in Computer Science, Minor in Math; 2009. Magna Cum-Laude
|
|
||||||
- **Security+** (Expired): ID: COMP001021281239; Exp Date: 04/04/2024
|
|
||||||
- **Royal Military College (RMC Canada)**: Training in OpenBSD development and administration
|
|
||||||
|
|
||||||
# Miscellaneous
|
- Linux lab maintenance: dual boot OpenSUSE/WindowsXP, server administration
|
||||||
|
- Backups, updates, user management (LDAP), disk quotas, remote access
|
||||||
|
|
||||||
- **RedBlue Conference**: Presented combination web enumeration/exploitation tool
|
## Open Source & Personal Projects
|
||||||
- **National Conference for Undergrad Research (NCUR)**: Presented development of STK scenario building and manipulation
|
|
||||||
- **SANS Courses**: Staying up-to-date on security research
|
|
||||||
- **Homelab**: Proxmox running test VMs, email, cloud storage, gitea, DNS, multimedia, genealogy, and static web pages
|
|
||||||
- **Web Admin for PTA**: Setup and maintain WordPress pages, calendar, and blog
|
|
||||||
|
|
||||||
|
- **testct & ctclient** (Rust) – Certificate Transparency testing and monitoring tools
|
||||||
|
- **sjles-pta-vote** (Go, TypeScript, React) – Full-stack community voting platform
|
||||||
|
- **baseball-nn** (Python) – Machine learning project with neural networks
|
||||||
|
- **date-scanned-pics** (Python) – EXIF metadata utility for photo organization
|
||||||
|
|
||||||
|
## Education
|
||||||
|
|
||||||
|
- **Master of Science, Computer Science** – University of Maryland Baltimore County (2013)
|
||||||
|
Thesis: "Stateless Detection of Malicious Traffic: Emphasis on User Privacy"
|
||||||
|
- **Bachelor of Science, Computer Science** – Salisbury University (2009)
|
||||||
|
Magna Cum Laude
|
||||||
|
- **Royal Military College (RMC Canada)** – Training in OpenBSD development and administration
|
||||||
|
|
||||||
|
## Additional
|
||||||
|
|
||||||
|
- Presentations: RedBlue Conference (web enumeration/exploitation), NCUR (STK scenario development)
|
||||||
|
- SANS courses for current security research
|
||||||
|
- Homelab: Proxmox virtualization, email, cloud storage, DNS, multimedia, genealogy, web services
|
||||||
|
|||||||
Binary file not shown.
114
templates/awesome-cv.latex
Normal file
114
templates/awesome-cv.latex
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
% Awesome CV Inspired LaTeX Template for Pandoc
|
||||||
|
%
|
||||||
|
% Modern template inspired by awesome-cv
|
||||||
|
% Pandoc-compatible version for markdown-based resumes
|
||||||
|
|
||||||
|
\documentclass[11pt,letterpaper]{article}
|
||||||
|
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\usepackage{geometry}
|
||||||
|
\usepackage{enumitem}
|
||||||
|
\usepackage{underscore}
|
||||||
|
\usepackage[parfill]{parskip}
|
||||||
|
\usepackage{lmodern}
|
||||||
|
\usepackage[svgnames]{xcolor}
|
||||||
|
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
|
||||||
|
% Your name on the resume
|
||||||
|
\def\name{$name$}
|
||||||
|
|
||||||
|
% The following metadata will show up in the PDF properties
|
||||||
|
\hypersetup{
|
||||||
|
colorlinks = true,
|
||||||
|
urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
|
||||||
|
linkcolor=$if(linkcolor)$$linkcolor$$else$blue$endif$,
|
||||||
|
pdfauthor = {\name},
|
||||||
|
pdfkeywords = {$keywords$},
|
||||||
|
pdftitle = {\name: Resume},
|
||||||
|
pdfsubject = {Resume},
|
||||||
|
pdfpagemode = UseNone
|
||||||
|
}
|
||||||
|
|
||||||
|
\geometry{
|
||||||
|
body={6.5in, 9.0in},
|
||||||
|
left=0.75in,
|
||||||
|
top=0.75in,
|
||||||
|
right=0.75in,
|
||||||
|
bottom=0.75in
|
||||||
|
}
|
||||||
|
|
||||||
|
% Fix for "! Undefined control sequence. <recently read> \tightlist"
|
||||||
|
\providecommand{\tightlist}{%
|
||||||
|
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||||
|
|
||||||
|
% Page styling
|
||||||
|
\pagestyle{myheadings}
|
||||||
|
\markright{\name}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
|
||||||
|
% Define custom colors for modern look
|
||||||
|
\definecolor{awesome}{HTML}{1B60FB}
|
||||||
|
\definecolor{darktext}{HTML}{2C3E50}
|
||||||
|
\definecolor{graytext}{HTML}{5A5A5A}
|
||||||
|
|
||||||
|
% Custom section fonts - modern with accent color
|
||||||
|
\usepackage{sectsty}
|
||||||
|
$if(section-color)$
|
||||||
|
\sectionfont{\color{$section-color$}\sffamily\bfseries\Large}
|
||||||
|
$else$
|
||||||
|
\sectionfont{\color{awesome}\sffamily\bfseries\Large}
|
||||||
|
$endif$
|
||||||
|
\subsectionfont{\rmfamily\bfseries\normalsize}
|
||||||
|
|
||||||
|
% Section numbers or not (default)
|
||||||
|
$if(numbersections)$
|
||||||
|
\setcounter{secnumdepth}{5}
|
||||||
|
$else$
|
||||||
|
\setcounter{secnumdepth}{0}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
% Better bullet points and list formatting
|
||||||
|
\setlist[itemize]{leftmargin=0.5em, label={\textbullet}, itemsep=0.3em}
|
||||||
|
\setlist[description]{leftmargin=0em, style=sameline}
|
||||||
|
|
||||||
|
% Don't use monospace font for URLs
|
||||||
|
\urlstyle{same}
|
||||||
|
|
||||||
|
% Better spacing control
|
||||||
|
\setlength{\parskip}{0.4em}
|
||||||
|
\setlength{\parindent}{0em}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
% Name - large and prominent
|
||||||
|
$if(name-color)$
|
||||||
|
{\fontsize{20}{24}\selectfont\sffamily\bfseries\color{$name-color$}\name}
|
||||||
|
$else$
|
||||||
|
{\fontsize{20}{24}\selectfont\sffamily\bfseries\color{awesome}\name}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\vspace{0.1em}
|
||||||
|
|
||||||
|
% Contact info in two columns - modern layout
|
||||||
|
$if(left-column)$
|
||||||
|
\begin{minipage}[t]{0.495\textwidth}
|
||||||
|
\small\color{graytext}
|
||||||
|
$for(left-column)$$left-column$$sep$ \\ $endfor$
|
||||||
|
\end{minipage}%
|
||||||
|
$endif$
|
||||||
|
$if(right-column)$
|
||||||
|
\begin{minipage}[t]{0.495\textwidth}
|
||||||
|
\small\color{graytext}
|
||||||
|
\raggedleft
|
||||||
|
$for(right-column)$$right-column$$sep$ \\ $endfor$
|
||||||
|
\end{minipage}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\vspace{0.3em}
|
||||||
|
\noindent{\color{awesome}\rule{\textwidth}{2pt}}
|
||||||
|
\vspace{0.3em}
|
||||||
|
|
||||||
|
$body$
|
||||||
|
|
||||||
|
\end{document}
|
||||||
36
templates/cover-letter.latex
Normal file
36
templates/cover-letter.latex
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
% Cover Letter LaTeX Template for Pandoc
|
||||||
|
\documentclass[$if(fontsize)$$fontsize$$else$11pt$endif$,letterpaper]{article}
|
||||||
|
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\usepackage{geometry}
|
||||||
|
\usepackage[parfill]{parskip}
|
||||||
|
\usepackage{lmodern}
|
||||||
|
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
|
||||||
|
\hypersetup{
|
||||||
|
colorlinks = true,
|
||||||
|
urlcolor = blue,
|
||||||
|
linkcolor = blue,
|
||||||
|
pdfauthor = {$if(author)$$author$$endif$},
|
||||||
|
pdftitle = {Cover Letter},
|
||||||
|
pdfpagemode = UseNone
|
||||||
|
}
|
||||||
|
|
||||||
|
\geometry{
|
||||||
|
body={6.5in, 9.0in},
|
||||||
|
left=1.0in,
|
||||||
|
top=1.0in
|
||||||
|
}
|
||||||
|
|
||||||
|
\providecommand{\tightlist}{%
|
||||||
|
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||||
|
|
||||||
|
\pagestyle{empty}
|
||||||
|
\urlstyle{same}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
$body$
|
||||||
|
|
||||||
|
\end{document}
|
||||||
93
templates/jb2resume-ats.latex
Normal file
93
templates/jb2resume-ats.latex
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
% LaTeX Resume Pandoc Template jb2resume-ats.latex
|
||||||
|
%
|
||||||
|
% ATS-optimized variant: single-column linear layout, no multi-column
|
||||||
|
% headers, no decorative fonts or colors. Designed for maximum
|
||||||
|
% compatibility with Applicant Tracking Systems (ATS) and online parsers.
|
||||||
|
%
|
||||||
|
% Based on jb2resume.latex by John Bokma
|
||||||
|
% https://github.com/john-bokma/resume-pandoc
|
||||||
|
|
||||||
|
\documentclass[$if(fontsize)$$fontsize$$else$10pt$endif$,letterpaper]{article}
|
||||||
|
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\usepackage{geometry}
|
||||||
|
\usepackage{enumitem}
|
||||||
|
\usepackage{underscore}
|
||||||
|
\usepackage[parfill]{parskip}
|
||||||
|
\usepackage{lmodern}
|
||||||
|
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
|
||||||
|
% PDF metadata for parsers
|
||||||
|
\def\name{$name$}
|
||||||
|
|
||||||
|
\hypersetup{
|
||||||
|
colorlinks = true,
|
||||||
|
urlcolor = black,
|
||||||
|
linkcolor = black,
|
||||||
|
pdfauthor = {\name},
|
||||||
|
pdfkeywords = {$keywords$},
|
||||||
|
pdftitle = {\name: Resume},
|
||||||
|
pdfsubject = {Resume},
|
||||||
|
pdfpagemode = UseNone
|
||||||
|
}
|
||||||
|
|
||||||
|
\geometry{
|
||||||
|
body={6.5in, 9.5in},
|
||||||
|
left=1.0in,
|
||||||
|
top=0.75in
|
||||||
|
}
|
||||||
|
|
||||||
|
% Tightlist fix for Pandoc
|
||||||
|
\providecommand{\tightlist}{%
|
||||||
|
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||||
|
|
||||||
|
% No running header — ATS parsers can misread header/footer text
|
||||||
|
\pagestyle{plain}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
|
||||||
|
% Simple section fonts — no colors, no decorative fonts
|
||||||
|
% Standard serif for maximum parser compatibility
|
||||||
|
\usepackage{sectsty}
|
||||||
|
\sectionfont{\rmfamily\bfseries\large\MakeUppercase}
|
||||||
|
\subsectionfont{\rmfamily\bfseries\normalsize}
|
||||||
|
|
||||||
|
% No section numbering
|
||||||
|
$if(numbersections)$
|
||||||
|
\setcounter{secnumdepth}{5}
|
||||||
|
$else$
|
||||||
|
\setcounter{secnumdepth}{0}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
% Simple bullet points, no decorative dashes
|
||||||
|
\setlist[itemize]{leftmargin=1.5em, label={\textbullet}, itemsep=1pt, parsep=0pt}
|
||||||
|
\setlist[description]{leftmargin=0em, style=sameline}
|
||||||
|
|
||||||
|
% Standard URL font
|
||||||
|
\urlstyle{same}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
% ---- HEADER: single-column linear layout ----
|
||||||
|
% Name on its own line, then all contact info below linearly.
|
||||||
|
% No minipage / multi-column — critical for ATS parsing.
|
||||||
|
|
||||||
|
{\LARGE\bfseries \name}
|
||||||
|
|
||||||
|
\vspace{4pt}
|
||||||
|
|
||||||
|
$if(left-column)$
|
||||||
|
$for(left-column)$$left-column$ \\
|
||||||
|
$endfor$
|
||||||
|
$endif$
|
||||||
|
$if(right-column)$
|
||||||
|
$for(right-column)$$right-column$ \\
|
||||||
|
$endfor$
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\vspace{6pt}
|
||||||
|
\rule{\linewidth}{0.6pt}
|
||||||
|
|
||||||
|
$body$
|
||||||
|
|
||||||
|
\end{document}
|
||||||
113
templates/jb2resume-modern.latex
Normal file
113
templates/jb2resume-modern.latex
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
% Modern LaTeX Resume Pandoc Template
|
||||||
|
%
|
||||||
|
% Based on jb2resume.latex by John Bokma (2016-2017)
|
||||||
|
% Improved version with better spacing, typography, and visual hierarchy
|
||||||
|
% Enhanced for modern resumes while maintaining ATS compatibility
|
||||||
|
|
||||||
|
\documentclass[$if(fontsize)$$fontsize$$else$11pt$endif$,letterpaper]{article}
|
||||||
|
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\usepackage{geometry}
|
||||||
|
\usepackage{enumitem}
|
||||||
|
\usepackage{underscore}
|
||||||
|
\usepackage[parfill]{parskip}
|
||||||
|
\usepackage{lmodern}
|
||||||
|
\usepackage[svgnames]{xcolor}
|
||||||
|
\usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
|
||||||
|
\usepackage[utf8]{inputenc}
|
||||||
|
|
||||||
|
% Your name on the resume
|
||||||
|
\def\name{$name$}
|
||||||
|
|
||||||
|
% The following metadata will show up in the PDF properties
|
||||||
|
\hypersetup{
|
||||||
|
colorlinks = true,
|
||||||
|
urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
|
||||||
|
linkcolor=$if(linkcolor)$$linkcolor$$else$blue$endif$,
|
||||||
|
pdfauthor = {\name},
|
||||||
|
pdfkeywords = {$keywords$},
|
||||||
|
pdftitle = {\name: Resume},
|
||||||
|
pdfsubject = {Resume},
|
||||||
|
pdfpagemode = UseNone
|
||||||
|
}
|
||||||
|
|
||||||
|
\geometry{
|
||||||
|
body={6.5in, 9.0in},
|
||||||
|
left=0.75in,
|
||||||
|
top=0.75in,
|
||||||
|
right=0.75in,
|
||||||
|
bottom=0.75in
|
||||||
|
}
|
||||||
|
|
||||||
|
% Fix for "! Undefined control sequence. <recently read> \tightlist"
|
||||||
|
\providecommand{\tightlist}{%
|
||||||
|
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
||||||
|
|
||||||
|
% Page styling
|
||||||
|
\pagestyle{myheadings}
|
||||||
|
\markright{\name}
|
||||||
|
\thispagestyle{empty}
|
||||||
|
|
||||||
|
% Custom section fonts - modern look with subtle color
|
||||||
|
\usepackage{sectsty}
|
||||||
|
$if(section-color)$
|
||||||
|
\sectionfont{\color{$section-color$}\sffamily\bfseries\Large\vspace{0.3em}}
|
||||||
|
$else$
|
||||||
|
\sectionfont{\color{darkgray}\sffamily\bfseries\Large\vspace{0.3em}}
|
||||||
|
$endif$
|
||||||
|
\subsectionfont{\rmfamily\bfseries\normalsize\vspace{0.1em}}
|
||||||
|
|
||||||
|
% Section numbers or not (default)
|
||||||
|
$if(numbersections)$
|
||||||
|
\setcounter{secnumdepth}{5}
|
||||||
|
$else$
|
||||||
|
\setcounter{secnumdepth}{0}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
% Better bullet points and list formatting
|
||||||
|
\setlist[itemize]{leftmargin=0.5em, label={\textbullet}, itemsep=0.3em}
|
||||||
|
\setlist[description]{leftmargin=0em, style=sameline}
|
||||||
|
|
||||||
|
% Don't use monospace font for URLs
|
||||||
|
\urlstyle{same}
|
||||||
|
|
||||||
|
% Custom command for dates - smaller than headers
|
||||||
|
\newcommand{\resumedate}[1]{{\small #1}}
|
||||||
|
|
||||||
|
% Better spacing control
|
||||||
|
\setlength{\parskip}{0.4em}
|
||||||
|
\setlength{\parindent}{0em}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
% Name - larger, modern
|
||||||
|
$if(name-color)$
|
||||||
|
{\fontsize{16}{19}\selectfont\color{$name-color$}\sffamily\bfseries \name}
|
||||||
|
$else$
|
||||||
|
{\fontsize{16}{19}\selectfont\color{black}\sffamily\bfseries \name}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\vspace{0.2em}
|
||||||
|
|
||||||
|
% Contact info in two columns
|
||||||
|
$if(left-column)$
|
||||||
|
\begin{minipage}[t]{0.495\textwidth}
|
||||||
|
\small
|
||||||
|
$for(left-column)$$left-column$$sep$ \\ $endfor$
|
||||||
|
\end{minipage}%
|
||||||
|
$endif$
|
||||||
|
$if(right-column)$
|
||||||
|
\begin{minipage}[t]{0.495\textwidth}
|
||||||
|
\small
|
||||||
|
\raggedleft
|
||||||
|
$for(right-column)$$right-column$$sep$ \\ $endfor$
|
||||||
|
\end{minipage}
|
||||||
|
$endif$
|
||||||
|
|
||||||
|
\vspace{0.3em}
|
||||||
|
\noindent\rule{\textwidth}{0.5pt}
|
||||||
|
\vspace{0.2em}
|
||||||
|
|
||||||
|
$body$
|
||||||
|
|
||||||
|
\end{document}
|
||||||
@@ -76,6 +76,9 @@ $endif$
|
|||||||
% Don't use monospace font for URLs
|
% Don't use monospace font for URLs
|
||||||
\urlstyle{same}
|
\urlstyle{same}
|
||||||
|
|
||||||
|
% Custom command for dates - smaller than headers
|
||||||
|
\newcommand{\resumedate}[1]{{\small #1}}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
% Place name at left
|
% Place name at left
|
||||||
|
|||||||
Reference in New Issue
Block a user