数据截至 2026 年 10 月。
概览
richbay.org 是一个基于各国政府官方来源的资料网站,用来比较国家、城市、签证、大学和生活成本。从 2026 年 5 月 3 日的空仓库开始,大约五个半月后达到下面的规模:
- 国家中心
- 已发布 51 个(目录共 100 个国家/地区)
- 城市页
- 405 个,其中 41 篇深度生活指南
- 签证路线
- 64 条
- 大学
- 160 个详情页,收录 3,385 所
- 监控的官方来源
- 109 个,覆盖 55 个国家/地区
- 语言
- 英文、中文、日文
- sitemap 中的 URL
- 约 2,800 个
- 提交
- 约 2,400 次,约 290 个版本
几乎所有代码和内容都由 AI 编程智能体编写,由一个小团队在开发会话中指导完成。这种做法常被叫作 vibe coding。但让它真正跑起来的不是"感觉",而是写成文字的规则、会拒绝已知错误上线的自动检查,以及"看线上页面,而不是相信改动"的习惯。
分工
团队 决定做什么、不做什么,制定规则,并抽查内容和决策。
AI 编程智能体 编写代码和内容,运行测试和检查,部署,核对线上网站,并把学到的东西写下来留给下一次会话。
AI 智能体不会记得之前的会话。所有经验都必须写进文件,由下一次会话先读。
技术栈
| 层 | 选择 | 原因 |
|---|---|---|
| 框架 | Astro 5,绝大多数页面预渲染 | 以静态页为主,外加少量服务端接口 |
| 语言 | 全部 TypeScript | 类型检查是 AI 代码的第一位审查者 |
| 样式 | Tailwind CSS 4 | 便于智能体保持风格一致 |
| 托管 | Cloudflare Workers + Static Assets | 静态页和服务端路由一次部署 |
| 数据库 | Cloudflare D1 (SQLite) | 用户保存的内容、候补名单、维护计划 |
| CI/CD | GitHub Actions | 每次推送到生产分支自动部署;每日维护 |
| 测试 | Vitest |
架构
- 各国政府官方来源
- 仓库中的类型化数据文件
- 构建 + 检查
- 预渲染页面 · en / zh / ja
- Cloudflare Worker
- 每日维护任务 → 更新数据、检查链接
- 数据文件 → 单向同步 → Cloudflare D1 → Worker
数据放在代码里,而不是 CMS 里。所有发布的事实(国家、城市、签证路线、税率、节假日、大学)都保存在仓库中的 TypeScript 类型化文件里,这是唯一的数据源,数据库只接收单向副本。每一次事实修改都是一个可审查的 diff,很适合 AI 智能体工作。每个数据点都能追溯到登记过的来源,页面链接到官方来源,而不是自称官方。
以国家为中心。每个国家中心有五大支柱:生活、工作、移民、教育、商业。新增国家或主题只需追加数据,路由、导航和 sitemap 会自动跟上,不用改布局代码。
多语言。英文在根路径,中文和日文分别在 /zh/ 和 /ja/。所有翻译文本都按语言键存储,新增语言只是加一个键,不需要改代码结构。
工作流程
- 在开发分支上工作
- 测试和检查通过
- 合并到生产分支
- 自动部署
- 检查线上页面
- 每次部署都会运行类型检查、翻译审计、数据校验,以及一组针对性的质量检查。每一项检查都是在真实出过错之后才加上的。任何一项不通过,就不会上线。
- 部署后,智能体会确认线上运行的版本正是自己推送的那个。推送成功不等于部署成功。
- 每日维护无需人工。定时任务会更新汇率和公共节假日、检查外链、重新生成目录。如果生成的文件突然大幅变小、没通过合理性检查,或导致类型检查失败,改动会被撤回,而不是提交。
踩过的坑,以及我们的改变
这是最有用的部分,每一条都变成了一条规则或一项检查。
- 超出托管平台的限制。 网站最初所在的平台对单次部署的文件数有上限,三种语言加上几百个实体很快超出,于是迁到了 Workers。
- 从未生效的重定向。 写在框架中间件里的重定向,在预渲染页面上悄无声息地失效了。现在重定向放在 CDN 层。
- 页面返回 404,而不是按需渲染。 预渲染路由只服务构建时列出的路径。"服务器会兜底"是一个错误的假设。
- 缺失的翻译通过了类型检查。 一个类型过宽的数据表允许缺少某种语言,结果部分页面在其他语言下显示了英文。更严格的类型和一个检测脚本解决了这个问题。
- 被翻译的键。 机器翻译曾把数据标识符和正文一起翻译,导致内容悄悄消失。现在有一项检查会比较各语言的结构是否一致。
- 检查全绿,页面却是坏的。 检查通过不代表页面看起来正确。现在的规则是:每次改动后都看一眼渲染出来的页面。
- 有来源链接,不等于有来源。 我们随机抽了 30 个数值,逐一核对旁边的来源链接。能打开的 22 个链接里,没有一个和数值矛盾,但有 9 个指向机构首页,在那里找不到这个数值。读者点开"来源"却看不到数字,就是被辜负了。我们的方法说明页现在如实写明了这些链接能做到哪一步。
- 页面更多,流量没有更多。 对年轻的网站来说,瓶颈是权威度,不是页数。我们不再为了数量而加页面。
给今天起步的人的建议
- 从第一天起就把规则写下来。 智能体会忘记,文件不会。
- 把每个重复出现的错误变成自动检查,而不是一句提醒。
- 把数据放进有版本控制的类型化文件。 diff 是最便宜的审查方式。
- 核对线上网站,而不是推送结果。 静默失败才是常态。
- 由人来决定不做什么。 智能体什么都乐意做。