0
ARTDANTECH

Ohmyfood

Développement mobile‑first du site OhMyFood Paris. Intégration HTML/SASS conforme aux maquettes et au prototype Figma, animations soignées et documentées, responsive complet (mobile → tablette → desktop) avec performance et accessibilité.

1. Contexte

• Entreprise: OhMyFood, startup FoodTech (NY → Paris).

• Équipe: Artdantech, Paul (chef de projet), UX/UI designer (maquettes + prototype + animations).

• Livrables: site statique multi‑pages (Home + 4 restaurants), SASS compilé en CSS, animations conformes au prototype, responsive mobile‑first, README d’explication des animations, déploiement (GitHub Pages).

• Point de départ: maquettes mobile/desktop + prototype Figma (interactions/animations), images et textes sources, brief créatif.

2. Besoin

• Construire une expérience mobile‑first listant des restaurants et leurs menus, avec interactions fluides et animations (loader, favoris, survol cartes, sélection des plats).

• Implémenter 4 pages “restaurant” à partir d’un template commun (contenu variable uniquement).

• Utiliser SASS (structure modulaire, variables/mixins), assurer l’accessibilité et la performance, et documenter le fonctionnement des animations.

3. Client

• Utilisateurs finaux réservant/choisissant leurs plats à l’avance (mobile en priorité).

• Équipe produit (Paul) pour la conformité au brief et au prototype.

• Équipe design pour la fidélité visuelle et la cohérence des animations.

4 Objectifs

4.1 Fonctionnels

• Page d’accueil: hero, section “Fonctionnement” (étapes), liste des restaurants (cartes clicables, favoris).

• Pages restaurants: entrées / plats / desserts, sélection d’un plat (feedback visuel), CTA commande.

• Animations visibles et cohérentes: transitions au survol, apparition progressive des items, favori (coeur), loader d’entrée.

4.2 Techniques

• Intégration en SASS (mobile‑first) compilé en CSS; breakpoints tablette/desktop (min-width).

• Respect strict des maquettes/prototype (espacements, typographies, couleurs, états).

• Accessibilité: sémantique HTML5, alt text, focus visibles, prefers‑reduced‑motion, contrastes OK.

• Qualité: HTML/CSS validés W3C, lisibilité et BEM, compatibilité moderne (Chrome/Firefox/Safari/Edge).

5. Contraintes / défis

• Mobile‑first réel: base CSS = mobile; enrichissements progressifs via media queries.

• Animations riches mais performantes (transform/opacity) et accessibles (réduction de mouvement).

• Mutualisation des styles entre 4 pages restaurants sans duplication CSS (template + contenus).

• Pixel‑perfect par rapport aux maquettes, y compris états au survol/pression et micro‑interactions.

6. Processus / méthodologie

6.1 Analyse

• Cartographier les composants: Header, Footer, Steps (Fonctionnement), Card Restaurant, Badge “Nouveau”, Coeur favori, MenuItem (plat) avec check, Boutons CTA, Loader, Grilles responsive.

• Recenser tokens: palette, typos, spacing, rayon, ombres, durées/aisings d’animation; extraire en variables SASS.

6.2 Découpage en issues (GitHub)

• Setup: repo public + GitHub Pages, structure dossiers, pipeline Sass (Dart Sass), README.

• Home mobile (sans animations) → animations → responsive (tablette, desktop).

• Page restaurant #1 (mobile) → animations (apparition, sélection) → responsive.

• Duplication pages resto #2–#4 (contenu uniquement).

• Accessibilité (focus, alt, reduced‑motion), validation W3C, optimisation images, finalisation documentation animations.

6.3 Architecture et logique

• Arborescence: cf github

• Responsive: mobile par défaut; @media (min-width: 768px) tablette; (min-width: 1024px/1200px) desktop; container max‑width 1440px.

• Restaurant template: même DOM et classes; contenu (titres, images, prix) change seulement.

• Animations (logique et explications):
  - Loader: overlay plein écran, keyframes spin/fade, durée courte (1–1.5s), transform/opacity pour GPU; masqué via animationend ou classe.
  - Apparition des cartes/menu items: keyframes fade‑up + stagger via nth-child (animation-delay).
  - Coeur “favori”: double icône (fond + contour) ou gradient background‑clip; transition background-size/opacity; focus/keyboard support; état persistant simulé par classe .is‑liked.
  - Sélection d’un plat: container avec prix à droite et zone “check” qui slide depuis la droite (transform: translateX), rotation du check icon (+180°) et fade‑in; inverse on hover out/blur; clamp des durées via variables SASS ($ease, $t-fast, $t-med).
  - Boutons CTA: gradient + shadow; hover = légère scale (transform) + shadow renforcée; active = scale down court.
  - Accessibilité: @media (prefers-reduced-motion: reduce) → désactiver keyframes non essentielles, réduire durées et supprimer les staggers.

6.4 Choix techniques (justification)

• SASS modulaire: variables/mixins pour palette, typographies, z‑index, timings; import ordonné (7‑1 allégé).

• Performances animations: éviter layout thrash (transform/opacity), limiter box‑shadow animé; utiliser will-change avec parcimonie.

• Grilles: Flex/Grid selon section; images avec object-fit: cover; ellipsis sur textes longs (nom/description plats).

• Documentation: README “Animations” décrivant chaque effet (but, classes, keyframes, timings, accessibilité).

6.5 Flux principaux

• Arrivée sur Home → loader bref → hero + “Fonctionnement” (steps animés au survol) → liste de restaurants (cartes, favoris).

• Ouverture d’un restaurant → animation d’entrée des sections (Entrées/Plats/Desserts) par vagues → sélection de plats (slide check + rotation icône) → CTA Commander.

• Ajout/retrait favori depuis Home ou page resto (coeur animé).

6.6 Tests et qualité

• Validation W3C HTML/CSS; Stylelint/Prettier sur SASS; compilation Sass sans warnings.

• A11y: tab order, focus visible, alt, contrastes; test prefers‑reduced‑motion; lecture clavier des états “sélectionné/favori”.

• Responsive: contrôles aux largeurs 320/375/414/768/1024/1200/1440px; grilles et images stables.

• Perf: Lighthouse mobile; poids images; éviter animations coûteuses continues; vérifier CLS nul.

7. Analyse

• Un design mobile‑first et une architecture SASS modulaire permettent d’itérer rapidement entre pages et breakpoints. En traitant les animations comme des composants documentés (tokens de durée/aisings, keyframes réutilisables, reduced‑motion), on garantit cohérence, performance et accessibilité.

8. Choix techniques

• SASS (Dart Sass) avec variables/mixins pour thèmes et timings; BEM pour prévisibilité.

• Media queries en min-width (progressive enhancement); Grid/Flex selon besoins; object-fit; text-overflow pour ellipses mobiles.

• Animations via transform/opacity; préférences utilisateurs respectées; dégradés et ombres limités pour le coût.

9. Logique de résolution

• Construire d’abord Home mobile statique → ajouter animations → étendre responsive; créer un template restaurant mobile → animations → responsive; dupliquer pour 3 autres restaurants; finaliser a11y/perf/validations; documenter les animations et la structure SASS dans le README.

10. Stack utilisée

• HTML5, SASS (Dart Sass) → CSS compilé; BEM.

• Outils: VS Code, Live Server, Stylelint/Prettier, Autoprefixer (PostCSS), Lighthouse, Axe, W3C Validators.

• Déploiement: GitHub + GitHub Pages; gestion de versions Git (issues/branches/PR).

• Assets: images optimisées (formats adaptés), icônes (Font Awesome ou SVG selon maquette).

11. Résultat final

• Site OhMyFood fidèle aux maquettes/prototype, responsive mobile‑first, 4 restaurants intégrés à partir d’un template commun.

• Animations soignées, performantes et documentées (loader, coeurs favoris, apparitions, sélection des plats, CTA).

• Code propre et validé (HTML/CSS), accessibilité de base assurée, structure SASS claire et maintenable, projet livré et publié (GitHub Pages).