No description
- PHP 65.7%
- TypeScript 32.8%
- CSS 0.6%
- JavaScript 0.5%
- Dockerfile 0.3%
- Other 0.1%
| .github | ||
| backend | ||
| docker | ||
| frontend | ||
| .env.prod.example | ||
| .gitignore | ||
| docker-compose.prod.yml | ||
| docker-compose.yml | ||
| README.md | ||
| specs.md | ||
Weekli
Application web de gestion budgétaire hebdomadaire permettant de planifier ses dépenses en fonction des revenus, charges fixes et objectifs d'épargne.
🎯 Fonctionnalités
- Gestion des charges fixes - Définir les dépenses mensuelles récurrentes (loyer, factures, abonnements)
- Gestion des revenus - Configurer les sources de revenus mensuels
- Budget hebdomadaire automatique - Calcul basé sur vos revenus et charges
- Suivi des dépenses - Enregistrer les dépenses ponctuelles et suivre le budget restant
- Dépenses amortissables - Planifier des achats importants étalés sur plusieurs semaines
- Objectif d'épargne - Définir et suivre un montant à économiser chaque semaine
- Historique et statistiques - Visualiser l'évolution de son budget
🛠 Stack Technique
Backend
- PHP 8.2+
- Symfony 7.4
- API Platform 4.x (REST API avec JSON-LD)
- PostgreSQL 16
- Lexik JWT Authentication
Frontend
- React 19
- TypeScript
- Vite 7
- Tailwind CSS
- React Router 7
- Recharts (graphiques)
🚀 Installation
Prérequis
- Docker & Docker Compose
Démarrage
# Cloner le projet
git clone <repository-url>
cd weekli
# Lancer les conteneurs
docker compose up -d
# Générer les clés JWT (première fois uniquement)
docker compose exec php bin/console lexik:jwt:generate-keypair
# Exécuter les migrations
docker compose exec php bin/console doctrine:migrations:migrate
URLs
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| API | http://localhost:8080/api |
| Documentation API | http://localhost:8080/api/docs |
📁 Structure du projet
weekli/
├── backend/ # API Symfony
│ ├── src/
│ │ ├── Controller/ # Contrôleurs personnalisés
│ │ ├── Entity/ # Entités Doctrine
│ │ ├── Repository/ # Repositories
│ │ ├── Service/ # Services métier
│ │ └── State/ # Processors API Platform
│ └── config/ # Configuration Symfony
├── frontend/ # Application React
│ ├── src/
│ │ ├── components/ # Composants réutilisables
│ │ ├── contexts/ # Contextes React (Auth)
│ │ ├── pages/ # Pages/vues
│ │ ├── services/ # Client API
│ │ └── types/ # Types TypeScript
│ └── public/
└── docker/ # Configuration Docker
├── nginx/
├── php/
└── node/
🔧 Commandes utiles
Backend (dans le conteneur PHP)
# Migrations
docker compose exec php bin/console doctrine:migrations:migrate
# Vider le cache
docker compose exec php bin/console cache:clear
# Créer une migration
docker compose exec php bin/console make:migration
Frontend
# Développement (déjà lancé via docker compose)
docker compose exec frontend npm run dev
# Build production
docker compose exec frontend npm run build
# Lint
docker compose exec frontend npm run lint
🚀 Déploiement en Production
1. Configuration
# Copier et configurer les variables d'environnement
cp .env.prod.example .env.prod
# Éditer .env.prod avec vos valeurs
nano .env.prod
2. Générer les clés JWT
# Créer le dossier jwt
mkdir -p jwt
# Générer la clé privée (remplacer YOUR_PASSPHRASE par la valeur de JWT_PASSPHRASE dans .env.prod)
openssl genpkey -out jwt/private.pem -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096 -pass pass:YOUR_PASSPHRASE
# Générer la clé publique
openssl pkey -in jwt/private.pem -out jwt/public.pem -pubout -passin pass:YOUR_PASSPHRASE
# Sécuriser les permissions
chmod 600 jwt/private.pem
chmod 644 jwt/public.pem
3. Lancer l'application
# Construire et démarrer les conteneurs
docker compose -f docker-compose.prod.yml --env-file .env.prod up -d --build
# Exécuter les migrations
docker compose -f docker-compose.prod.yml exec php bin/console doctrine:migrations:migrate --no-interaction
Architecture Production
L'application est servie sur un seul port (80 par défaut) :
/api/*→ Backend Symfony (PHP-FPM)/*→ Frontend React (fichiers statiques)
📊 Formules de calcul
Budget disponible = Revenus mensuels - Charges fixes actives
Budget hebdomadaire = (Budget disponible - Épargne mensuelle) / 4 - Amortissements hebdomadaires
Gestion des dépassements
- Si les dépenses dépassent le budget, le surplus est d'abord compensé par l'épargne
- Le reste est reporté sur la semaine suivante
Gestion des économies
- Si les dépenses sont inférieures au budget, l'excédent s'ajoute au compteur d'épargne
🔐 Authentification
L'API utilise JWT pour l'authentification :
POST /api/register- InscriptionPOST /api/login- Connexion (retourne un token JWT)
Les tokens sont stockés dans le localStorage et envoyés via le header Authorization: Bearer <token>.
📝 Licence
Propriétaire