Skip to main content

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 enable suffit)
  • 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

  1. Nouveau projet sur supabase.com → noter l'URL du projet et la clé publishable (Settings → API).
  2. Schéma : versionné dans supabase/migrations/. Sur un nouveau projet : npx supabase@latest link --project-ref <ref> puis npx supabase@latest db push — il crée les 16 tables, la RLS, les fonctions, les triggers, la publication Realtime et le bucket avatars. Pour développer sans projet hébergé : npx supabase@latest start (Docker), voir SUPABASE-USAGE.md. Ne jamais lancer db push contre la prod.
  3. 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:3000 en 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.
  4. Storage : le bucket public avatars et ses policies sont créés par la migration de base.

4. Variables d'environnement

Remplir .env.local :

VariableOù la trouver
NEXT_PUBLIC_SUPABASE_URLSupabase → Settings → API
NEXT_PUBLIC_SUPABASE_ANON_KEYSupabase → Settings → API (clé publishable)
SUPABASE_SERVICE_ROLE_KEYSupabase → Settings → API (secrète — jamais côté client)
TMDB_READ_ACCESS_TOKENTMDB → Settings → API → API Read Access Token
WATCHMODE_API_KEYwatchmode.com → dashboard
NEXT_PUBLIC_BASE_URLhttp://localhost:3000 en dev, le domaine en prod
NEXT_PUBLIC_SENTRY_DSN / SENTRY_DSNBugsink → projet → DSN (https obligatoire en prod)
NEXT_PUBLIC_VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY / VAPID_SUBJECTnpx web-push generate-vapid-keys ; VAPID_SUBJECT = mailto: de contact (notifications push)
CRON_SECRETchaîne aléatoire longue (openssl rand -hex 32) ; les CronJobs l'envoient en Authorization: Bearer
BUGSINK_ALERT_SECRET / LINEAR_API_KEY / LINEAR_TEAM_IDoptionnel, 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_PASSWORDcompte 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

  1. http://localhost:3000 → landing, bascule FR/EN.
  2. Signup email → le profil user_profiles est créé automatiquement.
  3. Rechercher un film, l'ajouter à la watchlist, marquer des épisodes d'une série.
  4. curl http://localhost:3000/api/health → {"status":"ok"}.
  5. Réglages → Données → Assistant IA : générer un lien, puis vérifier qu'il répond (POST JSON-RPC tools/list, voir tests/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.
Docs by Docsio