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

发布: (2025年12月14日 GMT+8 09:48)
4 min read
原文: Dev.to

Source: Dev.to

我为简历构建的“CI/CD 流水线”封面图(Next.js 15 + Puppeteer)

The Problem: Version Control Hell

我是一名 21 岁的 AI 工程师。上个月,我意识到自己花在 Microsoft Word 上排版的时间比真正写代码的时间还多。

我有 5 份简历版本:

  • resume_frontend_final.pdf
  • resume_backend_v2.docx
  • resume_startup_focus.pdf
  • resume_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 问题)。

欢迎告诉我你的想法!

Back to Blog

相关文章

阅读更多 »