🎯 Objectif : connaître les services tiers qu’on assemble pour construire un produit moderne, et savoir quels critères les choisir.
À l'issue de cet axe, tu sauras :
- Connaître les solutions par catégorie : auth, paiement, email, search, analytics, IA, CMS
- Choisir entre une solution complète (BaaS) et un assemblage de services
- Évaluer un service : prix, vendor lock-in, support, sécurité
- Mettre en place une intégration via webhook
- Gérer les clés API et secrets correctement
🌿 Confirmé ⏱ 10 min 📚 prérequis : axes 8-9 lus
Au lieu d’un BaaS unique (Firebase, Supabase) qui fait tout, tu assembles des services spécialisés. C’est la stratégie indie hacker 2026 :
Frontend (Next.js sur Vercel)
├── Resend (email transactionnel)
├── PostHog (analytics produit)
├── Algolia / Meilisearch (search)
└── OpenAI / Anthropic (IA)
- Chaque service est best-in-class sur son domaine.
- Free tiers cumulables → coût initial zéro.
- Migrations partielles possibles (changer Stripe ne casse pas l’auth).
- Multiplicité des intégrations à maintenir.
- Webhooks qui prolifèrent.
- Pannes : si Stripe tombe, ton paiement tombe (mais tes autres services tournent).
| Service | Forces |
|---|
| Clerk | DX excellente, UI prête, gestion organisations, standard 2026 |
| Auth.js (NextAuth v5) | Open source, multi-providers, hébergeable |
| Supabase Auth | Si tu utilises déjà Supabase |
| Firebase Auth | Si tu utilises déjà Firebase |
| WorkOS | SSO enterprise (SAML), prix entreprise |
| Stytch | Passwordless, M2M |
| Keycloak | Self-host, Java, complexe mais open source enterprise |
| Service | Forces |
|---|
| Stripe | Le standard mondial — paiements, subscriptions, marketplaces, factures, fraud detection |
| Lemon Squeezy | Merchant of Record (gère TVA mondiale pour toi) — idéal indie hackers |
| Paddle | Idem MoR, alternative reconnue |
| Mollie | Européen, IBAN/Bancontact, conformité EU |
| Adyen | Enterprise, gros volumes |
| Service | Forces |
|---|
| Resend | DX excellente, MJML/JSX templates, standard 2026 pour les indies |
| Postmark | Délivrabilité top, prix raisonnable |
| SendGrid | Vétéran, gros volumes |
| AWS SES | Si tu es sur AWS, prix imbattable mais setup complexe |
| Loops | Email marketing simple pour produits SaaS |
| Customer.io | Email marketing avancé, segmentation, automation |
| Service | Forces |
|---|
| Meilisearch Cloud | Open source, simple, typo-tolérant, recommandé |
| Algolia | Premium, ultra-polish, cher |
| Typesense Cloud | Concurrent direct Meilisearch |
| OpenSearch / Elasticsearch managé | Si tu as déjà Elasticsearch ou besoins avancés |
| Service | Forces |
|---|
| PostHog | Open source, complet (analytics + feature flags + A/B + replay), free tier généreux |
| Mixpanel | Premium, segmentation puissante |
| Amplitude | Enterprise, BI-niveau |
| Service | Forces |
|---|
| Plausible | Open source, no-cookies, simple, recommandé 2026 |
| Fathom | Idem, légèrement différent |
| Umami | Open source self-host |
| GA4 | Gratuit mais usine à gaz, cookies, RGPD complexe |
| Service | Forces |
|---|
| Sentry | Le standard — backend + frontend, replay, performance |
| Bugsnag | Concurrent fonctionnel |
| Highlight | Plus récent, replay-first |
| Datadog | Enterprise observabilité complète |
| Service | Forces |
|---|
| PostHog | Inclus avec analytics, gratuit |
| LaunchDarkly | Premium, enterprise |
| Unleash | Open source |
| Statsig | Concurrent moderne |
| Service | Forces |
|---|
| LiveKit | Open source, self-hostable, le plus populaire |
| Daily.co | API simple, intégration rapide |
| Mux | Vidéo on-demand + streaming |
| Zoom Video SDK | API Zoom embarquable |
| Service | Forces |
|---|
| Anthropic | Claude Sonnet/Opus — qualité et raisonnement |
| OpenAI | GPT — large adoption |
| Mistral | EU, open source, plus economical |
| Groq | Inférence ultra-rapide |
| Ollama | Self-host local |
| Service | Forces |
|---|
| Sanity | DX top, structuré, queries GROQ |
| Contentful | Enterprise, mature |
| Strapi | Open source self-host, Node.js |
| Payload | Open source moderne, TypeScript-first |
| Directus | Open source, no-code admin |
| Storyblok | Visual editor, marketing-friendly |
| Service | Forces |
|---|
| Svix | Outbound webhooks managés, retry logic |
| Hookdeck | Inbound, capture/replay |
Beaucoup de services t’envoient des webhooks quand un événement se produit. Tu dois les recevoir et les traiter de façon fiable.
// Stripe webhook — Next.js Route Handler
import { headers } from 'next/headers';
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);
export async function POST(request: Request) {
const body = await request.text();
const signature = (await headers()).get('stripe-signature')!;
event = stripe.webhooks.constructEvent(
process.env.STRIPE_WEBHOOK_SECRET!
return Response.json({ error: 'Invalid signature' }, { status: 400 });
// ⚠ Traiter de façon IDEMPOTENTE — Stripe peut retry
case 'checkout.session.completed':
await handleCheckoutComplete(event.data.object);
case 'customer.subscription.updated':
await handleSubscriptionUpdate(event.data.object);
return Response.json({ received: true });
Règles d’or des webhooks :
- Vérifier la signature (sinon n’importe qui peut t’envoyer des fake events).
- Idempotence : Stripe peut retry — utilise un
event.id comme clé.
- Réponse rapide (< 5 s) : pousse en queue si traitement long, réponds 200 immédiatement.
- Logs : garde tous les events reçus pour le debug.
Une clé API n’a JAMAIS sa place dans ton repo Git.
.env.example (DANS Git, sans les vraies valeurs)
.gitignore : .env*.local, .env (sauf .env.example)
| Plateforme | Outil |
|---|
| Vercel / Netlify | Variables d’environnement dashboard |
| AWS | Secrets Manager / Parameter Store |
| Kubernetes | Sealed Secrets, External Secrets, Vault |
| Hashicorp Vault | Self-host enterprise |
| Doppler | Service tiers, sync vers tes envs |
| 1Password Secrets Automation | Si tu utilises déjà 1Password |
Distinguer clés publiques et secrètes :
| Clé | Public ? | Exemple |
|---|
| Publishable / anon key | Oui — ok dans le code client | STRIPE_PUBLISHABLE_KEY=pk_..., SUPABASE_ANON_KEY |
| Secret / service key | NON — backend uniquement | STRIPE_SECRET_KEY=sk_..., SUPABASE_SERVICE_ROLE_KEY |
Avec Next.js, le préfixe NEXT_PUBLIC_ expose au client. Sans préfixe, reste serveur.
# Public (exposé au client)
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_...
NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
# Secret (jamais exposé au client)
SUPABASE_SERVICE_ROLE_KEY=eyJ...
Suite : 10.3 — Plateformes serverless / edge — Vercel, Cloudflare, Fly.io.