feat(aep): carte AEP — push Gitea 2026-04-28

This commit is contained in:
Jules Neny
2026-04-28 14:00:05 +02:00
commit 21c44d8193
86 changed files with 31855 additions and 0 deletions

View File

@@ -0,0 +1,289 @@
# G — Prompt dev final NAV V2
> **⚠ CE PROMPT EST MAINTENANT SPLITTÉ EN 3 SESSIONS DÉDIÉES**
> Voir plus bas le statut d'avancement et les prompts de reprise.
## État d'avancement (dernière MAJ : 2026-04-14)
```
[✓] Session 1 — Setup + Fondations (terminée 2026-04-14)
├── VPS setup (token nav-v2-worker, crawl4ai 0.8.6, .env)
├── Schéma NocoDB (organisations +19 champs, stats_usage créée)
├── Parsing A-biblio (93 entités, 72 géocodées)
├── Taxonomie révisée (10 fonctions, 3 échelles)
├── Palette figée (palette-nav-v2.md)
└── 96 fiches importées (bypass modération), 3 réservées test pipe IA
[⏸] Session 2 — Front (à lancer)
→ Prompt : H-prompt-session-2-front.md
→ Durée : 6-8h
→ Étapes : carte Leaflet + sidebar + fiche + formulaire soumission
[⏸] Session 3 — IA + Deploy (à lancer après S2)
→ Prompt : I-prompt-session-3-ia-deploy.md
→ Durée : 6-8h
→ Étapes : worker Mistral Nemo + chatbot + bandeau + /a-propos + deploy
```
## Décisions validées Session 1
- **Palette** : A sobre institutionnel + bleu nuit #1a2238 à 60% opacité partout (cf. `palette-nav-v2.md`)
- **Taxonomie** :
- Échelle (3) : National / Régional (inclut Départemental) / Local
- Territoire : Métropole + 5 DOM-TOM (enrichissement ultérieur)
- Fonctions (10) : Juridique, Technique, Économique, Administratif, Chantier, Comptabilité, **Développement** (ex-Prospection), **Formation** (nouveau), **Gestion d'agence** (ex-RH élargi), Santé mentale
- **Liberapay** : `liberapay.com/trans-former.fr`, transparence origine dans `/a-propos`
- **From email modération** : `contact@trans-former.fr`
- **Seed** : bypass pour 96 fiches, 3 réservées test pipe IA en S3 (CNOA National, Archireport, Collectif Fil)
- **Circuit breaker 20€ dépassé** → bandeau "manque de fonds" + pédagogie "1€ = N requêtes"
- **CNOA** : 1 fiche National + 13 CROA Régional (antennes pins secondaires reportées V3)
## Points ouverts (cf. JOURNAL-V2.md)
- [ ] Rate limit chatbot (Session 2) : fichier JSON vs Redis
- [ ] Seuil email modération (Session 3) : reco 5 fiches pending
- [ ] Facteur CO2eq : 0.052 (RTE FR) ou 0.055 (ADEME 2024)
- [ ] MCP nocodb à reconfigurer (URL de base incorrecte)
- [ ] Conflit `rich` après install crawl4ai : vérifier si lightrag impacté
---
## ⬇ PROMPT ORIGINAL CI-DESSOUS ⬇
> Conservé pour référence. Ne PAS relancer en bloc — utiliser H et I pour les sessions suivantes.
> **À lancer en session Claude Code dédiée, modèle Opus, avec autorisation de déléguer à des sous-agents Sonnet.**
> Autonomie : 7/10 (2 checkpoints Jules : validation palette + review fiche seed test).
> Durée estimée : 20-28h (worker + front + deploy + tests).
> Prérequis humains : Mistral key créée, Liberapay créé, ssh vps-hetzner OK.
---
## Mission
Coder NAV V2 à partir des specs produites. La V2 ajoute à la V1 existante :
1. Carte de France interactive (Leaflet + OSM)
2. Sidebar filtres (échelle + fonction)
3. Page fiche détaillée partageable (`/fiche/[id]`)
4. Worker IA async qui enrichit les soumissions (Mistral Nemo)
5. Chatbot recherche sémantique (Mistral Small)
6. Filtre éthique commentaires
7. Bandeau bas stats (coût IA + dons + activité)
8. Onglets territoire (Métropole / Outre-mer)
Stack : Nuxt 3 + Tailwind + Leaflet + NocoDB + Mistral direct + Resend.
---
## Fichiers de référence (à LIRE en premier)
Tous dans `C:\Users\jules\Dropbox\ATIS - IPCJRA\0 INBOX\NAV-V2-recherches\` :
1. `A-biblio-ecosysteme-archi.md` — 94 entités seed à importer
2. `B-provider-ia-souverain.md` — Mistral Nemo + Small, circuit breaker 20€/mois
3. `C-systeme-dons.md` — Liberapay widget
4. `E-spec-frontend.md` — Wireframes ASCII, 28 composants, routes, states
5. `F-spec-pipe-collaboration.md` — Schéma DB, prompts IA, endpoints, fallbacks
6. `VPS-check.md` — NocoDB 0.301.5, Resend SMTP, crawl4ai à installer
Fichier V1 existant :
- `1 PROJETS/TECH - infra VPS, website pro, RAG/nav-carte/` (code Nuxt V1)
---
## Credentials & endpoints
```
VPS : ssh vps-hetzner (port 4422)
NocoDB : http://localhost:8070 (interne VPS)
Base : pipilvsi7dibo80
Table orgas : m08t7g5v4wch6wb
Table avis : m4hub7cdutgec47
Token V1 : e9rUEwfUrE7mo_am0QAytwM0vCbwh4o0sisZIbHl
→ Créer un NOUVEAU token "nav-v2-worker" au premier démarrage
Mistral : api.mistral.ai (key Scale, stockée côté Jules)
Resend : smtp.resend.com:465 (password dans /opt/vps-kit/.env)
Deploy : /opt/nav-carte/ (systemd nav-carte.service)
Domaine : nav.trans-former.fr
```
---
## Arbitrages tranchés (ne pas remettre en cause)
**Taxonomie :**
- Échelle (mono, obligatoire) : National / Régional / Départemental / Local
- Fonction (multi 1-5, ordre=priorité) : Juridique / Technique / Économique / Administratif / Chantier / Comptabilité / Prospection / RH / Santé mentale
- Territoire (séparé) : Métropole + 5 DOM-TOM
**UX :**
- Fiche = page dédiée `/fiche/[id]`
- Chatbot = bottom-sheet (mobile ET desktop)
- Onglets territoire = toggle Métropole/Outre-mer → sous-onglets DOM-TOM
- Formulaire = HTML custom Nuxt (pas Tally)
- Libs UI : Headless UI + Tailwind
- Filtres encodés dans URL (`?echelle=...&fonctions=...&territoire=...`)
- Filtrage côté client (< 300 fiches)
**Stack IA :**
- Mistral Nemo pour worker enrichissement + filtre éthique commentaires
- Mistral Small pour chatbot recherche
- Circuit breaker 20€/mois (table `stats_usage` + check avant chaque call)
- Chat completions API classique, pas Mistral Agents
**Système don :**
- Liberapay (widget embed dans bandeau bas)
- URL : liberapay.com/nav-archi (à confirmer avec Jules)
---
## Étapes
### Étape 0 — Setup (30 min)
- [ ] SSH VPS, vérifier NocoDB + Resend
- [ ] Créer un token NocoDB dédié "nav-v2-worker"
- [ ] Installer crawl4ai : `docker run ... crawl4ai` OU `pip install crawl4ai` selon l'environnement VPS
- [ ] Demander à Jules :
- La Mistral API key (stockée en `.env` sur VPS, jamais commitée)
- L'URL Liberapay finale
- [ ] **CHECKPOINT Jules** : proposer 3 palettes design (sobre / chaleureux / moderne) avec mockups colorés → validation
### Étape 1 — Schéma NocoDB (30 min)
- [ ] Étendre la table orgas avec les nouveaux champs (cf. F §2)
- [ ] Créer table `stats_usage` (circuit breaker IA)
- [ ] Créer table `scrape_queue` si besoin
- [ ] Test : insert/update via API token
### Étape 2 — Front carte + sidebar (3-4h)
- [ ] Installer vue-leaflet, Headless UI
- [ ] Composants : `NavMap`, `NavSidebar`, `EchelleFilter`, `FonctionFilter`, `TerritoireToggle`
- [ ] Wrapper Leaflet dans `<ClientOnly>` (SSR Nuxt)
- [ ] Géocoder les 94 fiches seed (Nominatim, batch script)
- [ ] Filtres encodés dans URL
- [ ] Responsive : drawer mobile, sidebar 320px desktop
### Étape 3 — Page fiche + commentaires (2-3h)
- [ ] Route `/fiche/[id]` avec SSR
- [ ] Composants : `FicheDetail`, `CommentSection`, `CommentForm`
- [ ] API : `GET /api/fiche/[id]`, `POST /api/comment`
- [ ] Filtre éthique commentaire sync (Mistral Nemo, < 2s)
- [ ] Meta SEO (title, description, og:image)
- [ ] Bouton retour carte avec restauration filtres (query params)
### Étape 4 — Worker IA enrichissement (4-5h)
- [ ] Script Node.js `worker/enrich.js` (cron systemd toutes les 5 min)
- [ ] Pipeline : fetch pending → scrape (crawl4ai, timeout 3min) → Mistral Nemo → update NocoDB
- [ ] Prompts exacts de F §3
- [ ] Troncature contenu scrapé à 4k tokens avant prompt
- [ ] Logs usage → table `stats_usage`
- [ ] Circuit breaker 20€ (check avant chaque call)
- [ ] Email Jules (Resend) quand N fiches en attente modération
- [ ] Fallback scrape échoué : flag `scrape_failed`, review manuel
### Étape 5 — Chatbot recherche (3-4h)
- [ ] Composant `ChatbotSheet` (bottom-sheet, Headless UI)
- [ ] Message onboarding (texte exact de E §6)
- [ ] Template requête (besoin / thématique / lieu)
- [ ] API `POST /api/chatbot` : Mistral Small + contexte JSON fiches
- [ ] Rate limit : 10 req/IP/jour (stockage fichier JSON ou Redis)
- [ ] Affichage résultats : fiches + explication 1-2 lignes
### Étape 6 — Formulaire soumission (2h)
- [ ] Composant `SubmitModal` ou page `/contribuer`
- [ ] Validation Zod côté client + serveur
- [ ] Champs : nom, URL, desc, échelle, fonctions (1-5), territoire, ville, email
- [ ] Message post-submit (E §9)
- [ ] Rate limit : 3/IP/jour
### Étape 7 — Bandeau bas + Liberapay (1-2h)
- [ ] Composant `BandeauBas`
- [ ] Gauche : data depuis `stats_usage` (coût mois, tokens, carbone estimé)
- [ ] Milieu : bouton "Soutenir NAV" → Liberapay
- [ ] Droite : compteurs semaine (dons, nouvelles fiches, requêtes)
- [ ] Carbone estimé : kWh × 0.052 kg CO2eq/kWh (facteur FR RTE)
### Étape 8 — Page /a-propos (1h)
- [ ] Contenu : NAV, souveraineté, gouvernance, transparence
- [ ] Badges "IA souveraine", "Hébergé en France", "Zéro cookie US"
- [ ] Lien vers formulaire + Liberapay
### Étape 9 — Deploy + tests (2-3h)
- [ ] Build production
- [ ] Deploy via git pull + pm2/systemd restart
- [ ] Vérifier DNS, HTTPS (Caddy déjà config)
- [ ] **CHECKPOINT Jules** : soumettre une fiche test → vérifier pipeline IA → valider → voir sur carte
- [ ] Tester chatbot avec requête réelle
- [ ] Tester mobile (iOS Safari + Android Chrome)
### Étape 10 — Import seed 94 fiches (1h)
- [ ] Script import : parser `A-biblio-ecosysteme-archi.md`
- [ ] Pour chaque entité : créer en NocoDB avec status `published` (bypass modération pour seed)
- [ ] Géocoder ville via Nominatim
- [ ] Vérifier que les marqueurs apparaissent sur la carte
---
## Délégation
Tu peux (et dois) déléguer les sous-tâches indépendantes à des sous-agents Sonnet. Exemples :
- **Sonnet 1** : setup NocoDB (étape 1) + géocoding seed
- **Sonnet 2** : composants front carte + sidebar (étape 2)
- **Sonnet 3** : worker IA (étape 4)
- **Sonnet 4** : chatbot (étape 5)
Toi (Opus) = pilote :
- Arbitrages design + UX
- Checkpoints Jules
- Assemblage final + deploy
- Debug quand ça coince
---
## Règles
- Mobile-first, testé à chaque étape
- Français avec accents partout (UI + code comments)
- Pas de Google Fonts externe (self-hosted ou system font)
- Pas de librairie UI lourde (Vuetify, Quasar) — Tailwind + Headless UI uniquement
- Commits atomiques par étape (ex: `feat(front): carte Leaflet + sidebar filters`)
- Secrets via `.env` sur VPS, jamais dans le code
- Si un point bloque > 30 min → reporter dans le journal de session et demander Jules
- Tester le pipeline IA complet sur 1 fiche avant de scaler
---
## Output attendu
1. V2 déployée sur nav.trans-former.fr
2. 94 fiches seed visibles sur la carte
3. Worker IA qui tourne (cron 5 min)
4. Chatbot fonctionnel
5. Bandeau bas avec stats en temps réel
6. Liberapay relié
7. Journal de session `/1 PROJETS/TECH - infra VPS.../nav-carte/JOURNAL-V2.md` avec :
- Temps passé par étape
- Décisions techniques prises
- Points bloquants rencontrés
- TODOs V3
---
## Questions ouvertes (à trancher par Jules AVANT lancement)
1. **Palette design** : sobre / chaleureux / moderne ? (checkpoint étape 0)
2. **URL Liberapay finale** : `nav-archi` ou `trans-former` ?
3. **From email modération** : `newsletter@trans-former.fr` (existant Resend) ou créer `nav@trans-former.fr` ?
4. **Seed fiches** : bypass modération IA pour les 94 (publication directe) ou les passer dans la pipe pour tester ?
→ Reco : bypass pour rapidité, passer 2-3 fiches dans la pipe en test