
极简简历 MiniWho,Apache-2.0 开源。 不注册会员,不喂给算法,只帮你把真实做过的事,写得体面一点。
一、写简历,为什么总在跟工具较劲
在 Word 里对齐到深夜,改一段经历整页跟着跑版;换个模板网站,免费导出带水印,去水印要开会员,好看的版式还得单独付费。
更让人不踏实的是另外几件事:手机号、邮箱、完整工作经历传到了第三方服务器;AI 润色顺手把没做过的事也写了进去,你并不知道内容去了哪里;分享出去的链接收不回来,「隐藏手机号」可能只是前端用一层样式盖住;导出的 PDF 文字选不中、复制不了,投递系统读不出内容。
简历本来只该回答三个问题:我是谁、做过什么、做得怎样。工具不该抢戏,更不该拿内容做交换。
于是有了极简简历。
二、它是什么
一句话:开源、可自部署的在线简历工作台------结构化填写、A4 排版、可控分享,数据握在自己手里。
| 项目 | 极简简历 MiniWho |
| 核心能力 | 18 种结构化模块、60 套官方 A4 模板、服务端 PDF 导出、可控分享链接、五维规则诊断 |
| 前端 | Vue 3.5 + Vite 6 + Element Plus + Pinia |
| 后端 | Java 17 + Spring Boot 3.3 + Sa-Token + MyBatis-Plus + jsoup + PDFBox |
| 数据 | 默认 SQLite 零配置启动,一条 SPRING_PROFILES_ACTIVE=mysql 切到 MySQL 8 |
| 协议 | Apache-2.0(保留 LICENSE 与 NOTICE) |
| 仓库 | github.com/cosolar/min... |
| 在线演示 | who.minims.cn |
| 镜像 | minimscn/miniwho(官方实例当前 1.0.22) |

三、不是效果图:首页右边那张 A4 是真渲染出来的
自托管项目最容易被怀疑的是「截图很漂亮,实际用起来呢」。
who.minims.cn 是它长期运行的官方实例。首页右侧那张简历不是贴上去的示意图,而是同一份结构化内容、同一套 A4 模板实时渲染的结果;模板中心里每一张预览也都来自真实内容,不是占位图。首页那排数字很直白:60 套原创模板、18 个内容模块、5 个诊断维度、0 个付费项。

需要说清楚:这个站点只是项目的一个实例。代码在这里,你可以把它部署到自己的机器、自己的域名,简历数据和上传文件都落在自己的磁盘上。
四、几个「较真」的地方
1. 内容是内容,版式是版式
18 种结构化模块(工作经历、项目、技能、论文、作品集、自定义模块......)可以排序、隐藏、重命名;每个模块独立保存,服务端用 contentVersion 乐观锁,避免多标签页互相覆盖;刷新或误关页面还有本地草稿恢复。
简历正文以 JSON 存储,样式单独存。切换模板不会动内容------不用因为换了个好看的版式,把整份简历重抄一遍。
2. 模板包里根本没有 HTML 和 JS 的位置
模板包只表达「主题 token + 一段受约束的 CSS」。导入时服务端逐条规则重新生成 CSS,拒绝 @import、expression()、behavior、!important、外链 url() 等,属性名走白名单。
换句话说,社区分享的模板包在格式上就拿不到执行能力,也改不坏别人的简历。这是「允许大家做模板」的前提,不是事后补的安全补丁。
3. 屏幕、打印、PDF 用同一批分页断点
多页简历最怕「预览两页、打印三页」。项目按 A4 高度实算断点,画出虚线和「第 N 页 · 共 M 页」,屏幕预览、浏览器打印、服务端 PDF 共用同一批断点标记。
服务端 PDF 由本机 Chrome / Edge 无头打印同一套 A4 版面;打印完成后,PDFBox 只重写 ToUnicode 映射表,让文字可复制、可检索,版面一个像素不动。检测不到浏览器时,前端自动回落到「浏览器打印 → 另存为 PDF」,功能不中断。
4. 隐藏字段是「真的不发」
分享链接可以给 4--20 位密码、有效期、是否允许打印下载、查看次数,随时撤销。手机号、邮箱、城市、个人主页这些字段勾选隐藏后,在服务端就被移除,不会发送到访客浏览器------不是靠 CSS 遮一下。照片走 HMAC 签名的短时效地址。
这一条,是「可控分享」和「看起来可控」的区别。
5. 诊断不把简历送给外部 AI
五维固定规则评分:完整度 25、岗位匹配 25、表达质量 20、成果量化 15、格式规范 15,输出总分、维度明细和最多 12 条可执行的建议,建议可直接跳到对应模块修改。
结果可解释、可复现,内容不出服务器。简历这种东西,宁可少一点「智能」,也别多一个收件人。
6. 默认不开放注册,数据能整体带走
SMTP 邮箱注册、GitHub 登录、用户名注册三种方式默认全部关闭,自部署开箱就是一个不对外开放注册的私人实例。账号可 zip 导出全部数据,自助注销还有 7 天宽限期可撤销。
工程上还做了不少不显眼但必要的事:上传校验文件头而不信客户端声明、预览响应带 nosniff 与 CSP sandbox、头像走独立通道解码重编码、公开接口按 IP 限流、登录连错几次自动关掉密码入口。
7. 没有广告,也没有第三方统计
全部功能免费,无会员、无付费模板、无广告与第三方统计脚本。页脚的访问次数与在线人数由项目自己统计,只用一个前端本地生成的随机访客 id 去重,不采集 IP、UA 或浏览行为,也不发往任何外部服务。
五、谁会需要它
- 求职者:尤其是应届生和转行的人,把精力花在「做了什么、怎么做的、结果如何」,而不是对齐缩进。
- 学校就业中心 / 小团队:自己部署一套,模板启停、站点设置、用户管理都在后台,不用把学生简历交给外部平台。
- 对隐私敏感的场景:简历不经过第三方,分享链接能收回,隐藏字段真的不发。
- 开发者:想研究「结构化内容 → A4 分页 → 可检索 PDF」这条链路,或者基于 Apache-2.0 做二开。
六、三分钟跑起来
bash
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_DEMO_PASSWORD='改成强密码' \
-e MINIWHO_MEDIA_SECRET="$(openssl rand -hex 32)" \
--shm-size=512m \
minimscn/miniwho:latest
打开 http://localhost:8088。镜像内置 Chromium 与中文字体,服务端 PDF 开箱可用;MINIWHO_DB 指向卷内,删容器不丢数据。
想从源码跑(JDK 17+ / Maven 3.8+ / Node.js 18+):
bash
cd backend
MINIWHO_ADMIN_PASSWORD='换成你自己的强密码' mvn spring-boot:run
cd ../frontend
npm install && npm run dev
后端 http://localhost:8080,前端 http://localhost:5173,/api/health 不要求登录。
两个公开部署前的提醒:把
MINIWHO_SEED_DEMO设为false跳过演示账号与示例数据,并给站点配好 HTTPS。源码部署时服务端 PDF 需要本机有 Chrome / Edge / Chromium,没装也不会报错,只是自动回落到浏览器打印。
七、诚实的边界
README 里明确写了当前还没做的:Word / Markdown 导出、旧简历解析与 OCR、AI 润色与岗位匹配、跨部署的中央模板市场、版本历史与协同编辑、对象存储接入。
另外,模板骨架与分页契约目前仍由代码持有------这是分页一致性的前提,所以模板包能改的是主题 token 和作用域 CSS,不是 DOM 结构。
把边界写清楚,比把功能吹满更有用。
八、开源,欢迎来用,也欢迎来提
- 仓库:github.com/cosolar/min...
- 协议:Apache-2.0,可自用、修改、商用与再分发,保留 LICENSE / NOTICE 与署名即可
- 在线演示:who.minims.cn
比较欢迎这几类贡献:新的模板包和版式、不同部署环境里踩到的坑、真实投递场景下的分页与 PDF 问题,以及安全边界的审视。
如果你也在为一份简历跟工具较劲,先跑一个容器试试;如果觉得它替你省了事,去点个 Star 就是对开源项目最实在的支持。 顺手转给正在改简历的朋友,或者负责就业服务、在找自建方案的同事,也帮它多找到一个用得上的人。
名字里的 Mini 不是简陋,是克制:去掉多余的装饰,把注意力还给内容本身。简历该回答的只有「我是谁」,工具别抢戏。