← Phase 2 Overview / Monétisation & Premium
💳
Module 15 — Phase 2

Monétisation, Abonnement Premium & Publicité

Stripe Billing pour le Premium, publicité contextuelle de voyage, dashboard marketing partenaires et modèle de revenus complet.

Backlog

User Stories

US15.1
En tant qu'utilisateur, je peux souscrire à NOMIIQ Premium (9.99€/mois ou 89€/an)
must 8pts
US15.2
En tant qu'utilisateur Premium, je bénéficie de 0 publicité, IA avancée et alertes prioritaires
must 5pts
US15.3
En tant qu'utilisateur, je peux gérer mon abonnement (annuler, mettre à jour carte) via portail Stripe
must 3pts
US15.4
En tant qu'utilisateur, je vois des posts sponsorisés clairement labellisés dans le feed
must 4pts
US15.5
En tant qu'annonceur, je peux créer une campagne sponsorisée (destination, marque, office de tourisme)
must 8pts
US15.6
En tant qu'annonceur, je peux cibler par pays, intérêts, type de voyageur et budget
must 6pts
US15.7
En tant qu'annonceur, je vois les performances de ma campagne (impressions, clics, CTR)
must 5pts
US15.8
En tant qu'admin marketing, je valide les créatifs et campagnes avant publication
must 4pts
US15.9
En tant que créateur vérifié, je peux publier des itinéraires premium payants (P3)
could 5pts
US15.10
En tant que système, les revenus affiliés (vols, hotels, activités) sont trackés par conversion
must 6pts
/billing & /ads

Endpoints API

GET /billing/plans Plans Premium disponibles public
POST /billing/subscribe Souscrire (body: price_id → Stripe Checkout) 🔒 auth
GET /billing/status Statut abonnement actuel 🔒 auth
POST /billing/portal Ouvrir portail Stripe Customer Portal 🔒 auth
POST /billing/webhook Webhook Stripe (events: invoice.paid, subscription.cancelled...) public
GET /ads/feed-slots Emplacements publicitaires disponibles dans le feed 🔒 auth
POST /ads/campaigns Créer une campagne 🔒 auth
GET /ads/campaigns Mes campagnes (annonceur) 🔒 auth
GET /ads/campaigns/:id/analytics Stats : impressions, clics, CTR, spend 🔒 auth
POST /ads/campaigns/:id/creatives Uploader un créatif (image + CTA + URL) 🔒 auth
PATCH /ads/campaigns/:id/status Activer/Pauser/Arrêter une campagne 🔒 auth
GET /admin/ads/pending Créatifs en attente de validation 🔒 auth
POST /admin/ads/creatives/:id/approve Approuver un créatif 🔒 auth
GET /tracking/conversions Revenus affiliés trackés (admin) 🔒 auth
Schémas de données

Tables Monétisation

TABLE subscriptions
id UUID PRIMARY KEY user_id UUID REFERENCES users(id) stripe_sub_id TEXT UNIQUE stripe_customer_id TEXT plan ENUM('monthly','yearly') status ENUM('active','past_due','cancelled','trialing') current_period_end TIMESTAMPTZ cancel_at TIMESTAMPTZ created_at TIMESTAMPTZ DEFAULT NOW()
TABLE ad_campaigns
id UUID PRIMARY KEY advertiser_id UUID REFERENCES users(id) name TEXT type ENUM('feed_post','destination_pin','story_banner') targeting JSONB -- {countries, interests, traveler_types, budget_range} daily_budget_usd DECIMAL(10,2) total_budget_usd DECIMAL(10,2) spend_today DECIMAL(10,2) DEFAULT 0 spend_total DECIMAL(10,2) DEFAULT 0 status ENUM('draft','pending_review','active','paused','completed') starts_at TIMESTAMPTZ ends_at TIMESTAMPTZ created_at TIMESTAMPTZ DEFAULT NOW()

💎 Comparatif Free vs Premium

Fonctionnalité Free Premium 9.99€/mois
Feed & posts illimités
Carte & Lieux
Copilote IA (requêtes/j) 5/jour Illimité
Génération itinéraires 3/mois Illimité
Mémoire longue IA
Agents IA messagerie
Alertes sécurité Standard Prioritaires (< 30s)
Publicités dans le feed Oui ❌ Aucune pub
Export budget PDF/CSV
Traduction posts (DeepL) 5/jour Illimité
Alertes prix transport 2 actives Illimité
Support Standard Prioritaire
Business Logic

Règles Métier & Modèle de Revenus

💳
Stripe Billing — flux d'abonnement
Checkout Session → paiement → webhook invoice.paid → UPDATE subscriptions SET status="active". Webhook subscription.cancelled → passage à Free immédiat (fin période en cours).
📰
Publicité éthique NOMIIQ
1 post sponsorisé maximum toutes les 10 posts. Label "Sponsorisé" obligatoire et visible. Pas de targeting comportemental cross-app. Uniquement ciblage intérêts déclarés dans le profil NOMIIQ.
💰
Revenus affiliés trackés
Chaque clic sur lien partenaire génère un tracking_pixel avec conversion_id. Webhook partenaire (Amadeus, Booking, Airalo) confirme la conversion → log dans conversions table → calcul commission.
🔐
Freemium guardrails
Compteurs quotidiens en Redis (ai_requests:userId:date). Après limite → 402 Payment Required avec deep link vers upgrade Premium. Pas de dégradation silencieuse.
📊
Dashboard annonceur
Métriques : impressions (vue > 1s), clics (CTA), CTR, CPM, reach unique. Mise à jour toutes les heures. Export CSV disponible. Pas de données personnelles exposées.
Projections de revenus Phase 2
Abonnements Premium
25% × 50k MAU × 9.99€
~124k€/mois
Affiliés transport
~2% commission × 500k€ GMV
~10k€/mois
Publicité
CPM ~3€ × 5M impressions/mois
~15k€/mois
eSIM commissions
12% × 30k€ ventes/mois
~3.6k€/mois
MRR Cible Phase 2 : ~152k€/mois ARR ~1.8M€ — Break-even estimé M+36
Critères d'acceptation
Abonnement Stripe activé en < 5s après paiement (webhook)
Post sponsorisé labellisé, jamais confondu avec contenu organique
Dashboard annonceur mis à jour toutes les heures max
Compteur IA freemium : 402 déclenché exactement à la 6ème requête
Webhook Stripe : idempotent, retry safe (vérification event.id en DB)