Muse Otter — Documentation Technique
Muse Otter — Documentation Technique
RevenueCat Shipyard Creator Contest 2026
Stack Technique
Chaque brique choisie pour une seule raison : livrer vite, scaler après, sans compromis.
| Couche | Technologie | Pourquoi |
|---|---|---|
| Frontend | Flutter 3.24+ | Un codebase → iOS, Android, Web, macOS |
| State | Riverpod 2.6+ | Type-safe, testable, code-generated |
| Backend | Cloud Functions v2 | Auto-scaling, pay-per-use |
| Database | Cloud Firestore | Listeners temps réel, offline support |
| Auth | Firebase Auth | Anonyme → account linking |
| IA | Genkit 1.27+ | Framework d’orchestration IA de Google |
| Modèle | Gemini 2.0 Flash | Rapide, économique, adapté au coaching |
| Paiements | RevenueCat 9.10+ | Abos cross-platform en heures |
| Voix | Vapi SDK | Appels vocaux temps réel |
Architecture
┌─────────────────────────────────────────────────────┐
│ APPLICATION FLUTTER │
│ (Clean Architecture) │
│ │
│ Présentation → Domaine → Données │
│ (UI/Riverpod) (Entités) (Firebase) │
└────────────────────────┬────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ BACKEND FIREBASE │
│ │
│ Auth │ Firestore │ Cloud Functions v2 │
│ │ │ • Réponses IA chat │
│ │ │ • Extraction de contexte │
│ │ │ • Webhooks │
└────────────────────────┬────────────────────────────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│RevenueCat│ │ Genkit │ │ Vapi │
│ Abos │ │ +Gemini │ │ Voix │
└──────────┘ └──────────┘ └──────────┘
Clean Architecture — Feature-First
Chaque feature suit la même structure :
lib/features/{feature}/
├── data/ ← Intégration Firebase
├── domain/ ← Logique métier (entités, use cases)
└── presentation/ ← UI (screens, widgets, providers)
Règles : Les entités sont immutables (freezed). Les Use Cases retournent Either<Exception, T>. Les Repositories sont abstraits dans domain/, implémentés dans data/.
Pipeline IA
Comment chaque interaction IA fonctionne :
- L’utilisateur envoie un message → Écriture Firestore avec
status: pending - Cloud Function se déclenche (
onChatMessageCreate) - La fonction charge : prompt système du coach + contexte utilisateur + 20 derniers messages
- Genkit appelle Gemini 2.0 Flash
- Réponse écrite dans Firestore → L’app se met à jour via listener temps réel
L’injection de contexte fait que le même modèle donne l’impression d’être un coach différent pour chaque utilisateur :
Structure du prompt système :
├── Personnalité & méthodologie du coach
├── Contexte personnel utilisateur (projet, valeurs, objectifs)
├── Entrées Foundation récentes
└── Directive de langue (en/fr)
Implémentation RevenueCat
Produits
| Product ID | Prix | Période |
|---|---|---|
monthly_10 | 9,99$ | Mensuel |
yearly_80 | 79,99$ | Annuel (économie 33%) |
Entitlement : Muse Otter Pro
Architecture
┌─────────────┐ Achat ┌─────────────┐
│ App Flutter │──────────────►│ RevenueCat │
│ │ │ │
│ purchases_ │ Entitle- │ (App Store/ │
│ flutter SDK │◄──────────────│ Play Store) │
└──────┬──────┘ ments └──────┬──────┘
│ │
│ Lecture status │ Événements webhook
│ (stream) │ (server-to-server)
▼ ▼
┌─────────────────────────────────────────────┐
│ FIRESTORE │
│ │
│ users/{userId} │
│ ├── subscriptionStatus: free|pro|lifetime │
│ └── subscriptionUpdatedAt: timestamp │
│ │
│ ══ Source de vérité unique ══ │
└─────────────────────────────────────────────┘
Événements Webhook
| Événement RevenueCat | Action | Nouveau Status |
|---|---|---|
| INITIAL_PURCHASE | Accorder Pro | pro |
| RENEWAL | Garder Pro | pro |
| EXPIRATION | Révoquer Pro | free |
| CANCELLATION | Pas de changement | — (garde Pro jusqu’à expiration) |
Statuts protégés : donation et lifetime ne sont jamais modifiés par les webhooks — attribution manuelle pour testeurs et supporters.
Résumé
- Stack : Flutter + Firebase + Genkit/Gemini — un seul codebase, multi-plateforme
- Architecture : Clean Architecture avec Riverpod, organisation feature-first
- IA : Pattern document-status avec injection de contexte pour un coaching personnalisé
- RevenueCat : Webhooks serveur synchronisés vers Firestore comme source de vérité unique
Construit seul en 3 semaines. Conçu pour scaler.