Voici le document de cadrage technique complet, spécialement rédigé pour qu'une IA comme Claude (via Claude Code) comprenne instantanément l'architecture cible, les contraintes de ton écosystème et la mission de restructuration.

Tu peux copier-coller l'intégralité du texte ci-dessous et l'enregistrer dans un fichier nommé **`PROJET_CADRAGE.md`** à la racine de ton projet Laravel vide, ou le donner directement en entrée à Claude Code.

---

# 📄 DOCUMENT DE CADRAGE TECHNIQUE : MIGRATION VERS LARAVEL MULTI-TENANT (SANS SQL)

## 1. Contexte du Projet & Objectif Global

Ce projet consiste à bâtir une application SaaS de **Content Repurposing** et de gestion d'écosystèmes de sites web professionnels (ex. professions libérales).

L'objectif immédiat est de migrer un écosystème existant de sites codés en **PHP natif (scripts procéduraux) et alimentés par des fichiers de données JSON** vers le framework **Laravel**, en adoptant une architecture standardisée, sécurisée et hautement scalable.

---

## 2. Environnement DevOps Actuel

L'infrastructure de développement et de déploiement est pleinement fonctionnelle :

* **Environnement Local :** VS Code + Claude Code CLI + Laravel Herd (Serveur Nginx, PHP 8.x, Composer).
* **Versionnage :** GitHub (Dépôt Privé).
* **Déploiement (CI/CD) :** GitHub Actions configuré pour déployer automatiquement le code validé via FTP vers un environnement de *Sandbox* (hébergement mutualisé standard).

---

## 3. Architecture Cible : Les Deux Faces du Projet

Le projet utilise une architecture **Multi-Tenant basée sur une seule base de code (Single Codebase)**. Un seul projet Laravel gère l'ensemble des requêtes.

### 🌐 FACE 1 : L'Écosystème de Sites (Périmètre Prioritaire)

Chaque client dispose de son propre Nom de Domaine (NDD) pointant vers l'IP unique de notre serveur. Le système doit afficher un site vitrine personnalisé de manière totalement invisible pour l'internaute.

* **Le Mécanisme (Multi-Domaine) :** L'application intercepte le domaine de la requête (ex: `dr-dupont-dentiste.fr`), cherche le fichier de configuration associé (ex: `dr-dupont-dentiste.fr.json`) stocké sur le serveur, extrait les données et les injecte dans un template HTML/Blade unique.
* **L'Administration Locale ("Tenant Admin") :** Chaque site client intègre une route sécurisée (ex: `/la-gestion`) permettant à l'administrateur du site (ou au client) de modifier, ajouter ou supprimer des données spécifiques dans son propre fichier JSON via des formulaires sécurisés.
* **Contrainte de Stockage :** **ZÉRO SQL**. Toutes les données de la Face 1 (textes, metas, configurations) doivent être lues et écrites exclusivement dans des fichiers plats au format JSON.

### ⚙️ FACE 2 : La Console d'Administration Centrale (Contexte Futur)

Une console centrale (Super Admin) permettra plus tard de piloter l'ensemble de la flotte. Elle gérera les tunnels d'IA lourds (API Gemini pour l'analyse des captations vidéos d'interviews et des reportages photos) afin de générer automatiquement les fichiers JSON des nouveaux clients et de déclencher des services tiers (Google Ads, Facebook/Instagram API, génération de Print).

* *Note pour Claude : Ce périmètre est hors-jeu pour le moment, mais l'architecture de la Face 1 doit être pensée pour s'y coupler facilement (via SQLite pour la Face 2 à terme).*

---

## 4. Structure de Dossiers Cible (Laravel MVC)

Le code migré devra se ranger strictement dans l'architecture native de Laravel :

```text
mon-saas/
├── app/
│   └── Http/
│       └── Controllers/
│           ├── TenantController.php       # Gère l'affichage public (Lecture JSON)
│           └── TenantAdminController.php  # Gère l'admin locale (Écriture JSON)
├── config/
├── public/                                # Fichiers assets globaux (CSS, JS)
├── resources/
│   └── views/
│       ├── tenant-template.blade.php      # Template unique du site public
│       └── tenant-admin-form.blade.php    # Formulaire de l'admin locale
├── routes/
│   └── web.php                            # Déclaration des routes (Front + Admin Locale)
└── storage/
    └── app/
        └── tenants/                       # Contient les fichiers JSON des clients
            ├── dr-dupont-dentiste.fr.json
            └── exemple-template.json

```

---

## 5. Directives de Migration pour Claude Code

Les fichiers sources de l'ancien système (scripts PHP natifs et exemple de fichier JSON) sont situés dans le dossier temporaire `[Racine]/ancien-code/`.

### Mission de Restructuration :

1. **Analyse du Code Existant :** Analyser la logique de parsing du JSON et la structure HTML présentes dans `/ancien-code/`.
2. **Routage Dynamique (`routes/web.php`) :** Créer une route principale racine `{any}` qui capture toutes les requêtes entrantes, ainsi qu'un groupe de routes préfixé par `/la-gestion` pour l'administration locale.
3. **Développement du `TenantController` :** * Récupérer dynamiquement le *host* (nom de domaine) de la requête.
* Charger le fichier JSON correspondant situé dans `storage/app/tenants/{domaine}.json`.
* Lever une erreur 404 propre si le fichier JSON n'existe pas.
* Transmettre les données décodées à la vue Blade.


4. **Refactoring des Vues (`resources/views/`) :** Nettoyer le code HTML de l'ancien template pour créer la vue `tenant-template.blade.php` en utilisant la syntaxe propre de Laravel Blade (`{{ $siteData['...'] }}`).
5. **Développement du `TenantAdminController` :**
* Créer la méthode `edit` pour afficher un formulaire HTML pré-rempli avec les valeurs actuelles du JSON du domaine concerné.
* Créer la méthode `update` pour valider les données envoyées (sécurisation des inputs via le mécanisme de Validation de Laravel), ouvrir le fichier JSON concerné, mettre à jour uniquement les clés modifiées et réenregistrer le fichier avec un formatage propre (`JSON_PRETTY_PRINT`).


6. **Sécurité native :** Intégrer les directives de protection contre les failles CSRF (`@csrf`) sur tous les formulaires générés.

---

## 6. Instructions de Nettoyage

Une fois la migration effectuée et validée (vérification de la bonne exécution des contrôleurs et de l'affichage des vues), le dossier temporaire `/ancien-code/` devra être supprimé pour laisser le dépôt Git parfaitement propre.