Le shell admin (layout.php) exposait, conditionnes par permission, 4 liens de
navigation vers des routes inexistantes : /admin/menus, /admin/orders,
/admin/users, /admin/roles. Un clic renvoyait un 404 JSON brut (le seed admin
detient les 4 permissions, donc l'admin voyait les 4 liens morts).
Liens retires tant que leur page n'existe pas ; les sections Operations et
Administration disparaissent (leurs seuls items etaient morts), Menus quitte la
section Catalogue. Un commentaire documente comment/quand les reactiver (avec
leur route, P3 suite / P4). Dashboard / Categories / Produits (pages reelles)
restent, la demo RBAC reste portee par le gating de Produits.
Test : DashboardControllerTest assertait le rendu du lien /admin/users (mort) ;
mis a jour en assertStringNotContainsString. Suite verte (188, 13 DB skip).
payment.html - card / cash choice with inline SVG icons; both simulate payment (MVP)
confirmation.html - order number WK-<base36 timestamp>, cart cleared on load,
new-order button resets flow to index.html
Displays line items with - / + controls and delete button.
TVA 10% (restauration FR 2024, simplified).
TODO in P3: verify rate with accountant (sur-place vs a-emporter + product type).
Abandon button clears cart and returns to categories.
Normalizes produits.json:
- Prix converted from float EUR to integer centimes
- Image paths rewritten to match actual filesystem (lowercase, dashes)
- Added type field ('produit'|'menu') on each entry
- Added slug field to categories.json
In P4, swap fetch URLs in assets/js/data.js (marked with TODO comments).
- Welcome screen (index.html): background photo, white card, Sur Place / A Emporter
choice buttons with verified school illustrations; pure HTML <a> navigation, no JS
- Category grid (categories.html): 9 categories from categories.json rendered as 3-col
card grid with verified category images; stub links to products.html?category=<id>
- Design system CSS (assets/css/style.css): CSS custom properties for brand yellow
#FFC72C, spacing scale, border-radius, shadows extracted from maquette PDF;
BEM-style component classes; WCAG AA focus-visible rings; kiosk portrait 1080px primary
Three changes bundled because the stubs surfaced two pre-existing infra bugs
that had never been hit (the smoke test only exercised PHP via 'docker exec',
not via the full Apache->PHP-FPM FastCGI path).
- src/public/borne/index.html : minimal HTML stub for the kiosk vhost
(200 OK with the imported logo)
- src/public/admin/index.php : minimal PHP stub that proves the full
FastCGI chain works end-to-end (renders PHP_VERSION + current timestamp)
- docker/apache/vhost.conf : add 'DirectoryIndex index.php index.html' on
the admin vhost. Without it, hitting / returned 403 because the default
Apache DirectoryIndex is index.html only, and the existing RewriteRule
did not apply to the directory request (\!-d cond was false).
- docker/php-fpm/www.conf : comment out 'listen.allowed_clients = any'.
PHP-FPM 8.3 rejects 'any' with 'Wrong IP address' and ends up dropping
every connection from Apache. With the directive absent, all connections
are accepted, which is acceptable in our isolated Docker network.
- docs/merise/_sources/ : raw JSON sources (categories + produits)
preserved unchanged for jury traceability, plus provenance note
documenting 7 typos in image refs and gaps to address at the MCD
phase (no FK, float prices, missing menu composition, etc.)
- docs/design/ : Figma maquette PDF (renamed without accent) plus
README pointing to the live Figma URL
- src/public/borne/assets/images/ : 71 visual assets (53 produits +
9 categories + 9 UI) normalized to kebab-case lowercase to avoid
the case-sensitive Linux pitfall in Docker production
The 'wacdo' naming from the school brief is preserved only inside
docs/merise/_sources/ for traceability. The rest of the project keeps
the canonical 'Wakdo' naming.
TODO P1: rename cheesecake-choconuts-m&m-s.png (the & breaks URLs
without percent-encoding); will be fixed during seed normalization.