Skip to content

tf8888/IconStreamer

Repository files navigation

Live discussion room

Automatically synced with your v0.app deployments

Deployed on Vercel Built with v0

Overview

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

How It Works

  1. Create and modify your project using v0.app
  2. Deploy your chats from the v0 interface
  3. Changes are automatically pushed to this repository
  4. Vercel deploys the latest version from this repository

Auth (Supabase + Zustand)

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.

Environment variables

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.

Notes

  • If you have a users table 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 to auth.user().user_metadata.role.
  • Default role is audience.
  • Global state is handled by Zustand in lib/store/auth-store.ts.

Recording (LiveKit Egress -> Supabase Storage)

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors