技术栈
- TanStack Start
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- Vite
- Bun
- Cloudflare
- Node.js
- Drizzle
- better-auth
- Stripe
- Creem
- Resend
和 agent 一起
说出你要什么,剩下的它来做。
- Claude Code
- Codex
- Cursor
- GitHub Copilot
- Windsurf
- opencode
- Zed
- Amp
第 1 步
一条命令跑起来
/setupbun installbun run db:migrate:localbun run devhttp://localhost:3000/第 2 步
支付让 agent 来接
/stripestripe prices create …Wrote ids to plans.tsstripe listencheckout → 200第 3 步
写歪了,测试会拦下
加一个发票功能/add-feature invoices✗ no permission checkAdded requirePermission✓ all tests pass
整个应用,就是这些。
- 应用本体
带会话守卫的外壳:主页、账号设置、套餐与额度。
- 计费
结账、按差价升级、周期末降级、付款记录。
- 管理后台
用户、订阅、订单、额度流水、审计与邮件日志。
- 营销站点
预渲染的落地页、定价、文档、博客与法务页,中英双语。








开箱内容
那些你反正都要写一遍的部分。
- 01
与支付商解耦的付费层
src/features/billing- Stripe
- Creem
- 同一种内部事件
- 升级立即生效,降级周期末生效
- 退款自动撤销升级
- 一个环境变量切换
- 02
无密码登录
src/features/auth- GitHub
- 邮件验证码登录
- 没有密码,也没有找回流程
- 会话存在 D1
- 03
按量计费的积分
src/features/credits- 按套餐每月发放
- 永不过期的加油包
- 不依赖事务的扣减
- 完整账本
- 04
一整套后台
src/routes/_app/admin- 指标与趋势
- 用户、订阅、订单
- 角色与权限
- 审计与邮件日志
- 后台 JSON API
- 05
内容与国际化
src/features/content- MDX 内容
- 博客与文档
- 构建期编译
- 中文 / EN
- 语言放在 URL 上
- 06
无聊但必要的那一半
.github/workflows/ci.yml- 类型检查与 lint
- 单元测试
- Playwright 端到端
- 有未执行迁移就拒绝部署
- CI 持续验证删除配方
- 07
其余的模块
src/features- R2 文件存储
- 事务邮件
- 应用内通知
- 应用内反馈
- 候补名单
- 推广返佣
- 数据分析
- API 密钥
用户怎么说
来自开发者的评价。
一个周末就把计费、积分和管理后台跑上线了,不需要的三个模块一个下午就删干净。
Maya Lindqvistmaya@example.com
本地到线上是同一套运行时,没有预发环境的意外。第一天就同时上线了中英文。
Priya Ramanpriya@example.com
管理 API 是被低估的功能。每周一让 agent 调一次,不写一行 SQL 就拿到流失报告。
Chen Yuchenyu@example.com
没想到最喜欢的是测试:退款和升降级在我动手之前就已经有覆盖了。
Daniel Okafordaniel@example.com
从 Creem 换到 Stripe 只改了一个环境变量。我最怕的 webhook 处理,早就写好了。
Tomás Herreratomas@example.com
读起来像是一个很仔细的人写完了全部代码。每条规矩都有注释讲为什么,改坏了就有测试报错。
Sophie Laurentsophie@example.com
定价
套餐已经写在仓库里了。
免费版
$0/月
每月 0 积分
每月约 0 次操作入门版
$0/月
每月 0 积分
每月约 0 次操作专业版
$0/月
每月 0 积分
每月约 0 次操作工作室版
$0/月
每月 0 积分
每月约 0 次操作
常见问题
克隆之前,大家通常会问这些。
该用 Stripe 还是 Creem?
都行,也可以同时用。Webhook 路由只做校验、去重,然后把载荷翻译成同一种内部事件;业务模块从不引入支付商的 SDK。PAYMENT_PROVIDER 决定新结账走谁,已有订阅则继续在它原来的通道上续费。
为什么选 Cloudflare Workers,而不是 Node 主机?
因为 D1 和 R2 是绑定,不是需要凭据的外部服务:没有连接串、没有连接池、没有 S3 密钥,而且本地开发跑的就是线上那个运行时。代价是 workerd 禁用了部分 Node 写法——模板已经绕开了真正要紧的那些,比如运行时 eval 的 MDX 方案。
「每个模块都可删除」具体是什么意思?
每个可选模块 = 一个目录 + 几行一句话的注册(schema 汇总里一行、处理器 import 一行、导航一行)。/delete-feature 技能知道每个模块的配方,而 CI 会在每个 PR 上把所有配方跑一遍,一旦配方过期就直接失败。
跑起来要多少钱?
小体量下几乎为零:Workers、D1 和 R2 的免费额度足以覆盖早期流量,唯一always-on 的成本是域名。邮件和支付按用量计费。
ShipKit