No description
  • PHP 76.4%
  • Vue 20%
  • JavaScript 1.4%
  • Shell 1%
  • Blade 0.6%
  • Other 0.5%
Find a file
Ludwig Van Den Berghe 22d098d3d8 NP-Comptes next-gen : application Laravel/Vue (phases 0-6)
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>
2026-05-31 17:56:09 +02:00
app NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
bootstrap NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
config NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
database NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
docker NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
docs NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
public NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
resources NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
routes NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
storage NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
tests NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
.dockerignore NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
.env.example NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
.gitattributes NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
.gitignore NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
artisan NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
composer.json NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
composer.lock NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
DEPLOY.md NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
docker-compose.yml NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
package-lock.json NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
package.json NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
phpunit.xml NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
postcss.config.js NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
README.md NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
tailwind.config.js NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00
vite.config.js NP-Comptes next-gen : application Laravel/Vue (phases 0-6) 2026-05-31 17:56:09 +02:00

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 :

  1. installe les dépendances Composer,
  2. crée le .env et génère APP_KEY,
  3. 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) : base npcomptes, user npcomptes, mot de passe secret.

Assets (front) : en développement, le conteneur vite sert les assets avec rechargement à chaud (le template détecte le mode dev automatiquement). Pour un déploiement stable, mettez APP_ENV=production dans .env et 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 conteneur vite devient 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.