Une plateforme de cours particuliers que je développe de bout en bout : site web, API indépendante et application mobile Expo. Les réservations, paiements et reversements imposent une architecture où chaque opération financière reste traçable et rejouable sans double débit.
Relier élèves, professeurs et administration dans un produit où les données, l'argent et les droits d'accès restent cohérents.
Le web Next.js et l'API Hono /api/v1 sont deux services Docker distincts. Ils partagent les services métier et le schéma Prisma/PostgreSQL. L'application Expo consomme l'API publique. Sur AWS, Traefik distribue le trafic HTTPS ; RDS héberge la base et S3 les documents, accessibles par URL signée.
Une logique métier commune, plusieurs interfaces et des contrôles à chaque frontière.
L'API versionnée utilise des contrats Zod, une documentation OpenAPI et une authentification JWT avec jetons de rafraîchissement pour le mobile. Le web conserve NextAuth. Les trois rôles sont vérifiés côté serveur. La migration de la base s'exécute dans un conteneur dédié.
Next.js, Hono et Expo évoluent dans un même dépôt, avec des services web/API séparés et un client mobile consommant les mêmes ressources métier.
Réservations, disponibilités, comptes, factures et portefeuille sont des entités liées. WalletTransaction conserve l'historique des mouvements et le solde après chaque écriture.
Identité dérivée de la session ou du JWT, contrôles d'accès, validation Zod, pagination par curseur et clés d'idempotence sur les créations financières.
Stripe et Stripe Connect couvrent la recharge du portefeuille, la réservation, les remboursements et le reversement des professeurs. Les événements webhook sont vérifiés et leur rejeu ne doit pas créer un second mouvement comptable.
Le parent recharge son portefeuille ; un complément automatique peut couvrir le montant manquant au moment d'une réservation.
Une transaction en base protège le solde et le créneau. La clé d'idempotence et les verrous évitent les doubles débits et les doubles réservations.
Les webhooks signés finalisent les recharges. Le grand livre permet de suivre remboursements, échecs et corrections.
Stripe Connect organise le versement aux professeurs ; factures et attestations sont gérées dans un flux distinct. La conformité reste un chantier actif.
Un paiement réussi dans Stripe ne suffit pas : il faut pouvoir prouver quel mouvement a été écrit en base, qui peut le consulter et ce que produit le rejeu d'un webhook.
Le produit continue d'évoluer. L'application mobile et certaines exigences de conformité sont encore en recette ; je distingue les composants construits des parcours validés en conditions réelles.