Personal projects2026
Lazy CV
An AI-powered tailored resume generator (this very site)
Overview
A full-stack application combining AI Agent automation with Next.js. By simply providing a job posting URL and invoking the /cv command through Claude Code (or GitHub Copilot), the system automatically scrapes the JD via Chrome DevTools MCP, analyzes key requirements, and generates tailored bilingual (EN/ZH) resume web pages based on a personal data source.
Each resume is served under a unique UUID, ready for browser-to-PDF printing. The homepage features a resume management dashboard with search, inline editing, and one-click link copying.
Highlights
- 01
Next.js 16 App Router + Standalone Output
Leverages the latest App Router architecture with standalone mode for lightweight Docker packaging
- 02
AI Agent Automated SOP
Uses Chrome DevTools MCP to scrape JDs, combined with a structured skill/prompt SOP defined for Claude Code (copilot-instructions), enabling an end-to-end resume generation pipeline
- 03
Workflow Composed of Claude Code Skills
The whole workflow is built from multiple skills —
/cvgenerates tailored resumes,/updatesyncs the base template,/cover-letterdrafts cover letters, and/job:sg//job:remotesearch and score job postings;pnpm cvonly scaffolds the resume folder and database record, and acheck-cvscript automatically verifies each generated resume against the skill rules (summary length, weak verbs, etc.); once the rule checks pass, each resume is ATS-scored with a weighted formula (required/nice-to-have coverage, quantification rate, section completeness, keyword distribution) and iterated on until it reaches 85%, together forming a quality gate for AI-generated resumes - 04
Scoring Gates at Every Stage
During job search, every posting is scored and graded on a 100-point table (tech fit, level, work mode, product domain, salary, company reviews, etc.), and the scheduler only auto-generates resumes for top-graded postings; each generated resume must first pass the check-cv rule checks, then reach 85% on a weighted score before moving on
- 05
Adversarial Generation with Reviewers on a Different Model
After generation, two read-only reviewers run in parallel on Opus, assigned independently of the generating model: an HR reviewer that only sees the JD and the resume (information isolation, simulating the recruiter's view), and a rules reviewer that checks against the skill rules and source data item by item; the generator fixes each finding or marks it as a genuine gap, for at most 2 rounds with fresh reviewers each round. The technical-article skill additionally uses two models as reviewers: Haiku (a newcomer reader) and Opus (a reader who knows the internals)
- 06
Model Assignment per Stage
Haiku for steps that need no judgment such as scraping job lists, Sonnet for collecting company reviews, and Opus for JD interpretation and scoring, balancing cost against judgment quality
- 07
End-to-end Job-hunting Flow
By dividing work across agents, skills, and different models, plus adversarial generation, the system covers the full flow of finding postings → judging fit → generating tailored resumes → submitting applications, with an agent driving the browser to fill in application forms
- 08
Serverless Deployment on AWS
Docker images pushed to ECR, executed via Lambda Web Adapter for Next.js SSR, with static assets served through S3 + CloudFront CDN; fully automated CI/CD via GitHub Actions
- 09
Neon Serverless PostgreSQL + Drizzle ORM
Type-safe database access using Neon's serverless PostgreSQL with Drizzle ORM
- 10
TailwindCSS 4 + Framer Motion
Responsive design with smooth animations
- 11
Vibe Coding in 2 Days
The entire project was built from scratch to production in just 2 days, fully developed with Claude Code (Vibe Coding)