Skip to main content
Streamly separates operator, tenant owner, and viewer access. Auth uses Supabase with separate cookie jars so admin sessions never collide with viewer sessions.

Role Map

Operator

  • Activated with Envato/CodeCanyon purchase code (or demo license when ENABLE_DEMO / ADMIN_ALLOW_DEMO_LICENSE is set).
  • Cookie scope: sb-streamly-operator-auth-token.
  • Platform host only for admin UI (tenant hosts redirect to NEXT_PUBLIC_PLATFORM_HOST).

Viewer

  • Standard email/password (and Supabase auth callback at /auth/callback).
  • Cookie scope: sb-streamly-viewer-auth-token.
  • After login, Who’s Watching may force /profiles until a viewer_profiles row is selected (streamly_viewer_profile cookie).
Demo viewer (when configured): demo@streamly.watch / demo123456not the operator account.

Tenant Owner

Uses the dashboard nav in lib/streamly/dashboard-nav.ts. Several items are inactive in the current UI (genres, homepage, metadata, viewer plans, viewers, reports) — do not treat those as shipped until enabled.

Platform vs Tenant Host

Permissions Model

Fine-grained checks are enforced in middleware, RLS, and API handlers. Operators use /api/operator/*; viewers and tenant clients use /api/v1/* with tenant context from the host and session. Details: Authentication Flow, Roles & Permissions.