Tous les projets

SplitPal Partager les dépenses sans tableur.

Une application de dépenses de groupe sans compte, avec des calculs en centimes, des liens partagés et des remboursements lisibles.

Projet personnel · Conception, développement et déploiement

  • Next.js
  • TypeScript
  • Drizzle ORM
  • Turso / libSQL
  • Vitest

Créez un groupe, partagez un lien et ajoutez les dépenses. SplitPal calcule le solde de chacun et propose les virements nécessaires pour équilibrer le groupe.

  1. Next.js UI
  2. API + validation
  3. Drizzle ORM
  4. Turso / libSQL
Vue d’ensemble de l’application. Un cookie conserve l’identité locale ; chaque écriture est validée dans le périmètre du groupe concerné.

Le problème

Un voyage de groupe pose un petit problème comptable : les payeurs varient, certaines dépenses ne concernent pas tout le monde et les soldes doivent rester compréhensibles. L’application se concentre sur le groupe, ses membres, les dépenses et les remboursements.

Ce que j’ai développé

J’ai conçu et déployé l’application avec Next.js App Router, TypeScript et une base Turso/libSQL accessible via Drizzle ORM. Les données du groupe sont rendues côté serveur, avec des interactions côté client pour ajouter des membres et des dépenses.

L’application propose le partage égal, l’ouverture et la clôture des voyages, l’historique, l’export CSV et un groupe d’exemple partagé. La création des groupes et des dépenses utilise des transactions pour écrire ensemble les enregistrements associés.

Des décisions pour fiabiliser les soldes

Stocker les montants en centimes
Les calculs utilisent des entiers. La validation vérifie que la somme des parts correspond exactement au montant de la dépense.
Valider dans le périmètre du groupe
Les API vérifient que le payeur et les participants appartiennent au groupe demandé. Les doublons et les totaux incohérents sont rejetés.
Proposer des remboursements pratiques
Un algorithme glouton réduit les soldes à travers des virements suggérés. Il ne prétend pas trouver le nombre minimal absolu de virements dans tous les cas.

Le compromis du lien partagé

L’absence de compte facilite la création et le partage d’un groupe. En contrepartie, l’identité dans le navigateur n’est pas une authentification : toute personne disposant du lien peut participer. Il n’y a ni compte privé ni rôle de propriétaire.

Ce modèle convient à une démonstration ou à des groupes sans données sensibles. Des informations financières confidentielles nécessiteraient un contrôle d’accès plus strict. Le voyage d’exemple est lui aussi partagé et modifiable.

Validation et résultat

Les tests publiés couvrent la conversion en centimes, les soldes, les remboursements, les totaux incohérents, les doublons et les membres appartenant à un autre groupe. Le dépôt exécute le lint, la vérification des types, les tests et le build en intégration continue.

Le résultat est une application déployée, avec son code public et un voyage d’exemple. Le projet couvre le parcours complet : interface, persistance, validation, tests et déploiement.

Explorer le voyage d’exemple