Session Canvas/Docs

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

  1. 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.

  2. Set the environment variables

    Copy every value from .env.example into the project’s Settings → Environment Variables:

    • DATABASE_URL, DIRECT_URL — Supabase pooled + direct connection strings
    • NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY
    • RESEND_API_KEY, EMAIL_FROM — so email really sends in production
    • NEXT_PUBLIC_APP_URL — your production URL, e.g. https://your-app.vercel.app
    • CRON_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 with openssl rand -hex 32.

    The full list, including the optional Airtable variables, is in the environment variable reference.

  3. 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
  4. 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.