Marie, 32 ans, ex-prof dâhistoire en reconversion. Sa sĆur Lina tient une petite boulangerie artisanale dans le 11á” arrondissement de Paris. Le bouche-Ă -oreille marche bien, mais Lina perd des clients qui « passent en vĂ©lo et ne savent pas si elle est ouverte ». Marie se propose de faire le site.
Elle débute en code, mais elle a un mois de congés devant elle et un compte GitHub fraßchement créé.
| |
|---|
| Type | Site e-commerce local + click & collect |
| Cible | Habitants du quartier (4-5 km autour) |
| Volume | ~ 30-50 commandes/jour Ă lâobjectif |
| Stack frontend | Astro pour la vitrine, React pour le panier |
| Stack backend | Hono (Node 24) |
| Base de données | Postgres + Drizzle |
| Auth | Better Auth (email + magic link) |
| Paiement | Stripe |
| Hébergement | Vercel + Neon |
| Sous-axe | Ăpisode |
|---|
| 5.1 HTML | Marie maquette la page dâaccueil, la liste des produits, la page de contact. Premier piĂšge : <div> partout, des textes sans hiĂ©rarchie. Lina ne retrouve pas son tĂ©lĂ©phone. |
| 5.2 CSS | Marie aligne les cartes produits avec Flexbox. Découvre Grid pour la galerie. Apprend les variables CSS pour les couleurs de la boulangerie (or et brun). |
| 5.3 AccessibilitĂ© | Une amie de Lina, malvoyante, nâarrive pas Ă lire les prix. Marie corrige les contrastes et les labels. |
| Sous-axe | Ăpisode |
|---|
| 6.1 JS essentiel | Le bouton « Ajouter au panier » ne fait rien. Marie Ă©crit ses premiĂšres fonctions, manipule le DOM, gĂšre lâĂ©tat du panier en mĂ©moire. |
| 6.2 Async | Le formulaire de contact envoie lâemail, mais lâutilisateur nâa aucun feedback pendant 3 secondes. Marie dĂ©couvre fetch + await + Ă©tat loading. |
| 6.3 APIs navigateur | Le panier disparaßt au refresh. Marie persiste avec localStorage. Plus tard : géolocalisation pour suggérer les boutiques proches. |
| 6.4 TypeScript | Le panier accepte des produits sans prix â bug en prod. Marie ajoute des types. Plus jamais. |
| Sous-axe | Ăpisode |
|---|
| 7.1 Concepts communs | La page panier est devenue un nid Ă bugs. Marie comprend pourquoi les frameworks existent. |
| 7.2 React | Migration progressive : la page panier en React, le reste reste en Astro. |
| 7.3 Alternatives | Marie Ă©value Vue et Svelte pour Lina. Garde React parce quâelle a dĂ©jĂ investi le temps. |
| 7.4 Méta-frameworks | Lina veut un blog des recettes. Marie ajoute Next.js pour le SSR + le SEO. |
| 7.5 Outils de build | Le bundle initial passe de 280 KB Ă 80 KB. Lighthouse remonte de 67 Ă 94. |
| 7.6 Design systems | Marie pose Tailwind v4 + 3 composants partagés (Button, Card, Input). |
| Sous-axe | Ăpisode |
|---|
| 8.0 Concepts communs | Lina veut voir ses commandes en temps réel. Il faut un vrai backend, plus juste localStorage. |
| 8.1 Node + Hono | Marie Ă©crit lâAPI : POST /orders, GET /orders/:id. PremiĂšre migration de schĂ©ma. |
| 8.2 Auth + sécu | Inscription clients, magic link Better Auth, cookie HttpOnly + SameSite. |
| 8.3 Backoffice | Lina se connecte sur /admin, voit ses commandes du jour, change le statut « prĂȘt Ă retirer ». |
- Axe 12 sĂ©cu : un client malveillant tente dâinjecter du JS dans le formulaire commentaire ; Marie comprend ce quâest XSS.
- Axe 13 perf : Lina ajoute 50 photos de pains. Le LCP grimpe Ă 6 s. Marie convertit en AVIF +
srcset.
- Axe 13 a11y : RGAA reste Ă valider â Marie passe axe-core et corrige 4 violations.
- Axe 14 DevOps : pipeline GitHub Actions, déploiement Vercel sur push.
- Axe 16 : pour le temps réel (chat avec Lina) et le mobile PWA, Marie bascule sur le parcours Léa plus complet sur ce sujet.
- Tu aimes les histoires personnelles plutĂŽt que les abstractions corporate.
- Tu es débutant total et tu veux un personnage qui débute aussi.
- Tu es Ă lâaise avec un projet local et concret (e-commerce de quartier).
- Tu nâas pas lâambition dâaller toucher au real-time ou Ă lâIA tout de suite.