# BONEAU — Plateforme e-commerce filtration d'eau Plateforme PHP haut de gamme pour la vente de systèmes de filtration d'eau. Conçue pour Easy Hébergement (mutualisé FR multidomaine), avec gestion des stocks, suivi de livraison transporteurs, paiement Stripe + virement, traduction automatique multilingue (OpenAI) et un front Motion Design fluide avec WebGL. --- ## Stack | Couche | Technologie | |--------------|-------------| | Langage | PHP 8.1+ vanille, MVC maison, PSR-4 | | BDD | MySQL 5.7+ / MariaDB 10.3+ | | Front CSS | Tailwind CDN + design system aqua maison | | Front JS | GSAP + ScrollTrigger, Lenis (smooth scroll), Three.js (WebGL shaders) | | Paiement | Stripe + virement manuel | | Livraison | bpost, DPD, UPS (abstraction `CarrierInterface`) | | Traduction | OpenAI auto-translate, cache JSON, 20 langues | | Composer | Stripe SDK, PHPMailer, Dompdf, vlucas/phpdotenv | --- ## Arborescence ``` PHP BONEAU/ ├── app/ │ ├── Controllers/ Controllers HTTP (Home, Product, Cart, Checkout, Account, Webhook, …) │ ├── Core/ Framework maison : Router, Database, View, Session, I18n, Csrf, … │ ├── Helpers/ Fonctions globales (t, e, asset, csrf_field, format_price, …) │ ├── Models/ Active-record lite (Product, Category, …) │ └── Services/ │ └── Shipping/ CarrierInterface + implémentations bpost/DPD/UPS + Factory ├── config/ │ └── routes.php Définition de toutes les routes publiques ├── database/ │ ├── schema.sql Schéma complet (23 tables : users, products, orders, shipments, …) │ └── seeds.sql Catégories, produits démo, FAQ, zones de livraison ├── public/ ← document root web │ ├── index.php Front controller │ ├── .htaccess URL rewriting + sécurité │ └── assets/ CSS, JS, images, uploads ├── storage/ │ ├── logs/, cache/, sessions/, invoices/ │ └── translations/ Cache JSON des traductions par langue ├── views/ │ ├── layouts/ public.php │ ├── partials/ header.php, footer.php, water-icon.php │ ├── home/ index.php, technology.php, why-filter.php, tracking.php │ ├── products/ index.php, category.php, show.php │ ├── cart/, checkout/, account/, contact/, pages/, errors/ ├── tasks/ │ ├── todo.md Plan détaillé en 9 phases │ └── lessons.md Apprentissages projet ├── composer.json ├── .env.example └── .htaccess Redirige vers /public si Easy Hébergement ne permet pas de changer le document root ``` --- ## Installation locale (dev) ```bash # 1. Cloner & installer les dépendances composer install # 2. Configurer l'environnement cp .env.example .env # Renseigner DB_*, OPENAI_API_KEY, STRIPE_*, MAIL_*, etc. # 3. Créer la base et importer le schéma mysql -u root -p < database/schema.sql mysql -u root -p boneau_db < database/seeds.sql # 4. Lancer le serveur dev PHP php -S localhost:8000 -t public ``` → Aller sur http://localhost:8000 --- ## Déploiement Easy Hébergement (3 minutes, zéro ligne de commande) 1. **Composer en local** (sur ton Mac) : `composer install --no-dev --optimize-autoloader` → génère `vendor/`. 2. **Upload FTP** de TOUT le projet (incluant `vendor/`) dans le dossier de ton domaine. 3. **Créer la BDD MySQL** depuis le panneau Easy Hébergement → noter le host, le nom de BDD, l'utilisateur et le mot de passe. 4. **Ouvrir l'installeur graphique** : `https://tondomaine.fr/install.php` - Étape 1 : vérification automatique des pré-requis PHP - Étape 2 : saisie des identifiants BDD avec test de connexion immédiat → **génère `.env` tout seul** - Étape 3 : import du schéma SQL + données de démo en un clic - Étape 4 : configuration optionnelle (Stripe, OpenAI, SMTP, IBAN, infos société) - Étape 5 : création de ton compte super-admin (email + mot de passe) - Étape 6 : bouton pour auto-supprimer `install.php` 5. **C'est fini.** Va sur `/admin` et vends. Si Easy Hébergement permet de changer le document root, pointe-le sur `public/`. Sinon le `.htaccess` racine s'en charge automatiquement. **Webhooks à configurer après installation** : - Stripe Dashboard → Developers → Webhooks → URL `https://tondomaine.fr/webhook/stripe` → coller le `whsec_...` dans `.env` - Transporteurs (quand tu auras les comptes pro) : `https://tondomaine.fr/webhook/carrier/{bpost|dpd|ups}` ### Accès admin - URL : `https://votredomaine.fr/admin` - Par défaut : `admin@boneau.fr` / `admin123` → **changez-le via install.php ou via /compte/parametres après connexion**. --- ## Système de traduction Le site est multilingue (20 langues : fr, en, de, es, it, pt, nl, pl, sv, da, fi, el, cs, ro, bg, hu, ru, ar, zh, ja). - **Détection** : URL (`/en/...`), cookie, en-tête `Accept-Language`, fallback `DEFAULT_LOCALE`. - **Stockage** : `storage/translations/{locale}.json`, écrit automatiquement. - **Fallback OpenAI** : si une chaîne manque dans la langue cible, OpenAI traduit à la volée et met en cache. - **Switcher** : drapeau en haut à droite, route `/langue/{locale}`. - **Usage code** : `t('Ma chaîne')` ou `__('Ma chaîne')` partout dans les vues. > ⚠️ Sans clé OpenAI, le site fonctionne en français uniquement (et affiche la version FR dans les autres langues). --- ## Architecture e-commerce ### Stocks - Stock numérique sur `products.stock` (et `product_variants.stock` pour variantes). - Mouvements loggés dans `stock_movements` (audit complet). - Décrément automatique à la confirmation de paiement. - Seuil d'alerte configurable par produit. ### Commandes - Numéro auto `BON-YYYY-NNNN`. - Snapshot complet des adresses au moment de la commande (pas de référence cassée si l'adresse client change). - États : `pending_payment → paid → preparing → shipped → delivered`. ### Paiement - **Stripe Checkout** : redirection sécurisée, webhook pour confirmer. - **Virement** : commande passe en `pending_payment` + email avec IBAN, validation manuelle admin. ### Livraison - Tarifs dynamiques selon zone + poids (`shipping_zones`, `shipping_rates`). - Abstraction `CarrierInterface` : on ajoute un nouveau transporteur sans toucher au code métier. - Stubs prêts pour bpost, DPD, UPS (à compléter avec les vraies APIs). - Suivi temps réel via `shipments` + `shipment_events` (mis à jour par webhooks ou polling). --- ## Sécurité - PDO requêtes préparées partout. - CSRF token sur tous les POST (`csrf_field()`). - Sessions sécurisées (`HttpOnly`, `Secure`, `SameSite=Lax`), régénération à la connexion. - Headers : X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy. - Mots de passe : `password_hash()` bcrypt cost 12. - Validation côté serveur systématique. - `.env` hors document root, logs en `storage/logs/`. --- ## État d'avancement (voir `tasks/todo.md`) - ✅ **Phase 0** — Fondation (architecture, schéma BDD, routing, layout, design aqua, WebGL hero) - ✅ **Phase 1** — Front public (accueil, technologie, pourquoi filtrer, boutique, fiche produit, catégorie) - ✅ **Phase 1.5** — i18n multilingue avec OpenAI (20 langues) - ✅ **Phase 2** — Tunnel de commande complet (adresse → livraison → paiement) - ✅ **Phase 3** — Stripe Checkout + webhook + virement bancaire avec emails IBAN - ✅ **Phase 4** — Stocks : décrément auto au paiement, audit dans stock_movements, alertes - ✅ **Phase 5** — Abstraction `CarrierInterface` + suivi shipments + webhooks transporteurs (stubs à brancher sur APIs réelles) - ✅ **Phase 6** — Admin minimal complet (dashboard CA, valider virement, expédier + tracking, stocks) - ✅ **Phase 7** — Espace client (dashboard, commandes, suivi temps réel, adresses, paramètres) - ✅ **Phase Bonus** — Service Mailer (PHPMailer + fallback mail()), génération factures PDF (Dompdf), script `install.php` guidé - ⏳ **Phase 8** — Hardening avancé (cache pages, sitemap XML, schéma.org, bandeau RGPD) - ⏳ **Phase 9** — Tests automatisés (actuellement testable manuellement via parcours utilisateur) - ⏳ **À brancher** : vraies APIs bpost/DPD/UPS (les stubs renvoient des données fictives — il faut compléter avec vos credentials et endpoints)