Repository navigation
Admin Web
Statut : 🟢 Cadré, écrans de référence validés · Màj : 2026-10-09 · Décisions : D-085, D-086 · Epic : #5
L'admin web est l'outil interne de l'équipe Widoo : publier, modérer et maintenir le catalogue, gérer les utilisateurs, les partenaires et les réglages, sans jamais toucher à la base. Il remplace le résumé A-01 à A-05 de Ecrans.
-
Stack (choix d'Ilan du 2026-10-09) : Next.js (App Router) dans
apps/admin, comme le site (Site-Web), Tailwind, composants shadcn/ui thémés avectokens.json(Plus Jakarta Sans,blue,blue-ink,surface,ink,muted, rayons Widoo). Tout le rendu des données se fait côté client, derrière la connexion : aucune donnée en rendu serveur, aucune page publique. Client typépackages/api-client, comme le mobile. -
Hébergement : Cloud Run
europe-west9, suradmin.widooapp.com(domaine à acheter), en-têtesX-Robots-Tag: noindexetCache-Control: no-store. -
Sécurité : l'API vérifie le rôle à chaque appel
/admin/*; l'admin ne fait que cacher ce que le rôle ne permet pas. Connexion Google (Firebase Auth) et e-mail par lien, refusée à un compte sans rôle d'équipe ou suspendu. Double authentification obligatoire pour l'admin (D-087) : code d'une app d'authentification (TOTP, Firebase Authentication avec Identity Platform), activée à la première connexion ; l'API refuse/admin/*à un jeton sans second facteur (403mfa_required). Session de 12 h au plus, puis A-01 ; nouvelle vérification du code si la dernière date de plus de 10 min avant une action sensible (rôle, suppression ou suspension d'un compte, réglages). Session expirée : retour à A-01 en gardant l'adresse demandée. -
Journal : toute action qui écrit est enregistrée dans
admin_actions(A-12), avec son auteur, sa cible, l'état avant et après, et le motif. - Écran : ordinateur d'abord (1280 px et plus), utilisable à 1024 px ; pas de version téléphone. Français seul. Accessibilité AA : contrastes, navigation au clavier, focus visible, libellés.
- Design (choix d'Ilan) : specs détaillées ici ; écrans de référence validés le 2026-10-09 (#339, D-086) : coque, A-01, A-02, A-05, modèles (tableau, panneau de détail, confirmation avec motif, toast) et thème shadcn, décrits dans Ecrans › Admin web, sur le canevas Widoo — Admin. Les autres écrans suivent ces modèles.
Rôles existants (users.role) : user, editor (équipe contenu, Sarah), moderator, admin (super admin, Ilan). Un rôle se change seulement dans A-06, par un admin.
| Section | editor | moderator | admin |
|---|---|---|---|
| A-05 Tableau de bord | oui | oui | oui |
| A-02 File de modération | non | oui | oui |
| A-03 Signalements et avis | non | oui | oui |
| A-04 Lieux et parcours | lieux et parcours de l'équipe | lecture, dépublication | tout, import CSV |
| A-06 Utilisateurs | non | lecture, suspension | tout |
| A-07 Brouillons IA | oui | non | oui |
| A-08 Traductions | oui | oui | oui |
| A-09 Affiliation | oui | non | oui |
| A-10 Partenaires B2B | oui | non | oui |
| A-11 Réglages | non | non | oui |
| A-12 Journal | non | non | oui |
| A-13 Support | non | oui | oui |
- Coque : navigation latérale fixe (logo Widoo, sections du rôle, compteurs « à traiter » sur Modération, Signalements, Support, Brouillons IA, Traductions), en-tête avec le titre de la page et le compte (prénom, rôle, déconnexion).
- Listes : tableau de 50 lignes, pagination par curseur, tri par colonne, recherche, filtres en chips ; filtres, tri et page dans l'adresse (lien partageable). États : chargement (squelettes), vide (une phrase et l'action utile), erreur (message et « Réessayer »).
- Détails : panneau à droite de la liste (on garde la liste en vue) ou page dédiée pour les objets riches (parcours, utilisateur). Liens entre objets partout : auteur → A-06, lieu → A-04, parcours → A-04.
- Actions : bouton principal à droite ; toute action destructive (refuser, fermer un lieu, suspendre, supprimer) ouvre une confirmation qui nomme l'effet, avec un motif obligatoire (liste codifiée + texte). Résultat en toast. Aucune action en masse au lancement, sauf l'import CSV.
- Dates : relatives jusqu'à 7 jours (« il y a 3 h »), puis absolues ; heure de Paris.
Logo, « Connexion à l'admin Widoo », Google et e-mail. Compte sans rôle d'équipe : « Ce compte n'a pas accès à l'admin. » ; compte suspendu : « Ce compte est suspendu. ». Après connexion : A-05, ou la page demandée.
- À traiter : parcours en attente (nombre et plus ancien, rouge au-delà de 72 h), signalements de lieux et de parcours ouverts, messages de support non traités, brouillons IA à relire, traductions en échec ; chaque tuile ouvre la liste filtrée. Une tuile n'apparaît que si le rôle y a accès.
- Catalogue : parcours publiés (dont Premium, dont équipe Widoo), lieux, villes où des parcours existent, créateurs actifs sur 30 jours.
- Utilisateurs : inscrits, nouveaux sur 7 jours, abonnés et pass actifs, déblocages sur 30 jours.
- Les analyses détaillées restent dans PostHog et RevenueCat : liens directs vers les deux tableaux de bord.
-
Liste : parcours
pendingetchanges_requested, du plus ancien au plus récent : titre, auteur (créateur certifié ou non), ville, étapes, durée, score de cohérence, lieux non vérifiés, ancienneté en file (rouge au-delà de 72 h), première soumission ou révision. Filtres : statut, ville, ancienneté, révision. - Détail : fiche complète comme dans l'app (photos, textes, étapes, horaires, budget, liens de réservation avec « Lien affilié »), carte des étapes, avertissements de l'orchestration, règles de Creation-et-Moderation à cocher, Premium calculé (4 étapes ou plus), pour une révision la différence avec la version publiée, historique de l'auteur (parcours publiés, refusés, signalements).
-
Actions : Publier ; Demander des modifications (message à l'auteur, obligatoire) ; Refuser (motif codifié et message). L'auteur est notifié ; l'action entre dans
moderation_actionsetadmin_actions.
Trois onglets.
-
Lieux : signalements groupés par lieu (nombre, motifs, parcours concernés, confirmations récentes, statut du lieu). Actions : Marquer vérifié (remet les compteurs à zéro), Corriger le lieu (ouvre A-04), Fermer le lieu (parcours concernés en
needs_fix, auteurs notifiés), Rejeter le signalement. -
Parcours :
route_reportsouverts (D-056), avec l'étape pourplace_changed. Actions : Accepter (retour au signaleur, correction ou dépublication), Rejeter, avec note. Les parcours publiés passés sous 2,5 de moyenne avec au moins 5 avis arrivent ici en « Note basse » (low_rating, décision d'Ilan, D-086) : Garder, Demander des modifications, Dépublier. - Avis : derniers avis avec commentaire, filtrables par note et par parcours. Action : Masquer le commentaire (motif), Rétablir.
- Lieux : recherche par nom ou adresse ; colonnes nom, catégorie, ville, statut, dernière vérification, signalements ouverts, parcours qui l'utilisent. Fiche : nom, adresse, position sur une carte (épingle déplaçable), catégorie, horaires, lien de réservation partenaire de Widoo (A-09), statut. Création d'un lieu à la main.
- Import CSV (admin) : modèle téléchargeable, aperçu ligne par ligne avant validation, lignes invalides expliquées, doublons signalés (même nom à moins de 50 m).
-
Parcours : recherche par titre ou auteur ; colonnes titre, auteur, ville, statut, accès (gratuit ou Premium), note, avis, dernière modification. Fiche en lecture comme A-02 ; actions : Dépublier (motif) et Republier, Réassigner à l'équipe Widoo, ouvrir dans l'app. L'édition des textes et des étapes se fait dans l'éditeur de l'app (comptes
editor), pas dans l'admin.
- Liste : recherche par e-mail, prénom ou identifiant ; colonnes prénom, e-mail, rôle, formule (gratuit, abonnement, pass et sa fin), parcours créés, inscription, statut (actif, suspendu).
- Fiche : profil, rôle, formule et son origine (store ou offerte), parcours débloqués, parcours créés et leurs statuts, signalements faits et reçus, avis, messages de support, Créateur certifié (calculé et choix de l'équipe, D-023).
-
Actions : Changer le rôle (admin) ; Suspendre ou Réactiver (motif ; un compte suspendu ne se connecte plus, ses parcours restent publiés, son profil public est masqué) ; Offrir Premium jusqu'à une date ou Offrir un parcours (support, origine
gift, sans passer par le store) ; Attribuer ou retirer Créateur certifié ; Exporter les données (RGPD, même contenu que l'export de l'app) ; Supprimer le compte (même règle que dans l'app : parcours et avis gardés, signés « Membre Widoo »). Un admin ne peut ni se suspendre, ni se supprimer, ni retirer son propre rôle.
- Générer : thème, quartier ou zone (recherche géographique), durée, ambiance, nombre de brouillons (5 au plus) ; la génération tourne en tâche de fond (#247).
-
Liste : brouillons
source = ai: titre, zone, étapes, lieux non vérifiés, date, personne à qui il est confié. Actions : Confier à un éditeur, Ouvrir dans l'app (l'éditeur vérifie chaque lieu, corrige et publie), Supprimer. - Suivi : part des lieux corrigés par brouillon, pour mesurer la qualité de la génération.
-
Liste : traductions de parcours (
route_translations) en échec ou corrigées, filtre par statut et par langue ; un parcours se cherche aussi par titre. - Détail : chaque champ côte à côte, original et traduction. Actions : Relancer la traduction ; Corriger un champ à la main (la correction reste jusqu'à la prochaine révision publiée, puis la traduction est refaite et la correction perdue, ce qui est annoncé). Avis : relancer seulement.
- Programmes : nom, réseau, commission, durée du cookie, actif ; suivi des inscriptions de #212.
- Liens partenaires de Widoo : par lieu (A-04), le lien du programme ; il ne s'affiche que quand le créateur n'a pas mis le sien (D-048).
- Étapes réservables : liste des étapes avec un lien de réservation, d'où il vient (créateur, créateur affilié, partenaire Widoo), et ses clics sur 30 jours ; filtre « lieux réservables sans lien partenaire », pour savoir où s'inscrire en priorité.
- Les clics sont comptés par l'API : le bouton « Réserver » passe par
/go/:stepId, qui enregistre le clic et redirige.
Hôtels, conciergeries et offices de tourisme qui paient un abonnement pour des parcours à leur nom (business model du 2026-09-30).
- Liste : nom, type, ville, statut (prospect, actif, suspendu, résilié), prix mensuel HT, début, parcours choisis.
-
Fiche : contact (nom, e-mail, téléphone), adresse, notes, source de mesure
b2b-<slug>, sélection de 3 à 10 parcours dans l'ordre, lien de la page partenaire du site et ses QR codes (A-10 ne fait que les fournir ; la page est construite sur le site), clics et installations venus de cette source (PostHog). - Facturation hors admin au lancement (devis et factures à la main) ; un statut « actif » suppose un contrat signé.
Les valeurs que l'équipe change sans redéploiement (table settings) : seuils Premium (premium.min_steps, premium.min_ratings, premium.min_rating), parcours en relecture par auteur (max_pending_routes), certification, vérification des lieux, recherche et recommandation. Chaque réglage : libellé, explication en une phrase, valeur, bornes ; modification avec confirmation et motif, effet sous une minute ; historique (qui, quand, avant, après) depuis A-12.
Toutes les actions d'écriture de l'admin, de la plus récente à la plus ancienne : date, auteur, action, cible (lien), motif ; détail avec l'état avant et après. Filtres : auteur, type d'action, type de cible, période. Lecture seule, rien ne s'y efface.
Messages du formulaire « Nous écrire » (E-19, D-063) : sujet, message, e-mail de réponse, compte (lien A-06), version de l'app, appareil, langue, date, statut. Actions : Répondre (e-mail Brevo au modèle « réponse du support », E-22, dans la langue de l'utilisateur ; la réponse est gardée dans la fiche), Marquer traité.
Aucune gestion de ville dans l'admin : tout le monde peut créer des parcours dans sa ville ; seul le marketing se concentre sur Paris. La ville d'un lieu et d'un parcours est déduite automatiquement de sa position (géocodage inverse) et créée au besoin ; la recherche se fait par zone, sans filtre de ville. Voir Perimetre-MVP et #340.
Nouveautés au Modele-de-Donnees et à l'API : admin_actions, users.suspended_at, users.suspension_reason, users.plan_source, routes.source, route_translations.status et corrections manuelles, affiliate_programs, places.partner_booking_url, booking_clicks, b2b_clients, b2b_client_routes, réponses de support_messages.
#52 socle, coque, connexion et rôles · #53 modération · #54 signalements et avis · #55 lieux, parcours, import, tableau de bord · utilisateurs, brouillons IA, traductions, affiliation, B2B, réglages, journal, support : voir l'epic #5.
Produit
- Vision-Produit
- Perimetre-MVP
- Personas-et-Parcours-Utilisateurs
- Ecrans
- Filtres-et-Recherche
- Orchestration
- Creation-et-Moderation
- Admin-Web
- Compte-et-Monetisation
- Direction-Artistique
Technique
- Modele-de-Donnees
- Architecture-Technique
- Site-Web
- API
- Securite-et-RGPD
- Conditions-d-utilisation
- Politique-de-confidentialite
- Analytics
Pilotage