siftlode/frontend/src/components
npeter83 d9caf12202 feat(m5c): onboarding — DB invites, request-access, admin approval, email
Move the access whitelist from the ALLOWED_EMAILS env var into a DB Invite table
(env kept as bootstrap fallback), and add a self-service request + admin approval
flow with fail-soft email.

- models: Invite(email, status pending|approved|denied, requested_at, decided_*)
- migration 0008: invites table; seed env ALLOWED_EMAILS u ADMIN_EMAILS as approved
- auth: is_allowed() (DB-first, env fallback); a denied Google login records a pending
  request and bounces to /?access=requested instead of a raw 403; public POST
  /auth/request-access; upsert is idempotent so repeats don't re-spam admins
- routes/admin.py (admin-only): list/approve/deny invites + manual add
- email.py: smtplib + Gmail App Password, fail-soft (skips if SMTP unset)
- /api/me exposes pending_invites; config + .env.example gain SMTP_*
- UI: Login 'Request access' form + access=requested/denied handling; Settings ->
  Access requests (approve/deny + add); admin nudge toast on pending requests

Verified locally: request-access creates a pending invite and emails the admin;
seed approved npeter83; guinea-pig yt.trash2023 denied until approved.
2026-06-12 01:43:07 +02:00
..
Channels.tsx feat(channels): kick recent backfill immediately on 'full history' opt-in 2026-06-12 00:00:50 +02:00
ErrorBoundary.tsx feat(ui): notification center with leveled toasts and error capture 2026-06-11 19:26:34 +02:00
Feed.tsx fix(ui): notification UX — outside-click close, toast countdown, hide entry actions 2026-06-11 19:46:58 +02:00
Header.tsx fix(ui): opacity-based frosted glass; drop full-page settings blur 2026-06-11 22:39:52 +02:00
Login.tsx feat(m5c): onboarding — DB invites, request-access, admin approval, email 2026-06-12 01:43:07 +02:00
NotificationCenter.tsx feat(ui): liquid-glass design system, settings polish, hints, notif fixes 2026-06-11 21:08:35 +02:00
SettingsPanel.tsx feat(m5c): onboarding — DB invites, request-access, admin approval, email 2026-06-12 01:43:07 +02:00
Sidebar.tsx fix(ui): portal tooltips, opaque glass, settings rail+stable height, notif test, channel help 2026-06-11 21:30:25 +02:00
SyncStatus.tsx feat: sync status indicator, admin pause/resume, filtered video count 2026-06-11 04:15:25 +02:00
Toaster.tsx feat(ui): liquid-glass design system, settings polish, hints, notif fixes 2026-06-11 21:08:35 +02:00
Tooltip.tsx fix(ui): portal tooltips, opaque glass, settings rail+stable height, notif test, channel help 2026-06-11 21:30:25 +02:00
VideoCard.tsx feat(ui): liquid-glass design system, settings polish, hints, notif fixes 2026-06-11 21:08:35 +02:00