Login
First account ever created becomes Mother Admin. Later accounts are uploaders (upload only). No keys are stored in this page — the Worker holds all secrets.
If email confirmation is ON in Supabase, signup will ask you to confirm by email first, then login.
Dashboard
Numbers below come from /analytics (real database rows). Until the Worker answers they show —, never fake numbers.
Recent errors
Upload Videos
Bulk upload: select up to 1000 files. Uploads run 3 at a time (change in Settings). Per-file + overall progress shown. Same file (same name + size + modified time) for the same user is detected as a duplicate and reused — no second Drive upload. Videos go to the website once; the Worker saves them to the single shared Drive automatically.
| File | Size | Progress | Status |
|---|
All Videos
| File / Title | Status | AI | Scheduled | FB post | Error |
|---|
AI Content Studio
Content is generated ONLY from a transcript, by a real Gemini/OpenAI call. Click Transcribe to fetch the video from Drive and transcribe it (Gemini Files or Whisper — no ffmpeg in the Worker), then Generate uses that saved transcript. If no AI key is set on the Worker, Transcribe/Generate return a clear 503 naming the missing secret — they never invent fake copy. A low-confidence transcript is flagged and must be reviewed before publishing. Edit any field and Save; Approve marks it ready for scheduling.
All generated content
Publishing Queue
Approved videos waiting for their scheduled time, plus the server-side queue rows (status, attempts, next retry). Publishing itself runs on the Worker Cron — not in this browser.
Approve once (Mother Admin)
Select videos from All Videos by ID (comma-separated), or approve everything currently pending/ready. New videos are appended AFTER the last scheduled time — earlier times are never moved.
Scheduler
Server-side only. The Worker Cron ticks hourly; a video publishes when its scheduled_at arrives. Pause stops publishing (heartbeat keeps running).
Facebook Pages
Official Graph API only. Page tokens are stored server-side and NEVER shown back by any GET endpoint. Adding a page is Mother Admin only; uploaders inherit it.
Add Page (Admin)
Token source: Meta App → Page connection flow. If Meta requires App Review / Advanced Access for a permission, that is a documented blocker in the README — the Worker will surface the Graph error instead of claiming success.
Google Drive
Single shared Drive, set once by Mother Admin. Service-account uploads to a personal My Drive fail with 403 quota — the working route is Mother Admin OAuth (refresh token in Worker secrets).
OAuth callback shows the refresh token ONCE on the Worker page. Paste it only into the Worker secret GOOGLE_OAUTH_REFRESH_TOKEN — never in chat or screenshots. Folder: FB Queue (or DRIVE_FOLDER_ID if set).
AI Settings
Provider/model are Worker secrets (AI_PROVIDER, AI_MODEL, GEMINI_API_KEY / OPENAI_API_KEY). This page only shows which provider is configured (boolean) and the saved style settings — keys are never displayed or entered here.
Publishing History
Permanent history kept in Supabase even after the Drive file is auto-deleted on success.
Analytics
All figures are computed from real database rows via /analytics. No demo numbers.
Settings
Mother Admin only for writes. Keys/secrets are managed in the Cloudflare Worker dashboard, never here.
Deployment & blockers
See README.md in the project folder for the full deploy guide and the exact remaining user-only blockers (Drive OAuth refresh token, Facebook test-page token, Gemini/OpenAI key, Pages + Worker redeploys). Nothing in this page can complete those — they need the owner's dashboards.