Compare commits

..

15 Commits

Author SHA1 Message Date
paul
b202ec9954 Lots of updates 2026-03-18 23:32:45 -04:00
paul
0e19326bcb Combine testct and ctclient on same line across all resumes
Updated all resumes that list open source projects to consolidate testct and ctclient
into a single bullet point since both are Certificate Transparency related tools with
similar purposes (testing, validation, monitoring).

Updated resumes:
- paul-halvorsen-resume-detailed.md (main detailed resume)
- stealth-startup/backend-developer/paul-halvorsen-resume.md
- collette/software-engineer-ii/paul-halvorsen-resume.md
- lemans/backend-software-engineer/paul-halvorsen-resume.md
- tenstorrent/devrel-engineer/paul-halvorsen-resume.md

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-17 15:30:48 -04:00
paul
4d7e1b8b58 Combine testct and ctclient on same line in detailed resume
Both projects are Certificate Transparency related with similar purposes (testing/validation/monitoring), so consolidate them into a single bullet point for cleaner presentation.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-17 15:22:35 -04:00
paul
e6a78bab02 Update CLAUDE.md: new standardized directory structure for job applications
- New format: company/position/paul-halvorsen-resume.md (cleaner than old company-naming convention)
- Document build-resume skill usage with duplicate checking via applications_tracker.md
- Add examples of new directory structure (tenstorrent/devrel-engineer/, stripe/backend-engineer/)
- Include manual build instructions with proper file paths
- Reference application tracking system to prevent duplicate efforts

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-17 15:19:40 -04:00
paul
28592cdede Update sjles-pta-vote project description with Claude Code and tech stack details
- Add TypeScript and React technologies
- Note Claude Code usage for planning, reviews, and development
- Corrects capitalization of TypeScript

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-16 13:44:58 -04:00
paul
27d354ba18 Add Open Source & Personal Projects section to detailed resume
- testct & ctclient: Certificate Transparency projects
- baseball-nn: ML project with Claude Code
- sjles-pta-vote: Full-stack Go community voting platform

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-16 11:52:37 -04:00
paul
62e8397b57 Add multiple LaTeX resume templates with template selection system
Created:
- jb2resume-modern.latex: Improved classic template with better spacing,
  modern typography, proper bullet points, and visual hierarchy
- awesome-cv.latex: Modern, vibrant template inspired by awesome-cv with
  accent colors and contemporary design

Updated Makefile:
- Add resume-modern target for building with improved template
- Add resume-awesome target for building with awesome-cv template
- Keep classic resume target for original jb2resume template
- Add help target showing all available commands and templates
- Improved documentation with template usage examples

Updated CLAUDE.md:
- Document all three templates with descriptions
- Add template selection guide with decision tree
- Provide recommendations for different company types
- Show example usage for each template

Template Usage:
  make resume FILE_NAME=path/to/resume           # Classic jb2resume
  make resume-modern FILE_NAME=path/to/resume    # Modern improved
  make resume-awesome FILE_NAME=path/to/resume   # Awesome-CV inspired

Rebuilt all existing resumes with modern template as default,
with awesome-cv versions available for comparison.

Benefits:
- Multiple visual styles to match company culture
- Better spacing and readability in modern template
- Professional appearance with subtle or bold styling options
- All templates ATS-compatible for automated screening
- Easy to test different visual presentations

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-05 21:12:48 -05:00
paul
697312036f Organize resumes by company in subdirectories
- Create subdirectories for each company (files/, valon/)
- Move company-specific resumes and cover letters to their directories
- Update Makefile to support FILE_NAME paths (e.g., files/resume-name)
- Improve clean target to recursively find .log files
- Update CLAUDE.md with new directory structure documentation
- Add examples for building PDFs from subdirectories
- Document cover letter placement and usage

This improves organization as more job-specific resumes accumulate.
Files can now be organized by company for easier management.

Makefile usage:
  make resume                                    # root directory (default)
  make resume FILE_NAME=files/paul-halvorsen-files-backend-engineer
  make resume FILE_NAME=valon/paul-halvorsen-valon-software-engineer

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-05 16:07:43 -05:00
paul
649f84aff7 Update resume infrastructure for job-specific customization
- Fix summary placeholders: 15 years development, 20 years professional experience
- Update Makefile to accept FILE_NAME parameter for building custom resumes
- Add confirmation message on successful PDF generation
- Document customization workflow in CLAUDE.md with examples
- Add section on creating tailored resumes from job descriptions
- Include security clearance and additional details in detailed resume

This enables a streamlined workflow: provide job description → Claude generates
customized markdown → build PDF with: make resume FILE_NAME=paul-halvorsen-[company]-[role]

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-05 13:06:05 -05:00
paul
ed9c347e6b updating the details 2026-03-04 21:13:57 -05:00
84a189add4 Adding URLs for git repo 2025-11-05 14:39:42 -05:00
6af0f091dd Updating and spell checking 2025-10-29 13:15:34 -04:00
3e41fd0ac2 Updating the make file to use podman and resume headers 2025-08-25 15:15:20 -04:00
b5d7cacd88 Adding an exercise 2025-08-12 16:18:19 -04:00
158062dbd7 Setting up full detailed resume 2025-08-11 16:33:57 -04:00
26 changed files with 5280 additions and 97 deletions

View 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?"

View 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

View File

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

View File

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

View File

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

View File

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

View 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

View 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

View 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

View 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

View 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

7
.gitignore vendored
View File

@@ -1 +1,8 @@
.docker-build .docker-build
.podman-build
# Job applications (local only, not committed)
applications/
# Job search results (local only, not committed)
search/

355
CLAUDE.md Normal file
View 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

View File

@@ -1,8 +1,5 @@
FROM debian:latest FROM ubuntu:latest
RUN apt-get update && apt-get install -y pandoc texlive texlive-latex-extra texlive-fonts-recommended
RUN apt-get update
RUN apt-get install -y texlive-base texlive-bibtex-extra texlive-fonts-recommended texlive-fonts-extra texlive-latex-base texlive-latex-extra texlive-latex-recommended texlive-science pandoc
RUN mkdir /data
WORKDIR /data WORKDIR /data
VOLUME ["/data"]
ENTRYPOINT ["pandoc"]

View File

@@ -1,40 +1,103 @@
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})
CONTAINER_EXISTS=0 CONTAINER_EXISTS=0
ifneq ("$(shell docker images -q ${NAME} 2> /dev/null)","") ifneq ("$(shell podman images -q ${NAME} 2> /dev/null)","")
CONTAINER_EXISTS=1 CONTAINER_EXISTS=1
endif endif
resume: .docker-build # Available templates:
docker run -it \ # - 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 \ --volume "$(realpath .)":/data \
--user ${USER_ID}:${GROUP_ID} \
--name ${CONTAINER_NAME} \ --name ${CONTAINER_NAME} \
${NAME} \ ${NAME} \
pandoc ${FILE_NAME}.md -f markdown+yaml_metadata_block --template templates/jb2resume.latex -o ${FILE_NAME}.pdf \ ${FILE_NAME}.md -f markdown --template templates/cover-letter.latex -o ${FILE_NAME}.pdf
; docker stop ${CONTAINER_NAME} \ @echo "✓ Generated ${FILE_NAME}.pdf (cover letter)"
&& docker rm ${CONTAINER_NAME}
.docker-build: resume-ats: TEMPLATE=jb2resume-ats
if [ ${CONTAINER_EXISTS} -ne 1 ]; then docker build -t ${NAME} . && echo "" > .docker-build; fi 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
podman run --rm \
--volume "$(realpath .)":/data \
--name ${CONTAINER_NAME} \
${NAME} \
${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:
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
cleandocker: cleanpodman:
@echo "Cleanup files and docker" @echo "Cleanup files and podman"
if [ ${CONTAINER_EXISTS} -ne 0 ]; then docker image rm -f ${NAME} && rm -f .docker-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 cleandocker cleanall: clean cleanpaper cleanpodman
@echo "Cleanup everything" @echo "Cleanup everything"

File diff suppressed because it is too large Load Diff

79
notes/README.md Normal file
View 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

View File

@@ -0,0 +1,406 @@
# About Me
## General Info
- Name: Paul Halvorsen
- Contact
- Email: paul.halvorsen@pm.me
- Phone: +1-410-236-4665
- Links
- Personal Blog: https://flow.halvo.me
- Git Repo: https://github.com/malwhile
- LinkedIn: https://www.linkedin.com/in/paul-halvorsen
- 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
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
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
### Abnormal AI
**Software Engineer**: Jan 2026 - Present
- Utilize claude AI, summarize code, aid in coding, planning
- Build and maintain k8s and AWS infrastructure
- python
- pacman
- haml
- yaml
- 10 k8s clusters, with auto scale up and down number of instances
- Build and maintain service to aggregate data
- golang, python
- pytest, unit testing
- running cron jobs in k8s
- using kubectl, k9s to control k8s
- 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
**Sr Software Engineer**: April 2022 - Oct 2025
- Gitlab
- CI/CD pipelines for unit and integration testing, compilation, and deployment
- docker images for Linux, Windows
- VMs for MacOS
- MR/PR contributions, comments and testing
- Rust development
- cargo, nextest, cmake, WIX, cross compilation, unit tests
- sqlite encrypted db
- libraries: tokio, reqwest, anyhow, serde
- Containment
- Azure Library
- Library to watch for windows event logs, file system changes, user changes, and firewall changes
- White and blacklists for files, file types, file contents, and hashes
- Sanatize, decorate (add additional data), serialize data for transfer to backend
- De-duplicate data to reduce network traffic and backend storage costs
- Event driven
- Unit tests
- Public key pinning and certificate transparency
- Secure key storage
- Encrypting and decrypting on disk sqlite db
- dpapi for Windows
- org.freedesktop.secrets for Linux
- Python development
- pyenv, pipenv, cython, docker build environment, static compilation, pytest
- Containment
- Public key pinning and certificat transparency logs
- end-to-end integration testing
- Spin up pre-configured VMs (Windows and Linux)
- Make specific testing changes to those VMs via ssh
- Spin up temporary servers
- Run tests
- Performance improvements
- Reduce CPU usage by filtering out previously observed issues ~ %90
- Reduce memory usage by using regex and filtering ~ %60
- Reduce network traffic using regex and filtering ~ %80
- Reduce disk size by turning multiple strings into regex ~ %20
- Libraries for watching network traffic on Windows and Linux
- Event driven
- White and blacklists in regex
- Specific Windows events
- Filesystem changes
- User changes
- Event driven
- Supported OSes
- Windows
- Server 2009, 2012, 2019
- xp, 7, 8, 10, 11
- Linux
- Debian, Ubuntu
- Redhat, CentOS
- MacOS
- Written RFC and ADR to drive design and decision making on project direction
- Containment
- Design and build containment for all platforms upon detected compromise
- Containment meaning no network access other than to BD servers
- Use Linux iptables, windows firewall, and MacOS ip firewall
- Design and build secure key exchange and connections
- Public key pinning and certificate transparency logs
- For server verification
- Prevent MITM attacks
- Azure Library
- Setup library for communication: rust and python
- Perform API calls for uploading and updating data in database
- Setup database when it doesn't exist
- Testing performed using VMs built in Proxmox and Virtualbox
- SCRUM
- Customers
- Small to large (Fortune 500 companies)
- Thousands of endpoints
### Kyrus Tech
**Sr Software Engineer**: Nov 2020 - April 2022
- Router Fingerprinting
- C and Python
- Run on Android phone
- Compact and rolling logs
- Aggregated logs
- Scan for connected routers
- Perform fingerprinting and vulnerability analysis on device
- HTTPS, TCP/IP, StreamCypher Encryption, ICMP, DNS
- Covert communications
- C, Python, Docker
- HTTPS, Apache Thrift, REST API
- Multi threaded
- Routing through multiple middle
- C front end, and middle, python backend
- Encrypted transfers
- RSA key exchange
- Linux kernel backdoor
- Supress system logging
- Monitor filesystem changes
- Supress system monitoring
- Support for various Linux Kernel versions
- Ghidra, C
- Test driven development
- C, Python, Pytest, Docker, GitLab CI/CD
- SCRUM
### Parsons
**Cyber Security Software Engineer**: Apr 2018 - Nov 2020
- Covert Windows Application
- Library injection
- C, C++, Python
- Modular solution for dynamic and static plugins
- Cluster of nodes
- Custom API and serialization
- Extremely limited network traffic
- Reduce size of data transfer
- Aggregate/Consolodate data from multiple nodes
- Reverse engineer target's custom data storage to parse and manipulate target data
- Reverse engineer API calls to proprietary application
- Manipulate lagitimate traffic
- Inject traffic
- Encrypt local storage and comms using shared AES key
- Back-end service for file storage
- Java, Tomcat, Niagarafiles (NiFi), nginx, hadoop, MySQL, LDAP, RBAC
- API for uploading files
- Web interface
- CLI
- Remove duplication before storage
- Allow reads from multiple users uploading the same file
- Create new file on write
- Multi-level user access, RBAC and LDAP
- Produce metadata
- Provide search functionality
### NSA
**Security Software Engineer**: Nov 2011 - Apr 2018
- RedTeam DevOps
- Browser security
- enumeration, manipulation, exploitation
- Languages: PHP, JavaScript, JQuery, CSS, Python, MySQL, Java
- Platforms: Tomcat, Apache, Nginx
- OS: Linux, Windows, Android, iOS
- Browsers: Chrome, Firefox, Safari, IE, Edge
- Rest JSON API for data transfer to and from target and backend server
- Recon from browser
- Browser name, type, version
- OS name, type, version
- Possible device make and model
- Plugins in browser and versions
- Design dynamic browser UI using JQuery
- View all data on all connected targets
- Interact with the targets browsers
- Change the look
- Monitor key presses and mouse movements
- Mimic legitimate sites
- Redirect the page
- View stats on currently and past connected targets
- Query CVEs to view possible exploits
- Number of versions seen
- Plugins seen
- Add more as needed by operator
- Send exploits to target with backdoor payload
- Build browser exploits using CVE and POC (half day and full day vulnerabilities)
- Obfuscate
- PHP and JS obfuscation
- Randomly change the JS and PHP to hide and evade detection
- Design and maintain MySQL database (thousands of records)
- Hold data on each browser, os, and possible exploits
- Hold and relate data for CVEs and available exploits
- Reduce redundancy
- Increase efficiency with pre-compiled queries and indexes
- Maintain backend server
- Additional projects as needed
- Java Tomcat web backdoor
- ASP.Net web backdoor
- ASP.Net document backdoor
- Run JS inside documents and PDFs
- Re-work windows backdoor to cross compile on MacOS
- Provide feedback
- Train and provide SOPs to NSA RT operators for various tools
- Produce documentation for new developers
- Train new developers
- Advise and develop vulnerability mitigation strategies for various military and government customers
- Aid in scoring the NSA Cyber Defense Challenge
- Build token scoring system
- Keep track of scores and provide feedback to the teams
- Report scoring throughout the competition
- Customers
- Military branches
- DoD
- DoJ
- Other government departments
### NSA
**Systems Engineer**: Sept 2009 - Nov 2011
- Ownership over 30+ systems with 130+ RHEL servers each
- Stage 10+ systems
- Deploy 3+ systems, domestic and foreign
- Soley responsible for 5+ domestic and forign systems
- Maintain all systems as part of a 24x7 call-in rotation
- Multiple services on each system
- LDAP, DNS, Apache, NiFi, Hadoop, Puppet, DHCP, PXE boot
- Develop scripts to aid in maintenance
- Python
- Auto fix known issues
- Scan and produce report of all systems in under 30 min
- Report sent via Web API to Web UI and alerting system
- Reduced call-ins
- Organize and train team of contractors
- Trained up and informally supervised team of 5
- Spun up to work 24x7
- Provide SOPs for quick fixes
- Provide SOPs for tier 1 to reduce call-ins for 24x7 team
### Salisbury University
**Software Developer**: Nov 2006 - May 2008
- Funded through the Wallops Flight Facility (NASA)
- Tasked to provide risk assessments
- Launch vehicles and UAVs over the DELMARVA peninsula
- Provide simplified UI and scenario builder for the Satellite Tool Kit (STK)
- Wizard walk through for standard set of launch and safety scenarios
- Build scenario in both custom simplified UI as well as full STK
- C++, UI built using Visual Studio and Managed C++
- Provide reports on risks of scenarios
- Realtime graphs and charts
- Post analysis reporting
- Create graphs designed to display risk throughout the scenario
- Design risk assessment scenarios for launch vehicles and UAVs over the DELMARVA peninsula
- Collaborate with Geographic Information Science (GIS)
- Provide maps with POI
- Distances and response times for emergancy vehicles
### Salisbury University
**Lab Administrator**: Sept 2007 - May 2009
- Support Math and CS departments at SU
- Maintain the Linux labs on campus
- In charge of 2 labs
- Dual boot OpenSUSE, WindowsXP
- OpenSUSE server
- Provide SSH access both internal and external
- Perform regular tasking
- Backups
- Updates
- User management (LDAP)
- Disk quotas
- Remote access
- Installation of needed software
- Monitor the labs while in use
## Education
- University of Maryland Baltimore Campus
- Masters in Computer Science
- Graduated 2013
- Thesis: "Stateless Detection of Malicious Traffic: Emphasis on User Privacy"
- Salisbury University
- Bachelors in Computer Science
- Graduated 2009
- Magna Cum-Laude
- Security+
- ID: COMP001021281239
- Exp Date: 04/04/2024 (EXPIRED - no longer active)
- Royal Military College (RMC Canada)
- 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
- RedBlue Conference
- Presented combination web enumeration/exploitation tool
- National Conference for Undergrad Research (NCUR)
- Presented development of STK scenario building and manipulation
- SANS Courses
- Staying up-to-date on security research
- Blog: https://flow.halvo.me
- Git: https://github.com/malwhile
- Homelab
- Proxmox
- Running email
- Cloud storage, TrueNAS, Nextcloud
- gitea
- DNS, pi-hole, adguard
- Multimedia, Plex, Jellyfin
- Geneology, Webtrees
- Static web page services, docs, hugo, blogs, dashboard
- Home assistant
- Web Admin for PTA
- Setup and maintain a Wordpress site
- Setup and maintain weebly site

Binary file not shown.

View File

@@ -1,99 +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:
- 'Phone: +1-410-236-4665' - "Email: paul.halvorsen@pm.me"
- 'Citizen of the United States' - "Phone: +1-410-236-4665"
right-column: right-column:
- 'Email: [pmghalvorsen@gmail.com](mailto:pmghalvorsen@gmail.com)' - "GitHub: github.com/malwhile"
- "LinkedIn: linkedin.com/in/paul-halvorsen"
- "Blog: flow.halvo.me"
fontsize: 10pt
fontenc: T1
urlcolor: blue
linkcolor: magenta
numbersections: false
--- ---
# Summary ## Summary
I'm a Software Engineer with over 13 years development and 17 years professional experience, with exposure to Rust, C, Python, PHP, Go, JavaScript, Java, and C++ languages; various SQL databases; JQuery and Pytest frameworks; Docker containerization; 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 - Present **Databases:** MySQL, SQLite, Postgres
- Rust development using cargo, cmake, and cross compilation **Infrastructure & Tools:** Docker, Kubernetes, AWS, GitLab CI/CD, Git, Pytest, automated testing
- Python development using pyenv, pipenv, cython, docker build environment, gitlab pipelines, and static compilation
- Develop security alarms for Windows, Linux (Debian and RedHat), and MacOS
- Written RFC and ADR to drive design and decision making on project direction
- Design and build containment for all platforms upon detected compromise
- Design and build secure key exchange and connections
## 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 ### 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, HTTPS, TCP/IP, StreamCypher Encryption
- Modify existing code to suppress system logging from Linux Kernel module: various Linux Kernel versions, Ghidra
## 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**}
- Continue development of 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 - Rust development: tokio, cargo, cross-compilation, unit testing
- Design custom API for minimal data transfer to back-end - 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 prototype 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
- Track and maintain multi-level user access - Public key pinning and certificate transparency for secure API design
- Generate metadata for searching - 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**}
- Deliver covert JavaScript to targets for enumeration and exploitation
- Design front-end to provide a dynamic UI with real time target data and graphs and charts for in-depth data
- Design MySQL database to hold and quickly query enumeration and exploitation data
- Update PHP back-end for security and performance
- 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; 2009. Magna Cum-Laude
- **Security+**: 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**: Running email, cloud storage, gitea, DNS, multimedia, geneology, and static web page services
- **Web Admin for PTA**: Setup and maintain a Wordpress site
- **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
View 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}

View 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}

View 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}

View 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}

View File

@@ -58,8 +58,7 @@ $if(section-color)$
$else$ $else$
\sectionfont{\rmfamily\mdseries\Large} \sectionfont{\rmfamily\mdseries\Large}
$endif$ $endif$
%\subsectionfont{\rmfamily\mdseries\itshape\large} \subsectionfont{\rmfamily\mdseries\itshape\large}
\subsectionfont{\rmfamily\mdseries\large}
% Section numbers or not (default) % Section numbers or not (default)
$if(numbersections)$ $if(numbersections)$
@@ -77,8 +76,8 @@ $endif$
% Don't use monospace font for URLs % Don't use monospace font for URLs
\urlstyle{same} \urlstyle{same}
\renewcommand{\familydefault}{\sfdefault} % Custom command for dates - smaller than headers
\usepackage{helvet} \newcommand{\resumedate}[1]{{\small #1}}
\begin{document} \begin{document}