Back to projects

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

  1. 01

    Next.js 16 App Router + Standalone Output

    Leverages the latest App Router architecture with standalone mode for lightweight Docker packaging

  2. 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

  3. 03

    Workflow Composed of Claude Code Skills

    The whole workflow is built from multiple skills — /cv generates tailored resumes, /update syncs the base template, /cover-letter drafts cover letters, and /job:sg//job:remote search and score job postings; pnpm cv only scaffolds the resume folder and database record, and a check-cv script 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

  4. 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

  5. 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)

  6. 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

  7. 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

  8. 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

  9. 09

    Neon Serverless PostgreSQL + Drizzle ORM

    Type-safe database access using Neon's serverless PostgreSQL with Drizzle ORM

  10. 10

    TailwindCSS 4 + Framer Motion

    Responsive design with smooth animations

  11. 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)

Images