从单页实验到七仓生态:DigitalScopeLab 的构建复盘
一个人的生态实验:七个月、七个独立仓库、五条产品线与一份始终在场的工程纪律。
☰ 本文目录(5 节)
DigitalScopeLab 起初只是一个问题:能不能用一套自有的、长期归属自己的站点集群,承载写作、制图与信息情报这几件我长期要做的事。七个月后,它变成了七个独立 Git 仓库、五条产品线、一个统一后台和一个统一 API 的生态。这篇复盘记录这条路径上的关键决策与代价。
起点:为什么不是一个大仓库#
最初的 Diagram 产品(当时的名字是 platform)是一个 pnpm monorepo,编辑器、落地页、后台、API 挤在同一棵目录树里。monorepo 的便利是真实的:一次提交可以同时改前后端,workspace 协议让包之间直接源码消费。
但问题随规模到来:仓库越来越重,克隆与 CI 越来越慢;不同产品的发布节奏被迫同步;一次误改可能波及无关产品。于是有了仓拆分决策(ADR-026):按产品边界切成独立仓库——main、blog、diagram、admin、api 各自持有自己的历史与发布线。
拆分的代价必须诚实地说:跨仓库共享代码不能再靠 workspace 了。我们的答案是「所有者 + 受控镜像」机制(ADR-027)——共享包(types、api-client、ui、diagram-core)只在所有者仓库修改,同一变更集内同步镜像到消费仓,再用一个校验脚本逐字比对。这条路纪律成本不低,但换来的是每个仓库都可以独立理解、独立部署、独立回滚。
五条产品线与一份语言政策#
生态现在的形态:
- Main(Vue 3 + vite-ssg):品牌总站,中英双语完整对应;
- Blog(Next.js 16):技术出版,双语站点框架 + 内容级语言独立——不机器假翻译,一篇中文文章的英文形态由人工翻译后独立发布;
- Diagram(Vite 双应用):十种软件工程图的在线制图,SQL/Java 确定性生成 + 手绘精修;
- Intelligence(Next.js + Express 采集服务):全球科技情报,RSS 多源采集、AI 富化、每日简报;
- Tools(Vue 3):八个浏览器本地执行的开发者小工具。
语言政策在一开始就定死:公开站双语完整对应,内部后台只做中文——不为内部工具制造半成品英文。这条政策后来在双语博客的设计里救了我们:当「中文发布自动开英文译稿草稿」上线时,边界依然清晰——机器可以复制与排队,翻译必须由人完成。
工程纪律:写下来的才算数#
回看这七个月,最有价值的不是任何单一功能,而是一组被强制执行的规矩:
- 事实源文档先行。域名版图、部署拓扑、产品注册表、架构决策记录(ADR 001–027)全部落档,任何重大调整先出计划再动手。后来无数次的「这个决定当时为什么这么做」都能在 ADR 里找到答案而不是靠回忆。
- 每个仓库一条 verify 门禁。format / lint / typecheck / test / build 五关全绿才算完成。上线前的全生态审计跑出七仓全部绿——这不是运气,是门禁逼出来的习惯。
- 安全默认值 fail-closed。开发用的默认密钥在生产环境直接拒绝启动;会话令牌落库只存哈希;密码用 argon2id。上线前的安全审计里,全生态没有发现一处明文密钥或弱加密——因为这些从来不是可选项。
- 禁止假能力。未上线的产品在注册表里如实标注,生产 UI 不出现虚假的「已上线」。诚实本身就是一种工程资产。
代价与教训#
并非一切都顺。有几条教训值得记下:
仓拆分不要在没有契约校验时动手。早期一次共享包改动漏同步镜像,两个仓库静默漂移了数日才被发现。此后校验脚本进入必跑清单,问题再未复发——工具化的纪律才是纪律。
内容与代码要分家。Blog 早期把内容当配置塞在代码仓里,后来引入双源内容仓库(markdown 为开发回退与备份,MySQL 为生产源),发布链才真正闭合。
本地评审基建值得投资。一件双击启动的脚本拉起全部九个服务、自动改写跨站链接为 localhost、退出即回收端口——它让人工查验从「懒得测」变成「随手测」,多轮视觉问题都因此在前置环节暴露。
动效是内容,不是糖。早期页面清一色「上浮淡入」,被一眼看穿是模板货。后来把入场动效按场景分化(模糊聚焦给标题、交替滑入给列表、缩放给视觉件),页面才有了自己的节奏感。
下一步#
生态的第一个生产版本即将部署:八个域名、七个仓库、五条产品线,加上一份从第一天就开始积累的文档与决策史。对一个人的项目而言,规模本身不是成就;让每个部分都小到可以完全理解,才是。
这条路径还会继续——Tools 会增加更多本地工具,Intelligence 的采集源会继续扩充,Blog 会承载更多写作。而这份复盘本身,就是给未来读者的第一份路标。
评论
还没有评论,来说点什么吧。