@iceinvein/agent-skills 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -78,12 +78,32 @@ Skills that control how the agent communicates — output compression, token eff
78
78
  |-------|----------|--------------|
79
79
  | **terse** | Caveman (refined) | Professional output compression — cuts ~50-60% of tokens by eliminating LLM verbosity habits (preambles, hedging, trailing summaries) while keeping proper grammar. Three levels: clean, tight, sharp. |
80
80
 
81
+ ### Career & Writing
82
+
83
+ Skills for producing job application materials that read like a human wrote them, match the role, and align with the resume.
84
+
85
+ | Skill | Role | What it does |
86
+ |-------|------|--------------|
87
+ | **cover-letter** | Suite router | Dispatches to write, audit, rewrite, or persona subcommands. Shares conventions for file I/O (PDF, DOCX, MD/MDX, URL), output formats, and writing principles across the suite. |
88
+ | **cover-letter-write** | Generator | Generates a cover letter from resume + job description. Outputs markdown, DOCX, and PDF. Enforces human prose (burstiness, concrete verbs, no filler openers), maps every claim to a resume bullet, and covers top JD requirements without keyword stuffing. |
89
+ | **cover-letter-audit** | Scorer | Scores a letter on 100 points across content/fit, structure, voice/humanness, and correctness. Detects AI-generated-content signals (burstiness, 50+ AI phrases including sentimental cliches, TTR, em-dashes, passive voice) and produces prioritized fixes. |
90
+ | **cover-letter-rewrite** | Reviser | Audit-driven targeted rewrite of an existing letter. Focus modes: humanize, align, tighten, structure, tone. Preserves voice where it already works. |
91
+ | **cover-letter-persona** | Voice profile | Reusable writing personas using the NNGroup 4-dimension tone framework (funny-serious, formal-casual, respectful-irreverent, enthusiastic-matter-of-fact) adapted for professional correspondence. |
92
+
81
93
  ### Tooling
82
94
 
83
95
  | Skill | Type | What it does |
84
96
  |-------|------|--------------|
85
97
  | **code-intelligence** | MCP server | Semantic code search, call hierarchy, dependency graphs, and impact analysis. Powered by `@iceinvein/code-intelligence-mcp`. |
86
98
 
99
+ ### Orchestration
100
+
101
+ Skills that compose the other audit skills into higher-level workflows.
102
+
103
+ | Skill | What it does |
104
+ |-------|--------------|
105
+ | **improve-my-codebase** | Runs every applicable audit skill in parallel against your codebase, ranks findings by convergence (multiple audits agreeing) and per-file rollup, and writes a prioritized improvement report. Default sweeps everything; positional args switch modes (`quick`, `diff`, `interactive`) or narrow scope (`focus <area>`, `module <path>`). |
106
+
87
107
  ## Commands
88
108
 
89
109
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iceinvein/agent-skills",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "Install agent skills into AI coding tools",
5
5
  "author": "iceinvein",
6
6
  "license": "MIT",
@@ -38,6 +38,7 @@
38
38
  "url": "https://github.com/iceinvein/agent-skills"
39
39
  },
40
40
  "devDependencies": {
41
+ "@anthropic-ai/claude-agent-sdk": "^0.2.104",
41
42
  "bun-types": "^1.3.11"
42
43
  }
43
44
  }
@@ -0,0 +1,161 @@
1
+ ---
2
+ name: cover-letter
3
+ description: >
4
+ Full-lifecycle cover letter suite. Generates, audits, and rewrites cover letters
5
+ from a resume and job description. Produces markdown, DOCX, and PDF outputs.
6
+ Optimizes for human-sounding prose, evidence alignment with the resume, and
7
+ coverage of the job description's key requirements. Also scores letters for
8
+ AI-generated-content risk, structure, correctness, and tone. Use when the user
9
+ says "cover letter", "write cover letter", "draft cover letter", "audit cover
10
+ letter", "rewrite cover letter", "optimize cover letter", "check cover letter",
11
+ or shares a resume and job description together. Route to the right subcommand:
12
+ write, audit, rewrite, or persona.
13
+ argument-hint: "[write|audit|rewrite|persona] [...args]"
14
+ ---
15
+
16
+ # Cover Letter Suite
17
+
18
+ Four coordinated skills for producing and refining cover letters that read like
19
+ a human wrote them, fit the job, and match the resume.
20
+
21
+ ## Subcommands
22
+
23
+ | Command | Purpose | Skill |
24
+ |---------|---------|-------|
25
+ | `/cover-letter write` | Generate a letter from resume + job description | `cover-letter-write` |
26
+ | `/cover-letter audit <file>` | Score a letter on content, structure, AI-ness, correctness | `cover-letter-audit` |
27
+ | `/cover-letter rewrite <file>` | Humanize and realign an existing letter | `cover-letter-rewrite` |
28
+ | `/cover-letter persona [create\|list\|use\|show]` | Manage writing voice/tone profiles | `cover-letter-persona` |
29
+
30
+ When invoked without arguments, list these subcommands and ask which one the
31
+ user wants.
32
+
33
+ ## Routing
34
+
35
+ - If the user supplies a resume file and a job description (either file, URL, or
36
+ pasted text), route to `cover-letter-write`.
37
+ - If the user asks to check, score, or review an existing letter, route to
38
+ `cover-letter-audit`.
39
+ - If the user asks to improve, humanize, shorten, or realign an existing letter,
40
+ route to `cover-letter-rewrite`.
41
+ - If the user asks about voice, tone, or style, route to `cover-letter-persona`.
42
+
43
+ ## Shared Conventions
44
+
45
+ All four skills share the conventions below. Keep these consistent across the
46
+ suite so outputs and state are predictable.
47
+
48
+ ### File I/O
49
+
50
+ Input formats supported for both resume and job description:
51
+
52
+ | Format | Extraction tool | Notes |
53
+ |--------|----------------|-------|
54
+ | `.md`, `.mdx`, `.txt` | Direct read | Use the Read tool |
55
+ | `.pdf` | `pdftotext -layout <file> -` | Falls back to `pandoc` if `pdftotext` missing |
56
+ | `.docx` | `pandoc <file> -t markdown` | Pandoc required |
57
+ | URL (job description only) | `WebFetch` | Extract the visible job posting text |
58
+ | Pasted text | Direct use | User pastes into the prompt |
59
+
60
+ Before extracting, verify the tool is available (`command -v pdftotext`, `command -v pandoc`). If a required tool is missing, tell the user the exact install command for their platform (macOS: `brew install poppler pandoc`) and stop; do not guess at content.
61
+
62
+ ### Output formats
63
+
64
+ Letters are emitted as three sibling files by default:
65
+
66
+ - `<out>/<company>-<role>-<YYYY-MM-DD>.md` (canonical source)
67
+ - `<out>/<company>-<role>-<YYYY-MM-DD>.docx` (via `pandoc`)
68
+ - `<out>/<company>-<role>-<YYYY-MM-DD>.pdf` (via `pandoc` with `--pdf-engine=weasyprint` or `wkhtmltopdf`; fall back to chromium headless if neither is present)
69
+
70
+ Default output directory: `./cover-letters/`. Override with `--out <dir>`.
71
+
72
+ Company and role slugs: lowercase, dashes, ascii only. Example:
73
+ `acme-corp-senior-frontend-engineer-2026-04-24.md`.
74
+
75
+ ### State directory
76
+
77
+ Personas and session state live at `~/.config/cover-letter/`:
78
+
79
+ ```
80
+ ~/.config/cover-letter/
81
+ ├── personas/ # one JSON per persona
82
+ ├── active-persona # plain text, contains active persona name
83
+ └── last-run.json # last write inputs (for fast rewrite/audit)
84
+ ```
85
+
86
+ Create the directory on first write. Never touch anything outside it when
87
+ managing state.
88
+
89
+ ### Writing principles (shared across write and rewrite)
90
+
91
+ Cover letters that read like a human wrote them share these traits. The write
92
+ and rewrite skills enforce them; the audit skill scores against them.
93
+
94
+ 1. **Specific over general.** Name the company, the role, and at least one
95
+ concrete detail about either (a product they shipped, a mission line, a
96
+ specific responsibility from the posting). Generic letters fail.
97
+ 2. **Evidence before claim.** Each claim about the applicant traces to a bullet
98
+ or line in their resume. No fabricated experience, numbers, or tools. If a
99
+ JD requirement is not in the resume, acknowledge the gap honestly rather
100
+ than inventing coverage.
101
+ 3. **Earned enthusiasm.** Motivation is tied to something specific ("your shift
102
+ to offline-first editing matches a problem I hit at X"), not generic
103
+ superlatives ("I'm so excited about this amazing opportunity").
104
+ 4. **Burstiness.** Vary sentence length. Mix short punchy sentences with
105
+ longer complex ones. AI-sounding prose has near-uniform sentence length.
106
+ 5. **Plain verbs, concrete nouns.** Prefer "shipped", "cut", "owned",
107
+ "rewrote" to "leveraged", "utilized", "spearheaded". Prefer naming the
108
+ thing over abstracting it.
109
+ 6. **No filler openers.** Avoid "I am writing to express my interest in...",
110
+ "It is with great enthusiasm that...", "Please accept this letter as...",
111
+ "I hope this message finds you well". Every one of these is an AI tell and
112
+ a wasted first sentence.
113
+ 7. **No sentimental cliches.** A cover letter is not a Hallmark card. Avoid
114
+ "hit close to home", "struck a chord", "resonated with me", "spoke to me",
115
+ "dream come true", "right up my alley", "a perfect fit", "meant to be",
116
+ "the stars aligned", "at the end of the day", "wearing my heart on my
117
+ sleeve". These are corny; they signal either AI prose or a writer reaching
118
+ for warmth they have not earned with specificity. Replace with a concrete
119
+ reason the thing connects: which paragraph of the post, which past project
120
+ of yours, which shared problem.
121
+ 8. **Human closing.** Skip "Please do not hesitate to contact me". A plain
122
+ sign-off works better.
123
+ 9. **Length.** 250 to 400 words by default. Shorter is almost always better.
124
+ Override with `--length short|standard|long` (180/300/420 target).
125
+
126
+ ### Default structure
127
+
128
+ Four compact sections, no section headings, roughly these proportions:
129
+
130
+ | Section | % of letter | Job |
131
+ |---------|------------|-----|
132
+ | Opening hook | 10-15 | Name the role + company + one specific detail that drew you in |
133
+ | Fit and evidence | 45-55 | One to three specific matches between resume and JD, each with a concrete number, tool, or outcome |
134
+ | Motivation | 15-20 | Why *this* company/team/problem, tied to something real from your background |
135
+ | Close | 10-15 | One line restating fit, one line offering next step, plain sign-off |
136
+
137
+ ## Anti-patterns
138
+
139
+ Flag or refuse to produce any of these:
140
+
141
+ - **Fabricated experience.** If the resume does not support a claim, do not
142
+ write it. Surface the gap to the user and offer to either drop the claim
143
+ or ask them to supply supporting detail.
144
+ - **Keyword stuffing.** Do not cram every JD keyword into the letter. Select
145
+ three to five that align with the strongest resume evidence.
146
+ - **Tone drift.** If a persona is active, enforce it. Do not slide back to
147
+ generic professional voice.
148
+ - **Filler phrases.** See the writing principles above and the AI phrase list
149
+ in `cover-letter-audit`.
150
+
151
+ ## Session flow
152
+
153
+ A typical end-to-end flow:
154
+
155
+ 1. `/cover-letter persona create` (one-time, or skip for default professional voice)
156
+ 2. `/cover-letter persona use <name>` (optional)
157
+ 3. `/cover-letter write --resume <resume> --jd <jd>` produces the letter plus a self-audit score
158
+ 4. If score below 85 or user unhappy, `/cover-letter rewrite <file>` with optional `--focus humanize|tighten|align`
159
+ 5. `/cover-letter audit <file>` for a final independent score
160
+
161
+ Each subcommand skill details its own workflow, inputs, and outputs.
@@ -0,0 +1,38 @@
1
+ {
2
+ "skill_name": "cover-letter-write",
3
+ "evals": [
4
+ {
5
+ "id": 0,
6
+ "name": "clean-match-senior-backend",
7
+ "prompt": "I'm applying to the Senior Backend Engineer role at Linear. Can you write me a cover letter? My resume is at skills/cover-letter/evals/inputs/resume-jordan-martinez.md and the job description is at skills/cover-letter/evals/inputs/jd-linear-senior-backend.md. Save the output to cover-letter-workspace/iteration-1/eval-0/<run>/outputs/",
8
+ "files": [
9
+ "skills/cover-letter/evals/inputs/resume-jordan-martinez.md",
10
+ "skills/cover-letter/evals/inputs/jd-linear-senior-backend.md"
11
+ ],
12
+ "expected_output": "A cover letter that specifically references Linear (company), the sync engine/CRDT, and at least one concrete detail from the JD. Claims should map to Jordan's real resume bullets (Stripe, Shopify). No fabricated experience. No filler openers. 250-400 words. Saved as markdown.",
13
+ "assertions": []
14
+ },
15
+ {
16
+ "id": 1,
17
+ "name": "gap-frontend-applying-to-go-platform",
18
+ "prompt": "Write me a cover letter for the Senior Platform Engineer (Go) role at Ramp. My resume is at skills/cover-letter/evals/inputs/resume-priya-iyer.md and the JD is at skills/cover-letter/evals/inputs/jd-ramp-senior-go-platform.md. Save the output to cover-letter-workspace/iteration-1/eval-1/<run>/outputs/",
19
+ "files": [
20
+ "skills/cover-letter/evals/inputs/resume-priya-iyer.md",
21
+ "skills/cover-letter/evals/inputs/jd-ramp-senior-go-platform.md"
22
+ ],
23
+ "expected_output": "A cover letter that HONESTLY addresses Priya's lack of Go production experience (her resume shows TypeScript/React with 'some Go (reading)'). It should either flag the gap to the user, or write a letter that is honest about the mismatch rather than fabricating Go experience. If the skill recommends the user reconsider applying, that is also acceptable. What must NOT happen: inventing Go production experience or claiming Priya has expertise she doesn't.",
24
+ "assertions": []
25
+ },
26
+ {
27
+ "id": 2,
28
+ "name": "career-changer-with-gap-acknowledgement",
29
+ "prompt": "I need a cover letter for the Junior Full-Stack Engineer role at Pathway. Resume: skills/cover-letter/evals/inputs/resume-sam-wu.md, JD: skills/cover-letter/evals/inputs/jd-pathway-junior-fullstack.md. Save to cover-letter-workspace/iteration-1/eval-2/<run>/outputs/",
30
+ "files": [
31
+ "skills/cover-letter/evals/inputs/resume-sam-wu.md",
32
+ "skills/cover-letter/evals/inputs/jd-pathway-junior-fullstack.md"
33
+ ],
34
+ "expected_output": "A cover letter that leverages Sam's career-change story honestly. It should cite real side projects by name (standups.fm, receiptparse, or checklate) with specific numbers (users, accuracy). It should tie the mission fit (tools for career changers) to Sam's own transition. No fabricated tech stack, no inflation of the marketing experience into false engineering claims. The letter should match the JD's tone (small startup, mission-driven).",
35
+ "assertions": []
36
+ }
37
+ ]
38
+ }
@@ -0,0 +1,43 @@
1
+ # Senior Backend Engineer, Sync Infrastructure
2
+
3
+ **Linear** | San Francisco or Remote (Americas) | Full-time
4
+
5
+ At Linear, we build the project management tool that teams actually enjoy using. Our sync engine is the core of the experience: it keeps issues consistent across clients in real time, works offline, and resolves conflicts without user intervention. We're looking for a senior backend engineer to join the sync team and push this further.
6
+
7
+ ## What you'll do
8
+
9
+ - Design and build primitives on our real-time sync engine (CRDT-based, Postgres-backed)
10
+ - Improve sync performance: sub-100ms propagation across clients is the target
11
+ - Work on offline-first replay and conflict resolution for edge cases we see in the wild
12
+ - Partner with the apps team to shape the client SDK
13
+ - Take ownership of production reliability; participate in an on-call rotation
14
+
15
+ ## What we're looking for
16
+
17
+ **Required:**
18
+
19
+ - 5+ years of backend experience in a typed language (Go, Rust, TypeScript preferred)
20
+ - Strong grasp of distributed systems fundamentals: idempotency, consistency models, event sourcing
21
+ - Experience owning production services at scale; comfortable on-call
22
+ - Familiarity with Postgres at scale (read replicas, partitioning, query optimization)
23
+ - Experience with real-time protocols (WebSockets, SSE, gRPC streaming)
24
+
25
+ **Nice to have:**
26
+
27
+ - Prior work on sync engines, offline-first systems, or CRDTs
28
+ - Kafka or similar event streaming experience
29
+ - Experience mentoring mid-level engineers
30
+
31
+ ## About the team
32
+
33
+ The sync team is five engineers. We work in 6-week cycles, write design docs for anything nontrivial, and keep our meetings short. Our founders are technical and involved in architectural decisions.
34
+
35
+ ## How we work
36
+
37
+ Async-first, written over synchronous. We publish an engineering blog (`linear.app/blog`) where we talk openly about technical decisions - the post on "How Linear's sync engine works" is a good read if you want to understand what we do.
38
+
39
+ ## Compensation
40
+
41
+ Base salary $210-260k depending on location and level, plus equity and full benefits. We hire globally in Americas time zones.
42
+
43
+ Apply with a cover letter at linear.app/careers.
@@ -0,0 +1,44 @@
1
+ # Junior Full-Stack Engineer
2
+
3
+ **Pathway** | Remote (US) | Full-time
4
+
5
+ Pathway is a 9-person startup building tools for career changers entering tech. We're hiring our first junior engineer. You'll work directly with our two senior engineers and our founder-CTO on everything from the learning platform to the internal admin tooling.
6
+
7
+ ## What you'll do
8
+
9
+ - Build features across the stack (Next.js frontend, Node.js backend, Postgres)
10
+ - Ship small features end-to-end; we pair senior engineers with you on larger work
11
+ - Learn production engineering habits: PRs, code review, tests, deployments, on-call shadow
12
+ - Take ownership of a specific surface area after the first 90 days
13
+
14
+ ## What we're looking for
15
+
16
+ **Required:**
17
+
18
+ - Demonstrable coding ability - side projects with real users, coursework with depth, or prior junior experience
19
+ - Comfort with TypeScript and JavaScript
20
+ - Genuine interest in the mission (tools for career changers) - we hire from that audience when we can
21
+ - Clear written communication
22
+ - Willingness to work in public: write blog posts, demo at all-hands, contribute to design docs
23
+
24
+ **Nice to have:**
25
+
26
+ - Prior professional experience in any field that translates (customer empathy, data literacy, writing, teaching)
27
+ - Side projects that teach us something about how you think
28
+ - Familiarity with Next.js or React
29
+
30
+ ## What we do not expect
31
+
32
+ - A CS degree
33
+ - A prior full-time engineering role
34
+ - Knowledge of our stack before day one
35
+
36
+ ## About us
37
+
38
+ Small team, flat structure, founder-led. We ship to production every day. We're remote-first with quarterly in-person weeks in Denver. Our customers are people who made the jump you might be making now.
39
+
40
+ ## Compensation
41
+
42
+ $95-120k base plus early-stage equity. We hire at one senior-level role in engineering; every other engineer is mid or junior.
43
+
44
+ Apply with a cover letter that tells us why this role, and one thing you've built or learned that we wouldn't guess from your resume. Send to careers@pathway.co.
@@ -0,0 +1,39 @@
1
+ # Senior Platform Engineer, Go
2
+
3
+ **Ramp** | New York, NY (hybrid, 3 days onsite) | Full-time
4
+
5
+ Ramp is building the finance platform for modern businesses. We're hiring a senior platform engineer to own core services that the rest of engineering builds on: authentication, authorization, feature flags, and internal service discovery. You will make every other team faster.
6
+
7
+ ## What you'll do
8
+
9
+ - Own and evolve the core Go services that power Ramp's platform
10
+ - Build the next generation of our authorization system (fine-grained, policy-based)
11
+ - Set the bar for reliability and performance on critical-path services
12
+ - Write design docs, review others' docs, and unblock teams across the org
13
+ - Participate in platform on-call
14
+
15
+ ## What we're looking for
16
+
17
+ **Required:**
18
+
19
+ - 6+ years of production backend experience
20
+ - Expert in Go - you have shipped real Go services in production, not just written tutorials
21
+ - Deep experience with authorization and authentication patterns
22
+ - Strong written communication - we write everything down
23
+ - Track record of taking ownership of platform-level problems
24
+
25
+ **Nice to have:**
26
+
27
+ - Experience with OPA, Casbin, or similar policy engines
28
+ - Fintech or regulated industry background
29
+ - Experience building internal developer platforms
30
+
31
+ ## About us
32
+
33
+ Ramp has grown from 20 to 1000+ employees in three years. The platform team is 12 engineers split across three pods. We ship weekly and maintain a 99.99% uptime target on the authorization path.
34
+
35
+ ## Compensation
36
+
37
+ Base $220-280k plus equity. Hybrid role - we're in the New York office Tuesday, Wednesday, Thursday. Full relocation support for the right candidate.
38
+
39
+ Apply at ramp.com/careers with a cover letter explaining why platform work interests you.
@@ -0,0 +1,39 @@
1
+ # Jordan Martinez
2
+
3
+ jordan.martinez@example.com | +1 415 555 0142 | San Francisco, CA
4
+ github.com/jmartinez | linkedin.com/in/jmartinez
5
+
6
+ ## Summary
7
+
8
+ Senior backend engineer, 7 years across payments, search, and developer platforms. Strongest in Go, distributed systems, and turning production incidents into durable fixes.
9
+
10
+ ## Experience
11
+
12
+ ### Stripe - Senior Software Engineer (2022 - present)
13
+
14
+ - Owned the billing gateway rewrite in Go; cut p99 latency on invoice creation from 420ms to 95ms by moving pricing lookups into a Redis-backed cache with versioned invalidation
15
+ - Led a 4-person pod through a zero-downtime migration of the subscription renewal system; processed 18M active subscriptions without revenue impact
16
+ - Authored the internal on-call runbook now used by the payments org (60+ engineers); cut MTTR on gateway incidents from 42 to 11 minutes
17
+ - Designed and shipped the idempotency key system used by three external APIs; hit 99.997% duplicate-suppression accuracy in production
18
+
19
+ ### Shopify - Software Engineer (2019 - 2022)
20
+
21
+ - Migrated the order service from a PostgreSQL-only architecture to Kafka-backed event sourcing; the service now handles 2M events/day with 99.99% uptime
22
+ - Built the internal search service using Elasticsearch; reduced merchant search p95 latency from 1.8s to 280ms across 1.2M catalogs
23
+ - Mentored three junior engineers through their first year; all three were promoted within 18 months
24
+ - Introduced a deterministic replay framework for debugging order state bugs; adopted by four teams
25
+
26
+ ### Crunchbase - Software Engineer (2018 - 2019)
27
+
28
+ - Built the company-enrichment pipeline in Python; processed 8M company records weekly with a hand-rolled dedup layer hitting 96% F1
29
+
30
+ ## Skills
31
+
32
+ - Languages: Go (expert, 5 years), Python (4 years), TypeScript (3 years), Rust (reading-level)
33
+ - Systems: Kafka, Postgres, Redis, Elasticsearch, gRPC, Protocol Buffers
34
+ - Platforms: AWS (primary), GCP (working knowledge), Docker, Kubernetes
35
+ - Practices: distributed tracing, idempotency, event sourcing, chaos testing
36
+
37
+ ## Education
38
+
39
+ BS Computer Science, UC Berkeley, 2018
@@ -0,0 +1,38 @@
1
+ # Priya Iyer
2
+
3
+ priya.iyer@example.com | +1 646 555 0177 | New York, NY
4
+ github.com/priyaiyer
5
+
6
+ ## Summary
7
+
8
+ Full-stack engineer, 4 years building web products. Strongest in TypeScript and React. Comfortable shipping end-to-end, from database schema to user-facing polish.
9
+
10
+ ## Experience
11
+
12
+ ### Notion - Software Engineer (2022 - present)
13
+
14
+ - Rebuilt the comments UI in the block editor using Slate + Zustand; reduced render time on long documents (>2000 blocks) from 340ms to 70ms
15
+ - Shipped the @-mention picker across the editor, calendar, and databases; now used by 4M+ DAU
16
+ - Wrote the client-side conflict resolution layer for inline table editing (last-writer-wins with operation log); reduced user-visible edit collisions by 82%
17
+ - Led front-end for the new home page; reduced Time to Interactive on the dashboard from 4.1s to 1.4s
18
+
19
+ ### Datadog - Associate Software Engineer (2020 - 2022)
20
+
21
+ - Built internal tooling in TypeScript and Node.js for the monitor alerting team; dashboards now used by 30+ engineers daily
22
+ - Wrote the migration script that moved 900K user monitors from legacy config format to the new YAML schema; zero data loss
23
+ - Contributed to the React component library used across the Datadog app (12+ reusable components)
24
+
25
+ ### Internship - Bloomberg, Terminal UI team (Summer 2019)
26
+
27
+ - Shipped a proof-of-concept for keyboard-first navigation in one terminal function; adopted into the main product
28
+
29
+ ## Skills
30
+
31
+ - Languages: TypeScript (expert, 4 years), JavaScript, Python (working knowledge)
32
+ - Frontend: React, Next.js, Slate, Zustand, Tailwind, Framer Motion, Storybook
33
+ - Backend: Node.js, Express, Postgres, some Go (reading)
34
+ - Testing: Vitest, Playwright, React Testing Library
35
+
36
+ ## Education
37
+
38
+ BS Computer Science, Carnegie Mellon, 2020
@@ -0,0 +1,48 @@
1
+ # Sam Wu
2
+
3
+ sam.wu@example.com | +1 312 555 0119 | Chicago, IL
4
+ github.com/samwu-dev | samwu.dev
5
+
6
+ ## Summary
7
+
8
+ Marketing manager transitioning to software engineering. 5 years in growth marketing at B2B SaaS, 18 months of serious self-study in web development, 3 shipped side projects with real users.
9
+
10
+ ## Engineering experience
11
+
12
+ ### Side projects (2024 - present)
13
+
14
+ - **standups.fm** - TypeScript/Next.js app that generates standup summaries from Linear issues. 340 active weekly users, $0 marketing spend, all growth from Show HN
15
+ - **receiptparse** - Python/Flask tool for parsing expense receipts with Tesseract + custom regex pass; 94% field-extraction accuracy on a benchmark set of 500 receipts
16
+ - **checklate** - Browser extension (TypeScript) that checks if a restaurant reservation is running late; 1100 installs on Chrome Web Store
17
+
18
+ ### Self-study (2023 - 2024)
19
+
20
+ - Completed The Odin Project full-stack curriculum (~900 hours of coursework and exercises)
21
+ - Working through Designing Data-Intensive Applications (4 chapters done, taking notes publicly on my site)
22
+ - Built and deployed 6 practice apps before the three above
23
+
24
+ ## Marketing experience
25
+
26
+ ### HubSpot - Senior Growth Marketing Manager (2021 - present)
27
+
28
+ - Owned the developer-focused content program; drove 180K monthly organic visits to the developer blog by the end of 2024 (up from 40K at start)
29
+ - Ran A/B tests on sign-up flow with the product team; two of my experiments shipped and moved free-to-paid conversion 2.1 percentage points
30
+ - Built the marketing data model in Looker with the data team; used daily by 15 marketers
31
+
32
+ ### Mailchimp - Growth Marketer (2019 - 2021)
33
+
34
+ - Ran the email onboarding program; improved 30-day activation by 14% across SMB accounts
35
+ - Wrote SQL against the warehouse for weekly reporting (not production code, but where I learned to think in data)
36
+
37
+ ## Skills
38
+
39
+ - TypeScript, JavaScript, HTML/CSS (primary)
40
+ - Python (secondary)
41
+ - Node.js, Next.js, React, Flask
42
+ - Postgres, SQLite
43
+ - Git, Vercel, basic Docker
44
+ - Comfortable reading documentation and debugging
45
+
46
+ ## Education
47
+
48
+ BA Communications, Northwestern, 2019