Hugo, 28 ans, ex-commercial. Sa cousine InĂšs vient dâouvrir Studio Pulse, un studio de yoga + Pilates dans le centre de Lyon. Pour lâinstant elle gĂšre les inscriptions sur un Google Sheet partagĂ© â chaos garanti dĂšs quâil y a 3 cours par jour.
Hugo se forme au code en parallÚle de sa formation ressources humaines. Il propose à InÚs de coder son site avec espace membre + réservations en ligne.
| |
|---|
| Type | Site vitrine + plateforme de réservation + abonnements |
| Cible | Adultes 25-55, pratiquants réguliers |
| Volume | ~ 200 membres actifs, 40 cours/semaine |
| Stack frontend | Next.js 16 (App Router) |
| Stack backend | Next.js API Routes + Hono pour les workers |
| Base de données | Postgres + Drizzle |
| Auth | Better Auth (email + Google OAuth) |
| Paiement | Stripe Subscriptions (carnets de cours) |
| Hébergement | Vercel |
| Sous-axe | Ăpisode |
|---|
| 5.1 HTML | Hugo structure : présentation studio, planning des cours, profils des profs, page tarifs. |
| 5.2 CSS | Grid pour le planning hebdo, Flexbox pour les cards profs. Ambiance végétale (verts doux + cream). |
| 5.3 A11y | Le formulaire de contact nâa pas de label visible. Hugo corrige et passe lâaudit axe-core. |
| Sous-axe | Ăpisode |
|---|
| 6.1 JS | Le calendrier filtre par type (yoga / Pilates / méditation). Premier état dynamique. |
| 6.2 Async | Inscription en ligne : POST vers une API factice, gestion dâerreur, feedback Ă lâutilisateur. |
| 6.3 APIs navigateur | Date.now() + Intl pour formater les dates. Web Notifications pour rappels (J-1 du cours). |
| 6.4 TypeScript | Hugo type le créneau : { id, day, hour, type, instructor, capacity, booked }. Plus de bug de capacité dépassée. |
| Sous-axe | Ăpisode |
|---|
| 7.1 Concepts communs | Hugo passe au framework : trop dâĂ©tat partagĂ© entre planning, panier de rĂ©servations, profil. |
| 7.2 React | Composants planning, créneau, carnet de cours, profil membre. |
| 7.3 Alternatives | Hugo regarde Vue et Svelte mais InĂšs lit dĂ©jĂ des tutos React â on garde React. |
| 7.4 Next.js | App Router + Server Components pour le planning indexé Google. SEO local renforcé. |
| 7.5 Build | Optimisation des images des profs : -60 % de poids. |
| 7.6 Design system | Tailwind v4 + Radix UI pour les modales de réservation accessibles. |
| Sous-axe | Ăpisode |
|---|
| 8.0 Concepts communs | RĂ©server un crĂ©neau = transaction (vĂ©rifier capacitĂ© â ajouter â dĂ©crĂ©menter places restantes). AtomicitĂ©. |
| 8.1 Node + Hono | API : POST /bookings, gestion concurrence (deux clients qui rĂ©servent la derniĂšre place en mĂȘme temps). |
| 8.2 Auth + sécu | Magic link, OAuth Google, RBAC (élÚve / prof / admin). |
| 8.3 Stripe | Abonnement mensuel ou carnet 10 cours. Webhook idempotent pour la confirmation. Hugo galĂšre 2 jours sur la signature webhook. |
- Axe 9 SQL : InĂšs veut un classement des Ă©lĂšves les plus assidus. Hugo apprend les fenĂȘtrages SQL.
- Axe 12 sĂ©cu : un payload bizarre dans le champ « note allergie ». Hugo dĂ©couvre lâinjection SQL â sa requĂȘte paramĂ©trĂ©e a sauvĂ© la mise.
- Axe 13 perf : la page tarifs est lente sur mobile 4G. Hugo paresse-charge les images de cours et passe le LCP de 4 s Ă 1,3 s.
- Axe 14 DevOps : pipeline CI Vercel + Neon branch DB par PR.
- Axe 16 : pour le streaming live dâun cours en visio, Hugo bascule sur le parcours LĂ©a (real-time).
- Tu aimes lâunivers bien-ĂȘtre / services / rĂ©servation.
- Tu veux toucher à Stripe Subscriptions (compétence trÚs valorisée).
- Tu veux comprendre les enjeux de concurrence DB (overbooking) trĂšs tĂŽt.
- Tu es Ă lâaise avec une stack Next.js full-stack plutĂŽt que Astro + backend sĂ©parĂ©.