Problème
Remplacer un workflow Google Sheets de suivi des finances perso par un outil self-hosted, mono-utilisateur, pensé pour le marché français.
Contexte
Projet personnel, en cours de finition vers la v2. Déployé sur hyprio.staki.fr.
Stack technique
- Bun >= 1.3
- Next.js 15 (App Router)
- TypeScript strict (pas de `any`)
- Tailwind v4 + design system CSS custom
- SQLite via `better-sqlite3`
- JWT (`jose`) + bcrypt, cookie HTTP-only
- Vitest
- Docker + Coolify + Traefik sur Hetzner
Décisions techniques
- SQLite plutôt que Postgres : mono-utilisateur, self-hosted, zéro infra à gérer. WAL mode activé pour la sécurité des lectures concurrentes.
- Système de migration sans outil dédié : `addColumnIfMissing` au boot via PRAGMA. Suffisant pour les ajouts de colonnes, pas pour les renames/drops.
- Money stocké en INTEGER (centimes), dates en `TEXT YYYY-MM-DD` — pas de float, pas de timezone à gérer.
- Charts sans librairie : barres et tendances en pur CSS pour éviter une dépendance lourde.
- JWT sans expiration : intentionnel pour un usage perso self-hosted, l'auth ne doit pas casser au milieu d'une session.
Difficultés
- Organisation par périodes nommées avec carry-over de solde — modéliser les relations entre périodes, revenus, dépenses, dettes et épargne sans dupliquer.
- Gestion des dettes bidirectionnelles (je dois / on me doit) avec log de mouvements et solde restant.
Résultats
- Mono-utilisateur en production sur hyprio.staki.fr.
- Couvre dépenses (fixes/variables), revenus multi-sources, dettes, épargne, dashboard analytics.