ahmet sekmen
En cours

Hyprio

Finance tracker self-hosted. Catégorisation des dépenses, dashboards, budgets, import bancaire.

  • Next.js 15
  • TypeScript
  • SQLite
  • Tailwind

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.