Esc
↑↓ Naviguer ↔ Ouvrir Esc Fermer
Aller au contenu

đŸ„– Marie · La Boulangerie de Lina

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éé.

TypeSite e-commerce local + click & collect
CibleHabitants du quartier (4-5 km autour)
Volume~ 30-50 commandes/jour à l’objectif
Stack frontendAstro pour la vitrine, React pour le panier
Stack backendHono (Node 24)
Base de donnéesPostgres + Drizzle
AuthBetter Auth (email + magic link)
PaiementStripe
HébergementVercel + Neon
Sous-axeÉpisode
5.1 HTMLMarie 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 CSSMarie 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 essentielLe 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 AsyncLe 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 navigateurLe panier disparaßt au refresh. Marie persiste avec localStorage. Plus tard : géolocalisation pour suggérer les boutiques proches.
6.4 TypeScriptLe panier accepte des produits sans prix → bug en prod. Marie ajoute des types. Plus jamais.
Sous-axeÉpisode
7.1 Concepts communsLa page panier est devenue un nid Ă  bugs. Marie comprend pourquoi les frameworks existent.
7.2 ReactMigration progressive : la page panier en React, le reste reste en Astro.
7.3 AlternativesMarie Ă©value Vue et Svelte pour Lina. Garde React parce qu’elle a dĂ©jĂ  investi le temps.
7.4 Méta-frameworksLina veut un blog des recettes. Marie ajoute Next.js pour le SSR + le SEO.
7.5 Outils de buildLe bundle initial passe de 280 KB Ă  80 KB. Lighthouse remonte de 67 Ă  94.
7.6 Design systemsMarie pose Tailwind v4 + 3 composants partagés (Button, Card, Input).
Sous-axeÉpisode
8.0 Concepts communsLina veut voir ses commandes en temps réel. Il faut un vrai backend, plus juste localStorage.
8.1 Node + HonoMarie Ă©crit l’API : POST /orders, GET /orders/:id. PremiĂšre migration de schĂ©ma.
8.2 Auth + sécuInscription clients, magic link Better Auth, cookie HttpOnly + SameSite.
8.3 BackofficeLina 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.

DerniĂšre mise Ă  jour :