GoShipped

βœ… Production Check

pnpm run doctor checks local setup. pnpm run doctor:production checks linked Vercel Production. Neither proves your product is bug-free.

Before you ship, run doctor.

Doctor is one of the distinctive parts of the kit. It is read-only. It does not write env files, deploy, or print secrets. It tells you what is missing, which file it belongs in, and where to get the value.

Run it whenever you are unsure. Then deploy.

pnpm run doctor
pnpm run doctor:production

Use `pnpm run`

Bare pnpm doctor is a pnpm builtin. It will not run GoShipped’s script.

Two commands

Comparedpnpm run doctorpnpm run doctor:production
Looks atstarter.config.json, apps/web/.env.local, apps/api/.envLinked Vercel projects under apps/api and apps/web
ChecksKeys present in local filesProduction env names + that a Production URL exists
WhenAnytime locally, including CIAfter pnpm run deploy (or once projects are linked)

Neither command mutates anything. Production Doctor does not add env vars or trigger a deploy.

Exit codes

CodeMeaning
0No required failures. Warnings, skips, and manual todos are allowed.
1Something required is missing, or starter.config.json is invalid (Production).

Statuses in the report: pass, fail (required), warn (does not fail the exit), skip (feature off).

Feature-aware on purpose

Disabled flags skip their groups. Exclusive secrets for a disabled feature are not required. That is the same rule as Configuration.

Shared reminders:

  • Chat: OpenAI or Anthropic
  • Files / Memory: OpenAI embeddings while those flags stay on
  • Billing off β†’ no Stripe
  • MCP off β†’ no MCP env; enabled servers only when the feature is on

What local doctor groups

Configuration β†’ Environment β†’ Supabase β†’ AI β†’ Signup β†’ Onboarding β†’ Billing β†’ Files β†’ Memory β†’ Deep Research β†’ MCP β†’ Email β†’ Observability β†’ Tools.

Signup and onboarding are status lines (enabled/disabled). They do not demand extra keys.

Common checks

SymptomLikely cause
OpenAI required for embeddingsfeatures.files or features.memory is on without OPENAI_API_KEY
Stripe keys missingFlag still true after you skipped setup. Set features.billing to false or add keys.
Webhook secret warningLocal STRIPE_WEBHOOK_SECRET empty. Run pnpm stripe:listen. Exit can still be 0.
Tools warning (Tavily/Serper)Web research on without search keys. Chat still works.
Email group skippedEMAIL_ENABLED is not true β€” expected.

Production Doctor

Needs both apps linked to different Vercel projects and a resolvable Production URL.

It checks that the names of required Production env vars exist for the features you enabled. It does not prove the values are correct.

Warnings you will likely see until dashboards are finished:

  • Production Stripe webhook pending
  • NEXT_PUBLIC_API_URL / CORS_ORIGINS until the first deploy wrote them

Manual leftovers (Auth URLs, Stripe Live webhook, Resend domain) print as todos. They are not always fail.

What it cannot guarantee

Doctor checks whether the GoShipped foundation is configured correctly.

It does not:

  • Prove your product has no application bugs
  • Prove secret values are valid
  • Prove Auth redirects, the Stripe webhook, or the Resend domain are set in their dashboards
  • Replace curl to /health after go-live

Green doctor means β€œyou may deploy,” not β€œusers will love the app.”

When local doctor is clean, ship.

On this page