Voici le **fichier de continuité** complet pour Sabou Cash. Copiez-collez son contenu dans un fichier `.txt` ou `.md` que vous garderez.
---
```text
================================================================
SABOU CASH — FICHIER DE CONTINUITÉ
================================================================
Date de création : 2026-10-05
Projet : Boutique en ligne de savons au Sénégal
Domaine (prévu) : saboucash.com
Hébergement : cPanel (siti7690)
================================================================
## 🎯 VISION DU PROJET
**Sabou Cash** = boutique en ligne de savons au Sénégal.
- Nom : **Sabou Cash** ("Sabou" = savon en wolof)
- Modèle : **Achat-revente** (achat en gros, revente au détail)
- Cible : **Particuliers + Professionnels (B2B)**
- Marché : Sénégal (Dakar en priorité)
- Objectif : Devenir la référence du savon au Sénégal
================================================================
## 🏗️ MODÈLE ÉCONOMIQUE
### Type
Achat-revente pur (Modèle A)
### Chaîne
Fournisseur (grossiste/artisan/importateur)
↓
Nous (Sabou Cash - stock)
↓
Client (particulier / salon / hôtel)
### Cibles
**B2C — Particuliers**
- Panier moyen : 1 500 - 3 000 F
- Fréquence : mensuelle (récurrente)
- Volume : 70 % du CA
- Canal : Site + WhatsApp + Instagram
**B2B — Professionnels**
- Clients : salons de coiffure, hôtels, restaurants, spas, entreprises
- Panier moyen : 30 000 - 200 000 F
- Fréquence : mensuelle/trimestrielle
- Volume : 30 % du CA mais 50 % de la marge
- Canal : Téléphone + WhatsApp Business + visite directe
================================================================
## 🗄️ BASE DE DONNÉES — ÉTAT ACTUEL
### Informations
- Base : **siti7690_sabou_cash_db**
- Hôte : localhost
- Utilisateur : siti7690_sabou (à confirmer)
- Charset : utf8mb4 / utf8mb4_unicode_ci
- Moteur : InnoDB
### ✅ 15 tables créées
```
1. users - clients (particuliers + pros)
2. categories - catégories de savons
3. brands - marques (Dove, Nivea, artisanales...)
4. products - produits (savons)
5. product_images - images produits
6. product_variants - variantes (parfums, poids)
7. price_tiers - tarifs dégressifs B2B
8. addresses - adresses de livraison
9. cart - paniers
10. orders - commandes
11. order_items - lignes de commande
12. payments - paiements (PayTech)
13. quotes - devis B2B
14. admin_users - administrateurs
15. settings - paramètres boutique
```
### Tables importantes (schéma résumé)
**users** : id, email, phone_number, password, full_name,
customer_type (individual/professional), company_name,
company_registration, company_tax_id, is_verified, created_at
**products** : id, category_id, brand_id, name, slug,
short_description, long_description, price, compare_price,
cost_price, pro_price, pro_min_quantity, is_pro_only,
stock_quantity, sku, volume_liters, unit, is_active,
is_featured, view_count, created_at, updated_at
**orders** : id, reference (CMD-XXXX), user_id, customer_type,
status (pending_payment/paid/preparing/shipped/delivered/cancelled/refunded),
subtotal, shipping_cost, total, payment_method, paid_at,
shipping_address_json, created_at
**price_tiers** : id, product_id (NULL=global), customer_type,
min_quantity, discount_percent, fixed_price, min_order_amount
**quotes** : id, reference (DEV-XXXX), user_id, status
(pending/processing/sent/accepted/rejected/expired),
items_json, subtotal, discount, total, valid_until
================================================================
## 📁 STRUCTURE DES DOSSIERS (à créer)
```
public_html/
├── config/
│ └── db.php ← ✅ CRÉÉ (code fourni)
├── includes/
│ ├── header.php ← ⏳ À créer
│ └── footer.php ← ⏳ À créer
├── assets/
│ ├── css/
│ │ └── style.css ← ⏳ À créer
│ ├── js/
│ │ └── main.js ← ⏳ À créer
│ └── img/
│ └── (logo, hero, etc.)
├── uploads/
│ ├── products/ ← images produits
│ └── categories/ ← images catégories
├── actions/ ← actions serveur
│ ├── ajouter_panier.php
│ ├── modifier_panier.php
│ ├── retirer_panier.php
│ ├── valider_commande.php
│ ├── payer_paytech.php
│ └── paytech_ipn.php
├── admin/ ← back-office
│ ├── _auth.php
│ ├── _header.php
│ ├── _footer.php
│ ├── index.php
│ ├── login.php
│ ├── produits.php
│ ├── categories.php
│ ├── marques.php
│ ├── commandes.php
│ ├── clients.php
│ ├── devis.php
│ └── parametres.php
├── index.php ← accueil boutique
├── catalogue.php ← liste produits
├── produit.php ← fiche produit
├── panier.php ← panier
├── commande.php ← tunnel commande
├── confirmation.php ← confirmation
├── login.php ← connexion client
├── register.php ← inscription client
├── logout.php
├── mon-compte.php ← espace client
├── contact.php
├── cgv.php
├── mentions-legales.php
├── politique-confidentialite.php
└── .htaccess
```
================================================================
## 🔧 CONFIGURATION — config/db.php
### ✅ Fichier CRÉÉ (code fourni dans le chat)
**Contenu principal :**
- Connexion MySQLi à siti7690_sabou_cash_db
- Fuseau horaire Africa/Dakar + SET time_zone = '+00:00'
- Session sécurisée
- Helpers : db_one(), db_all(), db_exec()
- Helpers HTML : e(), money(), redirect()
- CSRF : csrf_token(), csrf_field(), csrf_check()
- Auth : check_login(), current_user(), require_login()
- Boutique : cart_count(), slugify(), generate_reference()
### ⚠️ À PERSONNALISER dans config/db.php
```php
define('DB_USER', 'siti7690_sabou'); // ← user MySQL cPanel
define('DB_PASS', 'VOTRE_MOT_DE_PASSE'); // ← mot de passe MySQL
define('SITE_URL', 'https://saboucash.com'); // ← URL réelle
define('SITE_EMAIL', 'contact@saboucash.com');
define('SITE_PHONE', '+221 XX XXX XX XX');
```
### Constantes importantes
```php
SITE_NAME = 'Sabou Cash'
SITE_URL = 'https://saboucash.com'
ENV = 'production' // ou 'development'
DB_NAME = 'siti7690_sabou_cash_db'
```
================================================================
## 🎨 CHARTE GRAPHIQUE
### Couleurs (reprises de l'ancien projet)
```css
--green: #08766b; (principal)
--green-dark: #065c53;
--green-light: #d9f2ee;
--bg: #f3f6f5; (fond)
--text: #18362e;
--muted: #6b7d78;
--white: #fff;
--border: #e2ebe8;
--red: #c0392b;
--amber: #b7791f;
--blue: #0369a1;
```
### Typographie
```
Police système : -apple-system, BlinkMacSystemFont,
'Segoe UI', Roboto, sans-serif
```
### Style
- Radius : 18px (cartes), 10px (boutons)
- Ombres douces
- Design responsive (mobile-first)
- Émojis dans les titres (🧼 🛒 ✨)
================================================================
## 📅 PLAN DE CONSTRUCTION (dans l'ordre)
### ✅ FAIT
1. ✅ Base de données créée (15 tables)
2. ✅ config/db.php créé (code fourni)
### ⏳ ÉTAPE SUIVANTE — À FAIRE
3. ⏳ Créer l'arborescence des dossiers
4. ⏳ includes/header.php
5. ⏳ includes/footer.php
6. ⏳ index.php (accueil boutique savon)
7. ⏳ catalogue.php (liste produits + filtres)
8. ⏳ produit.php (fiche produit)
9. ⏳ login.php + register.php
10. ⏳ panier.php + actions panier
11. ⏳ commande.php + confirmation.php
12. ⏳ Paiement PayTech (actions/payer_paytech.php + paytech_ipn.php)
13. ⏳ mon-compte.php
14. ⏳ admin/ (back-office)
15. ⏳ Pages légales (CGV, mentions, confidentialité)
16. ⏳ Contenu : 10-20 produits avec photos
### 🎯 ORDRE DE DÉMARRAGE APRÈS config/db.php
```
1. Créer les dossiers (config/, includes/, assets/, uploads/, actions/, admin/)
2. Tester la connexion (fichier test-db.php temporaire)
3. includes/header.php + includes/footer.php
4. index.php (accueil)
5. catalogue.php
6. produit.php
7. login.php + register.php
8. panier.php + actions
9. commande.php
10. Paiement PayTech
11. admin/
12. Contenu
```
================================================================
## 💳 PAIEMENT — RÉUTILISATION PAYTECH
### Ce qu'on garde de l'ancien projet Peinture-Cash
⚠️ IMPORTANT : on ne copie PAS l'ancien code, on le RÉÉCRIT proprement.
**PayTech — Configuration :**
- Endpoint : https://paytech.sn/api/payment/request-payment
- Headers : API_KEY + API_SECRET (à récupérer du compte PayTech)
- Payload minimal :
```php
[
'item_name' => 'Commande Sabou Cash',
'item_price' => $total,
'ref_command' => $reference,
'command_name' => 'Commande Sabou Cash #' . $ref,
'env' => 'prod', // ou 'test'
'currency' => 'XOF',
'success_url' => SITE_URL . '/confirmation.php?ref=' . $reference,
'cancel_url' => SITE_URL . '/commande.php?cancelled=1',
'ipn_url' => SITE_URL . '/actions/paytech_ipn.php',
]
```
- ⚠️ **NE PAS mettre** `custom_field` ni `target_payment` (refusés en prod)
**Références :**
- Commande : `CMD-XXXXXXXXXX`
- Paiement : `PAY-XXXXXXXXXX`
- Devis : `DEV-XXXXXXXXXX`
**IPN — PayTech appelle `paytech_ipn.php` :**
```
Reçoit POST
→ cherche payments.reference
→ si trouvé et pending
→ UPDATE payments SET status='success'
→ UPDATE orders SET status='paid', paid_at=NOW()
→ répond 'OK'
```
================================================================
## 🔐 SÉCURITÉ
### Règles à respecter
1. **Toujours** utiliser `declare(strict_types=1)`
2. **Toujours** utiliser `require_once __DIR__ . '/config/db.php'`
3. **Toujours** échapper avec `e()` avant affichage HTML
4. **Toujours** vérifier CSRF sur les formulaires POST
5. **Toujours** utiliser des requêtes préparées (`db_one`, `db_all`, `db_exec`)
6. **Jamais** de requête SQL directe avec `$conn->query()` dans les pages
7. **Jamais** de `echo $_GET['x']` ou `echo $_POST['x']` sans `e()`
8. **Jamais** de mot de passe en clair (utiliser `password_hash` / `password_verify`)
### Fichiers sensibles à protéger
Dans `.htaccess` racine :
```apache
Require all denied
```
================================================================
## 📞 COMMENT REPRENDRE SUR UN NOUVEAU CHAT
**Message d'ouverture suggéré :**
> Bonjour, je continue le projet Sabou Cash (boutique de savons).
> Voici le fichier de continuité : [coller le contenu]
>
> Ma question / tâche : [décrire]
**Fichiers à fournir selon la tâche :**
- Pour `includes/` → dire simplement « où on en est »
- Pour `index.php` → dire « génère index.php boutique savon »
- Pour un bug → fournir le fichier concerné + capture d'écran
**Commandes utiles cPanel :**
```bash
# Lister les fichiers
ls -la ~/public_html/
# Chercher un fichier
find ~/public_html/ -name "*.php" | grep -i produit
# Vérifier une fonction
grep -rn "function db_one" ~/public_html/
```
**Requêtes SQL utiles :**
```sql
-- Voir les produits
SELECT id, name, price, stock_quantity FROM products LIMIT 10;
-- Voir les clients
SELECT id, full_name, phone_number, customer_type FROM users LIMIT 10;
-- Voir les commandes
SELECT id, reference, status, total FROM orders ORDER BY id DESC LIMIT 10;
-- Voir les catégories
SELECT id, name, slug FROM categories;
```
================================================================
## 📋 CATÉGORIES DE SAVONS PRÉVUES
### Catégories principales (à créer en base)
1. 🧼 **Savons artisanaux** (karité, coco, miel, argile, baobab)
2. 🌿 **Savons naturels** (bio, sans parfum, hypoallergénique)
3. 🧴 **Grandes marques** (Dove, Nivea, Palmolive, Le Chat)
4. 💧 **Savons liquides** (gel douche, savon mains, savon vaisselle)
5. 👶 **Bébé & enfant** (savon bébé, savon doux)
6. 🎁 **Coffrets cadeaux** (découverte, mariage, entreprise)
### Marques prévues (à créer en base)
**Locales / artisanales :** à définir avec les fournisseurs
**Internationales :** Dove, Nivea, Palmolive, Le Chat, Sunlight
================================================================
## 🎯 PROCHAINES ÉTAPES IMMÉDIATES
### Étape 1 — Créer les dossiers
Dans cPanel → Gestionnaire de fichiers → public_html/ :
- config/ ✅ (déjà créé si test OK)
- includes/
- assets/css/, assets/js/, assets/img/
- uploads/products/, uploads/categories/
- actions/
- admin/
### Étape 2 — includes/header.php
**Contenu :**
- Doctype HTML
- Balises meta
- Liens CSS
- Header navigation (logo, liens Boutique/Contact, panier, connexion)
- Ouverture
### Étape 3 — includes/footer.php
**Contenu :**
- Footer 4 colonnes (À propos, Boutique, Compte, Infos)
- Copyright
- Scripts JS
- Fermeture