KaisouMail
KaisouMail 是 Cloudflare temporary email platform,基于 Email Routing、Workers、D1、R2,以及 React + shadcn/ui control plane。README.md 和 README.zh-CN.md 同时存在,说明文档需要中英双语入口;公开 docs site 与 Storybook 也是产品交付面,而不只是开发辅助。
- Progressive web app
- README content contract
- shadcn/ui
- Playwright e2e
- Storybook component QA
- PR label release
- Release failure notification
- Quality gates
目录
技术栈
运行与交付
- CI 工作流
- ci-main.yml
- ci-pr.yml
- deploy-main.yml
- docs-pages.yml
- label-gate.yml
- notify-release-failure.yml
- release.yml
- 能力标记
- bun_lock
- github_actions
- package_json
依赖与工具
- package.json
- 开发依赖
- @biomejs/biome
- @types/node
- lefthook
- typescript
- 项目脚本
- brand:generate
- build
- build-docs-site
- build-storybook
配置与质量
- 配置文件
- .gitignore
- biome.json
- lefthook.yml
- package.json
- tsconfig.base.json
其他信息
- Package manager
bun@1.3.11
{
"ci_workflows": [
"ci-main.yml",
"ci-pr.yml",
"deploy-main.yml",
"docs-pages.yml",
"label-gate.yml",
"notify-release-failure.yml",
"release.yml"
],
"configs_root": [
".gitignore",
"biome.json",
"lefthook.yml",
"package.json",
"tsconfig.base.json"
],
"markers_present": [
"bun_lock",
"github_actions",
"package_json"
],
"package_json": {
"deps_dev": [
"@biomejs/biome",
"@types/node",
"lefthook",
"typescript"
],
"scripts": [
"brand:generate",
"build",
"build-docs-site",
"build-storybook",
"check",
"check:root",
"prepare",
"test",
"test:e2e",
"typecheck",
"version:write"
]
},
"package_manager": "bun@1.3.11"
}Purpose
KaisouMail 是 Cloudflare temporary email platform,基于 Email Routing、Workers、D1、R2,以及 React + shadcn/ui control plane。README.md 和 README.zh-CN.md 同时存在,说明文档需要中英双语入口;公开 docs site 与 Storybook 也是产品交付面,而不只是开发辅助。
Taxonomy
- Tags: Progressive web app, README content contract, shadcn/ui, Playwright e2e, Storybook component QA, PR label release, Release failure notification, Quality gates
- Why / evidence: 这些 tags 来自 checked-out repo 和 catalog record。主要证据包括
README.md、README.zh-CN.md、package.json、apps/web/package.json、apps/web/index.html、apps/web/public/site.webmanifest、apps/web/.storybook/、apps/web/playwright.config.ts、docs-site/package.json、docs-site/docs/zh/deployment-environment.md、scripts/generate-brand-assets.py。Topic token 的大小写以对应技术/工作流的官方写法为准;slug 只作为稳定 ID,不直接充当项目标题。
Repository map
apps/api-worker/承载 Cloudflare Worker/API 层;apps/web/承载 React control plane。packages/shared/保存跨 Worker/Web 的共享类型或逻辑。apps/web/public/site.webmanifest与apps/web/public/*.png定义 install metadata、theme color、maskable icons 和 app identity。docs-site/使用 Rspress 发布公开文档,并链接/storybook.html与/zh/storybook.html。apps/web/.storybook、apps/web/package.json和大量*.stories.tsx证明 Storybook 是公开组件/页面 QA surface。
Runtime and delivery
根 package.json 是 Bun workspace,check、typecheck、test、build、build-storybook 会跨 root、shared、api-worker、web、docs-site 运行。Cloudflare 部署由 deploy-main.yml 和 app 内 wrangler/config 负责;Playwright e2e 在 apps/web/playwright.config.ts 与 test:e2e 中体现。当前显式 PWA 证据集中在 apps/web/index.html 和 apps/web/public/site.webmanifest:这个 control plane 已经维护 display: standalone、scope: /、theme_color、maskable icons 与 apple-touch-icon,说明安装面是有意维护的;但当前 snapshot 还没有把 service worker/offline/update lifecycle 写成同等级 contract。
Architecture notes
架构由 Cloudflare 控制面分层:Email Routing 收邮件,Workers 处理 API/控制逻辑,D1 存 mailbox/domain/API key 等元数据,R2 存邮件对象,React UI 暴露 mailbox、domains、API keys、identity/passkeys 等操作。直接域名绑定、apex-only 约束和 zone cleanup 在 README 中是重要产品规则。
证据锚点:README.md。
Workflow and quality gates
.github/workflows/ci-main.yml、ci-pr.yml、deploy-main.yml、docs-pages.yml、label-gate.yml、release.yml、notify-release-failure.yml 拆分 PR、main、deploy、docs 和 release alert。因为 Cloudflare 资源是真实外部系统,release/deploy 失败通知比普通前端站更重要。
.github/workflows/ci-pr.yml 把 edited metadata 重验与普通 candidate 放入可取消的 per-PR concurrency group;重验不能取消当前 head 的 gate 是 GitHub Actions scheduling 的独立约束,不能混入 Cloudflare deploy 或 release 规则。
Reusable decisions
- 公开 docs 和 Storybook 作为产品 surface 一起发布,适合控制台类项目。
- 根 workspace 脚本聚合所有 package gate,避免只检查 Web 忽略 Worker。
- 双语 README + docs-site 导航符合中文优先、英文可读的受众。
- 若要把控制台作为 installable Web app 交付,最好像当前仓库这样把
site.webmanifest、apple-touch-icon和 maskable icons 一起纳入品牌资产生成链,而不是手工散落维护。 - README 的产品入口与安装身份应分开维护:
README.md/README.zh-CN.md负责产品说明,site.webmanifest和生成的 icon 资产负责 install surface;不能把 maskable 或 Apple touch 外壳直接当作 README Logo contract。
Risks and open questions
- Cloudflare zone discovery/direct bind/delete 是高风险操作,项目记忆要保留 apex-only 与 cleanup 语义。
- Storybook 是公开资产,破坏路径会影响 docs-site。
- D1/R2/Email Routing 权限和环境变量需要部署证据,不应只看本地 build。
- 当前 install metadata 已经存在,但 service worker / offline / update UX 没有同等强度的公开证据;后续若对外宣称“PWA 可离线使用”,需要先补齐这部分 contract。
Evidence index
README.mdREADME.zh-CN.mdpackage.jsonapps/web/package.jsonapps/web/index.htmlapps/web/public/site.webmanifestapps/web/.storybook/apps/web/playwright.config.tsscripts/generate-brand-assets.pydocs-site/package.jsondocs-site/docs/zh/deployment-environment.md.github/workflows/ci-main.yml.github/workflows/deploy-main.yml.github/workflows/docs-pages.yml.github/workflows/notify-release-failure.yml
相关内容
GitHub Actions scheduling
主题GitHub Actions scheduling 表示仓库把 workflow 触发事件、并发 namespace、cancel-in-progress 和 required check 可见性组织成可审计的运行调度合同。目标不是让每个事件只跑一次,而是让当前 PR head 获得正确且可观察的 gate,同时不让无关 PR、main、deploy 或手工任务被同一个并发键误取消。
Playwright e2e
主题Playwright e2e 指仓库把真实浏览器里的关键用户流程当成正式质量门禁,而不是“顺手写了几条页面脚本”。它强调的是产品行为验证:路由、认证、交互链路、浏览器 API、嵌入式控制台或多 runtime 页面组合,必须在接近真实使用路径的浏览器环境里被证明可用(projects/blog-26.md、projects/proxy-broker.md、projects/octo-rill.
PR label release
主题PR label release 是逐 PR 的产品发布协议:PR labels 只提供经过 gate 验证的发布操作与发布阶段;最高的合格 final vX.Y.Z Git release tag 是唯一数字版本基线,VERSION 只锁定 trusted preparation 已决定的精确产品版本。label 不能计算、覆盖或为版本提供 fallback。
Progressive web app
主题Progressive web app 在这套 playbook 里不是“网页顺手带个 manifest”的统称,而是“把一个 Web surface 当成可安装应用去维护”的工程模式。
Project docs site
主题Project docs site 指项目在工程仓库内维护一个独立的 web 文档站点,通常以 docs-site/、docs-pages.yml 或等价 publish workflow、docs:build / build-docs-site、DOCS_PORT 等入口体现。
Quality gates
主题Quality gates 表示仓库把“什么叫可以合并、什么叫可以发布”写成了显式、可审计的契约,并通过本地脚本、CI workflows、review/signature policy、GitHub required checks 或同类机制把它执行出来。它关注的是 gate contract,而不是某一门具体技术。 这个 Topic 用来回答“仓库怎样防止低质量或不完整的改动穿过默认分支”。
React app
主题React app 标记 React 是主要用户界面、管理台、控制台或嵌入式操作面 runtime。这里关心的是 route、component tree、client state、表单流、dashboard 交互和前端构建后的真实运行边界,而不是“项目依赖里有 React”。 这个 Topic 用来回答“用户实际操作的是不是一个 React runtime,以及它在系统里承担什么职责”。
README content contract
主题README content contract 是面向项目入口文档的可审查规范:README 先让目标读者理解产品、边界和下一步,再提供可复现的 Quick Start、集成 contract、交付语义、文档真相源、许可证入口、有限产品 preview,以及有来源的 Logo 和 Badge 入口。
Release failure notification
主题Release failure notification 指一个仓库为所有“预期成功但最终以 failure 结束”的交付 workflow 建立显式、可审查的告警路径。范围包括 release、deploy、CI、Docs Pages 和 required gate,但必须由 checked-in allowlist 声明;成功、skipped、cancelled 和通知 workflow 自身不属于通知条件。
shadcn/ui
主题shadcn/ui 表示项目采用官方 shadcn/ui 风格的 checked-in component layer:components.json、@/components/ui aliases、Radix primitives、Tailwind utilities、class-variance-authority、tailwind-merge、clsx 和 Lucide icons 共同构成组件约定。
Storybook accessibility
主题Storybook accessibility 表示 Storybook 不只是组件展示,还明确引入 a11y audit 能力,通常是 @storybook/addon-a11y 或等价的 browser-backed Axe sweep。它关注 story-level 可访问性信号,例如对比度、ARIA 基础错误、表单语义和交互状态,而不是泛化的 Storybook 文档能力。
Storybook component QA
主题Storybook component QA 表示仓库把 Storybook 当作组件级文档、状态枚举、视觉检查或 interaction smoke 的稳定入口。它不等同于 Storybook accessibility:只有项目明确引入 a11y addon 或等价 Axe sweep 时,才同时打 accessibility Topic。这个拆分用于避免“只要有 Storybook 就叫 a11y”的误判。
TypeScript web
主题TypeScript web 表示项目把 TypeScript 作为一个或多个 Web surface 的主语言,并围绕它建立 workspace scripts、typecheck、bundler、lint/format、env contract 和前端构建门禁。这里的主语不是“仓库里出现了 .ts 文件”,而是 TypeScript 已经决定了维护者怎样启动、构建、校验和交付实际 Web surface。