Page vitrine pré-connexion/inscription à la racine (/) #41
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Aujourd'hui, l'app n'a strictement aucune page publique : visiter
/déconnecté redirige immédiatement vers
/login(RequireAuth.tsx:19-21,return <Navigate to="/login" replace />;) — un visiteur qui ne connaîtpas déjà l'app tombe directement sur un formulaire de connexion, sans rien
qui explique ce qu'elle fait. Le but : une vraie page de présentation
("vitrine") avant la connexion/inscription.
Décisions validées avec l'utilisateur
/— contenu conditionnel selon l'état de connexion (vitrine si déconnecté, planning si connecté), pas une route dédiée séparéeConception — routage
/reste nichée exactement comme aujourd'hui sous<Route element={<RequireAuth><AppLayout /></RequireAuth>}><Route path="/" element={<PlanningPage />} />(
App.tsx:66-93, aucun changement de la table de routes). Le seulchangement :
RequireAuth.tsxdevient sensible au chemin courant(
useLocation()) pour ce cas précis, sans toucher son comportement pourtoutes les autres routes qu'il protège :
Pourquoi ça marche sans toucher
AppLayoutni la table de routes :childrende
RequireAuthest<AppLayout />— tant que la branche!user && pathname === "/"renvoie<LandingPage />directement,AppLayout(et donc la sidebar) ne monte jamais pour un visiteur déconnecté sur
/. Unefois connecté,
{children}reprend le dessus etAppLayouts'Outlete versPlanningPageexactement comme aujourd'hui.RedirectIfAuthenticated(
/login,/signup) n'a besoin d'aucun changement — un visiteur déjàconnecté qui y navigue directement continue d'être renvoyé vers
/, où ilretombe sur le planning comme avant.
Documenter cette exception dans le JSDoc de
RequireAuth(pourquoi ce gardepar ailleurs générique importe une page précise) et dans
specs/frontend-architecture.md's description du routage racine.Conception — contenu de la page
Nouveau
apps/web/src/pages/landing/LandingPage.tsx+landing-page.scss(tokens de
_theme.scssréutilisés, cohérent avec le reste de l'app — pasune charte graphique à part). Aucune nouvelle dépendance : ni librairie
d'illustration, ni asset externe — dans l'esprit déjà établi par
TechStepCorrectionPopover.tsxqui dessine ses propres icônes SVG "stroke-based"pour rester dans le langage visuel de
lucide-reactplutôt que d'importer unjeu d'icônes de plus.
affiner en revue de PR, pas figé ici) + illustration héro en SVG dessiné
à la main (même style ligne/trait que les icônes existantes, pas de
fichier image externe) + deux CTA : "Se connecter" (
/login), "Créer uncompte" (
/signup).description), construites sur les capacités réelles déjà documentées
dans le README plutôt qu'inventées : planification hebdomadaire du
planning, import de recettes depuis plusieurs sources externes
(TheMealDB/Marmiton/750g/Manger Bouger), suivi allergies/régimes/ingrédients
détestés, foyer partagé à plusieurs (invitation par code).
la grille du planning, une fiche recette avec surlignage des techniques,
la liste de courses. Nouveau dossier
apps/web/src/assets/(n'existe pasencore) pour ces fichiers image, importés normalement via Vite.
Nouvelles clés i18n sous un namespace
landing.*dansapps/web/src/locales/fr/translation.json(titre, accroche, chaquefonctionnalité, libellés des CTA) — jamais de texte en dur dans le JSX,
même convention que le reste de l'app.
Bonus peu coûteux, à faire dans la foulée :
apps/web/index.htmln'aaujourd'hui ni favicon ni meta description (
<title>batchCooking</title>seul) — pertinent maintenant que
/est une vraie page publique/partageable.Ajouter un favicon simple (même monogramme "bC" que la sidebar, en SVG) et
un
<meta name="description">.Fichiers à toucher
apps/web/src/features/auth/RequireAuth.tsx— la branchepathname === "/"ci-dessus.apps/web/src/pages/landing/LandingPage.tsx+landing-page.scss(nouveaux).apps/web/src/assets/(nouveau dossier) — captures d'écran.apps/web/src/locales/fr/translation.json— namespacelanding.*.apps/web/index.html— favicon + meta description.specs/frontend-architecture.md— routage racine.Tests
Cypress e2e (Gherkin, nouveau
.featureou extension d'un existant) :visiteur non connecté sur
/voit la vitrine (titre, CTA) ; clique "Seconnecter" → atterrit sur
/login; clique "Créer un compte" → atterrit sur/signup; un visiteur déjà connecté qui force/voit bien le planning,pas la vitrine (non-régression du comportement actuel). Pas la peine de
tester le rendu pixel des sections visuelles — comportement/navigation
seulement, même posture que le reste de la suite Cypress de ce repo.
Hors scope
<meta description>de base suffit pour cette itération.fr) existeaujourd'hui dans toute l'app, pas de raison de commencer ici.
🤖 Filed by Claude Code