TanStack Ship for MVPs: 48小时冲刺,获得首个付费用户

我用 TanStack Ship 在48小时内交付了可收费的 MVP:auth、billing、实时 URL。周六开工,周日下午1:47收到第一笔付款。逐小时记录与避坑指南。

Huifer
Huifer
May 4, 202610 min read
其他语言:Deutsch · English

本文由 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:00AuthBetter Auth 模块接线。Google OAuth + 邮件魔法链接。
周六 13:00数据库3张表的 D1 schema(users、projects、payments)。47行。
周六 15:00核心工作流一个功能:SEO 关键词追踪器。Server function。
周六 17:00UIshadcn/ui + 4个组件。跳过设计系统。
周六 19:00StripeSubscriptions 模块 + 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:00Bug修复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。接线只需一个配置文件:

ts
// 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 之间的竞态条件,是每个集成都会出问题的两个地方。模块附带了已验证的路由:

ts
// 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 如下:

sql
-- 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分钟)

bash
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 Workers0美元免费层级覆盖工作负载
Cloudflare D10美元免费层级每天500万行读取
Cloudflare R20美元冲刺期间无资产存储
Stripe0美元无月费;仅按交易收费
Resend0美元免费层级每月3000封邮件
OpenAI API32美元用于关键词提取端点
域名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个模块。