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
- Create a Supabase Free project. Stay on Free; skip trials and add-ons.
- Run
supabase/migrations/001_workshop.sqlin the SQL editor. Create your owner account in Authentication → Users and disable new public signups. - Insert your owner UUID into
public.owners. Add the same UUID asOWNER_USER_IDin the server environment. - Copy
.env.exampleto.env.locallocally. Enter project settings in that file or the Vercel environment editor. Never send secrets through chat. - 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/.