← Return to workshop

muscodes · SETUP AT YOUR OWN PACE

Give your workshop a home.

The local workshop already holds your six Episode 01 links. Measurements are empty until collected or entered. The demo is separate, fictional, and stored under its own key.

1. Owner-only cloud storage

  1. Create a Supabase Free project. Stay on Free; skip trials and add-ons.
  2. Run supabase/migrations/001_workshop.sql in the SQL editor. Create your owner account in Authentication → Users and disable new public signups.
  3. Insert your owner UUID into public.owners. Add the same UUID as OWNER_USER_ID in the server environment.
  4. Copy .env.example to .env.local locally. Enter project settings in that file or the Vercel environment editor. Never send secrets through chat.
  5. Generate your encryption key and collector secret locally. Keep the service-role key server-only. Restart the app, sign in, and the first authenticated load initializes your supplied links.

2. Start with YouTube

Enable YouTube Data API v3 and YouTube Analytics API in Google Cloud without enabling billing. Set a server API key for public counters, or a Google OAuth web client for channel reports. Register https://ugc.muscodes.com/api/oauth/youtube/callback and the matching localhost callback. Connect in the workshop. Add the actual playlist URL to your series when you have it.

3. Meta & optional TikTok sandbox

Your Instagram Creator account and Facebook Page are supported account types. Configure separate Meta app credentials and an explicitly selected Graph API version. Instagram requires basic and insights permissions; Facebook requires a Page token and approved read permissions; Threads needs basic and insights permissions. App roles/review still determine access. Share links are preserved until discovery finds an official API ID.

TikTok’s production review rules exclude private/personal apps. Manual/import remains available. Sandbox collection is opt-in for approved sandbox test users only. X stays manual/import because reads use paid credits.

4. Schedule without a paid cron plan

Run supabase/schedule.sql only after adding your app URL and collector secret to Supabase Vault. It wakes the authenticated collector every 30 minutes; settings control 30–60 minute counters and slower analytics. No Vercel cron is configured. Supabase Free has 500 MB database storage, 5 GB egress and can pause after inactivity; monitor quotas and export backups.

5. Vercel & your existing domain

You stated this is a hobby project. Vercel Hobby permits personal, non-commercial use; reassess if the use changes. Sign in locally with vercel login, deploy this directory, then set production environment variables. Add only ugc.muscodes.com to this project. Use the exact DNS record Vercel supplies in Cloudflare, initially DNS-only for verification. Preserve your apex, www, nameservers and email records.

Verify HTTPS before changing APP_URL to https://ugc.muscodes.com. Set Supabase Site URL and allowed redirects, and register every platform callback. Deployment and platform connection success are separate checks.

Your full handoff

The repository includes detailed setup, API constraints, quota planning, licensing, security assumptions, migrations, original asset source and tests in README.md and docs/.

Back to the workshop