Livrable 03
IA client
Mobile d'abord. Découverte sans compte. Une action = un pas de plus vers une décision.
Carte des espaces
/:city accueil contextuel /:city/maintenant Now /:city/ce-soir Tonight /:city/ce-week-end Weekend /:city/recherche noindex /:city/carte Live Map /:city/soiree plan (P1) /:city/soiree/:planId mode nuit (P1) /:city/restaurants|bars|... catégorie seulement si elle existe dans city_categories et qu'elle est indexable /:city/zones/:slug seule URL géographique publique (un quartier est une zone) /:city/etablissements/:slug venue /:city/evenements/:slug event /:city/offres/:slug offer (si page utile) /:city/guides/:slug CMS /compte/* favoris, suivis, préférences, consentements
Le préfixe est le slug de ville, jamais un dossier de code par ville.
Accueil — hiérarchie, pas un flux infini
1. Ville courante (changement de ville explicite, pas de géoloc silencieuse). 2. Recherche universelle. 3. Navigation contextuelle (stable + entrées variables, voir nav). 4. Modules dans cet ordre de priorité quand les données existent :
- Maintenant
- Ce soir
- Ce week-end
- Autour de moi (seulement si géoloc opt-in ou zone choisie)
- Carte
- Créer ma soirée (P1 ; masqué par flag
AI_planner/night_plan) - Tendances uniquement si le signal est défini (interactions réelles agrégées). Sinon le module n'existe pas.
- Nouveautés (tri
published_at, pas « populaire ») - Offres actives
- Événements
- Restaurants / bars / activités selon City DNA
Un module sans ligne ne s'affiche pas ou affiche l'empty state honnête. Il ne se remplit pas avec des suggestions inventées.
Décisions
D1 — Contexte avant catalogue
- Choix : Now / Tonight / Weekend sont des vues de premier niveau, les catégories sont secondaires.
- Alternatives : home = grille de catégories ; home = carte plein écran.
- Compromis : la carte est centrale mais pas le seul entrée : la liste reste utilisable si les tuiles échouent.
- Risques : trop de modules. Règle : 7 blocs visibles max avant scroll profond ; le reste est navigation.
- Multi-ville : l'ordre des catégories vient de
editorial.priority_categorieset des flags.
D2 — Carte et liste sont une seule recherche
- Choix : même requête, même viewport, sélection partagée.
- Alternatives : deux moteurs ; carte décorative.
- Risques : désync. Un store client unique (
query,bbox,selectedId).
D3 — Fiche lieu
Sections : Maintenant · Ce soir · À venir · Offres · Autour · Similaire. Champs : identité, zone, géométrie, médias avec droits, horaires, statut d'ouverture, gamme de prix si connue, attributs (terrasse, musique, accessibilité) seulement si sourcés, réservation (lien, pas une fausse dispo), provenance, last_verified_at.
Similaire = même catégorie + distance + ouvert si possible. Pas de « les gens ont aussi aimé » sans signal. Au MVP : similarité catégorielle + distance, expliquée.
D4 — Fiche événement
Titre, créneau (début/fin, y compris après minuit), lieu, zone, prix si connu, billetterie (lien externe au MVP), restrictions, âge minimum si fourni, accessibilité si connue, organisateur, source, dernière vérif. Événement passé : plus dans Now/Tonight ; la page peut rester en archive noindex ou indexée si elle a un intérêt documentaire — défaut : indexée seulement si date future ou contenu éditorial lié, sinon noindex pour éviter les pages mortes. À trancher en SEO : défaut conservateur = page passée en noindex.
D5 — Favoris et suivis (P1)
Suivre un lieu, un événement, une zone, une catégorie. Notification seulement opt-in, centre de préférences, plafond de fréquence. Pas au MVP si le socle live n'est pas stable — le modèle est prévu, l'envoi non.
Principes UX
1. Un tap de plus vers la décision. 2. Maintenant avant l'archive. 3. Confiance visible (phrase de provenance, pas un score opaque). 4. Pas d'impasse : empty state → prochaine fenêtre temporelle réelle. 5. Pas d'inscription obligatoire.
Flags
- « Autour de moi » : géoloc
LEGAL REVIEW+ opt-in. Calcul de distance côté client autant que possible ; ne pas stocker la trace précise. - Tendances : interdites tant que la taxonomie analytics n'a pas de volume réel.
IMPLEMENTED — NOT YET VALIDATEDle jour où le module existe sans trafic.