Repository navigation
Compte et Monetisation
Statut : 🟡 Brouillon · Màj : 2026-10-14 · Tickets : #383 (brouillon, à valider)
Consultation intégrale sans compte. Le compte est le prix de l'engagement, jamais celui de la découverte : aucune barrière avant la fiche parcours ; le compte est demandé au premier favori, à la première programmation, à la première création ou au premier signalement, et l'action reprend après la connexion (PU-02 dans Personas-et-Parcours-Utilisateurs). Le freemium est dans le MVP (décision d'Ilan, 21 septembre 2026), recentré le 24 septembre 2026 (D-023) : rien n'est limité dans l'usage, favoris et programmations compris ; Premium ouvre les parcours Premium et la création au-delà du premier parcours, offert à tous.
| Fonction | Sans compte | Avec compte |
|---|---|---|
| Carte, recherche, filtres, météo | oui | oui |
| Fiche parcours complète, timeline, étapes | oui | oui |
| Partager un parcours (lien) | oui | oui |
| Ouvrir dans Google Maps | non : pas depuis la fiche, et le lancement demande un compte (D-014, D-029) | une fois le parcours lancé (E-07) |
| Favoris | — | oui, sans limite |
| Programmer, notifications | — | oui, sans limite |
| Go avec suivi, notation, historique | — | oui |
Parcours Premium (access = premium) |
fiche sans le détail des étapes 2 et suivantes (D-014) | idem en gratuit ; fiche complète, Programmer et Go en Premium |
| Créer un parcours | — | oui, sans limite (D-023 révisé, décision d'Ilan du 2026-09-28) |
| Confirmer ou signaler un lieu | — | oui |
| Profil public de créateur | consultation | oui |
Un identifiant anonyme d'appareil sert à l'analytics et aux recherches récentes locales ; il est rattaché au compte à la connexion.
- Apple (obligatoire sur iOS dès qu'une connexion tierce est proposée), Google, e-mail avec lien magique.
- Firebase Authentication comme fournisseur d'identité ; l'API vérifie le jeton Firebase et gère ses propres utilisateurs en base (id interne, rôle, plan).
- Rôles :
user,editor(équipe Widoo, publie sans modération),moderator,admin. - Première connexion : prénom ou pseudo, prérempli par Apple ou Google et alors facultatif (règle de l'App Review), obligatoire pour une connexion par e-mail (E-10, D-025).
- Suppression de compte depuis l'app (exigence des stores), sans choix (décision d'Ilan, D-025) : les parcours publiés restent en ligne, signés « Membre Widoo », sans lien vers le profil, avec leurs avis ; les avis que la personne a laissés sur d'autres parcours restent aussi, signés « Membre Widoo » (décision d'Ilan du 2026-09-28) ; profil, photo, anecdotes, favoris, programmations, historique, brouillons, parcours privés et signaux sont supprimés. Confirmation par alerte système ; une reconnexion peut être demandée si la session est ancienne. L'abonnement du store n'est pas résilié avec le compte : la page de suppression le rappelle aux abonnés. Après suppression, la même identité Apple, Google ou e-mail peut aussitôt recréer un compte, qui repart de zéro (décision d'Ilan, D-027).
Les champs de monétisation (users.plan, routes.access, steps.booking_provider, routes.sponsored) existent dès le premier schéma, pour éviter une migration le jour où ils servent.
Révision du 2026-09-28 (décision d'Ilan du 2026-09-28) : la création de parcours devient gratuite et sans limite (les créateurs sont l'offre, la modération filtre) ; Premium ne porte plus que l'accès aux parcours Premium, en trois formules : abonnement (mensuel, annuel), pass 7 jours sans renouvellement, déblocage d'un parcours à l'unité. Les créateurs seront rémunérés après le MVP (affiliation et parcours Premium). Écrans à reprendre dans le ticket design de la révision (#210 : page Premium E-17 et fiche E-05 validées le 2026-09-29, D-072 ; pass en cours, compte facultatif, création et site dans les planches suivantes).
| Gratuit | Premium | |
|---|---|---|
| Catalogue, fiches, recherche, filtres | tout | tout |
| Favoris, programmations, Go | sans limite | sans limite |
| Parcours Premium (Widoo ou utilisateurs) | fiche sans le détail des étapes 2 et suivantes, non programmables | complets et programmables |
| Création de parcours | sans limite | sans limite |
| Vérification, notation | oui | oui |
- Formules Premium (révision du 2026-09-28) : abonnement mensuel et annuel ; pass 7 jours, achat non renouvelable (accès Premium complet pendant 7 jours) ; déblocage d'un parcours à l'unité, achat définitif pour ce parcours (
route_unlocks). Prix (fixés le 2026-09-28 sur délégation d'Ilan, à partir de l'abonnement à 3,99 € par mois) : pass 7 jours 2,99 €, déblocage d'un parcours 1,99 € ; deux déblocages coûtent autant qu'un mois d'abonnement, ce qui oriente les réguliers vers l'abonnement et laisse le pass aux séjours courts. - Abonnement mensuel et annuel par achat intégré (Apple et Google l'imposent pour du contenu numérique). Gestion via RevenueCat pour ne pas réimplémenter les reçus, les renouvellements et la restauration ; l'API reçoit les webhooks RevenueCat et met à jour
users.planetplan_expires_at. - Prix décidés (21 septembre 2026, prix mensuel révisé le 25 septembre, D-040) : 3,99 € par mois, 29,99 € par an. Le prix n'est jamais en dur dans l'app, il vient du store.
- Essai gratuit de 7 jours sur les deux abonnements (décision d'Ilan, 25 septembre 2026, D-040) : offre d'introduction des stores (une fois par compte Apple ou Google), rappel et résiliation gérés par le store ; sans droit à l'essai, le bouton devient « S'abonner ». Les deux produits RevenueCat portent l'offre.
- Issues de l'achat (D-044) : annulation dans la fenêtre du store sans message ; échec en toast « Achat impossible » avec « Réessayer » ; achat en attente d'une validation (contrôle parental, paiement différé) : Premium s'active à la validation, par le webhook RevenueCat ; « Restaurer les achats » passe par la restauration de RevenueCat et rend l'abonnement et le pass ; les parcours achetés seuls sont rattachés au compte Widoo (
route_unlocks) et ne dépendent pas de la restauration du store (D-073) ; toast si rien n'est trouvé ; hors connexion, achat et restauration désactivés. - Présentation (D-072, E-17) : les trois formules sur le même plan, le pass mis en avant pour les visiteurs (téléphone dans une autre langue que le français ou région hors de France : pass en tête et présélectionné ; sinon l'annuel), et « Seulement ce parcours » depuis un parcours ; l'encart de la fiche d'un parcours Premium vend le parcours à l'unité directement. Acheter ne demande pas de compte (App Store, règle 5.1.1(v)) ; un achat fait sans compte vit sur le téléphone et le compte du store, et se rattache au compte Widoo dès la connexion. Juste après un parcours débloqué sans compte, la sheet de connexion propose de créer un compte « pour le garder » (recommandation du chef de projet reprise par Ilan, D-073) : sans compte, le déblocage reste sur le téléphone. Rien après un pass ou un abonnement, qui se restaurent par le store.
- L'écran Premium (E-17) s'ouvre depuis « Débloquer avec Premium » et l'encart d'un parcours Premium, et depuis l'encart Widoo Premium (en tête des Réglages, en bas de mon profil et de Modifier le profil, pour un compte gratuit), avec la raison. Rien n'est bloqué avant. Aucune relance push au MVP : la fin du pass est annoncée par un toast à la première ouverture qui suit, avec « Prolonger » (D-073). Pendant un pass, les Réglages montrent sa date de fin et « Prolonger » ; un nouveau pass s'ajoute au bout du premier ; programmer un parcours Premium après la fin du pass affiche une alerte avec « Débloquer ce parcours ».
- Création (révisée le 2026-09-28) : gratuite et sans limite ; seule limite, anti-spam : 3 parcours en attente de modération au plus par compte (
settings.max_pending_routes), au-delàPOST /routes/:id/submitrépond 429rate_limitedet l'app le dit dans « Avant de soumettre » (E-14, D-073). Ancienne règle, abandonnée : un compte gratuit avait droit à un parcours, au-delàPOST /routesrépondait 402premium_required(details.reason = create_limit). Compte tout parcours non supprimé, brouillon compris ; supprimer son unique parcours libère la place. La limite est danssettings(free.max_routes, 1). - Un abonné qui repasse en gratuit, ou dont le pass 7 jours se termine, garde tous ses parcours, publiés ou non, et continue d'en créer (création gratuite depuis le 2026-09-28) ; les parcours Premium redeviennent verrouillés, sauf ceux débloqués à l'unité. Ses sorties Premium déjà programmées restent dans À venir, sans départ ni changement de date : « Votre sortie » propose « Débloquer avec Premium », le déblocage du parcours seul et le pass (D-038, révisé en D-073).
- Signature et Premium sont deux notions distinctes (D-014, précision d'Ilan) : Signature = tout parcours créé par l'équipe Widoo (auteur au rôle
editor), badge bleu ; Premium = parcours réservé aux abonnés,routes.access = premium, badge encre à couronne dorée, qu'il soit de Widoo ou d'un utilisateur. Un Signature peut être gratuit ou Premium. Règle d'attribution deaccess = premium(décision d'Ilan du 2026-09-28) : automatique, un parcours est Premium s'il a 4 étapes ou plus, ou s'il a au moins 50 avis avec une note moyenne supérieure à 4,5 ; seuils danssettings(premium.min_steps4,premium.min_ratings50,premium.min_rating4.5), recalculés à la publication et chaque nuit ; un parcours qui devient Premium reste accessible pour les sorties déjà programmées ; objectif initial de 5 à 10 Signature au lancement conservé. Sans abonnement : l'étape 1 est complète, les suivantes se réduisent à l'heure, la catégorie, la durée et le trajet à pied ; ni nom, ni lieu, ni coordonnées, ni conseil, ni tracé, dans la fiche comme sur la carte (départ seul). Le filtrage se fait dans l'API, pas seulement dans l'app, et ne s'applique qu'à qui n'a pas droit au parcours : l'abonné (et, avec #66, le titulaire d'un pass en cours ou d'un déblocage à l'unité) reçoit le détail complet sur la carte comme dans la fiche, dès la recherche, avec tracé, étapes et tooltips comme pour un parcours gratuit (D-075 ; contrat dans API › Card de recherche) ; le paywall E-17 s'ouvre depuis « Débloquer avec Premium » et l'encart de la fiche.
🟡 Brouillon du 2026-10-14, à valider par Ilan, en réponse à #383. Rien n'est retiré du texte validé tant qu'Ilan n'a pas tranché : les pages API, Analytics, Ecrans et Modele-de-Donnees portent une note qui renvoie ici. Après validation : entrée
D-xxxau Design-Changelog et nettoyage des passages cités.
Constat. D-073 (révision du 2026-09-28) rend la création gratuite et sans limite ; E-17 ne s'ouvre plus depuis « Créer un parcours » (D-072, D-073) et POST /routes crée un brouillon sans limite (#48, PR #420). Le wiki garde des traces de la limite de D-023 :
-
API › Conventions :
create_limitparmi lesdetails.reasondepremium_required, etdetails.limit« pour la création » ; -
API › Compte :
canCreateRoutedansGET /me, « faux pour un compte gratuit qui a déjà son parcours » ; -
Analytics : raison
create_limitet sourcecreatedepaywall_shown; KPI Freemium « ou la limite de création » ; -
Modele-de-Donnees › settings : « création gratuite
free.max_routes1 » ; - sur cette page, la puce Création de Freemium, qui décrit encore l'ancienne règle et sa clé
free.max_routes.
Dans le code (lu le 2026-10-14) : canCreateRoute n'a jamais été ajouté à GET /me (schéma Me de packages/shared) ; aucune limite de création n'existe ; create_limit ne survit que dans paywall_shown.reason (packages/shared/src/analytics.ts, retrait suivi par #415), sans aucun appelant. La limite anti-spam de D-073 est livrée (#66, PR #410 ; #48, PR #420) : POST /routes/:id/submit répond 429 rate_limited avec details: { reason: 'pending_routes', limit } quand l'auteur a déjà settings.max_pending_routes (3) autres parcours en attente de relecture ; le parcours reste dans son statut. Une révision en attente d'un parcours publié compte pour un ; un compte de l'équipe (editor) publie sans relecture et n'est pas limité. Ces deux règles ne sont écrites nulle part dans le wiki (question 4).
Proposition.
-
canCreateRoutesort du contrat deGET /me, sans remplaçant. « Créer un parcours » (compte requis) ouvre l'assistant (E-12) sans appel préalable : il n'y a plus rien à vérifier avant de créer. - La seule limite reste celle de D-073, à la soumission. L'app l'apprend par la 429 de
POST /routes/:id/submit(details.reason = pending_routes) et affiche la variante validée de « Avant de soumettre » (E-14), avec le nombre lu dansdetails.limit, jamais en dur. « Enregistrer en privé » reste toujours possible. -
premium_required(402) ne porte plus qu'une raison,premium_route;details.limitsort de ses détails et passe àrate_limited(429), avecdetails.reason(pending_routes) pour le distinguer d'une limite de débit. - Analytics :
paywall_shown.reasonvautpremium_routeoupremium_card; la sourcecreatesort aussi, plus aucun paywall ne s'ouvrant depuis la création ; KPI Freemium : « part des utilisateurs actifs qui rencontrent un parcours Premium dans le mois, conversion paywall → achat par raison, churn mensuel ». - E-17 garde toutes ses autres ouvertures et raisons (parcours Premium, encart d'un parcours Premium, encart Widoo Premium, sortie Premium après la fin de l'abonnement ou du pass, « Prolonger ») : seule l'ouverture liée à la création disparaît, et les maquettes l'ont déjà retirée (D-072, D-073).
-
free.max_routessort de la liste des réglages ; la puce Création ne garde de l'ancienne règle qu'une phrase : « Ancienne règle (D-023), abandonnée le 2026-09-28 : un parcours par compte gratuit. »
Pourquoi. La limite anti-spam porte sur la soumission, pas sur la création : un brouillon ou un parcours privé ne coûte rien à la modération et sert à son auteur (programmer, partager par lien). Un indicateur dans GET /me ne serait juste qu'au moment de l'appel (une place se libère dès qu'un parcours sort de relecture), alors que l'API vérifie la limite dans la transaction de soumission ; la 429 suffit, et E-14 validé (« Soumettre » toujours actif, la fenêtre « Avant de soumettre » dit la limite) se construit dessus.
Ce qu'elle écarte.
- Redéfinir
canCreateRouteen « faux quand le compte a atteintmax_pending_routes» : le nom mentirait (on peut toujours créer), il pousserait l'app à fermer l'éditeur alors que D-073 laisse créer et enregistrer en privé, et il doublerait une règle que l'API tient déjà. - Le remplacer par
canSubmitRouteou par un compteurpendingRoutes { count, limit }dansGET /mepour prévenir avant « Soumettre » : aucun écran validé ne l'affiche avant le geste (question 2). - Garder
create_limitdans le catalogue pour l'historique : aucun écran ne l'a jamais émise.
Impact sur les pages et les écrans.
| Page ou écran | Aujourd'hui | Après validation |
|---|---|---|
| API › Conventions |
premium_required : premium_route ou create_limit, details.limit pour la création |
premium_route seulement ; rate_limited documente details.reason (pending_routes) et details.limit
|
API › Compte, GET /me
|
canCreateRoute |
retiré ; le reste de la ligne inchangé |
API › Création, POST /routes/:id/submit
|
422 coherence_blocked seulement |
plus 429 rate_limited (pending_routes, limit) ; révision en attente comptée ; compte editor non limité |
Analytics, paywall_shown et KPI Freemium |
create_limit, source create, « limite de création » |
retirés |
| Modele-de-Donnees › settings |
free.max_routes 1 |
retiré |
| Freemium, puce Création | détail de l'ancienne règle | une phrase d'historique |
| Ecrans › E-17 | ne s'ouvre déjà plus depuis « Créer un parcours » (D-072) | inchangé, aucune maquette à reprendre |
| Ecrans › E-11 | ne cite pas la limite | inchangé |
| Ecrans › E-12 | l'assistant s'ouvre depuis « Créer un parcours » (D-073 : création sans E-17) | inchangé : aucun contrôle avant l'ouverture |
| Ecrans › E-14 | « Avant de soumettre », trois parcours en relecture, 429 rate_limited (D-073) |
inchangé ; le nombre vient de details.limit ; cas hors connexion selon la question 5 |
Tickets, à découper par MANAGER après validation : #45, la puce « Limite de création (D-023) » et le critère « Un compte gratuit qui a déjà un parcours n'entre pas dans l'éditeur » deviennent « Créer un parcours ouvre l'éditeur sans appel à GET /me ; un compte gratuit crée plusieurs parcours ; au-delà de 3 en relecture, Soumettre montre la variante de Avant de soumettre et Enregistrer en privé reste possible » ; #415 libéré, avec la source create si la question 3 est retenue ; côté API, rien à retirer (canCreateRoute n'a jamais été codé) ; un critère sur GET /me n'est nécessaire que si la question 1 est tranchée autrement.
Questions à Ilan.
- Retirer
canCreateRoutedeGET /me, sans remplaçant ? Recommandé : oui, pour les raisons ci-dessus. - Prévenir l'auteur avant qu'il touche « Soumettre » qu'il a déjà 3 parcours en relecture (compteur dans
GET /me, ou mention dans Parcours › Créés) ? Recommandé : non au MVP ; la fenêtre validée de E-14 le dit au bon moment, et trois parcours en relecture à la fois resteront rares avec une réponse sous 72 h. - Retirer aussi la source
createdepaywall_shown? Recommandé : oui, plus aucun paywall ne s'ouvre depuis la création. - Confirmer deux règles déjà codées et absentes du wiki : une révision en attente d'un parcours publié compte dans les 3 ; un compte de l'équipe (
editor) n'est pas limité. Recommandé : confirmer les deux ; sans la première, un auteur contournerait la limite par des modifications de parcours publiés ; la seconde suit E-14 (« Compte Widoo : publié sans relecture »). - Un parcours soumis hors connexion (E-14 : « Envoi au retour du réseau ») et refusé par la 429 au retour du réseau : que voit l'auteur ? Recommandé : le parcours reste dans son statut (brouillon ou privé) dans Parcours › Créés, et un toast d'erreur à l'envoi, « « {titre} » n'est pas parti : 3 parcours en relecture, c'est le maximum. », avec « Voir mes parcours » ; si Ilan préfère un écran, il passe par une planche de l'éditeur.
-
steps.booking_urletsteps.booking_provider(restaurant,ticketing,activity,other) : lien externe simple au MVP, remplaçable par un lien affilié sans changement de schéma. -
routes.sponsoredbooléen,falsepartout, prévu pour la mise en avant partenaire avec mention obligatoire. - Événements analytics
booking_link_openedavec le fournisseur, pour mesurer le potentiel d'affiliation avant de la négocier.
- Premium élargi : mode Surprise, personnalisation, badges exclusifs, selon les données d'usage.
- Affiliation : restaurants (TheFork), billetterie (musées, expositions), activités. Cohérente avec la programmation.
- Partenariats : offices de tourisme, villes, hôtels, lieux culturels ; parcours co-créés et marqués.
- Mise en avant sponsorisée : parcours ou lieux partenaires, toujours signalés comme tels pour préserver la confiance.
Publicité display, vente de données, limitation du nombre de parcours consultables ou de fiches ouvertes en gratuit : la consultation reste illimitée pour garder une mesure propre de l'intérêt du produit.
- Profil public de créateur (E-16) dès le MVP, même page que mon profil (E-09) sans « Modifier le profil » : photo ou initiale, prénom ou pseudo, badge Créateur certifié, quartier (facultatif) et ancienneté, bio (150 caractères), chiffres (parcours publiés, sorties sur ses parcours, note moyenne, chacun affiché seulement s'il existe), À la une (jusqu'à 3 parcours publiés choisis, dans l'ordre choisi), anecdotes (jusqu'à 3 : une question choisie dans une liste gérée côté serveur, huit au lancement, réponse de 150 caractères), tous ses parcours publiés avec tri (Récents, Mieux notés, Durée) et filtre par ambiance à partir de 4 parcours. Accessible depuis toute fiche et toute card. Pas de contact, pas d'abonnement, pas de messagerie.
- Créateur certifié (D-023) : sceau bleu sur le profil et après le prénom sur chaque parcours du créateur. Attribué automatiquement quand les trois critères sont remplis, tous comptés sur ses parcours publiés (D-091) : au moins 3 parcours vérifiés (badge Vérifié : tous leurs lieux vérifiés) ; une note moyenne de 4,5 ou plus, moyenne de tous les avis de ses parcours, chaque avis comptant une fois ; au moins 3 sorties sur ses parcours, c'est-à-dire des sorties menées jusqu'au bout (
completed) par d'autres utilisateurs, une par personne et par parcours : ni ses propres sorties, ni les sorties arrêtées, annulées ou « Pas fait ». Le chiffre « sorties sur ses parcours » du profil suit la même définition. Recalcul chaque nuit, badge retiré si un critère n'est plus rempli ; un nouveau parcours pas encore vérifié ne le fait pas perdre. Seuils danssettings, réglables sans mise à jour de l'app. L'équipe peut attribuer ou retirer le badge dans l'admin, et ce choix l'emporte sur le calcul. - Sur son propre profil : encart « Devenez créateur certifié » tant que le badge n'est pas obtenu, avec ce qui manque ; encart « Complétez votre profil » (photo, bio, anecdote) jusqu'à ce que les trois soient faits. Les visiteurs ne voient ni l'un ni l'autre.
- Un utilisateur peut rendre son profil non public par l'interrupteur « Profil public » des Réglages (
users.is_public = false, D-025) : ses parcours affichent alors « Membre Widoo » sans lien ni sceau, son profil est introuvable par lien ; tout revient quand il réactive. - Après le MVP : espace perso avec statistiques ; badges (premier parcours publié, 10 vérifications, parcours 100 fois programmé), abonnement à un créateur, fil d'activité. Le modèle prévoit une table
badgesetuser_badgessans les implémenter.
Quand une étape a à la fois un lien de réservation du créateur et un lien partenaire de Widoo, c'est le lien du créateur qui s'affiche (décision d'Ilan du 2026-09-25, D-048) : c'est sa rémunération, et ce qui l'incite à créer. Le lien partenaire de Widoo ne sert que si le créateur n'en a pas mis. Un lien déclaré affilié s'affiche avec la mention « Lien affilié » près de « Réserver ».
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