CoreMVP

Configure Environment

View as Markdown

Let the template CLI write local Supabase connection values. Add provider settings only when you configure the corresponding capability.

bunx supabase start
./coremvp env sync
./coremvp env list

Run from the cloned repository root after the first-run migration check. env sync updates ignored ; env list reports redacted set or missing status. It does not print credentials or prove connectivity.

Generated local settings

VariableAvailable toPurpose
NEXT_PUBLIC_APP_URLBrowser and serverLocal app origin, normally http://localhost:3000.
NEXT_PUBLIC_SUPABASE_URLBrowser and serverThe running local Supabase API.
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYBrowser and serverThe local Supabase publishable key.
SUPABASE_SECRET_KEYServer onlyPrivileged Supabase operations after authorization.
DATABASE_URLServer onlyDrizzle's local PostgreSQL connection.

Keep the values written by env sync together; mixing another project's URL, key or database connection sends the app to different services. Never commit or copy server credentials into a public variable.

Read public settings

The Start repository deliberately retains its NEXT_PUBLIC_* names. exposes that prefix, and browser modules read explicit import.meta.env properties:

src/lib/supabase/client.ts (excerpt)
const supabaseUrl = import.meta.env.NEXT_PUBLIC_SUPABASE_URL;
const supabasePublishableKey =
  import.meta.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY;

Use the existing browser client rather than constructing another client in each component. Do not rename these inputs to VITE_* or use browser process.env reads. Vite loads the public inputs during development and embeds them into the production build; see its environment variable guide.

The server factory in reads the same public Supabase URL/key from process.env inside the current request. Database URLs, payment provider credentials, email credentials and SUPABASE_SECRET_KEY stay in server-only modules. The NEXT_PUBLIC_ prefix makes a value public; it is never suitable for a secret.

Add capability settings

Keep provider setup with the task it enables:

  • Billing supplies the selected provider's credentials, offer mappings and local webhook-listener sequence. Public Stripe catalog IDs retain the existing NEXT_PUBLIC_STRIPE_* names.
  • Email Delivery supplies EMAIL_DELIVERY_MODE and the mode-specific server settings. Development normally uses mock. Before email sends in Start's production Node runtime, configure explicit real or capture settings as described in that guide.
  • Configure OAuth Providers supplies the provider handoff and app callback. Local OAuth credentials must be supplied to local Supabase before it starts; env sync does not enable a provider or copy its credentials.

Restart bun run dev after changing . Rebuild after changing public values used by the Node output. Follow the local build instructions for that separate process.

Verify the running connection

Start the app with bun run dev, sign in and open /dashboard. Run the local Auth check after cookie or connection changes. If a key is missing, sync after Supabase starts and restart the app. If keys are present but requests fail, check that the URL and key belong to the same running project; do not print secrets into logs.

For hosted deployment, see the Start hosted deployment status.

What's next

Was this page helpful?

On this page