Reproduire le projet de zéro
Guide complet pour monter un environnement ReelMark fonctionnel (dev local ou nouvelle instance).
1. Prérequis
- Node.js 24+ (LTS) et pnpm 11+ (
corepack enablesuffit) - Un compte Supabase (plan gratuit OK)
- Un TMDB Read Access Token (API v4, gratuit)
- Une clé Watchmode (plateformes de streaming — optionnelle en dev, la section providers sera vide sans)
- Optionnel : une instance Bugsink (ou tout serveur compatible protocole Sentry) pour les erreurs
2. Cloner et installer
git clone https://github.com/TheSawkit/ReelMark.git
cd ReelMark
pnpm install
cp .env.example .env.local
3. Créer le projet Supabase
- Nouveau projet sur supabase.com → noter l'URL du projet et la clé publishable (Settings → API).
- Schéma : versionné dans
supabase/migrations/. Sur un nouveau projet :npx supabase@latest link --project-ref <ref>puisnpx supabase@latest db push— il crée les 16 tables, la RLS, les fonctions, les triggers, la publication Realtime et le bucketavatars. Pour développer sans projet hébergé :npx supabase@latest start(Docker), voir SUPABASE-USAGE.md. Ne jamais lancerdb pushcontre la prod. - Auth :
- Activer Email + Google (Authentication → Providers). Pour Google : créer un OAuth Client dans Google Cloud Console avec le redirect
https://<projet>.supabase.co/auth/v1/callback. - URL Configuration : Site URL = ton domaine (ou
http://localhost:3000en dev) ; ajouter aux Redirect URLs :<domaine>/auth/callback,<domaine>/auth/confirm,http://localhost:3000/**. Un Site URL obsolète redirige les logins OAuth vers l'ancien domaine.
- Activer Email + Google (Authentication → Providers). Pour Google : créer un OAuth Client dans Google Cloud Console avec le redirect
- Storage : le bucket public
avatarset ses policies sont créés par la migration de base.
4. Variables d'environnement
Remplir .env.local :
| Variable | Où la trouver |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase → Settings → API |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase → Settings → API (clé publishable) |
SUPABASE_SERVICE_ROLE_KEY | Supabase → Settings → API (secrète — jamais côté client) |
TMDB_READ_ACCESS_TOKEN | TMDB → Settings → API → API Read Access Token |
WATCHMODE_API_KEY | watchmode.com → dashboard |
NEXT_PUBLIC_BASE_URL | http://localhost:3000 en dev, le domaine en prod |
NEXT_PUBLIC_SENTRY_DSN / SENTRY_DSN | Bugsink → projet → DSN (https obligatoire en prod) |
NEXT_PUBLIC_VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY / VAPID_SUBJECT | npx web-push generate-vapid-keys ; VAPID_SUBJECT = mailto: de contact (notifications push) |
CRON_SECRET | chaîne aléatoire longue (openssl rand -hex 32) ; les CronJobs l'envoient en Authorization: Bearer |
BUGSINK_ALERT_SECRET / LINEAR_API_KEY / LINEAR_TEAM_ID | optionnel, relais Bugsink → Linear : secret aléatoire (openssl rand -hex 32), clé personnelle Linear (Settings → Security & access → API), id de l'équipe Linear |
TEST_USER_EMAIL / TEST_USER_PASSWORD | compte de test créé à la main, pour les E2E authentifiés et pnpm screenshots |
Piège : pour les env vars pouvant valoir "", le code utilise || et non ?? — une chaîne vide doit retomber sur le défaut.
5. Lancer
pnpm dev # http://localhost:3000
pnpm test # unitaires (Vitest) — aucun service requis
pnpm test:e2e # Playwright — nécessite un serveur sur :3000 (pnpm build && pnpm start)
# et TEST_USER_EMAIL/PASSWORD pour tests/e2e/protected/
En local, Playwright ne démarre pas le serveur lui-même (webServer n'est configuré qu'en CI) : lancer pnpm build && pnpm start dans un autre terminal d'abord.
6. Vérifier que tout marche
http://localhost:3000→ landing, bascule FR/EN.- Signup email → le profil
user_profilesest créé automatiquement. - Rechercher un film, l'ajouter à la watchlist, marquer des épisodes d'une série.
curl http://localhost:3000/api/health→{"status":"ok"}.- Réglages → Données → Assistant IA : générer un lien, puis vérifier qu'il répond (
POSTJSON-RPCtools/list, voirtests/e2e/protected/mcp-link.spec.ts).
7. Production
Le déploiement production (Docker + Kubernetes Infomaniak + Cloudflare) est documenté dans DEPLOYMENT.md à la racine. Points clés :
- Image Docker multi-stage (
output: standalone), build webpack obligatoire. - Les
NEXT_PUBLIC_*sont inlinées au build (build-args CI) — changer le domaine exige un rebuild de l'image, pas seulement le secret K8s. - Secrets serveur uniquement dans le secret K8s
reelmark-secrets, jamais dans l'image.