Application web légère et intuitive pour suivre vos dépenses avec extraction automatique de données depuis vos factures et virements grâce à l'IA Claude Vision.
- Ajouter des dépenses : montant, description, catégorie, date
- Supprimer des dépenses : avec confirmation
- Catégorisation : 5 catégories prédéfinies
- 🍔 Alimentation
- 🚗 Transport
- 🎮 Loisirs
- 🏥 Santé
- 💼 Autre
- Persistance des données : localStorage (données sauvegardées dans le navigateur)
- Filtrage : par catégorie
- Statistiques : graphique Chart.js avec répartition par catégorie
- Upload de documents : glisser-déposer ou sélection de fichiers
- Formats supportés :
- Images : JPG, PNG, WEBP
- Documents : PDF
- Extraction IA : Claude Vision API extrait automatiquement :
- Montant (€)
- Description
- Date
- Catégorie (suggestion intelligente)
- Validation utilisateur : les données extraites pré-remplissent le formulaire que vous pouvez modifier avant validation
- Framework : FastAPI (Python)
- IA : Claude Sonnet 4.5 Vision API (via Emergent LLM Key)
- Traitement documents : PyPDF2, Pillow
- API : RESTful endpoints
- Framework : React 18 + Vite
- Styling : Tailwind CSS
- Graphiques : Chart.js + react-chartjs-2
- Stockage : localStorage (pas de base de données)
- Orchestration : Supervisord
- Backend URL : http://localhost:8001
- Frontend URL : http://localhost:3000
- Python 3.11+
- Node.js 18+
- Yarn
Backend :
cd /app/backend
pip install -r requirements.txtFrontend :
cd /app/frontend
yarn installLes fichiers .env sont déjà configurés avec la clé Emergent LLM :
Backend (/app/backend/.env) :
EMERGENT_LLM_KEY=sk-emergent-fA690296619B525441
Frontend (/app/frontend/.env) :
REACT_APP_BACKEND_URL=http://localhost:8001
Option A : Avec Supervisord (automatique)
supervisord -c /app/supervisord.confPour vérifier le status :
supervisorctl -c /app/supervisord.conf statusPour redémarrer un service :
supervisorctl -c /app/supervisord.conf restart backend
supervisorctl -c /app/supervisord.conf restart frontendOption B : Lancement manuel
Backend :
cd /app/backend
python server.pyFrontend :
cd /app/frontend
yarn devOuvrez votre navigateur à l'adresse : http://localhost:3000
- Remplissez le formulaire "Ajouter manuellement"
- Saisissez le montant, la description, choisissez la catégorie et la date
- Cliquez sur "➕ Ajouter la dépense"
- Cliquez sur "📷 Scanner une facture"
- Glissez-déposez votre image/PDF ou cliquez pour sélectionner
- Formats acceptés : JPG, PNG, WEBP, PDF (max 5MB)
- Cliquez sur "🔍 Extraire les données"
- L'IA analyse le document et pré-remplit le formulaire
- Vérifiez/modifiez les données si nécessaire
- Cliquez sur "➕ Ajouter la dépense"
- Utilisez les boutons de filtre par catégorie pour afficher uniquement certaines dépenses
- Cliquez sur "Toutes" pour voir l'ensemble des dépenses
- Le graphique Chart.js affiche la répartition des dépenses par catégorie
- Survolez les barres pour voir les détails (montant total et nombre de dépenses)
- Cliquez sur l'icône poubelle 🗑️ à droite de chaque dépense
- Confirmez la suppression
Description : Vérification du status du backend
Réponse :
{
"status": "ok",
"message": "Backend de suivi budgétaire actif"
}Description : Extraction des données d'une facture ou d'un virement
Paramètres :
file(multipart/form-data) : fichier image ou PDF
Réponse :
{
"amount": 45.99,
"description": "Courses Carrefour",
"date": "2025-02-18",
"category": "alimentation"
}Erreurs possibles :
- 400 : Format de fichier non supporté ou fichier trop volumineux
- 500 : Erreur lors de l'extraction
curl http://localhost:8001/api/healthRéponse attendue :
{"status":"ok","message":"Backend de suivi budgétaire actif"}curl -X POST http://localhost:8001/api/extract \
-F "file=@/chemin/vers/votre/facture.jpg"/app
├── backend/
│ ├── server.py # Application FastAPI principale
│ ├── requirements.txt # Dépendances Python
│ └── .env # Variables d'environnement
├── frontend/
│ ├── src/
│ │ ├── App.jsx # Composant principal
│ │ ├── index.jsx # Point d'entrée React
│ │ ├── index.css # Styles globaux + Tailwind
│ │ ├── App.css # Styles App
│ │ └── components/
│ │ ├── ExpenseForm.jsx # Formulaire d'ajout
│ │ ├── ExpenseList.jsx # Liste des dépenses
│ │ ├── DocumentUploader.jsx # Upload et extraction
│ │ └── StatsChart.jsx # Graphique Chart.js
│ ├── package.json # Dépendances Node.js
│ ├── vite.config.js # Configuration Vite
│ ├── tailwind.config.js # Configuration Tailwind
│ └── .env # Variables d'environnement
├── supervisord.conf # Configuration Supervisord
└── README.md # Ce fichier
- Modifiez le tableau
categoriesdans/app/frontend/src/App.jsx - Ajoutez la couleur dans
getCategoryColor()de/app/frontend/src/components/ExpenseList.jsx - Ajoutez l'icône dans
getCategoryIcon()du même fichier - Ajoutez la couleur Chart.js dans
/app/frontend/src/components/StatsChart.jsx
Le modèle Claude est configuré dans /app/backend/server.py :
chat.with_model("anthropic", "claude-sonnet-4-5-20250929")# Vérifier les logs
tail -n 50 /var/log/supervisor/backend.err.log
# Vérifier si le port 8001 est disponible
lsof -i :8001
# Redémarrer le backend
supervisorctl -c /app/supervisord.conf restart backend# Vérifier les logs
tail -n 50 /var/log/supervisor/frontend.log
# Vérifier si le port 3000 est disponible
lsof -i :3000
# Redémarrer le frontend
supervisorctl -c /app/supervisord.conf restart frontend- Vérifiez que la clé EMERGENT_LLM_KEY est bien dans
/app/backend/.env - Vérifiez que l'image est bien lisible (pas trop floue)
- Vérifiez la taille du fichier (max 5MB)
- Consultez les logs backend pour plus de détails
- Les données sont sauvegardées dans le localStorage du navigateur
- Si vous changez de navigateur ou effacez les cookies, les données seront perdues
- Pour une persistance permanente, il faudrait implémenter une base de données (MongoDB, PostgreSQL, etc.)
- Export des données en CSV/Excel
- Budget mensuel avec alertes
- Authentification multi-utilisateurs
- Base de données persistante (MongoDB, PostgreSQL)
- Mode sombre
- Graphiques plus avancés (évolution temporelle, camembert)
- Récurrence des dépenses
- Recherche avancée
- Application mobile (React Native)
Ce projet est un prototype à usage personnel.
Développé avec ❤️ par l'équipe Emergent AI Utilise Claude Vision API pour l'extraction intelligente de données
Note : Cette application est conçue pour un usage local et personnel. Les données sont stockées uniquement dans votre navigateur (localStorage).