Auth Flow

Session lifecycle, OAuth, and project roles.

Every request passes through middleware that refreshes the Supabase session cookie before route handlers run.

Session lifecycle

text
1. User visits protected route
2. middleware.ts → updateSession()
3. createServerClient reads/writes auth cookies
4. getUser() — if no user → redirect /login?next=...
5. If user on /login → redirect /projects

OAuth flow

  1. User clicks Google sign-in on /login
  2. Supabase redirects to Google, then back with ?code=
  3. Middleware catches code and forwards to /auth/callback
  4. Callback exchanges code for session, redirects to next param

Roles & RLS

Project members have roles: admin, editor, or viewer.

RoleTypical permissions
adminInvite members, delete project, full edit
editorUpload assets, comment, vote, edit tasks
viewerView and comment (read-heavy)

Hub admins (org-wide) can access org-wide projects and dev tools.