2525 lines
91 KiB
Markdown
2525 lines
91 KiB
Markdown
---
|
||
stepsCompleted: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
|
||
lastStep: 14
|
||
inputDocuments:
|
||
- prd.md
|
||
- project-context.md
|
||
status: complete
|
||
completedDate: 2026-01-17
|
||
---
|
||
|
||
# UX Design Specification chartbastan
|
||
|
||
**Author:** Ramez
|
||
**Date:** 2026-01-17
|
||
|
||
---
|
||
|
||
<!-- UX design content will be appended sequentially through collaborative workflow steps -->
|
||
|
||
## Executive Summary
|
||
|
||
### Project Vision
|
||
|
||
Chartbastan est une plateforme de prédiction de résultats de football révolutionnaire qui analyse **l'énergie collective des supporters** sur les réseaux sociaux (Twitter, Reddit, RSS) pour fournir des prédictions avec une précision >60%. L'approche unique consiste à capturer le "vibe" et le sentiment des fans plutôt que de se fier uniquement aux statistiques traditionnelles.
|
||
|
||
L'application s'adresse à un public cible **novice** (priorité absolue en UX) avec une expérience **mobile-first** (mobile prioritaire, desktop secondaire), utilisée principalement **entre les deux matchs** (périodes calmes). Le modèle économique est freemium : version gratuite (1-2 prédictions/jour) pour engager les utilisateurs, version premium (19.99€/mois) pour des fonctionnalités avancées et illimitées.
|
||
|
||
Le moment "Aha !" clé se produit quand un utilisateur voit une prédiction avec un haut niveau de confiance (ex: 75%+) et cette prédiction se révèle **CORRECTE**, créant une confiance immédiate dans l'algorithme.
|
||
|
||
### Target Users
|
||
|
||
**Utilisateurs Primaires (Personas PRD) :**
|
||
|
||
1. **Thomas (28 ans) - Le Parieur Passionné Occasionnel**
|
||
- Parie 2-3 fois par mois sur des matchs importants
|
||
- A perdu 400€ le mois dernier sans stratégie
|
||
- Cherche des données objectives simples, pas des cotes opaques
|
||
- **Besoin UX** : Interface ultra-simple, pas de jargon, résultats immédiats
|
||
|
||
2. **Marie (34 ans) - La Parieuse Sérieuse**
|
||
- Parie régulièrement depuis 5 ans, investisseur financier
|
||
- Cherche métriques détaillées et analyses avancées
|
||
- Prête à payer pour de la valeur réelle
|
||
- **Besoin UX** : Mode expert avec visualisations riches, données historiques
|
||
|
||
3. **Utilisateur Novice (Priorité UX)**
|
||
- Peu ou pas d'expérience avec les paris
|
||
- Mobile-first, smartphone principal
|
||
- **Critère UX principal** : "Doit pouvoir utiliser l'app facilement sans frustration"
|
||
- Besoin d'onboarding guidé et de terminologie simplifiée
|
||
|
||
**Utilisateurs Secondaires (Support) :**
|
||
|
||
4. **Julien (24 ans) - Testeur Beta Technique** : Documentation API, feedbacks
|
||
5. **Sophie (29 ans) - Admin & Opérations** : Monitoring, stabilité système
|
||
6. **Lucas (26 ans) - Support Client** : Aide utilisateurs, feedbacks structurés
|
||
|
||
### Key Design Challenges
|
||
|
||
**Challenge #1 : Simplifier la Complexité Algorithmique**
|
||
- Transformer l'analyse de sentiment et l'énergie collective en concepts intuitifs
|
||
- Expliquer le "Confidence Meter" sans jargon technique pour un novice
|
||
- Rendre les visualisations de données immédiatement compréhensibles sur mobile
|
||
|
||
**Challenge #2 : Établir la Crédibilité et la Transparence**
|
||
- Surmonter le scepticisme des novices face aux nouvelles promesses de prédiction
|
||
- Prouver que l'algorithme fonctionne vraiment (backtesting visible, résultats transparents)
|
||
- Éviter l'impression de "scam" omniprésente dans l'industrie du betting
|
||
|
||
**Challenge #3 : Mobile-First avec Données Complexes**
|
||
- Afficher des visualisations riches (graphiques d'énergie, heatmap, historique) sur petits écrans
|
||
- Équilibrer richesse d'informations avec clarté et navigation intuitive
|
||
- Optimiser pour ergonomie doigts, gestes, navigation verticale mobile
|
||
|
||
**Challenge #4 : Engagement Hors Match**
|
||
- Engager les utilisateurs "entre les deux matchs" (périodes calmes)
|
||
- Fournir du contenu pertinent quand il n'y a pas de match en cours
|
||
- Créer des routines d'usage quotidiennes même sans événement sportif
|
||
|
||
**Challenge #5 : Conversion Freemium Transparente**
|
||
- Offrir assez de valeur gratuite pour tester et engager
|
||
- Limitations claires sans frustration ("pay-to-win")
|
||
- Convertir naturellement vers premium sans être agressif
|
||
|
||
### Design Opportunities
|
||
|
||
**Opportunité #1 : Visualisations Immersives "Storytelling"**
|
||
- Transformer l'énergie collective en histoire visuelle (vague, progression)
|
||
- Créer des moments "Aha !" mémorables et partageables
|
||
- Différenciation par rapport aux sites de paris traditionnels (stats chiffres vs storytelling visuel)
|
||
|
||
**Opportunité #2 : Gamification Communautaire Virale**
|
||
- Classement social, défis entre amis, partage de réussites
|
||
- Créer une communauté vs sites de paris solitaires
|
||
- Taux de viralité : chaque utilisateur invite ≥ 2 amis (objectif PRD)
|
||
|
||
**Opportunité #3 : Onboarding Progressif Intelligible**
|
||
- Guidage étape par étape pour novices : "Commençons simple" → "Voyez les détails"
|
||
- Récupérer les utilisateurs overwhelmés par des sites concurrents
|
||
- Taux d'activation : 80%+ des beta utilisateurs trouvent l'interface "facile à utiliser"
|
||
|
||
**Opportunité #4 : Personnalisation Dynamique Contextuelle**
|
||
- Dashboard adaptatif : version simplifiée pour novices, mode expert pour avancés
|
||
- Une seule app pour différents niveaux d'expertise
|
||
- Rétention à long terme (l'app grandit avec l'utilisateur)
|
||
|
||
**Opportunité #5 : Notifications Intelligentes Non-Intrusives**
|
||
- Alertes pertinentes uniquement (match important + énergie inattendue)
|
||
- Contrebalance avec apps sportives spammeuses
|
||
- Engagement sans frustrer les utilisateurs
|
||
|
||
---
|
||
|
||
## Core User Experience
|
||
|
||
### Defining Experience
|
||
|
||
L'expérience cœur de Chartbastan est centrée sur une interaction unique : **la consultation rapide et intuitive d'une prédiction de match**. Pour l'utilisateur cible (novice, mobile-first), cette action doit être complètement sans effort et prendre moins de 3 secondes (ouvrir l'app → voir la prédiction → comprendre le niveau de confiance).
|
||
|
||
**Le Flow Cœur Idéal :**
|
||
```
|
||
Ouvrir l'app (PWA installée sur mobile) →
|
||
Match important s'affiche instantanément →
|
||
Confidence Meter visible en 0.5s →
|
||
Couleur intuitive (🟢🟡🔴) + Tooltip explicatif →
|
||
Décision prise en un coup d'œil
|
||
```
|
||
|
||
L'application n'est PAS un outil de paris en soi, mais un **assistant de prédiction basé sur l'énergie collective des supporters**. L'utilisateur ne "parie pas" dans l'app, il consulte une prédiction qu'il peut ensuite utiliser sur sa plateforme de paris préférée.
|
||
|
||
### Platform Strategy
|
||
|
||
**Plateforme Principale : Progressive Web App (PWA) Mobile-First**
|
||
|
||
**Choix : PWA (vs Native App) pour Phase 1 :**
|
||
- **Budget Phase 1** (10-20€/mois) : PWA = 0€ (inclus avec Next.js), Native = ~10,000€+ (iOS + Android)
|
||
- **Performance** : Instant load, fonctionne offline partiellement, cache local
|
||
- **Distribution** : Installable depuis le navigateur, PAS besoin d'App Store ni de review
|
||
- **Mises à jour** : Déploiement instantané (vs 3-7 jours de review App Store)
|
||
- **SEO** : Indexable par Google (bonus acquisition organique)
|
||
|
||
**Transition à Native App : Phase 2+ (5,000+ utilisateurs actifs)**
|
||
- Pour push notifications natives (iOS/Android)
|
||
- Pour accès aux capteurs (haptique, camera, biometrics)
|
||
- Pour intégration système (widgets, shortcuts)
|
||
|
||
**Desktop Complémentaire :**
|
||
- Responsive web app qui s'adapte automatiquement
|
||
- Priorité : Mobile UX → Desktop UX (non l'inverse)
|
||
- Utilisation secondaire (15-20% du trafic en Phase 1)
|
||
|
||
**Capacités PWA Exploitées :**
|
||
- Installation "Add to Home Screen" (expérience quasi-native)
|
||
- Offline partial (historique, prédictions sauvegardées)
|
||
- Background sync (notifications push via Service Workers)
|
||
- Responsive images + lazy loading (performance mobile)
|
||
|
||
### Effortless Interactions
|
||
|
||
Basé sur les tendances UX 2025-2026 et l'analyse des sites de paris, voici les interactions qui doivent être **complètement sans effort** pour l'utilisateur :
|
||
|
||
**#1 : Ouverture Instantanée + Vue Prédiction**
|
||
- **Actuel** : Sur les sites de paris, ouvrir l'app → login → navigation → trouver le match = 10-20s
|
||
- **Cible Chartbastan** : Ouvrir l'app → prédiction visible = **2-3s maximum**
|
||
- **Comment** : Pas de login obligatoire, match principal affiché automatiquement, navigation minime
|
||
- **Micro-interaction** : Animation légère lors du chargement (progress bar subtile)
|
||
|
||
**#2 : Compréhension Intuitive du Confidence Meter**
|
||
- **Problème** : "78% de confiance" est concept abstrait pour un novice
|
||
- **Solution Chartbastan** :
|
||
- Couleur intuitive : 🟢 (>70%) / 🟡 (50-70%) / 🔴 (<50%)
|
||
- Tooltip simple au tap : "Sur 100 matchs avec ce score, 78 ont été prédits correctement"
|
||
- Contexte visuel : Mini-graphique montrant l'historique de confiance sur 24h
|
||
- **Interaction** : Tap pour voir les détails → 0 friction
|
||
|
||
**#3 : Partage de Réussite en 2 Taps**
|
||
- **Scénario** : Utilisateur gagne grâce à une prédiction → veut partager
|
||
- **Expérience Chartbastan** :
|
||
- Écran de résultat : "Prédiction : PSG 78% → Résultat : 3-0 ✅ GAGNÉ !"
|
||
- Bouton "Partager" visible (bas de l'écran, accessible au pouce)
|
||
- Format pré-rempli : "J'ai gagné grâce à Chartbastan ! 🏆 [image générée]"
|
||
- Destinations : WhatsApp, Twitter, Facebook (les 3 utilisés pour virale)
|
||
- **Micro-interaction** : Animation de succès + haptic feedback (vibration légère)
|
||
|
||
**#4 : Navigation One-Thumb Zone**
|
||
- **Problème** : Apps avec menu hamburger, navigation complexe = frustration mobile
|
||
- **Solution Chartbastan** : Barre de navigation **en bas de l'écran**
|
||
- 4 onglets max : Accueil | Matchs | Historique | Profil
|
||
- Chaque onglet atteignable en 1 tap depuis l'écran principal
|
||
- Icônes compréhensibles (pas de texte abrégé)
|
||
- **Gestes** : Swipe gauche/droite entre onglets, pull-to-refresh sur écrans
|
||
- **Design** : Zone de clic min 44x44px (Apple HIG) / 48x48px (Material Design)
|
||
|
||
**#5 : Onboarding Progressif Non-Intrusif**
|
||
- **Problème** : Onboarding obligatoire de 5 écrans = taux d'abandon 60%+
|
||
- **Solution Chartbastan** : Onboarding **optionnel** en 3 étapes
|
||
1. "Comment ça marche ?" → Animation visuelle de l'énergie collective (vague, progression)
|
||
2. "Comprendre les prédictions" → Démonstration interactive du Confidence Meter
|
||
3. "Votre premier match" → Guidage pour voir une prédiction
|
||
- **UX** : Bouton "Passer" visible sur chaque écran (peut être consulté plus tard dans Paramètres)
|
||
- **Micro-interaction** : Progress bar au haut de l'écran (1/3, 2/3, 3/3)
|
||
|
||
### Critical Success Moments
|
||
|
||
Ces moments déterminent le succès ou l'échec de l'expérience utilisateur :
|
||
|
||
**Moment #1 : Premier "Aha !" (Confiance Immédiate)**
|
||
- **Scénario** : Utilisateur voit une prédiction → suit la prédiction → **elle est CORRECTE**
|
||
- **Expérience requise** :
|
||
- Notification push : "🏆 Votre prédiction PSG 78% est CONFIRMÉE ! Score final : 3-0"
|
||
- Badge de confiance dans l'app : "Précision personnelle : 1/1 (100%)"
|
||
- Visualisation du succès : Comparaison Prédiction vs Réel (side-by-side)
|
||
- **Échec critique** : Si la prédiction est mauvaise, l'utilisateur peut ne jamais revenir
|
||
- **Mitigation** : Montrer le taux de réussite global (ex: "Ce score a 67% de précision historique")
|
||
- **Objectif PRD** : 80%+ des utilisateurs retournent dans les 7 jours après première consultation réussie
|
||
|
||
**Moment #2 : Onboarding Novice (Désamorcer la Frustration)**
|
||
- **Scénario** : Premier utilisateur novice ouvre l'app, complètement perdu
|
||
- **Expérience requise** :
|
||
- Écran d'accueil avec message : "Bienvenue ! Voici les prédictions pour ce soir"
|
||
- Premier match visible avec Confidence Meter clair
|
||
- Bouton "?" visible → Ouvre l'onboarding optionnel
|
||
- Texte explicatif en bas : "Tap sur le match pour voir les détails"
|
||
- **Échec critique** : Utilisateur ferme l'app après 10s sans comprendre
|
||
- **Objectif PRD** : 80%+ des beta utilisateurs trouvent l'interface "facile à utiliser"
|
||
|
||
**Moment #3 : Conversion Freemium (Sans Frustration)**
|
||
- **Scénario** : Utilisateur gratuit atteint la limite (2 prédictions/jour)
|
||
- **Expérience requise** :
|
||
- Upsell subtil, PAS agressif
|
||
- Modal contextuel : "Voir plus de prédictions ? Passez Premium pour 19.99€/mois"
|
||
- Montrez la valeur : "Vous avez 67% de réussite → Premium vous donne +50 prédictions/jour + métriques détaillées"
|
||
- Bouton "Peut-être plus tard" (disparait temporairement)
|
||
- **Échec critique** : Utilisateur supprime l'app frustré par les limitations
|
||
- **Objectif PRD** : Taux de conversion gratuit → premium > 5% après 30 jours
|
||
|
||
**Moment #4 : Échec Système (Gérer la Frustration)**
|
||
- **Scénario** : API Twitter rate limit dépassé (incident Sophie dans PRD)
|
||
- **Expérience requise** :
|
||
- Transparence totale : Bandière en haut : "⚠️ Données Twitter temporairement indisponibles"
|
||
- Mode dégradé fonctionnel : Prédictions basées sur Reddit + RSS (confiance réduite : 58% vs 67%)
|
||
- Estimation de durée : "Retour prévu dans ~15 minutes"
|
||
- Bouton "En savoir plus" → Explique la cause technique simplement
|
||
- **Échec critique** : Utilisateur pense l'app est "cassée" ou "un scam"
|
||
- **Objectif PRD** : Uptime > 99.5%, incidents gérés avec transparence
|
||
|
||
**Moment #5 : Première Réussite de Prédiction - Moment "Aha !"**
|
||
- **Scénario** : Utilisateur voit une prédiction → suit la prédiction → **elle est CORRECTE**
|
||
- **Expérience requise** :
|
||
- Notification push festive : "🏆 Votre prédiction PSG 78% est CONFIRMÉE ! Score final : 3-0"
|
||
- Visualisation side-by-side : Prédiction (78%) vs Réel (3-0)
|
||
- Badge personnel : "Précision : 100% (1/1) 🌟"
|
||
- Bouton "Partager" pré-rempli : "J'ai gagné grâce à Chartbastan ! 🏆"
|
||
- Animation de succès + haptic feedback (vibration légère)
|
||
- **Objectif PRD** : 80%+ des utilisateurs retournent dans les 7 jours
|
||
|
||
**Moment #6 : Conversion Freemium (Limite atteinte) - Upsell**
|
||
- **Scénario** : Utilisateur gratuit atteint la limite (2 prédictions/jour)
|
||
- **Expérience requise** :
|
||
- Upsell subtil, PAS agressif
|
||
- Modal contextuel : "Voir +50 prédictions/jour ? Passez Premium pour 19.99€/mois"
|
||
- Montrez la valeur : "Vous avez 67% de réussite → Premium vous donne métriques détaillées + historique complet"
|
||
- Bouton "Peut-être plus tard" visible (disparait temporairement)
|
||
- Publicités premium visibles mais non intrusives
|
||
- **Objectif PRD** : Taux de conversion > 5% après 30 jours
|
||
|
||
### Experience Principles
|
||
|
||
Ces principes guideront toutes les décisions UX pour Chartbastan :
|
||
|
||
**Principe #1 : Simplicité Absolue pour le Novice**
|
||
- **Manifestation** : Interface épurée, hiérarchie visuelle forte, espace blanc généreux
|
||
- **Règle** : Pas de jargon technique sans explication contextuelle
|
||
- **Métrique** : Chaque action possible en 1-3 taps maximum
|
||
- **Anti-pattern** : Écrans surchargés, navigation complexe, onboarding obligatoire
|
||
|
||
**Principe #2 : Performance & Rapidité (Mobile-First)**
|
||
- **Manifestation** : Load time < 2s sur 3G, transitions fluides à 60fps
|
||
- **Règle** : Feedback visuel immédiat (micro-interactions) sur chaque action
|
||
- **Métrique** : Time-to-value < 3s (ouvrir → voir la prédiction → comprendre)
|
||
- **Anti-pattern** : Loaders lents, transitions saccadées, absence de feedback
|
||
|
||
**Principe #3 : Transparence & Confiance**
|
||
- **Manifestation** : Backtesting visible, explication claire du niveau de confiance, communication transparente des incidents
|
||
- **Règle** : Montrer le "pourquoi" (ex: "78% de confiance = sur 100 matchs, 78 corrects")
|
||
- **Métrique** : Taux de rétention 7 jours > 30% (indicateur de confiance)
|
||
- **Anti-pattern** : "Boîte noire" (algorithme opaque), silence sur incidents, promesses non étayées
|
||
|
||
**Principe #4 : Personnalisation Intelligente**
|
||
- **Manifestation** : Dashboard adaptatif (version novice → version expert), suggestions basées sur l'historique
|
||
- **Règle** : L'app s'adapte progressivement à l'utilisateur (apprend ses préférences)
|
||
- **Métrique** : Taux de conversion novice → expert > 15% (indicateur de progression)
|
||
- **Anti-pattern** : Interface statique, suggestions non pertinentes, UX "one-size-fits-all"
|
||
|
||
**Principe #5 : Gamification Équilibrée**
|
||
- **Manifestation** : Badges et classements pour engagement, partage viral des réussites
|
||
- **Règle** : Gamification sans FOMO excessif, options de désactivation
|
||
- **Métrique** : Taux de viralité ≥ 2 (chaque utilisateur invite ≥ 2 amis)
|
||
- **Anti-pattern** : Notifications spammeuses, FOMO forcé, gamification intrusive
|
||
|
||
**Principe #6 : Design Accessible & Inclusif**
|
||
- **Manifestation** : Typographie lisible, contraste élevé, zone de clic adaptée au pouce
|
||
- **Règle** : Dark mode par défaut, support screen reader, textes ajustables
|
||
- **Métrique** : WCAG 2.1 AA compliance (contraste minimum 4.5:1)
|
||
- **Anti-pattern** : Textes illisibles, contrastes faibles, zone de clic trop petite
|
||
|
||
---
|
||
|
||
## Desired Emotional Response
|
||
|
||
### Primary Emotional Goals
|
||
|
||
Basé sur les directives du propriétaire et l'analyse des meilleures pratiques 2025-2026 pour les sites de paris, Chartbastan vise à créer une réponse émotionnelle unique centrée sur **l'enthousiasme immédiat** combiné à une **confiance absolue**.
|
||
|
||
**#1 : Enthousiasme Immédiat (0-5 secondes)**
|
||
- **Objectif** : L'utilisateur doit être accroché visuellement dès l'arrivée
|
||
- **Manifestation UX** :
|
||
- Hero section dynamique, moderne et professionnelle (pas l'impression d'un "site amateur")
|
||
- Promesse claire : "Voyez ce que les supporters pensent vraiment grâce à l'énergie collective"
|
||
- CTA évident : "Voir les prédictions du jour"
|
||
- Contraste concurrentiel : Les sites de paris sont souvent overwhelm et statiques → Chartbastan est dynamique mais PAS chaotique
|
||
|
||
**#2 : Confiance Absolue (Éliminer Toute Méfiance)**
|
||
- **Objectif** : Signaux de confiance visibles et immédiats (0 méfiance)
|
||
- **Manifestation UX** :
|
||
- Badges de sécurité en premier pli : SSL, chiffrement, certifications
|
||
- Mentions légales accessibles et claires (RGPD, conditions)
|
||
- Support client 24/7 visible (même pour utilisateurs non-inscrits)
|
||
- Transparence totale : pas de "petits caractères" trompeurs, conditions explicites
|
||
- Backtesting visible : Preuve que l'algorithme fonctionne vraiment
|
||
- **Contraste concurrentiel** : L'industrie du betting souffre de méfiance → Chartbastan est transparent et professionnel
|
||
|
||
**#3 : Sécurité & Crédibilité (Face à la Publicité)**
|
||
- **Contexte critique** : Le site contiendra beaucoup de publicités (sites de paris partenaires)
|
||
- **Objectif** : La publicité est présente MAIS bien gérée, renforçant la crédibilité
|
||
- **Manifestation UX** :
|
||
- **Jamais intrusive** sur l'action cœur (consultation de prédiction)
|
||
- **Clairement identifiée** comme "Sponsorisé" ou "Publicité" (0 ambiguïté)
|
||
- **Qualité contrôlée** : Partenaires crédibles uniquement, pas de pubs douteuses
|
||
- **Placement réfléchi** : Bannières en haut/bas, sidebar sur desktop (pas d'interstitiels sur l'action cœur)
|
||
- **Contrôle utilisateur** : Possibilité de fermer/masquer les pubs
|
||
- **Contraste concurrentiel** : Les sites avec pubs envahissantes perdent la confiance → Chartbastan gère les pubs intelligemment
|
||
|
||
**#4 : Clarté & Contrôle (UX Novice)**
|
||
- **Objectif** : Le novice sent "Je comprends tout, je ne suis pas perdu"
|
||
- **Manifestation UX** :
|
||
- Chaque élément expliqué simplement, pas de jargon sans contexte
|
||
- Contrôle total : l'utilisateur sait ce qui est contenu fonctionnel vs publicité
|
||
- Hiérarchie visuelle forte : Contenu prioritaire, pubs secondaires
|
||
- **Contraste concurrentiel** : Les sites de paris sont overwhelms → Chartbastan est clair et organisé
|
||
|
||
### Emotional Journey Mapping
|
||
|
||
**Moment 1 : Découverte (0-10s) - Première Impression**
|
||
- **Émotion ciblée** : Curiosité → Enthousiasme → Confiance
|
||
- **Manifestation UX** :
|
||
- Hero section visuelle dynamique (image de supporters en énergie, progression de vague)
|
||
- Signaux de confiance en premier pli (pas besoin de scroller pour les voir)
|
||
- Promesse claire en headline : "Prédictions basées sur l'énergie collective des supporters"
|
||
- CTA évident : "Voir les prédictions du jour"
|
||
- Publicité en arrière-plan, PAS sur le hero
|
||
- **Métrique de succès** : Taux de rebond < 40% (indicateur de confiance immédiate)
|
||
|
||
**Moment 2 : Première Consultation (10-30s) - Action Cœur**
|
||
- **Émotion ciblée** : Confiance → Clarté → Excitation
|
||
- **Manifestation UX** :
|
||
- Confidence Meter visible en 0.5s (couleur intuitive 🟢🟡🔴)
|
||
- Tooltip explicatif simple au tap : "Sur 100 matchs, 78 ont été prédits correctement"
|
||
- Pas de jargon (ex: "Sentiment" vs "Algorithme de pondération temporelle")
|
||
- Publicité en arrière-plan, pas sur le match principal
|
||
- Mini-graphique historique sur 24h pour contexte
|
||
- **Métrique de succès** : Time-to-value < 3s (ouvrir → voir → comprendre)
|
||
|
||
**Moment 3 : Utilisation Récurrente (Jours suivants) - Habitude**
|
||
- **Émotion ciblée** : Habitude → Confiance accrue → Engagement
|
||
- **Manifestation UX** :
|
||
- Dashboard personnalisé (matchs favoris en premier)
|
||
- Notifications pertinentes uniquement (matchs importants, changements d'énergie inattendue)
|
||
- Progression visible : "Précision personnelle : 67% (5/7 correctes)"
|
||
- Publicité adaptée au comportement utilisateur (pas de pubs répétitives)
|
||
- **Métrique de succès** : DAU/MAU > 20% (engagement régulier)
|
||
|
||
**Moment 4 : Incident Système (Ex: API Twitter down) - Tolérance**
|
||
- **Émotion ciblée** : Compréhension → Tolérance → Confiance maintenue
|
||
- **Manifestation UX** :
|
||
- Transparence totale : Bandière explicative en haut "⚠️ Données Twitter temporairement indisponibles"
|
||
- Mode dégradé fonctionnel : Prédictions basées sur Reddit + RSS (confiance réduite : 58% vs 67%)
|
||
- Estimation de durée claire : "Retour prévu dans ~15 minutes"
|
||
- Bouton "En savoir plus" → Explique la cause technique simplement
|
||
- **Métrique de succès** : Taux de rétention post-incident > 80% (confiance maintenue)
|
||
|
||
**Moment 5 : Première Réussite de Prédiction - Moment "Aha !"**
|
||
- **Émotion ciblée** : Excitation → Accomplissement → Viralité
|
||
- **Manifestation UX** :
|
||
- Notification push festive : "🏆 Votre prédiction PSG 78% est CONFIRMÉE ! Score final : 3-0"
|
||
- Visualisation side-by-side : Prédiction (78%) vs Réel (3-0)
|
||
- Badge personnel : "Précision : 100% (1/1) 🌟"
|
||
- Bouton "Partager" pré-rempli : "J'ai gagné grâce à Chartbastan ! 🏆"
|
||
- Animation de succès + haptic feedback (vibration légère)
|
||
- **Métrique de succès** : 80%+ des utilisateurs retournent dans les 7 jours
|
||
|
||
**Moment 6 : Conversion Freemium (Limite atteinte) - Upsell**
|
||
- **Émotion ciblée** : Compréhension → Décision → Sans frustration
|
||
- **Manifestation UX** :
|
||
- Upsell subtil, PAS agressif
|
||
- Modal contextuel : "Voir +50 prédictions/jour ? Passez Premium pour 19.99€/mois"
|
||
- Montrez la valeur : "Vous avez 67% de réussite → Premium vous donne métriques détaillées + historique complet"
|
||
- Bouton "Peut-être plus tard" visible (disparait temporairement)
|
||
- Publicités premium visibles mais non intrusives
|
||
- **Métrique de succès** : Taux de conversion > 5% après 30 jours
|
||
|
||
### Micro-Emotions
|
||
|
||
**Confiance vs. Confusion**
|
||
- **Objectif** : 100% Confiance, 0% Confusion
|
||
- **Manifestation UX** :
|
||
- Confidence Meter avec contexte clair (pas juste "78%" sans explication)
|
||
- Tooltip simple au premier tap : "Sur 100 matchs, 78 ont été prédits correctement"
|
||
- Publicité clairement distinguée du contenu (fond subtil + texte "Sponsorisé")
|
||
- Chaque terme technique expliqué en tooltip simple
|
||
- **Anti-pattern à éviter** : Terms non expliqués, ambiguïté pub/contenu
|
||
|
||
**Excitation vs. Anxiété**
|
||
- **Objectif** : Excitation contrôlée, PAS Anxiété
|
||
- **Manifestation UX** :
|
||
- Pas de compteurs régénératifs (ex: "Plus que 2 prédictions aujourd'hui !")
|
||
- Pas de FOMO forcé (ex: "Offre expire dans 30 secondes !")
|
||
- Notifications positives (réussites) PAS négatives (warnings constants)
|
||
- Progression visuelle positive (ex: "Précision : 67%")
|
||
- **Anti-pattern à éviter** : Gamification toxique, FOMO excessif
|
||
|
||
**Accomplissement vs. Frustration**
|
||
- **Objectif** : Accomplissement maximal, Frustration minimale
|
||
- **Manifestation UX** :
|
||
- Feedback visuel immédiat sur chaque action (bouton pressé, chargé, succès)
|
||
- Pas de formulaires longs ou complexes (inscription en 2-3 étapes)
|
||
- Messages d'erreur constructifs : "Email invalide" vs "Erreur 500"
|
||
- Progress bar pour actions longues (ex: "Analyse en cours... 75%")
|
||
- **Anti-pattern à éviter** : Feedback absent, erreurs cryptiques, formulaires infinis
|
||
|
||
**Appartenance vs. Isolement**
|
||
- **Objectif** : Appartenance à la communauté, PAS Isolement
|
||
- **Manifestation UX** :
|
||
- Classement social visible : "Top 100 Prophètes"
|
||
- Partage de réussites facilité (bouton pré-rempli)
|
||
- Communauté visible : "5,234 utilisateurs actifs aujourd'hui"
|
||
- Badges et défis entre amis
|
||
- **Anti-pattern à éviter** : Expérience solitaire, aucune communauté visible
|
||
|
||
### Design Implications
|
||
|
||
**Stratégie de Publicité Intelligente (Critique pour Confiance)**
|
||
|
||
**Placement Réfléchi :**
|
||
- **Bannière haute** : 100% largeur, hauteur max 90px, bouton X visible
|
||
- **Sidebar (desktop)** : Largeur max 300px, contenu secondaire
|
||
- **Interstitiels** : INTERDIT sur l'action cœur (consultation de prédiction)
|
||
- **Modaux publicitaires** : Jamais sur les 10 premières secondes (respect du "first impression")
|
||
- **Règle d'or** : Publicité ne doit JAMAIS couvrir le Confidence Meter ou l'action principale
|
||
|
||
**Qualité des Pubs :**
|
||
- **Partenaires crédibles uniquement** : Marques connues liées au sport/paris/betting
|
||
- **Créatifs propres** : Pas de pubs pixellisées, floues, douteuses
|
||
- **Contenu pertinent** : Lié au contexte (sport, paris, gaming, tech)
|
||
- **Discrimination visuelle** : Fond subtil (#F8F9FA) + texte "Sponsorisé" en gris (#6C757D)
|
||
|
||
**Contrôle Utilisateur :**
|
||
- **Fermeture possible** : Bouton X visible sur chaque bannière (zone de clic min 44x44px)
|
||
- **Limite de fréquence** : Pas de même pub à chaque refresh (max 1x/heure)
|
||
- **Mode réduit** : Option dans paramètres ("Réduire les publicités" / "Moins de pubs")
|
||
- **Feedback utilisateur** : "Cette pub est pertinente ?" → apprentissage pour affichage
|
||
|
||
**Intégration UI :**
|
||
- **Publicité ≠ Contenu** : Hiérarchie visuelle forte (contenu prioritaire, pubs secondaires)
|
||
- **Contraste** : Fond subtil pour ne pas fatiguer les yeux (pas de blanc éblouissant en mode sombre)
|
||
- **Animation** : Pas de GIFs agressifs, transitions douces (duration 300ms)
|
||
- **Dark mode** : Pubs adaptées (pas de blanc éblouissant, respect du thème)
|
||
|
||
**Implications pour le Confidence Meter :**
|
||
- **Couleur intuitive** : 🟢 (>70%) / 🟡 (50-70%) / 🔴 (<50%)
|
||
- **Contexte immédiat** : Tooltip au premier tap, PAS besoin d'aller ailleurs
|
||
- **Historique visible** : Mini-graphique montrant l'évolution sur 24h
|
||
- **Comparaison** : "Prédiction : 78% vs Moyenne : 65%" (contexte)
|
||
|
||
**Implications pour les Signaux de Confiance :**
|
||
- **Premier pli** : Badges SSL, licences, support visible SANS scroller
|
||
- **Backtesting** : Tableau visible sur landing page ("Sur 100 matchs historiques, 63% de précision")
|
||
- **Preuve sociale** : "5,234 utilisateurs actifs" + testimonials récents
|
||
- **Transparence incidents** : Bandière explicative + mode dégradé visible
|
||
|
||
### Emotional Design Principles
|
||
|
||
**Principe #1 : Première Impression = Confiance**
|
||
- **Règle** : Signaux de confiance visibles en premier pli (pas besoin de scroller)
|
||
- **Manifestation** : Badges sécurité + backtesting + support visible dans hero section
|
||
- **Métrique** : Taux de rebond < 40% (indicateur de confiance immédiate)
|
||
- **Anti-pattern** : Design amateur, absence de mentions légales, publicités envahissantes dès l'arrivée
|
||
|
||
**Principe #2 : Transparence Totale (Publicité Incluse)**
|
||
- **Règle** : Chaque élément sponsorisé est clairement identifié, sans ambiguïté
|
||
- **Manifestation** : Fond subtil + texte "Sponsorisé", bouton X sur chaque pub
|
||
- **Métrique** : Taux de clic sur publicités < 15% du trafic total (indicateur de non-intrusivité)
|
||
- **Anti-pattern** : Publicités trompeuses, "sponsored content" masqué, popups impossibles à fermer
|
||
|
||
**Principe #3 : Enthousiasme Soutenu (Pas Overwhelm)**
|
||
- **Règle** : Design énergique mais PAS chaotique, hiérarchie visuelle forte
|
||
- **Manifestation** : Hero dynamique + espace blanc généreux + écrans épurés
|
||
- **Métrique** : Time-to-value < 3s (voir la prédiction → comprendre)
|
||
- **Anti-pattern** : Écrans surchargés, animations excessives, trop d'informations
|
||
|
||
**Principe #4 : Respect du Novice (Zero Jargon)**
|
||
- **Règle** : Chaque terme technique a une explication contextuelle simple
|
||
- **Manifestation** : Tooltips au tap, onboarding optionnel, terminologie simple
|
||
- **Métrique** : 80%+ des utilisateurs trouvent l'interface "facile à utiliser"
|
||
- **Anti-pattern** : Jargon non expliqué, formulaires complexes, onboarding obligatoire
|
||
|
||
**Principe #5 : Contrôle Utilisateur (Autonomie)**
|
||
- **Règle** : L'utilisateur peut fermer/masquer les publicités, limiter les notifications
|
||
- **Manifestation** : Bouton X sur chaque pub, option "Moins de pubs", désactivation notifications
|
||
- **Métrique** : Taux de désabonnement < 20% (indicateur de respect)
|
||
- **Anti-pattern** : Publicités impossibles à fermer, notifications spammeuses, absence de contrôle
|
||
|
||
**Principe #6 : Confiance par Transparence (Surtout avec Publicité)**
|
||
- **Règle** : La publicité gérée intelligemment renforce la crédibilité
|
||
- **Manifestation** : Partenaires crédibles, qualité contrôlée, placement réfléchi
|
||
- **Métrique** : Taux de plaintes sur publicités < 5% (indicateur de bonne gestion)
|
||
- **Anti-pattern** : Pubs douteuses, placement intrusif, absence de contrôle utilisateur
|
||
|
||
---
|
||
|
||
## UX Pattern Analysis & Inspiration
|
||
|
||
### Inspiring Products Analysis
|
||
|
||
Basé sur l'analyse des meilleures applications de paris sportifs et mobile UX en 2025-2026, voici les produits qui inspirent notre design pour Chartbastan.
|
||
|
||
**Bet365 - Navigation Simplifiée**
|
||
Leaders des paris sportifs avec navigation intuitive et live betting optimisé.
|
||
- Navigation claire : Onglets logiques (In-Play, Upcoming, Sports) accessibles en 1 tap
|
||
- Live betting fluide : Scores et cotes mis à jour en temps réel sans rechargement
|
||
- Bet-slip fixe : Accessible depuis n'importe quel écran, pas de navigation perdue
|
||
- Filtres efficaces : Recherche rapide par sport, ligue, équipe
|
||
|
||
**Unibet - Confiance & Sécurité**
|
||
Focus sur la transparence et la sécurité pour maximiser la confiance des utilisateurs.
|
||
- Signaux de confiance visibles : Licences, certifications, mentions légales en premier pli
|
||
- Transparence des paiements : Frais visibles, délais clairs, historique accessible
|
||
- Support 24/7 accessible : Live chat visible sur tous les écrans, même pour non-inscrits
|
||
- Politiques claires : Conditions, confidentialité, jeu responsable bien affichées
|
||
|
||
**William Hill - Mobile-First**
|
||
Interface optimisée pour mobile avec gestes tactiles et navigation one-thumb.
|
||
- Zone de clic adaptée : Boutons min 44x44px (Apple HIG) / 48x48px (Material Design)
|
||
- Navigation basse : Barre de navigation en bas de l'écran (accessible au pouce)
|
||
- Gestes intuitifs : Swipe entre onglets, pull-to-refresh, swipe-to-dismiss
|
||
- Performance mobile : Load time < 2s sur 3G, animations fluides à 60fps
|
||
|
||
**Tinder - Swipe Navigation**
|
||
Navigation par swipe intuitive et engagement micro-interactif.
|
||
- Swipe intuitif : Gauche/droite pour décider, pas de clics multiples
|
||
- Feedback visuel : Animations de transition fluides, haptic feedback (vibration)
|
||
- Action rapide : 1 décision en 1 swipe, pas de menus complexes
|
||
- Engagement : Micro-interactions créent l'habitude de revenir
|
||
|
||
**Spotify - Navigation Tab**
|
||
Navigation par onglets avec découverte progressive et contenu personnalisé.
|
||
- Onglets logiques : Accueil | Recherche | Bibliothèque | Profil (clairs et constants)
|
||
- Personnalisation : Contenu adapté à l'historique et aux préférences utilisateur
|
||
- Découverte progressive : Onboarding optionnel, pas forcé
|
||
- Dark mode natif : Adaptation automatique jour/nuit
|
||
|
||
**Instagram - Story & Feed**
|
||
Engagement viral, partage social, contenu visuel éphémère.
|
||
- Stories éphémères : Contenu qui disparaît en 24h → anticipation/urgence
|
||
- Partage facilité : 1 tap pour partager vers multiples plateformes
|
||
- Contenu visuel : Photos/vidéos prioritaires, texte secondaire
|
||
- Gamification légère : Badges, likes, commentaires créent communauté
|
||
|
||
**Insight Clé**
|
||
Les meilleures applications combinent navigation simplifiée, confiance transparente, et engagement micro-interactif. Chartbastan doit s'inspirer de ces patterns tout en restant unique (prédiction par énergie collective).
|
||
|
||
**Unicité**
|
||
L'approche "prédiction par énergie collective des supporters" combinée avec cette UX éprouvée différenciera Chartbastan des sites de paris traditionnels (stats chiffres vs storytelling visuel).
|
||
|
||
### Transferable UX Patterns
|
||
|
||
Basé sur l'analyse des apps inspirantes, voici les patterns que nous pouvons adapter pour Chartbastan.
|
||
|
||
**Navigation Patterns:**
|
||
|
||
**Bottom Navigation Bar (Mobile-First)**
|
||
Barre de navigation en bas de l'écran, accessible au pouce. 4-5 onglets max.
|
||
- Adaptation Chartbastan : Accueil | Matchs | Historique | Profil
|
||
- Source : William Hill, Spotify
|
||
|
||
**Fixed Bet-Slip / Action Bar**
|
||
Composant fixe accessible depuis tous les écrans, montre l'action principale (parier, partager).
|
||
- Adaptation Chartbastan : "Voir les prédictions" ou "Partager cette réussite" en bas fixe
|
||
- Source : Bet365
|
||
|
||
**Tab Navigation (Consistante)**
|
||
Onglets logiques et constants sur tous les écrans, pas de menus hamburger complexes.
|
||
- Adaptation Chartbastan : Matchs À Venir | En Direct | Favoris | Tous
|
||
- Source : Spotify
|
||
|
||
**Interaction Patterns:**
|
||
|
||
**Swipe-to-Navigate (Décision Rapide)**
|
||
Swipe gauche/droite pour naviguer ou décider, pas de clics multiples.
|
||
- Adaptation Chartbastan : Swipe entre matchs précédents/suivants dans l'historique
|
||
- Source : Tinder
|
||
|
||
**Tap-to-Tooltip (Contexte Simplifié)**
|
||
Tap sur élément pour voir détail contextuel simple, pas de pages séparées.
|
||
- Adaptation Chartbastan : Tap sur Confidence Meter → Tooltip "Sur 100 matchs, 78 corrects"
|
||
- Source : Bet365
|
||
|
||
**Pull-to-Refresh (Mise à Jour)**
|
||
Tirer vers le bas pour rafraîchir, pas de bouton refresh explicite.
|
||
- Adaptation Chartbastan : Pull-to-refresh sur écran Matchs pour voir les dernières prédictions
|
||
- Source : Twitter, Instagram
|
||
|
||
**Visual Patterns:**
|
||
|
||
**Confidence Colors (Intuitive)**
|
||
Couleurs universelles : Vert (positif/confiance) / Orange (neutre/attention) / Rouge (négatif/erreur).
|
||
- Adaptation Chartbastan : Confidence Meter : >70% (vert) / 50-70% (orange) / <50% (rouge)
|
||
- Source : Bet365, William Hill
|
||
|
||
**Progress Visualization (Storytelling)**
|
||
Visualisation de progression (vague, timeline) pour montrer évolution historique.
|
||
- Adaptation Chartbastan : Graphique d'énergie collective sur 24h montrant montée/descente
|
||
- Source : Spotify (progress bar), Instagram (stories)
|
||
|
||
**Micro-Animation (Feedback)**
|
||
Animations subtiles (300ms) pour feedback, transitions, succès.
|
||
- Adaptation Chartbastan : Animation de succès quand prédiction confirmée, haptic feedback légère
|
||
- Source : Tinder, Instagram
|
||
|
||
### Anti-Patterns to Avoid
|
||
|
||
Basé sur l'analyse des échecs courants dans l'industrie des paris et des apps mobiles, voici les patterns à absolument éviter.
|
||
|
||
**Onboarding Obligatoire de 5+ Écrans**
|
||
Forcer l'utilisateur à passer par 5+ écrans avant d'accéder au produit. Taux d'abandon : 60%+.
|
||
- Alternative : Onboarding optionnel en 3 étapes max, bouton "Passer" visible
|
||
- Impact : Perd des utilisateurs potentiels, frustration dès l'arrivée
|
||
|
||
**Publicité Intrusive sur Action Cœur**
|
||
Interstitiels, popups, bannières qui couvrent l'action principale (parier, consulter).
|
||
- Alternative : Publicités en haut/bas, sidebar desktop, jamais sur l'action cœur
|
||
- Impact : Ruine la confiance, frustration utilisateur, taux de rebond élevé
|
||
|
||
**Jargon Technique Non Expliqué**
|
||
Termes comme "algorithme de pondération temporelle", "coefficient de virale" sans contexte.
|
||
- Alternative : Terminologie simple + tooltips explicatifs au premier tap
|
||
- Impact : Novice se sent perdu, abandonne l'app
|
||
|
||
**Compteurs Régénératifs (FOMO Forcé)**
|
||
"Plus que 2 prédictions aujourd'hui !", "Offre expire dans 30 secondes !"
|
||
- Alternative : Notifications positives (réussites) PAS négatives, pas de FOMO
|
||
- Impact : Anxiété, méfiance, taux de désabonnement
|
||
|
||
**Menus Hamburgers Profonds (Navigation Complexe)**
|
||
3+ niveaux de menus, sous-menus, navigation difficile sur mobile.
|
||
- Alternative : Navigation basse (4-5 onglets), tabs constants, hiérarchie plate
|
||
- Impact : Navigation frustrante, time-to-value augmenté
|
||
|
||
**Feedback Absent (Silence)**
|
||
Bouton pressé = rien, erreur = "Erreur 500", chargement = loader infini.
|
||
- Alternative : Feedback visuel immédiat, messages constructifs, progress bars
|
||
- Impact : Confusion, frustration, manque de confiance
|
||
|
||
**Design Sombre/Chaotique (Overwhelm)**
|
||
Trop d'informations, couleurs agressives, animations excessives, pas de hiérarchie.
|
||
- Alternative : Interface épurée, espace blanc généreux, hiérarchie visuelle forte
|
||
- Impact : Overwhelm, cognitive load élevé, taux de rebond
|
||
|
||
### Design Inspiration Strategy
|
||
|
||
Stratégie claire pour utiliser l'inspiration tout en gardant Chartbastan unique (prédiction par énergie collective).
|
||
|
||
**Ce que nous devons ADOPTER:**
|
||
|
||
**Navigation** : Bottom Navigation Bar + Fixed Action Bar + Tab Navigation
|
||
Supporte notre but de mobile-first, time-to-value < 3s, navigation one-thumb zone
|
||
|
||
**Confiance** : Signaux de Sécurité + Transparence Totale + Support Visible
|
||
Élimine la méfiance (objectif #1), rassure les novices, prouve la crédibilité
|
||
|
||
**Publicité** : Placement Réfléchi + Qualité Contrôlée + Transparence "Sponsorisé"
|
||
Intégration intelligente (pas intrusive) renforce la confiance, pas frustrant
|
||
|
||
**Visuel** : Confidence Colors + Progress Visualization + Micro-Animations
|
||
Supporte l'expérience émotionnelle (enthousiasme, confiance, clarté)
|
||
|
||
**Engagement** : Partage Viral + Gamification Légère + Notifications Intelligentes
|
||
Crée la communauté, encourage la rétention, taux de viralité ≥ 2
|
||
|
||
**Ce que nous devons ADAPTER:**
|
||
|
||
**Swipe Navigation (→ Contexte Chartbastan)**
|
||
Adapter le swipe Tinder pour naviguer entre matchs dans l'historique (pas pour les prédictions).
|
||
- Pourquoi : Swipe est rapide, mais les prédictions ne sont pas des "matches" à décider instantanément
|
||
|
||
**Story Format (→ Contexte Chartbastan)**
|
||
Adapter l'Instagram Stories pour les "flashbacks" des 24h avant match.
|
||
- Pourquoi : Les prédictions sont historiques, pas éphémères comme les stories
|
||
|
||
**Complex Gamification (→ Contexte Chartbastan)**
|
||
Simplifier la gamification (badges, classements) sans FOMO excessif.
|
||
- Pourquoi : Chartbastan doit rester sérieux et crédible, pas trop "jeu"
|
||
|
||
**Ce que nous devons ÉVITER:**
|
||
|
||
❌ Onboarding Obligatoire
|
||
Contraire notre but d'enthousiasme immédiat (0 friction)
|
||
|
||
❌ FOMO Forcé
|
||
Contraire notre émotion de sérénité (pas d'anxiété)
|
||
|
||
❌ Publicité Intrusive
|
||
Contraire notre principe de confiance via transparence
|
||
|
||
❌ Jargon Non Expliqué
|
||
Contraire notre principe de respect du novice (zero jargon)
|
||
|
||
❌ Feedback Absent
|
||
Contraire notre principe d'accomplissement (feedback immédiat)
|
||
|
||
---
|
||
|
||
**Résumé de la Stratégie**
|
||
|
||
Chartbastan adoptera les patterns éprouvés des meilleures applications (Bet365, Unibet, William Hill, Tinder, Spotify, Instagram) tout en restant unique via :
|
||
|
||
- Mobile-first avec navigation basse, one-thumb zone, gestes intuitifs
|
||
- Confiance absolue via signaux de sécurité, transparence totale, support visible
|
||
- Publicité intelligente (placement réfléchi, qualité contrôlée, clairement identifiée)
|
||
- Visualisation intuitive (couleurs confiance, progress storytelling, micro-animations)
|
||
- Engagement viral (partage facilité, gamification légère, notifications pertinentes)
|
||
|
||
**Unicité** : L'approche "prédiction par énergie collective des supporters" combinée avec cette UX éprouvée différenciera Chartbastan des sites de paris traditionnels (stats chiffres vs storytelling visuel).
|
||
|
||
---
|
||
|
||
## Defining Core Experience
|
||
|
||
### 1. Core Interaction Identification
|
||
|
||
**L'Interaction Cœur de Chartbastan : Consultation de Prédiction**
|
||
|
||
La seule interaction absolument critique pour Chartbastan est : **la consultation rapide et intuitive d'une prédiction de match**. Pour l'utilisateur cible (novice, mobile-first), cette action doit être complètement sans effort et prendre moins de 3 secondes (ouvrir l'app → voir la prédiction → comprendre le niveau de confiance).
|
||
|
||
**Pourquoi c'est l'action critique :**
|
||
- C'est la valeur ajoutée principale que l'outil fournit aux utilisateurs
|
||
- Si cette interaction est parfaite (sans friction, compréhensible instantanément), tout le reste suit
|
||
- L'utilisateur ne "parie pas" dans l'app - il consulte une prédiction qu'il peut utiliser sur sa plateforme de paris préférée
|
||
|
||
**Critères de Succès de l'Interaction Cœur :**
|
||
- Time-to-value < 3 secondes (ouvrir → voir la prédiction → comprendre)
|
||
- Compréhension immédiate (pas besoin de documentation ou tutoriel)
|
||
- Action possible en 1-3 taps maximum sur mobile
|
||
- Feedback visuel clair sur chaque action
|
||
|
||
### 2. Analyse du Modèle Mental Utilisateur
|
||
|
||
**Comment les utilisateurs pensent actuellement :**
|
||
|
||
**Modèle Mental Actuel - Utilisateur de Paris :**
|
||
```
|
||
Site de paris traditionnel →
|
||
Ouvrir → Login → Chercher le match → Voir les cotes →
|
||
Essayer de comprendre les stats → Décider → Parier
|
||
|
||
Sentiments :
|
||
- Confusion (trop d'information)
|
||
- Frustration (navigation complexe)
|
||
- Doute (cotes opaques)
|
||
- Impression de casino (peut-être manipulé)
|
||
```
|
||
|
||
**Nouveau Modèle Mental - Utilisateur Chartbastan :**
|
||
```
|
||
Chartbastan (assistant de prédiction) →
|
||
Ouvrir → Voir le match principal avec prédiction →
|
||
Comprendre le niveau de confiance →
|
||
Utiliser l'info selon ses besoins
|
||
|
||
Sentiments désirés :
|
||
- Confiance (algorithme transparent)
|
||
- Clarté (interface intuitive)
|
||
- Contrôle (je décide comment l'utiliser)
|
||
- Intelligence (je me sens plus intelligent)
|
||
```
|
||
|
||
**Insight Clé :** Chartbastan doit transformer l'expérience de "parieur frustré" en expérience de "décideur averti".
|
||
|
||
### 3. Définition du Flow Cœur Idéal
|
||
|
||
**Le Flow Cœur Idéal pour Chartbastan :**
|
||
```
|
||
1. Ouvrir l'application (PWA installée sur mobile)
|
||
↓
|
||
2. Match important s'affiche instantanément
|
||
↓
|
||
3. Confidence Meter visible en 0.5s
|
||
↓
|
||
4. Couleur intuitive (🟢🟡🔴) + Tooltip explicatif au tap
|
||
↓
|
||
5. Mini-graphique historique sur 24h pour contexte
|
||
↓
|
||
6. Décision prise en un coup d'œil (intuitive)
|
||
```
|
||
|
||
**Caractéristiques du Flow Idéal :**
|
||
- **Aucun login requis** (accès immédiat)
|
||
- **Navigation minimale** (pas besoin de chercher)
|
||
- **Information hiérarchisée** (prédiction + contexte, pas surcharge)
|
||
- **Feedback visuel sur chaque action** (animations subtiles 300ms)
|
||
- **Time-to-value < 3s** (objectif UX principal)
|
||
|
||
### 4. Mécaniques d'Expérience Détailées
|
||
|
||
**Mécanique #1 : Confidence Meter (Jaugement de Confiance)**
|
||
|
||
**Fonctionnalité :** Indicateur visuel du niveau de confiance d'une prédiction
|
||
|
||
**Expression :** Composant qui montre un pourcentage (ex: 78%) avec code couleur
|
||
|
||
**Couleurs Universelles :**
|
||
- 🟢 **Vert (>70%)** : Confiance haute
|
||
- 🟡 **Orange (50-70%)** : Confiance moyenne
|
||
- 🔴 **Rouge (<50%)** : Confiance basse
|
||
|
||
**Comportements UX :**
|
||
```
|
||
Affichage par défaut :
|
||
- Pourcentage affiché : "78%"
|
||
- Code couleur : 🟢 (vert)
|
||
|
||
Au tap (interaction utilisateur) :
|
||
- Tooltip apparaît : "Sur 100 matchs avec ce score, 78 ont été prédits correctement"
|
||
- Délai : 200ms (apparition immédiate)
|
||
- Animation : Scale subtile (1.0 → 1.1)
|
||
- Position : Au-dessus du pourcentage
|
||
|
||
Fermeture automatique :
|
||
- Si utilisateur tap ailleurs : tooltip disparaît
|
||
- Animation : Fade out (300ms)
|
||
- Retour à l'état par défaut
|
||
|
||
Contexte visuel :
|
||
- Mini-graphique historique sur 24h visible en permanence
|
||
- Comparaison : "Prédiction : 78% vs Moyenne : 65%" (contexte)
|
||
- Progression : Courbe montrant montée/descente de l'énergie collective
|
||
```
|
||
|
||
**Objectif Émotionnel :**
|
||
- Créer instantanément la confiance sans jargon technique
|
||
- Permettre à l'utilisateur de comprendre "POURQUOI" ce pourcentage sans documentation externe
|
||
- Rendre le jugement de confiance intuitif (vert = bien, rouge = prudence)
|
||
|
||
**Mécanique #2 : Navigation One-Thumb Zone**
|
||
|
||
**Fonctionnalité :** Barre de navigation en bas de l'écran mobile accessible au pouce
|
||
|
||
**Expression :** 4-5 onglets max avec icônes compréhensibles
|
||
|
||
**Onglets Chartbastan :**
|
||
- 🏠 **Accueil** : Matchs du jour, prédictions principales
|
||
- ⚽ **En Direct** : Matchs en cours, données temps réel
|
||
- 📊 **Historique** : Prédictions passées, résultats, ROI personnel
|
||
- 👤 **Profil** : Paramètres, onboarding, préférences
|
||
|
||
**Comportements UX :**
|
||
```
|
||
Zone de clic adaptée :
|
||
- Boutons min 44x44px (Apple HIG) / 48x48px (Material Design)
|
||
- Zone du pouce : accessible naturellement
|
||
- Feedback visuel : Scale légère au tap (0.95)
|
||
|
||
Gestes tactiles :
|
||
- Swipe gauche/droite entre onglets (navigation)
|
||
- Pull-to-refresh sur écrans (mise à jour)
|
||
- Swipe-to-dismiss (fermer modals/tooltips)
|
||
|
||
Navigation constante :
|
||
- Onglets toujours visibles (pas de menu hamburger)
|
||
- Position fixe en bas de l'écran
|
||
- Fond blanc pur (#ffffff) pour contraste optimal
|
||
```
|
||
|
||
**Objectif Émotionnel :**
|
||
- Permettre une navigation intuitive sans réfléchir
|
||
- Rendre chaque écran principal accessible en 1 tap
|
||
- Éliminer la frustration liée aux menus hamburger complexes
|
||
|
||
**Mécanique #3 : Partage de Réussite Viral**
|
||
|
||
**Fonctionnalité :** Capacité pour partager une prédiction réussie avec le réseau social
|
||
|
||
**Expression :** Bouton "Partager" qui génère un format pré-rempli avec image et texte
|
||
|
||
**Comportements UX :**
|
||
```
|
||
Déclenchement :
|
||
- Quand une prédiction se révèle CORRECTE (score final connu)
|
||
- Notification push : "🏆 Votre prédiction PSG 78% est CONFIRMÉE ! Score final : 3-0"
|
||
- Badge dans l'app : "Précision : 100% (1/1) 🌟"
|
||
|
||
Action utilisateur :
|
||
- Sur écran de résultat : bouton "Partager" visible
|
||
- Au tap : menu partage s'ouvre (WhatsApp, Twitter, Facebook)
|
||
|
||
Format généré :
|
||
- Texte pré-rempli : "J'ai gagné grâce à Chartbastan ! 🏆 Prédiction : PSG 78% → Résultat : 3-0 ✅"
|
||
- Image générée : Card visuelle montrant prédiction vs résultat
|
||
- CTA : "Obtenez vos prédictions grâce à Chartbastan !"
|
||
|
||
Feedback visuel :
|
||
- Animation de succès : Particules/confetti sur le bouton
|
||
- Haptic feedback : Vibration légère (150ms) sur mobile
|
||
- Badge animation : Scale 0.0 → 1.2 → 1.0
|
||
|
||
Contexte viral :
|
||
- "Partagez avec amis pour 1 mois premium GRATUIT !"
|
||
- Badge : "Ambassadeur" si partage réussit ×3
|
||
```
|
||
|
||
**Objectif Émotionnel :**
|
||
- Créer un moment "Aha !" mémorable et partageable
|
||
- Encourager la viralité organique (chaque utilisateur invite ≥ 2 amis)
|
||
- Transformer les utilisateurs en ambassadeurs de la marque
|
||
|
||
**Mécanique #4 : Onboarding Progressif Optionnel**
|
||
|
||
**Fonctionnalité :** Système guidé en 3 étapes pour les nouveaux utilisateurs
|
||
|
||
**Expression :** Tutoriels interactifs qui expliquent comment fonctionne Chartbastan
|
||
|
||
**3 Étapes de l'Onboarding :**
|
||
```
|
||
Étape 1 : "Comment ça marche ?"
|
||
- Animation visuelle de l'énergie collective (vague, progression)
|
||
- Explication simple : "Nous analysons ce que les supporters pensent"
|
||
- Bouton "Suivant" en bas
|
||
|
||
Étape 2 : "Comprendre les prédictions"
|
||
- Démonstration interactive du Confidence Meter
|
||
- Scénario : "Voici une prédiction à 78% - voyez comment interpréter"
|
||
- Tap sur le pourcentage : Tooltip explicatif
|
||
- Bouton "Suivant" en bas
|
||
|
||
Étape 3 : "Votre premier match"
|
||
- Guidage pour voir une prédiction du jour
|
||
- Call-to-action : "Voir les prédictions du jour"
|
||
- Bouton "C'est parti !" (optionnel)
|
||
```
|
||
|
||
**Comportements UX :**
|
||
```
|
||
Onboarding optionnel :
|
||
- Peut être sauté via bouton "Passer"
|
||
- Disponible depuis "?" dans le profil (on-demand)
|
||
- Progress bar : "1/3", "2/3", "3/3" en haut de l'écran
|
||
|
||
Guidage progressif :
|
||
- Première visite : écrans 1-3 recommandés
|
||
- Utilisateur peut réviser n'importe quand via Profil
|
||
- Pas de forçage (respect du choix utilisateur)
|
||
|
||
Micro-interactions :
|
||
- Animations fluides (duration 300ms)
|
||
- Feedback visuel : Checkmarks sur étapes complétées
|
||
- Hover effects : Cards lévitement au survol
|
||
```
|
||
|
||
**Objectif Émotionnel :**
|
||
- Réduire le taux d'abandon (<40% au lieu de 60%+)
|
||
- Rendre l'application accessible sans friction pour les novices
|
||
- Permettre un apprentissage progressif sans forcer l'onboarding
|
||
|
||
**Mécanique #5 : Feedback Visuel Immédiat**
|
||
|
||
**Fonctionnalité :** Système de retours visuels sur toutes les actions utilisateur
|
||
|
||
**Expression :** Indicateurs (loading, success, error, toast) qui donnent un retour immédiat
|
||
|
||
**Types de Feedback :**
|
||
```
|
||
1. Loading (Chargement) :
|
||
- Spinner ou progress bar : "Analyse en cours..."
|
||
- Skeleton screens : placeholders visuels pendant chargement
|
||
- Durée estimée : "< 30s" pour donner des attentes réalistes
|
||
|
||
2. Success (Succès) :
|
||
- Toast notification : "Prédiction enregistrée ✓"
|
||
- Animation : Checkmark apparaît avec scale (0.0 → 1.2)
|
||
- Couleur : Vert (#10b981)
|
||
- Position : Bas de l'écran ou contextuel
|
||
|
||
3. Error (Erreur) :
|
||
- Toast notification : "Email invalide" (pas générique)
|
||
- Animation : Shake (mobile) + rouge pulse
|
||
- Couleur : Rouge (#ef4444)
|
||
- Message constructif : suggestions de correction (ex: "essayez xyz@exemple.com")
|
||
|
||
4. System Status (Statut Système) :
|
||
- Bandière en haut pour incidents : "⚠️ Données Twitter temporairement indisponibles"
|
||
- Mode dégradé visible : Prédictions basées sur Reddit + RSS
|
||
- Estimation de durée : "Retour prévu dans ~15 minutes"
|
||
|
||
5. Action Feedback (Retour Action) :
|
||
- Bouton pressé : Scale (0.95 → 0.9 → 1.0)
|
||
- Ripple effect : Cercle qui s'étend depuis le point de clic
|
||
- Durée : 200ms pour feedback tactile immédiat
|
||
```
|
||
|
||
**Objectif Émotionnel :**
|
||
- Éliminer la confusion ("ça a marché ?")
|
||
- Rassurer l'utilisateur (le système fonctionne)
|
||
- Créer une sensation de contrôle et de réactivité
|
||
|
||
### 5. Critères de Succès pour l'Interaction Cœur
|
||
|
||
**Ce que signifie "ça marche" pour l'utilisateur :**
|
||
|
||
1. **Rapidité** : "Je comprends en un coup d'œil"
|
||
- Time-to-value < 3s
|
||
- Aucun chargement perceptible
|
||
|
||
2. **Clarté** : "Je sais quoi faire"
|
||
- Aucun jargon
|
||
- CTA évident
|
||
- Feedback immédiat
|
||
|
||
3. **Confiance** : "Je crois en cette prédiction"
|
||
- Explication simple du "pourquoi"
|
||
- Contexte historique visible
|
||
- Taux de réussite global affiché
|
||
|
||
4. **Feedback** : "Le système fonctionne"
|
||
- Confirmation sur chaque action
|
||
- Messages constructifs
|
||
- Transparence incidents
|
||
|
||
5. **Satisfaction** : "C'est utile pour moi"
|
||
- L'utilisateur revient régulièrement
|
||
- Partage avec amis
|
||
- Passe à Premium (si pertinent)
|
||
|
||
### 6. Patterns UX vs. Innovation
|
||
|
||
**Quels patterns utiliser vs. quelles innovations introduire :**
|
||
|
||
**Patterns Établis (Utiliser les patterns éprouvés) :**
|
||
- Bottom Navigation Bar (William Hill, Spotify)
|
||
- Fixed Action Bar (Bet365)
|
||
- Pull-to-Refresh (Twitter, Instagram)
|
||
- Tap-to-Tooltip (Bet365)
|
||
|
||
**Innovation dans l'Interaction (Patterns combinés de manière unique) :**
|
||
- Confidence Meter avec couleurs universelles (🟢🟡🔴)
|
||
- Energy Wave Visualization (progression de l'énergie collective sur 24h)
|
||
- Match Cards avec contextualisation riche (prédiction + contexte historique)
|
||
|
||
**Patterns à Éviter :**
|
||
- Onboarding obligatoire de 5+ écrans (anti-pattern)
|
||
- Publicité intrusive sur l'action cœur (anti-pattern)
|
||
- Jargon technique non expliqué (anti-pattern)
|
||
- FOMO forcé (anti-pattern)
|
||
|
||
### 7. Stratégie de Démonstration (Onboarding Progressif)
|
||
|
||
**Approche par étapes (sans forcer) :**
|
||
|
||
**Étape 1 : Démonstration Simple (Première visite)**
|
||
- Animation visuelle de l'énergie collective (vague, progression)
|
||
- "Regardez comment les supporters influencent les prédictions"
|
||
- Bouton "Passer" visible (optionnel)
|
||
|
||
**Étape 2 : Interaction Interactive (Utilisateur actif)**
|
||
- Démonstration du Confidence Meter
|
||
- "Tap sur le pourcentage pour voir l'explication"
|
||
- Feedback immédiat : Tooltip apparaît avec explication simple
|
||
|
||
**Étape 3 : Prédiction du Jour (Utilisation réelle)**
|
||
- Guidage vers la première prédiction
|
||
- "Voici la prédiction pour ce soir"
|
||
- CTA : "Voir les détails"
|
||
|
||
**Principes :**
|
||
- **Optionnel** : Bouton "Passer" sur chaque écran
|
||
- **On-demand** : Disponible depuis le Profil (menu "?")
|
||
- **Progressif** : L'app grandit avec l'utilisateur
|
||
- **Respect** : Pas de forçage, l'utilisateur choisit
|
||
|
||
---
|
||
|
||
## Visual Design Foundation
|
||
|
||
### Color System
|
||
|
||
**Palette Chartbastan - Option 3: Cool Slate**
|
||
|
||
La palette de couleurs est conçue pour être professionnelle, sobre et moderne, inspirée du style Apple.
|
||
|
||
**Primary Colors (Cool Slate Blue)**
|
||
- Primary (#0A84FF) : Couleur principale (boutons, CTA, navigation)
|
||
- Primary Hover (#0870E6) : État hover des boutons
|
||
- Primary Active (#0655CC) : État actif des boutons
|
||
- Rationale : Moderne, professionnel, sobre, agréable sans être flashy
|
||
|
||
**Background Colors**
|
||
- Background (#FFFFFF) : Fond blanc pur
|
||
- Surface (#F5F5F7) : Surfaces secondaires (cards, panels)
|
||
- Surface Hover (#EBEBED) : État hover des surfaces
|
||
- Rationale : Contraste maximal pour lisibilité, fond blanc comme demandé
|
||
|
||
**Text Colors**
|
||
- Text Primary (#1C1C1E) : Texte principal (presque noir)
|
||
- Text Secondary (#6E6E73) : Texte secondaire (gris)
|
||
- Text Tertiary (#86868B) : Placeholders, textes désactivés
|
||
- Rationale : Hiérarchie claire, lisibilité optimale
|
||
|
||
**Border Colors**
|
||
- Border (#D1D1D6) : Bordures et diviseurs
|
||
- Border Hover (#BCBCBE) : État hover des bordures
|
||
- Rationale : Subtilité, non-intrusif
|
||
|
||
**Confidence Colors**
|
||
- Confidence High : Utilise le primary (#0A84FF) pour confiance >70%
|
||
- Confidence Medium : Utilise le text secondary (#6E6E73) pour confiance 50-70%
|
||
- Confidence Low : Utilise le border (#D1D1D6) pour confiance <50%
|
||
- Rationale : Couleurs sémantiques intuitives, accessibles
|
||
|
||
**Système CSS Variables**
|
||
Toutes les couleurs sont définies via CSS variables dans `:root` pour modification facile :
|
||
- Modification d'une seule variable change automatiquement tous les éléments utilisant cette couleur
|
||
- Documentation claire en haut du fichier CSS
|
||
- Aucun hardcoding de couleurs dans les composants
|
||
|
||
### Typography System
|
||
|
||
**Font Primaire : Inter (Google Fonts)**
|
||
|
||
**Rationale :**
|
||
- Moderne, lisible, standard dans l'industrie
|
||
- Excellent pour UI et applications web
|
||
- Supporte tous les caractères nécessaires
|
||
- Disponible en tous les weights (300-700)
|
||
- Optimal pour mobile (tailles variables)
|
||
|
||
**Font Secondaire : JetBrains Mono (Google Fonts)**
|
||
|
||
**Rationale :**
|
||
- Moderne, lisible pour les données (prédictions, pourcentages)
|
||
- Contraste distinctif avec Inter
|
||
- Excellent pour les chiffres et métriques
|
||
|
||
**Type Scale (Modular Scale 1.25)**
|
||
- Display (96px) : Hero section, titres principaux
|
||
- H1 (56px) : Section headers
|
||
- H2 (48px) : Subsection headers
|
||
- H3 (40px) : Card titles, component headers
|
||
- H4 (32px) : Sous-titres
|
||
- Body (17px) : Texte principal
|
||
- Caption (13px) : Labels, descriptions courtes
|
||
- Data (JetBrains Mono, 17px) : Chiffres, pourcentages, métriques
|
||
|
||
**Line Heights :**
|
||
- Tight (1.0-1.1) : For headings
|
||
- Normal (1.5-1.6) : For body text
|
||
- Relaxed (1.4) : For captions
|
||
|
||
**Letter Spacing :**
|
||
- Headings : -0.015em à -0.003em (serré pour modernité)
|
||
- Body : -0.022em (légèrement serré)
|
||
- Captions : 0.06em (espacé pour distinction)
|
||
|
||
### Spacing & Layout Foundation
|
||
|
||
**Spacing System : Base 4px (système 8px)**
|
||
|
||
**Rationale :**
|
||
- 4px base permet des espacements très fins
|
||
- Système 8px standard dans l'industrie (Tailwind CSS, Material Design)
|
||
- Permet des espacements cohérents et calculables
|
||
- Facile à adapter pour mobile-first
|
||
|
||
**Spacing Scale :**
|
||
- xs: 4px
|
||
- sm: 8px
|
||
- md: 16px
|
||
- lg: 24px
|
||
- xl: 32px
|
||
- 2xl: 48px
|
||
- 3xl: 64px
|
||
|
||
**Spacing Rules :**
|
||
- Section spacing : 64px (var(--spacing-3xl)) entre sections
|
||
- Component spacing : 24px (var(--spacing-lg)) entre composants
|
||
- Card padding : 32px (var(--spacing-xl))
|
||
- Button padding : 12px horizontal, 28px vertical
|
||
- Input padding : 14px horizontal, 20px vertical
|
||
|
||
**Layout Principles :**
|
||
|
||
1. **Mobile-First :** Layout optimisé pour mobile, responsive pour desktop
|
||
2. **Grid System :** Grid flexible avec auto-fit et minmax
|
||
3. **Container Widths :** Max width 1200px (desktop), 100% (mobile)
|
||
4. **Spacing :** Aéré et spacieux (espace blanc généreux)
|
||
5. **Consistency :** Espacements basés sur le système de 4px/8px
|
||
|
||
**Border Radius :**
|
||
- sm: 8px
|
||
- md: 12px
|
||
- lg: 18px
|
||
- xl: 24px
|
||
- pill: 980px (boutons arrondis)
|
||
|
||
**Transitions :**
|
||
- Fast: 150ms
|
||
- Normal: 200ms
|
||
- Slow: 300ms
|
||
- Easing: cubic-bezier(0.4, 0, 0.2, 1) (Apple standard)
|
||
|
||
**Shadows :**
|
||
- sm: 0 2px 8px rgba(0, 0, 0, 0.06)
|
||
- md: 0 4px 12px rgba(0, 0, 0, 0.08)
|
||
- lg: 0 8px 24px rgba(0, 0, 0, 0.12)
|
||
|
||
### Accessibility Considerations
|
||
|
||
**Contrast Ratios (WCAG 2.1 AA)**
|
||
- Normal text : Minimum 4.5:1 (tous nos textes respectent ce ratio)
|
||
- Large text (18px+) : Minimum 3:1
|
||
- UI Components : Minimum 3:1
|
||
|
||
**Font Sizes Minimum**
|
||
- Body text : 17px (1rem)
|
||
- Buttons : 17px minimum
|
||
- Inputs : 17px minimum
|
||
|
||
**Touch Targets (Mobile)**
|
||
- Minimum size : 44x44px (Apple HIG)
|
||
- Recommended : 48x48px (Material Design)
|
||
- Spacing between targets : Minimum 8px
|
||
|
||
**Focus States**
|
||
- Visible outline : Border color change + box-shadow
|
||
- High contrast : box-shadow avec couleur primary à 15% opacity
|
||
- No focus-only interactions (accessible avec keyboard)
|
||
|
||
**Screen Reader Support**
|
||
- Semantic HTML (proper headings, landmarks)
|
||
- ARIA labels where needed
|
||
- Alt text for images
|
||
- Skip navigation link
|
||
|
||
---
|
||
|
||
## Design Direction Decision
|
||
|
||
### Design Directions Explored
|
||
|
||
Quatre directions de design ont été explorées pour Chartbastan, chacune avec une approche différente de la présentation et de l'interaction :
|
||
|
||
**Direction 1: Minimaliste Centré**
|
||
- Layout épuré avec focus sur l'essentiel
|
||
- Information hiérarchisée, espace blanc généreux
|
||
- Navigation bottom bar simple
|
||
- Cards espacées verticalement
|
||
- Confidence Meter en vedette
|
||
- **Style :** Sobre, professionnel, centré
|
||
|
||
**Direction 2: Dashboard Dense**
|
||
- Layout dense avec beaucoup d'informations visibles
|
||
- Grid system 2-3 colonnes sur desktop
|
||
- Cards compactes avec métriques détaillées
|
||
- Navigation tabs horizontale
|
||
- Statistiques visibles en permanence
|
||
- **Style :** Informatif, data-rich, professionnel
|
||
|
||
**Direction 3: Card-First**
|
||
- Chaque match est une card grande et immersive
|
||
- Swipe navigation gauche/droite entre matchs
|
||
- Focus sur un match à la fois
|
||
- Confidence Meter intégré dans card
|
||
- Navigation minimaliste
|
||
- **Style :** Moderne, immersif, mobile-first
|
||
|
||
**Direction 4: List-First**
|
||
- Liste verticale simple et rapide
|
||
- Scan visuel facile, informations essentielles
|
||
- Items compacts avec confidence visible
|
||
- Pull-to-refresh natif
|
||
- Actions rapides (tap pour détails)
|
||
- **Style :** Rapide, efficace, fonctionnel
|
||
|
||
### Chosen Direction
|
||
|
||
**Direction Recommandée : Direction 1 (Minimaliste Centré) + Éléments de Direction 4 (List-First)**
|
||
|
||
**Combinaison choisie :**
|
||
- Layout minimaliste centré (Direction 1) pour clarté et professionnalisme
|
||
- Liste verticale simple (Direction 4) pour rapidité de scan
|
||
- Navigation bottom bar (Direction 1) pour accessibilité mobile
|
||
- Cards espacées mais format liste (hybride)
|
||
|
||
**Pourquoi cette combinaison :**
|
||
- **Clarté maximale** : Layout épuré sans surcharge
|
||
- **Rapidité** : Liste verticale permet scan rapide des matchs
|
||
- **Professionnalisme** : Style sobre et fonctionnel
|
||
- **Mobile-first** : Navigation bottom bar accessible au pouce
|
||
- **Time-to-value < 3s** : Information visible immédiatement
|
||
|
||
### Design Rationale
|
||
|
||
**Approche Hybride Minimaliste + Liste :**
|
||
|
||
1. **Layout Principal : Liste Verticale Centrée**
|
||
- Largeur max 800px pour desktop (centré)
|
||
- Liste scrollable verticale pour mobile
|
||
- Items de match compacts mais lisibles
|
||
- Confidence Meter visible en un coup d'œil
|
||
|
||
2. **Navigation : Bottom Bar (Mobile) + Top Tabs (Desktop)**
|
||
- Mobile : Bottom navigation bar (4 onglets)
|
||
- Desktop : Tabs horizontales en haut
|
||
- Navigation constante et accessible
|
||
|
||
3. **Cards : Format Liste avec Détails au Tap**
|
||
- Items de liste compacts par défaut
|
||
- Tap pour voir détails (card expand)
|
||
- Swipe-to-dismiss pour actions secondaires
|
||
- Pull-to-refresh pour mise à jour
|
||
|
||
4. **Confidence Meter : Intégré dans Liste**
|
||
- Visible directement dans chaque item
|
||
- Couleur sémantique (primary/secondary/border)
|
||
- Tap pour tooltip explicatif
|
||
- Barre de progression subtile
|
||
|
||
5. **Espacement : Généreux mais Efficace**
|
||
- Espacement vertical 24px entre items
|
||
- Padding cards 32px
|
||
- Marges sections 64px
|
||
- Équilibre entre aéré et informatif
|
||
|
||
### Implementation Approach
|
||
|
||
**Structure de Layout :**
|
||
|
||
```
|
||
Mobile (320px-768px):
|
||
┌─────────────────────┐
|
||
│ Header (Matchs) │
|
||
├─────────────────────┤
|
||
│ │
|
||
│ Liste Verticale │
|
||
│ - Item Match 1 │
|
||
│ - Item Match 2 │
|
||
│ - Item Match 3 │
|
||
│ │
|
||
├─────────────────────┤
|
||
│ Bottom Navigation │
|
||
└─────────────────────┘
|
||
|
||
Desktop (768px+):
|
||
┌─────────────────────────────┐
|
||
│ Top Tabs Navigation │
|
||
├─────────────────────────────┤
|
||
│ │
|
||
│ Liste Centrée (800px) │
|
||
│ - Item Match 1 │
|
||
│ - Item Match 2 │
|
||
│ - Item Match 3 │
|
||
│ │
|
||
└─────────────────────────────┘
|
||
```
|
||
|
||
**Composants Clés :**
|
||
|
||
1. **MatchListItem** : Item de liste avec teams, confidence, date
|
||
2. **ConfidenceMeter** : Barre de progression + pourcentage
|
||
3. **BottomNavigation** : 4 onglets (Accueil, Matchs, Historique, Profil)
|
||
4. **TopTabs** : Tabs horizontales pour desktop
|
||
5. **MatchCard** : Card expandable au tap pour détails
|
||
|
||
**Interactions :**
|
||
|
||
- **Tap sur item** : Expand card avec détails
|
||
- **Tap sur confidence** : Tooltip explicatif
|
||
- **Swipe left** : Action secondaire (partager)
|
||
- **Pull down** : Refresh liste
|
||
- **Swipe tabs** : Navigation entre sections
|
||
|
||
---
|
||
|
||
## User Journey Flows
|
||
|
||
### Journey 1: Consultation de Prédiction (Journey Principal)
|
||
|
||
**Objectif :** Utilisateur consulte une prédiction de match et comprend le niveau de confiance en < 3 secondes.
|
||
|
||
**Persona :** Thomas (Parieur Passionné Occasionnel) - Utilisateur Novice
|
||
|
||
**Flow Diagram :**
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[Ouvrir App PWA] --> B{Première visite?}
|
||
B -->|Oui| C[Onboarding Optionnel]
|
||
B -->|Non| D[Écran Accueil]
|
||
C --> E[Passer ou Suivre]
|
||
E -->|Passer| D
|
||
E -->|Suivre| F[3 Étapes Guidées]
|
||
F --> D
|
||
D --> G[Match Principal Visible]
|
||
G --> H[Confidence Meter 78%]
|
||
H --> I{Tap sur Confidence?}
|
||
I -->|Oui| J[Tooltip Explicatif]
|
||
I -->|Non| K[Voir Détails Match]
|
||
J --> K
|
||
K --> L[Card Expand avec Détails]
|
||
L --> M[Graphique Énergie 24h]
|
||
M --> N[Action Utilisateur]
|
||
N -->|Partager| O[Menu Partage]
|
||
N -->|Fermer| D
|
||
O --> P[WhatsApp/Twitter/Facebook]
|
||
P --> Q[Journey Complété]
|
||
```
|
||
|
||
**Étapes Détaillées :**
|
||
|
||
1. **Entry Point : Ouvrir App**
|
||
- PWA installée sur mobile
|
||
- Load time < 2s
|
||
- Pas de login requis
|
||
|
||
2. **Onboarding Optionnel (Première Visite)**
|
||
- 3 écrans max
|
||
- Bouton "Passer" visible
|
||
- Progress bar 1/3, 2/3, 3/3
|
||
|
||
3. **Écran Accueil**
|
||
- Match principal affiché automatiquement
|
||
- Liste verticale des autres matchs
|
||
- Bottom navigation visible
|
||
|
||
4. **Confidence Meter Visible**
|
||
- Pourcentage affiché (ex: 78%)
|
||
- Couleur sémantique (primary/secondary/border)
|
||
- Barre de progression subtile
|
||
|
||
5. **Interaction Tooltip**
|
||
- Tap sur confidence → Tooltip apparaît
|
||
- Explication simple : "Sur 100 matchs, 78 corrects"
|
||
- Fermeture auto si tap ailleurs
|
||
|
||
6. **Détails Match (Card Expand)**
|
||
- Tap sur item → Card expand
|
||
- Graphique énergie 24h
|
||
- Historique de confiance
|
||
- Actions : Partager, Fermer
|
||
|
||
7. **Action Partager**
|
||
- Bouton "Partager" visible
|
||
- Menu native (WhatsApp, Twitter, Facebook)
|
||
- Format pré-rempli
|
||
|
||
**Optimisations :**
|
||
- Time-to-value < 3s (objectif principal)
|
||
- Aucun login requis
|
||
- Navigation minimale
|
||
- Feedback visuel immédiat
|
||
|
||
### Journey 2: Premier "Aha!" Moment (Prédiction Confirmée)
|
||
|
||
**Objectif :** Utilisateur voit une prédiction confirmée et ressent le moment "Aha!" qui crée la confiance.
|
||
|
||
**Persona :** Thomas (Parieur Passionné Occasionnel)
|
||
|
||
**Flow Diagram :**
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[Match en Cours] --> B[Prédiction Affichée 78%]
|
||
B --> C[Utilisateur Consulte]
|
||
C --> D[Match Se Déroule]
|
||
D --> E{Score Final Connu}
|
||
E -->|Prédiction Correcte| F[Notification Push]
|
||
E -->|Prédiction Incorrecte| G[Pas de Notification]
|
||
F --> H[Ouvrir App]
|
||
H --> I[Écran Résultat]
|
||
I --> J[Visualisation Side-by-Side]
|
||
J --> K[Prédiction 78% vs Réel 3-0]
|
||
K --> L[Badge Personnel 100%]
|
||
L --> M[Animation Succès]
|
||
M --> N[Partage Pré-rempli]
|
||
N --> O{Partager?}
|
||
O -->|Oui| P[Menu Partage]
|
||
O -->|Non| Q[Retour Accueil]
|
||
P --> R[Viralité Organique]
|
||
R --> Q
|
||
Q --> S[Journey Complété]
|
||
```
|
||
|
||
**Étapes Détaillées :**
|
||
|
||
1. **Match en Cours**
|
||
- Prédiction affichée avec confidence 78%
|
||
- Utilisateur consulte et utilise l'info
|
||
|
||
2. **Score Final Connu**
|
||
- API détecte score final
|
||
- Vérification : Prédiction correcte?
|
||
|
||
3. **Notification Push (Si Correcte)**
|
||
- "🏆 Votre prédiction PSG 78% est CONFIRMÉE ! Score final : 3-0"
|
||
- Haptic feedback (vibration légère)
|
||
- Badge dans l'app
|
||
|
||
4. **Écran Résultat**
|
||
- Visualisation side-by-side
|
||
- Prédiction (78%) vs Réel (3-0)
|
||
- Badge personnel : "Précision : 100% (1/1) 🌟"
|
||
|
||
5. **Animation Succès**
|
||
- Particules/confetti subtiles
|
||
- Scale animation (0.0 → 1.2 → 1.0)
|
||
- Durée : 300ms
|
||
|
||
6. **Partage Pré-rempli**
|
||
- Bouton "Partager" visible
|
||
- Format : "J'ai gagné grâce à Chartbastan ! 🏆"
|
||
- Image générée automatiquement
|
||
|
||
7. **Viralité Organique**
|
||
- Partage vers WhatsApp/Twitter/Facebook
|
||
- CTA : "Obtenez vos prédictions grâce à Chartbastan !"
|
||
- Badge "Ambassadeur" si partage ×3
|
||
|
||
**Optimisations :**
|
||
- Moment mémorable et partageable
|
||
- Feedback positif immédiat
|
||
- Encouragement viralité
|
||
- Pas de notification si prédiction incorrecte (éviter frustration)
|
||
|
||
### Journey 3: Conversion Freemium (Limite Atteinte)
|
||
|
||
**Objectif :** Utilisateur gratuit atteint la limite (2 prédictions/jour) et convertit vers Premium sans frustration.
|
||
|
||
**Persona :** Marie (Parieuse Sérieuse)
|
||
|
||
**Flow Diagram :**
|
||
|
||
```mermaid
|
||
flowchart TD
|
||
A[Utilisateur Gratuit] --> B[Consulte 2 Prédictions]
|
||
B --> C[Limite Atteinte]
|
||
C --> D[Modal Contextuel]
|
||
D --> E[Upsell Subtil]
|
||
E --> F{Montrer Valeur}
|
||
F --> G[67% Réussite → Premium]
|
||
G --> H{Décision Utilisateur}
|
||
H -->|Premium| I[Page Paiement]
|
||
H -->|Plus Tard| J[Modal Disparaît]
|
||
I --> K[Paiement 19.99€/mois]
|
||
K --> L[Accès Premium]
|
||
L --> M[Dashboard Avancé]
|
||
M --> N[+50 Prédictions/jour]
|
||
N --> O[Journey Complété]
|
||
J --> P[Retour Accueil]
|
||
P --> Q[Modal Réapparaît Plus Tard]
|
||
Q --> H
|
||
```
|
||
|
||
**Étapes Détaillées :**
|
||
|
||
1. **Limite Atteinte**
|
||
- Utilisateur consulte 2ème prédiction
|
||
- Message : "Vous avez atteint votre limite quotidienne"
|
||
|
||
2. **Modal Contextuel**
|
||
- Upsell subtil, PAS agressif
|
||
- Timing : Après 2ème prédiction
|
||
- Design : Modal centré, fond légèrement assombri
|
||
|
||
3. **Montrer Valeur**
|
||
- "Vous avez 67% de réussite"
|
||
- "Premium vous donne +50 prédictions/jour"
|
||
- "Métriques détaillées et analyses avancées"
|
||
- "19.99€/mois - Moins qu'un mauvais pari"
|
||
|
||
4. **Décision Utilisateur**
|
||
- Bouton "Passer à Premium" (primary)
|
||
- Bouton "Peut-être plus tard" (secondary)
|
||
- Pas de forçage
|
||
|
||
5. **Paiement (Si Premium)**
|
||
- Page paiement sécurisée
|
||
- Options : Carte, PayPal, Apple Pay
|
||
- Confirmation immédiate
|
||
|
||
6. **Accès Premium**
|
||
- Dashboard avancé débloqué
|
||
- +50 prédictions/jour
|
||
- Métriques détaillées
|
||
- Alertes push personnalisées
|
||
|
||
7. **Si "Plus Tard"**
|
||
- Modal disparaît temporairement
|
||
- Réapparaît après 24h ou 3ème tentative
|
||
- Pas de spam
|
||
|
||
**Optimisations :**
|
||
- Upsell contextuel (pas agressif)
|
||
- Montrer valeur personnalisée
|
||
- Pas de forçage
|
||
- Option "Plus tard" respectée
|
||
|
||
### Journey Patterns
|
||
|
||
**Patterns Communs Identifiés :**
|
||
|
||
**Navigation Pattern :**
|
||
- Bottom bar (mobile) / Top tabs (desktop)
|
||
- Navigation constante et accessible
|
||
- 4 onglets max : Accueil, Matchs, Historique, Profil
|
||
|
||
**Feedback Pattern :**
|
||
- Feedback visuel immédiat (200ms)
|
||
- Animations subtiles (300ms)
|
||
- Haptic feedback sur actions importantes
|
||
- Progress indicators pour actions longues
|
||
|
||
**Error Recovery Pattern :**
|
||
- Messages constructifs (pas "Erreur 500")
|
||
- Suggestions de correction
|
||
- Bouton "Réessayer" visible
|
||
- Mode dégradé si API down
|
||
|
||
**Progressive Disclosure Pattern :**
|
||
- Information essentielle visible d'abord
|
||
- Détails au tap (card expand)
|
||
- Tooltips pour explications
|
||
- Onboarding optionnel
|
||
|
||
### Flow Optimization Principles
|
||
|
||
**Principes d'Optimisation des Flows :**
|
||
|
||
1. **Minimiser Steps to Value**
|
||
- Time-to-value < 3s pour consultation
|
||
- Pas de login requis
|
||
- Information visible immédiatement
|
||
|
||
2. **Réduire Cognitive Load**
|
||
- Une décision à la fois
|
||
- Information hiérarchisée
|
||
- Pas de surcharge
|
||
|
||
3. **Feedback Immédiat**
|
||
- Confirmation sur chaque action
|
||
- Progress indicators
|
||
- Messages constructifs
|
||
|
||
4. **Moments de Délice**
|
||
- Animation succès prédiction
|
||
- Badges et accomplissements
|
||
- Partage facilité
|
||
|
||
5. **Gestion d'Erreurs Gracieuse**
|
||
- Messages constructifs
|
||
- Suggestions de correction
|
||
- Mode dégradé fonctionnel
|
||
|
||
---
|
||
|
||
## Component Strategy
|
||
|
||
### Design System Coverage Analysis
|
||
|
||
**Design System Choisi : shadcn/ui + Tailwind CSS v4.0**
|
||
|
||
**Composants Disponibles dans shadcn/ui :**
|
||
- Button (Primary, Secondary, Tertiary, Ghost)
|
||
- Card (avec header, body, footer)
|
||
- Input (text, email, password, etc.)
|
||
- Navigation (Tabs, Bottom Navigation)
|
||
- Dialog/Modal
|
||
- Toast/Notification
|
||
- Progress Bar
|
||
- Badge
|
||
- Avatar
|
||
- Dropdown Menu
|
||
- Tooltip
|
||
- Alert
|
||
- Separator/Divider
|
||
|
||
**Composants Nécessaires pour Chartbastan (Non Disponibles) :**
|
||
|
||
1. **ConfidenceMeter** - Composant unique pour afficher le niveau de confiance
|
||
2. **MatchListItem** - Item de liste pour afficher un match avec prédiction
|
||
3. **EnergyWave** - Visualisation de l'énergie collective sur 24h
|
||
4. **MatchCard** - Card expandable avec détails complets
|
||
5. **PredictionResult** - Affichage du résultat d'une prédiction (side-by-side)
|
||
6. **ShareButton** - Bouton de partage avec format pré-rempli
|
||
|
||
### Custom Components Design
|
||
|
||
#### Component 1: ConfidenceMeter
|
||
|
||
**Purpose :** Afficher le niveau de confiance d'une prédiction de manière intuitive et compréhensible pour un novice.
|
||
|
||
**Usage :** Utilisé dans MatchListItem, MatchCard, et écran de détails. Visible en un coup d'œil.
|
||
|
||
**Anatomy :**
|
||
```
|
||
┌─────────────────────────────┐
|
||
│ 78% [Confiance haute] │
|
||
│ ████████████░░░░░░░░░░ │
|
||
│ Barre de progression │
|
||
└─────────────────────────────┘
|
||
```
|
||
|
||
**States :**
|
||
- **Default** : Pourcentage affiché, couleur sémantique, barre de progression
|
||
- **Hover** : Légère scale (1.0 → 1.05)
|
||
- **Active/Tap** : Tooltip apparaît avec explication
|
||
- **Loading** : Skeleton placeholder
|
||
|
||
**Variants :**
|
||
- **Compact** : Pourcentage + barre (dans liste)
|
||
- **Standard** : Pourcentage + label + barre (dans card)
|
||
- **Large** : Pourcentage + label + barre + graphique (dans détails)
|
||
|
||
**Accessibility :**
|
||
- ARIA label : "Confiance de prédiction : 78%"
|
||
- Tooltip accessible au clavier (focus)
|
||
- Contraste minimum 4.5:1
|
||
|
||
**Props :**
|
||
```typescript
|
||
interface ConfidenceMeterProps {
|
||
level: number; // 0-100
|
||
variant?: 'compact' | 'standard' | 'large';
|
||
showLabel?: boolean;
|
||
showTooltip?: boolean;
|
||
className?: string;
|
||
}
|
||
```
|
||
|
||
#### Component 2: MatchListItem
|
||
|
||
**Purpose :** Afficher un match dans une liste verticale avec prédiction visible en un coup d'œil.
|
||
|
||
**Usage :** Utilisé dans l'écran principal (liste de matchs). Format liste pour scan rapide.
|
||
|
||
**Anatomy :**
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ PSG vs Marseille 78% │
|
||
│ Aujourd'hui 20h00 │
|
||
│ ████████████░░░░░░░░░░ │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
**States :**
|
||
- **Default** : Item de liste compact
|
||
- **Hover** : Background légèrement assombri
|
||
- **Active/Tap** : Card expand avec détails
|
||
- **Loading** : Skeleton placeholder
|
||
|
||
**Variants :**
|
||
- **Default** : Format liste compact
|
||
- **Expanded** : Card avec détails complets
|
||
|
||
**Accessibility :**
|
||
- ARIA label : "Match PSG vs Marseille, confiance 78%"
|
||
- Navigation clavier (arrow keys)
|
||
- Focus visible
|
||
|
||
**Props :**
|
||
```typescript
|
||
interface MatchListItemProps {
|
||
match: {
|
||
id: string;
|
||
homeTeam: string;
|
||
awayTeam: string;
|
||
date: Date;
|
||
confidence: number;
|
||
};
|
||
onTap?: () => void;
|
||
expanded?: boolean;
|
||
}
|
||
```
|
||
|
||
#### Component 3: EnergyWave
|
||
|
||
**Purpose :** Visualiser l'évolution de l'énergie collective des supporters sur 24h de manière intuitive.
|
||
|
||
**Usage :** Utilisé dans MatchCard expanded et écran de détails. Montre la progression temporelle.
|
||
|
||
**Anatomy :**
|
||
```
|
||
┌─────────────────────────────┐
|
||
│ Énergie Collective 24h │
|
||
│ ╱╲ │
|
||
│ ╱ ╲ ╱╲ │
|
||
│ ╱ ╲ ╱ ╲ │
|
||
│ ╱ ╲╱ ╲ │
|
||
│ ╱ ╲ │
|
||
│ ╱ ╲ │
|
||
│─────────────────────────────│
|
||
│ -24h Maintenant│
|
||
└─────────────────────────────┘
|
||
```
|
||
|
||
**States :**
|
||
- **Default** : Graphique affiché avec données
|
||
- **Loading** : Skeleton placeholder
|
||
- **Error** : Message "Données indisponibles"
|
||
|
||
**Variants :**
|
||
- **Compact** : Graphique simple (dans card)
|
||
- **Detailed** : Graphique avec annotations (dans détails)
|
||
|
||
**Accessibility :**
|
||
- ARIA label : "Graphique d'énergie collective sur 24 heures"
|
||
- Description textuelle des tendances
|
||
- Support screen reader
|
||
|
||
**Props :**
|
||
```typescript
|
||
interface EnergyWaveProps {
|
||
data: Array<{ time: Date; energy: number }>;
|
||
variant?: 'compact' | 'detailed';
|
||
className?: string;
|
||
}
|
||
```
|
||
|
||
#### Component 4: MatchCard
|
||
|
||
**Purpose :** Card expandable affichant tous les détails d'un match avec prédiction, énergie, historique.
|
||
|
||
**Usage :** Utilisé quand utilisateur tap sur MatchListItem. Card expand avec détails complets.
|
||
|
||
**Anatomy :**
|
||
```
|
||
┌─────────────────────────────┐
|
||
│ PSG vs Marseille │
|
||
│ Aujourd'hui 20h00 │
|
||
├─────────────────────────────┤
|
||
│ Confidence Meter (78%) │
|
||
│ Energy Wave Graphique │
|
||
│ Historique de Confiance │
|
||
│ Actions: Partager, Fermer │
|
||
└─────────────────────────────┘
|
||
```
|
||
|
||
**States :**
|
||
- **Collapsed** : Format liste compact
|
||
- **Expanded** : Card avec détails
|
||
- **Loading** : Skeleton placeholder
|
||
- **Error** : Message d'erreur
|
||
|
||
**Variants :**
|
||
- **Default** : Card standard
|
||
- **Featured** : Card mise en avant (match principal)
|
||
|
||
**Accessibility :**
|
||
- ARIA expanded state
|
||
- Keyboard navigation (Enter pour expand)
|
||
- Focus management
|
||
|
||
**Props :**
|
||
```typescript
|
||
interface MatchCardProps {
|
||
match: Match;
|
||
expanded?: boolean;
|
||
onExpand?: () => void;
|
||
onShare?: () => void;
|
||
variant?: 'default' | 'featured';
|
||
}
|
||
```
|
||
|
||
#### Component 5: PredictionResult
|
||
|
||
**Purpose :** Afficher le résultat d'une prédiction confirmée avec comparaison side-by-side.
|
||
|
||
**Usage :** Utilisé dans l'écran de résultat après confirmation d'une prédiction.
|
||
|
||
**Anatomy :**
|
||
```
|
||
┌─────────────────────────────┐
|
||
│ 🏆 Prédiction Confirmée │
|
||
├─────────────────────────────┤
|
||
│ Prédiction: 78% │ Réel: 3-0│
|
||
│ ✅ CORRECTE │
|
||
│ Badge: 100% (1/1) │
|
||
│ [Partager] │
|
||
└─────────────────────────────┘
|
||
```
|
||
|
||
**States :**
|
||
- **Default** : Résultat affiché
|
||
- **Success Animation** : Particules/confetti
|
||
- **Loading** : Skeleton placeholder
|
||
|
||
**Variants :**
|
||
- **Success** : Prédiction correcte (vert)
|
||
- **Failure** : Prédiction incorrecte (gris, pas de notification)
|
||
|
||
**Accessibility :**
|
||
- ARIA label : "Prédiction confirmée : 78% correcte, résultat réel 3-0"
|
||
- Contraste élevé pour succès
|
||
|
||
**Props :**
|
||
```typescript
|
||
interface PredictionResultProps {
|
||
prediction: {
|
||
confidence: number;
|
||
predictedScore: string;
|
||
};
|
||
actual: {
|
||
score: string;
|
||
correct: boolean;
|
||
};
|
||
onShare?: () => void;
|
||
}
|
||
```
|
||
|
||
#### Component 6: ShareButton
|
||
|
||
**Purpose :** Bouton de partage avec format pré-rempli pour viralité organique.
|
||
|
||
**Usage :** Utilisé dans MatchCard, PredictionResult, et écran de succès.
|
||
|
||
**Anatomy :**
|
||
```
|
||
┌─────────────────────────────┐
|
||
│ [Partager] │
|
||
│ └─ Menu: WhatsApp, Twitter │
|
||
└─────────────────────────────┘
|
||
```
|
||
|
||
**States :**
|
||
- **Default** : Bouton visible
|
||
- **Hover** : Légère scale
|
||
- **Active** : Menu s'ouvre
|
||
- **Loading** : Spinner pendant génération
|
||
|
||
**Variants :**
|
||
- **Icon Only** : Icône seule
|
||
- **With Label** : Icône + texte "Partager"
|
||
- **Full Width** : Bouton pleine largeur
|
||
|
||
**Accessibility :**
|
||
- ARIA label : "Partager cette prédiction"
|
||
- Menu accessible au clavier
|
||
- Focus management
|
||
|
||
**Props :**
|
||
```typescript
|
||
interface ShareButtonProps {
|
||
content: {
|
||
text: string;
|
||
image?: string;
|
||
};
|
||
platforms?: Array<'whatsapp' | 'twitter' | 'facebook'>;
|
||
variant?: 'icon' | 'label' | 'full';
|
||
onShare?: (platform: string) => void;
|
||
}
|
||
```
|
||
|
||
### Component Implementation Strategy
|
||
|
||
**Approche d'Implémentation :**
|
||
|
||
1. **Base : shadcn/ui Components**
|
||
- Utiliser tous les composants de base disponibles
|
||
- Personnaliser via CSS variables
|
||
- Surcharger les styles si nécessaire
|
||
|
||
2. **Custom Components : Composants Spécifiques**
|
||
- Créer dans `src/components/chartbastan/`
|
||
- Utiliser les tokens de design system
|
||
- Respecter les patterns d'accessibilité
|
||
|
||
3. **Structure Projet :**
|
||
```
|
||
src/
|
||
├── components/
|
||
│ ├── ui/ # shadcn/ui components
|
||
│ │ ├── button.tsx
|
||
│ │ ├── card.tsx
|
||
│ │ ├── input.tsx
|
||
│ │ └── ...
|
||
│ └── chartbastan/ # Custom components
|
||
│ ├── confidence-meter.tsx
|
||
│ ├── match-list-item.tsx
|
||
│ ├── energy-wave.tsx
|
||
│ ├── match-card.tsx
|
||
│ ├── prediction-result.tsx
|
||
│ └── share-button.tsx
|
||
├── lib/
|
||
│ └── theme.ts # Design tokens
|
||
└── tailwind.config.ts # Tailwind config
|
||
```
|
||
|
||
4. **Priorité d'Implémentation :**
|
||
- **Phase 1 (MVP)** : ConfidenceMeter, MatchListItem, MatchCard
|
||
- **Phase 2** : EnergyWave, PredictionResult
|
||
- **Phase 3** : ShareButton, optimisations
|
||
|
||
5. **Documentation :**
|
||
- Storybook pour chaque composant
|
||
- Props documentation
|
||
- Usage examples
|
||
- Accessibility guidelines
|
||
|
||
---
|
||
|
||
## UX Consistency Patterns
|
||
|
||
### Button Hierarchy
|
||
|
||
**When to Use :** Définir la hiérarchie des actions pour guider l'utilisateur vers les actions principales.
|
||
|
||
**Visual Design :**
|
||
- **Primary** : Bouton principal (couleur primary, pleine largeur si seul)
|
||
- **Secondary** : Action secondaire (fond surface, bordure)
|
||
- **Tertiary** : Action tertiaire (transparent, couleur primary)
|
||
- **Danger** : Action destructive (rouge, utilisation rare)
|
||
|
||
**Behavior :**
|
||
- Hover : Scale 1.02, shadow md
|
||
- Active : Scale 0.98
|
||
- Disabled : Opacity 0.5, cursor not-allowed
|
||
- Loading : Spinner + texte "Chargement..."
|
||
|
||
**Accessibility :**
|
||
- ARIA labels clairs
|
||
- Focus visible (outline primary)
|
||
- Keyboard accessible (Enter/Space)
|
||
- Touch target min 44x44px
|
||
|
||
**Mobile Considerations :**
|
||
- Boutons pleine largeur sur mobile (sauf groupes)
|
||
- Espacement 16px entre boutons
|
||
- Zone de clic min 48x48px
|
||
|
||
**Variants :**
|
||
- **Size** : Small (12px padding), Medium (12px 28px), Large (16px 32px)
|
||
- **Width** : Auto, Full width, Fixed width
|
||
|
||
### Feedback Patterns
|
||
|
||
**When to Use :** Communiquer le statut des actions utilisateur (succès, erreur, warning, info).
|
||
|
||
**Visual Design :**
|
||
|
||
**Success (Succès) :**
|
||
- Toast notification : Vert (#10b981), icône checkmark
|
||
- Position : Bas de l'écran (mobile) / Top-right (desktop)
|
||
- Durée : 3 secondes auto-dismiss
|
||
- Animation : Slide in + fade
|
||
|
||
**Error (Erreur) :**
|
||
- Toast notification : Rouge (#ef4444), icône alert
|
||
- Message constructif : "Email invalide" (pas "Erreur 500")
|
||
- Suggestions : "Essayez xyz@exemple.com"
|
||
- Durée : 5 secondes (plus long pour lire)
|
||
|
||
**Warning (Avertissement) :**
|
||
- Toast notification : Orange (#f59e0b), icône warning
|
||
- Usage : Informations importantes mais non-bloquantes
|
||
- Durée : 4 secondes
|
||
|
||
**Info (Information) :**
|
||
- Toast notification : Bleu primary (#0A84FF), icône info
|
||
- Usage : Informations générales
|
||
- Durée : 3 secondes
|
||
|
||
**Behavior :**
|
||
- Stack multiple toasts verticalement
|
||
- Dismiss manuel (bouton X)
|
||
- Pas de spam (max 3 toasts simultanés)
|
||
|
||
**Accessibility :**
|
||
- ARIA live regions
|
||
- Screen reader announcements
|
||
- Contraste minimum 4.5:1
|
||
|
||
### Form Patterns
|
||
|
||
**When to Use :** Collecter des informations utilisateur (inscription, login, préférences).
|
||
|
||
**Visual Design :**
|
||
- Input : Border 1.5px, radius 12px, padding 14px 20px
|
||
- Label : Au-dessus de l'input, font-weight 500
|
||
- Placeholder : Gris tertiary, texte explicatif
|
||
- Focus : Border primary + shadow (0 0 0 4px rgba primary 15%)
|
||
|
||
**Behavior :**
|
||
- Validation en temps réel (après blur)
|
||
- Messages d'erreur sous l'input
|
||
- Indicateur de succès (checkmark vert)
|
||
- Auto-focus sur premier input
|
||
|
||
**Validation Rules :**
|
||
- Email : Format valide
|
||
- Password : Min 8 caractères, 1 majuscule, 1 chiffre
|
||
- Required : Indicateur astérisque (*)
|
||
|
||
**Accessibility :**
|
||
- Labels associés (for/id)
|
||
- ARIA invalid state
|
||
- Messages d'erreur liés (aria-describedby)
|
||
- Keyboard navigation (Tab, Enter)
|
||
|
||
**Mobile Considerations :**
|
||
- Input type adapté (email, tel, etc.)
|
||
- Auto-capitalize désactivé sauf nom
|
||
- Auto-complete activé
|
||
|
||
### Navigation Patterns
|
||
|
||
**When to Use :** Permettre la navigation entre sections de l'application.
|
||
|
||
**Visual Design :**
|
||
|
||
**Bottom Navigation (Mobile) :**
|
||
- 4 onglets max : Accueil, Matchs, Historique, Profil
|
||
- Icônes + labels
|
||
- Position fixe en bas
|
||
- Hauteur : 64px
|
||
- Active : Couleur primary, label visible
|
||
|
||
**Top Tabs (Desktop) :**
|
||
- Tabs horizontales en haut
|
||
- Underline active indicator
|
||
- Hover : Background surface
|
||
|
||
**Behavior :**
|
||
- Swipe gauche/droite entre onglets (mobile)
|
||
- Keyboard navigation (arrow keys)
|
||
- Deep linking support
|
||
|
||
**Accessibility :**
|
||
- ARIA labels pour chaque onglet
|
||
- Keyboard navigation (Tab, Arrow keys)
|
||
- Focus visible
|
||
|
||
**Mobile Considerations :**
|
||
- Zone de clic min 48x48px
|
||
- Espacement entre onglets
|
||
- Pas de menu hamburger
|
||
|
||
### Modal and Overlay Patterns
|
||
|
||
**When to Use :** Afficher des informations ou actions contextuelles sans quitter la page.
|
||
|
||
**Visual Design :**
|
||
- Modal : Centré, max-width 500px, radius 18px
|
||
- Overlay : Fond noir 50% opacity
|
||
- Header : Titre + bouton fermer (X)
|
||
- Body : Contenu scrollable si nécessaire
|
||
- Footer : Actions (Primary + Secondary)
|
||
|
||
**Behavior :**
|
||
- Ouverture : Fade in (200ms)
|
||
- Fermeture : Fade out (200ms)
|
||
- Escape key : Ferme la modal
|
||
- Click outside : Ferme la modal (optionnel)
|
||
- Focus trap : Focus reste dans modal
|
||
|
||
**Variants :**
|
||
- **Dialog** : Confirmation d'action
|
||
- **Sheet** : Bottom sheet (mobile)
|
||
- **Drawer** : Side drawer (desktop)
|
||
|
||
**Accessibility :**
|
||
- ARIA modal role
|
||
- Focus management (focus sur premier élément)
|
||
- Screen reader announcement
|
||
- Escape key support
|
||
|
||
### Empty States
|
||
|
||
**When to Use :** Afficher quand il n'y a pas de contenu à afficher.
|
||
|
||
**Visual Design :**
|
||
- Illustration simple (ou icône)
|
||
- Titre : "Aucun match disponible"
|
||
- Description : "Les prédictions seront disponibles bientôt"
|
||
- Action : Bouton "Actualiser" ou "Voir les matchs à venir"
|
||
|
||
**Behavior :**
|
||
- Pas de message négatif
|
||
- Action claire pour résoudre
|
||
- Lien vers contenu pertinent
|
||
|
||
**Variants :**
|
||
- **No Results** : Recherche sans résultats
|
||
- **No Data** : Aucune donnée disponible
|
||
- **Error** : Erreur de chargement
|
||
|
||
### Loading States
|
||
|
||
**When to Use :** Indiquer qu'une action est en cours.
|
||
|
||
**Visual Design :**
|
||
|
||
**Skeleton Screens :**
|
||
- Placeholders gris animés
|
||
- Forme similaire au contenu final
|
||
- Animation shimmer
|
||
|
||
**Spinner :**
|
||
- Cercle animé, couleur primary
|
||
- Taille : 24px (small), 32px (medium), 48px (large)
|
||
- Position : Centré dans container
|
||
|
||
**Progress Bar :**
|
||
- Barre de progression pour actions longues
|
||
- Pourcentage affiché si disponible
|
||
- Estimation de temps : "< 30s"
|
||
|
||
**Behavior :**
|
||
- Skeleton : Pour contenu qui charge
|
||
- Spinner : Pour actions courtes (< 3s)
|
||
- Progress : Pour actions longues (> 3s)
|
||
|
||
**Accessibility :**
|
||
- ARIA busy state
|
||
- Screen reader : "Chargement en cours"
|
||
- Pas de timeout infini
|
||
|
||
### Search and Filtering Patterns
|
||
|
||
**When to Use :** Permettre la recherche et le filtrage de matchs.
|
||
|
||
**Visual Design :**
|
||
- Input search : Icône loupe à gauche
|
||
- Placeholder : "Rechercher un match..."
|
||
- Clear button : X visible si texte présent
|
||
- Filters : Chips ou dropdown
|
||
|
||
**Behavior :**
|
||
- Recherche en temps réel (debounce 300ms)
|
||
- Résultats affichés sous l'input
|
||
- Highlight des termes recherchés
|
||
- Pas de résultats : Empty state
|
||
|
||
**Accessibility :**
|
||
- ARIA search role
|
||
- Keyboard navigation (Arrow keys, Enter)
|
||
- Screen reader announcements
|
||
|
||
---
|
||
|
||
## Responsive Design & Accessibility
|
||
|
||
### Responsive Design Strategy
|
||
|
||
**Approche : Mobile-First**
|
||
|
||
Chartbastan est conçu mobile-first, puis adapté progressivement pour tablette et desktop.
|
||
|
||
**Breakpoints :**
|
||
|
||
```css
|
||
/* Mobile First Approach */
|
||
--breakpoint-sm: 640px; /* Small mobile */
|
||
--breakpoint-md: 768px; /* Tablet */
|
||
--breakpoint-lg: 1024px; /* Desktop */
|
||
--breakpoint-xl: 1280px; /* Large desktop */
|
||
```
|
||
|
||
**Mobile Strategy (320px - 767px) :**
|
||
|
||
**Layout :**
|
||
- Liste verticale pleine largeur
|
||
- Bottom navigation bar (4 onglets)
|
||
- Cards pleine largeur avec padding 16px
|
||
- Typographie : H1 32px, Body 17px
|
||
|
||
**Navigation :**
|
||
- Bottom bar fixe en bas
|
||
- Zone de clic min 48x48px
|
||
- Swipe gauche/droite entre onglets
|
||
- Pull-to-refresh sur listes
|
||
|
||
**Interactions :**
|
||
- Tap pour expand cards
|
||
- Swipe-to-dismiss pour actions
|
||
- Gestes tactiles optimisés
|
||
- Haptic feedback sur actions importantes
|
||
|
||
**Performance :**
|
||
- Images lazy loading
|
||
- Code splitting par route
|
||
- Service Worker pour offline
|
||
- Load time < 2s sur 3G
|
||
|
||
**Tablet Strategy (768px - 1023px) :**
|
||
|
||
**Layout :**
|
||
- Liste centrée (max-width 800px)
|
||
- Grid 2 colonnes pour cards
|
||
- Navigation : Bottom bar ou top tabs
|
||
- Typographie : H1 40px, Body 17px
|
||
|
||
**Navigation :**
|
||
- Bottom bar ou top tabs selon contexte
|
||
- Zone de clic min 44x44px
|
||
- Gestes tactiles supportés
|
||
|
||
**Desktop Strategy (1024px+) :**
|
||
|
||
**Layout :**
|
||
- Liste centrée (max-width 800px)
|
||
- Grid 2-3 colonnes pour dashboard
|
||
- Navigation : Top tabs horizontales
|
||
- Sidebar pour filtres (optionnel)
|
||
- Typographie : H1 56px, Body 17px
|
||
|
||
**Navigation :**
|
||
- Top tabs horizontales
|
||
- Hover states visibles
|
||
- Keyboard navigation optimisée
|
||
|
||
**Features Desktop-Specific :**
|
||
- Multi-column layouts
|
||
- Hover tooltips
|
||
- Keyboard shortcuts
|
||
- Sidebar pour métriques avancées
|
||
|
||
### Accessibility Strategy
|
||
|
||
**WCAG Compliance Level : AA (Recommandé)**
|
||
|
||
**Rationale :**
|
||
- Niveau industrie standard
|
||
- Couvre la majorité des besoins d'accessibilité
|
||
- Conforme aux exigences légales (RGPD, etc.)
|
||
- Meilleur équilibre coût/bénéfice
|
||
|
||
**Key Accessibility Requirements :**
|
||
|
||
**1. Color Contrast :**
|
||
- Normal text : Minimum 4.5:1
|
||
- Large text (18px+) : Minimum 3:1
|
||
- UI Components : Minimum 3:1
|
||
- Tous nos textes respectent ces ratios
|
||
|
||
**2. Keyboard Navigation :**
|
||
- Tous les éléments interactifs accessibles au clavier
|
||
- Focus visible (outline primary, 2px)
|
||
- Tab order logique
|
||
- Skip navigation link
|
||
- Escape key pour fermer modals
|
||
|
||
**3. Screen Reader Support :**
|
||
- Semantic HTML (headings, landmarks, lists)
|
||
- ARIA labels où nécessaire
|
||
- Alt text pour images
|
||
- ARIA live regions pour notifications
|
||
- ARIA states (expanded, disabled, etc.)
|
||
|
||
**4. Touch Targets :**
|
||
- Minimum 44x44px (Apple HIG)
|
||
- Recommandé 48x48px (Material Design)
|
||
- Espacement 8px minimum entre targets
|
||
|
||
**5. Focus Management :**
|
||
- Focus visible sur tous les éléments
|
||
- Focus trap dans modals
|
||
- Focus retour après fermeture modal
|
||
- Focus management pour navigation dynamique
|
||
|
||
**6. Text Alternatives :**
|
||
- Alt text descriptif pour images
|
||
- Captions pour vidéos
|
||
- Transcripts pour audio
|
||
- Labels pour icônes
|
||
|
||
**7. Form Accessibility :**
|
||
- Labels associés (for/id)
|
||
- Messages d'erreur liés (aria-describedby)
|
||
- Indicateurs required (astérisque + aria-required)
|
||
- Auto-complete activé
|
||
|
||
**8. Color Independence :**
|
||
- Ne pas utiliser uniquement la couleur pour communiquer
|
||
- Icônes + couleurs pour états
|
||
- Patterns/textures si nécessaire
|
||
|
||
### Testing Strategy
|
||
|
||
**Responsive Testing :**
|
||
|
||
**Devices à Tester :**
|
||
- iPhone SE (320px) - Plus petit mobile
|
||
- iPhone 12/13/14 (390px) - Mobile standard
|
||
- iPhone 14 Pro Max (428px) - Grand mobile
|
||
- iPad (768px) - Tablette
|
||
- iPad Pro (1024px) - Grande tablette
|
||
- Desktop (1280px+) - Desktop
|
||
|
||
**Browsers à Tester :**
|
||
- Chrome (mobile + desktop)
|
||
- Safari (iOS + macOS)
|
||
- Firefox (mobile + desktop)
|
||
- Edge (desktop)
|
||
|
||
**Network Testing :**
|
||
- 3G (slow connection)
|
||
- 4G (normal connection)
|
||
- WiFi (fast connection)
|
||
- Offline (Service Worker)
|
||
|
||
**Accessibility Testing :**
|
||
|
||
**Automated Tools :**
|
||
- axe DevTools
|
||
- WAVE (Web Accessibility Evaluation Tool)
|
||
- Lighthouse Accessibility Audit
|
||
- Pa11y
|
||
|
||
**Manual Testing :**
|
||
- Screen reader : VoiceOver (iOS/macOS), NVDA (Windows), JAWS (Windows)
|
||
- Keyboard-only navigation
|
||
- Color blindness simulation (Chrome DevTools)
|
||
- Zoom testing (200% zoom)
|
||
|
||
**User Testing :**
|
||
- Inclure utilisateurs avec handicaps
|
||
- Tester avec technologies d'assistance diverses
|
||
- Valider sur devices réels
|
||
|
||
### Implementation Guidelines
|
||
|
||
**Responsive Development :**
|
||
|
||
**Units :**
|
||
- Utiliser rem pour typographie (accessibilité zoom)
|
||
- Utiliser % pour layouts flexibles
|
||
- Utiliser vw/vh pour viewport-based sizing
|
||
- Éviter px fixes sauf bordures (1px)
|
||
|
||
**Media Queries :**
|
||
```css
|
||
/* Mobile First */
|
||
.component {
|
||
/* Styles mobile */
|
||
}
|
||
|
||
@media (min-width: 768px) {
|
||
/* Styles tablette */
|
||
}
|
||
|
||
@media (min-width: 1024px) {
|
||
/* Styles desktop */
|
||
}
|
||
```
|
||
|
||
**Images Responsive :**
|
||
- srcset pour différentes résolutions
|
||
- sizes pour différentes viewports
|
||
- Lazy loading pour performance
|
||
- WebP format avec fallback
|
||
|
||
**Typography Responsive :**
|
||
- Clamp() pour tailles fluides
|
||
- Line-height adaptatif
|
||
- Letter-spacing adaptatif
|
||
|
||
**Accessibility Development :**
|
||
|
||
**Semantic HTML :**
|
||
```html
|
||
<header>
|
||
<nav aria-label="Navigation principale">
|
||
<ul>
|
||
<li><a href="/">Accueil</a></li>
|
||
</ul>
|
||
</nav>
|
||
</header>
|
||
<main>
|
||
<section aria-labelledby="matches-heading">
|
||
<h2 id="matches-heading">Matchs du Jour</h2>
|
||
</section>
|
||
</main>
|
||
```
|
||
|
||
**ARIA Usage :**
|
||
- aria-label pour éléments sans texte visible
|
||
- aria-describedby pour descriptions
|
||
- aria-expanded pour états expand/collapse
|
||
- aria-live pour notifications dynamiques
|
||
- aria-hidden pour éléments décoratifs
|
||
|
||
**Focus Management :**
|
||
```typescript
|
||
// Focus trap dans modal
|
||
const focusableElements = modal.querySelectorAll(
|
||
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
|
||
);
|
||
firstElement.focus();
|
||
```
|
||
|
||
**Keyboard Support :**
|
||
- Tab : Navigation entre éléments
|
||
- Enter/Space : Activer boutons/liens
|
||
- Escape : Fermer modals
|
||
- Arrow keys : Navigation dans listes/tabs
|
||
|
||
---
|