5
ARTDANTECH

Kasa

Refonte Kasa en React. Application SPA responsive basée sur un JSON local, routing avec React Router, composants modulaires (Cards, Slideshow, Collapse), gestion des erreurs (404/id invalide) et styles en Sass, fidèles aux maquettes Figma et aux prototypes.

1. Contexte

• Client: Kasa, leader français de location d’appartements entre particuliers (500+ annonces/jour).

• Équipe: Artdantech, Laura (CTO), Paul (designer Figma).

• Livrables: application React complète (Home, Fiche logement, À propos, 404), composants réutilisables, routing, logique UI (slideshow, collapse), styles Sass, animations (collapse), responsive.

• Point de départ: maquettes Figma + prototypes (animations), fichier JSON (20 logements), coding guidelines Kasa, choix du bundler (CRA recommandé, Vite possible).

2. Besoin

• Démarrer et structurer un projet React, consommer un JSON local comme source de vérité (en attendant l’API), implémenter les écrans et comportements décrits par les maquettes/brief.

• Assurer une UX robuste: carrousel infini, collapses animés, gestion d’URL erronées, rendering performant, responsive.

3. Client

• Utilisateurs finaux (desktop/mobile) en recherche d’hébergement.

• Équipe produit/design (Laura, Paul) pour la conformité au brief, guidelines et protos Figma.

4. Objectifs

4.1 Fonctionnels

• Pages: Accueil (liste des logements), Fiche logement (détails + carousel + collapses), À propos (collapses), 404.

• Slideshow: navigation infinie, hauteur fixe, images centrées/croppées, numérotation actuelle/total, masqué si une seule image.

• Collapse: fermé par défaut, toggle au clic, animation d’ouverture/fermeture.

• Routing: navigation via Header, redirection 404 pour route inconnue et id de logement invalide.

4.2 Techniques

• React + React Router v6+, Sass (obligatoire sur parcours Développeur Web; recommandé sinon).

• Architecture composants, props validées (PropTypes), clés stables pour les listes.

• Accessibilité: alt images, aria-expanded pour Collapse, boutons de navigation du Slideshow accessibles clavier, focus visibles.

• Responsive conforme Figma (mobile, tablette, desktop).

5. Contraintes / défis

• Pas d’API: utiliser le JSON local et structurer le code pour passer facilement à une API plus tard.

• Fidélité maquettes/protos (espacements, tailles, animations).

• Robustesse du routing (404/id), états limites du Slideshow (1 image), performance (images lourdes).

• Sass organisé (variables, mixins), animations CSS douces et accessibles (prefers-reduced-motion).

6. Processus / méthodologie

6.1 Analyse

• Parcourir Figma (exports logos/icônes, tokens couleur/typo/espacements, comportements animés du Collapse).

• Lire les coding guidelines Kasa (naming, structure, outils).

• Explorer le JSON: structure attendue (ex: id, title, cover, pictures[], description, host{name, picture}, rating, location, tags[], equipments[]).

6.2 Découpage en issues (GitHub)

• Setup: init React (CRA ou Vite), intégration Sass, ESLint/Prettier/Stylelint, JSON ajouté.

• Router: installation React Router, routes de base + page 404, layout (Header/Footer).

• Home: composants Banner, Card, Grid; liste depuis JSON; liens vers fiches.

• About: composant Collapse générique + contenus.

• Lodging: chargement par :id, Slideshow, TagList, Host, Rating, deux Collapses (Description, Équipements).

• Erreurs: id invalide → 404.

• Styles: structure Sass, variables, mixins, responsive.

• Finitions: animations Collapse, a11y, tests manuels, déploiement (GH Pages/Netlify/Vercel).

6.3 Architecture et logique

• Arborescence (exemple): cf github

6.4 Choix techniques (justification)

• React Router v6 pour un routing simple et clair (Navigate/useNavigate pour redirections).

• Sass modulaire pour la maintenabilité (variables couleurs/typo/spacings; mixins breakpoints).

• PropTypes pour sécuriser les props en dev; composants atomiques réutilisables (Card, Tag, Rating).

• Animations CSS performantes (transform/opacity), respect de prefers-reduced-motion.

6.5 Flux principaux

• Accueil → chargement JSON → map en Cards → clic Card → Lodging/:id.

• Lodging → Slideshow (prev/next infini), Tags, Rating, Host, Collapses (Description/Équipements).

• About → liste de Collapses (ouverts/fermés au clic).

• Route inconnue/id invalide → 404.

6.6 Tests et qualité

• UI: pixel‑perfect vs Figma (espacements, tailles, réactivité).

• Routing: toutes routes → bonnes pages; id inconnu → 404; navigation via Header ok.

• Slideshow: états limites (1 image), bouclage aux extrémités, numérotation correcte.

• Collapse: fermé par défaut, animation, a11y (aria-expanded, clavier).

• Accessibilité: alt pertinents, contrastes, focus; test prefers-reduced-motion.

• Validation: absence de warnings (keys de listes), ESLint/Prettier, build de prod ok.

• Responsive: points de rupture (mobile/tablette/desktop) fidèles aux maquettes.

7. Analyse

• En isolant les comportements clés (Slideshow, Collapse) dans des composants autonomes et testables, et en structurant Sass autour de tokens/mixins, on garantit une app lisible, extensible et prête pour un back API futur (remplacement du JSON par fetch). Le routing robuste sécurise l’UX (404/id).

8. Choix techniques

• CRA ou Vite (démarrage rapide; Vite pour builds plus rapides).

• React Router v6; Sass avec architecture légère (abstracts/base/components/pages).

• PropTypes, ESLint/Prettier, Stylelint; deployment Netlify/Vercel ou GH Pages.

9. Logique de résolution

• Initialiser l’app + Sass → installer Router → poser Layout + routes → implémenter Home (Cards) → About (Collapse générique) → Lodging (Slideshow + sections) → gérer 404/id → animations + a11y → responsive → QA finale et déploiement.

10. Stack utilisée

• Front: React 18+, React Router v6+, Sass.

• Outils: ESLint, Prettier, Stylelint, GitHub, DevTools; déploiement Netlify/Vercel/GH Pages.

• Données: JSON local (remplaçable par API ultérieure).

11. Résultat final

• Application Kasa fidèle aux maquettes Figma et aux prototypes: Home, À propos, Fiche logement, 404.

• Composants réutilisables (Slideshow infini, Collapse animé), routing robuste, Sass structuré, responsive complet.

• Code propre, validé et prêt pour intégration future avec un back-end NodeJS.