这是本站的第一篇开发日志,记录 2026-10-18 完成的 M1(基础工程)阶段。
范围
首个公开版本是完整网站:博客、双语简历、项目展示、公开反馈与讨论、开发进度、更新记录、登录/免登录、站内与邮件通知、站长管理,以及 Civitas 展示与试玩入口。M1 只做地基,不铺内容。
已落地
- 工程:Astro(静态正文 + React 岛屿)+ Cloudflare Pages/Workers,D1 数据库,R2 预留。
- 设计系统:设计令牌、深浅主题、按钮/表单/状态/对话框/列表组件,移动优先与键盘可达。
- 中英双语:词典 + locale 路由(中文在
/,英文在/en/),构建时阻断式缺项检查。 - API 契约:统一错误码、requestId、异常不透传内部细节、JSON 大小上限与字段校验,11 项单元测试。
- 数据:D1 迁移(项目/模块字典、限流表),预览与生产库隔离,本地幂等重放验证。
- 安全基线:安全响应头、
/api/*JSON 404 兜底、公开产物秘密扫描、CI 工作流。 - 游客与限流:HttpOnly 游客 Cookie + D1 固定窗口限流,本地实测第 6 次请求起返回 429。
踩坑记录
- Astro 模板里属性表达式内嵌 JSX、frontmatter 里写 JSX,都会构建失败。
- Node 24 直接跑 TypeScript 测试不支持
as const。 - 限流验收几次”不生效”,最后发现全是测试客户端问题:PowerShell 的
-Headers不发 Cookie 头、curl -b 文件需要 Netscape 格式。服务端自始至终是对的——先怀疑客户端,再怀疑服务端。 - 本地 D1 验证时,
wrangler pages dev --d1旗标和配置绑定不是同一个本地库。
下一步
M2 铺内容:首页三模式、简历页、博客管线、项目页与 Civitas 展示页。模组正式资料与云端账号就绪后,反馈闭环(M3)才能真实跑通。
讨论
…