我为我的简历构建了‘CI/CD Pipeline’(Next.js 15 + Puppeteer)
Source: Dev.to

The Problem: Version Control Hell
我是一名 21 岁的 AI 工程师。上个月,我意识到自己花在 Microsoft Word 上排版的时间比真正写代码的时间还多。
我有 5 份简历版本:
resume_frontend_final.pdfresume_backend_v2.docxresume_startup_focus.pdfresume_REAL_final_v3.pdf
每次投递职位时,我都要手动删除项目符号以符合“一页规则”。如果投递 React 岗位,我就删除 Python 的项目符号;如果投递后端岗位,我就删除 Figma 的项目符号。
这就是 版本控制地狱。
The Realization: Resume as Code
我意识到简历并不是普通文档。简历是一种数据库视图。
- 数据库: 我的整个职业历史(每个项目、技能、证书)。
- 查询: 我所投递的职位描述。
- 视图: 渲染后的 PDF。
于是,作为一个懒惰的工程师,我构建了一个自动化系统。我把它叫做 Resumefy.pro。
The Architecture
我不想要像 Canva 那样的“模板选择器”。我想要一个 编译器。
1. The Stack
- Frontend: Next.js 15 (App Router)
- Database: Postgres (via Prisma)
- PDF Engine: Puppeteer (Headless Chrome)
- Orchestration: Vercel Serverless Functions
2. The “Page Break” Nightmare (The P0 Error)
最难的并不是 AI 匹配,而是 PDF 渲染。
像 jspdf 这样的库在处理复杂的 CSS Grid 布局时表现糟糕;它们会把文字在页面之间截断。
我使用 Puppeteer 编写了自定义算法,在渲染之前计算每个章节的 DOM 高度。如果某个项目描述导致高度超过 1123px(A4 高度 – 边距),系统会强制换页或将整个组件移动到下一页。这是一种“前瞻”渲染器。
The Result: The “War Machine”
现在,我不再手动编写简历。
- 我维护一个 主档案。
- 粘贴职位描述。
- 系统在约 30 秒内“编译”出一份定制的 PDF。
Why I Built This (The Manifesto)
我解决了“投递黑洞”问题。问题不在于我们不够合格,而是我们没有时间为数十个 ATS 机器人完美地定制简历。
这个工具让竞争更公平,把求职过程转化为一个工程问题——用代码来解决。
Try it / Roast my Code
它对开发者免费(提供慷慨的免费层)。
Live Site:
我期待以下反馈:
- PDF 渲染速度。
- 移动端 UI(我熬夜修复了 Z‑index 问题)。
欢迎告诉我你的想法!