Roadmap
Ce qui est livré, ce qui vient ensuite.
Chaque affirmation renvoie à un vrai fichier source ou commit. Les affirmations de conformité sont des socles — pas des certifications.
Livré
Auth
Authentification multi-fournisseur, 2FA, clés API, surfaces passkey et socle SSO-ready avec Better Auth core plus adaptateurs applicatifs.
- Better Auth — connexion multi-fournisseur (email, Google, GitHub, magic link)
Gestionnaire d'auth principal avec adaptateur drizzle. Route API : POST /api/auth/[...all].
src/libs/BetterAuth.ts - 2FA TOTP — mots de passe à usage unique basés sur le temps
Plugin TOTP câblé dans la config Better Auth.
src/libs/BetterAuth.ts - Clés API — créer, révoquer, délimiter
Plugin Better Auth API Keys avec interface tableau de bord.
src/libs/ApiKeys.ts - Lien magique — connexion email sans mot de passe
Template email dispatché via l'adaptateur Resend.
src/libs/email/templates/magic-link.ts - Primitives passkey — enregistrement WebAuthn + vérificateurs d'authentification
Arbre passkey 6-modules : enregistrement, vérificateur d'authentification, stockage, helpers et types ; l'UI de login reste spécifique à l'app.
src/libs/passkeys/index.ts - RBAC — contrôle d'accès basé sur les rôles via CASL
Règles de capacité + composant Can + middleware api-guard.
src/libs/abilities.ts - Multi-locataire — orgs + RLS Postgres
Wrapper RLS withOrgContext() ; schéma org + migrations.
src/libs/RLS.ts
Livré
Facturation
Stripe comme unique fournisseur de paiement. Abonnements, facturation à l'usage, TVA, relances et analytique revenus.
- Stripe — abonnements et paiements ponctuels
Vérification de signature, montants en centimes uniquement, et rejeu idempotent des webhooks.
src/libs/Stripe.ts - Table abonnements — persistance du cycle de vie Stripe
État de l'abonnement Stripe dans la table subscriptions. Webhook : /api/stripe/webhook.
src/app/api/stripe/webhook/route.ts - Stripe Meters — facturation à l'usage
Usage.ts + job usage-report. Interface admin sur /dashboard/admin/usage.
src/libs/Usage.ts - Stripe Tax — calcul automatique de la TVA
Tax.ts + TaxIdSection + 2 handlers webhook.
src/libs/Tax.ts - Relances — Stripe Smart Retries + email
Handler webhook invoice.payment_failed + template DunningEmail.
src/libs/stripe/handlers/invoice-payment-failed.ts - Analytique MRR / ARR / NRR — centimes entiers, ventilation par cohorte
18 tests couvrant le churn, les séries, les cohortes, la ventilation, les événements.
src/libs/Revenue.ts - Portail client Stripe — gestion de facturation en libre-service
Création de session billing_portal dans les actions stripe.
src/components/dashboard/ManageBillingButton.tsx
Livré
Conformité
Chaîne d'audit inviolable, export de données personnelles, suppression de compte, idempotence, lignes WORM, RLS, CSP et security.txt.
- Chaîne d'audit — inviolable, hash SHA-256 chaîné, ajout uniquement
Déclencheur WORM + RLS + chaîne de hachage ; API verify/export/append.
src/libs/AuditChain.ts - Export de données RGPD — blob JSON gzip via URL signée
requestDataExport() + adaptateur jobs + Storage.put(). Spec E2E : tests/e2e/rgpd-export.spec.ts.
src/actions/account.ts - Suppression de compte — délai de grâce 30 jours avec lien d'annulation
requestAccountDeletion() + cron quotidien suppression définitive après délai.
src/actions/account.ts - Clés d'idempotence — relance webhook sans double débit
Contrat en-tête Idempotency-Key. Hash SHA-256 de la requête. Cache TTL 24h.
src/libs/Idempotency.ts - Couche de suppression — marquage faux-positif / risque accepté
SuppressFindingButton + SuppressionReasonDialog + SuppressedRowBadge.
src/libs/Suppression.ts - Lignes WORM — DELETE physiquement bloqué au niveau du déclencheur Postgres
Colonne audit_chain.worm + déclencheur audit_chain_worm_no_delete.
src/libs/AuditChain.ts - RLS Postgres — isolation des locataires via Row Level Security
Wrapper withOrgContext() + migration 0004-multi-tenant-orgs.
src/libs/RLS.ts - Content-Security-Policy — valeurs de durcissement production
CSP + HSTS + X-Frame-Options + Permissions-Policy dans next.config.ts.
next.config.ts - security.txt — politique de divulgation RFC 9116
Contact + Expires + Policy assemblés depuis les variables d'environnement à la requête.
src/app/.well-known/security.txt/route.ts
Socle de conformité — Les primitives ci-dessus sont câblées comme scaffolding de preuve — elles ne constituent pas une certification SOC 2, ISO 27001 ou HIPAA. Ajoutez vos contrôles et une revue qualifiée par-dessus.
En cours
Partiellement livré
Les fichiers existent et les tests passent, mais la décision était initialement différée — ces éléments ont été livrés avant le plan.
| Fonctionnalité | Statut | Fichier source |
|---|---|---|
| Éditeur de texte enrichi Tiptap | partiel | src/libs/RichText.ts |
| Script de scaffolding gen:feature | partiel | scripts/gen-feature.ts |
Pas d'ETA. Pas de numéros de version. Livré quand le travail est terminé.
Différé
Prochainement (sans ETA)
Intentionnellement absent selon la décision de stack. Sera ajouté dans une vague future.
- Temps réel — Durable Objects / WebSocketdifféré
Pas de lib WebSocket ou temps réel dans package.json. Chemin CF Durable Objects disponible via wrangler.toml.
- Vercel AI SDK v5différé
Llm.ts est une abstraction de fournisseur personnalisée (Anthropic + OpenAI + Ollama). Vercel AI SDK est une alternative directe.
- Génération SDK API — génération de client OpenAPI-firstdifféré
La spec OpenAPI est disponible sur /api-docs. La génération de client est différée ; pas d'openapi-generator dans les dépendances.
- Audit de bundle Tiptapdifféré
Tiptap livré avant le plan. Audit de taille de bundle différé.
- CAPTCHA — hCaptcha / Cloudflare Turnstiledifféré
Ignoré selon la décision de stack. CF WAF est la couche de mitigation des bots.
- Base de données vectorielle — pgvector / Pineconedifféré
Ignoré selon la décision de stack. Postgres FTS + pg_trgm couvre le cas d'usage de recherche.
Prêt à livrer ?
Clonez le dépôt et votre prochain appel d'offres commence avec un tableau de bord de conformité, pas une application vide.