Setup guide · 1 of 4
Install SignalKit on Vercel + Supabase
From a fresh repo clone to a public Vercel URL serving your brand. Typical time: 30–60 minutes.
1.Create a Supabase project
In the Supabase dashboard, create a new project. Note the project ref (the URL prefix wzbcfdisgomzhaztoxyv-style identifier), the anon key, and the service-role key. Save the database password in your password manager — you will need it once for migration push.
2.Clone the SignalKit repo + install dependencies
Clone the GitHub repository we share with you at kickoff. Run npm install. Copy .env.local.example to .env.local and fill in NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, and SIGNALKIT_LICENSE_TOKEN. Run npm run dev and confirm the homepage loads at http://localhost:3010.
3.Apply database migrations
Install the Supabase CLI (supabase --version should print 2.x). Run supabase link --project-ref <your-ref>. Authenticate with a Personal Access Token if your CLI is signed into a different Supabase account. Then run supabase db push --linked --include-all --yes. You should see a list of 20260516+ migrations applied successfully.
4.Set BRAND_* environment variables
Set BRAND_NAME, BRAND_TAGLINE, BRAND_DOMAIN, BRAND_SUPPORT_EMAIL, BRAND_LEGAL_EMAIL, BRAND_LEGAL_ENTITY_NAME, BRAND_LEGAL_ENTITY_REGISTRATION, BRAND_LEGAL_ENTITY_JURISDICTION, and BRAND_PRIMARY_COLOR. Either edit .env.local or paste them into Vercel env vars after deploy. The Hero copy (BRAND_HERO_HEADLINE, BRAND_HERO_SUBHEAD) is optional — defaults are sensible.
5.Deploy to Vercel
Connect the GitHub repo to a new Vercel project. Add the same environment variables you set locally to the Production scope (vercel env add NAME production). Trigger a deploy. Build typically completes in under a minute.
6.Verify the deploy
Open the Vercel-provided URL. The homepage should render with your brand name and the placeholder strategy cards. Hit /api/health and confirm a 200 with {ok: true, db_reachable: true}. If db_reachable is false, your service-role key or Supabase URL is wrong.
Common gotchas
- CLI auth scope. If your default Supabase CLI login is a different account than the SignalKit project, every supabase command needs
SUPABASE_ACCESS_TOKEN=<PAT> supabase ...in front. Set this in your shell profile. - DB push fallback. If you lose the DB password and can't run
db push, bundle the migration SQL into one transactional script and paste into Supabase Dashboard → SQL Editor. Future CLI runs see the schema_migrations rows and skip them. - Vercel CLI scope drift. If you have multiple Vercel teams, pass
--scope <team>on every command. Default team often isn't the one with the deploy. - Brand vars cache. BRAND_* values are read at module load, not per request. Update on Vercel, then trigger a redeploy (an empty commit works) — env edits alone don't take effect.