Cookie choices

Necessary cookies support login, payments, and security.

Optional analytics help us improve the product.

Current analytics: not set · Cookie Policy

Shipby qcrao
Next.js SaaS template · runs on Cloudflare Workers

Launch your next SaaS with the expensive lessons already fixed.

A production template extracted from AI SaaS products that take real payments: login, Stripe subscriptions and credit packs, an admin that shows where revenue comes from, and ops alerts in your team chat — plus a playbook of every pitfall that cost us money.

One-time payment · lifetime updates via git pull · unlimited projects

# from clone to production
$ git clone git@github.com:QCRAO-SHIP/starter.git
$ npm run db:push   # schema → Postgres
$ npm run db:sql    # grants, triggers
$ npm run worker:deploy
$ npm run cf:deploy
✓ Latin-1 bundle guard passed
✓ asset history merged — open tabs keep working
✓ deployed
Next.js 16Tailwind CSS v4Auth.js · Google & GitHubSupabase PostgresDrizzle ORMStripeCloudflare Workers · R2 · QueuesCloudflare Email Service

Everything that isn't your product, already done.

Keep the parts every paid product needs; spend your week on the part only you can build.

Real login

Google and GitHub sign-in, the device and country each account signed up from, and a free-credit guard that counts accounts per network that actually received credits.

Billing that survives retries

Stripe subscriptions, yearly plans refilled monthly, and one-time packs on an append-only credit ledger where a unique transaction number makes every charge, grant and refund idempotent.

An admin that answers questions

Users, orders, revenue, paying users, cohorts, funnels, landing pages and first-touch attribution — which source and page each paying customer came from.

Ops in your team chat

Signups, payments (with where the buyer came from) and failed charges post to a WeCom group as they happen; a cron checks production logs every 10 minutes and alerts on any error.

Paid jobs that refund themselves

Slow work runs in a Cloudflare Workflow, charged in the same transaction as its job row; a sweeper refunds anything that never reports back.

Ready for more languages

Locale routing, hreflang metadata and per-surface dictionaries. Legal pages, contact, changelog and unsubscribe are already written.

The playbook

Lessons we already paid for.

Each one happened in production. Each fix is in the code, with a note saying why — so it doesn't happen to you. The full playbook ships in the repository.

Worker memory

One curly quote doubled our Worker memory.

A single character above U+00FF makes V8 store the whole bundle as two-byte text — 94 MB of a 128 MB isolate. A guard now fails the deploy and prints where it came from.

Paid jobs

A retried step paid the image API twice.

Workflows rerun a whole step after a crash, and per-task APIs bill both submissions. Submissions are now remembered per workflow, step and attempt.

Paid jobs

Requests were killed after charging, before refunding.

Any request can lose its isolate with ~30s notice. Work over ~20s is a job: row + charge in one transaction, a callback to finish, a sweeper to refund.

Deploys

Every deploy crashed tabs that were already open.

Old JavaScript chunks vanished and Turbopack reported it as React error #130. Deploys now keep previous chunks and fall back to an archive.

CI

A green CI run that deployed nothing.

Cancel-in-progress plus path filters can skip every deploy job and still pass. Check job-level conclusions, not the run.

Growth

One shared network closed signups for everyone on it.

Counting signups per IP let rejected accounts lock the door. The limit counts accounts that actually received free credits.

From payment to git clone in a minute.

  1. 1

    Sign in with GitHub

    We need your GitHub username to give you access. Signed in with Google? Connect GitHub on your account page.

  2. 2

    Pay once with Stripe

    Card, Apple Pay or Google Pay. No subscription to cancel.

  3. 3

    Accept the repo invite

    GitHub emails you an invite to the private repository. Accept it, clone, and git pull whenever we ship a fix.

One price. Every future fix.

The template keeps changing as we run our own sites on it. Your purchase covers all of it, for as long as the repository exists.

Full refund until you accept the GitHub invite — see the refund policy.

Ship · Lifetime

One-time
$99USD, once
  • Private GitHub repository access, read-only
  • Every future update — pull it like any repo
  • Use in unlimited personal and commercial projects
  • The playbook: setup, deploy and every production lesson
  • Admin, billing, auth and ops modules
  • Email support
Get Ship — $99

Secure payment by Stripe · plus sales tax where it applies

Questions

What exactly do I get?

Read access to the private GitHub repository that holds the template, including its docs and playbook. Updates arrive as commits; you pull them into your projects when you want them.

Can I use it for client work or several products?

Yes. Build as many products as you like, for yourself or for clients. You may not resell or republish the template itself.

I signed in with Google. Can I still buy?

Yes, but connect your GitHub account first — the invite goes to a GitHub username.

What if the invite email never arrives?

Your account page shows the invite status and a Resend button. You can also open the invitation directly on GitHub.

Can I get a refund?

Yes, in full, until you accept the GitHub invite. After that you have the code, so we can no longer take it back.