// bible.v1 · chapitre 05 · fonctionnalités

Fonc-
tionnalités

Spec produit. Pas de liste. Des décisions.
// audiencePM · Dev · Design
// formatPRD exploitable
// sections5.1 → 5.5 (F01–F07)
// chaque feature justifiée : user + business + technique
// section_5.1

Liste des
Fonctionnalités

Groupées par logique produit — pas par écran ou par page. Chaque groupe existe pour une raison stratégique précise.

A
Fondation Identitaire
Sans ce groupe, le produit n'existe pas — c'est la proposition de valeur réelle
Core MVP
Style Questionnaire
5 questions visuelles → profil tempérament instantané. Valeur avant le premier upload.
Item Upload & AI Analysis
Photo → background removal → métadonnées IA (couleur, type, silhouette). Fondation de tout le reste.
Wardrobe Catalog
Vue d'ensemble de la garde-robe. Recherche, filtres, états (porté / jamais porté).
Visual DNA Profile
Palette de couleurs dominantes, silhouettes récurrentes, textures préférées. Le miroir stylistique.
Style Clarity Score
Score de cohérence identitaire (0-100). Progresse avec l'usage. Driver de rétention gamifié.
Context Profiles
Qui tu es au travail, le week-end, en soirée. Détecte la fragmentation identitaire.
B
Activation Quotidienne
Le trigger qui crée l'habitude — la raison d'ouvrir l'app chaque matin
Core Rétention
Morning Suggestion
2-3 tenues depuis la garde-robe existante. Contextualisées météo + agenda + humeur.
Outfit Logging
Log 1-clic après avoir choisi sa tenue. Données comportementales critiques pour le profil.
Context Input
Humeur (3 secondes, 5 options), contexte du jour (bureau/casual/event). Améliore la suggestion.
Push Notification Matinale
Trigger de l'habitude. Heure configurable. Contenu contextuel, pas générique.
C
Intelligence Décisionnelle
La valeur différentielle — ce qu'aucun concurrent ne fait
Core Revenue
Purchase Alignment Check
Photo ou URL → score de cohérence avec le profil → décision d'achat éclairée.
Wardrobe Audit
"Quoi garder, quoi lâcher." Identifie les pièces jamais portées + les trous stratégiques.
Gap Detection
Pièces manquantes pour compléter les combinaisons possibles. Recommandation d'achat intentionnel.
Occasion Prep
Préparer une tenue pour un événement précis (entretien, mariage, voyage). Use case élevé en valeur perçue.
D
Journal & Mémoire
La rétention émotionnelle longue durée — ce qui empêche de partir
Rétention LTV Viral
Style Journal Timeline
Archive chronologique des tenues portées. Visualisation des patterns et de l'évolution.
Style Wrapped
Rétrospective annuelle partageable. Couleurs de l'année, pièces fétiches, évolution stylistique.
Memory Triggers
"Il y a un an tu portais ça." Réengagement émotionnel. Taux d'ouverture 5× supérieur aux promo notifs.
Style Eras
Chapitres esthétiques de l'identité visuelle (pour les Léa — créatrices fluides). Marqueurs temporels sur les shifts d'esthétique.
E
Croissance & Viralité
Acquisition organique — construire uniquement après PMF validé
Viral Phase 2
Shareable Style Cards
Exports visuels du profil, du Wrapped, du Style DNA. Conçus pour être partagés sur TikTok/Instagram.
Public Profile (opt-in)
Profil de style public pour les créateurs et stylistes. Lien partageable.
Co-Styling
Partager une tenue avec une amie, demander un avis, co-construire une suggestion. Social non-compétitif.
Referral Program
Inviter un ami → mois premium offert aux deux. Trigger : au moment du Wrapped ou après un achat validé.
F
Monétisation & Pro
Revenus sans trahir l'expérience
Revenue
Freemium Paywall
Déclenché après l'aha moment. Jamais avant. "Débloquer ton profil complet."
Premium Subscription
€8.99/mois ou €74.99/an. Profil complet, suggestions quotidiennes, journal enrichi.
Pro Tools (Stylistes)
€49-79/mois. Gestion multi-clients, rapports, co-styling pro. Canal B2B2C.
Intentional Commerce
Recommandations d'achat alignées avec le profil. Jamais de pub. Transaction fee uniquement.
G
Infrastructure Utilisateur
Features support — nécessaires mais pas différentiantes
Support
Auth (Email + Google + Apple)
Firebase Auth. Sign-in en moins de 20 secondes. Pas de formulaire d'inscription long.
Notification Preferences
Heure de la suggestion matinale, opt-in granulaire par type. Jamais forcé.
Privacy Dashboard
"Ce que BeYourself sait de toi." Suppression de données granulaire. RGPD actif.
Data Export
Export de la garde-robe et du journal en JSON/CSV. Droit à la portabilité RGPD.

Features explicitement supprimées : Feed social type Instagram, likes/commentaires publics sur les tenues, intégration e-commerce push (bannières de marques), système de points/badges gamifiés. Ces features créent soit de la toxicité, soit une dérive de la proposition identitaire vers la performance sociale.

// section_5.2

Fonctionnalités
MVP

Un MVP n'est pas un produit incomplet. C'est le produit le plus simple qui permet de tester si la proposition de valeur est réelle.

// critere_mvp : l'utilisateur doit être capable d'atteindre son aha moment ("cette app me comprend") en moins de 30 minutes d'usage total, avec moins de 15 items uploadés. Si ce critère n'est pas atteignable avec le scope MVP, le MVP est trop restreint.

Fonctionnalité
Pourquoi indispensable · Ce qu'elle valide
Priorité
Effort
Style Questionnaire

Onboarding 5 questions

Produit de la valeur avant tout upload. Sans ça, l'utilisateur doit photographier 50 vêtements avant de voir quoi que ce soit. 70% partent avant d'atteindre ce seuil.

Valide : l'utilisateur croit dans la promesse assez pour continuer
P0 — Bloquant
Faible
Item Upload

Photo + AI metadata

Fondation de tout le reste. Sans items, pas de profil, pas de suggestion. MVP simplifié : background removal automatique, métadonnées IA basiques (couleur dominante, type de vêtement). Pas besoin de tout cataloguer — 15 items suffisent pour le MVP.

Valide : la friction d'upload est acceptable pour l'utilisateur cible
P0 — Bloquant
Élevé
Visual DNA Profile

Profil stylistique basique

C'est l'aha moment. La première fois que l'utilisateur voit son profil et pense "c'est étonnamment juste". MVP simplifié : palette couleurs + 2-3 insights sur les patterns. Pas le profil complet — juste assez pour créer la surprise.

Valide : la promesse "miroir identitaire" est crédible
P0 — Bloquant
Moyen
Suggestion Basique

2 tenues depuis la garde-robe

MVP version : pas de contexte météo ni agenda. Juste 2 combinaisons cohérentes depuis les items uploadés. L'objectif n'est pas la perfection — c'est de montrer que l'app peut générer quelque chose d'utile avec peu de données.

Valide : le moteur de suggestion peut produire de la valeur perçue
P0 — Core
Moyen
Outfit Logging

1-clic après choix tenue

Génère les données comportementales sans lesquelles le profil ne peut pas s'améliorer. MVP ultra-simplifié : bouton "J'ai porté ça aujourd'hui" avec date automatique. Pas de contexte, pas d'humeur — juste le log brut.

Valide : les utilisateurs loggent effectivement leurs tenues (signal d'engagement)
P1 — Important
Faible
Auth Firebase

Email + Google + Apple

Nécessaire pour persister les données. Pas de friction : Sign in with Apple/Google en premier. L'email reste disponible mais n'est pas le flow par défaut.

Valide : le taux de complétion d'onboarding jusqu'à la création de compte
P0 — Bloquant
Faible
Paywall Basique

Freemium gate après valeur

Même en MVP, le paywall doit être présent pour valider la willingness to pay. Déclenché uniquement après que l'utilisateur a vu son profil (pas avant). Gate sur "profil complet" et "suggestions illimitées".

Valide : le taux de conversion et le prix acceptable
P1 — Validation
Faible

Hors MVP délibérément : notifications push (trop tôt — pas de rythme établi), journal de style (peu de données en MVP), purchase check (nécessite un profil mature), B2B Pro (scope séparé), features sociales (construction communautaire après PMF). Ces absences sont des décisions, pas des oublis.

7// features MVP total
15// items min pour aha moment
30 min// temps max pour atteindre la valeur
6-8 sem// délai build réaliste (équipe 3 devs)
// section_5.3

Fonctionnalités
V1

V1 ne signifie pas "tout ce qu'on voulait faire". Ça signifie : les features qui transforment un produit validé en produit habituel.

Fonctionnalité
Ce qu'elle débloque · Pourquoi pas dans le MVP
Impact
Effort
Morning Suggestion

Avec météo + agenda + humeur

La version MVP a des suggestions basiques. La V1 les rend contextualisées — météo via API, contexte du jour déclaré en 3 secondes. C'est la différence entre "une appli de tenues" et "mon assistant personnel du matin". Crée l'habitude quotidienne et le trigger de rétention principal.

Rétention critique
Moyen
Push Notification Matinale

Heure configurable + contenu contextuel

Sans notification, la suggestion matinale n'est consultée que par les utilisateurs qui y pensent. La notification transforme un comportement actif en comportement passif — l'app vient chercher l'utilisateur. Heure configurable car un développeur et un boulanger ont des matins différents.

DAU direct
Faible
Purchase Alignment Check

Photo ou URL → score profil

Feature différentielle la plus forte du marché. Nécessite un profil mature (minimum 30 items, 30 jours d'usage) pour que le score soit crédible — d'où l'absence en MVP. C'est la feature qui fait dire "je ne peux plus acheter sans vérifier dans BeYourself".

Engagement fort
Moyen
Style Journal Timeline

Archive visuelle chronologique

Après 2-3 semaines de logging, l'utilisateur a accumulé assez de données pour que le journal soit intéressant. En MVP il n'y a pas assez de données — ça aurait été vide et décevant. En V1, c'est la feature de rétention émotionnelle longue durée. Premier déclencheur de réengagement.

LTV
Moyen
Style Clarity Score Visible

Progression visible avec explications

Le score existait en MVP mais comme donnée interne. En V1 il devient visible, avec une explication ("ton score a progressé parce que tes choix de couleurs sont plus cohérents cette semaine"). Motivation à continuer à logger, à rafiner le profil. Driver de conversion premium.

Conversion
Faible
Bulk Import

Vinted historique + Zalando orders

Réduit la friction d'onboarding pour les nouveaux utilisateurs qui arrivent après le MVP. Un utilisateur Vinted peut importer 30 items en 2 clics au lieu de les photographier un par un. Réduit le taux d'abandon onboarding de façon significative.

Adoption
Élevé
B2B Pro Beta (Stylistes)

Gestion multi-clients

20 stylistes en beta fermée dès la V1. Revenue immédiat sans attendre l'échelle B2C. Canal d'acquisition B2C déguisé. Scope minimal : profil client partageable + notes de session. Le reste vient après.

Revenue early
Moyen
Memory Triggers

"Il y a un an..."

Nécessite 1 an de données — impossible en MVP. En V1 (après 3+ mois), commence à fonctionner avec des "il y a 3 mois". Taux d'ouverture de notification le plus élevé du produit. Réengagement sans effort marketing.

Réengagement
Faible
Privacy Dashboard

Contrôle RGPD visible

Obligatoire pour le marché français. En V1 car en MVP le volume de données sensibles collectées est encore limité. Construit la confiance — directement lié à la willingness to share des données de qualité.

Trust / RGPD
Faible
// section_5.4

Fonctionnalités
Futures

Uniquement les features avec un impact business démontrable. Pas de features cool-sans-raison.

Feature
Impact business · Condition de déclenchement
Horizon
Risque
Style Wrapped Annuel

Rétrospective partageable

Acquisition organique à coût zéro. Millions d'impressions UGC potentielles si bien conçu. Condition : nécessite 1 an de données + volume suffisant d'utilisateurs pour que le partage ait un effet réseau.

V2 · An 1
Moyen
Co-Styling Social

Amis, partage, avis

Mécanique sociale non-compétitive. Risque principal : peut dériver vers la performance si mal designé. Construire seulement avec une politique communautaire claire et une équipe de modération. Condition : 50K+ utilisateurs actifs avec engagement prouvé.

V2 · Post 50K
Risqué
Vinted Integration

Détox vestimentaire

"Analyser avant de vendre." Distribution massive via la base Vinted + intention parfaite. Condition : partenariat officiel ou scraping légal stable. Nécessite négociation avec Vinted — à initier à 100K users comme levier de négociation.

V2 · Post 100K
Dépendant
Marketplace Intelligence

API données marques B2B

Le plus grand levier de revenu à long terme. Insights anonymisés sur les préférences réelles des consommateurs vendus aux marques. Condition stricte : minimum 500K profils actifs pour que la donnée soit statistiquement significative et vendable.

V3 · 500K users
Long terme
Custom ML Model

Remplace OpenAI Vision

Fine-tuning CLIP sur les données BeYourself → meilleure précision sur les vêtements spécifiques, coûts divisés par 5-10. Condition : viable seulement à partir de 200K+ items analysés (masse d'entraînement suffisante) et quand les coûts OpenAI justifient l'investissement.

V3 · 200K items
MLOps requis
Occasion Planner Avancé

Voyage, mariage, entretien

Préparer une valise ou une tenue pour un événement avec aide IA. Feature à haute valeur perçue, très partageable. Potentiel de feature virale ("j'ai préparé tout mon voyage avec BeYourself"). Condition : profil mature + journal V1 établi.

V2 · Post PMF
Moyen
// section_5.5

Spécifications
Détaillées

PRD complet des 7 fonctionnalités cœur. Format directement utilisable pour coder.

F-01 Onboarding Questionnaire de Style MVP · P0
objectif

Produire un premier profil d'identité stylistique avant tout upload de vêtement. Créer la valeur immédiate qui justifie de continuer l'onboarding. C'est le premier moment de vérité du produit — si ce moment déçoit, l'utilisateur abandonne.

user_flow
Déclencheur
Premier lancement post-création de compte. Aucun autre contenu visible.
system
Question 1 — Couleurs
Grille de palettes visuelles (pas de noms de couleurs). Sélection multiple. "Lesquelles t'attirent ?"
user
Question 2 — Silhouettes
6 photos de silhouettes réelles (pas de mannequins filtrés). "Lesquelles se rapprochent de ton style habituel ?"
user
Question 3 — Contexte principal
Choix unique : Bureau / Créatif / Quotidien / Soirées / Mixte. Détermine le context_profile principal.
user
Question 4 — Rapport à l'achat
"Comment tu achètes ?" 4 options visuelles. Identifie le behavioral type (impulsif/réfléchi/occasion/routinier).
user
Question 5 — Friction actuelle
"Qu'est-ce qui te frustre le plus le matin ?" 4 options. Calibre le message d'onboarding final.
user
Génération profil_v0
Cloud Function calcule style_temperament depuis les réponses. Résultat en moins de 1 seconde.
AI + rules
Affichage profil initial
"Voici ce qu'on sait déjà de toi." Palette, tempérament (1 mot + 2 phrases), premier insight. Moment émotionnel — pas d'UI chargée.
system
CTA vers upload
"Affine ce profil en ajoutant tes 5 premières pièces." Pas une obligation — une invitation avec bénéfice clair.
user
regles_metier
Max questions5 strictement. Au-delà, le taux de complétion chute de 30% par question supplémentaire.
Input exclusivement visuelAucun champ texte libre. Uniquement des grilles d'images ou des options avec visuels. Réduit la friction cognitive.
Progression visibleBarre de progression "3/5". Ne jamais cacher à l'utilisateur où il en est.
Réponses partielles OKSi l'utilisateur quitte à Q3, sauvegarder les réponses. Reprendre là où il s'est arrêté à la prochaine session.
Profil_v0 toujours généréMême avec réponses partielles (minimum 3 questions), générer un profil partiel. Ne jamais laisser l'utilisateur sans résultat.
permissions
guest (non connecté)Peut accéder au questionnaire. Le profil est généré mais non sauvegardé. Invitation à créer un compte après affichage du résultat.
user (connecté)Profil sauvegardé dans Firestore. Peut refaire le questionnaire à tout moment depuis les settings.
pro (styliste)Peut lancer le questionnaire au nom d'un client. Le résultat est enregistré dans le profil client.
etats_possibles
not_started in_progress (Q1-Q5) partial_saved (< Q5) processing_profile completed failed_generation
gestion_erreurs
API timeoutSi la génération du profil_v0 dépasse 3s, afficher un état "calcul en cours" avec animation. Jamais un écran blanc.
Réponses insuffisantesSi < 3 questions répondues et abandon, ne pas générer de profil factice. Sauvegarder les réponses et proposer de reprendre.
Résultat trop génériqueSi le profil_v0 ne peut pas différencier l'utilisateur (toutes les réponses moyennes), afficher quand même un résultat mais avec message "Tes 5 premières pièces nous permettront d'être beaucoup plus précis."
notifications
In-app
Célébration discrète à la complétion du questionnaire. Pas de confettis excessifs — juste une confirmation.
Immédiat
Push
Si questionnaire abandonné après Q2+ : "Tu es à mi-chemin de ton profil de style." Une seule fois, 24h après l'abandon.
+24h
logs_analytics
questionnaire.started
Taux d'entrée dans le questionnaire depuis l'onboarding
questionnaire.question_answered
Taux de complétion par question — identifier où les gens décrochent
questionnaire.completed
Taux de complétion global. KPI principal de l'onboarding.
questionnaire.profile_viewed
% d'utilisateurs qui regardent leur profil_v0 après génération
securite

Les réponses au questionnaire sont des données de profil sensibles. Stockées dans Firestore sous users/{uid}/questionnaire avec Security Rules limitant l'accès au uid propriétaire uniquement. Pas d'accès admin ou analytics direct — uniquement des agrégats anonymisés.

conditions_de_validation

Technique : génération du profil_v0 en <2 secondes p95. UX : >70% de taux de complétion (Q5 atteint). Business : >60% des utilisateurs qui complètent le questionnaire uploadent au moins 1 item dans les 24h. Data : le profil_v0 est significativement différent entre les utilisateurs (variance suffisante pour montrer la personnalisation).

F-02 Upload & Analyse d'Item MVP · P0
objectif

Transformer une photo de vêtement en donnée structurée analysable. C'est le point d'entrée de toute l'intelligence identitaire. La qualité et la rapidité de cette étape déterminent directement si l'utilisateur continue l'onboarding ou abandonne.

user_flow
Déclencheur
Bouton "+" dans le catalog ou CTA depuis l'onboarding post-questionnaire.
user
Choix source
Camera (photo directe) / Galerie (photo existante) / Import Vinted-Zalando (V1). Sheet bottom avec les 3 options.
user
Photo capturée
Upload vers Firebase Storage. Création d'un document Firestore en état pending_analysis.
system
Background removal
Cloud Function triggered : suppression du fond via API (Remove.bg ou équivalent). Résultat stocké dans Storage.
async
AI Analysis
Cloud Task → Cloud Function → OpenAI Vision. Extraction : type de vêtement, couleur dominante + palette, silhouette, texture, occasion. Résultat réécrit dans Firestore.
AI · async
Affichage résultat (Realtime)
Le listener Firestore Flutter met à jour l'UI automatiquement quand l'analyse est terminée. L'utilisateur voit l'item passer de "en analyse..." à son affichage final. Pas besoin de refresh.
realtime
Correction manuelle (optionnel)
L'utilisateur peut corriger les métadonnées IA si elles sont incorrectes. Ces corrections alimentent un feedback loop pour améliorer le modèle.
optionnel
Déclenchement mise à jour profil
Après chaque nouvel item analysé, le ProfileService recalcule silencieusement si le seuil est atteint (tous les 5 nouveaux items).
background
regles_metier
Taille max image10MB. Compression côté client avant upload si >2MB (flutter_image_compress). Réduire la consommation de données et les coûts Storage.
Formats acceptésJPEG, PNG, HEIF (iPhone natif). WebP accepté mais converti en JPEG avant traitement.
Cache analyseHash SHA-256 de l'image → résultat d'analyse stocké. Si même image uploadée 2 fois (même utilisateur ou différent), réutiliser l'analyse existante. Économie majeure sur les coûts AI.
Limite free tier50 items maximum en version gratuite. Au-delà, gate premium. La limite est visible à 40 items pour inciter la conversion avant la frustration.
Minimum viableUn item est considéré comme "analysé" même si l'IA n'a extrait que la couleur et le type. Les autres métadonnées peuvent être incomplètes sans bloquer.
etats_possibles
not_uploaded uploading (0-100%) pending_analysis processing_bg_removal processing_ai analyzed analysis_failed user_corrected
gestion_erreurs
Connexion perdue pendant uploadReprendre l'upload depuis le dernier chunk. Ne jamais perdre la photo. Firebase Storage handles resumable uploads nativement.
OpenAI Vision timeout (>30s)Marquer l'item comme analysis_failed. Afficher à l'utilisateur "Analyse en attente — on réessaie." Cloud Task retry automatique avec backoff exponentiel (3 tentatives max).
Image illisibleSi OpenAI Vision retourne une confiance <40%, demander à l'utilisateur de retaker la photo ou de saisir les informations manuellement.
Background removal échecContinuer avec l'image originale. L'analyse IA fonctionne même sans background removal — c'est une amélioration, pas un prérequis.
edge_cases

Item déjà présent : si le hash de l'image correspond à un item existant du même utilisateur, proposer de mettre à jour l'existant plutôt que créer un doublon. Photo de soi portant l'item : le système doit détecter et ignorer le corps humain pour analyser uniquement le vêtement. Item endommagé ou incomplet : pas de validation de "qualité de vêtement" — tout item uploadé est valide même s'il est abîmé. Tentative d'upload de contenu inapproprié : Firebase App Check + modération probabiliste côté AI (si l'image ne contient pas de vêtement, retourner une erreur claire).

logs_analytics
item.upload_started
Nombre d'uploads initiés. Taux de complétion.
item.analysis_completed
Temps moyen d'analyse. Taux de succès IA. Coût moyen par item.
item.metadata_corrected
Taux de correction utilisateur → qualité IA à améliorer si >20%
item.analysis_failed
Taux d'échec par raison. Alerter si >5% — problème OpenAI ou pipeline.
securite

Toutes les images sont stockées dans Firebase Storage sous users/{uid}/items/{itemId}. Security Rules : lecture et écriture uniquement par le propriétaire du uid. Pas d'URL publique par défaut — accès via signed URLs temporaires (expiration 1h) générés côté Cloud Function. Les signed URLs empêchent le hotlinking et le scraping de la galerie utilisateur.

conditions_de_validation

Technique : analyse AI complétée en <15 secondes p95. Taux de succès >95%. UX : l'utilisateur voit la mise à jour de l'item sans avoir à recharger l'écran (Firestore realtime). Business : coût moyen <€0.15/item analysé (cible : optimisation à €0.05 avec cache à V1). Qualité IA : taux de correction manuelle <15% (valider que les métadonnées extraites sont suffisamment précises).

F-03 Suggestion Matinale Contextualisée V1 · P0
objectif

Créer l'habitude quotidienne. La suggestion matinale est le seul trigger qui peut transformer BeYourself d'une app qu'on ouvre "de temps en temps" en une app qu'on ouvre chaque matin. Sa qualité et sa fiabilité sont la métrique de rétention la plus critique du produit.

user_flow
Pré-calcul nocturne
Cloud Scheduler déclenche à 3h du matin (heure locale par timezone). Calcule les suggestions candidates pour chaque utilisateur actif. Résultats stockés dans Firestore.
scheduled
Push notification
Envoyée à l'heure configurée par l'utilisateur (défaut : 7h30). Message contextuel intégrant la météo : "Il fera 14°C aujourd'hui. Ta suggestion est prête."
push · FCM
Context input (3 secondes)
En ouvrant la suggestion : 3 boutons d'humeur (Énergique / Normal / Fatigué) + 1 bouton contexte (Bureau / Casual / Soirée). Optionnel — si ignoré, utiliser le contexte de la veille.
optionnel · rapide
Affichage des suggestions
2 à 3 combinaisons affichées. Chacune montre les items dans l'ordre de layering (bas/haut/veste/accessoire). Photos réelles des items de l'utilisateur.
display
Sélection ou refus
L'utilisateur tape sur une suggestion pour la choisir, ou swipe pour voir les alternatives. Refuser toutes les suggestions → option "Je cherche autre chose" avec recherche dans le catalog.
interaction
Outfit log automatique
La sélection d'une suggestion logue automatiquement la tenue. Pas d'étape supplémentaire — le choix est le log.
auto-log
Feedback loop
Le feedback (sélectionnée / refusée / modifiée) est transmis au ProfileService pour affiner les prochaines suggestions.
learning
regles_metier
Seuil minimum items15 items analysés pour générer une suggestion. En dessous, afficher un message d'encouragement à uploader plutôt qu'une mauvaise suggestion.
Pas de répétitionUne même tenue exacte ne peut pas être suggérée 2 fois dans la même semaine. Sauf si l'utilisateur l'a explicitement portée et loggée entre les deux.
Rotation des itemsChaque item doit apparaître en suggestion au moins 1 fois toutes les 3 semaines (si compatible avec le profil). Évite que certains items soient perpétuellement ignorés.
Météo obligatoireSi l'API météo est indisponible, ne pas générer de suggestion sensible à la température. Générer une suggestion "météo-neutre".
Saisons vestimentairesLes items sont filtrés par saison (détectée automatiquement depuis les métadonnées). Pas de pull proposé en juillet même s'il est dans la garde-robe.
etats_possibles
not_generated (insufficient_items) computing (nocturne) ready viewed selected + logged rejected (toutes refusées) expired (non vue avant 14h)
gestion_erreurs
Aucun item en stock pour la météoAfficher les 2 items les plus appropriés disponibles avec message "Ton dressing ne couvre pas tous les temps — voici ce qui se rapproche le plus."
Calcul nocturne échouéFallback : calcul en temps réel au moment de l'ouverture. Latence acceptée jusqu'à 3 secondes avec indicator de chargement.
3 refus consécutifsAprès 3 jours consécutifs de refus de toutes les suggestions, déclencher un mini-questionnaire de recalibration (2 questions). Le profil s'est peut-être déphasé.
notifications
Push
Suggestion matinale avec contexte météo. Message variable (ne jamais envoyer le même texte 2 jours consécutifs). Opt-in requis — jamais forcé.
Heure configurable
In-app
Badge sur l'onglet principal si la suggestion n'a pas été consultée. Disparaît à 14h.
Jusqu'à 14h
logs_analytics
suggestion.generated
Nombre de suggestions calculées chaque nuit
suggestion.opened
Taux d'ouverture depuis la notification. KPI principal de rétention.
suggestion.selected
Taux d'acceptation (= adoption de la suggestion). Cible : >60% des suggestions ouvertes.
suggestion.all_rejected
Taux de refus total. Si >30%, la qualité du moteur est insuffisante.
suggestion.outfit_logged
Conversion suggestion → log. Doit être proche de 100% (log auto à la sélection).
conditions_de_validation

Technique : suggestion disponible en <500ms après ouverture de l'app (pré-calculée). Taux d'échec calcul nocturne <1%. UX : taux d'ouverture de la notification push >35% (benchmark lifestyle apps). Business : taux de sélection d'une suggestion >55% parmi les utilisateurs actifs. Qualité : taux de refus total <25% à J30+ (le modèle apprend).

F-04 Identity Profile & Style Clarity Score MVP · P0
objectif

Construire et afficher en continu le profil d'identité visuelle de l'utilisateur. C'est le moat du produit — la donnée irréplicable qui crée le switching cost émotionnel. Plus précis avec le temps, jamais figé. Le Style Clarity Score est la gamification bienveillante qui motive le retour.

composantes_du_profil
ComposanteSource de donnéesMVP ou V1
style_temperamentQuestionnaire onboarding. Mise à jour si questionnaire refait.MVP
color_paletteEmbeddings couleur des items × fréquences de port. Top 5 couleurs + patterns chromatiques.MVP
silhouette_signatureMétadonnées silhouette des items portés (>2×). Détecte les coupes récurrentes.MVP
context_personasAnalyse des outfits loggés par contexte déclaré. 3 "modes" : work/casual/occasion.V1
purchase_patternsRatio items achetés vs portés. Fréquence d'achat. Type d'impulsion.V1
style_vocabularyMots-clés générés par IA depuis les patterns détectés. "Tu portes du minimalisme structuré..."V1
style_clarity_scoreAlgorithme de cohérence : variance de la palette × fréquence de port × contexte-alignment.MVP (interne) / V1 (visible)
calcul_style_clarity_score

Le score (0-100) mesure la cohérence identitaire — pas la qualité du style. Formule simplifiée V1 :

score = (palette_coherence × 0.3) + (silhouette_consistency × 0.25) + (port_frequency_ratio × 0.25) + (context_alignment × 0.2)

Chaque composante est normalisée 0-100. Le score global ne monte pas si on "s'habille mieux" — il monte si on est plus cohérent avec qui on est. Un score de 45 stable vaut mieux qu'un score de 90 éphémère.

regles_metier
Seuil de précisionLe profil n'est présenté comme "complet" qu'à partir de 20 items analysés et 14 jours d'usage. En dessous, afficher "Profil en construction" avec le % de progression.
RecalculRecalcul du score après chaque : nouvel item analysé (si +5 items depuis le dernier calcul), outfit loggé (batch toutes les 5 logs), questionnaire refait.
Non-jugementLe profil ne contient jamais de langage normatif ("ton style pourrait être amélioré"). Il décrit uniquement — jamais ne prescrit.
Évolution historiqueLe profil garde un historique des versions (snapshot mensuel). Permet de montrer "ton profil a changé depuis 3 mois".
etats_possibles
empty (0 items) building (1-19 items) complete_v0 (questionnaire only) complete_v1 (20+ items) mature (>50 items, 30+ jours) locked (free tier · >50 items)
notifications
In-app
Notification de progression : "Ton profil est maintenant à 65% — 8 items de plus pour le compléter." Uniquement quand le score franchit un palier (25%, 50%, 75%, 100%).
Sur paliers
In-app
Si le Style Clarity Score augmente de >10 points en une semaine : mini-célébration avec explication de pourquoi.
Hebdo max
conditions_de_validation

Qualité : le style_vocabulary généré doit être perçu comme "juste" par >70% des utilisateurs interrogés (validation qualitative nécessaire en beta). Différenciation : deux utilisateurs aux goûts différents doivent avoir des profils significativement différents. Progression : le score doit progresser de façon mesurable pour >60% des utilisateurs actifs entre J7 et J30.

F-05 Purchase Alignment Check V1 · P1
objectif

Permettre à l'utilisateur de vérifier en quelques secondes si une pièce envisagée est cohérente avec son identité stylistique avant de l'acheter. C'est la feature la plus différentielle du marché — aucun concurrent ne fait ça. Elle s'appelle "check" et non "validation" : elle ne dit jamais non, elle éclaire.

user_flow
Déclencheur
Bouton "Check un achat" dans l'app, ou partage de lien depuis Safari/Chrome vers BeYourself (Share Extension iOS/Android).
user
Input
Photo de la pièce (camera ou galerie) OU URL du produit (e-commerce). Les deux routes aboutissent au même traitement.
user
Analyse item candidat
Même pipeline que F-02 (OpenAI Vision) mais sans sauvegarde dans la garde-robe. Extraction des métadonnées stylistiques de l'item candidate.
AI
Comparaison avec profil
Le ProfileService compare les métadonnées de l'item avec le Visual DNA de l'utilisateur. Calcul du score d'alignement (0-100).
AI + rules
Affichage résultat
Score d'alignement + 2-3 phrases explicatives ("Cette couleur est présente dans 30% de tes pièces les plus portées." "Tu possèdes déjà 4 pièces dans cette silhouette."). Neutre, factuel, jamais prescriptif.
display
Combinaisons possibles
Optionnel : "Voici avec quoi tu pourrais porter ça" — 3 combinations depuis la garde-robe existante. Montre la polyvalence (ou non) de l'item envisagé.
optionnel
Action utilisateur
Boutons : "J'achète et je l'ajoute à ma garde-robe" / "Je ne l'achète pas" / "Je le sauvegarde pour réfléchir". Chaque action enrichit les behavioral data.
decision
regles_metier
Profil minimum requisFeature disponible uniquement si le profil a >30 items et >14 jours d'usage. En dessous, le score d'alignement n'est pas fiable et peut induire en erreur.
Score intentionnellement neutreUn score de 35/100 n'est pas présenté comme "mauvais" — il est présenté comme "cette pièce est différente de ton style actuel — peut-être une exploration ?"
Limite gratuite3 checks/mois en version gratuite. Illimité en premium. La limitation doit être annoncée avant le 3ème check, pas après.
Pas de revente de données d'intentionLes items checkés mais non achetés sont des données hautement sensibles. Usage limité au profil personnel — jamais transmises à des marques ou des partenaires.
edge_cases

Item identique déjà dans la garde-robe : détecter et afficher "Tu as déjà un item très similaire — veux-tu voir comment tu l'utilises ?" Item de luxe inaccessible : pas de filtre prix — le check s'applique à tout type de pièce. URL non-vêtement : si l'URL ne pointe pas vers un vêtement (erreur humaine), retourner une erreur claire avec invitation à utiliser la photo à la place.

logs_analytics
purchase_check.initiated
Volume de checks. Corrélation avec les taux de conversion premium.
purchase_check.completed
Score moyen d'alignement. Distribution des scores (bimodale = bon signe).
purchase_check.purchased
Taux d'achat après check. Comparer avec et sans BeYourself pour valider l'impact.
purchase_check.passed
Taux de non-achat après check bas (<40). Valider que la feature "économise" vraiment des achats.
conditions_de_validation

Technique : score affiché en <5 secondes après soumission de l'image. Qualité : les utilisateurs qui utilisent le purchase check doivent percevoir le score comme "pertinent" à >65% (survey in-app post-utilisation). Business : la feature doit être citée comme driver de conversion premium par >20% des utilisateurs convertis. Impact : réduction mesurable des retours e-commerce parmi les utilisateurs actifs vs non-utilisateurs (KPI à suivre sur 3 mois).

F-06 Style Journal & Memory Triggers V1 · P1
objectif

Créer la rétention émotionnelle longue durée en transformant les logs de tenues en une archive identitaire consultable. L'utilisateur doit avoir l'impression que BeYourself se souvient de lui mieux qu'il ne se souvient lui-même. C'est la feature qui empêche de partir même en période de faible engagement.

composantes
ComposanteDescriptionPhase
timeline_viewScroll chronologique des tenues loggées. Groupées par semaine. Photos des items, date, contexte. Infinite scroll vers l'arrière.V1
pattern_insightsBulles d'insights periodiques dans la timeline : "Tu portes du bleu les lundis. C'est ça." Générés par IA, toujours descriptifs jamais prescriptifs.V1
memory_triggersNotifications "Il y a X mois/an, tu portais ça à [contexte]". Déclenchées par Cloud Function quotidienne.V1
style_erasChapitres esthétiques marqués manuellement par l'utilisateur ("Mon été minimaliste") ou suggérés automatiquement par l'IA quand un shift de style est détecté.V2
wrapped_annuelRétrospective annuelle générée en décembre. Shareable card. Couleurs de l'année, top 5 pièces, évolution du score.V2
regles_metier
Seuil d'activationLe journal est accessible dès le 1er log. Mais les insights ne sont générés qu'à partir de 14 logs (2 semaines d'usage quotidien hypothétique).
Memory trigger fréquenceMaximum 1 memory trigger par semaine par utilisateur. Jamais le lundi matin (trop de notifications ce jour-là). Préférence : mercredi ou jeudi, 9h-11h.
Privacy du journalLe journal est strictement privé par défaut. Aucune donnée du journal ne peut être vue par d'autres utilisateurs, même en version Pro. L'opt-in social explicite est nécessaire pour tout partage.
Suppression d'un logL'utilisateur peut supprimer n'importe quelle entrée du journal. La suppression n'impacte pas rétroactivement le profil calculé (pour éviter manipulation intentionnelle du score).
notifications
Push
Memory trigger : "Il y a 6 mois, tu portais [description] pour [contexte]." Message personnalisé avec 1 photo de l'item. Taux d'ouverture attendu : 45-55%.
1/semaine max · mer-jeu
Push
Annonce du Wrapped annuel en décembre : "Ton année en style est prête." Une seule fois.
Décembre · 1 fois
In-app
Pattern insight dans la timeline : badge subtil "Nouveau pattern détecté". Visible uniquement en ouvrant le journal.
Passif · in-app seulement
conditions_de_validation

Rétention : les utilisateurs qui ont 30+ logs dans le journal ont un taux de churn 3× inférieur à ceux qui n'en ont pas — si ce n'est pas le cas, la feature n'est pas assez engageante. Memory triggers : taux d'ouverture des memory triggers push >40%. Partage Wrapped : taux de partage du Wrapped >15% des utilisateurs actifs qui le reçoivent (benchmark Spotify Wrapped : 30%).

F-07 Paywall & Gestion Premium MVP · P1
objectif

Convertir les utilisateurs activés en abonnés payants au moment précis de valeur maximale perçue. Le paywall ne doit jamais être vécu comme une frustration — il doit être vécu comme l'aboutissement logique d'un investissement déjà consenti.

declencheurs_du_paywall
TriggerContexteMessage
Score >60%L'utilisateur tente d'accéder au profil complet quand son score dépasse 60%"Ton profil est complet à 82%. Débloque ta signature stylistique complète."
Limite 50 itemsL'utilisateur veut uploader son 51ème item"Tu as construit une vraie garde-robe intelligente. Continue sans limite."
3 purchase checksL'utilisateur a utilisé ses 3 checks gratuits du mois"Protège chaque achat — checks illimités avec Premium."
Suggestion refusée 2 foisL'utilisateur veut plus d'options que les 2 suggestions gratuites"Plus de suggestions, plus précises — avec ton profil complet."
regles_metier
Pas de paywall avant J7Aucun paywall ne peut s'afficher dans les 7 premiers jours, quelle que soit l'utilisation. L'utilisateur doit avoir le temps d'établir une valeur perçue.
Freemium toujours fonctionnelLa version gratuite doit rester genuinement utile. Un utilisateur free ne doit pas se sentir dans une version dégradée — il doit se sentir dans une version incomplète mais fonctionnelle.
Pas de dark patternsAucune pré-sélection de l'abonnement annuel, aucun compte à rebours artificiel, aucune case pré-cochée. Le choix de l'utilisateur doit être libre et éclairé.
Annulation transparenteLa gestion de l'abonnement (annulation incluse) est accessible en 3 clics max depuis les settings. Ne jamais cacher la procédure d'annulation.
etats_abonnement
free trial (7 jours si activé) premium_monthly premium_annual pro_stylist pending_payment payment_failed cancelled (accès jusqu'à fin période)
gestion_erreurs_paiement
Carte refuséeMessage clair non-culpabilisant. 3 tentatives automatiques sur 7 jours (Stripe dunning). Email de notification avant chaque tentative.
Abonnement expiréAccès premium maintenu 3 jours après expiration pour éviter la friction d'un lundi sans suggestion. Notification jour 1, 2, 3 avec CTA renouvellement.
RemboursementTraité via Stripe. Politique : remboursement intégral dans les 14 jours si demandé (droit de rétractation EU). Automatisé — pas de friction manuelle.
securite

Le statut premium est stocké comme custom claim sur le Firebase Auth token — vérifié côté Cloud Function à chaque requête sensible. Il ne peut pas être modifié côté client. Les custom claims sont mis à jour par les Stripe webhooks via une Cloud Function dédiée. Résistant à la manipulation client-side.

conditions_de_validation

Conversion : taux de conversion freemium → premium >12% à J30 (cible à terme : 18%). Timing : le paywall ne doit pas s'afficher avant que l'utilisateur ait vécu au moins 1 "aha moment" identifiable dans les logs (suggestion acceptée ou profil consulté >2 fois). Perception : survey post-paywall — "Avez-vous senti que la valeur justifiait le prix ?" doit être >70% positif. Churn : taux de churn mensuel premium <5%.

7// features spécifiées en détail
9// features MVP total documentées
0// features "nice to have" incluses
PRD// format directement implémentable