36 套 A4 模板、分页所见即所得、服务端导出 PDF——极简简历 MiniWho
在线使用:who.minims.cn | 源码:github.com/cosolar/min…
每次换工作,简历工具都要重新交一次"订阅费":免费版导出带水印,高级模板要开会员,导出的 PDF 和网页上看到的不是一回事;更别提手机号、住址、证件照都躺在别人的服务器上。
我前后做过好几版简历,最后决定自己写一个。现在它开源上线了:极简简历 MiniWho。
它只解决三个问题:排版别崩、导出别坑、数据别丢。
一、用结构代替排版:18 个模块 + 自定义,只管「写什么」
大部分简历工具让你先挑模板,再把内容往文本框里塞。MiniWho 反过来:内容是结构化的,版式是最后一步。
内置 18 个固定模块——基本信息、求职意向、教育背景、工作经历、项目经历、在校经历、个人技能、技能熟练度、论文发表、作品集、自我评价、考研信息、竞赛经历、获奖情况、资格证书、论文期刊、兴趣爱好——外加最多 5 个自定义模块。
每个模块可以拖拽排序、显示或隐藏、重命名;工作台右侧是实时预览,改一个字,纸面立刻跟着变。切换模板不会丢内容,换版式只是换一层皮。
几个细节:
- 单模块独立保存,服务端用
contentVersion乐观锁,开两个标签页编辑不会互相覆盖。 - 刷新或误关页面后,可以恢复尚未保存的本地草稿。
- 简历照片走独立通道,工作台内裁剪(证件照 / 圆形两种),上传后自动降采样重编码,不占附件额度。
- 教育背景和工作经历可以挂院校 / 公司 LOGO,所有版式都会把它排进条目侧边的徽标栏。
二、分页所见即所得:屏幕上怎么断,PDF 就怎么断
这是我最在意的一处。
用 Word 或网页模板写简历,最常见的崩溃场景是:屏幕上一切正常,导出时标题被腰斩、表格裂成两半、第二页顶格没有页边距。
MiniWho 的做法是把分页算在纸面上:内容超过一页时,按 A4 高度实算断点,画出虚线和「第 N 页 · 共 M 页」标签。屏幕上的虚线、浏览器打印、服务端导出的 PDF,用的是同一批断点标记,续页会自动补齐页边距。双栏模板的正文列和侧栏列共用同一条页边界,侧栏底色铺满每一页。
所以你看到的最后一页,就是投出去的那一页。
三、模板不是一张皮,而是一个可以交换的文件
站内现在有 36 套模板:30 套随应用内置(12 套原创官方版式 + 18 套设计版式),加上模板中心里社区分享的版本。单栏、双栏、色带、居中、时间轴、通栏照片侧栏、页眉证件照……大部分版式在页眉留了照片位,没传照片时会自动回落到姓名首字徽标,不会留白。
比数量更有意思的是模板包:每一套模板——包括官方的——都是一个 JSON 文件,描述主题 token 和一段受约束的 CSS,可以一键导出、发给别人、在任意一份部署里导入。
导入后的模板和官方同权:能预览、能切页、能导 PDF、分页规则一致。安全上也没有留后门——CSS 会在服务端逐条规则重新生成后才注入页面,选择器强制限定在该模板的作用域类下,@import、expression()、!important、外链 url() 一律拒绝;这个格式里根本没有 HTML 和 JS 的位置,所以别人的模板拿不到执行能力,也改不坏你的简历。
如果你自己调过一套版式,可以把它分享到模板中心;也可以关掉导出权限,让别人只能选用、不能下载。
四、导出:服务端渲染 PDF,失败还能退回浏览器打印
点「下载 PDF」,服务端用无头 Chrome 把同一套 A4 版面渲染出来,结果按内容和样式版本缓存 24 小时,重复导出基本是瞬间完成。
机器上没有可用的浏览器时,前端会自动回落到「浏览器打印 → 另存为 PDF」,功能不中断。
打印和导出时恢复 210 × 297mm 物理尺寸;还可以调纸面滤镜(原色 / 暖纸 / 黑白)、字号与行距、页脚品牌标识。这些设置跟着简历存,不用每次重调。
五、分享链接与隐私:字段在服务端就被拿掉
找工作期间,简历要发给 HR、朋友、内推人,但不需要把全部个人信息摊给所有人。MiniWho 的分享是:
- 高熵随机链接,可选 4–20 位访问密码;
- 可选 1–365 天有效期,或者永久;
- 可以选择是否允许打印和下载;
- 手机号、邮箱、城市、个人主页等字段可以单独隐藏,隐藏的字段在服务端就被移除,根本不会发到访客的浏览器里;
- 简历照片走带 HMAC 签名的短时效地址,猜不出来,也没法长期转发;
- 能看查看次数,随时撤销;重新生成链接会让旧链接立即失效。
六、诊断不上传简历:规则评分,不调外部 AI
站内的简历诊断是五维规则评分:完整度 25 分、岗位匹配 25 分、表达质量 20 分、成果量化 15 分、格式规范 15 分。输出等级、维度明细和最多 12 条可执行建议,建议按优先级排序,可以直接跳到对应模块去改。
它不依赖任何外部 AI 服务,结果可复现——同一份内容,今天和下周跑出来的分数是一样的。在自己的服务器上部署时,整个诊断过程连外网都不用出。
七、账号与数据:能带走,也能删干净
- 用户名密码注册登录,密码 BCrypt 哈希;
- 邮箱注册可选,6 位验证码走标准 SMTP,验证码加密存储、10 分钟有效、一次即废;
- 也可以接 GitHub 登录(需要自己填 Client ID / Secret);
- 支持邮箱验证码找回密码;
- 账号数据可以打包成 zip 一次性导出;
- 自助注销带宽限期,到期后附件、头像、简历全部硬删除。
管理后台也不只是"看看统计":注册通道开关、邮件与 GitHub 凭据、内容宽度(1100–1600px,全站页面跟着变)、首页示例简历、意见反馈、单账号存储配额,以及一张运行环境自检卡片(数据库、上传目录、PDF 渲染、邮件通道、磁盘空间)。
免费、开源、可自部署
- 全部功能免费:没有会员体系,没有付费模板,没有隐藏的导出限制。
- Apache 2.0:可以自用、修改、商用与再分发,保留
LICENSE与NOTICE即可。 - 单镜像:前端页面打进同一个 jar,一个容器 + 一个数据库就能跑;默认 SQLite,也可以换 MySQL 8。
- 前端 Vue 3 + Element Plus,后端 Java 17 + Spring Boot 3,接口和数据结构都写在文档里,方便二次开发。
最省事的自部署方式,一条命令:
docker run -d --name miniwho \
-p 8088:8080 \
-v miniwho-uploads:/app/uploads \
-e MINIWHO_DB=/app/uploads/miniwho.db \
-e MINIWHO_ADMIN_PASSWORD='换成你的强密码' \
-e MINIWHO_MEDIA_SECRET="$(openssl rand -hex 32)" \
--shm-size=512m \
cosolar/miniwho:latest
打开 http://localhost:8088,用 admin 和你设置的密码登录。要允许别人自助注册,去后台「站点设置」打开对应通道即可(邮箱注册需要先把 SMTP 配好)。
三个部署提醒:
- 服务端 PDF 依赖无头 Chromium,镜像里已经带了,容器建议至少给 1GB 内存;
MINIWHO_MEDIA_SECRET要填一个固定值,否则每次重启后历史头像链接会失效;- 暴露到公网时在前面放一层 HTTPS 反向代理,并给管理员设一个强密码。
适合谁,不适合谁
适合:
- 正在找工作、不想为"导出 PDF"付费的人;
- 在意隐私,不想把完整履历和证件照传到陌生服务器的人;
- 有 NAS 或 VPS、喜欢自己托管服务的开发者;
- 想统一版式、把调好的模板分享给朋友或团队的人。
不太适合:
- 需要投递渠道、企业对接、ATS 打分报告的求职平台用户;
- 期待"一键生成几百套花哨模板"的人;
- 完全不想碰命令行、也不打算用官方站点的用户(自部署需要会一点 Docker)。
上手三步
- 打开 who.minims.cn ,在模板中心挑一套顺眼的版式(免登录可预览);
- 按模块把内容填进去,右侧实时看分页;
- 导出 PDF,或者生成一条带密码和有效期的分享链接。
简历这件事,本不该有会员墙。
站点:who.minims.cn 源码:github.com/cosolar/min…
自部署踩到坑、想要某套版式,或者只是想聊聊简历该怎么写,都欢迎在 GitHub 提 issue。