ME - 个人档案与自传工作台
🚀 6 步向导生成 SOUL.md 个人档案;档案同时驱动主页、简历与 GitHub 页;另附三个写作向导(自传 / 思维蒸馏 / 可靠人格)。
✨ 特性
- 🎯 分步向导 - 6 步填写基础信息、社交链接、技能、项目、工作经历与社区 ID
- 🔄 跨平台导入 - 从 GitHub 公开资料或已有
profile.json一键导入 - 📄 多格式导出 - SOUL.md / JSON / YAML,全部由同一份数据生成
- 🏠 真实渲染 - 主页、简历、GitHub 页读取
web/src/config/profile.json,代码里没有写死的占位数据(档案内容需自己填这个文件) - ✍️ 写作向导 - 自传(大纲来自
autobiography/tender-beast/)、思维蒸馏(导出 SKILL.md)、可靠人格画像,共用一个向导引擎 - 💾 纯本地 - 草稿保存在浏览器 localStorage,构建产物是静态文件,无后端
🚀 快速开始
前置要求见 web/package.json 的 engines:Node.js >= 22.12.0、npm >= 9.6.5。
站点代码全部在 web/ 下,所有 npm 命令都要先 cd web:
cd web
npm ci # 按 web/package-lock.json 安装
npm run dev # http://localhost:4321
web/.npmrc 把 registry 固定为 registry.npmjs.org:package-lock.json 的 resolved 全部指向它,而国内镜像未必同步了 Astro 7.x,会让 npm ci 报 404。
其他常用命令(都在 web/ 里执行):
| 命令 | 说明 |
|---|---|
npm run build |
构建到 web/dist/(15 个静态页面) |
npm run preview |
预览构建产物 |
npm test |
Vitest 单元测试 |
npm run lint / npm run typecheck |
ESLint / tsc |
npm run validate |
校验 web/src/config/profile.json,结构错误时退出码为 1 |
npm run update:profile |
命令行分步修改档案 |
npm run add:project |
追加一个项目条目 |
npm run skills |
生成/更新技能树(默认 dry-run,--write 落盘) |
npm run autobio -- --from <导出.md> |
把自传向导导出稿切回 autobiography/tender-beast/(默认 dry-run,--write 落盘,--force 才覆盖已有正文;--from 按当前工作目录解析,所以从 web/ 调用时传对相对路径) |
📖 页面一览
| 路径 | 内容 |
|---|---|
/ |
个人主页(Hero、统计、技能树、项目、经历时间线、社交链接) |
/wizard |
向导入口:SOUL.md 简介 |
/wizard/step-1 … /wizard/step-6 |
六步填写:基础信息 / 社交链接 / 技能 / 项目 / 工作经历 / 社区与完成 |
/wizard/complete |
完成页,导出 SOUL.md / JSON / YAML |
/preview |
用 localStorage 里的档案渲染主页效果 |
/resume |
简历视图,可下载 Markdown 与 HTML(内容与页面所见一致) |
/github |
GitHub 存在页,数据来自档案与 web/src/config/github.ts |
/autobiography |
自传向导,章节大纲来自 autobiography/tender-beast/*.md |
/distill |
思维蒸馏向导,导出 SKILL.md |
/reliable |
可靠人格画像向导(多 Tab,按维度组织) |
🧭 数据流
唯一数据源是 web/src/config/profile.json:
profile.json ──┬─→ 构建期:index / resume / github 页面
└─→ 运行期:向导写入 localStorage(me_wizard_draft) → 导出为 JSON/YAML/SOUL.md → 回填 profile.json
- 结构约束集中在
web/src/types/profile.ts,npm run validate复用它做校验。 - 站点级呈现参数(语言、默认主题)在
web/src/config/site.ts;GitHub 集成常量在web/src/config/github.ts。 - 向导题目等非个人数据在
web/src/data/wizards/;profile.json里的*_zh字段目前只有导入器写入、没有组件消费(页面实际渲染英文字段,见web/src/config/site.ts注释)。 results/存放本地调研产出,含真实账号足迹,已在.gitignore中,不入库。
📚 自传:autobiography/tender-beast/ 是大纲的唯一来源
《温柔的怪物》 的每个章节一个文件(born.md、teen.md、collage.md、first-job.md、second-job.md、third-job.md、alibaba.md、kids.md),文件名即章节 id,frontmatter 持有 order / title / title_zh / prompt:
- 网站在构建期用
import.meta.glob('../../../../autobiography/tender-beast/*.md', …)(web/src/data/wizards/autobiography.ts)读取,README.md的命题作为页面副标题;书稿在 Vite 项目根(web/)之外,因此astro.config.mjs里设了vite.server.fs.allow: ['..'],否则 dev server 会对?raw请求返回 403; web/scripts/autobiography.ts用 fs 读取同一批文件(路径常量集中在web/scripts/paths.ts);- 两边共用
web/src/utils/chapters.ts的解析与标题归一,因此浏览器导出的## Born能被切回autobiography/tender-beast/born.md,且不会覆盖你手写的正文(需要--force)。
autobiography/傻白甜语录/ 是另一本稿子(语录集),目前站点不消费它。
📓 journal 日记模块
journal/ 是核心个人数据库的日记模块:应用(CLI + Web + Tauri)与数据同仓,数据即纯 Markdown。
- 启动:
cd journal && pnpm dev(Web UI: http://localhost:5173;数据目录即仓库journal/自身) - 数据:
journal/entries/YYYY/MM/YYYY-MM-DD-HHmm-<id>.md,frontmatter 存 title/tags/created 等元数据 - 沉淀:贴给 AI 规范化写入,或
pnpm --filter @journal/cli journal import <文件或目录>批量导入外部 md - 版本管理:整个目录随仓库 git 同步(
.index/、.journal/trash/、.journal/config.toml已忽略)
📁 项目结构
根目录只有三类东西:代码在 web/,文档在 docs/,写作内容各自一个顶层目录。
me-database/
├── .github/workflows/ # ci.yml(lint/typecheck/test/build)与 deploy.yml(GitHub Pages),都在 working-directory: web 下运行
├── web/ # Astro 站点与 CLI,所有 npm 命令都在这里执行
│ ├── src/
│ │ ├── components/
│ │ │ ├── export/ # SoulExport
│ │ │ ├── homepage/ # Hero、Stats、SkillTree、ProjectShowcase、ExperienceTimeline、SocialLinks
│ │ │ ├── import/ # GitHubImport、FileImport
│ │ │ ├── layout/ # Nav、Footer、ThemeToggle
│ │ │ ├── resume/ # ResumeHeader、ResumeSection、ExperienceEntry、SkillsMatrix
│ │ │ ├── ui/ # Avatar、Badge、Button、Card、SectionHeader、Tag
│ │ │ └── wizard/ # ProgressBar、FormField、WizardNav
│ │ ├── config/ # profile.json(数据源)、site.ts、github.ts
│ │ ├── data/wizards/ # autobiography / distill / reliable 的题目与章节
│ │ ├── layouts/Layout.astro
│ │ ├── pages/ # 见上方页面一览
│ │ ├── scripts/ # 页面侧引擎:autobiography/distill/reliable-engine.ts
│ │ ├── styles/ # global.css、themes/、wizard-shared.css、qa-wizard.css
│ │ ├── types/profile.ts # Profile 类型 + 校验
│ │ └── utils/ # .ts:soul-generator、wizard-engine、storage、period、chapters、
│ │ # skill-level、theme、resume-generator、importers/、exporters/
│ ├── scripts/ # CLI:validate、update-profile、add-project、skills、autobiography、paths
│ ├── public/ # 静态资源
│ ├── packages/core/ # 已归档:不参与构建,无消费者
│ ├── astro.config.mjs # site / base '/' / build.format 'file' / compressHTML / vite.server.fs.allow
│ └── package.json package-lock.json .npmrc tsconfig.json vitest.config.ts eslint.config.js
├── autobiography/ # 书稿根
│ ├── tender-beast/ # 《温柔的怪物》章节稿(兼作 /autobiography 的大纲)
│ └── 傻白甜语录/ # 语录集(站点暂未消费)
├── journal/ # 日记模块:本地优先日记应用 + 纯 md 数据(entries/YYYY/MM/),独立 pnpm workspace
├── talks/ # 会话记录(评估、策略等长文)
├── docs/ # CONTRIBUTING.md + 现存设计与历史报告(docs/archive/)
├── results/ # 本地调研产出,已 gitignore
└── README.md LICENSE github-about.json
🛠️ 技术栈
- Astro 7 - 静态站点生成器,输出纯静态文件
- 原生 CSS - 无 CSS 框架;主题通过
web/src/styles/themes/*.css的自定义属性切换 - TypeScript + Vitest - 工具函数与 CLI 共享同一套类型
- LocalStorage - 客户端草稿与主题偏好持久化
- GitHub API - 公开资料导入(浏览器直连,无服务端密钥)
🌐 部署
仓库使用 GitHub Actions + GitHub Pages,配置已在 .github/workflows/deploy.yml:两条 workflow 都用 defaults.run.working-directory: web 跑 npm ci → npm run build,再 configure-pages → upload web/dist → deploy-pages。
推送到 main 即自动部署;也可在 Actions 里手动 workflow_dispatch。首次使用需在仓库 Settings → Pages 把 Source 设为 "GitHub Actions"。
astro.config.mjs 保持 base: '/'(站点部署在 https://allengaller.github.io/ 根路径)。只有改到子路径仓库(如 …/me/)时才需要同时设置 site 与 base,否则资源路径会 404。
🤝 贡献
📄 许可证
MIT License - 详见 LICENSE 文件