290 lines
11 KiB
Markdown
290 lines
11 KiB
Markdown
# 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
|