Pilote Orléans · configuration, pas un fork · aucun lieu inventé

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_categories et 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 VALIDATED le jour où le module existe sans trafic.