GoShipped

πŸš€ Deploy

Ship with pnpm run deploy. Two Vercel projects, Production only. GitHub is not required for V1.

Your app works locally. Time to put it on the internet.

The primary path is the GoShipped wizard β€” not a generic Vercel tutorial.

pnpm run deploy

It uses the pinned workspace CLI (vercel in the repo package.json, currently 59.3.0) via pnpm exec vercel. Do not switch to a random global vercel@latest. If you need the vendor CLI docs, start at Vercel CLI.

V1 is Production only

The wizard configures the Production environment. Preview/git integration is optional later. GitHub is not required to go live.

Run Production Check locally first (pnpm run doctor). Fix required failures before you deploy.

You will need a Vercel account. The wizard logs you in if needed.

First deploy

You need an interactive terminal. Non-TTY sessions are rejected (use pnpm run doctor:production in CI).

The wizard, in order:

  1. Checks the pinned CLI and logs you in if needed
  2. Creates or links two Vercel projects β€” API (apps/api, default name {slug}-api) and Web (apps/web, slug from app.name)
  3. Resolves Production URLs
  4. Builds Production env in memory (nothing uploaded yet)
  5. Asks how to handle Supabase (reuse the current project or a separate Production project)
  6. Reuses AI keys and optional Resend / tools / Sentry / MCP as prompted
  7. Asks for Live Stripe keys if billing is on (Test keys are never copied)
  8. Shows a review without secret values β†’ uploads allowlisted keys to Production only
  9. Asks Deploy API now? then Deploy Web now?
  10. After the API URL exists, can help register the Stripe Live webhook
  11. Prints dashboard todos + a summary

Same Vercel project for both apps is a hard stop. Root Directory stays ./ for these CLI uploads.

Skipped extras become todos, not wizard crashes.

What you still do in dashboards

The wizard cannot click every vendor screen:

TaskWhere
Supabase Site URL + /auth/callback + /auth/confirmSupabase Auth redirect URLs
Stripe Live webhook to https://<api>/api/v1/billing/webhooks/stripeStripe webhooks (if billing is on)
Verify Resend sending domainResend domains (if product email is on)
Optional custom domainsEach Vercel project

Auth and billing details: Authentication, Payments, Emails.

The wizard uploads Production env vars for you. Use the Vercel dashboard only for leftovers the summary lists.

Migrations are pnpm supabase:push (or the wizard’s db push). They do not run inside the Vercel build.

Fast redeploy

If GoShipped detects all of:

  • Web and API already linked
  • Two different Vercel projects
  • A successful Production deployment (URL) on each
  • Required Production env names for the features you enabled

it offers:

Existing GoShipped deployment detected
Deploy latest code?  [Yes / No]

Yes β€” skip the setup interview. Production env is left unchanged. Only new code is uploaded (API, then Web).

No β€” keep current Production. Exit 0. Nothing deploys.

Stripe keys are not a gate for this shortcut. Production Doctor still reports billing separately if the flag is on.

If something fails

Fast redeploy

What happenedResult
API deploy failsStop. Web is not deployed. Exit 1.
API succeeds, Web failsPartial: API is live, Web is not. Exit 1.
Both succeedExit 0. Your app is live.
You decline before deployExit 0. Current Production unchanged.

First run is more conversational: you can skip a deploy prompt; an API CLI failure still lets the wizard ask about Web. The summary then says Production deployment paused (API/Web β€œnot deployed yet”). Run pnpm run deploy again when you are ready. A refused login, CLI version mismatch, or both apps pointed at one project still exit 1.

Ctrl-C exits 130.

After it is live

pnpm run doctor:production

That inspects linked projects and Production env names. It does not prove the app is bug-free. See Production Check.

Hit https://<api-host>/health once yourself.

Launch checklist

  • pnpm run doctor is clean enough to ship (no required failures)
  • pnpm run deploy created or linked two projects and deployed both
  • Supabase Auth URLs point at the Web origin
  • Live Stripe webhook (if features.billing)
  • Resend domain (if EMAIL_ENABLED)
  • pnpm run doctor:production
  • Legal and marketing copy are yours β€” Landing Page

You shipped. Now keep building the part that is actually the product.

On this page