Deploy to Vercel
Import the repo, set your environment variables, and go live — Vercel is the shortest path to production.
Session Canvas is a standard Next.js App Router application, so Vercel needs no special configuration: the repo’s build script already runs prisma generate && next build, and vercel.json registers the cron jobs the app relies on.
Deploy
Import the repository into Vercel
In the Vercel dashboard choose Add New → Project and import your fork or clone of the repo. The framework preset (Next.js) and build command are detected automatically — no overrides needed.
Set the environment variables
Copy every value from
.env.exampleinto the project’s Settings → Environment Variables:DATABASE_URL,DIRECT_URL— Supabase pooled + direct connection stringsNEXT_PUBLIC_SUPABASE_URL,NEXT_PUBLIC_SUPABASE_ANON_KEY,SUPABASE_SERVICE_ROLE_KEYRESEND_API_KEY,EMAIL_FROM— so email really sends in productionNEXT_PUBLIC_APP_URL— your production URL, e.g.https://your-app.vercel.appCRON_SECRET— effectively required in production: without it the cron endpoints return 401 and scheduled syncs and reminders silently stop. Vercel automatically sends it as a bearer token with its own cron requests. Generate withopenssl rand -hex 32.
The full list, including the optional Airtable variables, is in the environment variable reference.
Migrate the database and create the storage buckets
Run these once against the production database — locally, with
DATABASE_URL/DIRECT_URL(and the Supabase keys) pointed at production:pnpm db:migrate pnpm tsx scripts/setup-storage.ts # creates the file-upload buckets pnpm db:seed # optional: only if you want the demo event in production
Allow your production URL in Supabase Auth
In your Supabase project, open Authentication → URL Configuration → Redirect URLs and add
https://your-app.vercel.app/auth/callback. Magic-link sign-in silently fails in production until this is set.
Cron jobs
vercel.json registers scheduled jobs that Vercel starts calling as soon as the project deploys — task reminder emails and the daily Airtable sync. Set CRON_SECRET so only Vercel’s own requests are accepted.
Verify the deployment
- Open the deployed URL — the home page and admin sign-in should load.
- Sign in via magic link; the email arrives via Resend.
- Submit a test proposal through your public CFP link and confirm the confirmation email and the row in Submissions.
Something failing? See Troubleshooting.