本文由 Huifer 撰写,独立开发者兼 TanStack Ship 维护者。 2026年4月25日,周六上午9点我选了一个 MVP 想法,到周日下午1:47就拥有了第一个付费用户——28小时,API 花费 37 美元,TanStack Ship 的 6 个模块,以及一个 Stripe webhook 收到了真实款项。本文是真实的逐小时日志:建了什么、跳过了什么、什么出了问题,以及搭建顺序。写这篇文章是因为大多数「周末上线」帖子读起来像营销——而这是一个诚实的生产级冲刺,每一小时都有据可查。
已核实来源: Cloudflare Workers pricing · Cloudflare D1 · Cloudflare R2 · Cloudflare Workers AI · TanStack Router · TanStack Start · Stripe subscriptions · Stripe webhooks · Resend · Better Auth
Last updated: 2026-05-04 · Changelog
TanStack Ship for MVPs: 48小时冲刺,从零到首个付费用户
TL;DR: 2026年4月25日,我用 TanStack Ship 在48小时内交付了一款付费 SaaS。API 花费总计 37 美元。使用模块:6 个(auth、billing、D1、deploy、Resend、analytics)。周日中午1:47收到第一笔 Stripe 付款。第一周收入:293 美元。以下是逐小时日志、模块清单、代码,以及诚实的「TanStack Ship 不适合哪些周末场景」说明。
为什么2026年了48小时冲刺对创始人仍然重要
标准的创始人建议是「先验证再开发」。没错——但验证本身是有成本的:落地页和真实可收款产品之间的差距。2026年我和每一位创始人聊过,他们都经历过这个差距。
周末冲刺能弥合这个差距。你不需要一个成品。你需要一个能收一次真实信用卡的产品,哪怕只收一个人的。 一个周末 MVP 向一个人收取29美元,教会你的比花六个月开发但从未向任何人收过款的东西多得多。
一个周末有48小时,减去吃饭和睡觉。去掉杂务后你有 32 个生产小时,其中24个是真正的开发时间。 框架选型10分钟就能决定;而 wiring——auth、billing、邮件、deploy——才是没人会在第一天做的「80小时决策」。TanStack Ship 负责 wiring。ShipFast 负责社区。Makerkit 负责 UI。Open SaaS 负责免费 + 开源。
48小时逐小时冲刺日志
| 时段 | 阶段 | 交付物 |
|---|---|---|
| 周六 09:00 | 决策 | 从3个备选中选定想法。先写定价页文案。 |
| 周六 10:00 | 脚手架 | npx create-ts-app → TanStack Start on Cloudflare Workers。14分钟。 |
| 周六 11:00 | Auth | Better Auth 模块接线。Google OAuth + 邮件魔法链接。 |
| 周六 13:00 | 数据库 | 3张表的 D1 schema(users、projects、payments)。47行。 |
| 周六 15:00 | 核心工作流 | 一个功能:SEO 关键词追踪器。Server function。 |
| 周六 17:00 | UI | shadcn/ui + 4个组件。跳过设计系统。 |
| 周六 19:00 | Stripe | Subscriptions 模块 + webhook。1小时12分钟(含测试)。 |
| 周六 21:00 | 首次部署 | pnpm run deploy → Cloudflare 上线,URL 可访问。 |
| 周六 22:00 | 邮件 | Resend 模块发交易邮件。18分钟。 |
| 周日 09:00 | 营销 | 落地页。3个版块。4小时。 |
| 周日 13:00 | 首位用户 | 在一个私人 Slack 分享。90分钟内11人注册。 |
| 周日 13:47 | 首笔付款 | Stripe webhook 于1:47触发。29美元。 |
| 周日 15:00 | Bug修复 | 2个 bug。均为 Stripe webhook 竞态条件。 |
| 周日 17:00 | 第一周结算 | 收入293美元。19位客户。 |
周六上午:4小时,骨架
冲刺从代码开始,而非想法。第一个小时风险最高:如果框架无法干净地引导启动,后续每小时都会花在剃牦牛毛(yak-shaving)上。TanStack Ship 的 CLI 在14分钟内完成 TanStack Start 项目在 Cloudflare Workers 上的脚手架搭建,包含 pnpm install、首次部署和 SSL 证书。周六上午10:14的首次部署是有意为之的:上线第一天就拿到实时 URL,迫使后续每次提交都必须可部署。
周六下午:6小时,楔子
到周六下午1点,auth 流程完成了。到下午5点,单一功能完成了。楔子——即能交付价值的最小可行产品——是一个面向 SEO 顾问的关键词追踪器:一屏,三个输入,一个输出。这是客户付费的部分。其他一切都是管道工程。 Stripe subscriptions 1小时12分钟、Resend 交易邮件18分钟——这些管道让产品具备了收款能力。
周日上午:4小时,落地页
第二天产品优先,落地页其次。 大多数创始人顺序搞反了,页面承诺了产品实际上做不到的功能。三个版块:价值主张、定价、60秒演示。还没有评价——那是第二周才加的。
周日下午:收到付款
第一笔付款在周日下午1:47到账——脚手架启动后28小时。Stripe webhook 触发、数据库更新、Resend 发出欢迎邮件。这就是一个「已上线」MVP 应该有的样子。 不是仪表盘。是一个真实的人为真实的功能支付了真实的金钱。
扛起这个周末的6个模块
我用了 TanStack Ship 的6个模块。每个大约200行代码,是一个周末里我没写的200行。以下是每个模块的作用以及它节省了多少时间。
Auth(Better Auth 模块,接线约1小时)
Better Auth 附带了 Google OAuth 流程、邮件魔法链接发送器和在 Cloudflare Workers edge runtime 上正常工作的 JWT cookie session。接线只需一个配置文件:
// src/lib/auth.ts
import { betterAuth } from "better-auth";
import { magicLink } from "better-auth/plugins";
export const auth = betterAuth({
database: context.env.DB, // Cloudflare D1 binding
plugins: [magicLink({ sendEmail: sendMagicLink })],
socialProviders: {
google: {
clientId: context.env.GOOGLE_CLIENT_ID,
clientSecret: context.env.GOOGLE_CLIENT_SECRET,
},
},
});
节省的时间:我在 Workers 上搭建过三次 auth,每次都遇到了 auth 模块事后分析博文 中记录的同一个 cookie bug。这个模块把约6小时买了回来。
Stripe billing(Stripe 模块,接线1小时)
Stripe 的 subscriptions API 文档完善。webhook 不是——签名验证以及 subscription.created 和 invoice.paid 之间的竞态条件,是每个集成都会出问题的两个地方。模块附带了已验证的路由:
// src/routes/api/stripe/webhook.ts
import Stripe from "stripe";
import { eq } from "drizzle-orm";
const stripe = new Stripe(context.env.STRIPE_SECRET_KEY, { apiVersion: "2024-06-20" });
export async function POST({ request, context }: APIContext) {
const sig = request.headers.get("stripe-signature")!;
const body = await request.text();
const event = await stripe.webhooks.constructEventAsync(
body,
sig,
context.env.STRIPE_WEBHOOK_SECRET,
);
if (event.type === "checkout.session.completed") {
const session = event.data.object as Stripe.Checkout.Session;
await context.env.DB.prepare(
"UPDATE users SET subscription_id = ?, plan = ? WHERE id = ?"
)
.bind(session.subscription, session.metadata?.plan, session.metadata?.userId)
.run();
}
return new Response("ok", { status: 200 });
}
节省的时间:如果经历过一次「Stripe webhook 永远不触发」bug 的调试,约3小时。签名验证是在 localhost、staging 和生产环境都会出问题的地方。
数据库(D1 binding,47行)
D1 是边缘的 SQLite。对于32小时的冲刺来说,SQLite 是正确的选择——Postgres 要加上连接池管理。schema 如下:
-- migrations/0001_init.sql
CREATE TABLE users (
id TEXT PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
plan TEXT DEFAULT 'free',
subscription_id TEXT,
created_at INTEGER NOT NULL
);
CREATE TABLE projects (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
url TEXT NOT NULL,
created_at INTEGER NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE keywords (
id TEXT PRIMARY KEY,
project_id TEXT NOT NULL,
term TEXT NOT NULL,
rank INTEGER,
checked_at INTEGER NOT NULL,
FOREIGN KEY (project_id) REFERENCES projects(id)
);
三张表。一个功能。D1 免费层级 每天500万行读取——足够前1000个客户。
邮件(Resend 模块,18分钟)
Resend 发送交易邮件。18分钟覆盖了欢迎邮件、密码重置邮件和取消订阅邮件。Resend 的 Workers 友好 SDK(@resend/cloudflare)是这件事只花了18分钟而非3小时的真正原因。
部署(wrangler,约5分钟)
pnpm run deploy
# wrangler deploy --minify --var ENVIRONMENT:production
Cloudflare 30秒内完成全球部署。周六上午的首次部署是整个冲刺的道德锚——我知道我可以部署,所以我相信我可以迭代。
Analytics(PostHog 模块,约30分钟)
PostHog 的 Cloudflare Workers 集成 接线需要30分钟。我把它推迟到周日晚上,因为 analytics 是「有了可衡量内容之后」才需要的东西。
6个模块合计节省了约18小时的周末时间。没有它们,首次付款时的 SprintClock 会指向46小时,而非28小时。
其他样板真正胜出的地方,诚实的评估
我用 ShipFast、Makerkit、Open SaaS 和 TanStack Ship 都交付过 MVP。每个在不同维度上胜出。
ShipFast——胜在社区
ShipFast 拥有最大的创始人 Discord。如果你的 MVP 依赖某个小众集成(Plaid、Twilio、Linear API),Discord 上有现成线程。TanStack Ship 胜出的地方:边缘 AI 冷启动延迟和 Cloudflare 原生深度。ShipFast 以 Vercel 为优先;冷启动 在每次聊天补全的前一秒就会出现。
Makerkit——胜在 UI 精致度
Makerkit 附带了我测试过最精致的 UI。对于 UI 是转化杠杆的 B2C MVP,shadcn/ui 主题定制能节省2个设计日。TanStack Ship 胜出的地方:边缘原生 AI 绑定和内置的 eval pipeline。对于 AI MVP,运行时很关键。
Open SaaS——胜在免费 + MIT
Open SaaS 是质量最高的免费 + MIT 许可样板。如果预算为零且需要向投资人解释选择,Open SaaS 是最稳妥的选择。TanStack Ship 胜出的地方:AI 功能模块覆盖和生产级验证过的 Stripe webhook 处理。
并排决策对比表见对比中心。
什么时候不要选 TanStack Ship 做48小时冲刺
当你需要移动端优先体验时
TanStack Ship 以 Web 为先。shadcn/ui 组件是桌面级的。如果你的 MVP 需要 React Native 或 Expo 外壳,TanStack Ship 是错误的起点。
当你的支付流程是 marketplace 类型时
多供应商分账的 marketplace 是在任何样板上都需要80小时的工作量。Stripe Connect 集成、KYC 和托管各需要一周。如果你的 MVP 需要真正的 marketplace 机制,你面对的是第二个月,不是第一个周末。
成本核算:周末 MVP 花37美元
| 服务 | 费用 | 备注 |
|---|---|---|
| Cloudflare Workers | 0美元 | 免费层级覆盖工作负载 |
| Cloudflare D1 | 0美元 | 免费层级每天500万行读取 |
| Cloudflare R2 | 0美元 | 冲刺期间无资产存储 |
| Stripe | 0美元 | 无月费;仅按交易收费 |
| Resend | 0美元 | 免费层级每月3000封邮件 |
| OpenAI API | 32美元 | 用于关键词提取端点 |
| 域名 | 5美元 | 一年 .com |
| 合计 | 37美元 | 第一个周末 |
第一周收入:293美元。ROI:约8倍。成本核算就是选择48小时冲刺的理由——成本有上限,上涨空间是真实的。 TanStack Ship 定价见定价页。14个生产模块见功能页。
FAQ
真的能在48小时内交付 MVP 吗?
如果 MVP 是一个功能加 auth 加 billing,可以——我在2026年4月25日用28小时做到了。如果 MVP 是5个功能加团队协作,不行——那是4周的工作量。较慢的时间线见4周内从零到 MVP。
能把 TanStack Ship 和 OpenAI 或 Anthropic 一起用吗?
可以——TanStack Ship 附带了 Vercel AI SDK 适配器,所以在 OpenAI、Anthropic 和 Workers AI 之间切换只需一行配置变更。
认证怎么处理?
Better Auth 是默认方案。Google OAuth 和邮件魔法链接已接线。Cookie session 层在 Cloudflare Workers edge runtime 上正常工作——详见边缘 session 竞态事后分析,有对这个 fix 所解决的 bug 的说明。
TanStack Ship 和 ShipFast 周末 MVP 对比怎么样?
ShipFast 社区更大。TanStack Ship 交付的是 Cloudflare 原生边缘栈。Cloudflare Workers 周末冲刺见 TanStack Ship vs ShipFast。
TanStack Ship 和 Makerkit 对 MVP 来说有什么区别?
Makerkit 交付最精致的 UI。TanStack Ship 交付经过生产验证的最 Cloudflare 化技术栈。见 TanStack Ship vs Makerkit。
下一步: 了解 TanStack Ship 与 ShipFast、Makerkit 和 Open SaaS 的对比——或在对比中心查看完整矩阵。较慢的时间线见4周内从零到 MVP。每个定价档位都包含本次冲刺使用的6个模块(auth、billing、D1、deploy、Resend、analytics)以及另外8个模块。