- PHP 76.4%
- Vue 20%
- JavaScript 1.4%
- Shell 1%
- Blade 0.6%
- Other 0.5%
Réécriture complète de l'app de budget (ex-PHP procédural) : - Laravel 11 + Inertia/Vue 3 + Tailwind, dockerisé - Auth sécurisée (bascule MD5->bcrypt), Policies - Comptes, opérations (ventilation/virement/différé CB), pointage - Récurrences automatiques (scheduler), budgets/enveloppes, statistiques - Module véhicules (consommation), PWA installable - Import des données legacy + réconciliation des soldes Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| app | ||
| bootstrap | ||
| config | ||
| database | ||
| docker | ||
| docs | ||
| public | ||
| resources | ||
| routes | ||
| storage | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| artisan | ||
| composer.json | ||
| composer.lock | ||
| DEPLOY.md | ||
| docker-compose.yml | ||
| package-lock.json | ||
| package.json | ||
| phpunit.xml | ||
| postcss.config.js | ||
| README.md | ||
| tailwind.config.js | ||
| vite.config.js | ||
NP-Comptes — Next Gen
Réécriture moderne et sécurisée de l'application de gestion de budget personnel.
Stack : Laravel 11 (PHP 8.3) · Inertia + Vue 3 · Tailwind CSS · MariaDB 11 · Docker.
🚀 Démarrage (Docker uniquement requis)
Aucune installation de PHP/Composer/Node sur la machine : tout vit dans les conteneurs.
cd nextgen
cp .env.example .env
docker compose up -d --build
Au premier lancement, le conteneur app :
- installe les dépendances Composer,
- crée le
.envet génèreAPP_KEY, - attend la base puis exécute les migrations.
Le conteneur vite installe les dépendances npm et lance le serveur d'assets.
Accès
| Service | URL |
|---|---|
| Application | http://localhost:8080 |
| Adminer (BDD) | http://localhost:8081 |
| Vite (dev/HMR) | http://localhost:5173 |
| MariaDB (hôte) | localhost:3307 |
Identifiants BDD par défaut (modifiables dans
.env) : basenpcomptes, usernpcomptes, mot de passesecret.
Assets (front) : en développement, le conteneur
vitesert les assets avec rechargement à chaud (le template détecte le mode dev automatiquement). Pour un déploiement stable, mettezAPP_ENV=productiondans.envet compilez les assets une fois :docker compose run --rm vite npm install && docker compose run --rm vite npm run build. Nginx servira alors les fichiers compilés et le conteneurvitedevient inutile.
Commandes utiles
# Données de référence (modes de paiement, carburants)
docker compose exec app php artisan db:seed
# Créer un premier utilisateur (mot de passe bcrypt) si vous n'importez pas l'ancienne base
docker compose exec app php artisan user:create ludwig --admin
# Tests
docker compose exec app php artisan test
# Console Laravel
docker compose exec app php artisan tinker
# Logs
docker compose logs -f app
📥 Import des données de l'ancienne base
L'ancienne base (no-panique) est partagée avec un serveur multimédia ; on
n'importe que le domaine budget, dans la base isolée npcomptes.
# 1. Créer une base legacy et y charger le dump (depuis le dossier nextgen/)
docker compose exec -T db mariadb -uroot -prootsecret -e "CREATE DATABASE IF NOT EXISTS npcomptes_legacy CHARACTER SET utf8mb4;"
docker compose exec -T db mariadb -uroot -prootsecret npcomptes_legacy < /chemin/vers/no-panique.sql
# 2. Renseigner LEGACY_DB_* dans .env (valeurs par défaut déjà prêtes)
# 3. S'assurer que le schéma cible est à jour
docker compose exec app php artisan migrate
# 4. Importer + réconcilier les soldes
docker compose exec app php artisan import:legacy
La commande recompose la ventilation, remappe les clés, et termine par une réconciliation : elle compare le solde total de chaque compte entre l'ancienne et la nouvelle base (tolérance 0,01 €) et échoue en cas d'écart.
🗂️ Structure
nextgen/
├── app/
│ ├── Http/Middleware/HandleInertiaRequests.php
│ ├── Models/ # Eloquent : Compte, Operation, Recurrence, Budget…
│ └── Providers/
├── config/ # Configuration Laravel
├── database/
│ ├── migrations/ # Schéma cible (normalisé)
│ └── seeders/ # Données de référence
├── docker/ # Dockerfiles + conf nginx
├── resources/
│ ├── js/Pages/ # Pages Vue (Inertia)
│ └── views/app.blade.php # Template racine
├── routes/web.php
└── docker-compose.yml
🔐 Sécurité — corrections par rapport à l'ancienne version
| Ancien problème | Nouvelle approche |
|---|---|
| Injection SQL (concaténation directe) | Eloquent / requêtes paramétrées |
| Mots de passe MD5 | bcrypt (récupération du pass_hash existant) |
| Mot de passe en clair dans un cookie | Sessions httpOnly + « remember token » signé |
| Identifiants BDD en dur dans le code | Variables d'environnement (.env) |
| Pas de contrôle d'accès (IDOR) | Policies par propriétaire de compte (Phase 1) |
| Pas de CSRF | Protection CSRF native |
| XSS (echo non échappé) | Échappement automatique Vue/Blade |
id = max(id)+1 |
AUTO_INCREMENT + transactions |
🛣️ Feuille de route
- Phase 0 — Fondations : Docker, squelette Laravel + Inertia/Vue, schéma cible (migrations), modèles Eloquent.
- Phase 1 — Authentification sécurisée (bascule MD5→bcrypt, rate-limiting) + autorisation par Policy.
- Phase 2 — Import des données depuis l'ancienne base + réconciliation des soldes.
- Phase 3 — Cœur métier : synthèse, saisie d'opérations (ventilation, virement, différé), pointage.
- Phase 4 — Récurrences (scheduler) : matérialisation auto des occurrences échues + désactivation des récurrences périmées.
- Phase 5 — Budgets, enveloppes & statistiques (camembert ApexCharts + détail par catégorie).
- Phase 6 — Édition d'opération, module véhicules (consommation plein-à-plein), PWA installable (manifest + icône).
Validé sur données réelles (dump importé) : réconciliation des soldes 28/28 comptes au centime, 39 tests verts, build front OK, consommations véhicules cohérentes. PWA = manifest + icône + métas iOS (installable / plein écran) ; le service worker offline pourra être ajouté ultérieurement.
Voir docs/MAPPING.md pour la correspondance ancien ↔ nouveau schéma.