No description
  • PHP 65.7%
  • TypeScript 32.8%
  • CSS 0.6%
  • JavaScript 0.5%
  • Dockerfile 0.3%
  • Other 0.1%
Find a file
2025-12-11 20:10:59 +01:00
.github Add production environment configuration and deployment instructions 2025-12-07 16:01:51 +01:00
backend Update API title to 'Weekli API' and enable Swagger UI 2025-12-11 20:10:59 +01:00
docker Fix fastcgi_param paths in Nginx configuration for PHP service 2025-12-07 20:55:53 +01:00
frontend first commit 2025-12-07 15:48:27 +01:00
.env.prod.example Add production environment configuration and deployment instructions 2025-12-07 16:01:51 +01:00
.gitignore Add production environment configuration and deployment instructions 2025-12-07 16:01:51 +01:00
docker-compose.prod.yml Remove read-only flag from JWT configuration volume in Docker Compose 2025-12-07 21:02:16 +01:00
docker-compose.yml first commit 2025-12-07 15:48:27 +01:00
README.md Add production environment configuration and deployment instructions 2025-12-07 16:01:51 +01:00
specs.md first commit 2025-12-07 15:48:27 +01:00

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 - Inscription
  • POST /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