Quick start
Run Session Canvas on your machine and explore a fully seeded demo event in about ten minutes.
This guide gets a local copy running against a free Supabase database, seeded with DevFlow Conf 2027 — a demo event with 25 submissions across every status, scored reviews, a scheduled agenda, and a signed-in demo speaker — so you can see the whole lifecycle without entering any data.
Prerequisites
- Node.js 20 or later and pnpm.
- A free Supabase project (its Postgres database and Auth power the app). Two minutes to create if you don’t have one.
- Optional: a Resend API key. Without one, every outgoing email is printed to the terminal instead of sent — fine for exploring.
Install and configure
Install dependencies
git clone https://github.com/rjcrabbe/sessioncanvas cd sessioncanvas pnpm install cp .env.example .env
Fill in .env from your Supabase project
From your Supabase dashboard, copy these into
.env:DATABASE_URLandDIRECT_URL— the pooled and direct connection strings, under Connect in the project header.NEXT_PUBLIC_SUPABASE_URL,NEXT_PUBLIC_SUPABASE_ANON_KEY, andSUPABASE_SERVICE_ROLE_KEY— under Settings → API.
Add
RESEND_API_KEYandEMAIL_FROMif you want real email; leave them unset to log email to the console. See the full environment variable reference.Migrate and seed the database
pnpm db:migrate # apply Prisma migrations pnpm db:seed # create the demo event
Create the file-storage buckets (once per environment)
File uploads (slides, headshots) live in Supabase Storage. Without this step the app runs fine but returns errors on any upload:
pnpm tsx scripts/setup-storage.ts
Start the dev server
pnpm dev
Open http://localhost:3000.
Explore the demo event
| Where | URL | What you’ll see |
|---|---|---|
| Admin console | /admin | Submissions, evaluations, agenda, communications, tasks, settings |
| Call for speakers | /cfp/devflow-2027/cfp-2026 | The public form a speaker fills out to submit a session |
| Speaker portal | /portal/verify?token=demo-portal-token | Signs you in as a seeded demo speaker. The token expires 7 days after seeding — re-run pnpm db:seed to refresh it |
| Public schedule embed | /embed/democonf26-grid | The read-only schedule grid anyone can embed |
Next steps
- Set up your own event — replace the demo with the real thing.
- Deploy to Vercel or Cloudflare Workers when you’re ready to go live.