🎓 Projet Master 1 En production 📅 2026

TripWallet

Application web & mobile de gestion de dépenses de voyage en groupe. Partagez les frais, calculez les soldes automatiquement et remboursez facilement.

12
modèles BDD
40+
routes API REST
128
tests unitaires
3
plateformes

Contexte & problème résolu

En voyage en groupe, savoir qui a payé quoi, combien chacun doit à qui et comment équilibrer les comptes est une vraie friction. TripWallet automatise entièrement ce processus : chaque membre saisit ses dépenses, l'application calcule les soldes via un algorithme glouton qui minimise le nombre de transactions, et un système de double validation confirme chaque remboursement.

Fonctionnalités clés

Gestion de voyages
Création, archivage et image de couverture repositionnable par drag & drop.
Dépenses partagées flexibles
Parts égales, montants custom ou coefficients de partage (0 / 0.5 / 1) par invité.
Algorithme glouton de soldes
Calcul automatique des soldes en O(n), minimisant le nombre de remboursements nécessaires.
Remboursement à double validation
Le débiteur déclare le remboursement, le créditeur confirme — aucune ambiguïté possible.
Auth JWT + Google OAuth 2.0
Access token 15 min + refresh token 7 jours avec file d'attente anti race-condition.
Invitation par email ou lien
Lien partageable valable 7 jours et multi-usage, ou invitation directe par email via Resend.
Export PDF & CSV
Génération côté backend des exports de dépenses pour archivage ou comptabilité personnelle.
Statistiques & graphiques
Visualisation des dépenses par catégorie (graphiques camembert), thème clair/sombre, mode démo.

Stack technique

Frontend Web
Next.js 14 React 18 TypeScript Tailwind CSS
Backend
Next.js API Routes Node.js 20 Prisma ORM MySQL 8.0
Mobile
React Native Expo 54 Android (APK) Deep Linking
Auth & Services
JWT Google OAuth 2.0 Cloudinary Resend
DevOps & CI/CD
Docker Compose GitHub Actions VPS OVH Nginx SSL / HTTPS
Tests
Vitest Jest 128 tests unitaires

Architecture technique

Monorepo avec 3 applications indépendantes orchestrées par Docker Compose : /frontend, /backend, /frontend-mobile.

Frontend Web — Next.js 14 · React 18 · TypeScript · Tailwind CSS
↕ REST↕ REST
Backend API — Next.js API Routes · 40+ endpoints · JWT Auth · Prisma ORM
↕ SQL
Base de données — MySQL 8.0 · 12 modèles Prisma · Relations complexes
↕ HTTP
Mobile — React Native · Expo 54 · Android (APK) · Deep Linking (tripwallet://)
Infrastructure — VPS OVH · Docker Compose · Nginx · SSL · CI/CD GitHub Actions

Défis techniques résolus

Algorithme glouton de calcul de soldes
Chaque dépense implique plusieurs payeurs et bénéficiaires avec des coefficients différents. L'algorithme calcule les soldes nets de chaque membre, puis minimise le nombre de transactions de remboursement en appariant créditeurs et débiteurs de façon optimale.
Refresh token avec file d'attente (anti race-condition)
Quand plusieurs requêtes simultanées arrivent avec un access token expiré, une seule doit déclencher le refresh. Les autres attendent en file et réutilisent le nouveau token, évitant les invalidations multiples du refresh token.
CORS multi-origines (web, mobile, dev/prod)
Gérer les autorisations CORS pour plusieurs origines : application web, application mobile Expo, environnements de développement et de production, sans compromettre la sécurité.
Génération PDF / CSV côté backend
Génération de fichiers d'export structurés côté serveur, avec mise en page et données agrégées (totaux par catégorie, soldes finaux, historique des transactions).
Deep linking email → app mobile
Les liens d'invitation dans les emails ouvrent directement l'app mobile via le schéma tripwallet:// avec les paramètres de groupe pré-remplis, sur Android.
Essayez TripWallet
Déployé en production · Mode démo disponible sans inscription
Prochain projet
JobMarket
Narththanan Sivanathan
Narththanan SIVANATHAN
Développeur Full Stack · Master 1

Copyright 2026 © SIVANATHAN Narththanan