ENZH

Day 2-4:三天 111 次 Commit

三天。111 次 commit。敢说其中一半 commit message 都是"fix css"。

一只炸毛的猫咪被CSS文件和代码碎片的旋风包围一只炸毛的猫咪被CSS文件和代码碎片的旋风包围

第 2 天:CSS 地狱 — 38 次 Commit

Tailwind 配置统一到 packages/config 之后,每个依赖自定义 design token 的应用全崩。

不是明显的红色报错页面——是微妙、抓狂的"背景颜色好像差一丢丢""按钮小 2px"。开发者最怕的 bug 就是这种:盯着屏幕觉得"不太对",但说不清哪不对。

问题出在哪?每个应用进化出自有 CSS 变量命名空间。八字用 --bz-* 系列,塔罗用 --tarot-*,占星用 --zx-*

统一 Tailwind 配置意味着这些共存不冲突,每个应用还得保持视觉风格。

38 次 commit,每次修之前漏掉 CSS 问题。

好消息,过程中顺手提取 4 个新共享包:PDF 生成、聊天记录、共享聊天 UI、通用 React hooks。

三个应用各有自己 ChatPanel 组件,实现略有不同。三个应用各有 PDF 导出代码,用同样 html2canvas 流程。提取到 packages/uipackages/pdf,一处修复,处处生效。

修 CSS 是还债。提取共享包才攒钱。

第 3 天:第 6 个应用和微信坑王 — 17 次 Commit

新增 MBTI 人格测试成第六个应用。这次集成轻松多——从第一天知道要进 monorepo,一开始就用共享包。

更有意思挑战是微信浏览器。

做过中国互联网开发的都知道,微信内置浏览器是个坑王:有限 getUserMedia 支持、不一样 OAuth 流程要求、受限 window.open 行为。UA 嗅探得检查 Android、iOS 和桌面端各版本 MicroMessenger,还有企业微信变体(wxwork)。

后来 PR #41 又暴露新问题——某些微信版本嵌入 UA 字符串跟文档写的不一样。又加固一轮。

在中国做 App,微信这关躲不掉。必须过。

第 4 天:大日子 — 56 次 Commit

统一 API 包:整个项目最大架构胜利

packages/api 标准化所有应用和 AI 模型通信方式。

之前状态?每个应用自己流式路由,约 80 行样板代码搞 ReadableStream 设置、SSE 事件格式化、错误处理和积分扣减。同样逻辑,重复 15 次以上。

之后:createAIStreamResponse() ——一个工具函数,配置对象带生命周期钩子:

  • initEvents — AI 流式开始前发初始数据

  • onComplete — 保存结果、记录费用

  • onError — 优雅处理失败

  • refundCreditsOnError — 流中断自动退还积分

52 条 API 路由迁移到模式。Claude Code 看一个示例,应用了其余全部。实际耗时约一小时,手动至少一整天。

定义一次模式,AI 铺满全局。monorepo + AI 开发威力。

内容过滤器 v1

同一天搞定:基于 DFA 敏感词过滤器。

做中国市场必须要有。玄学内容天然含会触发简单关键词过滤词——算命、破财、桃花劫。标准过滤器会把一半正常内容干掉。

DFA 做法是从词表构建 trie 树,逐字符扫描文本。第一版先最简单——含敏感词整条消息屏蔽。精细化后面迭代。

GDPR 和法律合规

中英双语服务条款和隐私政策。不光鲜,必须做。后来 PR #83 又全面重写,分独立中文版英文版,加中国 AI 监管合规条款。

那个瞬间

大约晚上 11 点,本地同时启动 6 个应用,用同一账号登录,看积分各标签页之间实时同步。

一次登录。一个积分余额。六个产品。

跑起来了。

三天前还是 5 个独立应用。现在是一个平台了。


© Xingfan Xia 2024 - 2026 · CC BY-NC 4.0