maj-doc-complete

This commit is contained in:
Ladebeze66 2026-04-01 21:50:57 +02:00
parent b738fa95d0
commit 37dddd1ec9
33 changed files with 520 additions and 0 deletions

View File

@ -0,0 +1,27 @@
---
name: site-portfolio-evolution
description: Workflow pour evoluer le site portfolio (Next/Strapi) avec doc interne, captures et Git. Utiliser pour changements front, UI ou architecture du depot.
---
# Evolution du site portfolio
## Sources
- Doc interne : `docs-site-interne/`
- Operationnel : `CONFIGURATION_SITE.md`
- Visuel : `docs-site-interne/captures/` et `captures/INDEX.md`
## Sequence
1. **Reflexion** — Objectif, routes, fichiers. Si impact visuel : noter les IDs dans `captures/INDEX.md`.
2. **Choix** — Changement minimal, coherent avec l'existant.
3. **Modification** — Pas d'elargissement de scope implicite.
4. **Validation** — Test local des pages touchees.
5. **Si probleme**`git restore` / retour branche propre.
6. **Si OK** — Mettre a jour `docs-site-interne` (fichiers concernes), `feuille-de-route.md` ou `etat-actuel.md` si besoin, puis **captures** pour les sections modifiees.
## Regles
- Petites mises a jour doc apres chaque lot utile.
- Pas de donnees sensibles sur captures admin (flouter).
- Preferer WebP dans `captures/`.

View File

@ -0,0 +1,46 @@
# Architecture globale
**Dernière mise à jour :** 2026-04-01
## Schéma logique
```mermaid
flowchart LR
Browser[Navigateur]
Next[Next.js :3000]
Strapi[Strapi :1337]
FastAPI[FastAPI :8000]
Ollama[Ollama :11434]
RemoteAPI[api.fernandgrascalvet.com]
Browser --> Next
Next -->|"fetch REST (getApiUrl)"| Strapi
Next -->|"fetch REST"| RemoteAPI
Next -->|"/api/proxy → llmapi.*"| FastAPI
FastAPI --> Ollama
```
En **développement local**, le front appelle souvent **Strapi sur `localhost:1337`** (voir `getApiUrl`). En **production**, les appels client pointent vers **`https://api.fernandgrascalvet.com`**.
Le **chatbot** ne parle pas à FastAPI en local par défaut : la route `app/api/proxy/route.js` appelle **`https://llmapi.fernandgrascalvet.com/ask`** (URL absolue).
## Services et ports
| Service | Port local typique | Rôle |
|---------|-------------------|------|
| Next.js | 3000 | Site public, rewrites `/api/*` → Strapi distant (voir `next.config.ts`) |
| Strapi | 1337 | CMS, REST `/api/*` |
| FastAPI (`llm-api/api.py`) | 8000 | Pont HTTP vers Ollama `/api/generate` |
| Ollama | 11434 | Inférence LLM (modèle `mistral` dans le code actuel) |
## Fichiers clés
- `next.config.ts` — rewrites, `NEXT_PUBLIC_API_URL`, domaines images.
- `app/utils/getApiUrl.ts` — choix de lURL Strapi (local vs prod, client vs serveur).
- `app/api/proxy/route.js` — proxy vers lAPI LLM **hébergée** (`llmapi.fernandgrascalvet.com`).
- `llm-api/api.py` — implémentation FastAPI locale (Ollama).
## Points dattention
1. **`next.config` rewrites** : les requêtes vers `/api/*` côté Next sont renvoyées vers lURL Strapi configurée — **conflit sémantique** avec la route Next `app/api/proxy` (chemin différent : le proxy est sous `/api/proxy`, pas sous le rewrite générique de la même façon ; à vérifier selon lordre de matching Next).
2. **`app/utils/config.ts`** expose `API_URL` avec défaut `localhost:1337`, alors que `next.config.ts` utilise par défaut le domaine de prod : usages distincts, ne pas les confondre.

View File

@ -0,0 +1,58 @@
# Frontend Next.js
**Dernière mise à jour :** 2026-04-01
## Stack
- **Next.js** 15.x, **React** 18, **TypeScript** (fichiers `.tsx`/`.ts`) avec fichiers **`.jsx`/`.js`** encore présents.
- **Tailwind CSS** + `@tailwindcss/typography`.
- Rendu riche Strapi : `@strapi/blocks-react-renderer`, **react-markdown** + rehype/remark.
## Routes (App Router)
| Chemin | Fichier | Notes |
|--------|---------|--------|
| `/` | `app/page.tsx` | Accueil : `GET /api/homepages?populate=*` |
| `/portfolio` | `app/portfolio/page.jsx` | Liste projets |
| `/portfolio/[slug]` | `app/portfolio/[slug]/page.tsx` | Détail projet (`fetchData('projects', slug)`) |
| `/competences` | `app/competences/page.jsx` | Liste compétences |
| `/competences/[slug]` | `app/competences/[slug]/page.tsx` | Détail (`fetchData('competences', slug)`) |
| `/contact` | `app/contact/page.js` | Formulaire → Strapi `messages` |
| `/admin/messages` | `app/admin/messages/page.tsx` | Consultation messages (côté Next) |
| `/api/proxy` | `app/api/proxy/route.js` | Proxy GET vers API LLM distante |
## Layout
- `app/layout.tsx`**Client Component** (`"use client"`). Header fixe, menu burger mobile, fond décoratif, **Footer**, compteur de visites **localStorage** (`visitCount`).
## Données Strapi
- **`getApiUrl()`** (`app/utils/getApiUrl.ts`) :
- Côté **navigateur** : si hostname est local / LAN → `http://localhost:1337`, sinon → `https://api.fernandgrascalvet.com`.
- Côté **serveur** : `process.env.NEXT_PUBLIC_API_URL` ou défaut `https://api.fernandgrascalvet.com`.
- **`fetchData`** (`app/utils/fetchData.ts`) : collection + `slug`, populate `picture`, `cache: "no-store"`.
- **Accueil** (`app/page.tsx`) : `homepages`, retry 3×, timeout 10 s.
## Configuration Next
- `next.config.ts` : `rewrites` de `/api/:path*` vers `${API_URL}/api/:path*``API_URL` vient de `NEXT_PUBLIC_API_URL` ou défaut production.
- `images.domains` : `localhost`, `api.fernandgrascalvet.com`.
## Composants notables
- Carrousels : `Carousel.tsx`, `CarouselCompetences.tsx` (swiper / react-responsive-carousel).
- Sections : `ContentSection.tsx`, `ContentSectionCompetences*.tsx`.
- `ContactForm.tsx``sendMessage.ts`.
- `ChatBot.js``askAI.js``/api/proxy`.
- `ModalGlossaire.tsx` — glossaire (données Strapi selon usage dans les pages).
## Fichiers clés (liste courte)
```
app/layout.tsx
app/page.tsx
app/utils/getApiUrl.ts
app/utils/fetchData.ts
app/utils/sendMessage.ts
next.config.ts
```

View File

@ -0,0 +1,78 @@
# CMS Strapi
**Dernière mise à jour :** 2026-04-01
## Emplacement
- Code : `cmsbackend/`
- Schémas : `cmsbackend/src/api/<nom>/content-types/<nom>/schema.json`
Tous les types listés ci-dessous ont **`draftAndPublish: true`** : penser à **publier** les entrées dans ladmin.
## Content-types
### `homepage` (collection `homepages`)
| Champ | Type | Notes |
|-------|------|--------|
| `title` | string | requis |
| `cv` | richtext | requis |
| `photo` | media (single) | requis |
Utilisation front : `app/page.tsx` — premier enregistrement `populate=*`, image : `${apiUrl}${photo.url}`.
### `project` (collection `projects`)
| Champ | Type | Notes |
|-------|------|--------|
| `name` | string | requis |
| `description` | text | requis |
| `picture` | media (multiple) | requis |
| `slug` | uid ← `name` | requis |
| `Resum` | richtext | requis (nom du champ avec majuscule) |
| `link` | string (URL) | requis |
| `order` | integer | optionnel |
### `competence` (collection `competences`)
| Champ | Type | Notes |
|-------|------|--------|
| `name` | string | requis |
| `content` | richtext | requis |
| `picture` | media (multiple) | requis |
| `slug` | uid ← `name` | requis |
| `order` | integer | optionnel |
### `message` (collection `messages`)
| Champ | Type | Notes |
|-------|------|--------|
| `name` | string | requis |
| `email` | email | requis |
| `message` | text | requis |
Création via **POST** `/api/messages` depuis `sendMessage.ts` (permissions Strapi **create** publique à valider en prod).
### `glossaire` (collection `glossaires`)
| Champ | Type | Notes |
|-------|------|--------|
| `mot_clef` | string | requis |
| `slug` | uid ← `mot_clef` | requis |
| `variantes` | json | requis |
| `description` | richtext | requis |
| `images` | media (multiple) | requis |
## API REST
- Base : `http://localhost:1337` (dev) ou `https://api.fernandgrascalvet.com` (prod).
- Préfixe : `/api/<pluralName>` (ex. `/api/projects`, `/api/homepages`).
## Fichiers de config Strapi (référence)
```
cmsbackend/config/database.ts
cmsbackend/config/server.ts
cmsbackend/config/middlewares.ts
cmsbackend/config/api.ts
```

View File

@ -0,0 +1,34 @@
# API LLM et chatbot (GrasBot)
**Dernière mise à jour :** 2026-04-01
## Chaîne côté navigateur
1. `app/components/ChatBot.js` appelle `askAI(question)` (`app/utils/askAI.js`).
2. `askAI` envoie un **GET** vers **`/api/proxy?q=...`** (route Next.js App Router).
3. `app/api/proxy/route.js` appelle en dur **`https://llmapi.fernandgrascalvet.com/ask?q=...`** et renvoie le corps JSON tel quel.
**Conséquence :** en développement local, le chatbot s'appuie sur l'**API LLM déployée** sur ce domaine, pas sur `uvicorn` local (`http://localhost:8000`) tant que l'URL n'est pas rendue configurable.
## Réponse attendue par le front
- Dans `askAI.js`, le texte affiché est lu via **`data.response`**. Le flux Ollama (`/api/generate`) renvoie en général un champ `response` dans le JSON ; si l'API distante ou le format change, vérifier ce mapping.
## FastAPI local (`llm-api/api.py`)
- Endpoint **GET** `/ask`, paramètre query **`q`**.
- Requête **POST** vers Ollama : `http://localhost:11434/api/generate` avec JSON `model: "mistral"`, `prompt`, `stream: false`.
- Dépendances : voir `CONFIGURATION_SITE.md` (FastAPI, uvicorn, requests).
## Fichiers clés
```
app/utils/askAI.js
app/api/proxy/route.js
app/components/ChatBot.js
llm-api/api.py
```
## Piste d'évolution
- Variable d'environnement (ex. URL LLM côté serveur) pour pointer vers `http://localhost:8000` en dev et vers la prod en déploiement, au lieu d'une URL figée dans `route.js`.

View File

@ -0,0 +1,29 @@
# Environnement et scripts
**Dernière mise à jour :** 2026-04-01
## Variables denvironnement (Next)
| Variable | Usage |
|----------|--------|
| `NEXT_PUBLIC_API_URL` | Base URL Strapi pour le build et le rendu serveur ; chargée dans `next.config.ts` (dotenv) pour rewrites et images. |
Défauts dans le code si absent :
- `next.config.ts` : `https://api.fernandgrascalvet.com`
- `app/utils/getApiUrl.ts` (navigateur local) : `http://localhost:1337`
- `app/utils/config.ts` : `http://localhost:1337` (usage ponctuel selon imports)
## Script `start-my-site.ps1`
- Définit `NEXT_PUBLIC_API_URL` et `PUBLIC_URL` vers `https://api.fernandgrascalvet.com`.
- Lance trois fenêtres PowerShell : Strapi (`cmsbackend`), Next (racine), FastAPI (`llm-api` sur port 8000).
- Chemins en dur : `J:\my-next-site\...` — à adapter si le dépôt est déplacé.
## Démarrage manuel
Voir `CONFIGURATION_SITE.md` (ports 3000, 1337, 8000, 11434).
## CORS / proxy
- La route `app/api/proxy/route.js` renvoie `Access-Control-Allow-Origin: *` sur la réponse proxy.

View File

@ -0,0 +1,26 @@
# Outils `strapi_extraction/`
**Dernière mise à jour :** 2026-04-01
Dossier de **scripts Node** pour extraire, nettoyer et documenter les données issues de lAPI Strapi (hors runtime du site).
## Scripts repérés
| Fichier | Rôle probable |
|---------|----------------|
| `extract-api-data.js` | Extraction brute vers JSON (`extract/raw/`). |
| `clean-api-data.js` | Nettoyage / normalisation (`extract/clean-data/`). |
| `generate-docs.js` | Génération de documentation à partir des données. |
| `update-documentation.js` | Mise à jour de la doc générée. |
| `analyse-site-architecture.js` | Analyse darchitecture du site. |
## Données générées (exemples)
- `extract/raw/*.json`, `extract/clean-data/*.json`
- `logs/last-update-summary.json`, `docs/generation-summary.json`
Ces fichiers peuvent être **régénérés** ; ne pas les considérer comme source de vérité sans comparer au CMS.
## Usage
Lancer depuis la racine ou le dossier selon les chemins dans chaque script (à vérifier avant exécution). Détails : lire len-tête de chaque fichier `.js`.

View File

@ -0,0 +1,24 @@
# Référence visuelle (captures)
**Dernière mise à jour :** 2026-04-01 — jeu de captures WebP déposé (ID 0105, 0721 ; ID 06 optionnel ignoré).
## Objectif
Conserver un **contexte visuel** aligné sur le code. Les images validées sont dans `docs-site-interne/captures/`.
## Documents
- [captures/INDEX.md](./captures/INDEX.md) — liste numérotée des captures, noms de fichiers, priorités, cases « Présent ».
- [captures/README.md](./captures/README.md) — conventions de nommage, mise à jour, confidentialité.
## Workflow
Voir `.cursor/skills/site-portfolio-evolution/SKILL.md` : réflexion → choix → modification → validation → si échec retour Git → si OK mise à jour doc et captures concernées.
## Activation du skill dans Cursor
Le fichier est versionné dans le dépôt. Si besoin, ajoutez le dossier aux **Agent Skills** de Cursor ou copiez le skill dans votre répertoire skills personnel pour quil soit proposé automatiquement.
## Pour lassistant
Lors dun chantier UI, **@mentionner** les fichiers dans `captures/` ou citer l**ID** de lindex (ex. ID 13 — fiche compétence desktop).

View File

@ -0,0 +1,51 @@
# Documentation interne du site
**Dernière mise à jour :** 2026-04-01 — captures WebP complètes dans `captures/` (voir INDEX).
Ce dossier décrit l'architecture, le fonctionnement et les décisions du projet (Next.js + Strapi + FastAPI/Ollama). Il est destiné à l'équipe et à l'assistant IA pour retrouver vite le contexte.
## Relation avec les autres fichiers
| Fichier / zone | Rôle |
|----------------|------|
| `CONFIGURATION_SITE.md` (racine) | Guide opérationnel : ports, commandes, dépannage, planificateur de tâches Windows. |
| Ce dossier | Conception : flux de données, schémas CMS, incohérences connues, feuille de route. |
**Règle de maintenance :** après une modification notable, mettre à jour le fichier concerné ici ; si le démarrage ou les ports changent, compléter aussi `CONFIGURATION_SITE.md`.
## Index des documents
| Fichier | Contenu |
|---------|---------|
| [01-architecture.md](./01-architecture.md) | Services, ports, flux. |
| [02-frontend-next.md](./02-frontend-next.md) | App Router, routes, fetch Strapi. |
| [03-cms-strapi.md](./03-cms-strapi.md) | Content-types Strapi. |
| [04-api-llm-et-chatbot.md](./04-api-llm-et-chatbot.md) | FastAPI, Ollama, GrasBot. |
| [05-environnement-scripts.md](./05-environnement-scripts.md) | Env, scripts PowerShell. |
| [06-strapi-extraction.md](./06-strapi-extraction.md) | Outils `strapi_extraction/`. |
| [07-reference-visuelle-captures.md](./07-reference-visuelle-captures.md) | Référence visuelle ; dossier `captures/`. |
| [captures/INDEX.md](./captures/INDEX.md) | Inventaire des captures WebP (noms réels, slugs, priorités). |
| [etat-actuel.md](./etat-actuel.md) | État et dette technique. |
| [feuille-de-route.md](./feuille-de-route.md) | Backlog priorisé. |
## Arborescence utile
```
my-next-site/
├── app/
├── cmsbackend/
├── llm-api/
├── strapi_extraction/
├── start-my-site.ps1
├── next.config.ts
├── CONFIGURATION_SITE.md
└── docs-site-interne/
├── captures/ # screenshots de référence (voir INDEX.md)
└── ...
```
**Workflow dévolution (doc + captures + Git) :** skill Cursor `.cursor/skills/site-portfolio-evolution/SKILL.md`.
## Reprise dune session de travail
Pour enchaîner après une pause : lire `feuille-de-route.md` (priorités), `etat-actuel.md`, puis `captures/INDEX.md` si le travail touche lUI. Le skill `site-portfolio-evolution` rappelle la boucle modification → validation → mise à jour doc.

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View File

@ -0,0 +1,63 @@
# Index des captures — référence visuelle
**Dernière mise à jour :** 2026-04-01 — jeu de captures WebP déposé dans ce dossier (sauf ID 06, optionnel).
**Priorité** : **P0** = contexte global ; **P1** = refonte UI ; **P2** = optionnel.
## Fichiers réels dans le dépôt (état actuel)
Les noms suivants sont ceux présents sur disque. Les routes **dynamiques** utilisent deux conventions de slug (voir section Conventions slug).
| ID | Section | Route | Fichier dans le dépôt | P | Statut |
|----|---------|-------|------------------------|---|--------|
| 01 | Header + nav desktop | / | `01-layout-header-nav-desktop.webp` | P0 | OK |
| 02 | Menu mobile ouvert | / | `02-layout-nav-mobile-ouverte.webp` | P0 | OK |
| 03 | Accueil above the fold | / | `03-accueil-hero-desktop.webp` | P0 | OK |
| 04 | Accueil above the fold | / | `04-accueil-hero-mobile.webp` | P0 | OK |
| 05 | Accueil page longue | / | `05-accueil-page-pleine-desktop.webp` | P1 | OK |
| 06 | Accueil chargement | / | *(non fourni — optionnel)* | P2 | Ignoré |
| 07 | Portfolio liste | /portfolio | `07-portfolio-liste-desktop.webp` | P0 | OK |
| 08 | Portfolio liste | /portfolio | `08-portfolio-liste-mobile.webp` | P0 | OK |
| 09 | Portfolio fiche | /portfolio/slug | `09-portfolio-detail-desktop-presentation-ecole-42.webp` | P0 | OK |
| 10 | Portfolio fiche | /portfolio/slug | `10-portfolio-detail-mobile-presentation-ecole-42.webp` | P1 | OK |
| 11 | Compétences liste | /competences | `11-competences-liste-desktop.webp` | P0 | OK |
| 12 | Compétences liste | /competences | `12-competences-liste-mobile.webp` | P0 | OK |
| 13 | Compétences fiche | /competences/slug | `13-competences-detail-ia-desktop.webp` | P0 | OK |
| 14 | Compétences fiche | /competences/slug | `14-competences-detail-ia-mobile.webp` | P1 | OK |
| 15 | GrasBot ouvert | /competences/slug | `15-competences-grasbot-ouvert-desktop.webp` | P1 | OK |
| 16 | Glossaire modal | /competences/slug | `16-competences-glossaire-ouvert-desktop.webp` | P1 | OK |
| 17 | Contact formulaire | /contact | `17-contact-formulaire-desktop.webp` | P0 | OK |
| 18 | Contact formulaire | /contact | `18-contact-formulaire-mobile.webp` | P0 | OK |
| 19 | Footer | / | `19-layout-footer-desktop.webp` | P1 | OK |
| 20 | Compteur visites | / | `20-layout-compteur-visites-desktop.webp` | P2 | OK |
| 21 | Admin messages | /admin/messages | `21-admin-messages-desktop.webp` | P2 | OK |
**Slugs illustrés :** projet `presentation-ecole-42`, compétence `ia` (Strapi).
## Conventions slug (nouvelles captures)
| Zone | Motif |
|------|--------|
| Portfolio desktop | `09-portfolio-detail-desktop-{slug}.webp` |
| Portfolio mobile | `10-portfolio-detail-mobile-{slug}.webp` |
| Compétences desktop | `13-competences-detail-{slug}-desktop.webp` |
| Compétences mobile | `14-competences-detail-{slug}-mobile.webp` |
## Ordre conseillé (prise de vue)
0102 chrome, 0306 accueil, 0710 portfolio, 1116 compétences, 1718 contact, puis 1921.
## Repères code
| ID | Fichiers |
|----|----------|
| 0102 | `app/layout.tsx` |
| 0306 | `app/page.tsx` |
| 0708 | `app/portfolio/page.jsx` |
| 0910 | `app/portfolio/[slug]/page.tsx`, `ContentSection.tsx` |
| 1112 | `app/competences/page.jsx` |
| 1316 | `ContentSectionCompetences*.tsx`, `ChatBot.js`, `ModalGlossaire.tsx` |
| 1718 | `app/contact/page.js`, `ContactForm.tsx` |
| 19 | `app/components/Footer.jsx` |
| 20 | `app/layout.tsx` |
| 21 | `app/admin/messages/page.tsx` |

View File

@ -0,0 +1,17 @@
# Captures d'écran — référence visuelle
**Dernière mise à jour :** 2026-04-01
Ce dossier contient les **images WebP de référence** du site (état validé). La liste à jour : **[INDEX.md](./INDEX.md)**.
## Convention générale
Format : `{numero}-{zone}-{detail}-{viewport}.webp` — détails et **deux motifs pour les fiches dynamiques** (portfolio vs compétences) dans INDEX.md.
## Mise à jour
Après changement visuel validé : remplacer les WebP concernés et ajuster INDEX.md si besoin.
## Données sensibles
Sur `/admin/messages`, flouter ou données fictives sur les captures.

View File

@ -0,0 +1,29 @@
# État actuel du site
**Dernière mise à jour :** 2026-04-01
## Ce qui est en place
- **Next.js 15** avec App Router, Tailwind, pages accueil / portfolio / compétences / contact, layout responsive avec menu burger.
- **Strapi** avec content-types : homepage, projects, competences, messages, glossaire ; médias et texte riche.
- **Formulaire contact** : POST vers Strapi `messages`.
- **Chatbot GrasBot** : proxy Next vers API LLM hébergée (`llmapi.fernandgrascalvet.com`).
- **FastAPI + Ollama** dans le dépôt pour usage local ou serveur ; modèle `mistral` dans `llm-api/api.py`.
- **Scripts** dextraction et de doc dans `strapi_extraction/`.
- Documentation opérationnelle : `CONFIGURATION_SITE.md`.
- **Captures d'écran** de référence (WebP) : `docs-site-interne/captures/` — voir `captures/INDEX.md`.
## Dette technique / incohérences connues
- Mélange **TypeScript** et **JavaScript** (`.jsx`, `.js`) dans `app/`.
- **`RootLayout` en client component** : tout le layout est côté client ; pas de Server Component racine pour le shell.
- **URLs Strapi** : logique répartie entre `getApiUrl`, `next.config.ts`, `config.ts` — risque de confusion ; à documenter dans les changements futurs.
- **Proxy LLM** : URL de production codée en dur dans `app/api/proxy/route.js` ; pas dalignement automatique avec `llm-api` local.
- Champ Strapi **`Resum`** sur `project` : casse atypique ; attention dans le mapping front.
- **`start-my-site.ps1`** : chemins absolus `J:\my-next-site` — non portables.
## Non vérifié dans cette passe
- Permissions Strapi (public create sur `messages`, etc.).
- Comportement exact des rewrites Next vs route `app/api/proxy` (ordre de résolution).
- Tests automatisés : présence à confirmer.

View File

@ -0,0 +1,38 @@
# Feuille de route
**Dernière mise à jour :** 2026-04-01
Document vivant : ajuster les statuts et dates au fil du travail.
## Court terme (prochaines itérations)
| ID | Sujet | Statut | Notes |
|----|--------|--------|--------|
| R1 | Moderniser lUI (design system, cohérence typo/couleurs) | À faire | Sappuyer sur Tailwind existant |
| R2 | Homogénéiser TS vs JS dans `app/` | À faire | Migrer progressivement les `.jsx`/`.js` |
| R3 | Centraliser config API (Strapi + LLM) via `.env` | À faire | Remplacer URLs en dur où pertinent |
| R4 | Revoir `layout.tsx` (server vs client, perf SEO) | À faire | Évaluer extraction header/footer |
## Moyen terme
| ID | Sujet | Statut | Notes |
|----|--------|--------|--------|
| M1 | Tests (e2e ou smoke sur routes critiques) | À faire | |
| M2 | Accessibilité (navigation, contrastes, focus) | À faire | |
| M3 | Performance (images Next/Image, bundle) | À faire | |
## Long terme / idées
| ID | Sujet | Statut | Notes |
|----|--------|--------|--------|
| L1 | CI/CD ou script de déploiement documenté | À faire | |
| L2 | Monitoring / logs centralisés | À faire | |
## Historique des jalons
| Date | Jalon |
|------|--------|
| 2026-04-01 | Création du dossier `docs-site-interne/` et première rédaction basée sur le code. |
| 2026-04-01 | Reprise après coupure : vérification complétude ; enrichissement de `04-api-llm-et-chatbot.md` ; suppression de `test.txt`. |
| 2026-04-01 | Index captures (`captures/INDEX.md`), `captures/README.md`, `07-reference-visuelle-captures.md`, skill `.cursor/skills/site-portfolio-evolution/SKILL.md`. |
| 2026-04-01 | Captures WebP intégrées au dépôt ; INDEX et README `captures/` alignés sur les noms réels (slug portfolio / compétence documentés). |