Skip to content

Admin Web

Ilan Amzallag edited this page Oct 9, 2026 · 3 revisions

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.

Principes

  • 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 avec tokens.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, sur admin.widooapp.com (domaine à acheter), en-têtes X-Robots-Tag: noindex et Cache-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 (403 mfa_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

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

Modèles communs

  • 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.

Écrans

A-01 — Connexion

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.

A-05 — Tableau de bord

  • À 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.

A-02 — File de modération

  • Liste : parcours pending et changes_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_actions et admin_actions.

A-03 — Signalements et avis

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_reports ouverts (D-056), avec l'étape pour place_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.

A-04 — Lieux et parcours

  • 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.

A-06 — Utilisateurs

  • 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.

A-07 — Brouillons IA

  • 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.

A-08 — Traductions

  • 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.

A-09 — Affiliation

  • 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.

A-10 — Partenaires B2B

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é.

A-11 — Réglages

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.

A-12 — Journal

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.

A-13 — Support

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é.

Villes (décision d'Ilan du 2026-10-09)

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.

Données et API

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.

Tickets

#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.

Clone this wiki locally