🚀
Launch Checklist
Complete these steps to go live with real students. Your progress is saved automatically in your browser.
0 of 20 tasks complete
🔴 Critical
Must do before first real student
Run Supabase V12 migration SQL Required
Open supabase-v12.sql from the zip → paste into Supabase SQL Editor → click Run. Look for "Tables ready" in results.
Open Supabase Dashboard →
Set your Bunny Stream Library ID
In Bunny dashboard → Stream → your library → copy the Library ID number. Then in admin-portal.html and student-portal.html search for "YOUR_LIBRARY_ID" and replace it. Redeploy.
Open Bunny Dashboard →
Deploy V12 to Netlify
Unzip fluent-francais-V12-FINAL.zip → go to Netlify → Deploys tab → drag the entire folder to the deploy zone → wait for "Published" ✅
Open Netlify →
Switch Stripe to Live mode Real money
Stripe → toggle to Live mode → Developers → API Keys → copy pk_live_ and sk_live_. In Netlify → Env Vars → update STRIPE_PUBLISHABLE_KEY and STRIPE_SECRET_KEY.
Open Stripe API Keys →
Create Live Stripe Webhook
In Stripe (Live mode) → Developers → Webhooks → Add endpoint → URL: https://fluentfrancais.ca/.netlify/functions/stripe-webhook → select payment_intent.succeeded + payment_intent.payment_failed → copy whsec_ → update STRIPE_WEBHOOK_SECRET in Netlify.
Open Stripe Webhooks →
Set up Resend for transactional emails
Sign up at resend.com (free — 3,000 emails/month) → add domain fluentfrancais.ca → verify DNS records → copy API key → add to Netlify env vars as RESEND_API_KEY → redeploy.
Open Resend →
Turn email confirmation back ON
Supabase → Authentication → Sign In/Providers → Confirm email → toggle ON → Save. This ensures real students verify ownership of their email before accessing the portal.
Open Supabase Auth Settings →
Test full flow end-to-end Don't skip this
Register new account → confirm email → go to checkout → pay with real card (small amount) → check welcome email arrives → check portal shows correct course → check Supabase enrollments table has the record.
🟡 First Week
Do within 7 days of launch
Upload first video lesson per course
Bunny dashboard → upload video → copy Video ID → Admin portal → Add Lesson → paste ID → Publish. Students will see it immediately in their portal.
Open Admin Portal →
Build and publish first quiz
Admin Portal → Quiz Builder → create 5-10 questions for Section 1 → set pass mark → Publish. Students will see it in their Quizzes tab.
Open Admin Portal →
Schedule first live session with Zoom link
Admin Portal → Live Sessions → schedule your first doubt session → add Zoom link → save. Students see it in their portal and can click Join.
Open Admin Portal →
Set ADMIN_API_KEY in Netlify
Netlify → Site Configuration → Environment Variables → add ADMIN_API_KEY with any strong secret string (e.g. generate one at randomkeygen.com). Used by the manual enrollment function.
Open Netlify Env Vars →
Test password reset flow
Go to fluentfrancais.ca/login.html → click "Forgot password?" → enter your email → check email arrives → click reset link → set new password → confirm you can log in.
Open Login Page →
Invite 2-3 beta students
Admin Portal → Enroll Student → manually enroll trusted friends/colleagues for free. Ask them to use the full flow and report any issues before you open to the public.
Open Admin Portal →
Verify webhook enrollments are saving
After a test payment, go to Supabase → Table Editor → enrollments → check the record appears. Also check payments table. If missing, use Admin Portal → Enroll Student as fallback.
Open Supabase →
🟢 After Launch
When you have time — nice to have
Set up Google Analytics
analytics.google.com → create property → copy Measurement ID (G-XXXXXXXXXX) → add to Netlify env vars as GA_MEASUREMENT_ID. Track where students come from.
Open Google Analytics →
Register for GST/HST with CRA
Required once annual revenue exceeds CA$30,000. Register at canada.ca/cra → My Business Account. You're already collecting correct tax amounts — this just makes it official.
CRA GST/HST Info →
Set up custom SMTP for Supabase emails
Supabase free plan limits auth emails to 3/hour. For production, add custom SMTP: Supabase → Settings → Auth → SMTP Settings → use your Resend SMTP credentials.
Open Supabase Settings →
Add Stripe Customer Portal
Allows students to view their payment history. Stripe → Settings → Billing → Customer Portal → enable → add link in student portal settings page.
Open Stripe Portal Settings →
Test on mobile devices
Open fluentfrancais.ca on iPhone and Android. Test login, checkout, and student portal on both. Check that the hamburger menu works and video player loads correctly on mobile.
Need help with any of these steps?
All setup instructions are also built into the Admin Portal → Settings page. Each section has step-by-step guidance with direct links.