MCPcopy Index your code
hub / github.com/QdabuliuQ/easy-resume

github.com/QdabuliuQ/easy-resume @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
939 symbols 2,869 edges 345 files 4 documented · 0% updated 2d ago★ 106
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

青松简历

简体中文  |  English

AI 简历编辑器 | 快捷编辑 · 数据安全 · 本地存储备份 · AI 协助

基于 Next.js 14(App Router) 的在线简历编辑器:可视化编排模块、富文本编辑、拖拽布局,并支持通过 Puppeteer 导出 PDF / PNG。

🌐 在线预览

License Maintenance

Next.js React Tailwind CSS TypeScript

Stars Forks

青松简历项目预览

✨ 功能概览

  • 简历模块编辑(个人信息、工作经历、项目、教育、技能、证书等)
  • 画布预览与网格布局(react-grid-layout
  • Quill 富文本与 HTML 安全处理(DOMPurify)
  • 服务端渲染简历 HTML,PDF/PNG 导出 API
  • AI 相关能力,支持 AI 润色优化

🛠️ 技术栈

类别 选型
框架 Next.js 14、React 19、TypeScript
UI Ant Design 5、Tailwind CSS 4
状态 MobX、mobx-react
编辑器 / 布局 Quill、@dnd-kit、react-grid-layout
导出 Puppeteer
规范 ESLint 9、Prettier、Husky、Commitlint

💻 环境要求

  • Node.js ≥ 18.17(见 package.json engines
  • PDF/PNG:生产环境需可用的 Chromium;默认期望可执行文件为 /usr/bin/chromium-browser,或通过环境变量指定(见下表)

🚀 快速开始

npm install
# 若出现 React / Next  peer 依赖冲突,可使用:
# npm install --legacy-peer-deps

npm run dev

开发服务器默认由 Next 分配端口;本地访问路径形如:http://localhost:3000/zh/edit(端口以终端输出为准)。

生产构建与启动:

npm run build
npm run start

start 脚本固定监听 3010 端口。

📜 常用脚本

命令 说明
npm run dev 开发模式
npm run build 生产构建
npm run start 生产启动(端口 3010)
npm run lint ESLint
npm run lint:pritter Prettier 格式化 src/
npm run prepare 安装 Husky(npm install 后自动执行)

🔐 环境变量

在项目根目录创建 .env.local(勿提交密钥到仓库)。可参考 .env.local.example

本地开发

变量 必填 说明
XFYUN_MAAS_API_KEY 二选一 讯飞星辰 Coding Plan API Key(appId:apiSecret),默认模型 astron-code-latest
CHATANYWHERE_API_KEY 二选一 ChatAnywhere 免费 API 的 Key;讯飞不可用时自动降级(deepseek-v4-flash
XFYUN_MAAS_BASE_URL 讯飞 MaaS 地址,默认 https://maas-coding-api.cn-huabei-1.xf-yun.com/v2
XFYUN_MAAS_MODEL 讯飞模型 ID,默认 astron-code-latest
PUPPETEER_EXECUTABLE_PATH 导出 PDF/PNG 时 Puppeteer 使用的浏览器可执行文件路径。开发环境未设置时由 Puppeteer 自带 Chromium;生产环境 Linux 默认 /usr/bin/chromium-browser

PUPPETEER_EXECUTABLE_PATH 示例:

系统 示例路径
macOS(Google Chrome) /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
Windows(Google Chrome) C:\Program Files\Google\Chrome\Application\chrome.exe
Linux(Chromium) /usr/bin/chromium-browser/usr/bin/chromium

部署专用

以下变量仅在服务器部署时需要配置:

变量 说明
RESUME_PROJECT_ROOT 项目在服务器上的绝对路径,例如 /root/easy-resume(PM2 / 脚本等工作目录)
NEXT_PUBLIC_SITE_URL 站点对外访问的根 URL,例如 https://resume.example.com;用于 PDF 内相对链接补全、站点元信息。需在 npm run build 前配置,否则客户端 bundle 中不会生效
EXPORT_BASE_URL Puppeteer 打开导出页用的地址;默认生产为 http://127.0.0.1:3010(本机回环,避免经 Nginx 超时)。多实例或特殊网络时再改
PUPPETEER_EXECUTABLE_PATH 生产 Chromium 路径,Docker 镜像内为 /usr/bin/chromium

可选(启用 AI 评分限流与缓存时需配置,见 .env.local.example):

变量 说明
UPSTASH_REDIS_REST_URL Upstash Redis REST URL
UPSTASH_REDIS_REST_TOKEN Upstash Redis REST Token

📂 目录结构(摘要)

src/
  app/           # App Router:页面、Layout、API Routes(pdf/png/version/chat 等)
  components/    # 通用组件
  views/edit/    # 编辑器主界面(画布、侧栏、头部等)
  modules/       # 简历各模块渲染与类型
  mobx/          # 全局状态
  lib/           # Puppeteer、字体、API 转发等工具
  utils/         # 通用工具函数
  json/          # 默认简历与模板数据
public/          # 静态资源(含字体等)
middleware.ts    # Next.js 中间件

🐳 Docker 部署

docker-compose up -d

访问:http://localhost:3010/zh

Extension points exported contracts — how you extend this code

GlobalStyle (Interface)
(no doc)
src/modules/utils/common.type.ts
SectionListOptions (Interface)
(no doc)
src/views/edit/components/canvas/moduleFragment.tsx
ProjectItemLike (Interface)
(no doc)
src/modules/project/projectItemsBody.tsx
CanvasModuleFragmentConfig (Interface)
(no doc)
src/views/edit/components/canvas/moduleFragment.tsx
ProjectItemsBodyProps (Interface)
(no doc)
src/modules/project/projectItemsBody.tsx
UseSelectableGuideHoverParams (Interface)
(no doc)
src/views/edit/components/canvas/useSelectableGuideHover.ts
ProjectProps (Interface)
(no doc)
src/modules/project/index.tsx
SelectableGuideLinesProps (Interface)
(no doc)
src/views/edit/components/canvas/selectableGuideLines.tsx

Core symbols most depended-on inside this repo

makeGlobalStyle
called by 51
tests/modules/fixtures.tsx
setConfig
called by 41
src/mobx/configStore.ts
sanitizeRichTextHtml
called by 27
src/utils/sanitizeHtml.ts
hexForColorInput
called by 24
src/lib/resumeColorHex.ts
err
called by 22
src/lib/ai/score/routeShared.ts
cssLengthToApproxPx
called by 18
src/utils/cssLength.ts
cdn
called by 16
src/lib/brandAssets.ts
canAddResumeModuleItem
called by 15
src/utils/moduleTypeLimits.ts

Shape

Function 877
Interface 29
Method 23
Class 10

Languages

TypeScript100%

Modules by API surface

src/lib/resumeDiff.ts21 symbols
src/lib/ai/ragResume/knowledge.ts19 symbols
src/lib/mergeImportedResumePages.ts17 symbols
src/utils/sanitizeHtml.ts16 symbols
src/lib/ai/score/routeShared.ts16 symbols
src/views/edit/components/panel/components/pageSettings/index.tsx15 symbols
src/views/edit/components/canvas/moduleFragment.tsx15 symbols
src/lib/themeStore.ts15 symbols
src/components/heroPreviewCompare/index.tsx15 symbols
src/components/homeResumeTemplateScroll/index.tsx14 symbols
src/lib/semanticJsonDiff.ts13 symbols
src/components/moduleOperation/index.tsx13 symbols

For agents

$ claude mcp add easy-resume \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page