β 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:productionUse `pnpm run`
Bare pnpm doctor is a pnpm builtin. It will not run GoShippedβs script.
Two commands
| Compared | pnpm run doctor | pnpm run doctor:production |
|---|---|---|
| Looks at | starter.config.json, apps/web/.env.local, apps/api/.env | Linked Vercel projects under apps/api and apps/web |
| Checks | Keys present in local files | Production env names + that a Production URL exists |
| When | Anytime locally, including CI | After 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
| Code | Meaning |
|---|---|
0 | No required failures. Warnings, skips, and manual todos are allowed. |
1 | Something 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
| Symptom | Likely cause |
|---|---|
| OpenAI required for embeddings | features.files or features.memory is on without OPENAI_API_KEY |
| Stripe keys missing | Flag still true after you skipped setup. Set features.billing to false or add keys. |
| Webhook secret warning | Local 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 skipped | EMAIL_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_ORIGINSuntil 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
curlto/healthafter go-live
Green doctor means βyou may deploy,β not βusers will love the app.β
When local doctor is clean, ship.