Repos / allengaller / me-database OWN

me-database

ME - 个人档案与自传工作台

ME - 个人档案与自传工作台

🚀 6 步向导生成 SOUL.md 个人档案;档案同时驱动主页、简历与 GitHub 页;另附三个写作向导(自传 / 思维蒸馏 / 可靠人格)。

Astro
Node
License

✨ 特性

  • 🎯 分步向导 - 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。

🤝 贡献

见 docs/CONTRIBUTING.md。

📄 许可证

MIT License - 详见 LICENSE 文件