dodola · projects

在线简历编辑器

Resume Builder 是一个面向求职、保研和学术申请场景的在线简历编辑器。它不要求注册账号,也不把填写过程拆成层层跳转的表单,而是让内容编辑与最终版式始终出现在同一个工作区中:修改字段、调整模块或切换主题后,可以立即看到简历的实际效果。

在线体验:resume.dodolalorc.cn
项目源码:github.com/dodolalorc/resume.dodolalorc.cn

为什么做这个项目

制作简历时,内容和排版往往会互相牵制。使用文档工具,需要反复处理对齐、间距和分页;使用模板网站,又常常受限于固定字段、付费导出或平台账号。

这个项目尝试把两件事分开处理:

  • 使用者专注于经历、项目和成果的表达。
  • 编辑器负责模块结构、视觉层级和打印版式。

它不是一个复杂的求职平台,而是一件边界清晰的本地化工具:从结构化内容开始,经过实时预览和主题调整,最终得到一份适合打印、投递或继续保存的简历。

核心体验

所见即所得的编辑方式

个人信息、教育经历、工作或校园经历、项目经历与奖项都可以在编辑抽屉中维护。页面会实时呈现修改结果,不需要在“填写”和“预览”之间来回切换。

除个人信息固定置顶外,其余模块可以拖拽排序。面对不同申请方向时,同一份内容可以重新组织叙事顺序:求职简历优先展示项目与工作经历,学术申请则可以把教育背景和科研项目放在更靠前的位置。

两套面向真实场景的主题

项目没有追求大量相似模板,而是保留两套用途明确的主题:

主题适用场景版式重点
简约纸张校招、应届生求职、研究型岗位单栏结构与均衡的信息密度,强调清晰、耐读
科研保研保研、夏令营、科研助理、学术申请突出 GPA、排名、课程、语言证书与科研项目

主题之外,还可以调整主题色、简历背景色和标题背景样式。标题背景采用直角梯形标签,并与分割线衔接,用来强化信息层级;不需要这类视觉强调时,也可以保持纯粹的纸张式排版。

为不同经历准备的数据结构

编辑器不仅覆盖常见的学校、公司、职位和项目描述,也为学术申请补充了更细的字段:

  • 学校与专业标签,例如 985211双一流QS Top 100
  • GPA、专业排名、语言证书和主修课程。
  • 项目作者顺序、会议或期刊、投稿状态与项目来源。
  • 科研方向、技能和自定义申请信息。

这些内容仍然使用同一套模块化数据结构,不需要为了求职版和学术版分别维护两份简历。

导出与数据管理

Resume Builder 提供三种互补的导出方式:

格式用途
PDF通过浏览器原生打印生成,可自定义文件名;多页简历支持背景补齐与页码
HTML导出内联样式的独立文件,适合离线查看和直接分享
JSON备份当前简历数据,用于恢复、迁移或继续编辑

PDF 导出基于 @pagewindow.print(),不依赖 canvas 截图。这样可以保留可选择文本,也更接近浏览器原生的打印与分页能力。跨设备使用时,则可以通过 JSON 完成数据迁移,不必依赖平台账号。

技术实现

项目使用 Vue 3.5、Composition API 和 TypeScript 构建,Vite 负责开发与生产构建,样式由 Tailwind CSS 和组件内 CSS 共同完成,依赖管理与脚本运行使用 Bun。

代码按照数据、编辑器、展示和主题拆分:

src/
components/ 通用组件
data/cv.json 默认简历数据
i18n/ 界面文案
themes/
index.ts 主题注册与样式变量
types.ts 主题类型
presets/ 主题预设
types/resume.ts 简历数据类型
utils/resume-export.ts PDF、HTML 等导出逻辑
views/
resume-view.vue 简历主视图
components/ 简历展示组件
modules/resume-editor/ 编辑抽屉

其中,主题系统被设计为可扩展的预设层。src/themes/index.ts 会自动注册主题,新增主题时可以通过脚本生成基础结构:

Terminal window
bun run theme:new -- MyTheme

主题因此不只是几组散落在组件中的颜色值,而是一套具有明确类型和注册入口的配置。

产品取舍

当前版本有意保持较小的功能边界:

  • 页面只提供简体中文界面;历史数据中的 { zh, en } 字段仍可兼容读取。
  • 不提供账号与云同步,数据备份和跨设备迁移通过 JSON 完成。
  • PDF 使用浏览器打印能力,而不是在客户端重新绘制整份简历。
  • 主题数量控制在两套,优先完善真实使用场景,而不是堆叠外观接近的模板。

这些取舍让项目能够把重点放在编辑效率、数据自主和稳定导出上,也为后续增加主题、字段或新的导出形式保留了清晰的扩展位置。

本地运行

环境要求:Node.js 18 或更高版本、Bun 1.0 或更高版本。

Terminal window
git clone https://github.com/dodolalorc/resume.dodolalorc.cn.git
cd resume.dodolalorc.cn
bun install
bun dev

开发服务器默认运行在 http://localhost:5173。提交改动前,可以执行:

Terminal window
bun run type-check
bun test:unit
bun run build

Resume Builder 目前已经覆盖从内容编辑、版式调整到文件导出的完整流程。它希望解决的不是“如何快速套用一个模板”,而是如何用一套可维护、可迁移的数据,持续整理和输出自己的经历。