Application web (React + Vite) pour partager les dépenses d'un groupe : création de groupes, ajout de dépenses, répartition, règlement (« qui doit combien »), multi-devises et découpage de reçu par glisser-déposer. Sans compte, hors ligne (persistance localStorage).
⚠️ Projet d'apprentissage, frontend uniquement (pas de backend). Données stockées localement dans le navigateur.
- Groupes : créer/sélectionner/supprimer des groupes avec leurs participants.
- Dépenses : ajout via formulaire, partage entre participants, historique.
- Découpage de reçu : saisie d'articles puis attribution par glisser-déposer (
ReceiptSplittingForm). - Multi-devises : sélection de devise par groupe, conversion via une API de taux de change (
services/exchangeRates.js). - Règlement : calcul des soldes et de qui rembourse qui (
SettlementView), export CSV. - Hors ligne : aucune donnée envoyée, tout reste en
localStorage.
git clone https://github.com/sfrayan/Tirelire.git
cd Tirelire
npm install
npm run dev # http://localhost:5173Build de production :
npm run build # sortie dans dist/
npm run preview- React 19 (Hooks)
- Vite 6 (build / dev server)
- localStorage pour la persistance
- API de taux de change (free tier) pour le multi-devises
Tirelire/
├── index.html # entrée Vite
├── src/
│ ├── index.jsx # bootstrap React (createRoot)
│ ├── App.jsx # composant principal (groupes, dépenses, règlement)
│ ├── components/ # GroupList, GroupManager, ExpenseForm,
│ │ # ReceiptSplittingForm (+ Upload/Items/DragDrop),
│ │ # CurrencySelector, CurrencyDisplay, SettlementView
│ ├── hooks/useExchangeRate.js
│ ├── services/exchangeRates.js
│ └── utils/ # calculations, currencyConversion
├── vite.config.js
└── package.json
- Frontend seul : pas de synchronisation entre appareils ni de comptes.
- Migré depuis Create React App (react-scripts 3) vers Vite ; l'ancienne moitié « épargne » (composants Profile + backend Django) et les fichiers en double ont été retirés pour ne garder qu'une application cohérente et qui build.
- OCR sur les reçus
- Synchronisation cloud (backend)
- Empaquetage mobile (Capacitor) — non installé à ce stade
MIT — voir LICENSE.