Automatically synced with your v0.app deployments
This repository will stay in sync with your deployed chats on v0.app. Any changes you make to your deployed app will be automatically pushed to this repository from v0.app
- Create and modify your project using v0.app
- Deploy your chats from the v0 interface
- Changes are automatically pushed to this repository
- Vercel deploys the latest version from this repository
Auth is implemented using Supabase. Pages included:
/auth/sign-in– email/password sign-in/auth/sign-up– email/password sign-up with role selection (admin/host/audience)/auth/forgot-password– send a reset link/auth/reset-password– update password from magic link/profile– simple user profile and sign-out
Header reflects login state (Sign in/Sign up vs Avatar + Logout). Roles are stored in user_metadata.role and default to audience.
Create a .env.local file at project root:
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
Do not expose the service role key in the client or commit it to source control.
- If you have a
userstable with columns(id uuid pk, email text, role text, avatar_url text, full_name text), the app will read the role from there; otherwise it falls back toauth.user().user_metadata.role. - Default role is
audience. - Global state is handled by Zustand in
lib/store/auth-store.ts.
Host can start/stop a room recording from the overlay control bar. This uses LiveKit Egress Room Composite to generate an MP4 and uploads it to your Supabase Storage bucket via the S3-compatible API.
Required environment variables (example .env.local)
# LiveKit
LIVEKIT_URL=https://<your-livekit-host> # ws(s) also supported; server uses http(s)
LIVEKIT_API_KEY=lk_api_key
LIVEKIT_API_SECRET=lk_api_secret
# Supabase (existing)
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_ANON_KEY=...
SUPABASE_SERVICE_ROLE_KEY=...
# Supabase Storage S3-compat (target bucket must exist, e.g. "recordings")
SUPABASE_S3_ENDPOINT=https://<project-ref>.supabase.co/storage/v1/s3
SUPABASE_S3_REGION=us-east-1
SUPABASE_S3_BUCKET=recordings
SUPABASE_S3_ACCESS_KEY=<s3-compat-access-key>
SUPABASE_S3_SECRET_KEY=<s3-compat-secret-key>
SUPABASE_S3_FORCE_PATH_STYLE=true
Files uploaded to the bucket will be stored under <room-id>/<timestamp>.mp4.
Note: Ensure the LiveKit Egress service is enabled and the Supabase S3-compatible API is enabled for your project.
For a step-by-step test walkthrough, see: docs/testing-recordings.md.
If you're a host and just want the simple how-to, read: docs/recording-for-hosts.md.