No description
Find a file
Corentin JOGUET 2fe192452d
All checks were successful
CI / secret-scan (push) Successful in 19s
CI / php-lint (push) Successful in 51s
CI / static-tests (push) Successful in 1m35s
CI / js-tests (push) Successful in 41s
feat(back-office): page Stock en tableau de bord (alertes + reappro en avant) (#105)
2026-06-24 14:44:25 +02:00
.claude docs: initial project context and methodology scaffold 2026-04-24 08:17:37 +00:00
.forgejo/workflows feat(devops): CD push-based vers Vision (prod) + preuve de version (#94) 2026-06-23 11:32:57 +02:00
.gitea P1 conception: security-by-design layer (Merise 21 entities, Forgejo CI/CD, hardening) (#3) 2026-06-15 12:16:11 +02:00
.githooks chore(devops): hooks Git versionnes + scripts deploy et restore (Cr 4.f.2 / 7.b.2) (#75) 2026-06-22 08:44:45 +02:00
db feat(borne): menu Maxi agrandit la boisson en 50cl + transport du format (#98) 2026-06-24 11:04:20 +02:00
docker chore(devops): hooks Git versionnes + scripts deploy et restore (Cr 4.f.2 / 7.b.2) (#75) 2026-06-22 08:44:45 +02:00
docs chore(borne): bascule allergenes sur /api/allergens + menage donnees/docs (#103) 2026-06-24 12:37:54 +02:00
scripts feat(devops): CD push-based vers Vision (prod) + preuve de version (#94) 2026-06-23 11:32:57 +02:00
src feat(back-office): page Stock en tableau de bord (alertes + reappro en avant) (#105) 2026-06-24 14:44:25 +02:00
tests feat(back-office): page Stock en tableau de bord (alertes + reappro en avant) (#105) 2026-06-24 14:44:25 +02:00
.dockerignore chore(docker): add env template, dockerignore and Makefile scaffold 2026-04-24 09:50:59 +00:00
.env.example feat(auth): envoi reel de l'email de reset via relais SMTP (Brevo) (#96) 2026-06-23 15:34:27 +02:00
.env.prod.example feat(auth): envoi reel de l'email de reset via relais SMTP (Brevo) (#96) 2026-06-23 15:34:27 +02:00
.gitignore feat(devops): CD push-based vers Vision (prod) + preuve de version (#94) 2026-06-23 11:32:57 +02:00
.gitleaks.toml ci: add Forgejo Actions pipeline + gitleaks secret-scan (#2) 2026-06-15 12:01:31 +02:00
docker-compose.prod.yml.example fix(devops): passer les variables SMTP/MAIL au conteneur wakdo-app (#97) 2026-06-23 16:11:31 +02:00
docker-compose.yml fix(devops): passer les variables SMTP/MAIL au conteneur wakdo-app (#97) 2026-06-23 16:11:31 +02:00
package-lock.json test(e2e): parcours borne Playwright (conteneur, stack jetable) (#45) 2026-06-17 16:38:33 +02:00
package.json test(e2e): parcours borne Playwright (conteneur, stack jetable) (#45) 2026-06-17 16:38:33 +02:00
phpstan.neon feat(core): from-scratch PHP MVC skeleton (autoloader/config/PDO/router/front controller) + PHPUnit/PHPStan + composer-less CI 2026-06-15 14:13:49 +00:00
phpunit.xml feat: authentification back-office P2 (login/logout/reset, throttle, audit) (#11) 2026-06-15 20:18:59 +02:00
playwright.config.js test(e2e): parcours borne Playwright (conteneur, stack jetable) (#45) 2026-06-17 16:38:33 +02:00
README.md fix(devops): deploy.sh build depuis Dockerfiles + pull main Forgejo (#82) 2026-06-22 11:05:39 +02:00
SECURITY.md P1 conception: security-by-design layer (Merise 21 entities, Forgejo CI/CD, hardening) (#3) 2026-06-15 12:16:11 +02:00

Wakdo

Borne de commande pour restauration rapide. Projet de certification RNCP 37805 (Titre Developpeur Web, B2, option DevOps).

Statut : en developpement actif. Soutenance prevue septembre 2026.

Sites exposes cibles :

  • https://corentin-wakdo.stark.a3n.fr — Borne client (Bloc 1 Front)
  • https://corentin-wakdo-admin.stark.a3n.fr — Back-office + API REST (Bloc 2)

Apercu

Wakdo simule une borne de commande tactile de type fast-food (pastiche McDonald's), avec back-office administrateur, workflow de preparation en cuisine et API REST interne consommee par la borne.

Trois canaux de prise de commande :

  • kiosk — borne tactile autonome (le client compose seul)
  • counter — comptoir (un equipier saisit pour le client au guichet)
  • drive — drive-thru (equipier saisit via intercom + casque)

Statuts commande (machine a 4 etats) : pending_payment -> paid -> delivered, plus cancelled (atteignable depuis pending_payment ou paid). La saisie du numero tient lieu de paiement : la creation passe atomiquement de pending_payment a paid. La cuisine voit la file des commandes paid en lecture seule ; la remise est un geste unique paid -> delivered.

Scope metier complet, regles, horaires de service et fenetre de maintenance : voir docs/PROJECT_CONTEXT.md.


Methodologie et outils

Ce projet a ete developpe avec l'appui de BYAN (Builder of YAN), un systeme d'agents IA custom applicant la methodologie Merise Agile enrichie de 64 Mantras (voir .claude/CLAUDE.md et .claude/rules/).

Realisation avec l'assistance d'outils d'IA generative (Claude Code, BYAN), conformement a l'autorisation du centre de formation Acadenice.

  • Les decisions d'architecture, de scope et de design sont prises par l'auteur.
  • Le code, les tests et la documentation sont co-rediges et valides par l'auteur avant commit.
  • La modelisation Merise est formalisee par l'IA a partir du dictionnaire de donnees et des user stories ; l'arbitrage et la validation sont de l'auteur.
  • Tracabilite du projet : docs/journal/ (retrospectives de session et de feature) et docs/PROJECT_CONTEXT.md section 17 (scope complet de l'usage IA).
  • Pas de trailer Co-Authored-By appose sur les commits — voir section 17.7 du PROJECT_CONTEXT.md pour la justification.

Stack technique

Couche Techno Version
Langage back PHP 8.3
Framework back Aucun (from scratch)
Autoloader PSR-4 manuel via spl_autoload_register
Base de donnees MariaDB 11.4
Pilote BDD PDO (prepared statements uniquement) natif PHP
Serveur web Apache httpd 2.4 Alpine
Serveur app PHP-FPM 8.3 Alpine
Reverse proxy Traefik existant sur l'hote (reseau admin_proxy)
Tests PHPUnit 11.x (.phar autonome, sans Composer)
Front HTML5 + CSS3 + JS ES6+ vanilla
Conteneurisation Docker + docker compose v2
Orchestration locale docker compose v2 (service one-shot wakdo-migrate)
CI/CD Forgejo Actions
Versioning Git + Forgejo (git.acadenice.com, miroir GitHub) Conventional Commits

Detail et justifications : docs/PROJECT_CONTEXT.md section 6.


Architecture

      corentin-wakdo.stark.a3n.fr         corentin-wakdo-admin.stark.a3n.fr
                 |                                      |
                 +--------------+-----------------------+
                                |
                                v
                   Traefik  (reseau admin_proxy)
                                |
                                v
                        wakdo-web  (Apache httpd)
                                | FastCGI :9000
                                v
                        wakdo-app  (PHP-FPM 8.3)
                                | PDO
                                v
                        wakdo-db   (MariaDB 11.4)

                  wakdo-cron       (backup BDD + purge audit-log + purge throttle)

Reseaux, volumes, services et decoupage reseau interne / reseau proxy : voir docs/PROJECT_CONTEXT.md section 5.


Quickstart (local)

git clone https://git.acadenice.com/AcadeNice/corentin_wakdo.git
cd corentin_wakdo
cp .env.example .env
docker compose up -d

Une seule commande lance la stack complete (Cr 7.c.4) : le service one-shot wakdo-migrate applique les migrations puis le seed (idempotents, tables de suivi schema_migrations / seeds_applied) avant que l'app ne serve. Ensuite :

*.localhost resout vers 127.0.0.1 nativement ; changer le port via HTTP_PORT dans .env. Le .env.example fonctionne tel quel en local (valeurs dev).

Docker non installe ? Voir https://docs.docker.com/engine/install/

Deploiement prod (derriere un reverse proxy Traefik)

Le repo ne ship que docker-compose.yml (standalone). En production derriere un reverse proxy, chaque hote maintient son propre docker-compose.prod.yml (gitignore, hors repo, comme .env) : meme stack, mais exposee via Traefik (reseau externe + labels TLS) au lieu d'un port hote.

docker compose -f docker-compose.prod.yml up -d

Avec un .env adapte : APP_ENV=prod, APP_DEBUG=false, mots de passe forts, APP_HOST_* / APP_URL_* / CORS_ALLOWED_ORIGIN en vrais FQDN HTTPS, et REVERSE_PROXY_NETWORK = reseau Docker du Traefik de l'hote (doit exister avant le up).

Deploiement detaille : section Deploiement plus bas et scripts/deploy.sh.


Structure du projet

.
|-- .claude/                     # Methodologie BYAN (visible jury : CLAUDE.md + rules/)
|-- .forgejo/workflows/          # CI Forgejo Actions (ci.yml : secret-scan, php-lint, static-tests, js-tests)
|-- .githooks/                   # pre-commit (refus main/dev + php -l) + commit-msg (Conventional Commits)
|-- docker/                      # Dockerfiles customs par service
|   |-- apache/                  # httpd + vhosts kiosk / admin
|   |-- php-fpm/                 # PHP 8.3-fpm + php.ini durci
|   `-- cron/                    # dcron + scripts (backup, restore, purges)
|-- db/
|   |-- init/                    # init BDD (scope du user applicatif, moindre privilege)
|   |-- migrations/              # DDL MariaDB versionnes (0001_init_schema, 0002_pin_throttle, ...)
|   |-- seeds/                   # donnees de reference + demo (idempotents)
|   `-- *.sh                     # runners migrate / seed
|-- docs/
|   |-- PROJECT_CONTEXT.md       # source de verite projet (scope, stack, mapping RNCP)
|   |-- ARCHITECTURE.md          # vue technique (deploiement, stack, securite)
|   |-- merise/                  # dictionnaire, MCD, MCT, MLD, MLT (+ diagrammes)
|   |-- uml/                     # use-cases, sequences, machine a etats
|   `-- adr/ api/ domaines/ design/ journal/ _ref/
|-- scripts/                     # deploy, install-hooks, forgejo-* (branch-protection, pr-automerge)
|-- src/
|   |-- app/                     # namespace App\ : Core, Controllers, Auth, Catalogue, Order, Views
|   `-- public/                  # DocumentRoots Apache : borne/ (kiosk) + admin/ (back-office + API)
|-- tests/
|   |-- Unit/ Integration/       # PHPUnit (.phar autonome, sans Composer ; integration sur vraie MariaDB)
|   |-- js/                      # node:test + jsdom (front borne)
|   |-- e2e/                     # Playwright (parcours borne + admin, lance a la main)
|   `-- Support/                 # doubles de test (Fake* / Spy*)
|-- .env.example  .gitleaks.toml  phpstan.neon  phpunit.xml
|-- docker-compose.yml           # standalone local ; prod = docker-compose.prod.yml (gitignore, par hote)
`-- README.md

Developpement

Conventions

  • Commits : Conventional Commits en anglais (feat, fix, docs, refactor, test, chore, ci, db, perf, style). Format : type(scope): description. Voir docs/PROJECT_CONTEXT.md section 9.

  • Branches : feat/*, fix/*, refactor/*, docs/*, ci/*, db/*, chore/*, test/* depuis dev. Merge vers dev par PR squashee. Periodiquement dev -> main par PR avec tag semver.

  • main et dev sont proteges cote Forgejo (PR requise, force push bloque, checks requis : secret-scan / php-lint / static-tests).

  • Pas d'emoji dans le code, les commits ou les specs techniques (Mantra IA-23).

  • Hooks Git : scripts/install-hooks.sh active pre-commit (refus de commit direct sur main/dev, php -l des fichiers indexes) et commit-msg (format Conventional Commits, refus emoji).

  • Verification locale : voir la section Tests ci-dessous (PHPUnit + PHPStan via le conteneur applicatif, tests JS via node, E2E Playwright).


Tests

Trois niveaux, sans dependance Composer cote PHP (priorite Unit > Integration > E2E).

  • PHP (PHPUnit .phar) — unit + integration sur vraie MariaDB, via le conteneur applicatif :

    docker run --rm -v "$PWD":/app -w /app wakdo-wakdo-app php phpunit.phar -c phpunit.xml
    docker run --rm -v "$PWD":/app -w /app wakdo-wakdo-app php -d memory_limit=-1 phpstan.phar analyse
    
  • JS (node:test + jsdom) — modules du front borne : npm run test:js

  • E2E (Playwright) — parcours borne + admin, lances a la main contre une stack jetable : tests/e2e/run.sh

La CI Forgejo execute secret-scan, php-lint, static-tests (PHPStan niveau 6 + PHPUnit avec service MariaDB) et js-tests sur chaque PR.


Deploiement

CI Forgejo Actions sur PR vers dev/main (secret-scan gitleaks, php-lint, static-tests PHPStan + PHPUnit, js-tests), avec auto-merge sur CI verte. Deploiement a declenchement humain via scripts/deploy.sh (recupere main depuis Forgejo puis docker compose build --pull && up -d ; les images sont buildees localement depuis les Dockerfiles, le one-shot wakdo-migrate applique migrations + seed). L'automatisation visee est pull-based (un job cron cote hote detectant un nouveau main), a armer ensuite. Voir docs/PROJECT_CONTEXT.md section 7 Bloc 5.


Documentation

Document Role
docs/PROJECT_CONTEXT.md Source de verite projet (17 sections : scope, stack, architecture, mapping critere RNCP, planning, risques, conventions)
docs/journal/ Retrospectives par session et par feature (preparation de l'oral RNCP)
docs/merise/ Modelisation Merise : dictionnaire, MCD, MCT, MLD, MLT (+ diagrammes)
docs/ARCHITECTURE.md / docs/adr/ Vue technique + decisions d'architecture (ADR)
.claude/CLAUDE.md Constitution du projet pour les agents Claude Code
.claude/rules/ Protocoles appliques : fact-check, merise-agile, elo-trust, hermes-dispatcher, byan-api, byan-agents

Licence

Projet pedagogique dans le cadre de la certification RNCP 37805. Usage et reproduction reserves a l'evaluation et a la demonstration, sans cession de droits commerciaux.