Initialise le dépôt Bonpoint avec docs et prototype web.

Structure docs/, web/ (app Node existante) et mobile/ (placeholder Flutter).
This commit is contained in:
jmartin
2026-06-12 11:39:51 +02:00
commit c4ebb5b2d8
40 changed files with 5630 additions and 0 deletions
+289
View File
@@ -0,0 +1,289 @@
# Cahier des charges — Bons Points (app Android commerciale)
**Version :** 0.2
**Date :** 9 juin 2026
**Statut :** Cadrage — produit public monétisé (pas usage famille seul)
---
## 1. Vision produit
### Objectif business
Publier sur le **Google Play Store** une application de **bons points** pour familles, **100 % locale** (pas de SaaS, pas de compte obligatoire), monétisée pour **générer des revenus** au-delà du coût du compte développeur (~25 €).
### Proposition de valeur (marketing)
> **« Vos bons points restent chez vous — zéro cloud, zéro compte, zéro données enfants sur nos serveurs. »**
Les données familiales (scores, historique, photos) vivent **uniquement sur le téléphone**. Seul un **mini site de redirection** (téléchargement / QR) peut exister côté serveur — sans accès au contenu familial.
### Ce nest PAS
- **PtitsPas** (`app.ptits-pas.fr`) — application pro garde denfants / collectivités (projet séparé, login, SaaS).
- Linstance familiale actuelle (Ariana, Pablo, Hélia) — elle sert de **prototype** et de source de règles par défaut, pas de produit final.
### Hors périmètre v1
- iOS (coût Mac + 99 €/an)
- OK Google / Nest / voix
- Synchronisation multi-téléphones en temps réel
- Comptes utilisateurs cloud (Firebase Auth, etc.)
---
## 2. Modèle économique
### Freemium (recommandé)
| | **Gratuit** | **Premium** (achat unique) |
|--|-------------|----------------------------|
| Enfants | **1 enfant** max | **Illimité** (ou plafond raisonnable, ex. 8) |
| Règles / récompenses | Pack par défaut + édition limitée | Édition complète, familles custom |
| Publicités | **Bandeau AdMob** (bas d’écran) | **Aucune pub** |
| Export sauvegarde | ✅ | ✅ |
| Historique | 30 derniers jours | Illimité |
| Prix cible | 0 € | **2,99 € 4,99 €** (achat in-app unique) |
*Chiffres à affiner après étude concurrence.*
### Publicité (AdMob)
- App ciblant **familles et enfants** → politique **Google Play Families** obligatoire.
- Pubs **taguées child-directed**, contenu **G** max, SDK Ads certifié Families.
- **Revenus pub faibles** sur ce segment ; lIAP « sans pub + multi-enfants » doit être le levier principal.
- **Pas de pub** dans lespace parent ni sur les écrans où lenfant dépense ses points (UX + conformité).
### Coûts récurrents
| Poste | Coût |
|-------|------|
| Compte Google Play | ~25 € une fois |
| Hébergement landing `/download` | ~0 € (page statique sur infra existante) |
| Backend données familiales | **0 €** |
| AdMob / Play Billing | Commission Google sur IAP (~15 %) |
### Seuil de rentabilité (ordre de grandeur)
- Coût fixe initial : ~25 € + temps de dev.
- À 3 € IAP net ~2,55 € : **~10 achats** pour couvrir le compte Play (hors temps).
- Les pubs seules nécessitent **très nombreuses** impressions (surtout en child-directed).
---
## 3. Utilisateurs cibles
| Profil | Besoin |
|--------|--------|
| **Parent** (acheteur décisionnaire) | Gérer points, règles, récompenses, corriger erreurs |
| **Enfant** | Voir score, historique, « boutique » |
| **Parent soucieux vie privée** | Pas de compte, pas de cloud — argument dachat |
**Marché initial :** France, français. Extension EU possible plus tard.
---
## 4. Parcours utilisateur (premier lancement)
Pas de login. À la première ouverture :
1. **Écran bienvenue** — promesse (local, privé, simple).
2. **Création du 1er enfant** — prénom, couleur, photo (galerie ou avatar).
3. **Choix du PIN parent** (obligatoire).
4. **Import règles par défaut** — pack « Maison & école » (~30 règles issues du prototype) ou départ vide.
5. **Tableau de bord** — prêt à lemploi.
Ensuite : ouverture directe sur le tableau de bord (PIN pour espace parent).
---
## 5. Fonctionnalités
### 5.1 MVP commercial (v1.0 — publication Play Store)
#### Tableau de bord
- Liste enfants (limité à 1 en gratuit ; badge « Passer à Premium » si ajout 2e enfant).
- Accès espace parent (PIN).
- Menu : réglages, export/import, premium, politique confidentialité.
#### Enfant
- Fiche : photo, score, historique, boutique.
- Plancher score à **0**.
#### Espace parent (PIN)
- Multi-sélection enfants (premium si >1 enfant).
- Grille règles par familles (édition en premium ; lecture + apply en gratuit).
- Historique + **annulation** de mouvement.
- Verrouillage auto après sortie de l’écran parent.
#### Boutique
- Récompenses configurables (premium) ou pack défaut (gratuit).
#### Configuration (premium ou partiel gratuit)
- Ajouter / modifier / désactiver règles et récompenses.
- Ajouter enfants (premium au-delà du 1er).
- Changer PIN, couleurs, photos.
- **Export / import** sauvegarde JSON chiffrée (Google Drive, mail, fichier local).
#### Monétisation intégrée
- Bandeau AdMob (écrans autorisés uniquement).
- Écran achat Premium (Google Play Billing).
- Restauration achat sur nouveau téléphone.
#### Légal (obligatoire Play Store)
- Politique de confidentialité (URL statique).
- Mention « pas de collecte données enfants sur serveur ».
- Déclaration cible d’âge Play Console (familles).
- CGU simplifiées si IAP.
### 5.2 v1.1+
- Widget Android (scores).
- Packs de règles thématiques (téléchargement embarqué, pas serveur).
- Statistiques locales pour parents (graphique semaine).
- Traduction anglais si traction FR.
### 5.3 Exclu
- Voix / assistant.
- Sync cloud entre parents.
- Réseau social, classements entre familles.
---
## 6. Règles métier (inchangées par rapport au prototype)
- Score entier, plancher **0**.
- Mouvement = trace de chaque action (règle, delta, date).
- Annulation = correction inverse (plancher respecté).
- Familles de règles : Maison, Routine, Fratrie, Respect, Écrans, Bonus (+ custom en premium).
*Référence données seed : `apps/bonpoint/src/db.js` (`REGLES_DEFAUT`, `RECOMPENSES_DEFAUT`).*
---
## 7. Architecture technique
| Couche | Choix |
|--------|--------|
| Framework | **Flutter** (UI rapide, Cursor-friendly, un codebase) |
| Base locale | **drift** ou **sqflite** (SQLite) |
| État | Riverpod ou Bloc |
| IAP | `in_app_purchase` |
| Pub | `google_mobile_ads` (Families-compliant) |
| Export | Fichier JSON + checksum ; option chiffrement AES (mot de passe parent) |
| PIN | Hash local (bcrypt / argon2 via package) |
### Réseau (minimal)
| Usage | Réseau | Données |
|-------|--------|---------|
| Usage quotidien app | **Non requis** | — |
| AdMob | Oui | Requêtes pub anonymisées (Families) |
| Play Billing | Oui | Transaction Google |
| Landing `bonpoint.ptits-pas.fr/download` | Oui | Redirection Play Store + compteur scans |
| Données familiales vers serveur | **Jamais** | — |
### Landing marketing (serveur léger)
- URL : `https://bonpoint.ptits-pas.fr/download` (ou sous-domaine dédié).
- QR code sur cartons → comptage scan → redirect fiche Play Store.
- **Aucune** donnée enfant ; analytics agrégés uniquement.
---
## 8. Distribution Play Store
### Compte développeur
- Compte **personnel** ou **organisation** (si structure Ptits Pas / micro-entreprise — *à trancher pour facturation IAP*).
### Avant publication publique (compte perso récent)
- **Test fermé** : minimum **12 testeurs** opt-in, **14 jours consécutifs**.
- Questionnaire « production access » rempli par Google.
- Prévoir recrutement testeurs (réseau, parents école, etc.) **avant** de viser la prod.
### Fiche Store
- Nom : **Bons Points** (ou **Bonpoint — Bons points famille** si conflit).
- Captures : tableau de bord, espace parent, boutique.
- Argument : **100 % hors ligne, privé, sans compte**.
---
## 9. Stratégie marketing (terrain)
| Canal | Action |
|-------|--------|
| **QR cartons** | Carton imprimé → `/download` → Play Store |
| **Bouche-à-oreille** | Enfants / parents d’école (récré, WhatsApp parents) |
| **Différenciation** | Vie privée vs apps concurrentes cloud + abonnement |
| **Pas en v1** | Budget pub Facebook, influenceurs |
---
## 10. Concurrence & positionnement
Marché saturé dapps « chores / rewards / points ». Angles possibles :
1. **100 % local** — pas dabonnement mensuel.
2. **Français natif** — règles et UX pensées France.
3. **Prix bas** — IAP unique vs abonnements concurrents.
4. **Sans compte** — installation en 2 minutes.
*Étude concurrentielle à faire (23 apps FR/EN) avant finalisation pricing.*
---
## 11. Rapport avec le prototype web
| Élément | Décision |
|---------|----------|
| `bonpoint.ptits-pas.fr` | Devient **landing + redirect** ; app web famille optionnelle en maintenance |
| Code Node actuel | Source de vérité pour **règles par défaut** et **logique métier** ; pas porté tel quel |
| Dialogflow / Smart Home / Nest | **Abandonné** |
| Photos Ariana/Pablo/Hélia | Remplacées par avatars génériques dans lapp publique |
---
## 12. Planning indicatif
| Phase | Livrable | Durée estimée |
|-------|----------|---------------|
| **0** | Validation CDC v0.2 + étude concurrence + pricing | 1 semaine |
| **1** | Projet Flutter + BDD + onboarding + 1 enfant | 1 semaine |
| **2** | Espace parent, règles, mouvements, annulation | 1 semaine |
| **3** | Boutique, export/import, packs règles défaut | 1 semaine |
| **4** | AdMob + IAP + écran premium | 1 semaine |
| **5** | Légal, polish, tests, test fermé 14 j | 2 semaines |
| **6** | Landing QR + cartons + demande prod Play | 1 semaine |
**Total indicatif :** 78 semaines à temps partiel.
---
## 13. Critères dacceptation v1.0
- [ ] Onboarding sans compte ; 1er enfant créé en < 3 min
- [ ] Gratuit : 1 enfant, pub visible, pack règles défaut utilisable
- [ ] Premium : achat débloque multi-enfants + sans pub + édition complète
- [ ] 100 % fonctionnel en mode avion (hors pub et achat)
- [ ] Export puis import sur autre téléphone = données identiques
- [ ] Conformité Families (pubs G, pas de tracking enfant)
- [ ] Politique confidentialité accessible depuis lapp
- [ ] Test fermé 12×14 j validé avant prod
---
## 14. Points encore à trancher
| # | Question | Options |
|---|----------|---------|
| 1 | **Nom marque Play Store** | Bons Points / Bonpoint / autre |
| 2 | **Prix IAP** | 2,99 € / 3,99 € / 4,99 € |
| 3 | **Limite enfants premium** | Illimité / 6 / 8 |
| 4 | **Compte Play** | Perso / société (micro-entreprise) |
| 5 | **Édition règles en gratuit** | Lecture seule / 5 règles custom |
| 6 | **Historique gratuit** | 30 j / 50 mouvements / illimité |
| 7 | **Landing** | Garder `bonpoint.ptits-pas.fr` / nouveau domaine |
| 8 | **Quand arrêter le site web actuel** | Dès v1 / après traction app |
---
## 15. Prochaine étape
1. Valider ce CDC v0.2 (prix IAP, limites gratuit/premium).
2. Faire une **mini étude concurrence** (3 apps, leurs prix).
3. Créer le repo Flutter `bonpoint-app` et lonboarding.
4. En parallèle : ouvrir compte Play + préparer liste des 12 testeurs.
---
*v0.1 → v0.2 : pivot produit public monétisé (freemium + AdMob + IAP), stack Flutter, landing QR conservée.*
+129
View File
@@ -0,0 +1,129 @@
# OK Google — Bons Points sur Nest
## Important : Dialogflow « conversation » ne marche plus sur Nest
Depuis le **13 juin 2023**, Google a arrêté les **Conversational Actions** (Dialogflow + « Dis à Bons Points… »).
Lendpoint `/api/voice/dialogflow` reste utile pour **tests** et pour dautres intégrations Dialogflow, mais **ne peut plus être invoqué directement sur une enceinte Nest** via une action conversationnelle.
La voie officielle aujourdhui : **Google Home Smart Home** (capteurs virtuels).
---
## Ce qui est déjà prêt côté serveur
| URL | Rôle |
|-----|------|
| `GET /api/voice/ariana` | Réponse JSON (test) |
| `GET /api/voice?prenom=pablo` | Idem |
| `POST /api/voice/dialogflow` | Webhook Dialogflow (tests) |
| `POST /api/smarthome` | Fulfillment Google Home (SYNC / QUERY) |
Test rapide :
```bash
curl -s https://bonpoint.ptits-pas.fr/api/voice/ariana
curl -s -X POST https://bonpoint.ptits-pas.fr/api/smarthome \
-H "Content-Type: application/json" \
-d '{"requestId":"test","inputs":[{"intent":"action.devices.SYNC"}]}'
```
---
## Principe Smart Home (recommandé)
Chaque enfant apparaît comme un **capteur de batterie** (0100 %) = son score de bons points.
Phrases à essayer sur le Nest (en français) :
- « OK Google, **quel est le niveau de batterie dAriana** ? »
- « OK Google, **quelle est la batterie de Pablo** ? »
- « OK Google, **niveau de batterie Hélia** »
> Astuce famille : expliquer aux enfants que la « batterie » = leurs bons points.
Les scores au-dessus de 100 saffichent comme 100 % (limite Google).
---
## Configuration Google Home Developer (à faire une fois)
### 1. Créer le projet
1. Ouvrir [Google Home Developer Console](https://console.home.google.com/)
2. **Create project** → nom : `Bons Points`
3. Type dintégration : **Cloud-to-cloud**
### 2. Fulfillment
1. Menu **Integrations** → votre intégration Cloud-to-cloud
2. **Fulfillment URL** :
```
https://bonpoint.ptits-pas.fr/api/smarthome
```
3. Enregistrer
### 3. Account linking (obligatoire pour le Nest)
Google exige un **OAuth 2.0** pour lier le compte dans lapp Google Home.
Options possibles :
- **Auth0** ou **Firebase Auth** (gratuit, adapté à un usage familial)
- OAuth maison (plus technique)
Une fois OAuth configuré, vous liez lintégration dans **Google Home** → **Paramètres** → **Travaille avec Google**.
### 4. Test avant production
1. Dans la console : **Test Suite** → lancer SYNC et QUERY
2. Vérifier que 3 appareils apparaissent (Ariana, Pablo, Hélia)
3. Tester une QUERY sur un appareil → le score doit correspondre à lapp
### 5. Utilisation au quotidien
1. Lier lintégration sur le compte Google du foyer
2. Les 3 « capteurs » sont découverts automatiquement
3. Les enfants demandent le niveau de batterie / points à voix haute
---
## Dialogflow (optionnel, tests uniquement)
Si vous voulez quand même un agent Dialogflow pour tester le webhook :
1. [Dialogflow ES](https://dialogflow.cloud.google.com/) → nouvel agent **fr**
2. Intent `score_enfant` avec phrases :
- Combien de points a Ariana ?
- Quel est le score de Pablo ?
- Et Hélia elle a combien ?
3. Paramètre `@sys.given-name` ou entité custom `prenom` : Ariana, Pablo, Hélia
4. Intent `score_tous` : Combien de points ? / Les scores ?
5. **Fulfillment** → activer webhook :
```
https://bonpoint.ptits-pas.fr/api/voice/dialogflow
```
6. Tester dans la console Dialogflow (simulateur) — **pas sur le Nest**.
---
## Dépannage
| Problème | Piste |
|----------|--------|
| Nest ne connaît pas laction | Normal si vous utilisez encore Dialogflow conversationnel |
| Appareils invisibles | Vérifier account linking + SYNC dans Test Suite |
| Mauvais score | Vérifier `GET /api/public/scores` |
| Hélia mal reconnue | Dire « Hélia » clairement ; le serveur accepte avec/sans accent |
---
## Évolutions possibles
- OAuth simplifié intégré à lapp (panneau parent)
- Cast TTS vers le Nest après une routine (plus complexe)
- Phrases personnalisées via Home Assistant (si un jour vous ladoptez)