Files
nav-carte/V2-cadrage/G-prompt-dev-final.md
2026-04-28 14:00:05 +02:00

290 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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