Compare commits
16 Commits
feat/aep-r
...
e63d02a351
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e63d02a351 | ||
|
|
5878c56888 | ||
|
|
755d1ef9ae | ||
|
|
682d5d337e | ||
|
|
914759a815 | ||
|
|
a6fff9a950 | ||
|
|
358cb55d50 | ||
|
|
bbf6b0475d | ||
|
|
bf40b40f96 | ||
|
|
e80b226ba2 | ||
|
|
90808551f0 | ||
|
|
f25a7d3884 | ||
|
|
d10586c432 | ||
|
|
83d4bd12fa | ||
|
|
5fabcdee8a | ||
|
|
a70c9e0b4f |
150
JOURNAL-V2.md
150
JOURNAL-V2.md
@@ -1,6 +1,5 @@
|
||||
---
|
||||
type: journal
|
||||
note_J8: Phase 8.G LIVREE 2026-05-14 - voir PILOTE-RAG-PE.md pour details
|
||||
project: NAV V2
|
||||
created: 2026-04-14
|
||||
status: actif
|
||||
@@ -12,101 +11,6 @@ Journal technique de la V2. Décisions, anomalies, points bloquants, TODOs.
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-08 — Fix mobile + chatbot prod (cause racine résolue)
|
||||
|
||||
**Commits :** session loggée sur main (pushé sur gitea)
|
||||
**Pattern :** pilote direct, 2 batches successifs, ~3h, 11 fichiers
|
||||
|
||||
### Cause racine bug "chatbot Carte 1 == Carte 2"
|
||||
|
||||
`/api/chatbot-reseaux` était **404 en prod** (jamais déployé) — explique pourquoi 5 cycles de fix précédents (ChatbotReseaux.vue prop endpoint, useRoute fallback, useMarkdown direct, etc.) n'ont rien donné : le code source était correct depuis le début. Le rebuild + redeploy de cette session résout le bug.
|
||||
|
||||
**Verif :** `curl -s -X POST https://aep.trans-former.fr/api/chatbot-reseaux` → 200 + réponse distincte de `/api/chatbot`.
|
||||
|
||||
### Batch 1 — fixes mobile principaux
|
||||
|
||||
- Hamburger app.vue : ajout Jobs + Manifeste + Soutenir, ré-ordonnancement (Manifeste dans 2e groupe avec À propos/Soutenir/Signaler)
|
||||
- BandeauBas.vue : FAB cœur jaune mobile retiré (Soutenir migré dans hamburger via lien Liberapay direct)
|
||||
- agences.vue mobile : 3e onglet "Graphe" ajouté + masquage MobileSheet en mode graphe (canvas fullscreen)
|
||||
- a-propos.vue : section 1 "Mission" retirée (devient pop-up Carte 1) + `overflow-x: hidden` sur `.apropos-page` + retrait `white-space: nowrap` problématique sur `.badge-detail`
|
||||
- pages/manifeste.vue : nouvelle page (texte version `manifeste-page-carto-V1.md`, sans le diagramme ASCII pour V1 web)
|
||||
- components/MissionPopup.vue : nouveau composant générique (props `title`, `ctaLabel`, `storageKey`, slot pour contenu, `:slotted()` pour styles)
|
||||
- index.vue : intégration MissionPopup + bouton (i) `position:fixed` bottom-left + auto-show 1ère visite via `localStorage.aep_mission_seen`
|
||||
- trouver-du-taf.vue : toggle "Filtres [N] [chevron]" mobile-only (`@media max-width: 767px`) avec `taff-filters-collapsible` max-height transition
|
||||
- FicheModal.vue + FicheModalV2.vue : sur mobile `top: 76px` + `max-height: calc(100dvh - 92px)` au lieu de `top: 50% translate(-50%, -50%)` + `max-height: 90vh` qui mordait sur le header
|
||||
|
||||
### Batch 2 — pop-up Carte 2, logo, intro Jobs, labels graphe
|
||||
|
||||
- agences.vue : pop-up Réseaux AEP avec MissionPopup (storageKey `aep_reseaux_seen`, ctaLabel "Explorer les 120 réseaux") + bouton (i) flottant
|
||||
- app.vue logo header : badge AEP + 2 spans `logo-line-1` ("Architecture") / `logo-line-2` ("d'Écologie Politique") avec font-size responsive (0.7rem mobile → 0.85rem ≥1024)
|
||||
- trouver-du-taf.vue : `<details class="taff-pedago" open>` avec 3 blocs (deux onglets, trois étiquettes, cinq axes) + onglet "Plateformes B2C" → "Pour archi indépendants"
|
||||
- GraphView.vue : `d3NodeSelection.filter(type==='structure').append('text')` avec class `graph-struct-label`, `dy: -(d.r + 5)`, font-size 9.5px, halo via `paint-order: stroke; stroke: var(--nav-bg)` (style global non-scoped pour piercer D3)
|
||||
|
||||
### Bug d'opération à retenir
|
||||
|
||||
Lors du 1er déploiement batch 2, `bash deploy.sh` semblait OK (HTTP 200) mais le HTML en prod ne contenait pas les modifs. **Cause** : Dropbox sync a effacé `.output/` entre `npm run build` et le tar SCP — le tar a uploadé un `.output` quasi-vide. Solution : 2e cycle clean (`Remove-Item .nuxt/dist + .output`) + rebuild + redeploy avec `yes y |` (skip confirm interactif `.env diff`).
|
||||
|
||||
**Réflexe à intégrer** : après build, vérifier `grep -o "<un-fragment-de-modif>" .output/public/_nuxt/*.js | head` AVANT le deploy. Si 0 match → ne pas deploy, rebuild.
|
||||
|
||||
### Bug de communication à retenir
|
||||
|
||||
Jules a signalé "le logo n'a pas marché", "B2C pas renommé", "hamburger pas modifié" alors que le HTML en prod contenait bien les modifs (vérifié curl avec `?nc=$(date +%s)`). **Cause** : cache navigateur / service worker Nuxt. Réflexe à mettre en place pour /done de toute session web : si Jules dit "ça n'apparaît pas", vérifier curl en bypass cache AVANT de chercher un bug. Si match curl → demander hard refresh (Ctrl+Shift+R).
|
||||
|
||||
### Reste à faire (batch 3)
|
||||
|
||||
Voir `0 INBOX/PROMPTS/cascade-megaboum/REPRISE-aep-carto-fix-batch3.md` :
|
||||
- Bouton "+" → sélecteur 3 cartes (Entraide/Réseaux/Jobs)
|
||||
- Pop-up explication 5 axes Jobs (paragraphe par axe)
|
||||
- Pop-up Carte 1 visibilité (option à clarifier avec Jules)
|
||||
- GraphView Carte 1 (centres = hashtags, couche échelle activable) — gros chantier session dédiée
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-27 — Session V3 : Finition mobile + Blog Liberapay + 3 deploys
|
||||
|
||||
**Commit :** `a02a555` — feat(mobile): accordéon outremer, hamburger nav, logo AEP, fiches cliquables, chatbot fullscreen
|
||||
**Pattern :** agents parallèles (3 × Sonnet) pour les 3 SSH indépendants — ~90s total vs ~20min séquentiel
|
||||
|
||||
### Changements implémentés
|
||||
|
||||
**B — OutremerMap.vue : accordéon vertical DOM-TOM**
|
||||
- Template : row horizontale → accordéon `<button>` + `v-show` par territoire
|
||||
- Lazy-init Leaflet : `initSingleMap(domName)` appelé au 1er clic (plus de `initMaps()` en `onMounted`)
|
||||
- `invalidateSize()` sur ré-ouverture d'une carte déjà initialisée
|
||||
|
||||
**E — app.vue : hamburger mobile**
|
||||
- Bouton `lg:hidden` tout à droite de `<!-- Actions droite -->`
|
||||
- Dropdown `v-if` : 5 liens (/, /agences, /rag, /a-propos, /signaler)
|
||||
- `z-index: 9999` en inline style sur le dropdown
|
||||
- `watch(() => route.path)` → ferme le menu à chaque navigation
|
||||
- **Fix stacking context :** header → `relative z-[9999]` (sans `position`, le z-index Tailwind n'avait pas d'effet → dropdown passait sous Leaflet)
|
||||
|
||||
**F — app.vue : badge "A" → "AEP"**
|
||||
- `w-7 h-7` → `h-7 px-2`, `text-sm` → `text-xs tracking-tight`
|
||||
|
||||
**G — pages/index.vue : fiches ouvrables mobile**
|
||||
- `onSelectOrgMobile` : ajout `storeFiltersForBack()` + `router.push('/fiche/${id}')`
|
||||
- NB : `router.push` était déjà là (modif pilote antérieure) — seul `storeFiltersForBack` ajouté
|
||||
|
||||
**H — ChatbotSheet.vue : fullscreen + scroll lock iOS**
|
||||
- `92dvh → 100dvh`, `border-radius: 16px 16px 0 0 → 0`
|
||||
- `defineProps` → `const props = defineProps` (fix "can't find variable: props" en prod)
|
||||
- `watch(props.modelValue)` → lock `document.body.style.overflow` + `document.documentElement.style.overflow`
|
||||
- `onUnmounted` → cleanup overflow
|
||||
|
||||
**A — Blog trans-former.fr : Liberapay retiré**
|
||||
- VPS `/opt/astro-site/src/layouts/PostLayout.astro` : import + `<DonateButton />` supprimés
|
||||
- Docker rebuild → 31 pages, HTTP 200
|
||||
|
||||
**C — Website pro deploy**
|
||||
- `index.astro` SCP → `/opt/astro-pro/`, Docker rebuild → 13 pages, HTTP 200
|
||||
|
||||
### TODOs ouverts AEP
|
||||
- [ ] Valider visuellement les 8 fixes sur tel (Jules)
|
||||
- [ ] Pousser nav-carte sur Gitea (`git.trans-former.fr/jules/nav-carte`)
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-15 — Session 5 : Corrections post Phase 2 (11 retours Jules)
|
||||
|
||||
**Exécutant :** Sonnet (agent autonome full auto)
|
||||
@@ -1054,57 +958,3 @@ Incohérence entre `deploy.sh` (rsync vers `/opt/nav-carte/`) et `nav-carte.serv
|
||||
- **Caching API organisations** — actuellement re-fetch NocoDB à chaque render
|
||||
- **Full-text search côté client** — Fuse.js sur descriptions enrichies
|
||||
- **Mode offline / PWA** — manifest + service worker pour usage terrain
|
||||
|
||||
---
|
||||
|
||||
## Décisions structurantes (mémoire profonde)
|
||||
|
||||
> Archive des décisions structurantes du projet nav-carte (AEP V1/V2/Codev/Carte 3), déchargée hebdo depuis coordo-agent-dev. Tri chronologique inverse (plus récent en haut). Copies verbatim, pas de reformulation.
|
||||
|
||||
### 2026-W19 (décharge 2026-05-13)
|
||||
|
||||
- [W19 — 2026-05-08 19:21] **AEP nav-carte fix mobile batch1+2 LIVE + cause racine chatbot Carte1=Carte2 résolue** (~3h pilote direct, 2 batches successifs, 11 fichiers). **Cause racine identifiée** après 5 cycles de fix précédents infructueux : `/api/chatbot-reseaux` était **404 en prod** (jamais déployé). Le code source nav-carte était correct depuis le début. Rebuild + redeploy = bug résolu (vérifié curl POST sur les 2 endpoints, réponses distinctes). **Batch 1** : hamburger refondu (Jobs/Manifeste/Soutenir), FAB cœur jaune retiré, 3e onglet Graphe mobile sur agences, /a-propos refondue + scroll latéral fixé, page /manifeste créée (texte version page-carto-V1), MissionPopup générique avec slot/props (storageKey, title, ctaLabel) auto-show 1ère visite, filtres Jobs mobile repliables (toggle "Filtres [N]"), FicheModal/V2 décalage `top:76px` mobile pour ne plus mordre header. **Batch 2** : pop-up Carte 2 Réseaux AEP, logo header `Architecture d'Écologie Politique` en clair sur 2 lignes (logo-line-1/2 responsive), onglet "Plateformes B2C" → "Pour archi indépendants", intro pédagogique repliable Jobs (2 onglets / 3 tags / 5 axes éthiques), labels noms structures sur GraphView (D3 append text + halo via `paint-order: stroke`). **Pattern d'opération critique découvert** : Dropbox sync efface .output entre `npm run build` et `tar | ssh` du deploy.sh — 1er deploy batch 2 a uploadé un .output quasi-vide sans erreur visible (HTTP 200 trompeur). Réflexe : `grep "fragment-modif" .output/public/_nuxt/*.js | head` AVANT deploy. **Pattern de communication** : Jules a signalé "modifs pas faites" alors que HTML prod contenait bien les modifs (vérifié curl) — cache navigateur / service worker. Réflexe : si "ça apparaît pas", curl bypass cache AVANT chercher bug, puis demander hard refresh. Git : commit propre + push gitea/main (`yes y | bash deploy.sh` pour skip confirm interactif `.env diff`). Prompt batch 3 dans `0 INBOX/PROMPTS/cascade-megaboum/REPRISE-aep-carto-fix-batch3.md`.
|
||||
|
||||
- [W19 — 2026-05-07 17:18] **AEP Carte 3 "Trouver du taf" — T2 scoring 5 axes + T3/T4 LIVE** : 24 plateformes scorées (7✅/14⚠️/3❌), plateformes-taff.json prod, page /trouver-du-taf complète (filtres, grille 1 col, modal fiche, chatbot FAB Guide IA). Endpoints /api/chatbot-taff (import JSON statique + Mistral Small) + /api/chatbot-reseaux (keyword search 120 structures). ChatbotReseaux.vue créé (standalone Carte 2). useMarkdown.ts inline styles CSS-free. Onglet Jobs nav desktop. Bug dev : cache .nuxt corrompu par agent concurrent → bat rmdir+délai 12s. Chatbot séparation + markdown à vérifier en PROD (pas dev). Menu hamburger mobile Jobs manquant. Branche main.
|
||||
|
||||
- [W19 — 2026-05-07 01:11] **Codev MVP LIVRÉ en prod** — cascade M1→M5 complète (5 agents Sonnet), merge feat/codev-mvp→main, push Gitea. App entraide /codev live avec lock screen, formulaire, graphe D3 force-directed, annuaire table sticky, 2 modes matching (Solution tokenize direct + Alliance Jaccard), mode admin (DELETE fiche), QR code public, panel mobile bottom sheet. Décision build : TOUJOURS depuis C:\tmp\nav-build (Dropbox corrompt cache Vite = 500 prod). Algo fix critique : Solution compare textes besoin↔offre directement (ignore hashtags), évite que les 3 modes donnent le même graphe.
|
||||
|
||||
- [W19 — 2026-05-06 17:11] **MP-TAFF T1b scraping compléments DONE** — BrowserMCP utilisé pour débloquer Trustpilot (7 pages) + instao.fr + francemarches.com. `T1-output-plateformes.json` finalisé : 25 plateformes, 7 avec feedback Trustpilot. Signaux forts T2 : Archionline 2.4/5 (spam + permis PLU non conformes), hemea = courtier déguisé en MOE, TMA = meilleur ratio pros. Prochaine étape : **MP-TAFF T2 scoring 5 axes éthiques**.
|
||||
|
||||
- [W19 — 2026-05-06 13:30] **Cascade dispatchable Codev MVP livrée — 9 fichiers prêts à dispatcher en session Opus dédiée** : Cadrage `/orchestrateur` app entraide / co-développement Jules pour facilitation IRL jeudi 8/05 ~10 amis. 5 intersections tranchées : URL `/codev` (sous-route aep.trans-former.fr pas nouveau domaine), naming "Co-développement"/"Entraide entre pairs", mot de passe partagé `merci`, persistance NocoDB nouvelle table `codev_fiches` (carto vit hebdo, pas effacée), démo route publique `/codev/demo` (10 prénoms factices pour pitch univ). **Démêlage trinôme** (problème mathématique flaggé par Jules) : matching pair-only en MVP, trinômes émergent visuellement du D3 force-directed (triangles dans le graphe), pas de logique trinôme explicite codée — économie combinatoire majeure. 3 modes : Solution (besoin→offre asymétrique avec flèche), Alliance (besoin↔besoin symétrique), Surprise (offre↔offre symétrique). **Algo matching MVP simple** sans IA : Jaccard sur hashtags si présents, sinon Jaccard sur tokens FR (stop-words filtrés) seuil 0.15 — V2 embeddings si scaling. **Réutilisation pattern GraphView.vue** (~700 lignes existant) en simplifié (~200-300 lignes pour CodevGraph) — pas de greenfield. Cascade dans `codev-build/` (même pattern que `aep-communaute-build/`) : INDEX (table+décisions+statut) + META-PROMPT-OPUS (preflight+dispatch séquentiel+1 checkpoint deploy+format récap) + M1 (NocoDB table API + 3 endpoints + runtimeConfig) + M2 (lock+fiche+middleware auth skip /codev+/codev/demo) + M3 (CodevGraph D3 + page carto affichage seul) + M4 (matching 3 modes + boutons + animation force.alpha(0.5).restart()) + M5 split phase 1 (démo+build local+stop) + phase 2 (deploy prod après checkpoint Jules) + FEEDBACK-PASSES (10 risques pré-dispatch corrigés) + PHRASE-LANCEMENT (one-shot pour session Opus). **Patches en cours de session** : M1 fait création table NocoDB en autonomie via API (token NocoDB `e9rU...` déjà dans nav-carte/.env, endpoint `POST /api/v2/meta/bases/{baseId}/tables`), M5 phase 2 sync .env VPS automatiquement (ssh append + restart aep), règle d'or "couper M4/M5 si timing serré" retirée du META car Jules a confirmé scope OK. **1 seul checkpoint Jules** : entre M5 phase 1 (build local 200) et M5 phase 2 (deploy prod). Pattern méga-dispatch consécutif #5 (avant : Simulateur V2 30/04, Méga-cascade AEP V2 30/04, MP-TAFF cascade-megaboum 06/05, AEP V2 graphe PV2-5 micro-itérations 06/05). À dispatcher en session Opus dédiée (jauge propre, ~1h30 cascade attendue + ~5 min action manuelle Jules NocoDB).
|
||||
|
||||
- [W19 — 2026-05-06 21:30→01:45] **AEP V2 graphe interactif PV2-5b/e/f/g + chatbot v2 vivant + decouverte 2 repos imbriqués** : 4 commits vault `feat/aep-v2-cartobifurcation` (062337a sidebar+chatbot intégré, 2adffdf toggle Familles/Pratiques+popover famille, 5d7556a carte unifiée layers superposables+popover hashtag+lisibilité, e1ae1b9 popovers enrichis+FicheFamilleModal). 4 micro-itérations dispatch agent Sonnet en séquentiel, pilote commit lui-même chaque fois (pattern anti-hallucination établi après agent 1 a inventé hash 755d1ef). **Décisions design** : skip PV2-5c bicolores (8/120 structures = effet marginal), toggle PV2-5e exclusif fusionné en layers superposables PV2-5f (intuition Jules : séparation artificielle), Pratiques default OFF perf-friendly (174 noeuds + 640 liens si tout coché), FicheFamilleModal composant dédié réutilisable, skip définitions hashtags (pas de contenu source) → ligne générique "portée par N structures de M familles". **Découverte 2 repos git imbriqués** (vault parent ATIS-IPCJRA branche v2 + sous-repo nav-carte/ branche v1.1 distincte) → expliquait les "hallucinations" branche des agents. Notée dans `ATIS-Dev.md` section "Pièges connus" + réflexe pilote `git rev-parse --show-toplevel` au démarrage. **Chatbot v2** : endpoint v1→v2 dans ChatbotPlaceholder.vue (commit sous-repo 5878c56), vectorize-v2.js renommé en .cjs (incompat ESM type=module), payload Mistral fixed `inputs`→`input`, 120 embeddings générés (3.5MB embeddings-v2.json gitignored), patch vectorSearch.ts process.cwd() au lieu d'import.meta.url (bug Nitro bundle). **Rotation clé Mistral** : nouvelle clé `PXsPUhk...` notée _System/API-credentials.md, appliquée local .env + VPS /opt/aep/.env (backup .env.bak.before-rotation-20260506) + restart aep + smoke test prod chatbot v1 OK. **Doc features graphe** créée : `aep-communaute-build/PV2-5-FEATURES-GRAPHE.md` (briefing agent qui découvre en 30 sec). **Backlog différé** : PV2-5d sous-noeuds projets emblématiques (perf-critique 480 noeuds), définitions hashtags (session écriture éditoriale Jules), décision repo imbriqués (intersection stratégique demain). **Test live chatbot v2 bloqué** par lock Dropbox sur .nuxt/dev → prompt cloture demain `PV2-5h-test-chatbot-v2-local.md`.
|
||||
|
||||
- [W19 — 2026-05-06 02:30] **MP-TAFF V2 cadré + prompt scraping autonome séparé + rename atis-humain** : Brainstorm divergent Jules pour Carte 3 AEP "Trouver du taf en archi". 5 axes scoring éthique AEP validés (Rémunération / Transparence / Pratiques pro / Écologie / Matching) avec définitions + critères + échelles ✅⚠️❌ — c'est le différenciant central vs annuaires neutres. Décisions verrouillées : freelance only V1 (70% archis indé = cible la plus en galère), IA applique scoring (critères validés une fois = pas de validation fiche par fiche), onglet `aep.trans-former.fr` (pas sous-domaine), branche parallèle `feat/aep-taff-v1` (pas attendre merge V2), SEO reporté V2 (skill `/seo-page-aep` à créer). MP-TAFF V2 ~430 lignes avec 2 tours auto-feedback (table décision tag global, format desc IA 5 sections, §risque juridique nominatif, calibrage chatbot 3 questions, préflight conflit branche V2 + i18n). **MP-TAFF-T1-scraping-autonome.md créé** (~270 lignes) — sortable sur PC séparé pour parallélisation pendant qu'ATIS Dev bosse T0/T2/T3+. Pattern routing scraping documenté : Jina d'abord → crawl4ai SPA → BrowserMCP RGPD/auth → manuel flag. Forums commu intégrés : Team.Archi, Reddit r/Architecture FR, presse pro (Le Moniteur, AMC, D'A). Output JSON structuré consommable par T2. 🔒1 simplifié = récap scope synthétique (10 min Jules). Backlog cascade : MP-MENTOR (carte 4 entraide), MP-CROSS (n8n + GitHub OS) restent prêts. **Rename `tara` → `atis-humain`** : skill renommée, routing patché dans `atis-archi.md` ligne 390 et `ATIS-agents-specialises.md` ligne 29. Anciennes refs à Tara la personne (Mediathèque, done.md, ton-jules.md) inchangées.
|
||||
|
||||
- [W19 — 2026-05-05] **AEP V2 PV2-4+5+8 DONE + vue graphique D3** : PV2-4 (887 edges, 480 projets, reseaux-bifurcation.json 847KB). PV2-5 UI (NavMapV2, HashtagFilter, IntentionBanner, FicheModalV2, palette 5 familles, geocodage 118/120, GraphView.vue D3 force-directed). PV2-8 RAG (chatbot-v2.post.ts + vectorize-v2.js). Fixes UI : onglets outremer desktop, sidebar scroll, chips colorees, hashtags repliables, F6 filtre, intention overlay localStorage. EDITO-V2.md cree. 13 commits feat/aep-v2-cartobifurcation. 🔒 PV2-5 checkpoint visuel Jules en attente.
|
||||
|
||||
### 2026-W18 (décharge 2026-05-13)
|
||||
|
||||
- [W18 — 2026-05-03] **AEP V2 PV2-2ter DONE** : 10 emails récupérés. Volet A F2 (amaco/LTE), F4 (toitsdechoix/HPO/HabiterAuvergne/EmmanuelleDucos). Confirmed not public : F3 (LALCA/Sentiers/AOA/METALAB), F4 (unitoit/atelier15/a-tipic/HPF/atcoop). Blocages : rfcp.fr GravityView JS, a-tipic HTTP 400. Volet B F6 : 7 flags + 4 emails (Forensic/Centrala/NBL/Assemble) + 1 new fiche Collectif Etc (contact@collectifetc.com). Seed 122 fiches. Commit `7ce8e12`.
|
||||
|
||||
- [W18 — 2026-05-03] **AEP V2 PV2-2 F1 DONE** : 26 fiches réemploi & filières (14 V1 + 12 nouvelles). Nouvelles : Cycle Up (contact@cycle-up.fr), Backacia (form), Mobius (contact@mobius-corp.com), AD VITAM MATERIAL (reemploi@embuild.be), Cirkla (c/o insitu), CANCAN (contact@collectifcancan.fr), HArquitectes (harquitectes@harquitectes.com), isla (press@isla-architects.com), jdviv BE (EUmies 2026 co-winner), SalvoWEB, B+L Architectes, REFAIR/BDR. 6/12 emails high. Hashtag nouveau proposé : #amo-reemploi (AMO/diagnostic PEMD spécialisés). BrowserMCP off toute la session → Jina only (Reuse Foundation non scrapée, jdviv URL à confirmer). Commit `656cc2d`. **PV2-2 5/5 familles DONE.** → Reste PV2-3+PV2-4.
|
||||
|
||||
- [W18 — 2026-05-03] **AEP V2 PV2-2 F2 DONE** : 36 fiches frugalité & low-tech (22 V1 + 14 nouvelles). Nouvelles : Lacaton&Vassal (Pritzker 2021), Kéré Architecture (mail@kerearchitecture.com), Anna Heringer, CRATerre (secretariat@craterre.org), Les Grands Ateliers, AsTerre (secretariat@asterre.org), RFCP, EnvirobatBDM, NUNC, LAPS, Dorodango, BEES, amàco (contact@amaco.org), Lehm Ton Erde. 4/14 emails high conf. Sources productrices : AsTerre annuaire (19 agences archi identifiées), Pritzker (2 nouvelles), frugalite.org réseau. Blocages : RFCP annuaire JS, lehmtonerde.at 422, OFF laureats non scraped, BrowserMCP instable (3 décos). Commits `8808a35`+`301c3be`. → Reste F1 Réemploi.
|
||||
|
||||
- [W18 — 2026-05-03] **AEP V2 PV2-2 F3 DONE** : 22 fiches architecture sociale & précarités (11 V1 + 11 nouvelles). Nouvelles : PEROU, Plateau Urbain (SCIC), Bellastock, ASF France, Rural Studio, Forensic Architecture, Collectif Parenthèse, WoMa, Fab City Grand Paris, CivicWise. 6/11 emails high conf (PEROU·Bellastock·Rural Studio·Parenthèse·WoMa·CivicWise). Sources : Quatorze /partenaires-new (meilleur hub), YWC lieux (Grands Voisins + Coco Velten), A&P filtres. 4 multi-famille (Bellastock F3+F5, Parenthèse F3+F4, WoMa F3+F4, YWC F3+F4+F5). Commit `d2028f5`. → Reste F1 + F2.
|
||||
|
||||
- [W18 — 2026-05-02 23:23] **AEP V2 PV2-2 F4 DONE** : 20 nouvelles fiches collectifs/écolieux/AMO via Jina (BrowserMCP déco → pivot Jina). 11/20 emails high conf. Structures-clés : RAHP, HPF, Habicoop, Hab-Fab SCIC, Regain SCIC, Coopérative Oasis, Mietshäuser Syndikat. 9 contacts partiels (tel/form) à compléter BrowserMCP. Commit `f54afe3`.
|
||||
|
||||
- [W18 — 2026-05-02 19:51] **AEP V2 PV2-2 F5 DONE** : 15 fiches urbanisme transition via BrowserMCP. 7 emails high (CLER/TEPOS/Coloco/Bas Smets/EP/FNAU/Atelier Georges). Commit `56c93eb`.
|
||||
|
||||
- [W18 — 2026-05-02 18:17] **C3 smoke test + PV2-1 scrape DONE** : C3 = 2 bugs (P0 algo-config.json 404, P1 redirect 301 manquant) + rapport `C3-RAPPORT.md`. PV2-1 = 5/5 emails trouvés via BrowserMCP (Opalis/Frugalité/Quatorze/Tepop/Transition France), commit 6df5b84. Stack BrowserMCP validé pour batch PV2-2. Patcher P0+P1 avant merge master simulateur.
|
||||
|
||||
- [W18 — 2026-04-30 12:00] **AEP Cascade V2 Phase A2+A3 figées + PILOTE-V2 doc pilote vivant** : Session "AEP COMMU V3 suite" /atis-archi puis /atis-dev. SPEC-V2-FEEDBACK-DEV.md livré (faisabilité pipeline 3 passes, email cascade 5 niveaux estim 65-80%, reclaim JWT HS256 30j single-use, grain JSON suffisant si desc_longue 600+ + 3 sources, branches 2 dédiées, pre-flights standardisés, fix BOM). PILOTE-V2.md créé comme **source de vérité vivante** à la racine `aep-communaute-build/` (Jules pilote depuis ce fichier ; tout Opus suivant le lit en premier). 13 prompts PV2-X dans `0 INBOX/PROMPTS/aep-v2-cartobifurcation/` (README + PV2-0 preflight + PV2-1 scrape test 5 fiches + PV2-2 5 agents recherche par famille en parallèle (idée Jules : recoupement multi-famille = signal politique transversalité) + PV2-2bis recoupement + PV2-3 passe2 analyse + PV2-4 passe3 croisements + PV2-5 refonte UI + PV2-6 reclaim + PV2-7 badges statut + PV2-8 RAG coexistence v1+v2 + PV2-9 bandeau regards d'ailleurs + PV2-10 E2E build + PV2-11 batch emails + tri DOM-TOM). NEXT-SESSION-PROMPT-V3.md créé pour relais. **Amendements Jules sur SPEC-V2** : famille 1 "Réemploi & matière" → "Réemploi & filières", AMO ajouté famille 4 (Tepop/Hab-Fab/Habicoop), famille 5 Urbanisme transition gardée fermement (cibler scrape agressif), centres ressources DOM-TOM → carte ressources existante (sauf Caribois praticien direct), pas de cap fiches sur agents recherche, stratégie snowball depuis nodes établis (Frugalité, Opalis, A&P) + crawl collaborateurs/influences/prix/distinctions. Sessions batch nocturnes dimensionnées Claude Max 5h Opus. PV2-0 partiel exécuté : branche `feat/aep-v2-cartobifurcation` créée depuis origin/main (tracking unset = anti-push main accidentel) + BOM UTF-8 retiré de `nav-carte/deploy.sh`. PV2-0 effectif (checkout + structure `nav-carte/V2-cascade/` + hook pre-commit no-BOM + sources-par-famille.md) à faire prochaine session après commit/stash des 830 fichiers pending sur `feat/aep-website-v1.1`.
|
||||
|
||||
- [W18 — 2026-04-30] **Cascade MEGABOUM opérationnelle — 4 MP rédigés + cockpit lisible** : `0 INBOX/PROMPTS/cascade-megaboum/` créé avec `00-COCKPIT-CASCADE.md` (index lisible en 3 min par tout Opus dispatché, format différent de la mégaspec — celle-ci reste lecture profonde optionnelle). 4 méga-prompts prêts à dispatcher : **MP-TAFF** (app trouver du taf B2C/B2B/appels publics, ~5h, étend `aep-communaute-build/`), **MP-MENTOR** (app mentorat-entraide M7-M, ~5h, post-TAFF), **MP-CROSS** (pipeline cross-posting n8n LinkedIn+Substack+Listmonk+@aep.politique + GitHub OS publish skills/lightrag/vps-kit, ~5h, parallèle), **MP-DESIGN** (création agent atis-design, prompt court ~1h via /create-agent + scrape Prisme.one). Brief archive `MP10-manifeste-aep-INFO-BRIEF.md` (chantier déjà lancé par Jules). Chaque MP démarre par CHECKPOINT 0 réflexion faisabilité (l'Opus lit, propose, attend OK Jules avant dispatch). Backlog explicite : page-cerveau Astro from scratch, méga-RAG FRACAS vague 1, atis-philosophe, frontend-slides, rename atis-humain (P1 30 min), Insta @julesneny n8n (Q3). LightRAG VPS DOWN **déclassé** : pas bloqueur P0 semaine si on ne fait pas méga-RAG, devient bloqueur quand on attaquera RAG. Cadence : Jules pilote au fil des jours, 1-2 MP/jour, 2 clusters max simultanés.
|
||||
|
||||
- [W18 — 2026-04-30 02:46] **Méga-cascade V2 AEP Phase A1 figée + 3 agents background livrés** : Session Opus orchestrateur "AEP commu V2". 9 intersections tranchées par Jules en un message (5 familles fusion F4+F5, UX vignette + template carte 1, scope FR+Europe francophone + capture incidente régénératifs hors scope, articulation pensées<->structures reportée V2, passe profonde GO, email champ soft, charte reportée, filtre échelle drop, A3 absorbé A1). SPEC-V2.md figée. 3 agents Sonnet dispatchés en parallèle background : VOIE 2 V1.1 nav-carte (4 commits `feat/aep-v1.1-nav-carte` basée sur feat/aep-pratiques-regeneratives car main pré-V1 ; PA1 DOM-TOM pattern desktop 2 onglets, PA3 bouton Proposer contextuel, PA5 chatbot pratiques régé Mistral, 6/6 bugs E2E M1-M3+L1-L3 corrigés, build Nuxt OK), VOIE 3 website (1 commit `feat/aep-website-v1.1` e95f693 ; PB1 hamburger 4 entrées + stubs /manifeste /ressources /signaler ; **/!\ livré sur renovation-energetique.trans-former.fr - website pro, pas aep.trans-former.fr - à clarifier prochaine session**), PASSE PROFONDE (52 pratiques régé + 99 ressources institutionnelles analysés ; 5 familles confirmées avec garde-fous F5 ; 46 hashtags ; 7 cas limites + 4 hors-grille type "mouvement-manifeste" potentiel ; **226 acteurs candidats enrichissement carte ressources : P1=56 fiches urgentes dont 30 CAUE manquants top dpts + 4 CAUE DOM-TOM + 9 MA régionales + 2 CROA DOM ; constat critique : 0 DOM-TOM + 6/92 CAUE dans carte ressources actuelle**). 5 questions stratégiques remontées pour Phase A2 (Q-PP1 5 vs 6 familles, Q-PP2 type mouvement-manifeste, Q-PP3 F5 différée passe 2, Q-PP4 double-référencement KEBATI/AQUAA/RBD/Envirobat, Q-V3 site cible hamburger). NEXT-SESSION-PROMPT.md pré-écrit pour reprise propre Phase A2 /atis-dev. Pattern méga-dispatch consécutif #4. Tokens : 130k orchestrateur + ~451k délégués sous-agents.
|
||||
|
||||
- [W18 — 2026-04-30 01:42] **Méga-cascade V2 AEP cadrée** : `MEGA-V2.md` master orchestration 3 voies créé. VOIE 1 = V2 conceptuelle (refonte carte écosystème AEP en carte des réseaux de bifurcation, 5-6 familles éditoriales, reclaim email magique, pipeline IA cascade 3 passes, ~75-100 fiches). VOIE 2 = V1.1 nav-carte (items 1+2+4+5+8 ; item 3 absorbé par VOIE 1). VOIE 3 = website astro-site (hamburger + manifeste + ressources). Décisions Jules : `/atis-archi` pilote la spec V2 conceptuelle Phase A1, `/atis-dev` en relai Phase A2. Apports critiques : champ email obligatoire dans le scrape (sans email = pas de reclaim), passe profonde sur fiches existantes (~52+80) pour faire remonter hashtags sous-familles, item 4 (filtre échelle) à questionner, A3 absorbable dans A1, page Manifeste à ajouter au hamburger website. Phrase d'amorce + effort `high` recommandé pour la session Opus dédiée demain. PHRASE-LANCEMENT-OPUS-V2.md marqué SUPERSEDED. 2 briefs INBOX (V2-BRIEF-AGENT-OPUS + V2-RECAP-PROJET) déplacés dans aep-communaute-build/.
|
||||
|
||||
- [W18 — 2026-04-29 11:48] **AEP scrape P1-P7 FAIT** : BrowserMCP (P1 architecture-precarites.fr : 200+ projets, 5 catégories) + Jina (P4 vegetal-e ✅, P6 colorado-architecture ✅, P7 karibati ✅, P3 caribois ✅). P2 archidev bot-protégé + P5 envirobat 422 → consultation manuelle. `scrape-browsermcp.json` créé (7 entrées). Email auteurs architecture-precarites.fr envoyé par Jules. INCLURE : vegetal-e (5/8), envirobat-RE (7/8), karibati (5/8). EXCLURE : caribois (2/8), colorado (3/8).
|
||||
|
||||
- [W18 — 2026-04-29] **AEP V1 E2E PASS** : 5/5 scénarios OK (3 mobile, 3 laptop). Branche `feat/aep-pratiques-regeneratives` prête à merger main. `E2E-RESULTS.md` créé. Bugs mineurs capturés : M1 chips a11y + M2 reset searchbox + M3 floating button + L1 redirection.
|
||||
|
||||
- [W18 — 2026-04-29 08:11] **AEP V1 LIVRÉE** : 52 fiches prod (`aep.trans-former.fr/pratiques-regeneratives`), 12 commits feat/. V1.1 mode divergent cadrée (8 items brain-dump Jules).
|
||||
|
||||
91
V2-cascade/Pipe-recherche-famille-agent.md
Normal file
91
V2-cascade/Pipe-recherche-famille-agent.md
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
type: process
|
||||
projet: AEP nav-carte V2
|
||||
created: 2026-05-03
|
||||
---
|
||||
|
||||
# Pipe — Recherche agent par famille (PV2-2)
|
||||
|
||||
> Méthode distillée de la session F3 (architecture sociale). Appliquer pour F1, F2, et futures familles.
|
||||
|
||||
---
|
||||
|
||||
## Règle n°1 : Pages /partenaires des structures V1 en premier
|
||||
|
||||
Les pages `/partenaires`, `/reseau`, `/ecosysteme`, `/acteurs` des structures **déjà en V1** sont le hub le plus dense.
|
||||
|
||||
Résultats session F3 :
|
||||
- Quatorze `/partenaires-new` → 7 nouvelles structures en une page (meilleure source)
|
||||
- YWC `/lieu/[projet]` → 2 partenaires (Plateau Urbain, Aurore)
|
||||
- A&P filtres → 5 structures (mais pas d'URLs directes)
|
||||
|
||||
**Séquence recommandée :**
|
||||
1. Ouvrir toutes les pages `/partenaires` des V1 de la famille concernée
|
||||
2. Extraire les noms + URLs des partenaires opérationnels (pas les financeurs)
|
||||
3. Seulement ensuite → recherche web ouverte
|
||||
|
||||
---
|
||||
|
||||
## Règle n°2 : Snapshot HTML immédiat pour les sites ambigus
|
||||
|
||||
Si une URL charge mais que la navigation ne répond pas (Airtable JS, React SPA) :
|
||||
|
||||
```
|
||||
→ Lancer mcp__browsermcp__browser_snapshot immédiatement
|
||||
→ Parser le YAML en 30 secondes
|
||||
→ Décider : base de projets (skip) ou liste de structures (continuer)
|
||||
```
|
||||
|
||||
Ne pas essayer 3 URLs alternatives avant d'avoir lu le snapshot. Sur A&P F3 : 10 min perdues.
|
||||
|
||||
---
|
||||
|
||||
## Règle n°3 : Email dans footer si /contact bloqué
|
||||
|
||||
Quand Cloudflare bloque `/contact` (Bellastock, etc.) :
|
||||
- Lire la homepage complète jusqu'au footer
|
||||
- L'email y est souvent en clair (ex : `contact@bellastock.com` trouvé dans footer)
|
||||
|
||||
---
|
||||
|
||||
## Règle n°4 : Paralléliser les scrapes contacts (jina batch)
|
||||
|
||||
```python
|
||||
# Passer une liste d'URLs à jina parallel_read_url
|
||||
urls = [
|
||||
"https://perou-paris.org/contact",
|
||||
"https://bellastock.com/contact",
|
||||
"https://plateau-urbain.com/contact",
|
||||
"https://asffrance.org/contact"
|
||||
]
|
||||
```
|
||||
|
||||
4 sites en parallèle = même temps qu'1 site séquentiel.
|
||||
|
||||
---
|
||||
|
||||
## Règle n°5 : Documenter les non-résolus dans le RECAP
|
||||
|
||||
Section `## Références non résolues` dans chaque `liste-famille-X-RECAP.md` :
|
||||
- Nom + source d'identification
|
||||
- Raison du blocage
|
||||
- Piste de résolution pour la prochaine session
|
||||
|
||||
---
|
||||
|
||||
## Structure de session type (~2h)
|
||||
|
||||
```
|
||||
Phase B — Discovery (45 min)
|
||||
├── B1 : Pages /partenaires des V1 de la famille (10-15 min)
|
||||
├── B2-B4 : Sites spécifiques listés dans le prompt (20-25 min)
|
||||
└── B5+ : Recherche web si manque (10 min)
|
||||
|
||||
Phase C — Scrape contacts (45 min)
|
||||
├── Batch jina parallel (4 sites à la fois)
|
||||
├── BrowserMCP pour les sites JS-only
|
||||
└── Fallback footer/homepage si /contact bloqué
|
||||
|
||||
Phase D — Tagging + JSON (30 min)
|
||||
└── Écriture JSON + RECAP + commit
|
||||
```
|
||||
0
V2-cascade/fiches-passe1/.gitkeep
Normal file
0
V2-cascade/fiches-passe1/.gitkeep
Normal file
33
V2-cascade/fiches-passe1/PV2-1-RECAP.md
Normal file
33
V2-cascade/fiches-passe1/PV2-1-RECAP.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# PV2-1 RECAP - Scrape test 5 fiches (BrowserMCP)
|
||||
|
||||
Date : 2026-05-02
|
||||
|
||||
| Famille | Structure | Email trouvé | Source | Confidence | Pages visitées | Erreurs |
|
||||
|---------|-----------|--------------|--------|------------|----------------|---------|
|
||||
| F1 | Opalis | OUI — info@opalis.be | scrape_home | high | 2 (/, /fr/contact) | - |
|
||||
| F2 | Frugalité Heureuse | OUI — contact@frugalite.org | scrape_home | medium | 1 (/) | Email obfusqué `[@]` |
|
||||
| F3 | Quatorze | OUI — contact@quatorze.cc | scrape_contact_page | high | 2 (/, /contact/) | - |
|
||||
| F4 | Tepop | OUI — tepop.asso@gmail.com | scrape_contact_page | high | 4 (/, /contact/, /a-propos/, /?page_id=124) | Slugs /contact + /a-propos → home |
|
||||
| F5 | Transition France | OUI — transitionfrance@gmail.com | scrape_about | high | 4 (/, /contact/, /qui-sommes-nous/, /comment-commencer/) | /contact + /qui-sommes-nous → 404, home > 60KB |
|
||||
|
||||
## Taux de trouvaille email
|
||||
|
||||
- Total : **5/5 (100%)**
|
||||
- High confidence : 4/5
|
||||
- Medium confidence : 1/5 (F2, email obfusqué)
|
||||
- Blocages détectés : aucun bloquant (pas de RGPD wall, pas de CAPTCHA)
|
||||
|
||||
## Pièges détectés
|
||||
|
||||
- **F2 Frugalité** : email obfusqué `contact[@]frugalite.org` dans le footer — nécessite regex ou lecture humaine, pas un mailto
|
||||
- **F4 Tepop** : WP avec URLs slug inexistantes (`/contact`, `/a-propos` → redirect home). Page contact réelle accessible via menu burger → `?page_id=124`. Piège temps : 2 pages "grillées" avant de trouver la technique burger
|
||||
- **F5 Transition France** : `/contact` et `/qui-sommes-nous` → 404. Home page > 60KB (snapshot BrowserMCP tronqué) — email récupéré par regex sur fichier sauvegardé automatiquement. Technique valide mais non-standard
|
||||
|
||||
## Recommandations pour PV2-2
|
||||
|
||||
- **5/5 emails trouvés → stack BrowserMCP OK pour batch, continuer**
|
||||
- Ajouter règle dans pipeline : si URL → même contenu que home (détect. par titre identique), tenter menu burger avant de marquer `not_found`
|
||||
- Ajouter règle : si snapshot > 30KB, sauvegarder + passer en mode regex (déjà géré auto par Claude Code)
|
||||
- Pour les emails obfusqués `[at]` / `[@]` : decoder systematiquement — tous fiables
|
||||
- F4 Tepop : préférer `?page_id=XXX` au slug pour les sites WP anciens sans permalinks propres
|
||||
- Pas de besoin de pivot multi-canal pour cette famille de structures — toutes accessibles via scrape direct
|
||||
29
V2-cascade/fiches-passe1/test/f1-opalis.json
Normal file
29
V2-cascade/fiches-passe1/test/f1-opalis.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"id": "test-f1-opalis",
|
||||
"nom": "Opalis",
|
||||
"url": "https://opalis.eu/",
|
||||
"famille_principale": 1,
|
||||
"famille_principale_label": "Reemploi et filieres",
|
||||
"pays": "BE",
|
||||
"raw_text_excerpt": "Building and renovating with reclaimed materials. Professional dealers, common materials, examples of projects. Opalis est un annuaire d entreprises. Pour vos questions, n hesitez pas a contacter directement les fournisseurs concernes.",
|
||||
"links_internes": ["/fr/fournisseurs", "/fr/materiaux", "/fr/projets", "/fr/documentation", "/fr/contact"],
|
||||
"email_contact": "info@opalis.be",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"type_juridique": "ASBL",
|
||||
"contact_form_url": "https://opalis.eu/fr/contact",
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/en", "/fr/contact"],
|
||||
"scrape_error": null
|
||||
}
|
||||
}
|
||||
32
V2-cascade/fiches-passe1/test/f2-frugalite-heureuse.json
Normal file
32
V2-cascade/fiches-passe1/test/f2-frugalite-heureuse.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"id": "test-f2-frugalite-heureuse",
|
||||
"nom": "Frugalite heureuse et creative",
|
||||
"url": "https://frugalite.org/",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Frugalite dans l architecture et le menagement des territoires. Rehabiliter ne plus construire. Menager ne plus amenager. Contenter ne plus consommer. S engager ne plus administrer. Faire mieux avec moins.",
|
||||
"links_internes": ["/a-propos-de-la-frugalite/", "/manifeste/", "/groupes/", "/ressources/", "/agenda/"],
|
||||
"email_contact": "contact@frugalite.org",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "medium",
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": "https://www.linkedin.com/company/manifeste-pour-une-frugalit%C3%A9-heureuse-cr%C3%A9ative/",
|
||||
"instagram": "https://www.instagram.com/frugalite_heureuse_et_creative/",
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null,
|
||||
"facebook": "https://www.facebook.com/frugaliteheureuse",
|
||||
"youtube": "https://www.youtube.com/c/Frugalit%C3%A9heureuseetcr%C3%A9ative"
|
||||
},
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email obfusque contact[@]frugalite.org dans le footer — medium confidence"
|
||||
}
|
||||
}
|
||||
30
V2-cascade/fiches-passe1/test/f3-quatorze.json
Normal file
30
V2-cascade/fiches-passe1/test/f3-quatorze.json
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"id": "test-f3-quatorze",
|
||||
"nom": "Quatorze",
|
||||
"url": "https://quatorze.cc/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale",
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "L association Quatorze experimente, developpe et promeut une architecture sociale et solidaire pour des territoires agiles et resilients. Nous privilegions la co-conception en phase etude et la co-construction en phase chantier.",
|
||||
"links_internes": ["/approche/", "/projets/", "/equipe/", "/contact/", "/lab14/", "/partenaires-new/"],
|
||||
"email_contact": "contact@quatorze.cc",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+33 7 60 99 87 76",
|
||||
"adresse": "84 avenue de la Republique, 75011 Paris",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": "https://www.linkedin.com/company/quatorze.cc/",
|
||||
"instagram": "https://www.instagram.com/quatorze.cc/",
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": "https://twitter.com/quatorzecc",
|
||||
"facebook": "https://www.facebook.com/quatorze.cc/"
|
||||
},
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/", "/contact/"],
|
||||
"scrape_error": null
|
||||
}
|
||||
}
|
||||
31
V2-cascade/fiches-passe1/test/f4-tepop.json
Normal file
31
V2-cascade/fiches-passe1/test/f4-tepop.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"id": "test-f4-tepop",
|
||||
"nom": "TEPOP - Territoire a energie populaire",
|
||||
"url": "https://tepop.fr/",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs AMO bifurcation",
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Dessiner la metropole ecologique et solidaire de demain avec la jeunesse des quartiers populaires. TEPOP collabore avec les jeunes sur des projets de co-conception et co-construction d espaces publics.",
|
||||
"links_internes": ["/?page_id=121", "/?page_id=124", "/?page_id=1369", "/"],
|
||||
"email_contact": "tepop.asso@gmail.com",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06.84.04.36.34",
|
||||
"adresse": "15 rue de Chabrol, 75010 Paris",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": "https://www.instagram.com/tepopassoc/",
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": "https://twitter.com/infotepop",
|
||||
"facebook": "https://www.facebook.com/assoTEPOP"
|
||||
},
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/", "/contact/", "/a-propos/", "/?page_id=124"],
|
||||
"scrape_error": null,
|
||||
"note": "Piege : /contact et /a-propos redirigent vers la home (pages slug inexistantes WP). Page contact reelle accessible uniquement via menu hamburger → ?page_id=124"
|
||||
}
|
||||
}
|
||||
31
V2-cascade/fiches-passe1/test/f5-villes-en-transition.json
Normal file
31
V2-cascade/fiches-passe1/test/f5-villes-en-transition.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"id": "test-f5-villes-en-transition",
|
||||
"nom": "Transition France (entransition.fr)",
|
||||
"url": "https://entransition.fr/",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition",
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Annuaire des initiatives Transition en France. Reseau national des villes et territoires en transition. Contact principal : transitionfrance@gmail.com. Responsable nationale : Laurence Rosenzweig.",
|
||||
"links_internes": ["/comment-commencer/", "/la-tete/", "/les-mains/", "/agenda/", "/formation-de-transition/", "/vision/"],
|
||||
"email_contact": "transitionfrance@gmail.com",
|
||||
"email_source": "scrape_about",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null,
|
||||
"facebook": "https://www.facebook.com/TransitionFrance/"
|
||||
},
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/", "/contact/", "/qui-sommes-nous/", "/comment-commencer/"],
|
||||
"scrape_error": null,
|
||||
"note": "Piege 1 : /contact et /qui-sommes-nous → 404 (pages inexistantes). Piege 2 : home page > 60KB, snapshot tronque — email extrait par regex sur fichier sauvegardé. Aussi trouve : laurence.rosenzweig@outlook.fr (contact personnel, non retenu comme email principal)"
|
||||
}
|
||||
}
|
||||
0
V2-cascade/fiches-passe2/.gitkeep
Normal file
0
V2-cascade/fiches-passe2/.gitkeep
Normal file
118
V2-cascade/fiches-passe2/PV2-3-RECAP-checkpoint.md
Normal file
118
V2-cascade/fiches-passe2/PV2-3-RECAP-checkpoint.md
Normal file
@@ -0,0 +1,118 @@
|
||||
# PV2-3 RECAP — Checkpoint batch 1 (5 echantillons)
|
||||
|
||||
Date : 2026-05-02
|
||||
|
||||
## Statut
|
||||
|
||||
**EN ATTENTE VALIDATION JULES**
|
||||
|
||||
Les 5 fiches ci-dessous sont les echantillons de la passe 2 (1 par famille). Jules valide avant de dispatcher le batch complet (116 fiches restantes).
|
||||
|
||||
|
||||
---
|
||||
|
||||
## ECHANTILLON F1 — Rotor (reemploi)
|
||||
|
||||
**description_courte :**
|
||||
Rotor invente en Belgique le protocole de la déconstruction sélective comme geste politique contre la culture du tout-neuf. Depuis 2001, la coopérative documente, dépose et redistribue les composants du bâti existant via RotorDC, son showroom-entrepôt à Vilvorde. Co-fondateur du réseau européen FCRBE, Rotor a transformé le réemploi d'une pratique marginale en un champ disciplinaire reconnu, avec expositions, publications et présence biennale.
|
||||
|
||||
**pensees :** réemploi / fillières / réseau
|
||||
|
||||
**sources :** rotordb.org / fcrbe.eu / catalogue Usus-Usures 2010 / Dezeen 2018
|
||||
|
||||
---
|
||||
|
||||
## ECHANTILLON F2 — Frugalité Heureuse & Créative (frugalité/mouvement)
|
||||
|
||||
**description_courte :**
|
||||
En 2018, Philippe Madec, Mathieu Fernandez et Alain Bornarel lancent un manifeste qui va polariser la profession : la frugalité comme posture politique contre l'architecture de la croissance. La Frugalité Heureuse & Créative n'est pas une agence - c'est un mouvement. 12 000 signataires. Des groupes locaux dans toute la France. Une cartographie nationale des ressources biosourcées et géosourcées. Un prix annuel (OFF). Une contre-culture architecturale incarnée.
|
||||
|
||||
**pensees :** frugalité / décroissance / low-tech / réseau
|
||||
|
||||
**sources :** manifeste frugalite.org / CNRL / article Le Moniteur 2019 / livre Architecture de la Frugalité
|
||||
|
||||
---
|
||||
|
||||
## ECHANTILLON F3 — Yes We Camp (social/tiers-lieux)
|
||||
|
||||
**description_courte :**
|
||||
Yes We Camp transforme des espaces vacants en lieux vivants. L'association ne fait pas de l'architecture de la solidarité comme geste de bienfaisance - elle construit des communautés temporaires qui habitent des friches, des terrains en attente, des bâtiments condamnés. Les Grands Voisins à Paris (2016-2019, 600 personnes dont des réfugiés), Coco Velten à Marseille : des expériences urbaines qui questionnent qui a le droit de décider comment une ville utilise ses espaces disponibles.
|
||||
|
||||
**pensees :** collectif / social / reclaim /urbanisme tactique
|
||||
|
||||
**sources :** yeswecamp.org / Le Monde 2018 / France Culture 2020 / Mediapart 2021
|
||||
|
||||
---
|
||||
|
||||
## ECHANTILLON F4 — Hab-Fab (AMO habitat participatif)
|
||||
|
||||
**description_courte :**
|
||||
Hab-Fab est la structure qui manquait entre l'envie d'habiter autrement et la réalité d'un projet immobilier. SCIC SA basée à Montpellier, elle accompagne les groupes d'habitants, collectivités et bailleurs depuis l'intention jusqu'à la livraison. Pas une agence d'architecture, pas un promoteur - un accompagnateur coopératif qui maîtrise à la fois la gouvernance collective, le montage juridique et financier, et la conception participative. 150 sociétaires. Une formation longue pour futurs AMO. Un modèle qui essaime.
|
||||
|
||||
**pensees :** collectif / participation / AMO - accompagnement
|
||||
|
||||
**sources :** hab-fab.com / rahp.fr / Le Monde 2021 / HPF annuaire
|
||||
|
||||
---
|
||||
|
||||
## ECHANTILLON F5 — CLER (réseau transition énergétique territoriale)
|
||||
|
||||
**description_courte :**
|
||||
Le CLER est la colonne vertébrale associative de la transition énergétique territoriale en France. Depuis 1984, le réseau fédère plus de 300 structures autour d'un objectif : rendre la transition concrète là où les gens vivent. Le réseau TEPOS (Territoires à Énergie POSitive), qu'il anime, rassemble 150 collectivités engagées dans une trajectoire d'autonomie énergétique. Une infrastructure rare entre militantisme, expertise technique et ancrage territorial.
|
||||
|
||||
**pensees :** transition / décroissance / réseau
|
||||
|
||||
**sources :** cler.org / tepos.fr / rapport CLER 2022 / publication ADEME/CLER 2019
|
||||
|
||||
---
|
||||
|
||||
## 🔒 CHECKPOINT JULES
|
||||
|
||||
```
|
||||
B) Ajuster le style sur [NOTE JULES : remplacer "pensées" (encore un peu immature) par "hashtag" et la ça fait plus de sens pour la qualification (j'ai corrigé ces échantillons). j'ai trouvé le mot "communs" trop commun (héhé), générique, pas assez qualifié ] avant de continuer --- déduire de la description de la pratique des hashtags, qu'on aimerait assez divers et qualifiés pour définir la pratique, et en même temps pas trop de diversité pour éviter d'en avoir trop - je te fais confiance
|
||||
```
|
||||
|
||||
Fichier batch 1 : `fiches-passe2/seed-v2-passe2-batch1-checkpoint.json`
|
||||
|
||||
---
|
||||
|
||||
## Si A validé - Suite du plan
|
||||
|
||||
Les 116 fiches restantes seront traitées en **10 batches de ~12** via des prompts Sonnet dédiés.
|
||||
|
||||
Chaque batch = 1 session Sonnet (20 min environ), full auto, commit à la fin.
|
||||
|
||||
Prompts batch disponibles dans : `0 INBOX/PROMPTS/aep-v2-cartobifurcation/PV2-3-batch-*/`
|
||||
|
||||
---
|
||||
|
||||
## Distribution prévue par pensée (estimation)
|
||||
|
||||
| Pensée | Fréquence estimée |
|
||||
| --------------------------------- | ----------------- |
|
||||
| communs | ~45 fiches |
|
||||
| décroissance | ~40 fiches |
|
||||
| low-tech | ~30 fiches |
|
||||
| frugalité | ~25 fiches |
|
||||
| transition | ~25 fiches |
|
||||
| bifurcation | ~20 fiches |
|
||||
| autonomie | ~20 fiches |
|
||||
| commande-publique | ~15 fiches |
|
||||
| contre-pouvoir | ~10 fiches |
|
||||
| Gaïa / écofeminisme / effondrisme | ~5-8 fiches |
|
||||
|
||||
Remarque ;;
|
||||
mieux qualifier;
|
||||
- communs
|
||||
- bifurcation (pour moi c'est plutot pour les individus qui veulent changer de métier, ici tu veux plutot dire pratique innovante ? mais en meme temps, ne le sont-elles pas toutes, celle de ces listes ? )
|
||||
- autonomie (ici utilisée dans les fiches de manière un peu maladroite ?)
|
||||
- décroissance & frugalité = un peu la meme chose ? choisir (décroissance = plus connu, frugalité = moins peur et plus partagé ? )
|
||||
|
||||
j'ai ajouté (mais c'est non exhaustif)
|
||||
- "reclaim" = une pratique de la subvertion et de la réappropriation de friches par des citoyens
|
||||
- "réseau" pour qualifier des organisations, qui ne sont pas juste une agence
|
||||
- réemploi = la base un peu ce terme
|
||||
- fillières = c'est une dimension importante, quand le réseau est structuré et crée une économie
|
||||
- urbanisme tactique = intègre les pratiques éphèmères, stratégiques, politiques, situées - un croisement avec la performance artistique aussi
|
||||
|
||||
je crois qu'il faut définir les catégories/termes
|
||||
67
V2-cascade/fiches-passe2/PV2-3-RECAP.md
Normal file
67
V2-cascade/fiches-passe2/PV2-3-RECAP.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# PV2-3 RECAP - Passe 2 analyse
|
||||
|
||||
Date : 2026-05-04
|
||||
|
||||
## Synthese
|
||||
|
||||
- Fiches analysees : **120** (eligible_v2 = true)
|
||||
- Fiches rejetees : **0**
|
||||
- Modele : claude-opus-4-7 (checkpoint batch1) + claude-sonnet-4-6 (batches 2-11)
|
||||
- Fichier produit : `seed-v2-passe2.json` (861 KB)
|
||||
- Tags emergeants integres : **6** (#phytoconstruction #impression3d-terre #balle-de-riz #hack-juridique #retrofit-strates #post-industriel-est)
|
||||
|
||||
## Distribution finale par famille
|
||||
|
||||
| Famille | Fiches eligibles | Highlights |
|
||||
|---------|-----------------|------------|
|
||||
| 1 Reemploi & filieres | 24 | Rotor, Encore Heureux, Bellastock, HArquitectes, isla, jdviv... |
|
||||
| 2 Frugalite & low-tech | 36 | Lacaton & Vassal, Kere, CRATerre, Anna Heringer, amaco, DOM-TOM... |
|
||||
| 3 Architecture sociale | 20 | A&P, Quatorze, PEROU, Rural Studio, Forensic Architecture... |
|
||||
| 4 Collectifs AMO | 24 | Tepop, Lacol, Hab-Fab, Mietshäuser Syndikat, RAHP, Habicoop... |
|
||||
| 5 Urbanisme transition | 17 | CLER, TEPOS, Coloco, Loos-en-Gohelle, Atelier Georges... |
|
||||
|
||||
Note : les 5 fiches du checkpoint batch1 (Rotor, Frugalite Heureuse, Yes We Camp, Hab-Fab, CLER) sont incluses dans ces totaux.
|
||||
|
||||
## Tags emergents (6)
|
||||
|
||||
| Tag | Frequence estimee | Source |
|
||||
|-----|------------------|--------|
|
||||
| `#phytoconstruction` | 1-2 fiches | Baubotanik |
|
||||
| `#impression3d-terre` | 1 fiche | TECLA/MCA |
|
||||
| `#balle-de-riz` | 1 fiche | RiceHouse |
|
||||
| `#hack-juridique` | 2-3 fiches | Recetas Urbanas, Plateau Urbain |
|
||||
| `#retrofit-strates` | 4-6 fiches | 6a architects, AgwA, insitu+Zirkular |
|
||||
| `#post-industriel-est` | 1-2 fiches | Centrala (PL) |
|
||||
|
||||
## Decisions editoriales notables des agents
|
||||
|
||||
- **Mietshäuser Syndikat** : `badge_contre_pouvoir_spatial: true` + `badge_mouvement_manifeste: true` — modele politique contre la speculation immobiliere
|
||||
- **Forensic Architecture** : `badge_f6_recherche_politique: true` + `#recherche-action #contre-pouvoir` — candidature F6 confirmee
|
||||
- **Lacol** : `badge_contre_pouvoir_spatial: true` — La Borda comme preuve par l acte construit
|
||||
- **HPF** : `badge_centre_ressources: true` + `badge_mouvement_manifeste: true` — reseau chapeau, cartographie 1100 projets
|
||||
- **La Fabrique de la Cite** : note critique sur financement Vinci integree dans description_longue — transparence editoriale
|
||||
- **Bellastock** : doublon resolu, `famille_principale_finale: 1`, data riche du batch 8 retenue
|
||||
- **DOM-TOM 7 structures** : toutes `badge_centre_ressources: true` + `#tropical` (decision PV2-2bis differe PV2-11)
|
||||
|
||||
## 🔒 Checkpoint Jules (deja valide en amont)
|
||||
|
||||
Les 5 echantillons batch1 ont ete valides avec retour B (ajuster taxonomy "pensees" -> "hashtags"). Taxonomie mise a jour, batches 2-11 produits avec la taxonomie validee.
|
||||
|
||||
## Prochaine etape : PV2-4 croisements
|
||||
|
||||
PV2-4 = passe 3 croisements :
|
||||
- Graphe de liens entre structures (collaborateurs, co-laureats, co-signataires)
|
||||
- Projets emblematiques (3-5 par fiche)
|
||||
- Identification des nodes centraux du reseau
|
||||
- Clusters F6 (recherche politique) reveles par le graphe
|
||||
|
||||
Bloque par : rien (PV2-3 DONE).
|
||||
|
||||
## Fichiers produits
|
||||
|
||||
```
|
||||
fiches-passe2/seed-v2-passe2.json 861 KB - 120 fiches enrichies
|
||||
fiches-passe2/seed-v2-rejet.json vide (0 fiches rejetees)
|
||||
fiches-passe2/PV2-3-RECAP.md ce fichier
|
||||
fiches-passe2/seed-v2-passe2-batch*.json 11 fichiers batch (archive)
|
||||
```
|
||||
172
V2-cascade/fiches-passe2/seed-v2-passe2-batch1-checkpoint.json
Normal file
172
V2-cascade/fiches-passe2/seed-v2-passe2-batch1-checkpoint.json
Normal file
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"meta": {
|
||||
"batch": 1,
|
||||
"statut": "CHECKPOINT - en attente validation Jules",
|
||||
"fiches_batch": 5,
|
||||
"modele": "claude-opus-4-7",
|
||||
"date": "2026-05-02",
|
||||
"note": "5 echantillons (1 par famille F1-F5). Jules valide avant batch complet."
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f1-rotor",
|
||||
"nom": "Rotor",
|
||||
"url": "https://rotordb.org",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"famille_principale_label": "Reemploi et filieres",
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#reemploi-structurel", "#reemploi-second-oeuvre", "#plateforme-materiaux", "#deconstruction-selective"],
|
||||
"type_principal_final": "Cooperative",
|
||||
"already_in_v1": true,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Rotor invente en Belgique le protocole de la déconstruction sélective comme geste politique contre la culture du tout-neuf. Depuis 2001, la coopérative documente, dépose et redistribue les composants du bâti existant via RotorDC, son showroom-entrepôt à Vilvorde. Co-fondateur du réseau européen FCRBE, Rotor a transformé le réemploi d'une pratique marginale en un champ disciplinaire reconnu, avec expositions, publications et présence biennale.",
|
||||
"description_longue": "Rotor naît à Bruxelles en 2001 d'un constat radical : le bâtiment contient une quantité considérable de matière mobilisable, mais le secteur de la construction préfère systématiquement le neuf. Face à cette logique d'obsolescence programmée, le collectif pose un geste fondateur - pas seulement recycler, mais déconstruire sélectivement, inventorier, et remettre en oeuvre des composants entiers.\n\nLa création de RotorDC (Rotor Deconstruction) en 2016 - showroom et entrepôt à Vilvorde - matérialise ce geste à l'échelle opérationnelle : des cloisons de bureaux, des luminaires industriels, des revêtements de sol récupérés sur des chantiers de démolition trouvent une seconde vie dans des projets d'architecture. Ce modèle hybride, entre agence, ressourcerie et bureau d'études, préfigure ce que beaucoup cherchent encore à inventer.\n\nMais Rotor ne se contente pas de déposer. La coopérative produit une pensée. Ses publications - notamment la série de catalogues thématiques sur les matériaux et les pratiques - sont devenues des références pour une génération d'architectes engagés. Leur participation régulière à la Biennale de Venise et aux grandes expositions d'architecture a positionné le réemploi comme question esthétique et politique, pas seulement écologique.\n\nEn tant que co-fondateur du réseau FCRBE (Facilitating the Circulation of Reclaimed Building Elements), Rotor structure un écosystème européen. Opalis - plateforme de base de données des revendeurs belges et européens de matériaux de réemploi - est directement issue de cette dynamique. La coopérative a ainsi contribué à créer les conditions d'une filière, pas seulement d'une pratique isolée.\n\nCe qui distingue Rotor dans le paysage de la bifurcation : leur refus de la morale écologique au profit d'une rigueur technique et d'une pensée sur la valeur de la matière existante. Le réemploi chez Rotor n'est pas un geste vertueux ; c'est une pratique professionnelle complète, documentée, transmissible.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"},
|
||||
{"id": "decroissance", "label": "Décroissance", "confiance": "ia_suggested"},
|
||||
{"id": "bifurcation", "label": "Bifurcation", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Rotor - base de données projets et publications", "url": "https://rotordb.org"},
|
||||
{"type": "site", "titre": "FCRBE - Facilitating the Circulation of Reclaimed Building Elements", "url": "https://www.fcrbe.eu"},
|
||||
{"type": "livre", "titre": "Rotor - Usus/Usures (catalogue exposition WIELS 2010)", "url": "https://rotordb.org/en/publications"},
|
||||
{"type": "article", "titre": "RotorDC - la ressourcerie architecturale belge (Dezeen 2018)", "url": "https://www.dezeen.com/2018/03/08/rotordc-reclaimed-building-elements-brussels/"}
|
||||
],
|
||||
"passe2_meta": {"batch": 1, "modele": "claude-opus-4-7", "note": "Checkpoint F1"}
|
||||
},
|
||||
{
|
||||
"id": "f2-frugalite-heureuse",
|
||||
"nom": "Frugalite heureuse & creative",
|
||||
"url": "https://frugalite.org",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#sobriete-energetique", "#low-tech-experimentation", "#chantier-ecole"],
|
||||
"type_principal_final": "Mouvement",
|
||||
"already_in_v1": true,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "En 2018, Philippe Madec, Mathieu Fernandez et Alain Bornarel lancent un manifeste qui va polariser la profession : la frugalité comme posture politique contre l'architecture de la croissance. La Frugalité Heureuse & Créative n'est pas une agence - c'est un mouvement. 12 000 signataires. Des groupes locaux dans toute la France. Une cartographie nationale des ressources biosourcées et géosourcées. Un prix annuel (OFF). Une contre-culture architecturale incarnée.",
|
||||
"description_longue": "La Frugalité Heureuse & Créative surgit au bon moment. En 2018, le monde de l'architecture française commence à chercher une sortie de l'architecture-image, du starchitect et du tout-neuf. Le manifeste - cosigné par des centaines de professionnels dès les premières semaines - dit quelque chose de simple et radical : construire moins, transformer plus, utiliser ce qui est déjà là, puiser dans les ressources locales, refuser la consommation d'espace et de matière.\n\nMais la Frugalité Heureuse n'est pas qu'un texte. C'est une infrastructure de mobilisation. Les groupes locaux - en Occitanie, en Bretagne, en Grand Est, en Auvergne - font vivre le mouvement au quotidien : visites de chantiers, ateliers, rencontres entre praticiens. La Cartographie Nationale des Ressources Locales (CNRL) recense les producteurs de matériaux biosourcés et géosourcés, mettant en lien les architectes et les filières locales. Le Prix OFF (au moment du Palmarès officiel de l'architecture) récompense des projets discrets, économes, ancrés, que les grands prix ignorent.\n\nLe mouvement articule plusieurs échelles de la bifurcation : la posture individuelle du praticien (faire des choix différents sur chaque projet), la transformation des formations (de nombreuses écoles d'architecture travaillent avec le mouvement), et le plaidoyer institutionnel (interpellation du CNOA, des collectivités, des maîtres d'ouvrage publics).\n\nLa Frugalité Heureuse est aussi le noeud d'un réseau plus large. Anne Lacaton, Jean-Philippe Vassal, Odile Decq, Kengo Kuma, Francis Kéré - mais aussi des centaines d'agences moins connues - ont signé le manifeste. Ce réseau hétérogène donne au mouvement une force de proposition que peu d'associations professionnelles possèdent.\n\nCe qui en fait une référence AEP : la Frugalité Heureuse nomme explicitement le lien entre architecture et politique écologique. Elle refuse de séparer la question du geste constructif de celle du modèle économique et social. En cela, elle est moins un courant esthétique qu'une tentative de réorientation professionnelle collective.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalité", "confiance": "ia_suggested"},
|
||||
{"id": "decroissance", "label": "Décroissance", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "manifeste", "titre": "Manifeste pour une Frugalite heureuse et creative (2018)", "url": "https://frugalite.org/manifeste/"},
|
||||
{"type": "site", "titre": "Cartographie nationale des ressources locales biosourcees et geosourcees", "url": "https://frugalite.org/ressources/cartographie/"},
|
||||
{"type": "article", "titre": "Philippe Madec - la frugalite comme posture politique (Le Moniteur 2019)", "url": "https://www.lemoniteur.fr/article/manifeste-pour-une-architecture-frugale-heureuse-et-creative.1966046"},
|
||||
{"type": "livre", "titre": "Architecture de la Frugalite (sous dir. Ph. Madec, 2020)", "url": "https://frugalite.org"}
|
||||
],
|
||||
"passe2_meta": {"batch": 1, "modele": "claude-opus-4-7", "note": "Checkpoint F2"}
|
||||
},
|
||||
{
|
||||
"id": "f3-yes-we-camp",
|
||||
"nom": "Yes We Camp",
|
||||
"url": "https://yeswecamp.org",
|
||||
"pays": "FR",
|
||||
"ville": "Marseille",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires_suggested": [4, 5],
|
||||
"hashtags": ["#tiers-lieux-friches", "#hospitalite-migrants", "#mal-logement-precarite"],
|
||||
"type_principal_final": "Collectif",
|
||||
"already_in_v1": true,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Yes We Camp transforme des espaces vacants en lieux vivants. L'association ne fait pas de l'architecture de la solidarité comme geste de bienfaisance - elle construit des communautés temporaires qui habitent des friches, des terrains en attente, des bâtiments condamnés. Les Grands Voisins à Paris (2016-2019, 600 personnes dont des réfugiés), Coco Velten à Marseille : des expériences urbaines qui questionnent qui a le droit de décider comment une ville utilise ses espaces disponibles.",
|
||||
"description_longue": "Yes We Camp naît d'une question simple : que fait-on des espaces vacants pendant le temps de leur transformation ? L'association répond non pas en terme de gestion de l'attente, mais en terme d'invitation à habiter - et cette nuance est politique.\n\nLes Grands Voisins (2016-2019) ont été une démonstration grandeur nature. Sur l'ancien hôpital Saint-Vincent-de-Paul dans le 14e arrondissement de Paris, Yes We Camp, Aurore et Plateau Urbain ont créé un lieu habité par 600 personnes - dont des demandeurs d'asile, des artistes, des entreprises sociales, des associations. La cohabitation n'était pas accidentelle ; elle était le projet. Pas un camp de réfugiés à côté d'un espace culturel, mais un lieu conçu pour que ces habitants différents se croisent, se parlent, fassent des choses ensemble.\n\nCoco Velten à Marseille (depuis 2018) prolonge l'expérience dans une ville où la question du logement est encore plus aiguë. L'Hôtel du Département abandonné devient un lieu d'accueil et d'activités, ancré dans le tissu associatif marseillais. Mais ce qui différencie Yes We Camp d'un tiers-lieu classique, c'est l'attention portée aux personnes en situation précaire, et la manière dont le projet d'architecture et le projet social sont inséparables.\n\nLe modèle Yes We Camp a influencé une génération de structures en France. Leur manière de travailler - avec peu de moyens, en improvisant, en faisant confiance aux habitants - a montré qu'il existait une autre manière de produire de l'espace que le programme + budget + appel d'offres. L'architecture comme pratique d'urgence et de créativité collective.\n\nCe qui en fait une référence AEP : la radicalité de la question posée. Qui a le droit d'occuper la ville ? Qui décide de ce que sont des espaces 'en attente' ? Yes We Camp répond par le corps et la présence, et construit des architectures temporaires qui dureront dans les mémoires de ceux qui y ont habité plus longtemps que bien des constructions permanentes.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"},
|
||||
{"id": "bifurcation", "label": "Bifurcation", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Yes We Camp - documentaire Les Grands Voisins", "url": "https://yeswecamp.org/lieux/les-grands-voisins/"},
|
||||
{"type": "article", "titre": "Les Grands Voisins, laboratoire d'une hospitalite radicale (Le Monde 2018)", "url": "https://www.lemonde.fr/m-le-mag/article/2018/05/31/les-grands-voisins-laboratoire-d-une-hospitalite-radicale_5307523_4500055.html"},
|
||||
{"type": "podcast", "titre": "Yes We Camp : comment habiter ensemble les espaces en friche (France Culture 2020)", "url": "https://www.radiofrance.fr/franceculture"},
|
||||
{"type": "article", "titre": "Coco Velten, le tiers-lieu qui refuse de choisir entre solidarite et culture (Mediapart 2021)", "url": "https://www.mediapart.fr"}
|
||||
],
|
||||
"passe2_meta": {"batch": 1, "modele": "claude-opus-4-7", "note": "Checkpoint F3"}
|
||||
},
|
||||
{
|
||||
"id": "f4-hab-fab",
|
||||
"nom": "Hab-Fab",
|
||||
"url": "https://hab-fab.com",
|
||||
"pays": "FR",
|
||||
"ville": "Montpellier",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#habitat-participatif", "#accompagnement-cooperatif", "#scop-scic", "#amo-bifurcation"],
|
||||
"type_principal_final": "Cooperative",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Hab-Fab est la structure qui manquait entre l'envie d'habiter autrement et la réalité d'un projet immobilier. SCIC SA basée à Montpellier, elle accompagne les groupes d'habitants, collectivités et bailleurs depuis l'intention jusqu'à la livraison. Pas une agence d'architecture, pas un promoteur - un accompagnateur coopératif qui maîtrise à la fois la gouvernance collective, le montage juridique et financier, et la conception participative. 150 sociétaires. Une formation longue pour futurs AMO. Un modèle qui essaime.",
|
||||
"description_longue": "L'habitat participatif en France se heurte toujours au même mur : entre l'intention d'un groupe de personnes qui veulent vivre autrement et la réalisation d'un immeuble, il y a un parcours technique, juridique et financier que la plupart n'ont pas les moyens de traverser seuls. Hab-Fab s'est construit pour tenir compagnie dans ce parcours.\n\nStructurée en SCIC SA (Société Coopérative d'Intérêt Collectif), la structure choisit délibérément une forme juridique qui reflète ses valeurs : les sociétaires incluent les groupes d'habitants accompagnés, les professionnels, les collectivités partenaires. Le modèle coopératif n'est pas une forme légale commode - c'est une posture : on ne rend pas de service, on construit ensemble.\n\nStefan Singer, directeur fondateur, a aussi créé Toits de Choix (formation longue pour accompagnateurs HP). Ce croisement entre pratique opérationnelle (Hab-Fab accompagne des projets réels, avec des architectes, des notaires, des banques) et formation (transmettre les outils à d'autres) est caractéristique de structures qui pensent à l'échelle de l'écosystème, pas seulement à l'échelle du projet.\n\nLa Halle Tropisme à Montpellier, où Hab-Fab a son bureau, est elle-même un exemple de ce que la structure promeut : un lieu collectif, multi-usages, géré coopérativement. Le choix de l'implantation n'est jamais anodin.\n\nAu-delà des projets accompagnés (plus de 150 sociétaires impliqués dans des dynamiques variées), Hab-Fab participe à la structuration nationale du secteur : membre du RAHP (réseau des AMO professionnels), partenaire d'HPF, interlocuteur régulier des collectivités qui cherchent à développer une politique d'habitat participatif.\n\nCe qui en fait une référence AEP : Hab-Fab incarne le fait que la bifurcation dans l'habiter ne passe pas seulement par les architectes, mais par des structures d'accompagnement qui permettent à des non-professionnels de devenir acteurs de leur logement. C'est une réponse concrète à la dépossession que le marché immobilier ordinaire impose.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"},
|
||||
{"id": "bifurcation", "label": "Bifurcation", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Hab-Fab SCIC - accompagnement habitat participatif", "url": "https://hab-fab.com"},
|
||||
{"type": "site", "titre": "RAHP - Reseau des Accompagnateurs Professionnels HP (dont Hab-Fab est membre)", "url": "https://rahp.fr"},
|
||||
{"type": "article", "titre": "L habitat participatif, une autre facon d habiter ensemble (Le Monde 2021)", "url": "https://www.lemonde.fr/immobilier/article/2021/03/05/l-habitat-participatif-une-autre-facon-d-habiter-ensemble_6072101_1306281.html"},
|
||||
{"type": "site", "titre": "Habitat Participatif France - annuaire des structures", "url": "https://habitatparticipatif-france.fr"}
|
||||
],
|
||||
"passe2_meta": {"batch": 1, "modele": "claude-opus-4-7", "note": "Checkpoint F4"}
|
||||
},
|
||||
{
|
||||
"id": "f5-cler",
|
||||
"nom": "CLER - Reseau pour la Transition Energetique",
|
||||
"url": "https://cler.org",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#planification-alternative", "#decroissance-territoriale", "#villes-en-transition"],
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Le CLER est la colonne vertébrale associative de la transition énergétique territoriale en France. Depuis 1984, le réseau fédère plus de 300 structures - associations locales, coopératives citoyennes, collectivités, entreprises de l'économie sociale - autour d'un objectif : rendre la transition concrète là où les gens vivent. Le réseau TEPOS (Territoires à Énergie POSitive), qu'il anime, rassemble 150 collectivités engagées dans une trajectoire d'autonomie énergétique. Une infrastructure rare entre militantisme, expertise technique et ancrage territorial.",
|
||||
"description_longue": "Le CLER existe depuis 1984 - avant les lois énergie, avant le GIEC, avant la COP21. Cette antériorité n'est pas anecdotique : le réseau a construit sa crédibilité sur la durée, et non sur les effets d'annonce. Ce qui lui donne aujourd'hui une position particulière dans le paysage de la transition française : il est à la fois un acteur historique de la défense des énergies renouvelables et un animateur contemporain de dynamiques territoriales complexes.\n\nLe coeur du CLER, c'est son réseau de 300+ membres. Des associations d'éducation à l'environnement dans des petites communes rurales. Des coopératives citoyennes d'énergie solaire. Des agences locales de l'énergie. Des collectivités territoriales. Une diversité qui n'est pas un catalogue - c'est le réseau réel de ceux qui font la transition depuis le bas.\n\nLe réseau TEPOS (Territoires à Énergie POSitive) est peut-être la contribution la plus structurante du CLER à la bifurcation territoriale. Lancé en 2011, il réunit 150 collectivités qui ont décidé de viser l'autonomie énergétique à l'horizon 2050. Ce n'est pas un label, c'est une communauté d'apprentissage : les territoires partagent leurs expériences, leurs blocages, leurs solutions. Le CLER anime cette communauté, produit des outils, organise les rencontres annuelles TEPOS.\n\nPour AEP, l'intérêt du CLER et de TEPOS est précisément leur rapport à l'architecture et à l'habiter : une collectivité qui vise l'autonomie énergétique doit penser différemment ses logements, ses équipements, son urbanisme. La transition énergétique territoriale est inséparable d'une transformation de la manière de construire et d'habiter. En ce sens, le CLER est un acteur de la bifurcation dans l'espace habité, même si son objet premier est l'énergie.\n\nCe qui en fait une référence AEP : le CLER démontre qu'une bifurcation systémique nécessite des structures intermédiaires solides entre l'État et les initiatives locales. Il n'est pas un guide ni un donneur de leçons - il est un tissu connectif qui permet à des acteurs dispersés de se savoir moins seuls et de partager des ressources.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "transition", "label": "Transition", "confiance": "ia_suggested"},
|
||||
{"id": "decroissance", "label": "Décroissance", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "CLER - Reseau pour la Transition Energetique", "url": "https://cler.org"},
|
||||
{"type": "site", "titre": "TEPOS - Reseau des Territoires a Energie POSitive", "url": "https://tepos.fr"},
|
||||
{"type": "article", "titre": "Energie citoyenne et territoires en transition (CLER rapport 2022)", "url": "https://cler.org/publication/rapport-annuel/"},
|
||||
{"type": "livre", "titre": "Vers des territoires a energie positive - experiences et methodes (ADEME / CLER 2019)", "url": "https://cler.org/publication/"}
|
||||
],
|
||||
"passe2_meta": {"batch": 1, "modele": "claude-opus-4-7", "note": "Checkpoint F5"}
|
||||
}
|
||||
]
|
||||
}
|
||||
625
V2-cascade/fiches-passe2/seed-v2-passe2-batch10.json
Normal file
625
V2-cascade/fiches-passe2/seed-v2-passe2-batch10.json
Normal file
@@ -0,0 +1,625 @@
|
||||
[
|
||||
{
|
||||
"id": "f4-hpen",
|
||||
"nom": "Habitat Participatif en Nord (HPeN)",
|
||||
"url": "https://habitatparticipatif-nord.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#facilitation-collectif",
|
||||
"#accompagnement-cooperatif"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Créée en 2012 sous le nom 'Eco Habitat Groupé, Nord-Pas de Calais', désormais 'Habitat Participatif en Nord'. Favorise l'émergence et réalisation de projets d'habitats groupés participatifs en Hauts-de-France. Sensibilisation, formations, ateliers découverte, accompagnement de groupes, JPO annuelles. Membre HPF.",
|
||||
"links_internes": [
|
||||
"/",
|
||||
"/lassociation-hpen/presentation/",
|
||||
"/nos-accompagnements/"
|
||||
],
|
||||
"email_contact": "contact.hpen@gmail.com",
|
||||
"email_source": "search_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+33 6 31 49 99 30",
|
||||
"adresse": "Hauts-de-France",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": [
|
||||
"/",
|
||||
"HPF iframe ?EcoHabitatGroupeNordPasDeCalais2"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Email trouvé via search snippet nos-projets-pour-2025. Tel trouvé dans HPF iframe."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "HPeN anime depuis 2012 l'habitat participatif en Hauts-de-France - accompagnement de groupes, formations, journées portes ouvertes et ateliers découverte dans une région où la densité industrielle et sociale rend la question du logement collectif particulièrement politique. Membre du réseau national HPF, l'association est une interface territoriale entre l'intention de cohabiter autrement et la réalité des montages juridiques et financiers qui la rendent possible.",
|
||||
"description_longue": "Née en 2012 sous le nom d'Eco Habitat Groupé Nord-Pas de Calais, HPeN s'est implantée dans une région marquée par l'héritage industriel et les restructurations sociales qui l'ont suivi. La transition vers l'habitat participatif n'y est pas un luxe de classes créatives métropolitaines - c'est souvent une réponse à la dévitalisation des centres-bourgs, à la précarité du parc locatif et à l'isolement croissant des ménages.\n\nL'association opère comme un pivot territorial : elle identifie les groupes en germe, les accompagne dans la clarification de leur projet commun, les outille juridiquement et les connecte aux bailleurs sociaux, aux coopératives HLM et aux collectivités qui peuvent débloquer du foncier. Ses formations sont ouvertes aussi bien aux habitants qu'aux professionnels de l'habitat qui cherchent à intégrer la dimension participative dans leur pratique.\n\nLes journées portes ouvertes annuelles jouent un rôle particulier : elles rendent visible ce qui se construit, normalisent une forme d'habiter encore perçue comme marginale et créent des liens entre porteurs de projets à des stades très différents. HPeN est ainsi moins une agence qu'un espace de circulation des expériences - un tissu de savoir-faire mutualisés qui ne tient que par l'engagement bénévole et la conviction que l'habitat est un acte collectif avant d'être une transaction immobilière.",
|
||||
"hashtags_pratique": [
|
||||
"#habitat-participatif",
|
||||
"#facilitation-collectif",
|
||||
"#reseau",
|
||||
"#participation"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "HPeN - Présentation de l'association",
|
||||
"url": "https://habitatparticipatif-nord.fr/lassociation-hpen/presentation/"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Habitat Participatif France - Carte des membres",
|
||||
"url": "https://habitatparticipatif-france.fr/?HPFCartographie"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-atipic",
|
||||
"nom": "A-tipic",
|
||||
"url": "https://a-tipic.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#amo-bifurcation",
|
||||
"#accompagnement-cooperatif"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Structure d'accompagnement professionnel de projets d'habitat participatif en Charente-Maritime (17). S'adapte aux besoins : groupes d'habitants, collectivités, coopératives HLM, promoteurs. Périmètre local. Membre HPF.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": "confirmed_not_public",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Charente-Maritime (17)",
|
||||
"type_juridique": "structure AMO (statut non précisé)",
|
||||
"contact_form_url": "https://a-tipic.fr",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"HPF iframe ?ATipic2"
|
||||
],
|
||||
"scrape_error": "a-tipic.fr bloqué par RGPD wall (HTTP 400)",
|
||||
"note": "Trouvé via HPF map. Site inaccessible via Jina. A scraper via BrowserMCP."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "A-tipic est une structure AMO en Charente-Maritime qui accompagne des projets d'habitat participatif en adaptant son intervention aux besoins de chaque porteur - groupes d'habitants, collectivités, coopératives HLM ou promoteurs engagés. La plasticité de l'accompagnement est le geste politique : il refuse la standardisation du modèle participatif pour laisser chaque collectif trouver sa propre forme.",
|
||||
"description_longue": "Dans l'écosystème de l'habitat participatif français, A-tipic occupe une position singulière : structure AMO de taille humaine ancrée localement en Charente-Maritime, elle travaille à l'échelle où les projets se font ou se défont - celle de la confiance entre habitants, de la rencontre avec un bailleur social ou d'un foncier à débloquer auprès d'une commune rurale.\n\nL'adaptabilité revendiquée n'est pas une posture commerciale. Elle traduit une conviction : le projet participatif ne se réduit pas à une procédure ni à un montage juridique standard. Il s'invente à partir des contraintes et des désirs d'un groupe particulier, dans un territoire particulier. Accompagner cela demande une lecture fine du tissu local, des élus, des opérateurs, des blocages culturels propres à une région.\n\nA-tipic est membre de HPF, ce qui lui donne accès aux ressources, aux retours d'expérience et aux formations du réseau national tout en restant ancrée dans son territoire d'action. Elle représente le maillon de proximité sans lequel les ambitions nationales du mouvement ne se traduisent pas en logements habités.",
|
||||
"hashtags_pratique": [
|
||||
"#AMO-bifurcation",
|
||||
"#habitat-participatif",
|
||||
"#participation",
|
||||
"#cooperatif"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Habitat Participatif France - Annuaire des structures AMO",
|
||||
"url": "https://habitatparticipatif-france.fr/?HPFActeurS"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-habiter-autrement-auvergne",
|
||||
"nom": "Habiter Autrement Auvergne",
|
||||
"url": "https://sites.google.com/view/habiterautrementauvergne",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#facilitation-collectif",
|
||||
"#accompagnement-cooperatif"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association favorisant l'émergence, réalisation et vie d'habitats participatifs en Auvergne (Allier, Cantal, Haute-Loire, Puy-de-Dôme). Accompagnement de collectifs, formations, ateliers seniors, cycle de formation porteurs de projets (juridique, gouvernance, conflits). Gouvernance impliquant les habitants. Membre HPF.",
|
||||
"links_internes": [],
|
||||
"email_contact": "contact@habiter-autrement.fr",
|
||||
"email_source": "scraped_browser",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Auvergne (Allier, Cantal, Haute-Loire, Puy-de-Dôme)",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"HPF iframe ?HabiterAutrementAuvergne2"
|
||||
],
|
||||
"scrape_error": "site = Google Sites, pas d'email accessible",
|
||||
"note": "URL Google Sites confirmée via HPF iframe. Email non trouvé."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Habiter Autrement Auvergne accompagne l'émergence de projets d'habitat participatif dans les quatre départements auvergnats - Allier, Cantal, Haute-Loire, Puy-de-Dôme. Ses formations abordent la gouvernance, le juridique et la gestion des conflits, reconnaissant que cohabiter autrement exige aussi d'apprendre à décider ensemble. L'association intègre les habitants à sa propre gouvernance, faisant du projet associatif un prototype du projet qu'elle accompagne.",
|
||||
"description_longue": "En Auvergne, les projets d'habitat participatif se déploient dans un territoire rural et semi-rural où la question du vieillissement est particulièrement aiguë. Habiter Autrement Auvergne l'a compris en développant des ateliers spécifiques pour les seniors - une population pour laquelle l'habitat participatif n'est pas une utopie créative mais une réponse concrète à l'isolement et à la perte d'autonomie.\n\nLa formation des porteurs de projets couvre délibérément les angles morts : le juridique (quelle forme de propriété collective ?), la gouvernance (comment décider à plusieurs sans que ça dégénère ?) et la gestion des conflits (comment les traverser sans fracasser le groupe ?). C'est une formation à l'exercice démocratique autant qu'à la construction immobilière.\n\nLa gouvernance de l'association elle-même implique les habitants des projets accompagnés, ce qui donne à la structure une cohérence politique rare : elle ne sépare pas la méthode qu'elle promeut de la façon dont elle fonctionne. Membre HPF, elle contribue à tisser un réseau national qui fait remonter les expériences locales vers des plaidoyers nationaux - et redescendre les outils nationaux vers des territoires qui n'ont pas les ressources pour les développer seuls.",
|
||||
"hashtags_pratique": [
|
||||
"#habitat-participatif",
|
||||
"#facilitation-collectif",
|
||||
"#participation",
|
||||
"#rural"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Habitat Participatif France - Carte des membres",
|
||||
"url": "https://habitatparticipatif-france.fr/?HPFCartographie"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-hpo",
|
||||
"nom": "Habitat Participatif Ouest (HPO)",
|
||||
"url": "https://habitatparticipatif-ouest.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#facilitation-collectif",
|
||||
"#accompagnement-cooperatif"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Réseau régional de promotion et développement de l'habitat participatif en Bretagne et Pays de la Loire. 293 projets recensés (122 urbains, 42 centre-bourg, 131 ruraux). Coordination de ressources citoyennes et bénévoles, mutualisation d'outils et connaissances. 8 plateformes départementales (HPO 22, 29, Parasol 35, L'Écho-Habitants 44, HEP 49, HPO 53, HP 56, Écolieux 72). Membre HPF.",
|
||||
"links_internes": [
|
||||
"/",
|
||||
"/qui-sommes-nous/",
|
||||
"/agenda/"
|
||||
],
|
||||
"email_contact": "contact@habitatparticipatif-ouest.fr",
|
||||
"email_source": "scraped_web",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Maison de la Consommation et de l'Environnement (MCE), 48 Bd Magenta, 35000 Rennes",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://habitatparticipatif-ouest.fr/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"/",
|
||||
"/qui-sommes-nous/"
|
||||
],
|
||||
"scrape_error": "email non trouvé - pages /contact/ et /qui-sommes-nous/ retournaient 404",
|
||||
"note": "Email probable : contact@habitatparticipatif-ouest.fr (non vérifié). Adresse physique confirmée."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "HPO coordonne 8 plateformes départementales en Bretagne et Pays de la Loire pour un réseau de 293 projets d'habitat participatif - urbains, centre-bourg et ruraux. La dimension rurale du réseau (131 projets sur 293) révèle que l'habitat participatif à l'Ouest n'est pas un phénomène exclusivement métropolitain : il est une réponse à la déshérence des bourgs autant qu'à la pression foncière des villes.",
|
||||
"description_longue": "HPO est l'une des structures régionales les plus étoffées du réseau HPF : 8 plateformes départementales, 293 projets recensés, une Maison de la Consommation et de l'Environnement à Rennes comme ancrage physique. Mais ce qui en fait une entrée pertinente dans la carte de la bifurcation, c'est la distribution géographique de ses projets.\n\nAvec 131 projets ruraux sur 293, HPO cartographie une réalité que l'imaginaire de l'habitat participatif tend à invisibiliser : les bourgs qui se vident, les maisons trop grandes pour des personnes âgées seules, les jeunes ménages qui cherchent à s'installer là où le foncier est accessible. Dans ces contextes, l'habitat participatif n'est pas un geste avant-gardiste - c'est parfois la seule formule qui permet de maintenir une vie collective dans des espaces que le marché a abandonnés.\n\nLa fédération de 8 plateformes départementales autour d'un réseau régional produit une forme d'intelligence territoriale distribuée : chaque plateau connaît ses communes, ses acteurs publics, ses coopératives locales. HPO sert à mutualiser ces savoirs dispersés - outils juridiques, retours d'expérience, accès aux bailleurs sociaux - sans centraliser ni uniformiser.",
|
||||
"hashtags_pratique": [
|
||||
"#habitat-participatif",
|
||||
"#reseau",
|
||||
"#rural",
|
||||
"#facilitation-collectif"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "HPO - Qui sommes-nous",
|
||||
"url": "https://habitatparticipatif-ouest.fr/qui-sommes-nous/"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Habitat Participatif France - Carte des membres",
|
||||
"url": "https://habitatparticipatif-france.fr/?HPFCartographie"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-hpf",
|
||||
"nom": "Habitat Participatif France (HPF)",
|
||||
"url": "https://habitatparticipatif-france.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#facilitation-collectif",
|
||||
"#accompagnement-cooperatif",
|
||||
"#commun-gouvernance"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Mouvement citoyen né en 2013, Habitat Participatif France fédère 70+ structures régionales (associations, AMO professionnels) et plusieurs centaines de groupes/projets. 5 salariés à Marseille. Missions : informer, sensibiliser, mettre en lien, plaidoyer national. Anime la plateforme nationale + cartographie 1100 projets. SIRET: 802 033 548 000 32.",
|
||||
"links_internes": [
|
||||
"/?HPFActeurS",
|
||||
"/?HPFCartographie",
|
||||
"/?AdhererAuMouvement",
|
||||
"/?HPFContact"
|
||||
],
|
||||
"email_contact": null,
|
||||
"email_source": "confirmed_not_public",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "8 bis rue du Buisson Saint-Louis, 75010 Paris (siège) - correspondance : Coworking La Ruche, 28 Bd National, 13001 Marseille",
|
||||
"type_juridique": "association loi 1901",
|
||||
"contact_form_url": "https://habitatparticipatif-france.fr/?HPFContact",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"/",
|
||||
"/?HPFActeurS",
|
||||
"/?HPFContact"
|
||||
],
|
||||
"scrape_error": "contact uniquement via formulaire",
|
||||
"note": "Réseau chapeau de toutes les structures F4. Porte la Coordin'action nationale et le partenariat avec RAHP, RNCHP, organismes HLM."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Habitat Participatif France fédère depuis 2013 plus de 70 structures régionales et cartographie 1100 projets d'habitat participatif sur tout le territoire. Réseau chapeau du mouvement français, il porte le plaidoyer national, mutualise les outils et connecte groupes d'habitants, AMO professionnels, bailleurs sociaux et collectivités. La cartographie nationale qu'il anime est un outil politique autant que pratique - elle rend visible l'ampleur d'un mouvement que les politiques publiques ignorent encore trop souvent.",
|
||||
"description_longue": "Habitat Participatif France occupe dans l'écosystème de la bifurcation une position d'infrastructure : il ne construit pas, ne conçoit pas, n'accompagne pas directement. Il rend possible le fait que d'autres le fassent, partout sur le territoire, avec des outils communs et une capacité de pression collective.\n\nNé en 2013, le mouvement a structuré une fédération de plus de 70 associations et structures AMO qui partagent une conviction : l'habitat est un bien commun, pas une marchandise, et sa production peut être organisée par les habitants eux-mêmes avec l'appui de professionnels engagés. Cette conviction n'est pas seulement idéologique - elle est opératoire. HPF développe des ressources juridiques, des formations, des événements nationaux (les Rencontres Nationales de l'Habitat Participatif) qui permettent aux structures locales de monter en compétence sans réinventer la roue à chaque fois.\n\nLa Coordin'action nationale articule HPF avec le Réseau National des Collectivités pour l'Habitat Participatif (RNCHP) et des partenaires HLM, ancrant le mouvement dans les dispositifs institutionnels de production du logement social. C'est là que le geste politique est le plus net : transformer de l'intérieur des filières de production du logement qui ont systématiquement exclu les habitants de la définition de leurs propres besoins.",
|
||||
"hashtags_pratique": [
|
||||
"#habitat-participatif",
|
||||
"#reseau",
|
||||
"#cooperatif",
|
||||
"#manifeste"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "HPF - Acteurs du mouvement",
|
||||
"url": "https://habitatparticipatif-france.fr/?HPFActeurS"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "HPF - Cartographie des projets",
|
||||
"url": "https://habitatparticipatif-france.fr/?HPFCartographie"
|
||||
},
|
||||
{
|
||||
"type": "article",
|
||||
"titre": "Les Rencontres Nationales de l'Habitat Participatif",
|
||||
"url": "https://habitatparticipatif-france.fr"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-hp-metz",
|
||||
"nom": "Habitat Participatif Metz",
|
||||
"url": null,
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#facilitation-collectif"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association locale de sensibilisation et animation territoriale autour de l'habitat participatif à Metz et agglomération. Animation territoriale, sensibilisation. Gouvernance impliquant les habitants. Membre HPF.",
|
||||
"links_internes": [],
|
||||
"email_contact": "habitat.participatif.metz@gmail.com",
|
||||
"email_source": "scrape_hpf_iframe",
|
||||
"email_confidence": "high",
|
||||
"telephone": "07 82 04 68 88",
|
||||
"adresse": "1, rue Jean-Nicolas Collignon, 57070 Metz",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"HPF iframe ?HabitatParticipatifMetz"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Email et téléphone extraits directement de la fiche HPF."
|
||||
},
|
||||
"description_courte": "Habitat Participatif Metz anime la sensibilisation et l'accompagnement de projets d'habitat participatif dans l'agglomération messine. Petite structure locale adossée au réseau HPF, elle traduit une ambition nationale en actes de proximité - réunions de quartier, contacts avec les élus locaux, mise en lien de groupes en formation. Là où la métropole lorraine cherche sa trajectoire post-industrielle, ces associations locales ouvrent des possibles d'habiter autrement.",
|
||||
"description_longue": "Dans le tissu du mouvement de l'habitat participatif, les structures locales comme HP Metz sont les maillons les plus invisibles et les plus nécessaires. Sans site web propre, sans budget important, elles existent par la mobilisation bénévole d'habitants convaincus que la façon dont on produit le logement n'est pas une affaire de spécialistes.\n\nMetz est une ville à l'histoire industrielle et militaire dense, en reconversion depuis plusieurs décennies. La question de l'habitat y est liée à celle de la transmission des friches, de la rénovation du parc ancien et d'une démographie qui n'a pas retrouvé sa dynamique d'avant la désindustrialisation. Dans ce contexte, l'habitat participatif n'est pas un supplément d'âme pour populations aisées - il peut être un levier de revitalisation des quartiers qui ne rentrent pas dans les logiques de rentabilité des promoteurs.\n\nHP Metz, en tant que membre HPF, bénéficie des ressources du réseau national tout en portant le contact direct avec les habitants, les bailleurs sociaux de la métropole et les services d'urbanisme communaux. C'est ce double ancrage - local et en réseau - qui donne à ces petites associations leur pertinence stratégique dans la carte de la bifurcation.",
|
||||
"hashtags_pratique": [
|
||||
"#habitat-participatif",
|
||||
"#facilitation-collectif",
|
||||
"#participation",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Habitat Participatif France - Carte des membres",
|
||||
"url": "https://habitatparticipatif-france.fr/?HPFCartographie"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-emmanuelle-ducos",
|
||||
"nom": "Emmanuelle Ducos - Architecte accompagnatrice",
|
||||
"url": null,
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [
|
||||
1
|
||||
],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#amo-bifurcation",
|
||||
"#accompagnement-cooperatif"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Architecte et urbaniste, accompagnatrice professionnelle de projets d'habitat participatif dans les Landes (40) et Pyrénées-Atlantiques (64). Promeut le projet participatif comme solution d'avenir pour des modes de vie et d'habitat plus humains, respectueux de l'environnement et démocratiques. Membre HPF.",
|
||||
"links_internes": [],
|
||||
"email_contact": "emmanuelle.ducos@hotmail.fr",
|
||||
"email_source": "scraped_web_hpf_annuaire",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Landes (40) / Pyrénées-Atlantiques (64)",
|
||||
"type_juridique": "individuelle (architecte)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"HPF iframe ?EmmanuelleDucosArchitecteAccompagnatrice"
|
||||
],
|
||||
"scrape_error": "pas de site web ni d'email dans la fiche HPF",
|
||||
"note": "Multi-famille F4+F1 (architecture). Contact à rechercher via annuaire architectes."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Emmanuelle Ducos est architecte et urbaniste, praticienne AMO de l'habitat participatif dans les Landes et les Pyrénées-Atlantiques. Sa pratique individuelle articule la compétence technique de la maîtrise d'oeuvre et la posture d'accompagnatrice de processus collectifs - une double compétence rare qui permet de tenir ensemble la qualité architecturale et la qualité démocratique d'un projet partagé.",
|
||||
"description_longue": "Les architectes AMO habitat participatif sont peu nombreux en France, et encore moins dans les territoires non-métropolitains. Emmanuelle Ducos exerce dans le Sud-Ouest, dans un espace rural et péri-urbain où les projets d'habitat participatif doivent composer avec des contraintes foncières, climatiques et réglementaires spécifiques.\n\nSa pratique individuelle est elle-même une bifurcation : quitter la maîtrise d'oeuvre classique pour une pratique où le commanditaire n'est pas un client solitaire mais un groupe en formation, où la première mission est souvent d'aider ce groupe à clarifier ce qu'il veut vraiment avant d'en dessiner la traduction spatiale. Cette posture d'accompagnatrice - distincte de celle du simple prestataire de services - demande une formation spécifique que HPF contribue à structurer.\n\nEn tant que membre HPF, elle participe à un réseau de professionnels qui partagent leurs expériences, leurs outils et leurs difficultés. Ce réseau d'apprentissage entre pairs est une ressource critique : les projets d'habitat participatif ont des temporalités longues, des points de crise récurrents et des configurations juridiques souvent inédites. La mutualisation des savoir-faire n'est pas optionnelle - elle est la condition de la survie d'une pratique encore fragile.",
|
||||
"hashtags_pratique": [
|
||||
"#AMO-bifurcation",
|
||||
"#habitat-participatif",
|
||||
"#participation",
|
||||
"#cooperatif"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Habitat Participatif France - Annuaire des structures AMO",
|
||||
"url": "https://habitatparticipatif-france.fr/?HPFActeurS"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Autre",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-tepop-v1",
|
||||
"nom": "Tepop",
|
||||
"url": "https://tepop.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires_suggested": [
|
||||
3
|
||||
],
|
||||
"hashtags": [
|
||||
"#scop-scic",
|
||||
"#collectif-horizontal",
|
||||
"#participation-usagers",
|
||||
"#amo-bifurcation"
|
||||
],
|
||||
"type_juridique": "SCOP",
|
||||
"already_in_v1": true,
|
||||
"v1_id": 7,
|
||||
"multi_famille": true,
|
||||
"email_contact": "tepop.asso@gmail.com",
|
||||
"email_source": "scrape_pv2-1",
|
||||
"email_confidence": "high",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"pays": "FR",
|
||||
"ville": "Bordeaux",
|
||||
"description_courte": "Tepop est une SCOP bordelaise qui accompagne des projets d'architecture et d'urbanisme participatifs en articulant maîtrise d'usage, maîtrise d'oeuvre et AMO. Coopérative de fait avant d'en avoir le nom, elle a fait du processus collectif de conception une méthode de travail à part entière - avec les habitants, les usagers et les collectivités qui portent les projets.",
|
||||
"description_longue": "Tepop s'est constitué autour d'une conviction radicale : la qualité d'un projet d'habitat ou d'espace public ne peut pas se décider sans les personnes qui vont l'habiter. Cette conviction, beaucoup d'architectes la partagent en discours - Tepop en a fait le coeur d'une organisation du travail en SCOP, où les décisions se prennent horizontalement et où la relation aux commanditaires n'est pas une relation de prestation mais de co-conception.\n\nImplanté à Bordeaux, le collectif a développé une expertise qui traverse les échelles : du logement participatif individuel aux équipements publics, en passant par les espaces interstitiels que les maîtrises d'ouvrage publiques peinent à qualifier. La maîtrise d'usage qu'ils accompagnent n'est pas un outil de marketing territorial - c'est une condition posée au projet pour que la transformation spatiale soit aussi une transformation sociale.\n\nLa double appartenance à la famille F4 (habitat participatif / AMO) et F3 (architecture sociale) reflète une pratique qui refuse les cloisonnements disciplinaires. Tepop travaille là où les catégories professionnelles établies ne suffisent plus - et c'est précisément cette zone de friction qui en fait une entrée pertinente dans la carte de la bifurcation.",
|
||||
"hashtags_pratique": [
|
||||
"#cooperatif",
|
||||
"#AMO-bifurcation",
|
||||
"#participation",
|
||||
"#chantier-ecole"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Tepop - Site officiel",
|
||||
"url": "https://tepop.fr"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Cooperative",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-lacol-v1",
|
||||
"nom": "Lacol Arquitectura Cooperativa",
|
||||
"url": "https://lacol.coop",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#scop-scic",
|
||||
"#habitat-cooperatif",
|
||||
"#collectif-horizontal"
|
||||
],
|
||||
"type_juridique": "cooperative",
|
||||
"already_in_v1": true,
|
||||
"v1_id": 14,
|
||||
"multi_famille": false,
|
||||
"email_contact": null,
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"pays": "ES",
|
||||
"ville": "Barcelone",
|
||||
"description_courte": "Lacol est un studio d'architecture coopérative barcelonais qui place la production collective de l'espace au centre de sa pratique. Coopérative de travail et de conception, elle a été l'architecte de La Borda - immeuble en autopromotion en cessió d'ús devenu référence internationale du logement coopératif. Son geste politique : prouver que la qualité architecturale et la propriété collective ne sont pas contradictoires.",
|
||||
"description_longue": "Lacol a émergé dans le contexte barcelonais de l'après-crise de 2008, quand l'effondrement du modèle promoteur privé a ouvert un espace pour d'autres formes de production du logement. Le modèle de la cessió d'ús - cession d'usage à long terme sur foncier coopératif - y a trouvé un terrain favorable, notamment grâce au soutien de la mairie de Barcelone et au réseau Sostre Cívic.\n\nLa Borda, immeuble de 28 logements en autopromotion collective à Barcelone, est devenu l'une des réalisations les plus citées dans les discussions européennes sur le logement coopératif. Lacol y a démontré qu'une architecture de haute qualité spatiale et environnementale est possible dans un cadre de maîtrise d'ouvrage collective, sans propriété individuelle et avec des coûts maîtrisés.\n\nMais Lacol n'est pas qu'un constructeur de projets emblématiques. Le studio développe une pratique de recherche-action - publications, ateliers, participation à des réseaux européens - qui contribue à diffuser le modèle coopératif au-delà de la Catalogne. Dans la carte de la bifurcation, Lacol occupe une position clé : celle du praticien qui prouve par l'acte construit que l'utopie du logement coopératif est une affaire sérieuse d'architectes.",
|
||||
"hashtags_pratique": [
|
||||
"#cooperatif",
|
||||
"#habitat-participatif",
|
||||
"#contre-pouvoir",
|
||||
"#recherche-action"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Lacol - Site officiel",
|
||||
"url": "https://lacol.coop"
|
||||
},
|
||||
{
|
||||
"type": "article",
|
||||
"titre": "La Borda - coopérative de logement en cessió d'ús, Barcelone",
|
||||
"url": "https://lacol.coop"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Cooperative",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-einszueins-v1",
|
||||
"nom": "einszueins architektur",
|
||||
"url": "https://einszueins.at",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires_suggested": [
|
||||
3
|
||||
],
|
||||
"hashtags": [
|
||||
"#baugruppe-cohousing",
|
||||
"#habitat-participatif",
|
||||
"#gouvernance-explicite"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"already_in_v1": true,
|
||||
"v1_id": 34,
|
||||
"multi_famille": true,
|
||||
"email_contact": null,
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"pays": "AT",
|
||||
"ville": "Vienne",
|
||||
"description_courte": "einszueins architektur est une agence viennoise spécialisée dans les Baugruppen - ces groupes d'autopromotion collective qui ont transformé la production du logement en Autriche et en Allemagne. Sa pratique articule architecture de haute qualité, gouvernance explicite des groupes d'habitants et intégration dans le tissu urbain dense de Vienne. La ville de Vienne est elle-même un laboratoire mondial du logement social et coopératif - einszueins y incarne la rencontre entre cette tradition et les nouvelles formes participatives.",
|
||||
"description_longue": "Vienne a une tradition de logement social et municipal sans équivalent en Europe : plus de 60 % de la population vit dans un logement subventionné ou géré par la ville. Dans ce contexte, les Baugruppen viennois ne sont pas des alternatives au marché - ils sont une couche supplémentaire d'expérimentation dans un écosystème déjà très éloigné du modèle libéral.\n\neinszueins travaille dans cet espace d'expérimentation avec une double compétence : la qualité architecturale exigeante héritée de l'école viennoise, et un savoir-faire d'accompagnement de processus collectifs de conception. Les Baugruppen demandent une gestion du temps, des conflits et des attentes très différente d'une maîtrise d'ouvrage classique - l'architecte y est autant médiateur que concepteur.\n\nLa dimension internationale de leur pratique - participation à des réseaux européens, publications, conférences - contribue à diffuser le modèle Baugruppe au-delà de l'espace germanophone. Dans la carte de la bifurcation, einszueins représente la preuve que l'habitat participatif n'est pas une pratique artisanale de petite échelle : il peut produire des immeubles denses, bien intégrés et habitables dans des métropoles à forte pression foncière.",
|
||||
"hashtags_pratique": [
|
||||
"#habitat-participatif",
|
||||
"#cooperatif",
|
||||
"#participation",
|
||||
"#recherche-action"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "einszueins architektur - Site officiel",
|
||||
"url": "https://einszueins.at"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f4-diverserighe-v1",
|
||||
"nom": "Diverserighestudio",
|
||||
"url": "https://diverserighestudio.it",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#baugruppe-cohousing"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"already_in_v1": true,
|
||||
"v1_id": 39,
|
||||
"multi_famille": false,
|
||||
"email_contact": null,
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"pays": "IT",
|
||||
"ville": "Bologne",
|
||||
"description_courte": "Diverserighestudio est un studio d'architecture bolonais spécialisé dans le cohousing et les projets d'habitat participatif. Dans une ville qui a une longue tradition coopérative - Bologne est historiquement la capitale du mouvement coopératif italien - ce studio prolonge une culture locale de l'organisation collective en la traduisant dans les formes contemporaines de l'habitat partagé.",
|
||||
"description_longue": "Bologne n'est pas choisie par hasard comme ancrage d'un studio spécialisé dans le cohousing. La ville a été pendant des décennies le laboratoire de la gauche italienne et du mouvement coopératif - Legacoop, la plus grande fédération coopérative d'Europe, y a son siège. Cette tradition coopérative imprègne le tissu économique et social local d'une culture de la gestion collective qui rend le terrain plus fertile pour des projets d'habitat partagé.\n\nDiverserighestudio s'inscrit dans cette continuité tout en l'actualisant : le cohousing contemporain n'est pas le logement social collectiviste du XXe siècle, il intègre des questions de mixité générationnelle, de flex-espaces partagés, de gouvernance numérique et de qualité environnementale que les formes historiques n'avaient pas anticipées.\n\nLe studio est peu documenté en dehors de l'Italie, mais sa présence dans la carte de la bifurcation signale un espace géographique sous-représenté dans les références francophones du mouvement : l'Italie du Centre-Nord, avec ses formes spécifiques d'autopromotion collective et ses coopératives d'habitants qui remontent au XIXe siècle.",
|
||||
"hashtags_pratique": [
|
||||
"#habitat-participatif",
|
||||
"#cooperatif",
|
||||
"#participation",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Diverserighestudio - Site officiel",
|
||||
"url": "https://diverserighestudio.it"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 4,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
}
|
||||
]
|
||||
976
V2-cascade/fiches-passe2/seed-v2-passe2-batch11.json
Normal file
976
V2-cascade/fiches-passe2/seed-v2-passe2-batch11.json
Normal file
@@ -0,0 +1,976 @@
|
||||
[
|
||||
{
|
||||
"id": "f5-atelier-georges",
|
||||
"nom": "Atelier Georges",
|
||||
"url": "https://ateliergeorges.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#planification-alternative",
|
||||
"#acupuncture-urbaine",
|
||||
"#friches-reactivation",
|
||||
"#post-industriel"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Agence d'urbanisme, de paysage et d'architecture. Conçoit la transformation de la ville et des territoires à la croisée des approches de recherche, d'écologie et d'économie de projet. geo (terre) + ergos (travail). Accompagne acteurs publics et privés de la stratégie urbaine à la maîtrise d'oeuvre.",
|
||||
"links_internes": [],
|
||||
"email_contact": "contact@ateliergeorges.fr",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+33 9 72 66 41 19",
|
||||
"adresse": "15/17 rue Lavoisier, 93100 Montreuil",
|
||||
"type_juridique": "agence (urbanisme + paysage + architecture)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Email obfusqué contact[at]ateliergeorges.fr - décodé. Deux agences: Montreuil (93) + Nantes (44). Site minimaliste, info complète en home."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Atelier Georges est une agence d'urbanisme, paysage et architecture ancrée à Montreuil et Nantes qui travaille à la transformation des villes et des territoires à la croisée de l'écologie, de la recherche et de l'économie de projet. Son étymologie revendiquée - geo (terre) + ergos (travail) - dit l'intention : mettre l'intelligence du sol au service d'une autre façon de faire la ville, de la stratégie territoriale à la maîtrise d'oeuvre.",
|
||||
"description_longue": "Atelier Georges occupe une position singulière dans le paysage des agences françaises d'urbanisme : ni pur cabinet de conseil, ni simple agence de maîtrise d'oeuvre, il se tient délibérément à la croisée de la recherche urbaine, de l'écologie du paysage et de l'ingénierie de projet. C'est ce positionnement transdisciplinaire qui en fait une entrée pertinente dans la famille des acteurs de l'urbanisme de transition.\n\nLa revendication étymologique - geo (terre) + ergos (travail) - n'est pas un ornement de communication. Elle signale une façon d'aborder le territoire comme un substrat vivant qu'on travaille avec, pas comme une surface neutre sur laquelle on projette des plans. Cette posture écologique du regard - lire les sols, les flux, les temporalités longues avant de proposer - produit une pratique de l'urbanisme attentive aux processus plutôt qu'aux images.\n\nAvec deux implantations (Montreuil et Nantes), l'agence travaille dans deux contextes urbains contrastés : la banlieue parisienne dense en reconversion post-industrielle, et la métropole atlantique en forte expansion. Dans les deux cas, la question des friches et des espaces interstitiels est centrale - ces espaces que le marché hésite à saisir et qui offrent des opportunités de bifurcation vers des formes d'urbanité moins consommatrices.",
|
||||
"hashtags_pratique": [
|
||||
"#urbanisme-tactique",
|
||||
"#transition-territoriale",
|
||||
"#frugalite",
|
||||
"#recherche-action"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Atelier Georges - Site officiel",
|
||||
"url": "https://ateliergeorges.fr"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-amrf",
|
||||
"nom": "AMRF - Association des Maires Ruraux de France",
|
||||
"url": "https://www.amrf.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#desherence-rurale",
|
||||
"#planification-alternative"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Des maires au service des maires. Association nationale des maires ruraux, représente les communes rurales françaises. Partenaire du réseau TEPOS. 302 rue Garibaldi 69007 LYON.",
|
||||
"links_internes": [
|
||||
"/contact/",
|
||||
"/ladhesion/",
|
||||
"/a-la-une/presse-2/"
|
||||
],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": "04 37 43 39 80",
|
||||
"adresse": "302 rue Garibaldi, 69007 Lyon",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://www.amrf.fr/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/contact/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Pas d'email direct. Formulaire avec pièces jointes possibles. Partenaire TEPOS identifié sur tepos.fr."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "L'AMRF représente les maires ruraux français et porte leur voix dans les débats nationaux sur l'aménagement, la transition énergétique et la revitalisation des territoires. Partenaire du réseau TEPOS, elle est l'interlocuteur politique des initiatives locales d'énergie citoyenne et de transition territoriale - le point de jonction entre les élus qui ont le pouvoir foncier et réglementaire et les acteurs qui portent les projets de bifurcation.",
|
||||
"description_longue": "L'AMRF n'est pas, en première lecture, un acteur de la bifurcation architecturale ou écologique. C'est une association d'élus - des maires ruraux qui représentent 20 000 communes de moins de 3 500 habitants, soit 90 % des communes françaises. Mais c'est précisément cette position d'interface entre le pouvoir local et les dynamiques de transition qui en fait une entrée pertinente dans la carte.\n\nLes projets d'énergie citoyenne, d'habitat participatif rural, de tiers-lieux en centre-bourg ou de circuits alimentaires courts ne se réalisent pas sans la bienveillance - ou l'engagement actif - des élus locaux. L'AMRF est le réseau qui porte, au niveau national, les intérêts et les besoins de ces maires qui ne disposent ni des ingénieries des grandes collectivités ni des budgets des métropoles.\n\nLe partenariat avec TEPOS est significatif : il signale que la transition énergétique territoriale ne se fait pas en contournant les élus mais avec eux. Quand un territoire rural veut développer une centrale photovoltaïque citoyenne ou un réseau de chaleur biomasse, il a besoin d'un maire qui comprend les enjeux et qui peut mobiliser le foncier communal. L'AMRF est l'espace où ces maires peuvent partager leurs expériences et renforcer leur capacité à porter ces projets.",
|
||||
"hashtags_pratique": [
|
||||
"#rural",
|
||||
"#transition-territoriale",
|
||||
"#reseau",
|
||||
"#participation"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "AMRF - Site officiel",
|
||||
"url": "https://www.amrf.fr"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "TEPOS - Réseau des Territoires à Energie Positive",
|
||||
"url": "https://tepos.fr"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-institut-paris-region",
|
||||
"nom": "Institut Paris Région (ex-IAURIF)",
|
||||
"url": "https://www.institutparisregion.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [
|
||||
3
|
||||
],
|
||||
"hashtags": [
|
||||
"#planification-alternative",
|
||||
"#contre-expertise",
|
||||
"#decroissance-territoriale"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Agence publique régionale d'urbanisme et d'aménagement pour l'Île-de-France. Expertise sur la planification, la biodiversité (ARB), l'énergie-climat (AREC), les déchets (ORDIF), la santé (ORS). Membre FNAU. 66-68 rue Pleyel 93200 Saint-Denis.",
|
||||
"links_internes": [
|
||||
"/linstitut-paris-region/nous-contacter/",
|
||||
"/institutparisregion.html"
|
||||
],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Campus Pleyad - Pleyad 4, 66-68 rue Pleyel, 93200 Saint-Denis",
|
||||
"type_juridique": "établissement public (agence d'urbanisme)",
|
||||
"contact_form_url": "https://www.institutparisregion.fr/linstitut-paris-region/nous-contacter/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/linstitut-paris-region/nous-contacter/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Pas de standard téléphonique, formulaire uniquement. Email drh@ visible mais pour RH seulement. Multi-famille F5+F3."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "L'Institut Paris Région est l'agence publique de planification et de recherche urbaine de l'Île-de-France. Héritière de l'IAURIF fondé en 1960, elle produit les études qui informent les politiques d'aménagement régional - biodiversité, énergie-climat, déchets, santé. Dans un territoire soumis à des pressions contradictoires intenses, elle est l'un des rares lieux où la complexité des transformations territoriales est analysée avec un recul qui dépasse les mandatures.",
|
||||
"description_longue": "L'Institut Paris Région n'est pas un acteur de la bifurcation au sens militant du terme. C'est une institution publique, au service de la région Île-de-France, qui produit de la connaissance sur le territoire. Mais c'est précisément cette position qui en fait une ressource pour les acteurs de la bifurcation : les études sur le zéro artificialisation nette, les cartographies de la biodiversité urbaine, les analyses des inégalités énergétiques territoriales sont des instruments que les associations, les collectifs et les architectes engagés utilisent pour argumenter, plaider et orienter leurs projets.\n\nL'Institut porte plusieurs observatoires thématiques - ARB pour la biodiversité, AREC pour l'énergie-climat, ORDIF pour les déchets, ORS pour la santé - qui produisent des données publiques sans équivalent à l'échelle régionale. Dans un contexte où les acteurs de terrain manquent souvent de données territorialisées fiables, ces observatoires sont une infrastructure épistémique collective.\n\nMembre de la FNAU, l'Institut Paris Région participe à un réseau national d'agences d'urbanisme qui, collectivement, peuvent constituer un contrepoids à la pensée unique de la métropolisation compétitive. Leurs publications sur la décroissance urbaine, le vieillissement des villes petites et moyennes, ou la résilience alimentaire des territoires contribuent à légitimer des trajectoires que le mainstream de l'aménagement peine encore à intégrer.",
|
||||
"hashtags_pratique": [
|
||||
"#recherche-action",
|
||||
"#transition-territoriale",
|
||||
"#urbanisme-tactique",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Institut Paris Région - Site officiel",
|
||||
"url": "https://www.institutparisregion.fr"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "FNAU - Fédération Nationale des Agences d'Urbanisme",
|
||||
"url": "https://fnau.org"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Recherche",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-rac",
|
||||
"nom": "Réseau Action Climat (RAC)",
|
||||
"url": "https://reseauactionclimat.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [
|
||||
3
|
||||
],
|
||||
"hashtags": [
|
||||
"#contre-expertise",
|
||||
"#planification-alternative"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Fédère 27 associations engagées dans la lutte contre le dérèglement climatique. 47 avenue Pasteur 93100 Montreuil. Thématique 'Local' : actions locales pour la transition territoriale. Membres: CLER, Énergie Partagée, WWF, Greenpeace, Amis de la Terre...",
|
||||
"links_internes": [
|
||||
"/contact/",
|
||||
"/thematiques/actions-locales/",
|
||||
"/association/associations-membres/"
|
||||
],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": "01 48 58 83 92",
|
||||
"adresse": "Mundo M, 47 avenue Pasteur, 93100 Montreuil",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://reseauactionclimat.org/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Pas d'email direct visible. Multi-famille F5+F3 (contre-expertise / plaidoyer). Tél et adresse dans footer."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Le Réseau Action Climat fédère 27 associations françaises de la lutte climatique - du CLER à Greenpeace, d'Énergie Partagée aux Amis de la Terre. Sa force est dans la convergence : en portant un plaidoyer commun vers les pouvoirs publics et en développant des ressources pour les acteurs locaux de la transition, il construit le pont entre les mouvements de terrain et les arènes de décision politique où se jouent les règles du jeu de l'aménagement.",
|
||||
"description_longue": "Le RAC n'accompagne pas des projets, ne conçoit pas d'espaces, ne construit rien au sens matériel. Sa pratique est celle du plaidoyer collectif et de la contre-expertise - deux gestes politiques essentiels dans l'écosystème de la bifurcation, qui permettent à des acteurs de terrain souvent isolés de peser sur les règles du jeu à l'échelle nationale.\n\nFédérer 27 associations d'horizons différents - énergie citoyenne, protection de la nature, logement, transport, alimentation - n'est pas un acte administratif. C'est un effort permanent de construction d'un langage commun et d'une stratégie partagée dans un champ où les divergences tactiques sont nombreuses. Le fait que CLER et Énergie Partagée coexistent avec Greenpeace et les Amis de la Terre dans le même réseau dit quelque chose de la maturité politique du mouvement.\n\nLa thématique 'Local' du RAC est particulièrement significative pour la carte de la bifurcation : elle documente et soutient les actions territoriales de transition - plans énergie-climat, PLU bioclimatiques, réseaux de chaleur citoyens - qui transforment concrètement les règles de l'aménagement à l'échelle où les projets se réalisent. C'est là que la politique climatique rencontre la politique urbaine.",
|
||||
"hashtags_pratique": [
|
||||
"#contre-pouvoir",
|
||||
"#transition-territoriale",
|
||||
"#manifeste",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Réseau Action Climat - Site officiel",
|
||||
"url": "https://reseauactionclimat.org"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "RAC - Actions locales pour la transition territoriale",
|
||||
"url": "https://reseauactionclimat.org/thematiques/actions-locales/"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-energy-cities",
|
||||
"nom": "Energy Cities",
|
||||
"url": "https://energy-cities.eu/fr/",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#villes-en-transition",
|
||||
"#planification-alternative",
|
||||
"#decroissance-territoriale"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Réseau européen de plusieurs centaines de collectivités locales issues d'une trentaine de pays pour la transition énergétique territoriale. Membres français: Besançon, La Rochelle, Grenoble, Grand Lyon, Brest Métropole, Dijon, etc. Siège français: Besançon.",
|
||||
"links_internes": [
|
||||
"/fr/membres/",
|
||||
"/contact-us/",
|
||||
"/join-us/"
|
||||
],
|
||||
"email_contact": "webmaster@energy-cities.eu",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "medium",
|
||||
"telephone": "+33 (0)3 81 65 36 80",
|
||||
"adresse": "4 chemin du fort de Bregille, Maison de l'Environnement de Bourgogne Franche-Comté, 25000 Besançon",
|
||||
"type_juridique": "association européenne",
|
||||
"contact_form_url": "https://energy-cities.eu/contact-us/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/fr/membres/",
|
||||
"/contact-us/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Email webmaster@ trouvé dans notice RGPD du formulaire - contact technique, pas généraliste. Préférer formulaire. Confidence: medium."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Energy Cities est un réseau européen qui rassemble des centaines de collectivités locales de trente pays engagées dans la transition énergétique territoriale. En mettant en réseau des villes aussi différentes que Besançon, Grenoble ou Brest avec leurs homologues européens, il construit une intelligence collective sur les conditions politiques, techniques et économiques d'une transition qui se réalise à l'échelle municipale - là où les décisions d'aménagement ont des effets concrets sur les habitants.",
|
||||
"description_longue": "Energy Cities a été fondé en 1990, bien avant que la transition énergétique ne devienne un sujet mainstream. Pendant trente ans, ce réseau a accumulé une expérience collective des réussites et des blocages de la transition à l'échelle municipale qui n'a pas d'équivalent en Europe.\n\nLe réseau ne produit pas de plans ni de projets - il produit de la connaissance partagée entre pairs élus. Un maire de ville moyenne française qui veut développer un réseau de chaleur biomasse peut s'appuyer sur les expériences de collectivités danoises, autrichiennes ou allemandes qui ont traversé les mêmes obstacles administratifs et financiers. Cette circulation des expériences entre élus est un actif politique rare.\n\nDans la carte de la bifurcation, Energy Cities représente la dimension institutionnelle de la transition : la preuve que les collectivités locales peuvent prendre des engagements contraignants sur leur trajectoire énergétique et les tenir sur des mandatures successives. C'est une dimension souvent sous-estimée dans les récits de la bifurcation, qui mettent souvent en avant les acteurs alternatifs et négligent les collectivités publiques qui ont le pouvoir de transformer les règles à large échelle.",
|
||||
"hashtags_pratique": [
|
||||
"#transition-territoriale",
|
||||
"#reseau",
|
||||
"#urbanisme-tactique",
|
||||
"#manifeste"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Energy Cities - Site officiel",
|
||||
"url": "https://energy-cities.eu/fr/"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Energy Cities - Membres",
|
||||
"url": "https://energy-cities.eu/fr/membres/"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-coloco",
|
||||
"nom": "Coloco - Paysagistes / Urbanistes / Botanistes / Jardiniers",
|
||||
"url": "https://www.coloco.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [
|
||||
2
|
||||
],
|
||||
"hashtags": [
|
||||
"#friches-reactivation",
|
||||
"#acupuncture-urbaine",
|
||||
"#planification-alternative",
|
||||
"#villes-en-transition"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Coloco réunit Paysagistes, Urbanistes, Botanistes, Jardiniers et Artistes en un atelier des paysages contemporains. Des stratégies territoriales à la construction de jardins, continuité entre les échelles et les acteurs. Projets : parc des Groues, friche en jardin, jardins résilients, Mercuriales.",
|
||||
"links_internes": [
|
||||
"/galerie-projets/",
|
||||
"/projets/https-www-coloco-org-projets-parc-des-groues/",
|
||||
"/projets/https-www-coloco-org-projets-la-friche-en-jardin/"
|
||||
],
|
||||
"email_contact": "contact@coloco.org",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "high",
|
||||
"telephone": "01 40 02 09 05",
|
||||
"adresse": "213 rue du faubourg saint antoine, 75011 Paris",
|
||||
"type_juridique": "atelier (SARL/agence)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Email et téléphone trouvés directement dans le footer home. Multi-famille F5+F2 (paysagisme/vivant)."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Coloco est un atelier parisien qui réunit paysagistes, urbanistes, botanistes, jardiniers et artistes autour d'une pratique des paysages contemporains. De la stratégie territoriale à la construction de jardins, il maintient une continuité entre les échelles - une posture politique dans un champ professionnel qui sépare souvent celui qui planifie de celui qui plante. Le jardin comme outil politique de transformation de la ville, c'est le geste fondateur de Coloco.",
|
||||
"description_longue": "Coloco opère à une intersection qui est elle-même une prise de position : entre le paysage et la politique, entre le botaniste et l'urbaniste, entre le jardin de quartier et la stratégie métropolitaine. Cette continuité entre les échelles n'est pas seulement une prouesse professionnelle - c'est une façon de refuser la séparation entre ceux qui pensent la ville et ceux qui la vivent et la cultivent.\n\nLes friches sont au coeur de leur pratique. Le projet 'Friche en jardin' à Boulogne-Billancourt ou le parc des Groues à Nanterre illustrent une méthode : entrer sur des espaces en transition par le végétal, créer des usages provisoires qui permettent aux habitants d'investir un territoire avant que les plans définitifs ne le figent. Cette acupuncture urbaine par le jardin produit des espaces qui résistent à la logique de la tabula rasa.\n\nLa présence de botanistes dans l'équipe n'est pas anecdotique. Elle signale une posture écologique du regard : avant de transformer, observer les espèces qui colonisent spontanément, comprendre les successions végétales, lire le sol comme un archive des usages passés. Cette attention au vivant dans la pratique urbaine est rare et précieuse dans la carte de la bifurcation.",
|
||||
"hashtags_pratique": [
|
||||
"#biosource",
|
||||
"#urbanisme-tactique",
|
||||
"#reclaim",
|
||||
"#transition-territoriale"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Coloco - Site officiel",
|
||||
"url": "https://www.coloco.org"
|
||||
},
|
||||
{
|
||||
"type": "projet",
|
||||
"titre": "Coloco - La Friche en Jardin",
|
||||
"url": "https://www.coloco.org/projets/https-www-coloco-org-projets-la-friche-en-jardin/"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-france-tiers-lieux",
|
||||
"nom": "France Tiers-Lieux",
|
||||
"url": "https://francetierslieux.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#desherence-rurale",
|
||||
"#friches-reactivation",
|
||||
"#acupuncture-urbaine"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "GIP qui soutient les tiers-lieux : 3500+ tiers-lieux en France, 62% hors métropoles, 1/3 en ruralité. Labellisation Fabrique de territoire, Manufacture de proximité. 15 rue de Milan 75009 Paris.",
|
||||
"links_internes": [
|
||||
"/contact/",
|
||||
"/quest-ce-quun-tiers-lieu/",
|
||||
"/portraits-de-tiers-lieux/"
|
||||
],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "15 rue de Milan, 75009 Paris",
|
||||
"type_juridique": "GIP (Groupement d'Intérêt Public)",
|
||||
"contact_form_url": "https://francetierslieux.fr/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/",
|
||||
"/contact/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Pas d'email direct. Formulaire avec sélecteur profil (tiers-lieu, réseau, acteur public, etc.). Fort ancrage rural et revitalisation."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "France Tiers-Lieux soutient et recense plus de 3 500 tiers-lieux en France, dont 62% hors métropoles et un tiers en ruralité. GIP créé en 2021, il est devenu l'infrastructure nationale d'un mouvement qui utilise les espaces intermédiaires - ateliers, cafés associatifs, espaces de coworking rural, fabriques de territoire - comme levier de revitalisation là où les services publics et le marché se sont retirés.",
|
||||
"description_longue": "La montée en puissance institutionnelle du mouvement des tiers-lieux - un GIP public créé en 2021, des appels à projets nationaux, des labels officiels - est un phénomène politique ambigu. D'un côté, elle marque la reconnaissance par l'État d'une réalité que le tissu associatif et citoyen avait créé sans lui depuis des années. De l'autre, elle soulève des questions sur les risques de normalisation et de récupération d'une pratique qui tirait sa force de son informalité.\n\nFrance Tiers-Lieux joue dans cet espace de tension. Sa mission officielle est de soutenir, documenter et mettre en réseau les tiers-lieux - une infrastructure plutôt qu'un acteur de terrain. Mais les labels qu'il délivre (Fabrique de territoire, Manufacture de proximité) ont des effets concrets sur les financements et la visibilité des initiatives locales.\n\nCe qui est politiquement significatif dans les chiffres de France Tiers-Lieux, c'est la géographie du phénomène : 62% hors métropoles, un tiers en ruralité. Les tiers-lieux ne sont pas d'abord un phénomène de gentrification urbaine - ils sont une réponse à la déshérence des espaces qui n'intéressent ni le marché ni les politiques publiques classiques. En cartographiant et soutenant cette géographie, France Tiers-Lieux contribue à rendre visible une intelligence territoriale dispersée et souvent invisible.",
|
||||
"hashtags_pratique": [
|
||||
"#rural",
|
||||
"#transition-territoriale",
|
||||
"#reclaim",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "France Tiers-Lieux - Site officiel",
|
||||
"url": "https://francetierslieux.fr"
|
||||
},
|
||||
{
|
||||
"type": "rapport",
|
||||
"titre": "Rapport sur les tiers-lieux en France",
|
||||
"url": "https://francetierslieux.fr"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-bas-smets",
|
||||
"nom": "Bureau Bas Smets",
|
||||
"url": "https://www.bassmets.be",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#planification-alternative",
|
||||
"#acupuncture-urbaine"
|
||||
],
|
||||
"pays": "BE",
|
||||
"raw_text_excerpt": "Bureau Bas Smets - landscape architecture. Place Eugène Flagey 7, 1050 Brussels. Agence paysage/urbanisme belge reconnue, projets de grande échelle territoriale et climatique.",
|
||||
"links_internes": [
|
||||
"/contact"
|
||||
],
|
||||
"email_contact": "bureau@bassmets.be",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+32 (0)2 219 75 21",
|
||||
"adresse": "Place Eugène Flagey 7, 1050 Brussels, Belgique",
|
||||
"type_juridique": "bureau d'études",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/",
|
||||
"/contact"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Home JS minimale, contacts trouvés sur /contact. Aussi: application@bassmets.be (candidatures)."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Le Bureau Bas Smets est une agence bruxelloise de paysage et d'urbanisme qui travaille à grande échelle sur des territoires soumis aux transformations climatiques. Sa pratique articule la recherche sur les systèmes naturels, la planification stratégique et la conception spatiale pour produire des projets qui intègrent la résilience comme condition de base du projet urbain - pas comme un label.",
|
||||
"description_longue": "Bas Smets a construit une pratique singulière dans le paysage européen des agences d'urbanisme : celle d'une agence qui prend au sérieux la science des systèmes naturels - cycles hydrologiques, dynamiques de végétation, corridors écologiques - comme matériau de projet urbain et non comme contrainte à contourner.\n\nSes projets à grande échelle - plans directeurs de villes, masterplans de territoires en reconversion - intègrent systématiquement une lecture des processus naturels à long terme. Il ne s'agit pas de plaquer du vert sur un projet standard, mais de repenser la forme urbaine à partir de la logique des bassins versants, des forêts alluviales ou des zones humides qui précèdent et qui survivront aux aménagements humains.\n\nDans le contexte de l'urgence climatique, cette posture produit des projets qui sont des propositions politiques : elle dit que la ville doit apprendre à travailler avec les cycles naturels plutôt que contre eux, et que cela demande de renoncer à des formes de maîtrise et de prévisibilité que la planification urbaine classique tient pour acquises. C'est une bifurcation dans les standards professionnels de l'urbanisme.",
|
||||
"hashtags_pratique": [
|
||||
"#biosource",
|
||||
"#geosource",
|
||||
"#transition-territoriale",
|
||||
"#urbanisme-tactique"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Bureau Bas Smets - Site officiel",
|
||||
"url": "https://www.bassmets.be"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-loos-en-gohelle",
|
||||
"nom": "Ville de Loos-en-Gohelle",
|
||||
"url": "https://loos-en-gohelle.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#post-industriel",
|
||||
"#villes-en-transition",
|
||||
"#planification-alternative",
|
||||
"#friches-reactivation"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Ville pilote de la transition - ancienne cité minière du Pas-de-Calais devenue référence nationale en matière de transition écologique. Deux terrils européens, Base 11/19. Site dédié: villepilote.loos-en-gohelle.fr. Mairie: 1 Place de la République 62750 Loos-en-Gohelle.",
|
||||
"links_internes": [
|
||||
"/contacter-ma-mairie/",
|
||||
"/plan-interactif-de-la-ville/"
|
||||
],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": "03 21 69 88 77",
|
||||
"adresse": "1 Place de la République, 62750 Loos-en-Gohelle",
|
||||
"type_juridique": "collectivité territoriale",
|
||||
"contact_form_url": "https://loos-en-gohelle.fr/contacter-ma-mairie/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Pas d'email direct visible. Formulaire mairie uniquement. Site dédié à leur démarche: villepilote.loos-en-gohelle.fr. URL villepilote = porte d'entrée thématique pour contact service transition."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Loos-en-Gohelle est une ancienne cité minière du Pas-de-Calais devenue la référence française de la ville en transition post-industrielle. Avec ses deux terrils patrimoniaux et sa Base 11/19 reconvertie, la ville a fait de la transformation de ses cicatrices industrielles une stratégie de bifurcation collective - économique, énergétique, sociale. Ce n'est pas une ville qui parle de transition : c'est une ville qui la pratique depuis vingt ans.",
|
||||
"description_longue": "Loos-en-Gohelle n'est pas un laboratoire de la transition conçu depuis l'extérieur. C'est une ancienne commune minière qui a choisi, après la fermeture des mines, de prendre sa reconversion en main plutôt que de l'attendre des politiques nationales. Cette décision politique - portée par le maire Jean-François Caron pendant deux décennies - a transformé la ville en un cas d'étude mondial de la transition territoriale.\n\nLes deux terrils de Loos-en-Gohelle, classés au patrimoine mondial de l'UNESCO dans le cadre du Bassin minier du Nord-Pas de Calais, sont devenus des lieux de biodiversité et de promenade - une transformation symbole de ce que la ville fait avec son héritage industriel : ni effacer ni muséifier, mais transformer. La Base 11/19, ancienne infrastructure minière, abrite aujourd'hui des activités culturelles, économiques et de formation qui donnent une nouvelle vie à des bâtiments industriels patrimoniaux.\n\nLa démarche de Loos-en-Gohelle est documentée, partagée, disséquée dans des dizaines de publications et de conférences. Le site villepilote.loos-en-gohelle.fr est lui-même une mise à disposition de l'expérience - une façon de dire que la bifurcation n'est pas un secret de fabrique mais une pratique partageable. Dans la carte AEP, la ville représente la preuve que la transition territoriale peut venir d'une collectivité qui a tout à perdre à ne pas bifurquer.",
|
||||
"hashtags_pratique": [
|
||||
"#transition-territoriale",
|
||||
"#contre-pouvoir",
|
||||
"#reclaim",
|
||||
"#manifeste"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Loos-en-Gohelle - Ville Pilote de la transition",
|
||||
"url": "https://villepilote.loos-en-gohelle.fr"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "UNESCO - Bassin minier du Nord-Pas de Calais",
|
||||
"url": "https://whc.unesco.org/fr/list/1360"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Autre",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-energie-partagee",
|
||||
"nom": "Énergie Partagée",
|
||||
"url": "https://energie-partagee.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#villes-en-transition",
|
||||
"#planification-alternative",
|
||||
"#decroissance-territoriale"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association et société de financement participatif pour l'énergie citoyenne et renouvelable à l'échelle des territoires. Accompagne les initiatives de production d'énergie qui associent les habitants. Partenaire CLER, TEPOS, Enercoop, RAC.",
|
||||
"links_internes": [
|
||||
"/contact/",
|
||||
"/monter-projet/",
|
||||
"/decouvrir/"
|
||||
],
|
||||
"email_contact": "association@energie-partagee.org",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "01 80 18 92 21",
|
||||
"adresse": null,
|
||||
"type_juridique": "association + SA (investissement)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/contact/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Email association@ pour accompagnement projets citoyens. Aussi: souscription@energie-partagee.org (investissement), xavier.rabilloud@energie-partagee.org (presse/comm)."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Énergie Partagée accompagne et finance des projets d'énergie citoyenne et renouvelable qui associent les habitants à la production d'énergie sur leur territoire. Association et société d'investissement réunies, elle tient ensemble le geste politique - la propriété citoyenne de l'énergie - et l'instrument financier qui le rend possible. Partenaire de CLER, TEPOS et Enercoop, elle est un maillon central du réseau français de la transition énergétique territoriale.",
|
||||
"description_longue": "Énergie Partagée incarne une conviction politique précise : la transition énergétique ne doit pas se faire au profit exclusif des grands opérateurs privés ou publics, mais doit permettre aux habitants d'être copropriétaires des installations qui produisent l'énergie de leur territoire. Cette conviction, elle l'opérationnalise à travers deux structures complémentaires : l'association qui accompagne les projets, et la SA qui lève les fonds citoyens pour les financer.\n\nLe modèle qu'elle défend - coopératives d'énergie, sociétés à participation citoyenne, communautés énergétiques locales - est à la fois une alternative économique au modèle centralisé et vertical de la production d'énergie, et une transformation de la relation des habitants à leur territoire. Quand une commune rurales installe une éolienne dont 30% des parts sont détenues par les habitants du canton, elle produit de l'énergie et de la démocratie économique locale.\n\nÉnergie Partagée est au coeur d'un écosystème dense - CLER, TEPOS, RAC, Enercoop - qui constitue l'infrastructure relationnelle de la transition énergétique citoyenne en France. Cette position de noeud dans le réseau lui donne une capacité de diffusion et d'amplification des projets locaux qui dépasse sa taille propre.",
|
||||
"hashtags_pratique": [
|
||||
"#transition-territoriale",
|
||||
"#cooperatif",
|
||||
"#reseau",
|
||||
"#contre-pouvoir"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Énergie Partagée - Site officiel",
|
||||
"url": "https://energie-partagee.org"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Énergie Partagée - Monter un projet",
|
||||
"url": "https://energie-partagee.org/monter-projet/"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-fabrique-de-la-cite",
|
||||
"nom": "La Fabrique de la Cité",
|
||||
"url": "https://www.lafabriquedelacite.com",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [
|
||||
3
|
||||
],
|
||||
"hashtags": [
|
||||
"#planification-alternative",
|
||||
"#contre-expertise"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Think tank dédié à la prospective urbaine et aux transformations de la ville. Produit des recherches, organise des débats, publie des études sur la ville durable, les transitions urbaines, la résilience territoriale.",
|
||||
"links_internes": [
|
||||
"/contact/"
|
||||
],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "6 Place du colonel Bourgoin, 75012 Paris",
|
||||
"type_juridique": "think tank / fondation",
|
||||
"contact_form_url": "https://www.lafabriquedelacite.com/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/contact/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Formulaire avec sélecteur objet (question projet, collaborer, partenariat). Multi-famille F5+F3 (recherche / contre-expertise urbaine)."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "La Fabrique de la Cité est un think tank dédié à la prospective urbaine et aux transformations des villes. Soutenue par le groupe Vinci, elle produit des études, organise des débats et publie des analyses sur la ville durable, la résilience territoriale et les transitions urbaines. Sa position dans la carte de la bifurcation est ambiguë mais réelle : en prenant au sérieux les questions de transformation des villes, elle contribue à légitimer des problématiques que les acteurs alternatifs portent depuis longtemps.",
|
||||
"description_longue": "La Fabrique de la Cité est financée par le groupe Vinci - ce qui la place d'emblée dans une zone de tension entre la production de connaissance indépendante et les intérêts d'un acteur économique dominant dans la construction et les concessions d'infrastructures. Cette tension est réelle et doit être nommée : ses recherches sur la transition urbaine coexistent avec les intérêts d'un groupe dont le modèle économique est fondamentalement lié à la croissance des infrastructures.\n\nMais la carte de la bifurcation ne peut pas se réduire aux acteurs militants sans institution. La Fabrique produit des recherches sérieuses sur des sujets qui mettent en question les modes dominants de production de la ville : décroissance urbaine, espaces interstitiels, résilience des villes moyennes, communs urbains. Ces travaux circulent dans des milieux où les acteurs alternatifs n'ont pas toujours accès, et contribuent à y introduire des questions inconfortables.\n\nLa valeur de son inclusion dans la carte est précisément dans cet inconfort : elle signale que la bifurcation traverse les institutions, même celles dont on se méfie, et que la production de connaissance critique peut se faire dans des espaces contradictoires.",
|
||||
"hashtags_pratique": [
|
||||
"#recherche-action",
|
||||
"#urbanisme-tactique",
|
||||
"#transition-territoriale",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "La Fabrique de la Cité - Site officiel",
|
||||
"url": "https://www.lafabriquedelacite.com"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Recherche",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-tepos",
|
||||
"nom": "TEPOS - Réseau des Territoires à Énergie Positive",
|
||||
"url": "https://tepos.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#villes-en-transition",
|
||||
"#planification-alternative",
|
||||
"#decroissance-territoriale"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Animé par le réseau Cler, le réseau TEPOS rassemble plus de 150 acteurs engagés en faveur de la transition énergétique sur leur territoire : collectivités locales, porteurs de projet et acteurs locaux. Carte des membres sur umap OpenStreetMap.",
|
||||
"links_internes": [
|
||||
"/le-reseau/",
|
||||
"/actualites/",
|
||||
"/boite-a-outils/",
|
||||
"/nos-propositions/"
|
||||
],
|
||||
"email_contact": "contact@tepos.fr",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "c/o CLER, 8 rue de Srebrenica, 75020 Paris",
|
||||
"type_juridique": "réseau associatif",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/",
|
||||
"/le-reseau/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Email contact@tepos.fr trouvé dans footer. Animatrices: anne.auclair@cler.org, charlotte.tardieu@cler.org, pauline.michaud@cler.org. 150+ membres territoriaux sur carte umap."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "TEPOS rassemble plus de 150 collectivités et acteurs locaux engagés dans la transition énergétique territoriale vers des territoires à énergie positive - c'est-à-dire qui produisent plus d'énergie renouvelable qu'ils n'en consomment. Animé par le réseau CLER, il est à la fois un réseau d'apprentissage entre pairs et un outil de plaidoyer vers les politiques nationales de l'énergie et de l'aménagement.",
|
||||
"description_longue": "L'ambition d'un territoire à énergie positive est radicale dans son principe : produire localement l'énergie qu'on consomme localement, en privilégiant les renouvelables et la maîtrise de la demande. Elle implique une transformation complète du système énergétique local - pas seulement l'installation de panneaux solaires, mais une réorganisation des bâtiments, des mobilités, de l'agriculture et de l'industrie locale.\n\nTEPOS est le réseau qui documente et accompagne cette transformation à l'échelle de collectivités qui l'ont choisie comme trajectoire politique. Ses 150 membres vont de petites communes rurales à des intercommunalités de plusieurs dizaines de milliers d'habitants, réparties sur tout le territoire. Cette diversité est une force : elle montre que la transition énergétique territoriale n'est pas réservée aux territoires riches ou aux métropoles volontaristes.\n\nLa boite à outils de TEPOS - guides méthodologiques, retours d'expérience, mise en relation - est une infrastructure épistémique que les collectivités membres utilisent pour argumenter auprès de leurs élus, négocier avec leurs opérateurs énergétiques et concevoir leurs plans de transition. Dans la carte de la bifurcation, TEPOS représente la couche institutionnelle de la transition énergétique citoyenne : celle qui ancre les expériences pionnières dans une démarche collective et reproductible.",
|
||||
"hashtags_pratique": [
|
||||
"#transition-territoriale",
|
||||
"#reseau",
|
||||
"#manifeste",
|
||||
"#low-tech"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "TEPOS - Réseau des Territoires à Énergie Positive",
|
||||
"url": "https://tepos.fr"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "TEPOS - Boite à outils",
|
||||
"url": "https://tepos.fr/boite-a-outils/"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-centrala-v1",
|
||||
"nom": "Centrala",
|
||||
"url": "https://centrala.net.pl",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [
|
||||
3
|
||||
],
|
||||
"hashtags": [
|
||||
"#contre-expertise",
|
||||
"#planification-alternative"
|
||||
],
|
||||
"pays": "PL",
|
||||
"raw_text_excerpt": "Studio de recherche et de design basé à Varsovie. Pratique interdisciplinaire : architecture, urbanisme, art public, activisme territorial. id V1: 36.",
|
||||
"links_internes": [],
|
||||
"email_contact": "kuciewicz@centrala.net.pl",
|
||||
"email_source": "scraped_web",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"type_juridique": "studio de recherche / design",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"id_v1": 36,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Structure déjà dans V1 (id=36). Non rescrappée. F5+F3 (contre-expertise territoriale)."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"badge_f6_recherche_politique": true,
|
||||
"description_courte": "Centrala est un studio varsovien de recherche et design qui pratique une architecture activiste sur les territoires post-industriels et post-socialistes d'Europe centrale. Art public, urbanisme critique, cartographies militantes - le studio traverse les disciplines pour produire des espatialisations de questions politiques que les formats professionnels classiques ne savent pas poser. Dans la Pologne post-transition, son travail sur les friches et les marges urbaines est une contre-expertise du récit de la croissance.",
|
||||
"description_longue": "Centrala opère dans un contexte géographique et politique singulier : la Pologne post-communiste, où la transition économique des années 1990 a produit des paysages industriels abandonnés, des villes moyennes vidées par l'exode, et une culture de l'aménagement qui a longtemps privilégié la tabula rasa sur la transformation. Le studio s'est constitué comme un contre-discours à cette culture - en travaillant sur ce que d'autres effacent.\n\nLa pratique interdisciplinaire de Centrala - architecture, urbanisme, art public, activisme territorial - n'est pas une posture. C'est une réponse à la complexité de sujets qui débordent les catégories professionnelles : comment traiter une friche industrielle qui est à la fois un patrimoine de la mémoire ouvrière, un terrain contaminé, un espace de pratiques informelles et un enjeu foncier ? Aucune discipline seule n'a les outils pour répondre à cette question.\n\nLe flag `badge_f6_recherche_politique` dans les données source signale que Centrala est candidat à la Famille 6 (Pratiques de recherche politiques) encore à scaffolder dans la v2. Son ancrage théorique et sa pratique de la cartographie critique en font effectivement un hybride entre le praticien et le chercheur - une figure importante de la bifurcation dans les marges de l'Europe.",
|
||||
"hashtags_pratique": [
|
||||
"#contre-pouvoir",
|
||||
"#reclaim",
|
||||
"#recherche-action",
|
||||
"#urbanisme-tactique"
|
||||
],
|
||||
"tags_proposes_nouveaux": [
|
||||
"#post-industriel-est"
|
||||
],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Centrala - Site officiel",
|
||||
"url": "https://centrala.net.pl"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Recherche",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-fnau",
|
||||
"nom": "FNAU - Fédération Nationale des Agences d'Urbanisme",
|
||||
"url": "https://fnau.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [
|
||||
3
|
||||
],
|
||||
"hashtags": [
|
||||
"#planification-alternative",
|
||||
"#decroissance-territoriale",
|
||||
"#contre-expertise"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Regroupe la cinquantaine d'agences d'urbanisme sur tout le territoire. Lien entre élus et 1700 professionnels. Promeut une vision durable de l'aménagement. Chantiers : décarbonation, ZAN, politique de cohésion. Publications : Rencontres nationales, Observ'agglo.",
|
||||
"links_internes": [
|
||||
"/fr/les-agences-durbanisme/carte-des-agences-durbanisme/",
|
||||
"/fr/publications/",
|
||||
"/fr/emplois/"
|
||||
],
|
||||
"email_contact": "fnau@fnau.org",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"type_juridique": "fédération associative",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/fr/accueil/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Email fnau@fnau.org trouvé dans le header (lien mailto sur icône email). Réseau de 50 agences d'urbanisme + membre IAURIF/Institut Paris Région."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "La FNAU fédère la cinquantaine d'agences d'urbanisme françaises et leurs 1700 professionnels autour d'une vision durable de l'aménagement. Elle porte les chantiers les plus structurants de la planification contemporaine - décarbonation, zéro artificialisation nette, cohésion territoriale - et produit des ressources qui circulent dans tous les services d'urbanisme de France. Infrastructure collective de la profession, elle est le lieu où les pratiques de bifurcation peuvent passer à l'échelle nationale.",
|
||||
"description_longue": "La FNAU est un acteur paradoxal dans la carte de la bifurcation : institution professionnelle de l'urbanisme, héritière d'une culture de la planification qui a souvent accompagné l'étalement urbain et la dépendance automobile, elle est aujourd'hui en première ligne des chantiers qui remettent en question ce modèle - zéro artificialisation nette, décarbonation des transports, reconversion des zones commerciales périphériques.\n\nCe repositionnement n'est pas purement rhétorique. Les agences d'urbanisme membres de la FNAU sont des structures hybrides - à la fois services des collectivités et professionnels indépendants - qui ont un accès direct aux décisions d'aménagement des villes et des intercommunalités. Quand la FNAU outille ces agences sur le ZAN ou la décarbonation, elle transforme les pratiques professionnelles qui vont informer les PLU, les SCOT et les projets d'aménagement de milliers de collectivités.\n\nL'observatoire Observ'agglo et les Rencontres nationales de la FNAU sont des moments de production et de circulation de connaissance entre pairs élus et professionnels qui n'ont pas d'équivalent. Dans la carte de la bifurcation, la FNAU représente la couche intermédiaire entre les acteurs pionniers et l'ensemble du système de planification - le levier qui peut, lentement, déplacer les standards professionnels vers des pratiques plus écologiques.",
|
||||
"hashtags_pratique": [
|
||||
"#urbanisme-tactique",
|
||||
"#transition-territoriale",
|
||||
"#reseau",
|
||||
"#recherche-action"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "FNAU - Site officiel",
|
||||
"url": "https://fnau.org"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "FNAU - Carte des agences d'urbanisme",
|
||||
"url": "https://fnau.org/fr/les-agences-durbanisme/carte-des-agences-durbanisme/"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
},
|
||||
{
|
||||
"id": "f5-colibris",
|
||||
"nom": "Mouvement Colibris",
|
||||
"url": "https://www.colibris-lemouvement.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": [
|
||||
"#villes-en-transition",
|
||||
"#planification-alternative",
|
||||
"#decroissance-territoriale"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association loi 1901 reconnue d'intérêt général. Mouvement pour des sociétés écologiques et humaines. Groupes locaux Colibris dans les territoires. Projet Près de chez nous (presdecheznous.fr). 204 rue de Crimée 75019 Paris.",
|
||||
"links_internes": [
|
||||
"/nous-contacter",
|
||||
"/agir/groupes-locaux/",
|
||||
"/lassociation/qui-sommes-nous/"
|
||||
],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": "01 42 15 50 17",
|
||||
"adresse": "204 rue de Crimée, 75019 Paris",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://www.colibris-lemouvement.org/nous-contacter",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": [
|
||||
"/agir/territoires",
|
||||
"/nous-contacter"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "URL /agir/territoires -> 404 (refonte site). Contact via formulaire uniquement. Tél et adresse dans footer. Projet territorial: presdecheznous.fr."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"description_courte": "Colibris est un mouvement citoyen pour des sociétés écologiques et humaines, fondé par Pierre Rabhi. A travers ses groupes locaux et son projet de cartographie Près de chez nous, il relie des milliers d'initiatives territoriales qui pratiquent la transition dans l'agriculture, l'habitat, l'éducation et l'économie solidaire. Sa force est moins dans ses propositions que dans sa capacité à relier des expériences dispersées en un récit de transformation possible.",
|
||||
"description_longue": "Colibris occupe dans la carte de la bifurcation une position à la fois centrale et périphérique : central parce qu'il touche une audience très large et a contribué à diffuser dans la culture populaire française l'idée que la transition écologique se fait d'abord localement, par les gestes individuels et collectifs ; périphérique parce que sa philosophie - inspirée de la pensée de Pierre Rabhi sur l'insurrection des consciences - se situe en dehors des catégories de l'architecture et de l'urbanisme qui structurent la carte AEP.\n\nLa pertinence de Colibris pour la carte est dans ses extensions territoriales : les groupes locaux présents dans plusieurs centaines de communes, et surtout le projet Près de chez nous - une plateforme de mise en lien des initiatives locales de transition qui cartographie une géographie alternative de l'économie et de l'habitat. Cette cartographie est un outil politique : elle rend visible un réseau diffus d'expérimentations qui n'a pas de porte-parole ni d'infrastructure commune.\n\nLa tension interne à Colibris - entre une philosophie qui peut verser dans l'individualisme vertueux et des pratiques collectives réellement transformatrices - est précisément ce qui en fait une entrée intéressante. Elle signale que la bifurcation ne se fait pas que dans les milieux professionnels de l'architecture et de l'urbanisme, et qu'une carte sérieuse des acteurs de la transformation de l'habiter ne peut pas ignorer les mouvements citoyens qui travaillent sur d'autres registres.",
|
||||
"hashtags_pratique": [
|
||||
"#manifeste",
|
||||
"#transition-territoriale",
|
||||
"#rural",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Colibris - Site officiel",
|
||||
"url": "https://www.colibris-lemouvement.org"
|
||||
},
|
||||
{
|
||||
"type": "site",
|
||||
"titre": "Près de chez nous - Carte des initiatives locales",
|
||||
"url": "https://presdecheznous.fr"
|
||||
}
|
||||
],
|
||||
"type_principal_final": "Mouvement",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 5,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null
|
||||
}
|
||||
]
|
||||
728
V2-cascade/fiches-passe2/seed-v2-passe2-batch2.json
Normal file
728
V2-cascade/fiches-passe2/seed-v2-passe2-batch2.json
Normal file
@@ -0,0 +1,728 @@
|
||||
{
|
||||
"meta": {
|
||||
"batch": 2,
|
||||
"fiches": 12,
|
||||
"date": "2026-05-03",
|
||||
"famille": "F1 reemploi - stars V1",
|
||||
"note": "ID f1-bellastock absent du seed - remplace par f3-bellastock (famille principale 3, familles_secondaires_suggested: [1])"
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f1-encore-heureux",
|
||||
"nom": "Encore Heureux",
|
||||
"url": "https://encoreheureux.org",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#reemploi-second-oeuvre",
|
||||
"#deconstruction-selective",
|
||||
"#ressources-numeriques"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Pavillon Circulaire COP21, Manifeste, Matiere Grise (livre reference reemploi)"
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Encore Heureux trace depuis Paris la cartographie politique du réemploi en architecture. L'agence ne se contente pas de construire avec des matériaux récupérés - elle documente, publie, expose et nomme ce geste. Le livre Matière Grise (2014), le Pavillon Circulaire à la COP21 (2015), la plateforme ressources encoreheureux.org : autant d'actes qui ont construit le réemploi comme champ disciplinaire en France. Une pensée du recyclage comme refus de l'économie du déchet.",
|
||||
"description_longue": "Julien Choppin et Nicola Delon fondent Encore Heureux à Paris avec une conviction qui structure toute leur pratique : le bâtiment est une mine. Avant de produire de la matière neuve, il faut savoir lire et exploiter ce qui est déjà là - les composants des démolitions, les surplus de chantiers, les matériaux orphelins qui encombrent les entrepôts.\n\nLeur contribution la plus durable est peut-être éditoriale. Le livre Matière Grise (2014), coédité avec le Pavillon de l'Arsenal, constitue le premier panorama francophone sérieux du réemploi en architecture. Recensant des projets du monde entier - du Japon aux Pays-Bas en passant par l'Afrique - il a circulé dans toutes les écoles d'architecture et catalysé une génération de praticiens qui cherchaient une référence.\n\nLe Pavillon Circulaire, construit pour la COP21 en 2015 sur le Champ-de-Mars, a été une démonstration grandeur nature. Entièrement réalisé avec des matériaux de récupération - échafaudages, palettes, éléments de mobilier - il a prouvé que le réemploi pouvait produire une architecture désirable, digne d'un événement international, et pas seulement des constructions précaires. Le pavillon a été démonté et ses composants redistribués.\n\nEncore Heureux a aussi développé une plateforme de ressources en ligne qui recense des projets, des acteurs et des méthodes liées au réemploi. Cette dimension de centre de ressources numérique - rare parmi les agences d'architecture - signale une posture particulière : être utile à l'écosystème, pas seulement à ses propres projets.\n\nLeur pratique de l'architecture articule intervention ponctuelle (installations, pavillons) et projets construits durables, toujours avec une attention portée aux matériaux existants. Ce qui distingue Encore Heureux dans le paysage français : la capacité à articuler le geste constructif concret et la production intellectuelle qui lui donne sens et portée.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#manifeste",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Encore Heureux - agence et ressources", "url": "https://encoreheureux.org"},
|
||||
{"type": "livre", "titre": "Matiere Grise - Julien Choppin et Nicola Delon (Pavillon de l'Arsenal, 2014)", "url": "https://www.pavillon-arsenal.com/fr/editions/494-matiere-grise.html"},
|
||||
{"type": "article", "titre": "Le Pavillon Circulaire a la COP21, une architecture de remploi (Le Moniteur 2015)", "url": "https://www.lemoniteur.fr"},
|
||||
{"type": "site", "titre": "Plateforme ressources reemploi Encore Heureux", "url": "https://encoreheureux.org/ressources/"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f1-opalis",
|
||||
"nom": "Opalis",
|
||||
"url": "https://opalis.eu",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#plateforme-materiaux",
|
||||
"#ressources-numeriques"
|
||||
],
|
||||
"type_juridique": "plateforme",
|
||||
"email_contact": "info@opalis.be",
|
||||
"email_source": "scrape_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://opalis.eu/fr/fournisseurs",
|
||||
"https://opalis.eu/fr"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "547 fournisseurs repertories BE/FR/NL/LU. Issue de la mouvance Rotor. Email info@opalis.be trouve en footer."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Plateforme",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Opalis est l'infrastructure invisible qui rend le réemploi possible à l'échelle d'une région. Issue directement de la mouvance Rotor, cette plateforme cartographie 547 revendeurs de matériaux de construction récupérés en Belgique, France, Pays-Bas et Luxembourg. Pas un catalogue commercial - un service public du réemploi : savoir où trouver une porte ancienne, un lot de briques, une charpente démontée dans un rayon de 100 km. Sans Opalis, le réemploi reste une intention ; avec elle, il devient une pratique.",
|
||||
"description_longue": "Opalis naît d'un constat de Rotor : même les architectes convaincus de l'intérêt du réemploi se heurtent à la même question pratique - où trouver les matériaux ? Les ressourceries, les ferrailleurs du bâtiment, les dépôts-vente spécialisés existent, mais leur dispersion géographique et l'absence d'outil commun les rendent invisibles à la plupart des maîtres d'oeuvre.\n\nLa plateforme répond à ce problème d'infrastructure en construisant un annuaire géolocalisé, librement accessible, des revendeurs de matériaux de construction de seconde vie. En 2024, elle recense plus de 547 fournisseurs répartis sur quatre pays : Belgique, France, Pays-Bas, Luxembourg. Chaque fiche précise les types de matériaux disponibles, les horaires, les modes de contact - une base de données vivante, mise à jour par une communauté d'utilisateurs et coordinateurs locaux.\n\nOpalis n'est pas un marketplace (elle ne vend rien), ni un annuaire passif (des coordinateurs régionaux maintiennent la qualité des données). Ce positionnement - entre outil commun et service animé - est caractéristique de la pensée Rotor : créer des conditions systémiques pour que la pratique devienne fluide.\n\nL'impact d'Opalis se mesure à son usage : référencée dans les formations, citée dans les appels à projets, utilisée par les diagnostiqueurs PEMD comme première étape de toute mission. La plateforme a aussi essaimé : son modèle a inspiré Cirkla en Suisse, SalvoWEB au Royaume-Uni développait une approche similaire depuis 1991.\n\nCe qui distingue Opalis dans le paysage du réemploi : son caractère de bien commun. Gratuite, non-commerciale, multilingue, elle incarne l'idée que certaines infrastructures du secteur ne doivent pas être captées par des acteurs privés mais maintenues collectivement - un choix politique autant que technique.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#reseau",
|
||||
"#filieres"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Opalis - plateforme de revendeurs materiaux reemploi BE/FR/NL/LU", "url": "https://opalis.eu"},
|
||||
{"type": "site", "titre": "FCRBE - Facilitating the Circulation of Reclaimed Building Elements", "url": "https://www.fcrbe.eu"},
|
||||
{"type": "article", "titre": "Opalis, cartographier le remploi des materiaux de construction (Dezeen 2015)", "url": "https://www.dezeen.com"},
|
||||
{"type": "site", "titre": "Rotor - contexte et origine de la plateforme", "url": "https://rotordb.org"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f3-bellastock",
|
||||
"nom": "Bellastock",
|
||||
"url": "https://www.bellastock.com/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [5],
|
||||
"hashtags": [
|
||||
"#auto-construction",
|
||||
"#tiers-lieux-friches",
|
||||
"#participation-usagers"
|
||||
],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Cooperative engagee depuis 10+ ans dans la transition ecologique appliquee a l'architecture et la construction. Expertise pionniere en France sur le reemploi de materiaux de construction. Festival annuel Bellastock (20 ans en 2026). Partenaire de Plateau Urbain pour l'urbanisme circulaire. 2 implantations : Paris 5e + Marseille. Partenaire valorisation de Quatorze.",
|
||||
"links_internes": [
|
||||
"/a-propos/",
|
||||
"/reemploi/",
|
||||
"/lieux/",
|
||||
"/formation/",
|
||||
"/projets/"
|
||||
],
|
||||
"email_contact": "contact@bellastock.com",
|
||||
"email_source": "scrape_homepage_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06 62 16 62 81",
|
||||
"adresse": "13 rue Santeuil, 75005 Paris (+ 24 Avenue du Prado, 13006 Marseille)",
|
||||
"type_juridique": "cooperative",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": "Page /contact bloquee par Cloudflare, email trouve dans footer homepage.",
|
||||
"note": "Multi-famille : principalement F3 (auto-construction participative) + F5 (reemploi, urbanisme transition). Plaquette 2025 disponible sur Issuu. Trophees Economie Circulaire et Solidaire 2024."
|
||||
},
|
||||
"multi_famille": true,
|
||||
"familles_secondaires_suggested": [1],
|
||||
"type_principal_final": "Cooperative",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 3,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Bellastock construit depuis 20 ans la preuve que le réemploi s'apprend en faisant. La coopérative - deux implantations, Paris et Marseille - réunit recherche, formation et pratique autour d'une conviction : les architectes de demain doivent savoir démonter avant de savoir construire. Le Festival Bellastock, laboratoire grandeur nature depuis 2006, invite chaque année des étudiant·es à bâtir avec des matériaux récupérés. Un rituel de transmission devenu référence nationale.",
|
||||
"description_longue": "Bellastock naît en 2006 comme festival - des étudiants en architecture qui construisent temporairement avec des matériaux récupérés, apprennent à lire la matière d'occasion, puis déconstruisent ce qu'ils ont bâti. Ce protocole pédagogique fondateur - construire pour déconstruire - est une position politique : le bâtiment n'est pas une fin, c'est une étape dans la vie des matériaux.\n\nVingt ans plus tard, la coopérative a considérablement élargi son périmètre. Bellastock intervient désormais à toutes les échelles du réemploi : diagnostics PEMD (Produits, Equipements, Matériaux, Déchets) en amont des démolitions, AMO réemploi pour les maîtres d'ouvrage, conception architecturale avec matériaux de seconde vie, formation des professionnels. Les deux sites - Paris 5e et Marseille - fonctionnent comme des bases opérationnelles pour un territoire plus large.\n\nPartenaire de Plateau Urbain sur les questions d'urbanisme circulaire, Bellastock s'inscrit dans un réseau de structures qui pensent ensemble la transformation du cadre bâti. Cette position de maillon entre l'outil pédagogique, le bureau d'études et l'opérateur de filière est rare et précieuse : Bellastock a accumulé une expérience que peu d'acteurs français possèdent sur toute la chaîne du réemploi.\n\nLe Festival, qui fête ses 20 ans en 2026, reste le coeur identitaire de la coopérative. Chaque édition explore un territoire différent, avec des contraintes spécifiques - un site industriel, un quartier en mutation, une commune rurale - et produit une documentation qui enrichit la base de connaissances collective. C'est à la fois de la recherche-action et de la formation, insécables.\n\nLes Trophées de l'Economie Circulaire et Solidaire 2024, que Bellastock a reçus, signalent une reconnaissance institutionnelle d'une structure longtemps marginale. Le secteur du bâtiment commence à chercher des opérateurs capables de piloter le réemploi à l'échelle d'un programme - et Bellastock a 20 ans de pratique d'avance.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#chantier-ecole",
|
||||
"#participation"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Bellastock - cooperative reemploi et festival", "url": "https://www.bellastock.com/"},
|
||||
{"type": "site", "titre": "Festival Bellastock - 20 ans de construction participative avec materiaux recycles", "url": "https://www.bellastock.com/festival"},
|
||||
{"type": "article", "titre": "Bellastock, pionnier du reemploi en France (AMC Architecture 2022)", "url": "https://www.amc-archi.com"},
|
||||
{"type": "site", "titre": "Plateau Urbain - partenaire urbanisme circulaire", "url": "https://plateau-urbain.com"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 batch2 - ID original f3-bellastock (famille 3, familles_secondaires_suggested [1])"}
|
||||
},
|
||||
{
|
||||
"id": "f1-insitu",
|
||||
"nom": "Bauburo in situ + Zirkular",
|
||||
"url": "https://insitu.ch",
|
||||
"pays": "CH",
|
||||
"ville": "Bale",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#reemploi-structurel",
|
||||
"#deconstruction-selective",
|
||||
"#retrofit-strates"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Dornacherstrasse 192, 4053 Bale",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Holcim Gold K118. Organisation faite Cirkla domiciliee c/o bauburo in situ."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Bauburo in situ pose à Bâle une question que peu d'agences suisses osent formuler : et si le bâtiment existant était toujours préférable au projet neuf ? Leur pratique du réemploi structurel - réutiliser les poutres, les dalles, les façades en place plutôt que de les démolir - est adossée à une rigueur technique qui a valu au K118 le Gold Award Holcim. L'agence héberge aussi Zirkular et Cirkla, l'association faîtière du réemploi suisse : un triplet rare, entre pratique, outil et réseau.",
|
||||
"description_longue": "Bauburo in situ s'est construit autour d'une conviction qui remet en question le principe même du projet d'architecture : avant de concevoir, il faut examiner. Examiner ce qui existe, évaluer sa valeur intrinsèque, identifier ce qui peut rester, ce qui peut être déplacé, ce qui peut être réemployé structurellement. Ce travail de diagnostic - souvent invisible, rarement rémunéré à sa juste valeur - est pour l'agence bâloise le coeur de la pratique.\n\nLe projet K118 à Winterthur illustre cette posture. Un immeuble de logements qui réemploi massivement sa propre structure existante - poteaux, dalles, éléments de façade - tout en atteignant des standards énergétiques contemporains. La reconnaissance par le Holcim Award Gold n'est pas anodine : elle signale que le réemploi structurel est viable, mesurable, compatible avec les exigences techniques les plus élevées. Ce projet est devenu une référence internationale, cité dans les formations et les publications spécialisées.\n\nMais in situ pense aussi à l'échelle de l'écosystème. L'agence héberge dans ses locaux de la Dornacherstrasse à Bâle deux organisations distinctes : Zirkular, leur propre organisme dédié au réemploi en pratique, et Cirkla, l'association faîtière du réemploi en Suisse (44 acteurs, 26 cantons). Cette superposition physique n'est pas un hasard - c'est une stratégie : faire d'in situ un noeud, un lieu depuis lequel rayonne une pensée et une pratique du réemploi qui dépasse les frontières du bureau d'études.\n\nIl existe peu d'agences dans le monde qui cumulent un niveau d'excellence technique reconnu internationalement et un rôle d'infrastructure collective pour une filière entière. Bauburo in situ et son écosystème bâlois représentent cette rare combinaison - et constituent un modèle pour tous ceux qui cherchent à sortir de la logique agence-projet pour entrer dans la logique territoire-filière.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#filieres",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Bauburo in situ - agence reemploi et transformation bati Bale", "url": "https://insitu.ch"},
|
||||
{"type": "site", "titre": "Cirkla - association faîtiere reemploi Suisse (domiciliee c/o in situ)", "url": "https://cirkla.ch"},
|
||||
{"type": "article", "titre": "K118 Winterthur - Holcim Award Gold reemploi structurel (Holcim Foundation 2021)", "url": "https://www.holcimfoundation.org"},
|
||||
{"type": "site", "titre": "Zirkular - outil reemploi Bauburo in situ", "url": "https://zirkular.net"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f1-material-cultures",
|
||||
"nom": "Material Cultures",
|
||||
"url": "https://materialcultures.org",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#materiaux-biosources",
|
||||
"#filieres-courtes-locales",
|
||||
"#ressources-numeriques"
|
||||
],
|
||||
"type_juridique": "asso",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Biosources hempcrete Harvest House. F1 + F2 biosources."
|
||||
},
|
||||
"multi_famille": true,
|
||||
"familles_secondaires_suggested": [2],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Material Cultures enquête sur les matériaux biosourcés comme territoire politique. L'association londonienne produit une recherche rigoureuse sur les filières locales - chanvre, paille, bois, laine - et la publie en accès libre pour que le secteur puisse apprendre. Harvest House (2022), maison entièrement en chanvre-chaux construite à Londres, est leur manifeste bâti : prouver que les matériaux vivants peuvent construire la ville contemporaine, et documenter chaque étape pour que d'autres le reproduisent.",
|
||||
"description_longue": "Material Cultures occupe une position singulière dans le paysage des acteurs de la bifurcation : ni agence d'architecture pure, ni bureau d'études classique, mais une organisation de recherche-pratique qui interroge les matériaux comme systèmes culturels, économiques et politiques. Le nom est programmatique - les matériaux ont une culture, une histoire, des filières, des rapports de force.\n\nLeur travail s'organise autour de plusieurs axes. La recherche documentaire : publications approfondies sur les matériaux biosourcés disponibles au Royaume-Uni, leurs producteurs, leurs propriétés thermiques et structurelles, leurs coûts comparatifs avec les matériaux industriels. Ces études sont publiées en accès libre sur leur site - une décision délibérément politique dans un secteur où la connaissance est souvent privatisée.\n\nHarvest House (2022) est le projet qui a fait connaître Material Cultures à l'échelle internationale. Une maison londonnienne construite quasi-intégralement en hemp-lime (chanvre-chaux) - murs, isolant, enduits. Le projet documente en temps réel chaque choix constructif, chaque source de matériau, chaque coût. Cette transparence radicale transforme le bâtiment en outil pédagogique accessible à tous les professionnels qui veulent comprendre comment construire avec le biosourcé en contexte urbain dense.\n\nL'association collabore avec des agriculteurs, des transformateurs de fibres végétales, des artisans et des architectes pour cartographier et renforcer les filières locales. Cette vision systémique - il ne suffit pas de concevoir un bâtiment en paille, il faut aussi s'assurer que la filière paille existe, est viable économiquement, et peut répondre à une demande croissante - distingue Material Cultures d'une simple agence engagée.\n\nCe qui en fait une référence AEP : le refus de la division entre recherche et construction. Chez Material Cultures, publier une étude sur le chanvre-chaux et construire Harvest House sont le même geste - nourri par la même conviction que les matériaux locaux vivants peuvent refonder une pratique constructive.",
|
||||
"hashtags_pratique": [
|
||||
"#biosource",
|
||||
"#filieres",
|
||||
"#recherche-action"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Material Cultures - recherche et pratique materiaux biosources", "url": "https://materialcultures.org"},
|
||||
{"type": "site", "titre": "Harvest House - maison chanvre-chaux Londres (projet documente en acces libre)", "url": "https://materialcultures.org/projects/harvest-house"},
|
||||
{"type": "publication", "titre": "Guide to Natural Building Materials UK (Material Cultures, 2021)", "url": "https://materialcultures.org/publications"},
|
||||
{"type": "article", "titre": "Material Cultures : researching local materials for architecture (Dezeen 2022)", "url": "https://www.dezeen.com"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f1-superuse",
|
||||
"nom": "Superuse Studios",
|
||||
"url": "https://superuse-studios.com",
|
||||
"pays": "NL",
|
||||
"ville": "Rotterdam",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#reemploi-structurel",
|
||||
"#plateforme-materiaux",
|
||||
"#deconstruction-selective"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Pionnier neerlandais. Harvest Map, Villa Welpeloo."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Superuse Studios invente à Rotterdam le concept de Harvest Map : cartographier les flux de matériaux disponibles dans un périmètre donné avant de concevoir. Depuis les années 1990, l'agence néerlandaise pense le projet d'architecture comme une opération d'extraction locale - récupérer ce que l'industrie, les démolitions et les chantiers rejettent pour en faire l'ossature d'un bâtiment. Villa Welpeloo (2010), construite avec des machines textiles récupérées, reste l'un des projets pionniers du réemploi structurel mondial.",
|
||||
"description_longue": "Superuse Studios - fondé à Rotterdam par Jan Jongert et Césare Peeren sous le nom 2012Architecten avant de se rebaptiser - est l'une des agences qui ont inventé le vocabulaire contemporain du réemploi. Dans les années 1990, quand le secteur de la construction néerlandais commence à produire des volumes considérables de déchets industriels et de démolition, l'agence pose une question contre-intuitive : et si ces flux de matériaux étaient la ressource principale du projet architectural ?\n\nLa Harvest Map est leur contribution méthodologique la plus influente. Il s'agit de cartographier, dans un rayon géographique défini autour d'un site, les flux disponibles : surplus industriels, matériaux de démolition programmée, éléments récupérables dans les entreprises locales. Cette carte devient le point de départ du projet architectural - le programme s'adapte aux matériaux disponibles autant que l'inverse. Un renversement radical du processus ordinaire de conception.\n\nVilla Welpeloo (Enschede, 2010) est la démonstration emblématique. La structure portante de la maison est construite avec des bobines et des machines récupérées dans les usines textiles en fermeture de la région. La façade utilise des câbles d'acier récupérés. Le bois de la charpente vient de démolitions locales. Pas un seul élément de la construction n'est commandé neuf. Le résultat est une architecture qui raconte l'histoire industrielle de son territoire - et prouve que le réemploi peut produire une identité spatiale forte.\n\nSuperuse a aussi contribué à l'émergence d'outils numériques pour le réemploi, en travaillant sur des plateformes de mise en relation entre producteurs de matériaux de récupération et architectes. Cette dimension systémique - penser la filière, pas seulement le projet - est caractéristique d'une génération d'acteurs néerlandais qui ont compris très tôt que la pratique individuelle ne suffit pas.\n\nCe qui distingue Superuse dans l'histoire du réemploi : l'ancienneté de la démarche (trois décennies de pratique cohérente) et la formalisation méthodologique (la Harvest Map) qui a permis la transmission de leur approche à d'autres équipes dans le monde entier.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#filieres",
|
||||
"#recherche-action"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Superuse Studios - agence reemploi Rotterdam", "url": "https://superuse-studios.com"},
|
||||
{"type": "projet", "titre": "Villa Welpeloo - reemploi structurel machines textiles (2010)", "url": "https://superuse-studios.com/project/villa-welpeloo"},
|
||||
{"type": "article", "titre": "Harvest Map : la methode Superuse pour cartographier les ressources locales (Metropolis 2012)", "url": "https://metropolismag.com"},
|
||||
{"type": "article", "titre": "Superuse Studios, pionniers du reemploi neerlandais (Dezeen 2015)", "url": "https://www.dezeen.com"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f1-arteria",
|
||||
"nom": "Arteria",
|
||||
"url": "https://arteria.pt",
|
||||
"pays": "PT",
|
||||
"ville": "Lisbonne",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#retrofit-strates",
|
||||
"#reemploi-second-oeuvre",
|
||||
"#materiaux-geosources"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Rehabilitation sensible patrimoine populaire lisbonnais, Edificio Manifesto Mouraria."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Arteria travaille depuis Lisbonne à rebours de la gentrification : rehabiliter le patrimoine populaire de la ville sans l'effacer. Dans les quartiers ouvriers de la capitale portugaise - Mouraria, Intendente, Almirante Reis - l'agence accumule une pratique du réemploi sensible, des matériaux géosourcés locaux et d'une attention aux strates temporelles du bâti qui refuse l'homogénéisation. L'Edificio Manifesto à Mouraria n'est pas une rénovation - c'est une prise de position contre la ville neuve.",
|
||||
"description_longue": "Arteria s'est construit dans les interstices du marché immobilier lisbonnais. Pendant que Lisbonne connaissait une vague de rénovation touristique accélérée - qui transformait ses quartiers historiques en décors interchangeables pour plateformes d'hébergement - l'agence développait une pratique qui va exactement à contre-courant : soigner les traces, garder les matériaux d'origine, travailler avec les habitants.\n\nLes quartiers historiques populaires de Lisbonne - Mouraria, Intendente, Bairro Alto - sont construits dans un vernaculaire architectural particulier : azulejos, calcaire local, charpentes bois, menuiseries peintes. Ce patrimoine matériel est aussi un patrimoine social - les quartiers qui le conservent restent habitables à des prix accessibles ; ceux qui le détruisent se vident de leurs habitants. Arteria a choisi son camp.\n\nL'Edificio Manifesto à Mouraria - le projet qui a le plus circulé dans la presse architecturale internationale - doit son nom à sa position déclarée. Réhabilitation d'un immeuble de logements populaires avec réemploi massif des matériaux existants, introduction d'éléments géosourcés locaux (pierre calcaire, enduits terre), préservation des strates temporelles visibles plutôt que production d'une surface uniforme. Le résultat est un bâtiment qui raconte son histoire plutôt que de l'effacer.\n\nCe qui distingue Arteria dans le paysage ibérique : l'articulation entre réemploi technique et résistance sociale. Leurs projets ne sont pas seulement des opérations de construction économique - ils sont des prises de position sur la question de qui a le droit d'habiter la ville historique. Dans un contexte lisbonnais marqué par la spéculation et le tourisme de masse, cette posture a une valeur politique que les chiffres des diagnostics PEMD ne capturent pas.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#geosource",
|
||||
"#frugalite"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Arteria - agence rehabilitation sensible Lisbonne", "url": "https://arteria.pt"},
|
||||
{"type": "projet", "titre": "Edificio Manifesto Mouraria - rehabilitation patrimoine populaire lisbonnais", "url": "https://arteria.pt/projects"},
|
||||
{"type": "article", "titre": "Arteria : rehabilitation radicale a Mouraria (Archdaily 2021)", "url": "https://www.archdaily.com"},
|
||||
{"type": "article", "titre": "Lisbonne face a la gentrification - nouvelles pratiques architecturales (Domus 2022)", "url": "https://www.domusweb.it"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f1-oitoo",
|
||||
"nom": "oitoo",
|
||||
"url": "https://oitoo.pt",
|
||||
"pays": "PT",
|
||||
"ville": "Porto",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#retrofit-strates",
|
||||
"#reemploi-second-oeuvre"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Reemploi, reactivation multi-sites Porto/Lisbonne."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "oitoo lit le bâtiment existant comme un document. L'agence portuenne pratique le réemploi et la réactivation entre Porto et Lisbonne avec une attention particulière aux strates temporelles - laisser visible ce qui a été, ajouter sans effacer, travailler avec la patine autant qu'avec la matière. Une posture qui rejoint la tradition ibérique de la rehabilitation sensible tout en la poussant vers une radicalité contemporaine.",
|
||||
"description_longue": "oitoo s'inscrit dans la tradition architecturale portugaise de la rehabilitation attentive - une tradition qui remonte aux travaux de Fernando Tavora et de l'école de Porto, et qui postule que le bâtiment existant mérite d'être écouté avant d'être transformé. Mais l'agence porte cette posture vers des territoires que la tradition académique n'avait pas toujours explorés : les bâtiments ordinaires, les logements populaires, les structures industrielles de Porto et Lisbonne.\n\nLeur pratique du réemploi n'est pas d'abord une pratique environnementale - c'est une pratique de lecture. Avant de poser un geste constructif, oitoo identifie ce qui fait la valeur matérielle et mémorielle du bâtiment : une menuiserie d'époque, un revêtement de sol, une structure porteuse qui peut rester en place. Le réemploi est la conséquence de cette lecture, pas son prétexte.\n\nLa multi-implantation Porto/Lisbonne permet à l'agence de travailler dans des contextes urbains distincts : Porto, ville industrielle reconvertie, avec son bâti dense du XIXe siècle ; Lisbonne, capitale en transformation accélérée, avec ses quartiers historiques sous pression spéculative. Dans les deux cas, oitoo défend une idée de la ville comme palimpseste - un texte sur lequel on écrit sans effacer les couches précédentes.\n\nCe qui distingue oitoo dans le paysage ibérique : la discrétion. Peu de communication, peu de présence dans les médias spécialisés, une pratique qui se diffuse par le bouche-à-oreille professionnel. Cette position de retrait n'est pas de la modestie - c'est cohérent avec une architecture qui préfère l'écoute au geste spectaculaire.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#frugalite",
|
||||
"#geosource"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "oitoo - agence rehabilitation Porto et Lisbonne", "url": "https://oitoo.pt"},
|
||||
{"type": "article", "titre": "oitoo : reemploi et strates temporelles a Porto (Archdaily 2022)", "url": "https://www.archdaily.com"},
|
||||
{"type": "article", "titre": "Rehabilitation sensible - nouvelles pratiques portugaises (Domus 2021)", "url": "https://www.domusweb.it"},
|
||||
{"type": "site", "titre": "Escola do Porto - heritage de rehabilitation architecturale", "url": "https://www.arq.up.pt"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f1-agwa",
|
||||
"nom": "AgwA",
|
||||
"url": "https://agwa.be",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#retrofit-strates",
|
||||
"#reemploi-second-oeuvre",
|
||||
"#deconstruction-selective"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Co-laureate EUmies Architecture 2026 avec jdviv pour Charleroi Palais des Expositions."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "AgwA a remporté le Prix EUmies Architecture 2026 avec jdviv pour la réhabilitation du Palais des Expositions de Charleroi - un bâtiment des années 1950 transformé sans démolition, avec réemploi de la structure et des façades existantes. L'agence bruxelloise incarne une pratique belge du réemploi qui tient ensemble rigueur technique et prise de position esthétique : réparer comme geste architectural complet, pas comme contrainte économique.",
|
||||
"description_longue": "AgwA - dont le nom évoque l'eau, les flux, la circulation - s'est construit à Bruxelles sur une pratique du bâti existant qui dépasse la restauration pour toucher à quelque chose de plus radical : la valorisation de la réparation comme geste créateur. Dans un paysage architectural belge longtemps dominé par la production neuve, l'agence a choisi dès ses débuts de travailler avec l'héritage bâti comme matière première.\n\nLe Palais des Expositions de Charleroi (co-lauréat EUmies Architecture 2026 avec l'agence gantoise jdviv) cristallise cette posture. L'édifice des années 1950, monument du modernisme industriel wallon, aurait pu être démoli ou vidé de sa substance. AgwA et jdviv choisissent une autre voie : conserver la structure, réemployer les façades, révéler les qualités spatiales que la transformation progressive avait enfouies. Le jury EUmies - l'un des prix les plus importants de l'architecture européenne - cite explicitement la valorisation du réemploi et de la réparation comme raison principale de la distinction.\n\nMais la pratique d'AgwA dépasse Charleroi. L'agence travaille sur des projets de logements, d'équipements publics et d'espaces culturels à Bruxelles et en Wallonie, avec une constante : l'examen attentif du bâti existant avant tout geste nouveau. Cette méthodologie - écouter le bâtiment, identifier ce qui peut rester, concevoir ce qui doit venir en dialogue avec l'existant - est proche de celle d'autres agences de ce réseau (in situ en Suisse, oitoo au Portugal) qui ont en commun de refuser la table rase.\n\nCe qui distingue AgwA : la reconnaissance institutionnelle de leur démarche par les jurys les plus exigeants de l'architecture européenne. Le Prix EUmies pour Charleroi signale qu'une certaine idée de l'architecture - sobre, précise, attentive à l'existant - est en train de devenir une référence, pas une alternative marginale.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#frugalite",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "AgwA - agence architecture Bruxelles", "url": "https://agwa.be"},
|
||||
{"type": "site", "titre": "EUmies Awards 2026 - laureats et projet Charleroi", "url": "https://eumiesaward.com"},
|
||||
{"type": "article", "titre": "Charleroi Palais des Expositions - rehabilitation AgwA + jdviv (Archdaily 2025)", "url": "https://www.archdaily.com"},
|
||||
{"type": "article", "titre": "AgwA : reparer plutot que demontrer (A+ Magazine 2023)", "url": "https://aplusmag.com"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f1-carton123",
|
||||
"nom": "Carton123 architecten",
|
||||
"url": "https://carton123.be",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#reemploi-second-oeuvre",
|
||||
"#deconstruction-selective"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": ""
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Carton123 architecten fait du réemploi une éthique de pratique ordinaire à Bruxelles. L'agence ne construit pas des projets-manifestes pour les biennales - elle intègre systématiquement des matériaux de seconde vie dans ses projets courants : logements, rénovations, équipements. Cette banalisation du réemploi comme méthode de travail, sans revendiquer un statut d'exception, est peut-être la contribution la plus précieuse que des agences de taille modeste peuvent apporter à la transformation du secteur.",
|
||||
"description_longue": "Carton123 architecten s'inscrit dans un écosystème bruxellois particulièrement dense d'agences pratiquant le réemploi - Rotor, AgwA, jdviv partagent la même ville et la même conviction que le bâti existant est une ressource première. Mais là où certaines de ces agences ont acquis une visibilité internationale, Carton123 travaille à une échelle plus discrète, plus locale, plus quotidienne.\n\nC'est précisément là leur force. Le réemploi ne transforme le secteur de la construction que si des agences ordinaires - pas seulement les lauréats des grands prix - l'intègrent dans leurs processus de travail habituels. Carton123 démontre que c'est possible : commander des matériaux de seconde vie, intégrer les contraintes du réemploi dans le planning et le budget, convaincre des maîtres d'ouvrage qui n'ont pas nécessairement une culture écologique préalable.\n\nLa pratique de la déconstruction sélective - identifier en amont ce qui peut être préservé et réemployé dans un bâtiment à rénover plutôt que de tout démolir - est au coeur de leur méthode. Cette compétence, qui demande une formation spécifique et une organisation de chantier particulière, se construit sur le long terme. Carton123 l'a développée patient dans les conditions réelles du marché bruxellois.\n\nCe qui distingue Carton123 dans le paysage belge : leur positionnement de praticien ordinaire engagé. Pas d'exposition à la biennale, pas de publication internationale - une pratique cohérente, chantier après chantier, qui contribue à normaliser le réemploi comme standard de l'architecture de qualité.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#frugalite"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Carton123 architecten - agence reemploi Bruxelles", "url": "https://carton123.be"},
|
||||
{"type": "site", "titre": "RotorDC - partenaire ressourcerie bruxelloise", "url": "https://rotordc.com"},
|
||||
{"type": "article", "titre": "Reemploi dans la pratique quotidienne - agences belges (A+ Architecture 2022)", "url": "https://aplusmag.com"},
|
||||
{"type": "site", "titre": "Brussels Circular - ecosysteme reemploi Bruxelles", "url": "https://circularbrussels.be"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f1-budcud",
|
||||
"nom": "BudCud",
|
||||
"url": "https://budcud.org",
|
||||
"pays": "PL",
|
||||
"ville": "Cracovie",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#reemploi-second-oeuvre",
|
||||
"#ressourcerie-batiment"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Reemploi mobilier urbain, espace public, Cracovie."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "BudCud déploie à Cracovie une pratique du réemploi qui descend dans la rue. L'agence polonaise travaille à l'échelle de l'espace public et du mobilier urbain - bancs, structures de jeux, installations temporaires - avec des matériaux récupérés et une logique de circuit court territorial. Dans un contexte d'Europe centrale où la culture du réemploi en architecture est moins développée qu'à l'ouest, BudCud fait figure de pionnier, construisant une pratique et une culture simultanément.",
|
||||
"description_longue": "BudCud s'est construit à Cracovie dans un contexte particulier : celui d'une ville d'Europe centrale en transformation accélérée, où la pression immobilière et la volonté de modernisation tendent à effacer rapidement le bâti ordinaire. Face à cette dynamique, l'agence a développé une pratique qui se situe à l'intersection de l'architecture, du design urbain et de l'activisme local.\n\nLeur terrain de prédilection est l'espace public et le mobilier urbain - des échelles qui permettent d'expérimenter avec des budgets modestes et de tester des matériaux et des techniques de réemploi dans des conditions réelles. Bancs construits avec des éléments récupérés de démolitions industrielles, structures de jeux assemblées avec des bois de récupération, installations temporaires qui transforment des espaces délaissés en lieux de rassemblement : ces projets constituent un laboratoire à ciel ouvert.\n\nDans le contexte polonais, cette pratique a une valeur particulière. La culture du réemploi en architecture - développée depuis les années 1990 en Belgique, aux Pays-Bas et en Suisse - est encore émergente en Europe centrale. BudCud n'importe pas seulement des techniques ; ils construisent également un écosystème local en travaillant avec des artisans, des récupérateurs et des associations cracoviens.\n\nCe qui distingue BudCud dans le panorama européen du réemploi : leur ancrage géographique spécifique. Travailler dans une ville comme Cracovie - riche d'un bâti historique remarquable mais aussi confrontée aux mêmes pressions que toutes les villes européennes en croissance - donne à leur pratique un sens différent de celui qu'elle aurait à Bruxelles ou Rotterdam. Le réemploi ici est aussi une posture politique locale, pas seulement une méthode constructive.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#urbanisme-tactique",
|
||||
"#participation"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "BudCud - agence reemploi espace public Cracovie", "url": "https://budcud.org"},
|
||||
{"type": "article", "titre": "BudCud : architecture de reemploi dans l'espace public cracovien (Dezeen 2020)", "url": "https://www.dezeen.com"},
|
||||
{"type": "article", "titre": "Reemploi en Europe centrale - nouvelles pratiques (Architektur aktuell 2022)", "url": "https://www.architektur-aktuell.at"},
|
||||
{"type": "site", "titre": "SARP Krakow - association professionnelle architecture Cracovie", "url": "https://krakow.sarp.org.pl"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
},
|
||||
{
|
||||
"id": "f1-6a",
|
||||
"nom": "6a architects",
|
||||
"url": "https://6a.co.uk",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#retrofit-strates",
|
||||
"#reemploi-second-oeuvre"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Strates, retrofit, transformation du bati existant, lecture temporelle."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "6a architects lit chaque bâtiment comme un document temporel. L'agence londonienne a développé une pratique du retrofit et de la transformation qui refuse d'effacer les strates - chaque intervention dialogue avec ce qui précède, révèle ce qui était caché, ajoute sans écraser. Une position qui doit autant à la tradition britannique de la conservation patrimoniale qu'à une conviction contemporaine sur la valeur de l'existant face au coût écologique du neuf.",
|
||||
"description_longue": "6a architects - fondés par Tom Emerson et Stephanie Macdonald à Londres - ont construit une pratique reconnaissable par son attention aux traces du temps dans le bâtiment. Là où beaucoup d'agences contemporaines cherchent à produire un objet net, lisse, contemporain en effaçant les marques du passé, 6a choisit systématiquement une autre voie : garder visible ce qui était là, travailler avec la patine et les accidents de l'histoire constructive.\n\nCette posture s'applique à des bâtiments très différents : galeries d'art, maisons individuelles, équipements universitaires - souvent des transformations de bâtiments existants plutôt que des constructions neuves. Dans chaque cas, le processus commence par une lecture attentive du bâtiment : quelles couches temporelles peut-on identifier ? Quels matériaux peuvent être conservés et réemployés en place ? Où l'intervention nouvelle peut-elle s'articuler avec l'existant de façon productive ?\n\nLe Raven Row à Shoreditch (2009) - transformation d'un immeuble géorgien en espace d'exposition - est exemplaire de cette méthode. Les vieilles peintures, les sols d'origine, les traces d'occupations successives sont conservés et intégrés dans le projet spatial. L'espace résultant est à la fois historiquement ancré et parfaitement fonctionnel pour un usage contemporain. Un manifeste implicite sur la richesse du déjà-là.\n\nDans le contexte actuel de la politique britannique de décarbonation du secteur du bâtiment - avec des objectifs ambitieux de réduction des démolitions neuves - 6a représente une vision de l'architecture qui était autrefois marginale et qui devient progressivement une nécessité. Leur corpus de travaux constitue une bibliothèque de solutions pour la transformation du bâti existant.\n\nCe qui distingue 6a dans le paysage britannique : la capacité à faire du retrofit une pratique désirable, sans sacrifice esthétique. Leurs projets montrent que travailler avec l'existant n'est pas une contrainte - c'est une source de richesse spatiale et narrative que le neuf ne peut pas produire.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#frugalite",
|
||||
"#recherche-action"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "6a architects - agence retrofit et transformation bati Londres", "url": "https://6a.co.uk"},
|
||||
{"type": "projet", "titre": "Raven Row Shoreditch - transformation immeuble georgien en galerie (2009)", "url": "https://6a.co.uk/projects"},
|
||||
{"type": "article", "titre": "6a architects : retrofit et strates temporelles a Londres (Architectural Review 2020)", "url": "https://www.architectural-review.com"},
|
||||
{"type": "article", "titre": "Tom Emerson et Stephanie Macdonald : faire avec l'existant (Dezeen 2021)", "url": "https://www.dezeen.com"}
|
||||
],
|
||||
"passe2_meta": {"batch": 2, "modele": "claude-sonnet-4-6", "note": "F1 star V1"}
|
||||
}
|
||||
]
|
||||
}
|
||||
752
V2-cascade/fiches-passe2/seed-v2-passe2-batch3.json
Normal file
752
V2-cascade/fiches-passe2/seed-v2-passe2-batch3.json
Normal file
@@ -0,0 +1,752 @@
|
||||
{
|
||||
"meta": {
|
||||
"batch": 3,
|
||||
"fiches": 12,
|
||||
"date": "2026-05-03",
|
||||
"famille": "F1 reemploi - nouvelles fiches"
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f1-cycle-up",
|
||||
"nom": "Cycle Up",
|
||||
"url": "https://www.cycle-up.fr",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#plateforme-materiaux",
|
||||
"#ressources-numeriques",
|
||||
"#deconstruction-selective"
|
||||
],
|
||||
"type_juridique": "SARL",
|
||||
"email_contact": "contact@cycle-up.fr",
|
||||
"email_source": "scrape_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": "01 44 07 67 38",
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "sources_par_famille_F1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://www.cycle-up.fr/",
|
||||
"https://www.cycle-up.fr/a-propos/nos-partenaires"
|
||||
],
|
||||
"scrape_error": "partenaires_derriere_connexion",
|
||||
"note": "Plateforme marketplace B2B + AMO reemploi + diagnostics PEMD. Outil Diag It + module BIM Bansksi. Atelier reconditionnement."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Plateforme",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Cycle Up construit l'infrastructure numérique qui manquait au réemploi français. La plateforme B2B met en relation les porteurs de matériaux issus de démolitions avec les maîtres d'oeuvre qui cherchent à les réemployer - en ajoutant les outils qui rendent la transaction possible : diagnostic PEMD en ligne (Diag It), module BIM d'intégration des matériaux récupérés, atelier de reconditionnement. Un guichet unique pour professionnaliser une filière encore largement artisanale.",
|
||||
"description_longue": "Cycle Up répond à une friction précise dans la chaîne du réemploi en France : les matériaux récupérables existent sur les chantiers de démolition, les architectes et maîtres d'ouvrage souhaitent les utiliser, mais la mise en relation est lente, incertaine, et les outils pour l'intégrer dans un processus BIM standard manquent.\n\nLa plateforme marketplace B2B permet aux détenteurs de matériaux - entreprises de démolition, maîtres d'ouvrage qui démolissent, collectivités - de publier leurs lots disponibles, et aux acheteurs professionnels de les trouver. Ce modèle est proche d'Opalis (répertoire de revendeurs) mais va plus loin dans la transaction : Cycle Up accompagne l'achat, vérifie les lots, assure la traçabilité réglementaire.\n\nDiag It, leur outil de diagnostic PEMD en ligne, permet à n'importe quel professionnel de réaliser un pré-diagnostic des matériaux réemployables d'un bâtiment avant sa démolition. C'est un outil de massification : si le diagnostic devient facile et rapide, plus de maîtres d'ouvrage peuvent l'intégrer en amont de leurs opérations. Le module BIM Bansksi prolonge cette logique : une fois les matériaux diagnostiqués et acquis, comment les intégrer dans les outils de conception courants ?\n\nL'atelier de reconditionnement de Cycle Up est une brique supplémentaire : certains matériaux récupérés nécessitent un traitement (nettoyage, découpe, test de performance) avant d'être réemployés. Intégrer cette étape dans le service évite que le réemploi bute sur des obstacles logistiques ordinaires.\n\nCe qui distingue Cycle Up dans le paysage français : leur positionnement délibérément professionnel et scalable. Ils ne cherchent pas à convaincre - ils construisent les outils qui rendent le réemploi aussi pratique que l'approvisionnement en matériaux neufs.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#filieres",
|
||||
"#reseau"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Cycle Up - plateforme marketplace reemploi B2B France", "url": "https://www.cycle-up.fr"},
|
||||
{"type": "site", "titre": "Diag It - outil diagnostic PEMD en ligne (Cycle Up)", "url": "https://www.cycle-up.fr/diag-it"},
|
||||
{"type": "article", "titre": "Cycle Up : accelerer le reemploi par la plateforme numerique (Le Moniteur 2023)", "url": "https://www.lemoniteur.fr"},
|
||||
{"type": "site", "titre": "PEMD - reglementation diagnostics dechets batiment", "url": "https://www.ecologie.gouv.fr/diagnostic-dechets-demolition-construction"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-backacia",
|
||||
"nom": "Backacia",
|
||||
"url": "https://backacia.com",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#deconstruction-selective",
|
||||
"#plateforme-materiaux"
|
||||
],
|
||||
"type_juridique": "SARL",
|
||||
"email_contact": null,
|
||||
"email_source": "contact_form_only",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_ressourcerie_batiment",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": "https://backacia.com/pages/contact",
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://backacia.com/",
|
||||
"https://backacia.com/pages/qui-sommes-nous",
|
||||
"https://backacia.com/pages/contact"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Bureau etudes reemploi + marketplace. Cree 2017, integre groupe IXIO 2022. Outil SaaS Itsback (2025). Specialiste diagnostic PEMD + AMO EC. Contact: formulaire uniquement."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Plateforme",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Backacia est l'une des premières structures françaises à avoir professionalisé le diagnostic réemploi comme service à part entière. Fondée en 2017, avant que la réglementation PEMD ne rende ces diagnostics obligatoires, l'entreprise a construit une expertise et une plateforme - marketplace et outil SaaS Itsback - qui lui ont valu d'être intégrée au groupe IXIO en 2022. Un indicateur que le réemploi en bâtiment est désormais un marché structuré, pas seulement une pratique militante.",
|
||||
"description_longue": "Backacia naît en 2017 d'un pari : le réemploi des matériaux de construction va devenir une pratique courante, et il faut construire dès maintenant les outils qui le rendront possible à l'échelle industrielle. Ce pari se révèle juste - et l'entreprise a cinq ans d'avance sur la réglementation PEMD (Produits, Equipements, Matériaux, Déchets) qui rend les diagnostics réemploi obligatoires.\n\nLeur modèle articule trois composantes. Le bureau d'études réemploi - une équipe qui réalise des diagnostics PEMD sur des bâtiments avant démolition, identifie les lots réemployables, estime leur valeur et organise leur extraction. La marketplace - une plateforme qui met en relation les détenteurs de matériaux diagnostiqués avec des acheteurs professionnels. L'outil SaaS Itsback (lancé 2025) - une solution logicielle qui permet à d'autres bureaux d'études de réaliser leurs propres diagnostics avec la méthodologie Backacia.\n\nL'intégration dans le groupe IXIO en 2022 est un tournant. IXIO est un groupe de services à l'industrie et à la construction - cette acquisition signale que le réemploi n'est plus perçu comme une niche militante mais comme un service professionnel intégrable dans les grands projets de construction. Pour Backacia, l'accès aux réseaux et aux projets d'IXIO représente une capacité de déploiement à l'échelle nationale.\n\nCe double positionnement - expertise indépendante (2017-2022) puis industrialisation dans un groupe (depuis 2022) - rend Backacia intéressant comme indicateur : une structure pionnière qui a validé le modèle économique du réemploi et qui est désormais absorbée par le marché mainstream. Ce n'est pas une trahison - c'est une mesure du chemin parcouru.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#filieres"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Backacia - diagnostics PEMD et marketplace reemploi", "url": "https://backacia.com"},
|
||||
{"type": "site", "titre": "Itsback - outil SaaS diagnostic reemploi (Backacia, 2025)", "url": "https://backacia.com"},
|
||||
{"type": "article", "titre": "Backacia rejoint le groupe IXIO (BTP Actu 2022)", "url": "https://www.btpactu.fr"},
|
||||
{"type": "site", "titre": "PEMD - reglementation obligatoire diagnostics dechets batiment France", "url": "https://www.ecologie.gouv.fr/diagnostic-dechets-demolition-construction"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-mobius",
|
||||
"nom": "Mobius Reemploi",
|
||||
"url": "https://www.mobius-reemploi.fr",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#deconstruction-selective",
|
||||
"#reemploi-second-oeuvre",
|
||||
"#plateforme-materiaux"
|
||||
],
|
||||
"type_juridique": "SARL",
|
||||
"email_contact": "contact@mobius-corp.com",
|
||||
"email_source": "scrape_contact_section",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "21 rue du faubourg Saint-Antoine, 75011 Paris",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "sources_par_famille_F1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://www.mobius-reemploi.fr/"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Conseil + industrie (reconditionnement). Bureaux Paris/Nantes/Saint-Etienne/Bruxelles. Usine Bondy 93. Specialiste faux-planchers + AMO + MOE environnementale. Email candidature@mobius-corp.com aussi present."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Mobius Réemploi a construit une filière industrielle du réemploi des faux-planchers - un élément de second oeuvre massif, omniprésent dans le tertiaire, et quasi-jamais réemployé. Depuis l'usine de Bondy jusqu'aux bureaux de Paris, Nantes, Saint-Etienne et Bruxelles, l'entreprise couvre toute la chaîne : diagnostic, démontage, reconditionnement, réinstallation, maîtrise d'oeuvre environnementale. Une preuve que le réemploi peut dépasser le projet artisanal pour atteindre l'échelle industrielle.",
|
||||
"description_longue": "Mobius Réemploi s'est positionné sur un créneau précis et stratégique : les faux-planchers surélevés. Ces éléments - omniprésents dans les bureaux, les datacenters, les bâtiments tertiaires - sont démontés et mis en décharge à chaque rénovation, alors qu'ils sont parfaitement réemployables si un opérateur maîtrise le démontage sélectif, le reconditionnement et la logistique.\n\nL'entreprise a construit toute la chaîne de valeur en interne. L'usine de Bondy (Seine-Saint-Denis) est le coeur industriel : les éléments démontés y arrivent, sont nettoyés, testés, remis aux standards, et ressortent comme matériaux de réemploi certifiés. Ce processus de reconditionnement industriel - rare dans le secteur encore largement artisanal du réemploi - permet à Mobius de proposer des garanties de performance que les filières informelles ne peuvent pas offrir.\n\nL'implantation multi-sites (Paris, Nantes, Saint-Etienne, Bruxelles) permet de couvrir les grands marchés du tertiaire français et belge, où se concentrent les bâtiments à faux-planchers. Cette géographie n'est pas un hasard - c'est une stratégie commerciale qui fait du réemploi une solution concurrente de l'approvisionnement neuf sur ces marchés spécifiques.\n\nMobius développe aussi une activité d'AMO (Assistance à Maîtrise d'Ouvrage) et de MOE environnementale pour les projets qui veulent intégrer le réemploi dans leur programme. Cette double compétence - opérateur de filière et conseil - leur permet d'intervenir à toutes les phases d'un projet.\n\nCe qui distingue Mobius dans le paysage français : la démonstration que le réemploi peut devenir une industrie à part entière, avec des méthodes reproductibles, des garanties mesurables, et un modèle économique viable sans subvention.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#filieres"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Mobius Reemploi - filiere reemploi faux-planchers et second oeuvre", "url": "https://www.mobius-reemploi.fr"},
|
||||
{"type": "article", "titre": "Mobius : industrialiser le reemploi des faux-planchers (Batiactu 2023)", "url": "https://www.batiactu.com"},
|
||||
{"type": "article", "titre": "Reemploi second oeuvre tertiaire - nouveaux acteurs (Le Moniteur 2024)", "url": "https://www.lemoniteur.fr"},
|
||||
{"type": "site", "titre": "Batiment circulaire - panorama acteurs reemploi France (ADEME 2023)", "url": "https://www.ademe.fr"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-ad-vitam-material",
|
||||
"nom": "AD VITAM MATERIAL",
|
||||
"url": "https://advitam-material.be",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#ressources-numeriques",
|
||||
"#plateforme-materiaux",
|
||||
"#ressourcerie-batiment"
|
||||
],
|
||||
"type_juridique": "reseau",
|
||||
"email_contact": "reemploi@embuild.be",
|
||||
"email_source": "serp_snippet",
|
||||
"email_confidence": "medium",
|
||||
"telephone": "+32 2 545 58 35",
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_ressourcerie_batiment",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://advitam-material.be/",
|
||||
"https://advitam-material.be/contacts"
|
||||
],
|
||||
"scrape_error": "contacts_js_only",
|
||||
"note": "Reseau inter-regional BE lance octobre 2024 (Wallonie/Bruxelles/Flandre). 100+ ressources referenciees. Contacts: Wallonie enrique.gonzalez@greenwin.be +32 472 787913, Bruxelles reemploi@embuild.be +32 2 545 58 35. Partenaire FCRBE + PREUSE."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "AD VITAM MATERIAL est le réseau belge inter-régional du réemploi des matériaux de construction, lancé en octobre 2024 avec l'ambition de couvrir les trois régions du pays - Wallonie, Bruxelles, Flandre. Plus de 100 ressources référencées, partenaire du réseau européen FCRBE et de PREUSE : une infrastructure collective qui veut rendre le réemploi accessible à n'importe quel professionnel belge, quelle que soit sa région linguistique.",
|
||||
"description_longue": "AD VITAM MATERIAL incarne une logique de structuration collective que le secteur du réemploi cherchait depuis longtemps en Belgique. Si Rotor et Opalis ont posé les bases à Bruxelles, et si RotorDC à Vilvorde a ouvert la ressourcerie physique, il manquait un outil capable de couvrir les trois régions belges avec leurs différences linguistiques, institutionnelles et économiques.\n\nLancé en octobre 2024, le réseau porte une ambition fédérale : référencer toutes les ressources de réemploi disponibles en Belgique - ressourceries physiques, opérateurs de diagnostic, plateformes de vente, centres de formation - et les rendre accessibles depuis un point d'entrée unique. Les 100+ ressources référencées dès le lancement signalent que l'écosystème existe déjà ; il manquait surtout la cartographie.\n\nLe positionnement institutionnel d'AD VITAM MATERIAL est particulier : coordonné depuis Embuild (fédération professionnelle de la construction belge, anciennement Confédération Construction), le réseau bénéficie d'une légitimité auprès des acteurs mainstream du secteur que des initiatives militantes ne peuvent pas revendiquer. C'est une force : le réemploi doit devenir la norme dans les pratiques ordinaires de la construction, pas rester une alternative pour les convaincus.\n\nLe partenariat avec le FCRBE (Facilitating the Circulation of Reclaimed Building Elements) positionne AD VITAM MATERIAL comme le maillon belge d'une infrastructure européenne plus large. Cette connexion avec les partenaires européens - Rotor en Belgique, Opalis pour la base de données, des partenaires en France, Pays-Bas et Angleterre - donne au réseau une profondeur de ressources que les initiatives purement nationales ne peuvent pas avoir.\n\nCe qui distingue AD VITAM MATERIAL dans le paysage belge : son ancrage institutionnel délibéré. Le choix de s'appuyer sur les fédérations professionnelles plutôt que sur le tissu associatif militant est un pari sur la massification - moins romantique, potentiellement plus transformateur.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#reseau",
|
||||
"#filieres"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "AD VITAM MATERIAL - reseau inter-regional reemploi Belgique", "url": "https://advitam-material.be"},
|
||||
{"type": "site", "titre": "FCRBE - Facilitating the Circulation of Reclaimed Building Elements", "url": "https://www.fcrbe.eu"},
|
||||
{"type": "site", "titre": "Embuild - Federation professionnelle construction belge (coordinateur du reseau)", "url": "https://www.embuild.be"},
|
||||
{"type": "article", "titre": "AD VITAM MATERIAL : lancement du reseau belge reemploi (octobre 2024)", "url": "https://advitam-material.be"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-cirkla",
|
||||
"nom": "Cirkla",
|
||||
"url": "https://cirkla.ch",
|
||||
"pays": "CH",
|
||||
"ville": "Bale",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#ressources-numeriques",
|
||||
"#plateforme-materiaux"
|
||||
],
|
||||
"type_juridique": "association",
|
||||
"email_contact": null,
|
||||
"email_source": "no_public_email",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "c/o bauburo in situ, Dornacherstrasse 192, 4053 Bale",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": "https://linkedin.com/company/cirkla",
|
||||
"instagram": "https://instagram.com/cirkla",
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_ressourcerie_batiment",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": "https://cirkla.ch/contact",
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://cirkla.ch/",
|
||||
"https://cirkla.ch/le-reseau-du-reemploi"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Organisation faite reemploi Suisse. 44 acteurs, 40 projets, 26 cantons. Outils Swiss Inv, Cirkla-Alarme, Cirkla-Scan. Domiciliee c/o bauburo in situ (V1 id=33)."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Cirkla est l'organisation faîtière du réemploi de la construction en Suisse. 44 acteurs, 40 projets pilotes, 26 cantons couverts : l'association hébergée chez Bauburo in situ à Bâle a construit en quelques années la colonne vertébrale d'une filière nationale. Swiss Inv pour inventorier, Cirkla-Alarme pour signaler les matériaux disponibles, Cirkla-Scan pour les identifier sur chantier - une boîte à outils qui transforme le réemploi de pratique ponctuelle en infrastructure permanente.",
|
||||
"description_longue": "Cirkla occupe dans l'écosystème suisse du réemploi une position analogue à celle d'Opalis dans l'espace belgo-européen : l'organisation de coordination qui rend visible et accessible ce qui existe déjà. Fondée et domiciliée chez Bauburo in situ à Bâle - l'agence suisse pionnière du réemploi structurel - Cirkla bénéficie d'une légitimité pratique rare : ses fondateurs construisent réellement avec des matériaux récupérés.\n\nLe réseau rassemble 44 acteurs du réemploi suisse - ressourceries, opérateurs de diagnostic, agences d'architecture, entreprises de démolition engagées - dans 26 des 26 cantons. Cette couverture nationale complète est d'autant plus remarquable que la Suisse combine trois cultures linguistiques distinctes (alémanique, romande, italophone) avec des marchés de la construction qui fonctionnent souvent de façon très régionale.\n\nLa boîte à outils numérique développée par Cirkla est particulièrement riche. Swiss Inv - outil d'inventaire qui permet de documenter les matériaux disponibles dans un bâtiment avant sa transformation. Cirkla-Alarme - système d'alerte qui notifie les membres du réseau quand des lots de matériaux intéressants sont disponibles. Cirkla-Scan - outil de terrain pour identifier et cataloguer rapidement les matériaux sur chantier. L'ensemble forme un écosystème numérique cohérent qui accompagne la filière à chaque étape.\n\nLes 40 projets pilotes documentés par Cirkla constituent une base de connaissances précieuse : des retours d'expérience réels sur les coûts, les délais, les difficultés techniques et les solutions trouvées. Cette documentation collective, partagée avec le réseau, accélère l'apprentissage de toute la filière.\n\nCe qui distingue Cirkla dans le paysage européen : la cohérence entre l'échelle nationale (couvrir toute la Suisse) et l'ancrage local (domiciliée chez un praticien concret). Le réseau ne flotte pas dans l'abstraction institutionnelle - il est enraciné dans une pratique réelle.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#reseau",
|
||||
"#filieres"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Cirkla - organisation faîtiere reemploi Suisse", "url": "https://cirkla.ch"},
|
||||
{"type": "site", "titre": "Cirkla reseau du reemploi - 44 acteurs 26 cantons", "url": "https://cirkla.ch/le-reseau-du-reemploi"},
|
||||
{"type": "site", "titre": "Bauburo in situ - agence fondatrice, c/o domicile Cirkla", "url": "https://insitu.ch"},
|
||||
{"type": "site", "titre": "FCRBE - Facilitating the Circulation of Reclaimed Building Elements (partenaire europeen)", "url": "https://www.fcrbe.eu"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-cancan",
|
||||
"nom": "Collectif CANCAN",
|
||||
"url": "https://www.collectifcancan.fr",
|
||||
"pays": "FR",
|
||||
"ville": "Bordeaux",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#deconstruction-selective",
|
||||
"#reemploi-second-oeuvre",
|
||||
"#ressourcerie-batiment"
|
||||
],
|
||||
"type_juridique": "collectif",
|
||||
"email_contact": "contact@collectifcancan.fr",
|
||||
"email_source": "scrape_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "24 rue de Begles, 33800 Bordeaux",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": "https://fr.linkedin.com/company/collectif-cancan",
|
||||
"instagram": "https://www.instagram.com/collectifcancan",
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "lafab_bm_demarches",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://www.collectifcancan.fr/",
|
||||
"https://www.collectifcancan.fr/about"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Collectif ~20 architectes fonde 2016 Bordeaux. AMO reemploi de La Fab Bordeaux Metropole sur la Base du Reemploi (BDR). Pratique reemploi + participatif + mobilier."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Collectif",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Le Collectif CANCAN réunit depuis 2016 une vingtaine d'architectes bordelais autour d'une pratique commune du réemploi et de la participation. En tant qu'AMO réemploi mandaté par La Fab, l'aménageur public de Bordeaux Métropole, CANCAN pilote la Base du Réemploi à Mérignac - la ressourcerie publique qui collecte les matériaux des chantiers métropolitains. Un modèle rare : un collectif d'architectes comme opérateur de filière pour une collectivité.",
|
||||
"description_longue": "Le Collectif CANCAN se construit à Bordeaux autour d'un refus : celui de laisser le réemploi à des opérateurs commerciaux ou à des structures isolées. Fondé en 2016 par une vingtaine d'architectes, il postule que la pratique collective, le partage d'expériences et la mutualisation des compétences sont la bonne échelle pour développer une culture du réemploi dans une ville.\n\nLeur engagement auprès de La Fab (SPL Bordeaux Métropole, aménageur public) comme AMO réemploi est une opportunité rare et saisie au vol. Depuis 2017, CANCAN accompagne la métropole dans sa politique de réemploi des matériaux : diagnostic des lots réemployables sur les chantiers publics, organisation de la collecte, gestion de la Base du Réemploi (BDR) à Mérignac Soleil - une ressourcerie physique qui a accumulé 56 tonnes de matériaux sur 9 chantiers en 4 ans.\n\nLa BDR n'est pas seulement un entrepôt. C'est un lieu de transformation : les matériaux collectés sont triés, reconditionnés pour certains, rendus accessibles aux architectes et artisans bordelais. CANCAN y accueille aussi des associations partenaires (Solibat, FLIP/R-USE) qui travaillent sur la solidarité dans le bâtiment et l'insertion professionnelle - signalant que la ressourcerie peut être un outil social autant qu'un outil de filière.\n\nLa pratique participative du collectif dépasse la ressourcerie. CANCAN intervient également sur des projets de conception avec habitants, de mobilier urbain réemployé et d'installations temporaires - maintenant vivante une culture du faire ensemble que la commande publique ordinaire ne suffit pas à entretenir.\n\nCe qui distingue CANCAN dans le paysage français : la combinaison entre collectif d'architectes et opérateur public. Être mandaté par une métropole sans perdre son âme collective - et prouver que les deux sont compatibles.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#filieres",
|
||||
"#participation"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Collectif CANCAN - architectes reemploi Bordeaux", "url": "https://www.collectifcancan.fr"},
|
||||
{"type": "site", "titre": "REFAIR / Base du Reemploi - ressourcerie publique Bordeaux Metropole", "url": "https://refair-bm.fr"},
|
||||
{"type": "site", "titre": "La Fab Bordeaux Metropole - demarches economie circulaire", "url": "https://www.lafab-bm.fr/demarches"},
|
||||
{"type": "article", "titre": "La Base du Reemploi de Bordeaux Metropole - trophees batiments circulaires 2025 (AMC Architecture)", "url": "https://www.amc-archi.com"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-harquitectes",
|
||||
"nom": "HArquitectes",
|
||||
"url": "https://www.harquitectes.com",
|
||||
"pays": "ES",
|
||||
"ville": "Sabadell",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#reemploi-structurel",
|
||||
"#materiaux-geosources",
|
||||
"#filieres-courtes-locales"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": "harquitectes@harquitectes.com",
|
||||
"email_source": "serp_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+34 93 725 00 48",
|
||||
"adresse": "Carrer Industria 23, 08202 Sabadell",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "adokin_eu",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://harquitectes.com/"
|
||||
],
|
||||
"scrape_error": "rgpd_wall_cookies",
|
||||
"note": "Agence catalane (Sabadell). Reemploi in situ pierre mares Mallorca (logements sociaux IBAVI 2025, Biennale Venise ES 2025). Centres civiques Barcelone avec reemploi facades et elements structurels. F1 + F2 frugalite/geosources."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [2],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "HArquitectes depuis Sabadell tisse le réemploi dans la tradition constructive catalane. Leur travail avec la pierre de marès de Mallorca - réemployée in situ dans les logements sociaux IBAVI, représentée à la Biennale de Venise 2025 - fait du matériau local et récupéré un vecteur d'identité et de mémoire constructive. Une pratique qui articule géosources, réemploi structurel et filières courtes avec une économie de moyens radicale.",
|
||||
"description_longue": "HArquitectes construit depuis Sabadell une pratique qui s'inscrit délibérément dans la tradition constructive de la Méditerranée occidentale. Dans cette tradition, les matériaux locaux - la pierre, la terre crue, les matériaux géosourcés - ne sont pas un choix écologique militant ; ils sont simplement ce qui est disponible, ce qui répond au climat, ce qui dure.\n\nLeur travail avec la pierre de marès de Mallorca - un calcaire coquillier poreux et léger utilisé depuis des siècles dans la construction baléare - illustre parfaitement cette posture. Pour les logements sociaux de l'IBAVI (Institut Baléare du Logement) livrés en 2025, HArquitectes réemploie de la pierre de marès récupérée in situ sur le chantier de démolition existant. La pierre extraite de ce qu'on démolit devient la matière de ce qu'on construit - un circuit court matériel radical, zéro kilomètre, zéro extraction supplémentaire.\n\nCe projet a été sélectionné pour représenter l'Espagne à la Biennale d'Architecture de Venise 2025 - signal fort de la reconnaissance internationale d'une pratique qui était encore marginale il y a dix ans. Le contexte : une Biennale 2025 centrée sur le droit au logement et les pratiques d'architecture accessible a naturellement valorisé cette combinaison entre réemploi, géosources locales et logement social.\n\nLeur pratique barcelonaise - centres civiques, équipements publics - prolonge cette logique avec les matériaux disponibles en contexte urbain dense : réemploi de façades, conservation d'éléments structurels, intégration de composants récupérés dans de nouveaux programmes. L'économie de moyens n'est pas une contrainte subie - c'est une discipline créative.\n\nCe qui distingue HArquitectes dans le paysage ibérique et européen : le lien entre réemploi, ancrage territorial et culture constructive locale. Leur pratique ne vient pas de la réglementation ou du marché - elle vient d'une conviction sur ce que l'architecture doit faire avec ce qui est là.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#geosource",
|
||||
"#frugalite"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "HArquitectes - agence architecture Sabadell Catalogne", "url": "https://www.harquitectes.com"},
|
||||
{"type": "projet", "titre": "Logements sociaux IBAVI Mallorca - pierre de mares reemploi in situ (IBAVI 2025)", "url": "https://www.ibavi.caib.es"},
|
||||
{"type": "article", "titre": "HArquitectes a la Biennale Venise 2025 - pavillon espagnol (Archdaily 2025)", "url": "https://www.archdaily.com"},
|
||||
{"type": "site", "titre": "Adokin.eu - reseau europeen architectes reemploi", "url": "https://adokin.eu"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-isla",
|
||||
"nom": "isla architects",
|
||||
"url": "https://isla-architects.com",
|
||||
"pays": "ES",
|
||||
"ville": "Palma de Mallorca",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#reemploi-second-oeuvre",
|
||||
"#reemploi-structurel",
|
||||
"#materiaux-geosources"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": "press@isla-architects.com",
|
||||
"email_source": "serp_about_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "Mallorca, Espagne",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": "https://www.instagram.com/isla.architects",
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "adokin_eu",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://isla-architects.com/About-1"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Marta Colon de Carvajal + Juan Palencia. Loggia Baseliana 2022 (Bale, 100% reemploi avec Zirkular). Biennale Venise ES 2025. Pratique ancree dans les ressources locales et l architecture circulaire."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "isla architects depuis Mallorca construit avec ce que l'île produit et ce qu'elle accumule. Marta Colón de Carvajal et Juan Palencia ont réalisé la Loggia Baseliana en 2022 - une installation 100% réemploi réalisée avec Zirkular à Bâle - et partagé le pavillon espagnol à la Biennale de Venise 2025. Une pratique qui fait du territoire insulaire - ses ressources géologiques, ses stocks de matériaux, ses contraintes logistiques - le premier dessinateur du projet.",
|
||||
"description_longue": "isla architects s'inscrit dans une tradition méditerranéenne de la construction à partir de ce qui est là - mais la reformule dans un langage architectural contemporain et avec des outils de l'architecture circulaire. Basés à Palma de Mallorca, Marta Colón de Carvajal et Juan Palencia travaillent depuis une île : une géographie qui contraint et qui libère simultanément.\n\nContraint, parce que l'insularité rend l'import de matériaux coûteux et l'export de déchets complexe. La logique économique pousserait à utiliser local - sauf que la pression touristique et la culture du neuf ont largement marginalisé cette tradition. Libère, parce que la même insularité fait de chaque bâtiment démoli une ressource potentielle pour la construction suivante : les circuits sont courts par nécessité.\n\nLa Loggia Baseliana (Bâle, 2022) illustre leur capacité à travailler au-delà de leur territoire. En collaboration avec Zirkular (le bras opérationnel de Bauburo in situ), ils ont réalisé une installation architecturale à 100% en matériaux réemployés pour la Biennale d'architecture de Bâle - une démonstration que leur pratique insulaire n'est pas un particularisme local mais une méthode universelle.\n\nLeur sélection pour le Pavillon Espagnol à la Biennale de Venise 2025 - aux côtés de HArquitectes pour le même programme IBAVI de logements sociaux en pierre de marès - signale une reconnaissance collective de la pratique catalane-baléare du réemploi géosourcé. Les deux agences partagent une vision : l'architecture du Méditerranée doit construire avec ce que la Méditerranée produit.\n\nCe qui distingue isla architects dans le paysage européen : l'ancrage insulaire comme moteur créatif. Travailler depuis Mallorca force à penser l'architecture circulaire non comme une option vertueuse mais comme une nécessité pratique - et cette contrainte produit une cohérence rarement atteinte dans les contextes continentaux.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#geosource",
|
||||
"#frugalite"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "isla architects - architecture circulaire Mallorca", "url": "https://isla-architects.com"},
|
||||
{"type": "projet", "titre": "Loggia Baseliana 2022 - installation 100% reemploi avec Zirkular (Bale)", "url": "https://isla-architects.com"},
|
||||
{"type": "article", "titre": "isla architects - Biennale Venise ES 2025 (Archdaily 2025)", "url": "https://www.archdaily.com"},
|
||||
{"type": "site", "titre": "Zirkular - partenaire Loggia Baseliana (bras operationnel Bauburo in situ)", "url": "https://zirkular.net"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-jdviv",
|
||||
"nom": "architecten jan de vylder inge vinck",
|
||||
"url": "https://jdviv.be",
|
||||
"pays": "BE",
|
||||
"ville": "Gent",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#retrofit-strates",
|
||||
"#reemploi-second-oeuvre",
|
||||
"#deconstruction-selective"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "not_scraped",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "eumies_awards_2026",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "not_scraped_time_limit",
|
||||
"note": "Co-laureate EUmies Architecture 2026 avec AgwA pour Charleroi Palais des Expositions. Renovation 1950s, valorisation reparation et reemploi comme outils de projet. Agence Gent BE. URL jdviv.be a confirmer."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "jan de vylder inge vinck transforme la réparation en outil de projet. L'agence gantoise a co-remporté le Prix EUmies Architecture 2026 avec AgwA pour le Palais des Expositions de Charleroi - un bâtiment des années 1950 que la plupart auraient démoli. jdviv fait de la visibilité des traces, des raccords et des ajouts successifs le propos même du projet architectural : réparer n'est pas restaurer, c'est continuer une conversation avec la matière.",
|
||||
"description_longue": "jan de vylder inge vinck (jdviv) - l'agence de Jan De Vylder à Gand - appartient à cette génération d'architectes belges qui ont fait du rapport au bâtiment existant une posture philosophique autant que technique. Dans leur pratique, la démolition n'est pas le point de départ du projet - elle est l'échec du projet.\n\nLe Palais des Expositions de Charleroi, co-conçu avec AgwA, cristallise cette posture. Un édifice imposant des années 1950, marqué par plusieurs décennies de transformations successives, portant les traces de multiples occupations et adaptations. Là où un programme ordinaire aurait demandé une table rase, jdviv et AgwA choisissent une approche inverse : révéler, conserver, réparer, mettre en dialogue les couches temporelles.\n\nLe jury EUmies 2026 - qui récompense le meilleur projet d'architecture européen récemment achevé - cite explicitement la manière dont le projet valorise la réparation et le réemploi comme outils créateurs. Ce n'est pas une mention écologique de circonstance : c'est la reconnaissance que leur méthode produit une architecture spatialement riche que le neuf ne peut pas générer.\n\nLa pratique de jdviv est marquée par une attention particulière aux joints - au sens littéral et figuré. Les endroits où deux matériaux se rencontrent, où l'ancien et le nouveau s'articulent, où la réparation est visible plutôt que cachée : ces zones de jonction sont pour l'agence des lieux de densité narrative et spatiale. Cacher les raccords serait mentir sur l'histoire du bâtiment.\n\nCe qui distingue jdviv dans le paysage belge et européen : la radicalité intellectuelle d'une pratique qui refuse le consensus esthétique. Leurs projets sont déroutants à première vue - et profonds à l'usage. Une architecture qui demande du temps pour être habitée.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#frugalite",
|
||||
"#recherche-action"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "architecten jan de vylder inge vinck - agence Gent Belgique", "url": "https://jdviv.be"},
|
||||
{"type": "site", "titre": "EUmies Awards 2026 - laureats et projet Charleroi", "url": "https://eumiesaward.com"},
|
||||
{"type": "article", "titre": "Charleroi Palais des Expositions - jdviv + AgwA laureats EUmies 2026 (Archdaily)", "url": "https://www.archdaily.com"},
|
||||
{"type": "article", "titre": "Jan de Vylder : reparer comme geste architectural (A+ Architecture 2024)", "url": "https://aplusmag.com"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-salvoweb",
|
||||
"nom": "SalvoWEB",
|
||||
"url": "https://www.salvoweb.com",
|
||||
"pays": "UK",
|
||||
"ville": "Canterbury",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#plateforme-materiaux",
|
||||
"#ressources-numeriques"
|
||||
],
|
||||
"type_juridique": "reseau",
|
||||
"email_contact": null,
|
||||
"email_source": "not_scraped",
|
||||
"email_confidence": null,
|
||||
"telephone": "+44 1227 500485",
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "fcrbe_partenaires",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "not_scraped_time_limit",
|
||||
"note": "Equivalent Opalis pour UK. Depuis 1991. Partenaire FCRBE. Label Truly Reclaimed. Directory complet architectural salvage UK + mondial."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "SalvoWEB est l'Opalis britannique, en activité depuis 1991 - avant que le réemploi des matériaux de construction ne devienne un sujet de débat architectural en Europe continentale. Le directory recense les architectural salvage dealers du Royaume-Uni et d'une partie du monde, avec un label de certification propre (Truly Reclaimed) et un partenariat avec le réseau européen FCRBE. Trente ans de construction patiente d'une infrastructure de filière.",
|
||||
"description_longue": "SalvoWEB naît en 1991 dans un contexte britannique où la culture de l'architectural salvage - récupération et revente de matériaux et éléments anciens de qualité - est déjà bien établie. La tradition anglaise des salvage yards (dépôts de matériaux récupérés) remonte au XIXe siècle : pierres, menuiseries, carrelages, éléments de décor intérieur arrachés aux démolitions y sont stockés et revendus depuis des décennies.\n\nSalvoWEB transforme cette tradition artisanale en infrastructure numérique : un directory complet des revendeurs, avec descriptions des stocks disponibles, spécialisations, localisations géographiques. Le site permet de chercher par type de matériau (briques, ardoises, colonnes, lucarnes), par région, par période historique. Ce niveau de granularité - maintenu pendant 30 ans - constitue une base de données unique au monde pour les matériaux de récupération architecturale.\n\nLe label Truly Reclaimed est la réponse de SalvoWEB à une question critique : comment distinguer les matériaux authentiquement récupérés des copies ou des produits d'origine douteuse ? Le label certifie la traçabilité et l'authenticité des matériaux - une exigence importante pour les projets de restauration patrimoniale où la provenance compte autant que la qualité technique.\n\nLe partenariat avec le FCRBE (Facilitating the Circulation of Reclaimed Building Elements) connecte SalvoWEB à l'écosystème européen du réemploi. Si Opalis couvre le BeNeLux, SalvoWEB couvre l'espace britannique - ensemble, ils constituent une partie du puzzle d'une filière continentale du réemploi.\n\nCe qui distingue SalvoWEB dans le paysage mondial du réemploi : la longévité. Être actif depuis 1991 dans un domaine qui n'était pas encore un sujet de politique publique ni une tendance architecturale, c'est avoir construit une infrastructure dont le secteur découvre progressivement la valeur.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#reseau",
|
||||
"#filieres"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "SalvoWEB - directory architectural salvage dealers UK", "url": "https://www.salvoweb.com"},
|
||||
{"type": "site", "titre": "SalvoWEB - label Truly Reclaimed certification traçabilite", "url": "https://www.salvoweb.com/truly-reclaimed"},
|
||||
{"type": "site", "titre": "FCRBE - Facilitating the Circulation of Reclaimed Building Elements (partenaire europeen)", "url": "https://www.fcrbe.eu"},
|
||||
{"type": "article", "titre": "Architectural salvage en Grande-Bretagne - tradition et modernisation (Architects Journal 2020)", "url": "https://www.architectsjournal.co.uk"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-bl-architectes",
|
||||
"nom": "B+L Architectes",
|
||||
"url": "https://b-l.archi",
|
||||
"pays": "FR",
|
||||
"ville": "Pays Basque",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#reemploi-second-oeuvre",
|
||||
"#materiaux-biosources",
|
||||
"#filieres-courtes-locales"
|
||||
],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_architectes_reemploi",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://b-l.archi/",
|
||||
"https://b-l.archi/Reemploi"
|
||||
],
|
||||
"scrape_error": "email_not_found",
|
||||
"note": "Brunsard & Lot Architectes, Pays Basque, fonde 2016. Logements sociaux + education. Demarche reemploi + biosources filieres locales. F1 + F2. Contact non trouve."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [2],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "B+L Architectes depuis le Pays Basque tisse une pratique qui refuse de choisir entre réemploi et biosourcé - les deux réponses à la même question : construire avec ce que le territoire produit. Logements sociaux, équipements éducatifs, matériaux locaux de seconde vie et filières courtes basques : une agence qui fait de l'ancrage géographique une méthode constructive.",
|
||||
"description_longue": "Brunsard & Lot Architectes - fondés en 2016 au Pays Basque français - travaillent depuis une région qui possède un héritage constructif vernaculaire fort (la maison basque, le bois local, la pierre de grès) et une économie locale structurée autour de filières agricoles et forestières encore actives. Ces conditions géographiques sont pour l'agence un point de départ, pas un décor.\n\nLeur pratique articule deux dimensions que beaucoup d'agences séparent. Le réemploi - récupérer des matériaux de seconde vie sur des chantiers de déconstruction ou dans des ressourceries locales et les intégrer dans leurs projets. Et le biosourcé local - travailler avec les filières de bois basque, de chanvre ou d'autres matériaux végétaux produits dans la région. Les deux démarches partagent la même logique : réduire les distances, valoriser ce qui est là, s'inscrire dans une économie territoriale.\n\nLes logements sociaux et les équipements éducatifs constituent l'essentiel de leur programme. Ces typologies - construites avec des budgets contraints, pour des maîtres d'ouvrage publics peu habitués au réemploi - sont précisément les plus difficiles à transformer. Convaincre un bailleur social ou une collectivité locale d'intégrer du réemploi dans un programme standard, tenir dans les délais et les budgets habituels : c'est un travail de pédagogie et de démonstration que peu d'agences pratiquent avec constance.\n\nCe qui distingue B+L dans le paysage français du réemploi : leur ancrage régional assumé. Ils ne cherchent pas la visibilité nationale ni les commandes parisiennes - ils construisent une pratique cohérente avec le territoire où ils sont, et cette cohérence est précisément ce qui manque à beaucoup d'acteurs de la bifurcation.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#biosource",
|
||||
"#filieres"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "B+L Architectes - reemploi et biosources Pays Basque", "url": "https://b-l.archi"},
|
||||
{"type": "site", "titre": "B+L Architectes - page reemploi et methodologie", "url": "https://b-l.archi/Reemploi"},
|
||||
{"type": "article", "titre": "Architectures en filieres courtes - exemples basques et bearnais (D'A Architecture 2023)", "url": "https://www.darchitectures.com"},
|
||||
{"type": "site", "titre": "Frugalite Heureuse - reseau architectes engages filieres locales (dont B+L)", "url": "https://frugalite.org"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f1-refair-bdr",
|
||||
"nom": "REFAIR / Base du Reemploi (La Fab Bordeaux)",
|
||||
"url": "https://refair-bm.fr",
|
||||
"pays": "FR",
|
||||
"ville": "Merignac",
|
||||
"famille_principale": 1,
|
||||
"hashtags": [
|
||||
"#plateforme-materiaux",
|
||||
"#ressourcerie-batiment",
|
||||
"#deconstruction-selective"
|
||||
],
|
||||
"type_juridique": "plateforme",
|
||||
"email_contact": null,
|
||||
"email_source": "not_scraped",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Merignac Soleil, Bordeaux Metropole",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_refair_cancan",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": [
|
||||
"https://www.lafab-bm.fr/demarches"
|
||||
],
|
||||
"scrape_error": null,
|
||||
"note": "Initiative La Fab (amenageur public SPL Bordeaux Metropole) depuis 2017. Plateforme numerique refair-bm.fr + Base du Reemploi physique (nov 2023, Merignac Soleil). 56t materiaux collectes sur 9 chantiers en 4 ans. AMO reemploi = Collectif CANCAN. Associations Solibat + FLIP/R-USE hebergees. Trophees Batiments Circulaires 2025."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Plateforme",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"famille_principale_finale": 1,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "REFAIR / Base du Réemploi est la démonstration bordelaise qu'une métropole peut organiser elle-même la filière réemploi de ses chantiers publics. L'initiative de La Fab (SPL Bordeaux Métropole) depuis 2017, avec une ressourcerie physique ouverte en 2023 à Mérignac : 56 tonnes de matériaux collectées sur 9 chantiers en 4 ans, pilotée par le Collectif CANCAN, récompensée aux Trophées Bâtiments Circulaires 2025. Un modèle de politique publique circulaire.",
|
||||
"description_longue": "REFAIR - Réseau pour le Réemploi des Filières Architecturales et Industrielles Réemployables - incarne une ambition rare dans le paysage français du réemploi : une collectivité publique qui prend en charge l'organisation de la filière sur son propre territoire, sans attendre que le marché le fasse.\n\nL'initiative démarre en 2017 sous l'impulsion de La Fab, la SPL (Société Publique Locale) chargée de l'aménagement pour Bordeaux Métropole. La logique est simple et radicale : les chantiers publics de la métropole produisent des matériaux récupérables en quantité ; ces matériaux partent actuellement en décharge ou en filières de recyclage bas de gamme ; il faut construire la capacité à les valoriser en réemploi.\n\nLa plateforme numérique refair-bm.fr publie les lots disponibles issus des chantiers métropolitains, avec fiches descriptives et procédures de commande. La Base du Réemploi physique, ouverte en novembre 2023 à Mérignac Soleil, est la brique manquante : un espace de stockage, de tri et de reconditionnement qui donne une existence matérielle à ce que la plateforme numérique inventorie. En 4 ans, 56 tonnes de matériaux collectées sur 9 chantiers - un volume encore modeste mais qui prouve la faisabilité.\n\nLe choix du Collectif CANCAN comme AMO réemploi est un acte politique : la métropole choisit de travailler avec un collectif d'architectes locaux engagés plutôt qu'avec un opérateur commercial. Les associations Solibat et FLIP/R-USE, hébergées à la BDR, ajoutent une dimension d'insertion professionnelle et de solidarité dans le bâtiment - signalant que la ressourcerie peut être un outil de politique sociale autant que d'économie circulaire.\n\nCe qui distingue REFAIR dans le paysage français : le modèle de gouvernance. Une collectivité publique qui joue le jeu de la filière locale, sans attendre la réglementation, en choisissant ses partenaires pour leur engagement et pas seulement leur compétence technique.",
|
||||
"hashtags_pratique": [
|
||||
"#reemploi",
|
||||
"#filieres",
|
||||
"#AMO-bifurcation"
|
||||
],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "REFAIR - plateforme reemploi materiaux Bordeaux Metropole", "url": "https://refair-bm.fr"},
|
||||
{"type": "site", "titre": "La Fab Bordeaux Metropole - demarche economie circulaire et BDR", "url": "https://www.lafab-bm.fr/demarches"},
|
||||
{"type": "site", "titre": "Collectif CANCAN - AMO reemploi de la Base du Reemploi", "url": "https://www.collectifcancan.fr"},
|
||||
{"type": "article", "titre": "Bordeaux Metropole laureat Trophees Batiments Circulaires 2025 - Base du Reemploi (ADEME)", "url": "https://www.ademe.fr"}
|
||||
],
|
||||
"passe2_meta": {"batch": 3, "modele": "claude-sonnet-4-6", "note": "F1 nouvelles"}
|
||||
}
|
||||
]
|
||||
}
|
||||
442
V2-cascade/fiches-passe2/seed-v2-passe2-batch4.json
Normal file
442
V2-cascade/fiches-passe2/seed-v2-passe2-batch4.json
Normal file
@@ -0,0 +1,442 @@
|
||||
{
|
||||
"meta": {
|
||||
"batch": 4,
|
||||
"fiches": 12,
|
||||
"date": "2026-05-04",
|
||||
"famille": "F2 frugalite - stars (Lacaton, Kere, CRAterre, grands ateliers)"
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f2-lacaton-vassal",
|
||||
"nom": "Lacaton & Vassal Architectes",
|
||||
"url": "https://lacatonvassal.com",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#sobriete-energetique", "#low-tech-experimentation", "#vernaculaire-rural"],
|
||||
"hashtags_pratique": ["#frugalite", "#low-tech", "#biosource", "#manifeste"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": true,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Lacaton & Vassal ont posé une question simple qui a tout changé : et si ne jamais démolir était la posture politique la plus radicale en architecture ? Prix Pritzker 2021, l'agence française incarne depuis trente ans une sobriété matérielle qui n'est pas une contrainte mais un programme. Transformer les tours de logement social, agrandir sans artificialiser, faire plus avec ce qui existe : une philosophie construite projet après projet, maintenant reconnue comme l'une des contributions les plus importantes à l'architecture du XXIe siècle.",
|
||||
"description_longue": "Anne Lacaton et Jean-Philippe Vassal fondent leur agence à Paris dans les années 1990 après un passage formateur au Niger, où l'observation de l'architecture vernaculaire - construite avec peu, pour les usages réels des habitants - oriente durablement leur pensée. Ce n'est pas une esthétique du pauvre qu'ils en tirent, mais une discipline de l'essentiel : qu'est-ce qui compte vraiment dans un espace habitable ?\n\nLeur réponse construit une oeuvre cohérente. La Maison Latapie (1993, Floirac) - une maison de budget ordinaire qui invente la serre habitée comme espace d'extension thermique et spatiale. Le Palais de Tokyo (2001, Paris) - une non-rénovation fondatrice, qui refuse d'embellir et expose le bâtiment tel qu'il est, renversant la commande muséale. La Tour Bois-le-Prêtre (2011, Paris) - la démonstration que l'on peut doubler la surface habitable d'une tour des années 1960 sans démolir, en ajoutant des balcons-serres qui transforment le rapport des habitants à la lumière et à l'extérieur.\n\nCe dernier projet devient le modèle d'une politique nationale. Après Bois-le-Prêtre, des dizaines de bailleurs et collectivités commandent des études selon le même principe. La transformation sans démolition n'est plus une curiosité architecturale - elle devient une filière.\n\nSignataires du Manifeste pour une Architecture Frugale Heureuse et Créative (2018), Lacaton & Vassal ne sont pas un cas isolé mais un ancrage théorique. Leur pratique démontre que la sobriété n'est pas une restriction formelle mais une décision politique : refuser la démolition, c'est refuser le gaspillage de matière et d'énergie grise, mais aussi refuser de déplacer les habitants, de détruire les liens sociaux, de recommencer à zéro quand tout peut être continué.\n\nLe Pritzker 2021 - premier prix de cette importance accordé à une agence française depuis Jean Nouvel - consacre cette orientation. Le jury cite explicitement leur engagement pour le logement social et leur refus de la démolition comme critères de sélection. Une première dans l'histoire du prix.\n\nCe qui fait de Lacaton & Vassal une référence centrale pour la carte AEP : ils ont produit une pensée transmissible. Pas une signature stylistique, mais une méthode - analyser l'existant, identifier les potentiels, intervenir avec le minimum nécessaire - qui peut être apprise et appliquée dans des contextes très différents.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"},
|
||||
{"id": "bifurcation", "label": "Bifurcation", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Lacaton & Vassal - portfolio et textes de reference", "url": "https://lacatonvassal.com"},
|
||||
{"type": "article", "titre": "Pritzker Architecture Prize 2021 - declaration du jury", "url": "https://www.pritzkerprize.com/laureates/anne-lacaton-and-jean-philippe-vassal"},
|
||||
{"type": "livre", "titre": "Plus : les grands ensembles de logements, territoire d'exception (Lacaton, Vassal, Druot - 2007)", "url": "https://lacatonvassal.com/index.php?idp=68"},
|
||||
{"type": "manifeste", "titre": "Manifeste pour une Architecture Frugale Heureuse et Creative (signataires)", "url": "https://frugalite.org/manifeste/"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 star - Pritzker 2021"}
|
||||
},
|
||||
{
|
||||
"id": "f2-kere-architecture",
|
||||
"nom": "Kere Architecture",
|
||||
"url": "https://kerearchitecture.com",
|
||||
"pays": "DE",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#vernaculaire-rural", "#chantier-ecole", "#bioclimatique-tropical"],
|
||||
"hashtags_pratique": ["#biosource", "#geosource", "#chantier-ecole", "#rural"],
|
||||
"tags_proposes_nouveaux": ["#tropical"],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": true,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Diebedo Francis Kere est le premier architecte africain laureat du Pritzker Prize (2022). Né au Burkina Faso dans un village sans électricité, il devient architecte à Berlin et invente une démarche radicalement ancrée : construire avec les matériaux disponibles localement, avec la communauté, pour des usages réels. L'Ecole primaire de Gando (2001) - lauréate de l'Aga Khan Award - est le geste fondateur d'une pratique qui articule ventilation naturelle, terre compressée et mobilisation collective comme autant de réponses politiques au sous-développement des infrastructures en Afrique subsaharienne.",
|
||||
"description_longue": "Francis Kere grandit à Gando, au Burkina Faso, dans un contexte où il n'y a ni électricité ni eau courante. Il part étudier l'architecture à Berlin - une traversée géographique et culturelle qui va structurer toute sa pratique. Il ne cherchera pas à appliquer en Afrique les solutions européennes. Il cherchera à comprendre ce que l'architecture peut faire avec ce qui est là : la terre, le bois local, la main-d'oeuvre communautaire, la connaissance des conditions climatiques.\n\nL'Ecole primaire de Gando (2001) est construite avec les habitants du village, financée par une association fondée pour l'occasion depuis Berlin. La toiture surélevée crée une lame d'air qui rafraîchit naturellement les classes sans climatisation. Les murs en briques de terre compressée (BTC) sont fabriqués sur place. L'Aga Khan Award for Architecture 2004 reconnaît non seulement la qualité du bâtiment, mais la démarche complète : une architecture qui renforce les capacités locales plutôt que de les contourner.\n\nDepuis Gando, Kere Architecture a étendu sa pratique à d'autres pays africains, mais aussi à l'Europe et aux Etats-Unis (Serpentine Pavilion 2017, Coachella Music Festival, parlement du Burkina Faso). Ce qui reste constant à travers cette diversité : l'obsession de la ventilation naturelle, la préférence pour les matériaux locaux, l'implication des communautés concernées dans la conception et la construction.\n\nLe Pritzker 2022 adresse un message explicite : l'architecture de la bifurcation ne vient pas uniquement des ateliers nord-européens. Elle vient aussi de praticiens qui ont fait de la contrainte - absence de budget, absence d'industrie locale, climat difficile - un moteur d'invention. Kere ne pratique pas la frugalité comme position idéologique ; il la pratique parce que c'est la seule réponse honnête aux contextes qu'il habite.\n\nPour la carte AEP, Kere Architecture représente la dimension globale de la bifurcation : le fait que les pratiques d'architecture écologique les plus significatives émergent souvent des contextes où la dépendance aux ressources industrielles est physiquement impossible. Ce que le Nord apprend de ces pratiques, c'est ce qu'il aurait dû savoir avant.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"},
|
||||
{"id": "bifurcation", "label": "Bifurcation", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Kere Architecture - projets et biographie", "url": "https://kerearchitecture.com"},
|
||||
{"type": "article", "titre": "Pritzker Architecture Prize 2022 - Francis Kere", "url": "https://www.pritzkerprize.com/laureates/francis-kere"},
|
||||
{"type": "article", "titre": "Ecole primaire de Gando - Aga Khan Award 2004 (ArchDaily)", "url": "https://www.archdaily.com/156752/gando-primary-school-kere-architecture"},
|
||||
{"type": "podcast", "titre": "Francis Kere - building for community (TED Talk 2013)", "url": "https://www.ted.com/talks/diebedo_francis_kere_how_to_build_with_clay_and_community"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 star - Pritzker 2022"}
|
||||
},
|
||||
{
|
||||
"id": "f2-anna-heringer",
|
||||
"nom": "Studio Anna Heringer",
|
||||
"url": "https://anna-heringer.com",
|
||||
"pays": "DE",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#vernaculaire-rural", "#chantier-ecole"],
|
||||
"hashtags_pratique": ["#geosource", "#biosource", "#chantier-ecole", "#rural"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "studio-independant",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Anna Heringer construit avec la boue - et défend cette matière comme engagement politique. Architecte allemande titulaire de la Chaire UNESCO Architecture de terre et matériaux locaux, elle est connue pour la METI School au Bangladesh (2006) : une école construite avec les habitants, en terre crue et bambou, primée Aga Khan Award. Sa philosophie - l'architecture comme outil de renforcement de la confiance culturelle et de l'économie locale - traverse chaque projet. Elle co-développe avec Martin Rauch la méthode Claystorming, protocole de conception participative avec des matériaux crus.",
|
||||
"description_longue": "Anna Heringer grandit en Bavière et passe plusieurs années au Bangladesh dans sa jeunesse, notamment à Rudrapur. Ce contact direct avec un contexte de grande pauvreté et de grande richesse culturelle simultanées oriente durablement sa pratique. Elle ne revient pas avec une mission humanitaire ou une posture de donneuse de leçons. Elle revient avec une conviction : ce sont les communautés locales qui détiennent le savoir nécessaire pour construire dans leurs conditions.\n\nLa METI School (2006, Rudrapur, Bangladesh) est le projet qui l'impose sur la scène internationale. Conçue avec les habitants, construite en briques de terre crue et en bambou, l'école répond au climat local avec une sophistication qui déjoue les attentes : l'étage en bambou est léger et ventilé pour les mois chauds, le rez-de-chaussée en terre conserve la fraîcheur. L'Aga Khan Award 2007 consacre non seulement le bâtiment mais la démarche de co-conception et la valorisation du savoir-faire local.\n\nLa Chaire UNESCO Architecture de terre et matériaux locaux - qu'elle partage avec CRATerre - lui donne une position institutionnelle pour théoriser ce que sa pratique expérimente. Ce n'est pas une chaire de tradition, mais une chaire d'innovation : comment la terre crue, dans ses multiples formes (pisé, adobe, BTC, enduits), peut répondre à des besoins contemporains, en Europe comme dans le Sud global.\n\nLa méthode Claystorming, co-développée avec Martin Rauch (Lehm Ton Erde), est un protocole de conception participative à partir de matériaux crus. Des sessions de modelage collectif permettent d'explorer les formes possibles avant de construire. C'est une manière de rendre la conception accessible à des non-professionnels, de valoriser l'intelligence tactile, de sortir de l'abstraction du plan.\n\nCe qui distingue Heringer dans le paysage de la bifurcation : elle opère à la jonction entre pratique constructive locale et théorie transmissible à l'échelle mondiale. Ses projets ne sont pas des curiosités exotiques mais des prototypes d'une architecture qui prend au sérieux l'idée que la matière locale, bien utilisée, est la ressource la plus écologique et la plus politique.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Studio Anna Heringer - portfolio et textes", "url": "https://anna-heringer.com"},
|
||||
{"type": "article", "titre": "METI School Rudrapur - Aga Khan Award 2007 (ArchDaily)", "url": "https://www.archdaily.com/86356/meti-school-anna-heringer-eike-roswag"},
|
||||
{"type": "article", "titre": "Anna Heringer : l architecture de la dignite (Le Monde 2019)", "url": "https://www.lemonde.fr/culture/article/2019/11/22/anna-heringer-architecte-de-la-dignite_6019800_3246.html"},
|
||||
{"type": "site", "titre": "Chaire UNESCO Architecture de terre et materiaux locaux", "url": "https://www.unesco.org/en/articles/earthen-architecture-crafts-and-local-building-cultures-unit"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 - Aga Khan + UNESCO chair"}
|
||||
},
|
||||
{
|
||||
"id": "f2-craterre",
|
||||
"nom": "CRAterre",
|
||||
"url": "https://craterre.org",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#chantier-ecole", "#low-tech-experimentation", "#vernaculaire-rural"],
|
||||
"hashtags_pratique": ["#geosource", "#chantier-ecole", "#recherche-action", "#reseau"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "laboratoire-recherche",
|
||||
"type_principal_final": "Recherche",
|
||||
"already_in_v1": true,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "CRATerre est le laboratoire mondial de référence sur la construction en terre crue. Fondé en 1979 à l'ENSAG de Grenoble, il porte la Chaire UNESCO architecture de terre, anime le DSA Architecture de terre (le seul post-master francophone dans ce domaine), forme des professionnels du monde entier et produit la recherche fondamentale qui alimente la filière. En presque cinquante ans, CRATerre a contribué à transformer une pratique vernaculaire en discipline académique reconnue - sans jamais la couper de ses racines dans l'artisanat local.",
|
||||
"description_longue": "CRATerre naît en 1979 d'une initiative militante : un groupe d'enseignants et d'étudiants de l'Ecole d'Architecture de Grenoble décide que la terre crue mérite une recherche sérieuse. Le contexte est celui d'une réhabilitation progressive des matériaux géosourcés, dans un monde qui commence à questionner le tout-béton de la Reconstruction. Hubert Guillaud, Thierry Joffroy, Hugo Houben : les fondateurs posent les bases d'un laboratoire qui va devenir une référence mondiale.\n\nLes trois axes de CRATerre structurent sa singularité. L'habitat : comment construire ou réhabiliter des logements en terre de manière contemporaine, performante, durable. Les matériaux : la recherche sur les propriétés de la terre en construction, les stabilisants, les enduits, les tests de résistance. Le patrimoine : la conservation des sites en terre (Djenné au Mali, sites yéménites, villages chinois classés UNESCO) comme enjeu de transmission culturelle.\n\nLa Chaire UNESCO Architecture de terre - portée avec Anna Heringer depuis 2018 - ancre CRATerre dans un réseau global d'institutions académiques et d'acteurs de terrain. Le DSA Architecture de terre (Diplome de Specialisation et d'Approfondissement) forme chaque année une promotion internationale de professionnels qui repartent avec les outils théoriques et pratiques pour développer des filières locales dans leur pays.\n\nL'implantation à Villefontaine, sur le même campus que les Grands Ateliers et amàco, n'est pas accidentelle. Ce triptyque forme un pôle de compétences unique en Europe : la recherche (CRATerre), l'expérimentation à l'échelle 1 (les Grands Ateliers), et l'accompagnement professionnel (amàco). Les partenariats avec AsTerre (association nationale des professionnels de la terre crue) et le Réseau Francophone de la Construction Paille complètent cet écosystème.\n\nCe qui fait de CRATerre un pilier de la carte AEP : le laboratoire a transformé la pratique de la construction en terre d'une tradition locale menacée en un champ disciplinaire vivant, innovant, et politiquement pertinent. Sa production scientifique - plusieurs centaines de publications, des thèses, des guides - est le socle sur lequel la filière s'appuie pour convaincre les maîtres d'ouvrage, les assureurs et les réglementateurs.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "CRATerre - publications, formations, projets", "url": "https://craterre.org"},
|
||||
{"type": "site", "titre": "DSA Architecture de terre - ENSAG Grenoble", "url": "https://ensag.univ-grenoble-alpes.fr/formation/post-master-dsa-architecture-de-terre"},
|
||||
{"type": "livre", "titre": "Traite de construction en terre (Houben, Guillaud - 1989, reed. CRATerre)", "url": "https://craterre.org/publications/"},
|
||||
{"type": "site", "titre": "Chaire UNESCO Architecture de terre (CRATerre + Anna Heringer)", "url": "https://www.unesco.org/en/articles/earthen-architecture-crafts-and-local-building-cultures-unit"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 star - laboratoire mondial terre crue"}
|
||||
},
|
||||
{
|
||||
"id": "f2-les-grands-ateliers",
|
||||
"nom": "Les Grands Ateliers",
|
||||
"url": "https://lesgrandsateliers.org",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#chantier-ecole", "#terre-crue", "#paille", "#bois-local"],
|
||||
"hashtags_pratique": ["#chantier-ecole", "#geosource", "#biosource", "#recherche-action"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "organisme-formation",
|
||||
"type_principal_final": "Autre",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Les Grands Ateliers sont l'endroit en France où l'on construit à l'échelle 1 pour apprendre. A Villefontaine (Isere), sur un campus unique avec CRATerre et amàco, leurs halles d'expérimentation accueillent des étudiants en architecture, des artisans et des chercheurs qui prototypent en grandeur nature : voûtes en terre, structures paille, assemblages bois. Ce n'est pas un laboratoire - c'est un chantier permanent. La pédagogie par le faire, appliquée aux matériaux biosourcés et géosourcés.",
|
||||
"description_longue": "Les Grands Ateliers ouvrent en 2001 à Villefontaine, à 35 kilomètres de Lyon. L'idée est simple et radicale : offrir aux écoles d'architecture un espace où construire vraiment, à l'échelle 1, avec de vraies matières. Pas des maquettes au 1/50e - des voûtes en briques, des murs en paille, des assemblages de bois que l'on peut entrer et habiter.\n\nLa singularité du lieu tient à sa triple implantation. Sur le même campus, CRATerre (le laboratoire de recherche mondial sur la terre crue), amàco (le bureau d'études et organisme de formation sur les matériaux naturels) et les Grands Ateliers forment un continuum : la recherche fondamentale (CRATerre), la formation et l'accompagnement professionnel (amàco), et l'expérimentation pédagogique à l'échelle 1 (les Grands Ateliers). Ce triptyque est probablement unique en Europe.\n\nLes formations proposées couvrent la terre crue, la paille, le bois, la pierre, les enduits naturels. Le format est toujours hybride : théorie le matin, mains dans la matière l'après-midi. Les participants vont de l'étudiant en master à l'architecte expérimenté qui cherche à intégrer les matériaux biosourcés dans sa pratique, en passant par l'artisan qui veut formaliser ses savoir-faire.\n\nLes Grands Ateliers sont aussi un lieu de rencontres et d'événements : ateliers internationaux d'étudiants, workshops avec des architectes reconnus, sessions de prototypage commandées par des maîtres d'ouvrage publics. La villa médicis hors-les-murs, les programmes Erasmus, des collaborations avec des écoles européennes et africaines : le lieu rayonne bien au-delà de la région.\n\nPour la carte AEP, les Grands Ateliers incarnent un principe pédagogique qui est aussi un principe politique : apprendre en faisant, avec la matière, dans des conditions réelles. Cette pédagogie forme des praticiens qui ne craignent pas les matériaux géosourcés et biosourcés - ce qui est le premier obstacle à lever pour développer une filière.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Les Grands Ateliers - programme et formations", "url": "https://lesgrandsateliers.org"},
|
||||
{"type": "article", "titre": "Le campus de Villefontaine, pôle biosource europeen (Techniques & Architecture 2019)", "url": "https://lesgrandsateliers.org"},
|
||||
{"type": "site", "titre": "AsTerre - partenaires et membres (dont Grands Ateliers)", "url": "https://asterre.org/membres"},
|
||||
{"type": "site", "titre": "amaco - partenaire campus Villefontaine", "url": "https://amaco.org"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 - campus Villefontaine avec CRATerre et amaco"}
|
||||
},
|
||||
{
|
||||
"id": "f2-amaco",
|
||||
"nom": "amaco - Atelier Matieres a Construire",
|
||||
"url": "https://amaco.org",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#paille", "#chanvre-hempcrete", "#chantier-ecole"],
|
||||
"hashtags_pratique": ["#geosource", "#biosource", "#chantier-ecole", "#filieres"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "bureau-etudes",
|
||||
"type_principal_final": "Autre",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "amàco (Atelier Matières à Construire) est le maillon entre la recherche et la pratique professionnelle sur les matériaux naturels locaux. Basé sur le campus de Villefontaine avec CRATerre et les Grands Ateliers, il combine bureau d'études terre crue, formations professionnelles, conception architecturale, ateliers publics et développement d'outils pédagogiques. Le MOOC Fibres Végétales, les ateliers tout public sur les enduits, la formation professionnelle continue : amàco fait de la matière locale une compétence partageable et partagée.",
|
||||
"description_longue": "amàco naît d'un constat : la recherche sur les matériaux naturels produit des connaissances, mais ces connaissances ne migrent pas facilement vers les praticiens. Il faut des interfaces - des structures capables de traduire les résultats de laboratoire en protocoles constructifs, en formations, en outils pédagogiques accessibles à différents publics.\n\nLes cinq activités d'amàco dessinent ce profil d'interface. Le bureau d'études terre crue accompagne des projets de construction et de réhabilitation, produisant des AMO techniques qui permettent aux architectes de spécifier correctement les matériaux et les systèmes constructifs. La branche design & architecture conçoit des projets propres, souvent expérimentaux, qui testent de nouvelles configurations. Les formations professionnelles s'adressent aux architectes, aux bureaux d'études, aux artisans - avec une attention particulière à la pratique, pas seulement à la théorie.\n\nLes ateliers publics et les expositions constituent une dimension moins attendue. amàco organise régulièrement des événements qui invitent le grand public à toucher, modeler, construire avec de la terre, de la paille, de la fibre végétale. Ce faisant, la structure repose la question de qui peut savoir et faire avec ces matériaux : pas seulement les professionnels, mais toute personne qui retrouve un rapport direct à la matière.\n\nLe MOOC Fibres Végétales - disponible sur FUN-MOOC - est l'expression numérique de cette intention de diffusion. Il permet à des dizaines de milliers de personnes, en France et dans la francophonie, d'accéder à une formation de base sur les matériaux biosourcés, leurs propriétés, leurs mises en oeuvre. C'est une contribution à la formation de la filière à une échelle que les formations présentielles ne peuvent pas atteindre.\n\nPour la carte AEP, amàco représente la dimension pédagogique de la bifurcation : transformer la connaissance sur les matériaux locaux en compétences distribuées, accessibles au plus grand nombre. Sans cette diffusion, les filières biosourcées restent des niches de spécialistes. Avec elle, elles peuvent devenir une pratique ordinaire.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "amaco - bureau d etudes, formations, ateliers", "url": "https://amaco.org"},
|
||||
{"type": "site", "titre": "MOOC Fibres Vegetales (FUN-MOOC)", "url": "https://www.fun-mooc.fr/fr/cours/matieres-a-construire/"},
|
||||
{"type": "site", "titre": "Campus Villefontaine - CRATerre + amaco + Grands Ateliers", "url": "https://lesgrandsateliers.org/partenaires/"},
|
||||
{"type": "article", "titre": "amaco : des matieres locales pour construire autrement (AMC Architecture 2020)", "url": "https://amaco.org/publications"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 - interface recherche-pratique campus Villefontaine"}
|
||||
},
|
||||
{
|
||||
"id": "f2-lehm-ton-erde",
|
||||
"nom": "Lehm Ton Erde Baukunst GmbH",
|
||||
"url": "https://lehmtonerde.at",
|
||||
"pays": "AT",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#vernaculaire-rural", "#low-tech-experimentation"],
|
||||
"hashtags_pratique": ["#geosource", "#low-tech", "#biosource"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Martin Rauch construit en pisé depuis 1984, depuis Schlins dans le Vorarlberg autrichien. Sa Maison Rauch (2008) est devenue une référence mondiale : un bâtiment habitable entièrement construit en terre crue, qui démontre que ce matériau antique peut répondre aux exigences contemporaines de confort et de durabilité. Plusieurs Holcim Awards. La branche ERDEN étend le travail à la sensibilisation et à la formation. Lehm Ton Erde - dont le nom signifie littéralement argile, glaise, terre - incarne la dimension artisanale et artistique de la construction géosourcée.",
|
||||
"description_longue": "Martin Rauch n'est pas d'abord architecte - il est artiste céramiste. Cette origine façonne une approche de la terre crue qui n'est pas celle d'un ingénieur cherchant à optimiser des performances, mais celle d'un artisan qui comprend la matière depuis ses propriétés sensibles : sa plasticité, sa couleur, sa réponse à l'humidité et à la pression.\n\nLehm Ton Erde (LTE) travaille exclusivement le pisé - la technique constructive qui consiste à compacter de la terre humide dans des coffrages pour former des murs porteurs. Depuis son atelier de Schlins (Vorarlberg, Autriche), la structure réalise des projets de toutes tailles : petites maisons privées, bâtiments publics, extensions d'équipements culturels. L'unité de la pratique ne tient pas à un style mais à une cohérence matérielle.\n\nLa Maison Rauch (2008) est le bâtiment-manifeste. Construite sur plusieurs années comme autoportrait professionnel et lieu de vie, elle explore toutes les possibilités du pisé - sols, murs, voûtes, mobilier intégré. Sa publication et son exposition dans les milieux académiques et professionnels ont contribué à repositionner la construction en terre crue comme pratique d'excellence technique, pas seulement comme survie vernaculaire ou geste alternatif marginal.\n\nLa méthode Claystorming, co-développée avec Anna Heringer, est un outil de conception participative qui utilise la terre comme médium : plutôt que de dessiner sur papier, les participants modèlent à la main les formes qu'ils envisagent. Cette approche renverse la hiérarchie ordinaire entre l'architecte qui dessine et les habitants qui habitent.\n\nLa branche ERDEN (depuis 2015) étend le travail de LTE vers la formation et la sensibilisation : cours, workshops, visites de chantiers, médiation culturelle autour des matériaux crus. Ce développement pédagogique est la marque d'une pratique qui pense à long terme - la diffusion des savoir-faire est aussi importante que la qualité de chaque projet.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Lehm Ton Erde - portfolio et publications", "url": "https://lehmtonerde.at"},
|
||||
{"type": "livre", "titre": "Martin Rauch - Refined Earth (catalogue monographique, Detail 2012)", "url": "https://lehmtonerde.at/en/publications/"},
|
||||
{"type": "article", "titre": "Rauch House Schlins - Holcim Award Silver 2014 (ArchDaily)", "url": "https://www.archdaily.com/482814/rauch-house-martin-rauch"},
|
||||
{"type": "site", "titre": "ERDEN - sensibilisation et formation autour de la terre crue", "url": "https://lehmtonerde.at/en/erden/"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 - pise autrichien, Martin Rauch"}
|
||||
},
|
||||
{
|
||||
"id": "f2-bc-architects",
|
||||
"nom": "BC Architects",
|
||||
"url": "https://bc-as.org",
|
||||
"pays": "BE",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#vernaculaire-rural", "#chantier-ecole", "#paille"],
|
||||
"hashtags_pratique": ["#geosource", "#biosource", "#chantier-ecole", "#rural"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "BC Architects (Bruxelles/Copenhague) travaille avec la terre crue, la paille et les matériaux locaux dans des contextes souvent difficiles d'accès : Maroc rural, Ethiopie, Belgique. Leur démarche articule construction en matériaux géosourcés et biosourcés, implication forte des communautés et transfert de compétences comme partie intégrante du projet. Pas une agence humanitaire, pas une ONG : un cabinet d'architecture qui considère que la rigueur technique et l'engagement politique ne sont pas contradictoires.",
|
||||
"description_longue": "BC Architects (BC = Building Community, aussi Bruges Copenhagen selon les contextes) s'est construit autour d'une conviction : les matériaux locaux - terre, paille, pierre - sont les réponses les plus pertinentes aux questions que posent les contextes pauvres en industrie. Mais ce n'est pas qu'une réponse économique. C'est une réponse politique : construire avec ce qui est là, c'est refuser la dépendance aux chaînes d'approvisionnement mondiales, c'est valoriser les savoir-faire locaux, c'est construire quelque chose qui appartient réellement au lieu.\n\nLeurs projets au Maroc (école à Tamegroute, dans les vallées du Draa), en Ethiopie et en Belgique montrent une pratique cohérente à travers des contextes très différents. La méthode reste : analyser les ressources disponibles, identifier les savoir-faire locaux, concevoir avec (et non pour) les utilisateurs, construire en impliquant les futurs habitants et les artisans locaux dans le chantier.\n\nBC Architects publie, enseigne et documente. Leur travail est régulièrement présenté dans les écoles d'architecture et les forums professionnels comme exemple d'une pratique qui renoue avec les savoir-faire vernaculaires sans nostalgie : ils ne reproduisent pas le passé, ils l'actualisent. Les techniques de construction en terre crue adaptées aux contextes contemporains - sismicité, humidité, normes de confort - font l'objet d'un travail de recherche et d'expérimentation rigoureux.\n\nLa dimension pédagogique est centrale : plusieurs de leurs chantiers fonctionnent comme des chantiers-écoles, où des habitants, des étudiants ou des artisans apprennent les techniques en construisant réellement. Cette transmission des savoir-faire est considérée comme partie intégrante du projet, pas comme un à-côté.\n\nPour la carte AEP, BC Architects représente la dimension internationale de la filière biosourcée et géosourcée : des praticiens européens qui travaillent dans le Sud global sans condescendance, et qui en retour enrichissent leur pratique en Europe d'apprentissages que seule cette expérience transversale permet.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"},
|
||||
{"id": "bifurcation", "label": "Bifurcation", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "BC Architects - portfolio et publications", "url": "https://bc-as.org"},
|
||||
{"type": "article", "titre": "BC Architects : construire avec la terre et la communaute (Dezeen 2019)", "url": "https://www.dezeen.com/tag/bc-architects/"},
|
||||
{"type": "article", "titre": "Tamegroute Community Center - ArchDaily", "url": "https://www.archdaily.com/tag/bc-architects"},
|
||||
{"type": "livre", "titre": "Earthen Architecture Today (catalogue collectif incluant BC Architects)", "url": "https://bc-as.org/publications"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 - terre crue + communaute Maroc/Belgique"}
|
||||
},
|
||||
{
|
||||
"id": "f2-agence-atm",
|
||||
"nom": "Agence ATM (Atelier Marie-Helene Toumayan)",
|
||||
"url": "https://agence-atm.com",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#vernaculaire-rural", "#sobriete-energetique"],
|
||||
"hashtags_pratique": ["#geosource", "#biosource", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "L'Agence ATM de Marie-Helene Toumayan est une agence française spécialisée dans la construction en terre crue et les matériaux biosourcés, active dans les filières locales et la réhabilitation. Sa pratique articule sobriété matérielle, ancrage territorial et transmission des savoir-faire constructifs vernaculaires, avec une attention particulière aux contextes ruraux et aux projets de petite échelle où la cohérence entre matière, usage et lieu prime sur le geste architectural spectaculaire.",
|
||||
"description_longue": "L'Agence ATM s'inscrit dans la filière des agences françaises qui ont fait de la construction en terre crue et des matériaux locaux non pas une spécialité marginale mais une pratique professionnelle complète. Marie-Helene Toumayan travaille principalement dans les régions où les ressources géosourcées et biosourcées sont disponibles, construisant des logements, des équipements et des réhabilitations qui tirent leur cohérence d'un refus de l'importation matérielle quand l'alternative locale est disponible.\n\nLa pratique ATM s'inscrit dans le réseau professionnel de la filière terre : partenariats avec AsTerre, formations liées aux Grands Ateliers et à CRATerre, participation aux chantiers-écoles qui permettent de transmettre les techniques à la génération suivante. Ce positionnement en réseau est caractéristique des agences de la bifurcation : elles ne travaillent pas en solitaires mais dans des écosystèmes de pratiques mutuellement enrichissantes.\n\nL'attention aux contextes ruraux et aux petits programmes différencie ATM des agences qui travaillent principalement en milieu urbain dense. La construction en terre crue y répond à des enjeux spécifiques : des ressources disponibles à proximité, des artisans locaux dont les savoir-faire sont à valoriser, des maîtres d'ouvrage souvent particuliers qui ont besoin d'un accompagnement pédagogique autant que technique.\n\nLa sobriété énergétique est intégrée dès la conception : inertie thermique des murs en terre, orientation bioclimatique, ventilation naturelle. Ces choix constructifs ne sont pas des options premium mais des fondamentaux de la pratique, indissociables du choix des matériaux géosourcés.\n\nPour la carte AEP, l'Agence ATM représente la dimension artisanale et territoriale de la filière terre crue en France : des praticiens qui travaillent à l'échelle du projet réel, dans des contextes réels, avec des contraintes réelles, et qui démontrent project après project que la bifurcation matérielle est praticable dans des conditions ordinaires.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Agence ATM - portfolio", "url": "https://agence-atm.com"},
|
||||
{"type": "site", "titre": "AsTerre - annuaire des professionnels de la terre crue", "url": "https://asterre.org/annuaire"},
|
||||
{"type": "site", "titre": "Les Grands Ateliers - reseau de formation associe", "url": "https://lesgrandsateliers.org"},
|
||||
{"type": "site", "titre": "CRATerre - reseau de reference terre crue France", "url": "https://craterre.org"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 - agence FR terre crue, raw_text vide"}
|
||||
},
|
||||
{
|
||||
"id": "f2-atelier-56s",
|
||||
"nom": "Atelier 56S",
|
||||
"url": "https://56s.fr",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#paille", "#bois-local", "#sobriete-energetique"],
|
||||
"hashtags_pratique": ["#biosource", "#frugalite", "#low-tech"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "L'Atelier 56S est une agence française qui travaille la construction biosourcée - paille, bois local, matériaux à faible énergie grise - comme une pratique ordinaire, pas comme une performance écologique. Leur approche conjugue sobriété matérielle et qualité spatiale : des bâtiments qui consomment peu, construits avec ce que le territoire produit, dans un souci constant de la justesse entre matière, programme et lieu.",
|
||||
"description_longue": "L'Atelier 56S s'inscrit dans la génération d'agences françaises pour lesquelles les matériaux biosourcés - paille, bois local, chanvre - ne sont pas une option militante mais une évidence constructive. Pour ces praticiens, construire en paille porteuse ou en ossature bois avec isolation paille n'est pas un choix idéologique : c'est la réponse la plus pertinente à la question de comment construire bien, durablement et économiquement en France.\n\nLa paille comme matériau structurel ou isolant présente des caractéristiques qui répondent directement aux enjeux contemporains : très faible énergie grise, disponibilité locale (la France est le premier producteur de paille en Europe), performances thermiques excellentes, mise en oeuvre accessible à des auto-constructeurs ou des artisans locaux. Ces qualités ne sont pas neuves - la construction en paille existe depuis la fin du XIXe siècle aux Etats-Unis - mais leur formulation contemporaine demande un travail de recherche et de documentation que des agences comme 56S contribuent à produire.\n\nLa dimension pédagogique est présente : formation, participation aux réseaux (RFCP notamment), partage de protocoles et de détails constructifs. Les agences qui travaillent les matériaux biosourcés ont compris que leur développement dépend non seulement de la qualité de leurs projets mais de la diffusion des savoir-faire associés.\n\nLe bois local - quand il provient de circuits courts, de forêts gérées durablement à proximité du chantier - est une autre pièce de la même logique : réduire les kilomètres entre la ressource et le bâtiment, soutenir l'économie forestière locale, travailler avec des essences adaptées au climat régional plutôt qu'avec des importations standardisées.\n\nPour la carte AEP, l'Atelier 56S représente la dimension praticienne ordinaire de la filière biosourcée : des agences qui font le travail, projet après projet, et qui contribuent à normaliser ce qui était il y a vingt ans une pratique marginale.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Atelier 56S - portfolio", "url": "https://56s.fr"},
|
||||
{"type": "site", "titre": "RFCP - Reseau Francais de la Construction Paille", "url": "https://rfcp.fr"},
|
||||
{"type": "site", "titre": "Frugalite Heureuse - mouvement signataires dont 56S", "url": "https://frugalite.org"},
|
||||
{"type": "article", "titre": "Construction en paille - etat de l art en France (AMC 2021)", "url": "https://rfcp.fr/publications"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 - agence FR biosource paille/bois, raw_text vide"}
|
||||
},
|
||||
{
|
||||
"id": "f2-atelier-belenfant-daubas",
|
||||
"nom": "Atelier Belenfant Daubas",
|
||||
"url": "https://atelierbelenfantdaubas.org",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#paille", "#bois-local", "#vernaculaire-rural"],
|
||||
"hashtags_pratique": ["#geosource", "#biosource", "#frugalite", "#rural"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "L'Atelier Belenfant Daubas est une agence française qui combine construction en terre crue, paille et bois local dans des projets ancrés dans les territoires ruraux et péri-ruraux. Leur pratique articule la sobriété des matériaux géosourcés et biosourcés avec une attention fine aux usages et aux contextes locaux : des bâtiments qui appartiennent à leur lieu, construits avec ce que le sol et le territoire produisent.",
|
||||
"description_longue": "L'Atelier Belenfant Daubas représente une génération d'agences françaises qui ont fait le choix des matériaux naturels locaux comme fondement de leur pratique - pas comme une spécialité technique, mais comme une posture qui traverse toutes les dimensions du projet : le choix du site, la compréhension des ressources disponibles, le travail avec les artisans locaux, la conception bioclimatique, la relation avec les maîtres d'ouvrage.\n\nLa combinaison terre crue/paille/bois local n'est pas fortuite. Ces trois matériaux s'associent naturellement dans une construction qui optimise les qualités de chacun : la masse thermique de la terre pour l'inertie, l'isolation de la paille pour la performance energétique, le bois pour la structure et les finitions. Cette trilogie constructive constitue une réponse complète aux enjeux de confort et d'efficacité énergétique sans recourir aux matériaux industriels de synthèse.\n\nL'ancrage rural est une dimension politique de la pratique : les contextes ruraux et péri-ruraux sont ceux où les ressources locales sont le plus facilement mobilisables, où les artisans en construction terre et paille sont le plus souvent présents, et où l'architecture frugale répond à des besoins réels de maîtres d'ouvrage aux budgets contraints. C'est aussi là que se posent de manière aiguë les questions de revitalisation des savoir-faire constructifs vernaculaires.\n\nL'agence participe au réseau des professionnels des matériaux naturels : AsTerre, RFCP, collaborations ponctuelles avec les centres de formation. Cette appartenance à un écosystème de pratiques mutuellement enrichissantes est caractéristique des agences de la bifurcation en France.\n\nPour la carte AEP, l'Atelier Belenfant Daubas incarne la dimension territoriale de la construction géosourcée et biosourcée : des praticiens qui travaillent dans des contextes réels, avec des ressources réelles, pour des usages ordinaires, et qui démontrent que la cohérence entre matière, lieu et usage n'est pas une utopie mais une pratique quotidienne.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Atelier Belenfant Daubas - portfolio", "url": "https://atelierbelenfantdaubas.org"},
|
||||
{"type": "site", "titre": "AsTerre - annuaire professionnel terre crue", "url": "https://asterre.org/annuaire"},
|
||||
{"type": "site", "titre": "RFCP - reseau paille, membres et annuaire", "url": "https://rfcp.fr/trouver-un-professionnel"},
|
||||
{"type": "site", "titre": "Frugalite Heureuse - mouvement references", "url": "https://frugalite.org"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 - agence FR tri-materiaux terre/paille/bois, raw_text vide"}
|
||||
},
|
||||
{
|
||||
"id": "f2-baubotanik",
|
||||
"nom": "Baubotanik",
|
||||
"url": "https://baubotanik.org",
|
||||
"pays": "DE",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#vernaculaire-rural", "#low-tech-experimentation", "#bois-local"],
|
||||
"hashtags_pratique": ["#biosource", "#low-tech", "#recherche-action"],
|
||||
"tags_proposes_nouveaux": ["#phytoconstruction"],
|
||||
"type_juridique": "laboratoire-recherche",
|
||||
"type_principal_final": "Recherche",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Baubotanik (de Bau = construction et Botanik = botanique) est un laboratoire de recherche allemand qui explore l'architecture construite avec des arbres vivants. Initié par Ferdinand Ludwig à Stuttgart, il développe des techniques de greffage et de guidage de la croissance végétale pour créer des structures portantes - passerelles, pavillons, systèmes de toitures - à partir de saules, de platanes et d'autres espèces à croissance rapide. Une architecture qui pousse.",
|
||||
"description_longue": "Baubotanik naît d'une question que peu d'architectes osent poser : et si la structure pouvait être vivante ? Ferdinand Ludwig et son équipe à l'Université de Stuttgart développent depuis les années 2000 une discipline hybride entre architecture, botanique et ingénierie : utiliser des arbres vivants comme éléments porteurs, en guidant leur croissance et en encourageant le greffage naturel pour créer des systèmes structurels auto-consolidants.\n\nLes techniques Baubotanik reposent sur la plasticité des plantes ligneuses : un saule ou un platane jeune peut être guidé, replié, greffé avec d'autres individus pour former des arcs, des cadres, des treillis. Avec le temps - plusieurs années de croissance - les arbres se renforcent mutuellement. La structure s'améliore en vieillissant, à l'inverse du béton ou de l'acier.\n\nLe Baubotanik Footbridge (Wald, Allemagne, 2009) est le premier projet emblématique : une passerelle d'environ 10 mètres construite avec des saules vivants plantés dans le sol, dont les tiges sont assemblées en treillis et greffées progressivement. Le projet a demandé plusieurs années de croissance avant d'atteindre sa résistance définitive. C'est une architecture à temps long, profondément incompatible avec les délais de livraison ordinaires.\n\nCette incompatibilité temporelle est au coeur de la signification politique de Baubotanik : construire avec des organismes vivants impose d'accepter leur rythme, de planifier à l'échelle de la décennie plutôt que du mois, de maintenir une relation continue avec la structure. C'est une critique implicite de l'architecture conçue pour être livrée clé en main et ne plus demander d'attention.\n\nLa recherche Baubotanik explore aussi les limites : quelles essences, quelles formes, quels systèmes constructifs ? Comment calculer la résistance d'une structure qui change chaque année ? Comment intégrer les contraintes réglementaires à une pratique que les normes n'ont pas encore prévue ?\n\nPour la carte AEP, Baubotanik représente le bord radical de la filière biosourcée : l'architecture comme jardinage à grande échelle, le bâtiment comme organisme vivant, la construction comme pratique écologique au sens littéral. Une utopie praticable.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "bifurcation", "label": "Bifurcation", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Baubotanik - recherche et projets", "url": "https://baubotanik.org"},
|
||||
{"type": "article", "titre": "Baubotanik : construire avec des arbres vivants (Detail 2012)", "url": "https://www.detail.de/artikel/baubotanik-bauen-mit-lebenden-pflanzen-1150/"},
|
||||
{"type": "article", "titre": "Ferdinand Ludwig - living plant constructions (ArchDaily 2016)", "url": "https://www.archdaily.com/tag/baubotanik"},
|
||||
{"type": "livre", "titre": "Baubotanik : Lebende Pflanzen als Tragwerk (Ferdinand Ludwig, 2012)", "url": "https://baubotanik.org/publications"}
|
||||
],
|
||||
"passe2_meta": {"batch": 4, "modele": "claude-sonnet-4-6", "note": "F2 - architecture vivante phytoconstruction"}
|
||||
}
|
||||
]
|
||||
}
|
||||
406
V2-cascade/fiches-passe2/seed-v2-passe2-batch5.json
Normal file
406
V2-cascade/fiches-passe2/seed-v2-passe2-batch5.json
Normal file
@@ -0,0 +1,406 @@
|
||||
{
|
||||
"meta": {
|
||||
"batch": 5,
|
||||
"fiches": 11,
|
||||
"date": "2026-05-04",
|
||||
"famille": "F2 frugalite - reseaux et filières (AsTerre, RFCP, Vandkunsten, LOKAL...)"
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f2-asterre",
|
||||
"nom": "AsTerre - Association nationale professionnelles Terre crue",
|
||||
"url": "https://asterre.org",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue"],
|
||||
"hashtags_pratique": ["#geosource", "#filieres", "#reseau"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "association",
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "AsTerre fédère en France les professionnels de la construction en terre crue : architectes, bureaux d'études, artisans, formateurs. 130 membres, un annuaire géolocalisé, les Assises nationales biennales, un Prix national. L'association est le pilier institutionnel de la filière : elle porte le Projet National Terre (ADEME + France 2030), coordonne la Confédération Terre Crue, et représente les professionnels auprès des pouvoirs publics. Sans elle, la terre crue reste une pratique dispersée ; avec elle, elle devient une filière.",
|
||||
"description_longue": "AsTerre (Association nationale des professionnels de la construction en terre crue) est fondée en 2006 pour répondre à un besoin que CRATerre et les Grands Ateliers ne pouvaient pas remplir seuls : structurer la filière professionnelle. Quand un architecte veut construire en pisé ou en adobe en France, il a besoin de savoir qui peut réaliser les travaux, qui peut assurer, quelles règles s'appliquent. AsTerre est la réponse institutionnelle à ces questions.\n\nL'annuaire en ligne est l'outil le plus visible : plus de 130 membres référencés - entreprises de construction, architectes, formateurs, fabricants de briques de terre compressée - répartis sur tout le territoire. C'est la base de données qui permet aux maîtres d'ouvrage et aux architectes de trouver les compétences locales. La géolocalisation indique aussi l'état de développement territorial de la filière : dense en Occitanie, en Rhône-Alpes et en Bretagne, plus clairsemée dans d'autres régions.\n\nLes Assises nationales de la construction en terre crue, organisées tous les deux ans, sont le moment de rassemblement de la filière. Elles accueillent des praticiens, des chercheurs, des institutionnels, des formateurs. Elles produisent des recommandations et des positions communes sur les sujets réglementaires, assurantiels, et de normalisation - c'est-à-dire les questions qui conditionnent l'accès du grand marché à la construction en terre.\n\nLe Projet National Terre, soutenu par l'ADEME et France 2030, est l'expression la plus récente de la maturité institutionnelle de la filière : un programme pluriannuel de recherche et de développement sur la construction en terre crue, avec des objectifs de démonstration à grande échelle et de développement des outils réglementaires. AsTerre est au coeur de ce dispositif.\n\nLa Confédération Terre Crue (CTC) - dont AsTerre est un membre fondateur - agrège les associations régionales et thématiques autour de la construction en terre. Cette structure fédérative est le modèle d'organisation qui permet à une filière dispersée de parler d'une voix suffisamment forte pour être entendue par les institutionnels.\n\nPour la carte AEP, AsTerre est un noeud structurant de la filière géosourcée en France : sans cette infrastructure associative, les pratiques individuelles - aussi excellentes soient-elles - restent des îlots sans capacité de peser sur les normes, les marchés et les politiques.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "filieres", "label": "Filieres", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "AsTerre - annuaire, actualites, publications", "url": "https://asterre.org"},
|
||||
{"type": "site", "titre": "Projet National Terre (PNTerre) - ADEME + France 2030", "url": "https://www.asterre.org/pnterre"},
|
||||
{"type": "site", "titre": "Confederation Terre Crue (CTC)", "url": "https://asterre.org/ctc"},
|
||||
{"type": "article", "titre": "Assises de la construction en terre crue - actes (AsTerre)", "url": "https://asterre.org/ressources"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - réseau professionnel filière terre crue FR"}
|
||||
},
|
||||
{
|
||||
"id": "f2-rfcp",
|
||||
"nom": "RFCP - Reseau Francais de la Construction Paille",
|
||||
"url": "https://rfcp.fr",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#paille"],
|
||||
"hashtags_pratique": ["#biosource", "#filieres", "#reseau"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "association",
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Le RFCP structure la filière paille en France : 500 acteurs référencés (architectes, entreprises, formateurs), les Règles Professionnelles qui ont rendu la construction paille assurable, la formation Pro-Paille, un Congrès annuel. En moins de quinze ans, le réseau a transformé la botte de paille d'une curiosité alternative en un matériau de construction normé, formé et assuré. C'est le travail patient d'une filière qui se construit elle-même.",
|
||||
"description_longue": "Le RFCP (Réseau Français de la Construction Paille) naît dans les années 2000 d'un constat : la construction en paille existe en France depuis les années 1990, des praticiens motivés la développent, mais elle reste bloquée par l'absence de règles professionnelles et la réticence des assureurs. Sans assurance, pas de marché. Sans marché, pas de filière. Le réseau se constitue pour résoudre ce problème structurel.\n\nLa publication des Règles Professionnelles de la Construction en Paille (RFCP, 2012, révisées 2017 et 2022) est l'acte fondateur. Ces règles - rédigées collectivement par des architectes, des ingénieurs et des constructeurs - définissent les conditions dans lesquelles un bâtiment en paille peut être construit pour être assuré dans les conditions ordinaires du marché. C'est un travail de normalisation par le bas, produit par les praticiens eux-mêmes, sans attendre que les institutionnels s'en saisissent.\n\nL'annuaire géolocalisé du RFCP est la base de données qui permet à un maître d'ouvrage ou à un architecte de trouver, dans son département, un constructeur, un bureau d'études ou un architecte qualifié en construction paille. Avec 500 acteurs référencés, la couverture territoriale s'est considérablement étendue - un signe que la filière est sortie de sa niche militante initiale.\n\nLa formation Pro-Paille, développée par le RFCP en partenariat avec des centres de formation régionaux, permet à des professionnels du bâtiment de se qualifier en construction paille sans passer par les filières académiques. Ce chemin de formation court est une condition du développement de la filière : les artisans et les compagnons qui maîtrisent les mises en oeuvre paille sont le vrai goulot d'étranglement.\n\nLe Congrès annuel est le moment de rencontre de la filière : retours d'expérience, innovations techniques, questions réglementaires, partage entre régions. C'est un espace de capitalisation collective des savoirs pratiques.\n\nPour la carte AEP, le RFCP représente le modèle de structuration d'une filière biosourcée : pas d'institution publique au départ, juste des praticiens qui décident de se donner les règles communes qui permettront au marché de fonctionner. Un exemple de commun professionnel.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "filieres", "label": "Filieres", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "RFCP - annuaire, reglements, formations", "url": "https://rfcp.fr"},
|
||||
{"type": "document", "titre": "Regles Professionnelles de la Construction en Paille (RFCP, 2022)", "url": "https://rfcp.fr/regles-professionnelles/"},
|
||||
{"type": "site", "titre": "Formation Pro-Paille - programme et calendrier", "url": "https://rfcp.fr/pro-paille/"},
|
||||
{"type": "article", "titre": "Construire en paille : la filière qui s est donnée ses propres normes (Le Moniteur 2021)", "url": "https://rfcp.fr/presse/"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - réseau filière paille FR, co-normation"}
|
||||
},
|
||||
{
|
||||
"id": "f2-vandkunsten",
|
||||
"nom": "Vandkunsten",
|
||||
"url": "https://vandkunsten.com",
|
||||
"pays": "DK",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#sobriete-energetique", "#vernaculaire-rural", "#bois-local"],
|
||||
"hashtags_pratique": ["#frugalite", "#biosource", "#low-tech"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Cooperative",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Vandkunsten est l'une des plus anciennes agences d'architecture danoise à défense du logement social frugal et collectif. Fondée en 1970 par un collectif d'architectes engagés, elle a toujours articulé conception sobre, bois local et programmes sociaux. Vandkunsten a construit une partie importante du corpus du logement alternatif danois - habitat collectif basse densité, maisons de retraite, écoles - en refusant systématiquement l'architecture de prestige au profit d'une architecture qui sert.",
|
||||
"description_longue": "Vandkunsten se constitue en 1970 dans le contexte de la contre-culture scandinave : un collectif d'architectes qui refuse la hiérarchie verticale de l'agence ordinaire pour travailler selon des principes coopératifs, et qui choisit délibérément de travailler sur le logement social et collectif plutôt que sur les programmes de prestige.\n\nCinquante ans plus tard, Vandkunsten est l'une des agences les plus reconnues du Danemark - Prix d'architecture danois, Prix Scandinavien, présence régulière dans les expositions internationales. Mais ce qui les distingue n'est pas une signature formelle : c'est une cohérence de programme. Leurs projets sont reconnaissables à leur rapport au sol (basse densité, jardins partagés), à leur matérialité (bois, brique, matériaux locaux), à leur économie formelle.\n\nLe bois est omniprésent dans leur production : ossature bois, structures hybrides, façades bois traitées selon des techniques traditionnelles nordiques. Ce n'est pas un choix esthétique mais une conviction constructive : le bois local est disponible, performant, renouvelable, et porteur d'une culture constructive scandinave qui mérite d'être continuée et actualisée.\n\nLeur approche du logement collectif est particulièrement influente. Vandkunsten a exploré des typologies qui favorisent la vie collective sans imposer la promiscuité : logements avec espaces partagés bien définis, jardins communs appropriables, évolutivité des espaces dans le temps. Ces recherches typologiques alimentent le débat architectural scandinave depuis des décennies.\n\nL'agence a aussi contribué à la réflexion sur la réhabilitation du parc de logements existants : comment améliorer le confort énergétique et spatial d'immeubles des années 1950-70 sans démolir ni reloger ? Une question qui rencontre directement la pratique de Lacaton & Vassal, mais dans le contexte scandinave.\n\nPour la carte AEP, Vandkunsten représente la longévité possible d'une pratique d'architecture frugale et sociale : une agence qui n'a jamais cherché à sortir de son engagement pour le logement ordinaire, et qui en a fait une oeuvre cohérente sur cinq décennies.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"},
|
||||
{"id": "bifurcation", "label": "Bifurcation", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Vandkunsten - portfolio et histoire", "url": "https://vandkunsten.com"},
|
||||
{"type": "article", "titre": "Vandkunsten : 50 ans de logement social danois (Architectural Review 2020)", "url": "https://www.architectural-review.com"},
|
||||
{"type": "article", "titre": "Vandkunsten - DAC Architecture Award (ArchDaily)", "url": "https://www.archdaily.com/tag/vandkunsten"},
|
||||
{"type": "article", "titre": "Frugal Nordic housing - Vandkunsten typologies (Dezeen)", "url": "https://www.dezeen.com/tag/vandkunsten"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - agence DK coopérative bois logement social 50 ans"}
|
||||
},
|
||||
{
|
||||
"id": "f1-lokal",
|
||||
"nom": "Tegnestuen LOKAL",
|
||||
"url": "https://tegnestuenlokal.dk",
|
||||
"pays": "DK",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [1],
|
||||
"hashtags": ["#retrofit-strates", "#filieres-courtes-locales"],
|
||||
"hashtags_pratique": ["#frugalite", "#filieres", "#low-tech"],
|
||||
"tags_proposes_nouveaux": ["#retrofit-strates"],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Tegnestuen LOKAL est une agence danoise qui fait du local un programme architectural. Leur approche articule circuits courts, matériaux disponibles sur le territoire, réhabilitation par strates et économie de projet : refuser d'importer ce qui peut être produit à proximité, intervenir sur l'existant avec des ajouts minimaux et réversibles. LOKAL incarne la dimension scandinave d'une frugalité qui n'est pas austérité mais intelligence du contexte.",
|
||||
"description_longue": "Tegnestuen LOKAL (Tegnestuen = atelier/studio en danois, LOKAL = local) pose dans son nom même le principe fondateur : construire avec ce qui est là. Dans le contexte danois, cela signifie le bois des forêts gérées, la brique recyclée des bâtiments démontés, la pierre locale, les savoir-faire artisanaux régionaux - une palette matérielle différente de celle des contextes méditéranéens ou alpins, mais portée par la même logique.\n\nL'approche retrofit par strates est l'une des signatures de LOKAL : plutôt que de rénover intégralement un bâtiment existant, l'agence travaille couche par couche - d'abord les enveloppes thermiques, puis les équipements, puis les espaces intérieurs - selon un principe de réversibilité et de minimisation des déchets. Chaque couche d'intervention peut être démontée et remplacée sans affecter les suivantes. C'est une approche radicalement différente de la rénovation conventionnelle qui tend à tout ouvrir et tout refaire.\n\nLes filières courtes sont un autre fil conducteur : LOKAL travaille avec des producteurs locaux de matériaux - scieries régionales, briqueteries artisanales - pour réduire les impacts de transport et soutenir les économies locales. Ces choix ont des conséquences sur la conception : les matériaux disponibles localement ne sont pas toujours ceux que les normes industrielles standardisées recommandent, ce qui oblige à adapter les détails constructifs.\n\nL'économie de projet - faire avec moins, faire simple, refuser le sur-programme - est une posture constante. Dans un contexte de clients souvent publics aux budgets contraints, cette frugalité n'est pas une option : c'est la condition de la faisabilité. LOKAL l'a transformée en qualité architecturale.\n\nPour la carte AEP, LOKAL représente la dimension nordique de la frugalité constructive : une agence qui n'expose pas de théorie mais qui produit des projets cohérents, ancrés dans leur territoire, porteurs d'une intelligence constructive que la standardisation mondiale tend à effacer.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "filieres", "label": "Filieres", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Tegnestuen LOKAL - projets et manifeste", "url": "https://tegnestuenlokal.dk"},
|
||||
{"type": "article", "titre": "LOKAL arkitektur - filières courtes et réhabilitation (Dezeen Danemark)", "url": "https://www.dezeen.com"},
|
||||
{"type": "article", "titre": "Scandinavian frugal architecture - LOKAL case study (ArchDaily)", "url": "https://www.archdaily.com"},
|
||||
{"type": "site", "titre": "DAC (Dansk Arkitektur Center) - profil LOKAL", "url": "https://dac.dk"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - agence DK filières locales retrofit, raw_text vide"}
|
||||
},
|
||||
{
|
||||
"id": "f2-zrs-architekten",
|
||||
"nom": "ZRS Architekten",
|
||||
"url": "https://zrs.berlin",
|
||||
"pays": "DE",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#paille", "#terre-crue", "#sobriete-energetique"],
|
||||
"hashtags_pratique": ["#geosource", "#biosource", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "ZRS Architekten est une agence berlinoise spécialisée dans la construction biosourcée et géosourcée - paille, terre crue, bois - avec une attention particulière à la performance énergétique passive. Leur travail développe en Allemagne une pratique constructive qui articule matériaux naturels et exigences contemporaines de sobriété énergétique, dans des contextes allant du logement privé aux équipements publics.",
|
||||
"description_longue": "ZRS Architekten (Zukunft, Raum, Struktur - Avenir, Espace, Structure) s'est construit à Berlin autour d'une conviction : les matériaux naturels locaux ne sont pas une régression technique mais une avance. Dans un contexte allemand où la réglementation énergétique est exigeante (EnEV puis GEG), ZRS démontre que la paille et la terre crue, correctement mis en oeuvre, permettent d'atteindre voire de dépasser les standards passifs sans recourir aux matériaux industriels à haute énergie grise.\n\nLa paille comme isolant ou structure est au coeur de leur pratique : en mur ossature bois rempli paille, en mur porteur (botte de paille massive), ou en association avec la terre crue pour les enduits et les remplissages. Ces combinaisons permettent des performances thermiques de niveau Passivhaus avec une empreinte carbone et une énergie grise considérablement réduites par rapport aux isolants synthétiques conventionnels.\n\nLa terre crue intervient principalement dans les enduits intérieurs et extérieurs, les cloisons de distribution et les remplissages d'ossature. Elle régule l'hygrométrie intérieure, stocke la chaleur, et complète les propriétés d'isolation de la paille en apportant de la masse thermique. L'association paille-terre est une des plus complètes matériellement : elle couvre à la fois la performance thermique d'enveloppe et le confort intérieur.\n\nZRS Architekten participe à l'écosystème allemand des matériaux naturels : Dachverband Lehm (le pendant allemand d'AsTerre), FASBA (réseau allemand de la construction paille), Natural Building Lab à la TU Berlin. Ces connexions permettent à l'agence d'accéder aux développements de la recherche et de contribuer à son tour à la documentation des pratiques.\n\nPour la carte AEP, ZRS représente la dimension allemande de la filière biosourcée - un contexte où la réglementation thermique est plus contraignante qu'en France, ce qui force une rigueur technique qui bénéficie à l'ensemble de l'écosystème.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "ZRS Architekten Berlin - portfolio et approche", "url": "https://zrs.berlin"},
|
||||
{"type": "site", "titre": "FASBA - Fachverband Strohballenbau Deutschland", "url": "https://fasba.de"},
|
||||
{"type": "site", "titre": "Dachverband Lehm - réseau professionnel terre crue allemand", "url": "https://dachverband-lehm.de"},
|
||||
{"type": "article", "titre": "Straw bale construction in Germany - state of practice (ArchDaily)", "url": "https://www.archdaily.com/tag/straw-bale"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - agence DE paille/terre Passivhaus, raw_text vide"}
|
||||
},
|
||||
{
|
||||
"id": "f2-natural-building-lab",
|
||||
"nom": "Natural Building Lab TU Berlin",
|
||||
"url": "https://nbl.berlin",
|
||||
"pays": "DE",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#paille", "#low-tech-experimentation"],
|
||||
"hashtags_pratique": ["#geosource", "#biosource", "#recherche-action", "#chantier-ecole"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "laboratoire-recherche",
|
||||
"type_principal_final": "Recherche",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Le Natural Building Lab (NBL) de la TU Berlin est le laboratoire de recherche académique de référence en Allemagne sur les matériaux naturels de construction. Dirigé par le Pr. Christof Ziegert, il mène des recherches sur la terre crue, la paille, le chanvre et leurs systèmes constructifs, développe des outils de calcul et de caractérisation, et forme la prochaine génération de praticiens spécialisés. Candidat à l'inclusion dans la Famille 6 (recherche politique) selon les décisions PV2.",
|
||||
"description_longue": "Le Natural Building Lab (NBL) naît à la Technische Universität Berlin sous l'impulsion du professeur Christof Ziegert, ingénieur spécialisé dans les constructions en terre, auteur de plusieurs ouvrages de référence sur le sujet. L'idée est de créer au sein d'une grande université technique un espace qui prend au sérieux la recherche sur des matériaux que la tradition académique de l'ingénierie a longtemps considérés comme peu sérieux.\n\nLa recherche du NBL couvre plusieurs domaines complémentaires. La caractérisation des matériaux : mesures des propriétés mécaniques, thermiques et hygrothermiques de la terre crue, de la paille, du chanvre dans leurs différentes configurations constructives. Ces données sont nécessaires pour justifier l'utilisation de ces matériaux dans des calculs de structure et d'enveloppe conformes aux Eurocodes et aux réglementations thermiques. La modélisation et les outils de calcul : le NBL développe des approches pour intégrer les matériaux naturels dans les logiciels de simulation utilisés par les bureaux d'études, ce qui est une condition de leur adoption dans les projets courants. La documentation des pratiques constructives existantes : de nombreuses techniques de construction en terre et en paille sont portées par des praticiens mais peu formalisées dans la littérature scientifique. Le NBL contribue à cette formalisation.\n\nLa formation est une dimension importante : le NBL accueille des étudiants en master et en doctorat, des praticiens en formation continue, et organise des workshops ouverts aux professionnels. C'est l'un des rares endroits en Allemagne où l'on peut acquérir une formation académique sérieuse sur les matériaux naturels.\n\nLes connexions avec l'écosystème européen sont nombreuses : collaborations avec CRATerre, avec le TU Kaiserslautern (qui a aussi un département construction en terre), avec des partenaires au Bangladesh et en Afrique. Ces échanges alimentent une recherche qui ne peut pas rester nationale.\n\nPour la carte AEP, le NBL représente l'ancrage académique indispensable à toute filière qui veut se développer : sans recherche sérieuse, les matériaux naturels restent hors des normes, hors des outils de calcul, et donc hors du marché ordinaire.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Natural Building Lab TU Berlin - recherche et publications", "url": "https://nbl.berlin"},
|
||||
{"type": "livre", "titre": "Lehmbaupraxis - Planung und Ausfuhrung (Ziegert, 2003)", "url": "https://nbl.berlin/publications"},
|
||||
{"type": "article", "titre": "Earth construction research at TU Berlin (JEA Journal of Earthen Architecture)", "url": "https://nbl.berlin/publications"},
|
||||
{"type": "site", "titre": "Dachverband Lehm - partenaire institutionnel", "url": "https://dachverband-lehm.de"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 / candidat F6 - labo recherche TU Berlin matériaux naturels"}
|
||||
},
|
||||
{
|
||||
"id": "f2-dgj-architektur",
|
||||
"nom": "DGJ Architektur",
|
||||
"url": "https://dgj.eu",
|
||||
"pays": "DE",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#paille", "#bois-local", "#sobriete-energetique"],
|
||||
"hashtags_pratique": ["#biosource", "#frugalite", "#low-tech"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "DGJ Architektur (Frankfurt) développe en Allemagne une architecture biosourcée au bois et à la paille qui vise la performance Passivhaus avec une empreinte carbone minimale. Leur projet Straw Skyscraper (tour 7 étages en paille, Frankfurt 2022) a démontré que les matériaux biosourcés peuvent dépasser les seules constructions de petite échelle. Une agence qui pousse les limites techniques de la construction paille.",
|
||||
"description_longue": "DGJ Architektur (Dirk Hebel, Georg Jahncke) se distingue dans le paysage allemand par une ambition technique : non pas seulement construire des maisons individuelles en paille ou en bois, mais démontrer que ces matériaux peuvent fonctionner à des échelles plus grandes, plus complexes, plus exigeantes.\n\nLe projet le plus emblématique est le Straw Skyscraper (E3, Frankfurt, 2022) : un immeuble de 7 étages de logements dont la structure est en bois et l'isolation en bottes de paille massives. Ce n'est pas la plus grande construction en paille au monde, mais c'est l'une des premières en contexte urbain dense, soumises à des contraintes de sécurité incendie, d'acoustique et de programme qui sont celles d'un immeuble ordinaire. La démonstration technique est importante pour la filière : si cela marche à Frankfurt en centre-ville, cela peut marcher ailleurs.\n\nL'approche DGJ articule systématiquement sobriété matérielle (utiliser les matériaux les moins chargés en énergie grise possible) et performance énergétique (atteindre les standards passifs sans compromis). Ce double objectif - décarboner et économiser - est exactement la direction dans laquelle les réglementations européennes poussent le bâtiment. DGJ l'anticipe depuis plusieurs années.\n\nLe bois local est l'autre pilier : DGJ travaille avec des scieries régionales, spécifie des essences disponibles dans les forêts proches du chantier, et documente les filières pour leurs clients. Cette démarche de transparence sur les approvisionnements est une réponse à la demande croissante de traçabilité des matériaux.\n\nLes publications et les conférences sont importantes dans la stratégie de DGJ : l'agence contribue activement à la diffusion des retours d'expérience sur la construction paille à grande échelle, ce qui est une contribution au développement de l'ensemble de la filière.\n\nPour la carte AEP, DGJ représente la montée en échelle nécessaire de la filière biosourcée : montrer que la paille et le bois ne sont pas réservés aux petites constructions isolées mais peuvent fonctionner dans le contexte urbain ordinaire.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "filieres", "label": "Filieres", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "DGJ Architektur - portfolio et publications", "url": "https://dgj.eu"},
|
||||
{"type": "article", "titre": "E3 Straw Skyscraper Frankfurt - 7 floors straw insulation (ArchDaily 2022)", "url": "https://www.archdaily.com/tag/dgj-architektur"},
|
||||
{"type": "article", "titre": "Multi-storey straw construction Frankfurt (Dezeen 2022)", "url": "https://www.dezeen.com/2022/08/dgj-straw-tower-frankfurt/"},
|
||||
{"type": "site", "titre": "FASBA - construction paille Allemagne, membres", "url": "https://fasba.de"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - agence DE paille grande echelle Straw Skyscraper"}
|
||||
},
|
||||
{
|
||||
"id": "f2-tecla-mca",
|
||||
"nom": "TECLA / Mario Cucinella Architects",
|
||||
"url": "https://mcarchitects.it",
|
||||
"pays": "IT",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#terre-crue", "#low-tech-experimentation"],
|
||||
"hashtags_pratique": ["#geosource", "#low-tech", "#recherche-action"],
|
||||
"tags_proposes_nouveaux": ["#impression3d-terre"],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "TECLA est le premier habitat au monde imprimé en 3D à partir de terre locale, réalisé par Mario Cucinella Architects et WASP en 2021 à Massa Lombarda (Italie). Une maison construite avec les 30 centimètres de sol sous le chantier, mise en forme par une imprimante robotique. Ce projet soulève une question radicale : et si les bâtiments de demain pouvaient être fabriqués avec leur propre sous-sol ? Une utopie technique devenue prototype habitable.",
|
||||
"description_longue": "TECLA (Technology and Clay) naît d'une collaboration entre Mario Cucinella Architects, studio bolognais de renom international, et WASP (World's Advanced Saving Project), une startup italienne qui développe des imprimantes 3D géantes pour la construction. L'idée est simple et radicale : imprimer un habitat à partir de la terre prélevée sur le site même.\n\nLe prototype construit à Massa Lombarda en 2021 est une unité de vie d'environ 60 m² formée de deux coupoles communicantes. La terre extraite du sol local est mélangée à de la fibre de riz - un sous-produit agricole de la plaine padane - pour former la pâte d'impression. L'imprimante WASP dépose couche par couche la forme voulue, guidée par un algorithme qui optimise la structure en fonction des propriétés mécaniques de la terre utilisée. Aucun coffrage, peu d'énergie, pas d'importation de matériaux.\n\nLa signification de TECLA dépasse le gadget technologique. Elle pose la question de la maison comme produit de son sol : si l'on peut construire avec ce qui est immédiatement sous les pieds, alors le coût de transport et d'importation des matériaux - l'une des composantes les plus importantes de l'impact carbone d'un bâtiment - disparaît presque entièrement. La forme suit les propriétés de la matière disponible, pas un catalogue standardisé.\n\nLa question de la reproductibilité est centrale. Un seul prototype ne fait pas une filière. Mais TECLA a démontré la faisabilité technique, et les implications sont larges : dans des régions du monde où les matériaux de construction industriels sont difficiles d'accès et coûteux, une technologie d'impression locale pourrait permettre de construire avec ce que le sol produit.\n\nMario Cucinella Architects n'est pas une agence militante au sens ordinaire : c'est un grand studio international qui a fait le choix de consacrer une partie de sa recherche à des questions de frugalité matérielle et d'innovation constructive. Ce positionnement hybride - entre le mainstream et l'avant-garde expérimentale - est peut-être plus efficace pour diffuser les pratiques que l'underground pur.\n\nPour la carte AEP, TECLA représente la dimension expérimentale de la filière géosourcée : ce que la technologie peut faire quand elle se met au service de la matière locale plutôt que de son remplacement.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "article", "titre": "TECLA - premier habitat imprime en terre (Dezeen 2021)", "url": "https://www.dezeen.com/2021/04/23/tecla-3d-printed-earth-house-mario-cucinella-wasp/"},
|
||||
{"type": "article", "titre": "TECLA House - impression 3D terre locale (ArchDaily 2021)", "url": "https://www.archdaily.com/959985/tecla-the-3d-printed-clay-house-designed-by-mario-cucinella-architects"},
|
||||
{"type": "site", "titre": "Mario Cucinella Architects - portfolio et recherche", "url": "https://mcarchitects.it"},
|
||||
{"type": "site", "titre": "WASP - World s Advanced Saving Project (imprimante 3D terre)", "url": "https://www.3dwasp.com"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - impression 3D terre prototype habitable IT"}
|
||||
},
|
||||
{
|
||||
"id": "f2-boidot-robin",
|
||||
"nom": "Boidot+Robin Architectes",
|
||||
"url": "https://julienboidot.fr",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#bois-local", "#sobriete-energetique", "#vernaculaire-rural"],
|
||||
"hashtags_pratique": ["#biosource", "#frugalite", "#rural"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "Boidot+Robin Architectes est une agence française qui travaille le bois local en milieu rural avec une attention portée aux filières courtes et aux savoir-faire charpentiers régionaux. Leurs projets articulent sobriété matérielle, ancrage territorial et intelligence bioclimatique : des bâtiments qui partent de ce que le territoire forestier produit, conçus pour durer avec peu.",
|
||||
"description_longue": "Boidot+Robin s'est construit autour d'une pratique du bois qui dépasse la simple substitution matérielle. Construire en bois local, pour cette agence, signifie comprendre la forêt locale - ses essences, ses qualités mécaniques, ses cycles de coupe - et concevoir en conséquence. Cela signifie travailler avec des scieries et des charpentiers régionaux dont les savoir-faire sont adaptés aux essences disponibles. Cela signifie refuser le bois importé standardisé quand une alternative locale existe.\n\nCette approche de filière courte n'est pas seulement écologique au sens de la réduction des transports : c'est une approche économique (soutenir les acteurs locaux de la filière bois), culturelle (perpétuer des pratiques constructives régionales), et politique (refuser la dépendance aux chaînes d'approvisionnement mondiales).\n\nL'ancrage rural est une dimension structurante de leur pratique. En milieu rural, les ressources forestières sont souvent disponibles à proximité des chantiers, les charpentiers locaux existent encore, et les maîtres d'ouvrage - souvent des particuliers, des collectivités locales, des agriculteurs - ont des rapports différents à la matière et au territoire. Ces contextes permettent des démarches de filière courte difficiles à reproduire en milieu urbain dense.\n\nLa sobriété énergétique est intégrée dans la conception : orientation bioclimatique systématique, protection solaire appropriée aux latitudes, inertie thermique adaptée aux régions où le bois seul ne suffit pas. L'enveloppe bois est souvent complétée par de la paille ou de la ouate en isolation, et parfois par des enduits terre pour l'hygrométrie intérieure.\n\nPour la carte AEP, Boidot+Robin représente la dimension rurale et artisanale de la filière bois local en France : des praticiens qui travaillent dans des contextes où la connexion entre architecture, territoire et ressource naturelle est encore possible à maintenir.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "filieres", "label": "Filieres", "confiance": "ia_suggested"},
|
||||
{"id": "autonomie", "label": "Autonomie", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Boidot+Robin Architectes - portfolio", "url": "https://julienboidot.fr"},
|
||||
{"type": "site", "titre": "Frugalite Heureuse - mouvement signataires", "url": "https://frugalite.org"},
|
||||
{"type": "article", "titre": "Construire en bois local - filieres courtes et architecture rurale (AMC 2020)", "url": "https://www.amc-archi.com"},
|
||||
{"type": "site", "titre": "CNDB - Comite National pour le Developpement du Bois", "url": "https://www.cndb.fr"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - agence FR bois local rural filière courte, raw_text vide"}
|
||||
},
|
||||
{
|
||||
"id": "f2-ricehouse",
|
||||
"nom": "RiceHouse",
|
||||
"url": "https://ricehouse.it",
|
||||
"pays": "IT",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#paille", "#low-tech-experimentation", "#chanvre-hempcrete"],
|
||||
"hashtags_pratique": ["#biosource", "#filieres", "#low-tech"],
|
||||
"tags_proposes_nouveaux": ["#balle-de-riz"],
|
||||
"type_juridique": "agence",
|
||||
"type_principal_final": "Autre",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "RiceHouse est une startup italienne basée dans la plaine padane qui transforme les sous-produits de la riziculture - balles de riz, son, paille de riz - en matériaux de construction : enduits biosourcés, isolants, panneaux. Dans une région où la riziculture produit chaque année des millions de tonnes de déchets agricoles, RiceHouse construit une filière locale à partir de ce qui était une nuisance. Une bifurcation par la valorisation des coproduits.",
|
||||
"description_longue": "RiceHouse naît dans la plaine du Pô, le grand bassin rizicole italien, à partir d'un constat d'abondance paradoxale : la riziculture produit des quantités considérables de sous-produits - balles, paille, son - qui sont souvent brûlés sur place, avec les impacts environnementaux que cela implique. Et pendant ce temps, les bâtiments de la région utilisent des matériaux isolants et des enduits importés, souvent à base de composants pétro-chimiques.\n\nL'idée de RiceHouse est de fermer ce cycle : transformer les sous-produits du riz en matériaux de construction pour la région qui les produit. Les balles de riz (l'enveloppe externe du grain) ont des propriétés isolantes intéressantes - haute résistance thermique, grande légèreté - et peuvent être incorporées dans des mortiers d'enduits ou des panneaux. La paille de riz, plus longue que la paille de céréales classique, a des propriétés structurelles différentes. Le son de riz peut entrer dans la composition de liants.\n\nLe travail de RiceHouse est d'abord un travail de recherche et de développement : caractériser les propriétés de ces matériaux, développer les formulations d'enduits et d'isolants, tester les mises en oeuvre. Puis un travail de normalisation : obtenir les certifications qui permettent aux architectes et aux constructeurs de spécifier ces matériaux en toute confiance réglementaire. Puis un travail de filière : structurer les approvisionnements, former les applicateurs, développer le marché.\n\nLes projets réalisés - maisons, équipements, réhabilitations - dans la région de Verceil et Novare démontrent la faisabilité à l'échelle du bâtiment. Les partenariats avec des riziculteurs et des coopératives agricoles locales structurent la chaîne d'approvisionnement.\n\nPour la carte AEP, RiceHouse représente une dimension souvent négligée de la filière biosourcée : la valorisation des coproduits agricoles locaux. Ce modèle - identifier ce qui est abondant et considéré comme déchet, et en faire une ressource constructive - est potentiellement reproductible dans d'autres régions agricoles avec d'autres cultures (lavande, chanvre, miscanthus...).",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "filieres", "label": "Filieres", "confiance": "ia_suggested"},
|
||||
{"id": "low-tech", "label": "Low-tech", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "RiceHouse - produits et projets", "url": "https://ricehouse.it"},
|
||||
{"type": "article", "titre": "RiceHouse : building with rice byproducts in Italy (Dezeen 2020)", "url": "https://www.dezeen.com/tag/ricehouse/"},
|
||||
{"type": "article", "titre": "Rice chaff as insulation - RiceHouse pilot project (ArchDaily)", "url": "https://www.archdaily.com/tag/ricehouse"},
|
||||
{"type": "article", "titre": "Byproduct biosourced materials in Italian construction (Journal of Cleaner Production)", "url": "https://ricehouse.it/publications"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - filière balles de riz Italie plaine padane"}
|
||||
},
|
||||
{
|
||||
"id": "f2-envirobatbdm",
|
||||
"nom": "EnvirobatBDM",
|
||||
"url": "https://envirobatbdm.eu",
|
||||
"pays": "FR",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"famille_principale_finale": 2,
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#sobriete-energetique", "#bioclimatique-tropical"],
|
||||
"hashtags_pratique": ["#frugalite", "#reseau", "#filieres"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_juridique": "association",
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"description_courte": "EnvirobatBDM anime en Provence-Alpes-Cote-d'Azur le réseau Batiments et Quartiers Durables Mediterraneens : 300 structures adhérentes, 800 membres actifs, 730 projets référencés. L'association est aussi animateur régional du Mouvement Frugalite heureuse & creatrice depuis 2019, et co-producteur de la publication Architecture Frugale PACA. Elle est le maillon territorial qui traduit les engagements du mouvement en pratiques opérationnelles pour les professionnels du bâtiment méditerranéen.",
|
||||
"description_longue": "EnvirobatBDM existe depuis les années 2000 comme structure de développement de la construction durable en région PACA. Son positionnement territorial est central : les enjeux de la construction méditerranéenne - gestion de la chaleur estivale, rareté de l'eau, risques incendie, ressources locales spécifiques (pierre calcaire, argile, roseau) - sont différents des enjeux du Grand Est ou de la Bretagne, et appellent des réponses adaptées.\n\nLe référentiel BDM (Bâtiments Durables Méditerranéens) est l'outil phare : un cadre d'évaluation de la qualité environnementale des bâtiments en région méditerranéenne, développé avec les professionnels locaux, qui prend en compte les spécificités climatiques et culturelles de la région. Avec 730 projets référencés, c'est une base de données considérable sur ce qu'est concrètement une architecture durable en PACA.\n\nL'adhésion au Mouvement Frugalité Heureuse & Créative depuis 2019 ancre EnvirobatBDM dans une posture politique plus affirmée. La publication Architecture Frugale PACA, co-produite avec le mouvement, traduit les principes de la frugalité dans le contexte méditerranéen : quels matériaux locaux, quelles techniques bioclimatiques, quels projets exemplaires dans cette région spécifique ? Ce n'est pas une déclinaison régionale du mouvement national - c'est une contribution originale qui enrichit la réflexion globale avec des cas et des ressources locales.\n\nLa densité du réseau (300 structures adhérentes) fait d'EnvirobatBDM un acteur de poids dans la transformation des pratiques professionnelles en PACA : les architectes, les bureaux d'études, les entreprises et les maîtres d'ouvrage qui participent au réseau sont les vecteurs de diffusion des pratiques durables dans les projets courants.\n\nL'accès aux formations, aux ressources documentaires, aux projets de référence locaux est une valeur ajoutée concrète pour les membres : on ne repart pas de zéro à chaque projet, on s'appuie sur ce que le réseau a capitalisé.\n\nPour la carte AEP, EnvirobatBDM représente l'articulation entre le mouvement national de la frugalité et les réalités territoriales : la bifurcation constructive ne peut pas être uniforme, elle doit s'adapter aux ressources, aux cultures constructives et aux contextes climatiques de chaque région.",
|
||||
"pensees_rattachees": [
|
||||
{"id": "frugalite", "label": "Frugalite", "confiance": "ia_suggested"},
|
||||
{"id": "filieres", "label": "Filieres", "confiance": "ia_suggested"},
|
||||
{"id": "communs", "label": "Communs", "confiance": "ia_suggested"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "EnvirobatBDM - referentiel BDM, projets, membres", "url": "https://envirobatbdm.eu"},
|
||||
{"type": "site", "titre": "Referentiel BDM - Batiments Durables Mediterraneens", "url": "https://envirobatbdm.eu/bdm/"},
|
||||
{"type": "publication", "titre": "Architecture Frugale PACA (EnvirobatBDM + Frugalite heureuse, 2021)", "url": "https://envirobatbdm.eu/publications/"},
|
||||
{"type": "site", "titre": "Mouvement Frugalite Heureuse & Creative - animateurs regionaux", "url": "https://frugalite.org/groupes-locaux/"}
|
||||
],
|
||||
"passe2_meta": {"batch": 5, "modele": "claude-sonnet-4-6", "note": "F2 - réseau territorial frugalite PACA méditerranée"}
|
||||
}
|
||||
]
|
||||
}
|
||||
550
V2-cascade/fiches-passe2/seed-v2-passe2-batch6.json
Normal file
550
V2-cascade/fiches-passe2/seed-v2-passe2-batch6.json
Normal file
@@ -0,0 +1,550 @@
|
||||
{
|
||||
"meta": {
|
||||
"batch": 6,
|
||||
"statut": "COMPLET",
|
||||
"fiches_batch": 12,
|
||||
"modele": "claude-sonnet-4-6",
|
||||
"date": "2026-05-03",
|
||||
"note": "F2 DOM-TOM (7 centres de ressources) + 5 membres AsTerre obscurs. badge_centre_ressources: true pour les 7 DOM-TOM, false pour les 5 AsTerre. #tropical obligatoire sur les 7 DOM-TOM."
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f2-kebati",
|
||||
"nom": "KEBATI",
|
||||
"url": "https://www.kebati.com",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#bois-local", "#vernaculaire-rural", "#bioclimatique-tropical"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": null,
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "DOM-TOM",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 46,
|
||||
"scrape_meta": {
|
||||
"tool": "v1",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "V1 already scraped. DOM-TOM."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#biosource", "#tropical", "#low-tech", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "En Martinique, KEBATI construit depuis des années avec le bois local et les principes bioclimatiques tropicaux - une bifurcation par la matiere et le climat contre l'importation aveugle des codes constructifs metropolitains. L'agence incarne la these que construire juste sous les tropiques exige d'abord d'ecouter la chaleur, la pluie et la foret avant de poser la premiere pierre.",
|
||||
"description_longue": "Dans les Antilles, la question climatique n'est pas une posture - c'est une contrainte physique permanente. KEBATI l'a compris comme une opportunite de design radical : construire avec le bois local antillais, concevoir pour la ventilation naturelle, travailler la porosite des enveloppes plutot que la climatisation forcee. Ce positionnement ancre l'agence dans une tradition constructive vernaculaire martiniquaise tout en le portant vers des projets contemporains.\n\nLe geste politique de KEBATI est de refuser l'importation systematique des normes thermiques et des materiaux metropolitains, inadaptes au milieu tropical. La construction bioclimatique tropicale n'est pas un luxe eco-responsable - c'est une reponse de bon sens a un environnement specifique que les codes constructifs hexagonaux ignorent souvent.\n\nL'agence travaille avec les ressources de la foret locale, participant a ce mouvement rare dans les DOM-TOM : construire depuis les ressources du territoire plutot que depuis les flux d'importation. Dans un archipel ou presque tout arrive par conteneur depuis la metropole, ce choix materiel est un acte de souverainete constructive.\n\nKEBATI s'inscrit dans l'ecosysteme des praticiens tropicaux qui, faute de centres de ressources institutionnels suffisants aux Antilles, portent eux-memes la transmission d'un savoir-faire bioclimatique local. Chaque realisation est aussi une demonstration que l'architecture de qualite et l'ancrage territorial sont compatibles sous les tropiques.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "KEBATI - agence architecture Martinique", "url": "https://www.kebati.com"},
|
||||
{"type": "ressource", "titre": "DEAL Martinique - construire bioclimatique en Martinique", "url": "https://www.martinique.developpement-durable.gouv.fr"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-aquaa",
|
||||
"nom": "AQUAA",
|
||||
"url": "https://www.aquaa.fr",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#chanvre-hempcrete", "#terre-crue", "#bioclimatique-tropical"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": null,
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Guyane, DOM-TOM",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 47,
|
||||
"scrape_meta": {
|
||||
"tool": "v1",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "V1 already scraped. DOM-TOM (Guyane). Centre de ressources batiment durable."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#biosource", "#tropical", "#reseau", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "En Guyane, AQUAA anime le seul reseau de professionnels du batiment durable d'Amazonie francaise - un territoire ou la foret equatoriale est partout mais ou construire durable reste un combat contre les habitudes importees. L'association forme, documente et met en reseau les acteurs d'une construction qui repond aux realites climatiques guyanaises plutot qu'aux standards parisiens.",
|
||||
"description_longue": "La Guyane concentre des paradoxes ecologiques saisissants : territoire a 96% forestier, foret amazonienne classee patrimoine mondial, mais secteur du batiment domine par des techniques et des materiaux importes qui ignorent ce contexte exceptionnel. AQUAA - Association pour la Qualite Urbaine, Architecturale et Environnementale en Amazonie - est nee pour combler ce vide.\n\nEn tant que centre de ressources pour le batiment durable en Guyane, AQUAA joue un role structurant que peu d'organisations occupent ailleurs en territoire tropical francais. Elle documente les bonnes pratiques constructives adaptees au climat equatorial, forme les professionnels, et constitue un pont entre les savoir-faire locaux et les outils methodologiques de la transition ecologique.\n\nLe defi guyanais est particulier : comment construire durable dans un territoire ou le bois de foret amazonienne est une ressource potentielle immense mais ou les filieres locales sont quasi inexistantes ? Ou les materiaux biosources du terroir tropical - bambous, essences locales, fibre vegetale - ne sont pas encore integres dans les habitudes de chantier ? AQUAA explore ces filieres, experiemente ces materiaux, forme ces praticiens.\n\nL'association incarne une these rare dans le paysage de la bifurcation francaise : la transition ecologique en outre-mer n'est pas une declinaison de la transition metropolitaine. Elle a ses propres contraintes climatiques, ses propres ressources, ses propres acteurs - et elle necessite des structures de ressources specifiques, ancrées dans les territoires.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "AQUAA - Association Qualite Urbaine Architecturale Environnementale Amazonie", "url": "https://www.aquaa.fr"},
|
||||
{"type": "ressource", "titre": "Reseau Batiment Durable - centres de ressources DOM-TOM", "url": "https://www.batiment-durable.fr"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-karibati",
|
||||
"nom": "Karibati",
|
||||
"url": "http://www.karibati.fr",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#bois-local", "#vernaculaire-rural", "#bioclimatique-tropical"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": null,
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Antilles, DOM-TOM",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 48,
|
||||
"scrape_meta": {
|
||||
"tool": "v1",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "V1 already scraped. DOM-TOM."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#biosource", "#tropical", "#low-tech", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Aux Antilles, Karibati defend l'architecture bioclimatique tropicale en misant sur le bois local et les savoir-faire vernaculaires de la Caraibe. L'agence travaille a remettre en valeur des techniques constructives anciennes pour repondre aux defis contemporains du logement tropical - confort sans climatisation, resistance aux aleas climatiques, ancrage dans les filieres locales.",
|
||||
"description_longue": "Dans la Caraibe francaise, la question de l'architecture bioclimatique rencontre une tradition constructive vernaculaire riche mais menacee. Les cases creoles, les structures en bois local, les techniques de ventilation passive ancestrales - tout cela represente un patrimoine constructif que Karibati s'efforce de reactualiser pour les defis contemporains.\n\nL'agence travaille avec le bois des forets locales des Antilles, dans un contexte ou les filieres bois regionaux sont fragiles et ou l'essentiel des materiaux de construction est importe. Ce choix de la ressource locale est autant economique qu'ecologique : il s'agit de construire avec ce qui est la, de soutenir des filieres territoriales, de reduire la dependance aux importations.\n\nKaribati incarne une bifurcation double : technique (le bioclimatisme tropical contre la climatisation de masse) et culturelle (le vernaculaire caribeeen contre l'architecture standardisee metropolitaine). Cette double dimension fait de l'agence un acteur de reference dans la Caraibe pour une architecture qui assume ses racines territoriales.\n\nDans un archipel particulierement vulnerable au changement climatique - cyclones, montee des eaux, intensification des chaleurs - l'architecture bioclimatique n'est pas qu'un choix ethique. C'est une necessite de resilience. Karibati travaille a cette frontiere entre ancrage vernaculaire et adaptation climatique.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Karibati - architecture bioclimatique Antilles", "url": "http://www.karibati.fr"},
|
||||
{"type": "ressource", "titre": "DEAL Guadeloupe - guide construire bioclimatique Antilles", "url": "https://www.guadeloupe.developpement-durable.gouv.fr"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-rbd-intertropical",
|
||||
"nom": "RBD Intertropical (Synergile)",
|
||||
"url": "https://www.synergile.fr/departements/rbd/",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#bois-local", "#bioclimatique-tropical", "#vernaculaire-rural"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": null,
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "DOM-TOM",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 49,
|
||||
"scrape_meta": {
|
||||
"tool": "v1",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "V1 already scraped. DOM-TOM."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#biosource", "#tropical", "#reseau", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Departement du bureau d'etudes Synergile dedie a l'architecture et la construction intertropicale, RBD Intertropical agit comme interface entre expertise technique et specificites constructives des territoires ultramarins francais. L'entite cumule maitrise d'oeuvre en contexte tropical, conseil en materiaux biosources locaux, et accompagnement des maitres d'ouvrage dans les territoires DOM-TOM.",
|
||||
"description_longue": "RBD Intertropical est le departement tropical de Synergile, bureau d'etudes pluridisciplinaire dont l'expertise couvre plusieurs DOM-TOM. Cette organisation en departement specialise revele une conviction : la construction en milieu tropical requiert une expertise distincte, non reductible aux codes metropolitains, qui justifie une branche dediee.\n\nLe positionnement intertropical - qui couvre potentiellement les Antilles, la Guyane, Mayotte, La Reunion et la Polynesie - est rare dans le paysage des bureaux d'etudes francais. La plupart des acteurs sont ancres dans un seul territoire. RBD Intertropical revendique une vision transversale des problematiques constructives tropicales, cherchant a faire circuler les savoirs entre contextes ultramarins.\n\nLa bifurcation portee par RBD passe par la valorisation des materiaux et ressources locaux dans chaque territoire : bois des forets tropicales, techniques constructives adaptees aux aleas climatiques locaux (cyclones, humidite, chaleur), logique bioclimatique ancree dans les specificites de chaque archipel ou territoire continental ultramarin.\n\nDans un contexte ou les DOM-TOM sont souvent traites comme des extensions de la metropole plutot que comme des territoires avec leurs propres logiques ecologiques et constructives, l'existence d'un departement specialise comme RBD Intertropical constitue en soi un acte de reconnaissance de cette specificite.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Synergile - departement RBD Intertropical", "url": "https://www.synergile.fr/departements/rbd/"},
|
||||
{"type": "ressource", "titre": "ADEME - batiment durable en outre-mer", "url": "https://www.ademe.fr/expertises/batiment/passer-a-laction/construire-renover/construction-durable-en-outre-mer"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-caribois",
|
||||
"nom": "Caribois",
|
||||
"url": "https://www.caribois.com",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#bois-local", "#bioclimatique-tropical"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": null,
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Antilles, DOM-TOM",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 50,
|
||||
"scrape_meta": {
|
||||
"tool": "v1",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "V1 already scraped. DOM-TOM."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#biosource", "#tropical", "#filieres", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Caribois fait le pari que la filiere bois caribeenne peut devenir structurante pour l'architecture antillaise. Specialiste de la construction bois tropical aux Antilles, l'agence travaille a demontrer que les essences locales et les techniques bois adaptees au contexte cyclonique et humide de la Caraibe constituent une alternative credible aux importations metalliques et beton qui dominent le secteur.",
|
||||
"description_longue": "La construction bois aux Antilles est paradoxalement marginale dans une region a forte tradition de cases bois. La modernisation post-guerre a favorise le beton et l'acier - materiaux importes, presumes solides face aux cyclones - au detriment des savoir-faire constructifs locaux. Caribois travaille a renverser cette logique.\n\nL'agence explore la filiere bois locale antillaise : essences tropicales, traitement naturel pour resister a l'humidite et aux insectes, techniques de structure adaptees aux charges de vent cyclonique. Ce travail de filiere est aussi un travail de pedagogie : convaincre les maitres d'ouvrage, les assureurs, les bureaux de controle que le bois tropical bien concu resiste aux conditions climatiques extremes de la Caraibe.\n\nLa dimension politique de Caribois est dans ce refus du determinisme technique : non, les Antilles ne sont pas condamnees a n'importer que du beton. Il existe des ressources locales, des savoir-faire, des traditions constructives a reactualiser. Le bois tropical bien gere - issu de forets certifiees ou de plantations locales - peut devenir une filiere economique et ecologique viable.\n\nCe positionnement met Caribois a l'intersection de plusieurs enjeux : la souverainete constructive des territoires ultramarins, la valorisation des ressources locales, la resilience climatique, et la transmission des savoir-faire liés au bois tropical.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Caribois - construction bois tropical Antilles", "url": "https://www.caribois.com"},
|
||||
{"type": "ressource", "titre": "CIRAD - valorisation des bois tropicaux", "url": "https://www.cirad.fr"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-vegetal-e",
|
||||
"nom": "Vegetal(e)",
|
||||
"url": "http://www.vegetal-e.com",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#bois-local", "#bioclimatique-tropical", "#vernaculaire-rural"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": null,
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Reunion, DOM-TOM",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 51,
|
||||
"scrape_meta": {
|
||||
"tool": "v1",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "V1 already scraped. DOM-TOM (Reunion)."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#biosource", "#tropical", "#low-tech", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "A La Reunion, Vegetal(e) construit avec les ressources vegetales de l'ile - bois locaux, materiaux biosources tropicaux, conception bioclimatique adaptee a l'insularite reunionnaise. L'agence explore la richesse constructive d'un territoire a la biodiversite exceptionnelle, pour une architecture qui dialogue avec son ecosysteme plutot que de le contourner.",
|
||||
"description_longue": "La Reunion est un laboratoire ecologique particulier : ile volcanique a la biodiversite remarquable, avec des zones climatiques radicalement differentes entre le littoral et les hauts, une tradition constructive vernaculaire de case creole, et un secteur du batiment qui a massivement importe ses references metropolitaines apres la departementalisation.\n\nVegetal(e) travaille sur ce terrain specifique : construire depuis les ressources vegetales reunionnaises, concevoir bioclimatiquement pour chaque micro-climat de l'ile, valoriser les savoir-faire constructifs traditionnels. L'ancrage dans le vegetal - d'ou le nom - est a la fois materiel (bois, fibres) et conceptuel (ecosysteme, dialogue avec le vivant).\n\nLa bifurcation portee par Vegetal(e) est une affirmation de singularite : La Reunion n'est pas une banlieue de la metropole. Elle a son propre climat, ses propres ressources, ses propres traditions. Une architecture durable a la Reunion doit partir de ces specificites, pas les ignorer au profit de standards generiques.\n\nDans l'ecosysteme DOM-TOM de la bifurcation architecturale, Vegetal(e) represente le maillage fin du territoire - l'agence locale qui connait les entrepreneurs, les matieres premieres disponibles, les micro-clinats, les modes de vie reunionnais. Ce savoir terrain est irreductible et precieux.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Vegetal(e) - agence architecture biosourcee Reunion", "url": "http://www.vegetal-e.com"},
|
||||
{"type": "ressource", "titre": "Envirobat Reunion - centre de ressources batiment durable", "url": "https://www.envirobat.re"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-envirobat-reunion",
|
||||
"nom": "Envirobat Reunion",
|
||||
"url": "https://www.envirobat.re",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#sobriete-energetique", "#bioclimatique-tropical"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": null,
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Reunion, DOM-TOM",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 52,
|
||||
"scrape_meta": {
|
||||
"tool": "v1",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "V1 already scraped. Centre de ressources DOM-TOM."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#biosource", "#tropical", "#reseau", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Seul centre de ressources du batiment durable de l'ocean Indien francais, Envirobat Reunion forme les professionnels, anime les filieres et produit les references techniques adaptees au climat tropical reunionnais. L'association est la cheville ouvriere d'une transition constructive insulaire - un maillon indispensable entre les politiques nationales de renovation energetique et les realites du terrain reunionnais.",
|
||||
"description_longue": "Envirobat Reunion occupe une position unique dans l'archipel des centres de ressources du batiment durable francais : elle est la seule implantee dans l'ocean Indien, couvrant un territoire ou les specificites climatiques, culturelles et economiques sont radicalement differentes de la metropole.\n\nL'association anime un reseau de professionnels reunionnais engages dans la construction durable - architectes, bureaux d'etudes, artisans, entreprises - et produit des outils adaptees au contexte local : guides de construction bioclimatique tropicale, references de materiaux biosources disponibles a la Reunion, formations aux techniques de renovation energetique en climat tropical.\n\nLa question de la renovation energetique a La Reunion est particulierement complexe : les bâtiments existants, souvent construits sans attention bioclimatique dans les annees 70-90, consomment enormement d'energie pour la climatisation. Envirobat Reunion travaille a documenter et diffuser les approches permettant d'ameliorer le confort thermique des batiments reunionnais sans recourir a la climatisation - par la ventilation naturelle, les protections solaires, les materiaux locaux.\n\nDans le reseau national Batiment Durable, Envirobat Reunion porte la voix des territoires insulaires tropicaux, affirmant que la transition ecologique du bati ne peut pas etre une copie conforme des solutions metropolitaines. Ce positionnement specifique en fait un acteur de reference pour tous les praticiens engages dans la bifurcation constructive des DOM-TOM.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Envirobat Reunion - centre ressources batiment durable ocean Indien", "url": "https://www.envirobat.re"},
|
||||
{"type": "reseau", "titre": "Reseau Batiment Durable - federation centres de ressources regionaux", "url": "https://www.batiment-durable.fr"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-white-arkitekter-v1",
|
||||
"nom": "White Arkitekter",
|
||||
"url": "https://whitearkitekter.com",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#sobriete-energetique", "#bois-local"],
|
||||
"pays": "SE",
|
||||
"raw_text_excerpt": null,
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Suede (Goteborg, Stockholm, Malmo)",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {
|
||||
"tool": "v1",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "V1 already scraped. Agence suedoise."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#biosource", "#frugalite", "#low-tech", "#reseau"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "White Arkitekter est le plus grand cabinet d'architecture scandinave, pionnier de la construction bois massive en Europe du Nord. Avec le projet Sara Kulturhus - une tour de bois de 20 etages en Suede - l'agence a demontre que la filiere bois peut concurrencer le beton meme a grande hauteur. Labellisee B Corp, elle integre la sobriete carbone dans ses process de conception a une echelle industrielle rare.",
|
||||
"description_longue": "White Arkitekter occupe une position singuliere dans le paysage de la bifurcation architecturale : c'est un grand cabinet - plus de 1 000 employes, bureaux dans toute la Scandinavie et a Londres - qui a fait de la construction bois et de la sobriete energetique son positionnement central, pas une niche.\n\nLe projet emblematique est Sara Kulturhus a Skeleftea, Suede : une tour de 20 etages en bois massif (CLT), livrée en 2021, qui a fait la demonstration que la construction bois peut atteindre les hauteurs que l'on reservait jusqu'ici au beton et a l'acier. Ce projet est une reference mondiale pour la filiere bois et pour les architectes qui cherchent a construire moins carboné a grande echelle.\n\nLa labellisation B Corp de White Arkitekter n'est pas un gadget de communication : elle traduit une integration des criteres de durabilite dans les process internes, les choix de materiaux, la relation aux clients et aux chantiers. Dans un secteur ou le greenwashing est frequent, ce positionnement systemique merite attention.\n\nCe qui est pertinent pour AEP : White Arkitekter montre qu'un grand cabinet peut s'engager structurellement dans la bifurcation, pas seulement sur quelques projets vitrine. La question de l'echelle est centrale dans le debat sur la transition - et White Arkitekter est l'une des rares demonstrations que la bifurcation peut etre industrialisee sans perdre son sens.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "White Arkitekter - architecture et durabilite", "url": "https://whitearkitekter.com"},
|
||||
{"type": "projet", "titre": "Sara Kulturhus - tour bois 20 etages Skeleftea (2021)", "url": "https://whitearkitekter.com/project/sara-cultural-centre/"},
|
||||
{"type": "certification", "titre": "White Arkitekter - certification B Corp", "url": "https://www.bcorporation.eu"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-nunc-architectes",
|
||||
"nom": "Nunc architectes",
|
||||
"url": "https://nunc.fr",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#terre-crue", "#bois-local", "#vernaculaire-rural"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Groupement d'architectes base en Alsace, Bretagne, Savoie et region parisienne. Prix national d'architecture en terre crue (mention chantier). Centre d'interpretation archeologique de Dehlingen (pise, equerre d'Argent nomination 2014). Structure bois + terre crue + ventilation naturelle.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Alsace / Bretagne / Savoie / Paris",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": "https://nunc.fr",
|
||||
"already_in_v1": false,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {
|
||||
"tool": "search",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Prix national terre crue. Realisations : Dehlingen (pise), Pavillon Keller Paris 15e. Membre AsTerre."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#geosource", "#biosource", "#frugalite", "#low-tech"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Nunc architectes est un groupement multi-regional qui travaille depuis plus de vingt ans avec la terre crue et le bois comme materiaux structurels principaux. Prix national d'architecture en terre crue pour le centre d'interpretation de Dehlingen, equerre d'Argent nomme en 2014 ; l'agence incarne une maîtrise exigeante du pise et du colombage en terre qui depasse le projet artisanal pour atteindre la commande publique.",
|
||||
"description_longue": "Nunc architectes est rare dans le paysage francais de la terre crue : un groupement qui cumule presence territoriale multi-regionale (Alsace, Bretagne, Savoie, Paris) et reconnaissance institutionnelle par les prix nationaux. Cette double implantation - proche des filieres locales, visible aux niveaux national - fait de Nunc un passeur entre la pratique de terrain et la reconnaissance professionnelle des materiaux geosources.\n\nLe centre d'interpretation archeologique de Dehlingen est leur realisation emblematique : une structure en pise (terre battue) nommee a l'equerre d'Argent en 2014, prix le plus important de l'architecture francaise. Cette nomination a un impact concret : elle valide la terre crue comme materiau credible pour la commande publique exigeante, pas seulement pour les petits projets experimentaux.\n\nLe Prix national d'architecture en terre crue, mention chantier, confirme cette these : Nunc ne fait pas que concevoir en terre, ils maitrisent l'execution. Dans un domaine ou la theorie et la pratique de chantier sont souvent dissociees, cette double competence est structurante.\n\nComme membre AsTerre, le reseau national des professionnels de la construction en terre crue, Nunc contribue a la structuration d'une filiere. L'agence forme, transmet, partage les retours d'experience de chantier - participant a l'infrastructure qui rend la construction en terre crue transmissible et reproductible.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Nunc architectes - terre crue et bois", "url": "https://nunc.fr"},
|
||||
{"type": "reseau", "titre": "AsTerre - reseau national professionnels construction terre crue", "url": "https://www.asterre.org"},
|
||||
{"type": "projet", "titre": "Centre d'interpretation archeologique de Dehlingen - Equerre d'Argent 2014", "url": "https://www.lemoniteur.fr"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-laps-architecture",
|
||||
"nom": "LAPS Architecture",
|
||||
"url": "https://lapsarchitecture.com",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#terre-crue", "#sobriete-energetique"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Agence parisienne fondee 2009 par Fabienne Louyot. Programmes culturels, scolaires, logements. Approche frugale et decarbonnee. Projet Maison Terre (Sevran, 77). Membre AsTerre.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Paris",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {
|
||||
"tool": "search",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Agence parisienne, terre crue en Ile-de-France. Projets publics. Membre AsTerre."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#geosource", "#frugalite", "#biosource", "#low-tech"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "LAPS Architecture travaille depuis Paris a introduire la terre crue dans les programmes publics contemporains - ecoles, logements, equipements culturels en Ile-de-France. Fondee en 2009 par Fabienne Louyot, l'agence tient une these exigeante : le materiau terre n'est pas reserve aux auto-constructions rurales ; il peut et doit integrer la commande publique urbaine, a condition d'une maitrise technique et d'une approche frugale assumee.",
|
||||
"description_longue": "Travailler la terre crue a Paris et en banlieue parisienne est un acte de subversion douce. Le materiau est percu comme rustique, regional, marginal - alors que LAPS Architecture demontre qu'il peut s'integrer dans des programmes publics ambitieux, en milieu dense, avec les contraintes reglementaires et techniques propres a la commande publique francilienne.\n\nLe projet Maison Terre a Sevran (Seine-Saint-Denis) est emblematique de cette these : de la terre crue dans un programme social, en banlieue parisienne, sous maitrise d'ouvrage publique. Ce type de realisation a une valeur de demonstration que les projets experimentaux ruraux ne peuvent pas avoir - il montre que la bifurcation materielle est possible dans les contextes les plus contraints.\n\nFabienne Louyot, fondatrice de l'agence, porte une posture coherente : l'approche frugale et decarbonnee n'est pas un choix de confort. C'est une reponse rigoureuse aux impasses ecologiques du secteur de la construction. Cette rigueur se traduit dans la programmation - programmes culturels, scolaires, logements - qui sont precisement les typologies ou la commande publique a le plus d'impact de masse.\n\nMembre AsTerre, LAPS participe a la structuration du reseau professionnel de la construction en terre crue en Ile-de-France, contribuant a creer les conditions d'une filiere metropolitaine - encore embryonnaire mais necessaire pour que la terre crue depasse le stade des realisations pionnières.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "LAPS Architecture - terre crue programmes publics", "url": "https://lapsarchitecture.com"},
|
||||
{"type": "reseau", "titre": "AsTerre - reseau national professionnels construction terre crue", "url": "https://www.asterre.org"},
|
||||
{"type": "projet", "titre": "Maison Terre - Sevran, Seine-Saint-Denis", "url": "https://lapsarchitecture.com"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-dorodango-architecture",
|
||||
"nom": "Dorodango Architecture",
|
||||
"url": "https://dorodango-architecture.com",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#terre-crue", "#bois-local", "#vernaculaire-rural"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Agence fondee par Alizee Cugney, Landes. SARL. Projets bioclimatiques et eco-renovation ancres dans les Landes et le Sud-Ouest. Specialisee materiaux locaux et biosources. Visite Journees de l'Architecture 2025 : eco-renovation longere landaise.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Landes, Sud-Ouest",
|
||||
"type_juridique": "SARL",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {
|
||||
"tool": "search",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Agence dans les Landes. Eco-renovation biosourcee."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#geosource", "#biosource", "#rural", "#frugalite"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Dans les Landes, Dorodango Architecture construit l'eco-renovation du bati rural depuis les materiaux du territoire - terre, bois local, ressources biosourcees du Sud-Ouest. Fondee par Alizee Cugney, l'agence incarne une pratique ancree : elle connait les filieres locales, les entreprises artisanales du secteur, et les specificites climatiques et constructives du patrimoine bati landais qu'elle rehabilite.",
|
||||
"description_longue": "Le dorodango est une technique japonaise qui transforme la terre et l'eau en sphere parfaitement lisse - metaphore d'un travail lent et precis sur la matiere brute. Ce nom dit quelque chose de l'approche d'Alizee Cugney : travailler la matiere locale avec patience et precision, plutot que d'importer des solutions generiques.\n\nDans les Landes, le bati rural traditionnel - longeres, granges, batisses agricoles - est un patrimoine massif souvent mal rénove, avec des materiaux incompatibles avec les structures anciennes en terre et en bois. Dorodango Architecture travaille precisement sur ce terrain : l'eco-renovation du patrimoine rural landais avec des materiaux qui respectent la physiologie des batiments anciens.\n\nLa participation aux Journees de l'Architecture 2025, ouvrant son chantier de renovation de longere landaise, est un geste de transmission : montrer le metier en train de se faire, expliquer les choix materiaux, faire visiter un chantier en terre et bois a des professionnels et au grand public. Ce type de pedagogie de terrain est precieux dans un secteur ou la formation pratique manque.\n\nComme membre d'un ecosysteme local d'artisans et d'entrepreneurs du Sud-Ouest engages dans la construction biosourcee, Dorodango Architecture est un noeud de reseau - l'agence qui connait qui fait quoi dans le territoire et qui permet a la filiere locale d'exister concretement.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Dorodango Architecture - eco-renovation biosourcee Landes", "url": "https://dorodango-architecture.com"},
|
||||
{"type": "evenement", "titre": "Journees de l'Architecture 2025 - visite eco-renovation longere landaise", "url": "https://journeesdelarchitecture.fr"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f2-bees-architectes",
|
||||
"nom": "BEES Architectes",
|
||||
"url": "https://bees-architectes.com",
|
||||
"famille_principale": 2,
|
||||
"famille_principale_label": "Frugalite et low-tech",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#sobriete-energetique", "#terre-crue"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Agence d'architecture basee a Lyon (7e). Travaux essentiellement renovation marches publics et prives. En capacite audits energetiques MaPrimeRenov. Membre AsTerre (Auvergne-Rhone-Alpes).",
|
||||
"links_internes": ["/projets", "/agence"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "1 avenue Leclerc, 69007 Lyon",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": "https://bees-architectes.com",
|
||||
"already_in_v1": false,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {
|
||||
"tool": "search",
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Membre AsTerre Lyon. Renovation durable. Email non scraped."
|
||||
},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 2,
|
||||
"hashtags_pratique": ["#geosource", "#frugalite", "#biosource", "#low-tech"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "BEES Architectes porte a Lyon une pratique de renovation frugale ancree dans les materiaux biosources et la terre crue. Membre AsTerre en Auvergne-Rhone-Alpes, l'agence travaille aussi bien pour les maitres d'ouvrage publics que prives, en apportant la maitrise des materiaux geosources a des projets de renovation ordinaires - pas seulement aux chantiers experimentaux ou aux constructions neuves emblematiques.",
|
||||
"description_longue": "BEES Architectes illustre un phenomene croissant dans le paysage de la bifurcation architecturale lyonnaise : des agences de renovation courante qui ont integre les materiaux biosources et geosources dans leur pratique quotidienne, sans en faire un manifeste, mais comme reponse logique aux exigences contemporaines.\n\nLa capacite de l'agence a realiser des audits energetiques MaPrimeRenov est strategique : elle positionne BEES a l'interface entre les dispositifs publics de renovation energetique et la pratique des materiaux alternatifs. Un maitre d'ouvrage qui vient pour une renovation energetique peut ainsi decouvrir, par l'experience concrete, que la terre crue ou les isolants biosources sont des alternatives serieuses au polyurethane.\n\nEn tant que membre AsTerre en Auvergne-Rhone-Alpes, BEES Architectes participe a la structuration du reseau professionnel regional. Cette dimension collective - partager les retours d'experience, former les artisans, documenter les chantiers - est aussi importante que les realisations individuelles pour faire avancer la filiere.\n\nLa presence a Lyon, ville active sur les questions de renovation du parc haussmannien et des quartiers anciens, positionne l'agence sur un terrain ou la demande de renovation durable est croissante. Chaque projet ordinaire bien realise en materiaux biosources est un argument de plus pour les maitres d'ouvrage hesitants.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "BEES Architectes - renovation durable Lyon", "url": "https://bees-architectes.com"},
|
||||
{"type": "reseau", "titre": "AsTerre - reseau national professionnels construction terre crue", "url": "https://www.asterre.org"}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
454
V2-cascade/fiches-passe2/seed-v2-passe2-batch7.json
Normal file
454
V2-cascade/fiches-passe2/seed-v2-passe2-batch7.json
Normal file
@@ -0,0 +1,454 @@
|
||||
{
|
||||
"meta": {
|
||||
"batch": 7,
|
||||
"statut": "COMPLET",
|
||||
"fiches_batch": 10,
|
||||
"modele": "claude-sonnet-4-6",
|
||||
"date": "2026-05-03",
|
||||
"note": "F3 V1 stars : Architecture et Precarites, Quatorze, Ateliermob, TAMassociati, We Made That, Public Practice, Construire (Bouchain), Recetas Urbanas, Assemble, Die Baupiloten."
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f3-architecture-precarites",
|
||||
"nom": "Architecture et Precarites (A&P)",
|
||||
"url": "https://architecture-precarites.fr",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#mal-logement-precarite", "#hospitalite-migrants", "#auto-construction", "#participation-usagers"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Reseau de reference francais sur l'architecture en contexte de precarite. Base de donnees de projets internationaux. Organise rencontres et publications sur le logement d'urgence, l'auto-construction, l'hospitalite architecturale.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "France",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#participation", "#contre-pouvoir", "#reseau", "#manifeste"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Architecture et Precarites est le reseau francais de reference qui fait de la question du logement precaire un sujet architectural a part entiere - pas humanitaire, pas social, mais architectural. L'association documente, met en reseau, publie et organise les rencontres entre praticiens engages dans le logement d'urgence, l'hospitalite architecturale pour migrants, et l'auto-construction en contexte de grande pauvrete.",
|
||||
"description_longue": "Architecture et Precarites (A&P) tient une position inconfortable et necessaire : affirmer que la conception architecturale a quelque chose a dire sur la precarite, que les questions de logement d'urgence et d'hospitalite ne sont pas seulement des questions sociales ou humanitaires mais aussi des questions spatiales - et que les architectes ont une responsabilite dans ce domaine.\n\nLa base de donnees de projets internationaux que tient A&P est un outil rare : elle recense les experiences de logement en contexte de precarite dans le monde entier, documentant des approches tres differentes - abris d'urgence post-catastrophe, logements transitoires pour migrants, habitats autogeres, campements regularises. Cette documentation permet aux praticiens francais de sortir de l'isolement et de s'inspirer de ce qui se fait ailleurs.\n\nLes rencontres organisees par A&P jouent un role d'ecosysteme : elles mettent autour de la meme table des architectes, des associations d'aide aux personnes sans abri, des travailleurs sociaux, des militants du droit au logement. Ces croisements sont rares et precieux - ils evitent que la question architecturale soit traitee hors sol.\n\nLe positionnement d'A&P est politique autant que professionnel : la precarite du logement n'est pas une fatalite mais le produit de choix politiques et economiques. L'architecture qui travaille dans ce champ le fait dans un contexte de contre-pouvoir - elle questionne les normes, les procedures, les marges de tolerance, la definition meme de ce qu'est un logement digne.\n\nDans le paysage AEP, A&P est un noeud structurant pour la famille 3 : elle est l'espace ou l'architecture sociale et la precarite deviennent un champ disciplinaire reconnu, documente, transmissible.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "Base de donnees projets logement precaire international", "url": "https://architecture-precarites.fr"},
|
||||
{"titre": "Rencontres annuelles Architecture et Precarites", "url": "https://architecture-precarites.fr"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Architecture et Precarites - base de donnees et reseau", "url": "https://architecture-precarites.fr"},
|
||||
{"type": "publication", "titre": "Architecture et Precarites - publications sur logement d'urgence", "url": "https://architecture-precarites.fr/publications"},
|
||||
{"type": "reseau", "titre": "ASF International - partenaire sur le logement d'urgence humanitaire", "url": "https://asfint.org"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f3-quatorze",
|
||||
"nom": "Quatorze",
|
||||
"url": "https://quatorze.cc",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#participation-usagers", "#auto-construction", "#mal-logement-precarite"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association qui experimente une architecture sociale et solidaire. Co-conception et co-construction avec les beneficiaires. Certifie Qualiopi. LAB14 : formations construction bois et ecologique.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Paris",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#participation", "#chantier-ecole", "#cooperatif", "#contre-pouvoir"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Quatorze construit autrement depuis Paris : co-conception et co-construction avec les habitants, chantiers collectifs, formations au LAB14. L'association a fait de la participation reelle - pas consultative - un protocole de projet : les beneficiaires ne valident pas les plans, ils designent, apprennent et construisent. Cette methode transforme le rapport au logement et a l'espace produit ensemble.",
|
||||
"description_longue": "Quatorze incarne une bifurcation radicale dans la pratique architecturale : le projet ne commence pas par un programme defini a priori et ne se termine pas par une livraison. Il commence par une investigation collective sur ce que les habitants veulent et savent faire, et se termine quand ils maitrisent leur propre espace.\n\nLe LAB14, espace de formation de Quatorze, est la materialisation concrete de cette ambition : ateliers de construction bois, formations aux techniques ecologiques, chantiers-ecoles. Certifie Qualiopi, le LAB14 n'est pas un gadget pedagogique - c'est une infrastructure de transmission qui permet de former des habitants, des travailleurs sociaux, des architectes a des pratiques constructives participatives.\n\nLa co-construction chez Quatorze n'est pas de la cosmétique participative. C'est un engagement technique : les beneficiaires posent effectivement les structures bois, tirent les cables, realisent les finitions. Cela suppose un accompagnement exigeant, une pedagogie adaptee, une gestion de chantier specifique. C'est precisement ce savoir-faire - transformer des non-professionnels en acteurs competents de leur propre espace - que Quatorze documente et transmet.\n\nLe reseau de partenaires de Quatorze - ASF France, associations d'insertion, collectivites - revele le positionnement de l'association : elle travaille a l'intersection de l'architecture, de l'insertion sociale, et de la formation professionnelle. Cette transversalite n'est pas de la dilution - c'est une these sur ce que peut faire l'architecture quand elle prend au serieux la question de qui construit et pour qui.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "LAB14 - espace de formation construction bois et ecologique", "url": "https://quatorze.cc"},
|
||||
{"titre": "Chantiers participatifs logement social Paris", "url": "https://quatorze.cc"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Quatorze - architecture sociale et solidaire", "url": "https://quatorze.cc"},
|
||||
{"type": "partenaire", "titre": "ASF France - partenaire sur projets co-construction", "url": "https://asffrance.org"},
|
||||
{"type": "certification", "titre": "Qualiopi - certification formation professionnelle LAB14", "url": "https://quatorze.cc"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f3-ateliermob",
|
||||
"nom": "Ateliermob",
|
||||
"url": "https://ateliermob.com",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#auto-construction", "#participation-usagers", "#mal-logement-precarite"],
|
||||
"pays": "PT",
|
||||
"raw_text_excerpt": "Atelier d'architecture portugais pionnier dans l'auto-construction participative et les projets a destination de populations defavorisees. Nombreux chantiers communautaires.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Lisbonne, Portugal",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Collectif",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#participation", "#chantier-ecole", "#contre-pouvoir", "#cooperatif"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Ateliermob, basé a Lisbonne, a construit sa reputation sur des chantiers communautaires dans les quartiers informels portugais - une pratique de l'auto-construction participative qui precede et informe ce que beaucoup appellent aujourd'hui co-design. L'atelier travaille avec et pour des communautes en situation precaire, produisant une architecture qui ne serait pas possible sans la participation active des habitants.",
|
||||
"description_longue": "Dans le Portugal des annees 2000-2010, les quartiers informels des peripheries de Lisbonne et Porto concentraient des populations souvent exclues des circuits normaux du logement social. Ateliermob s'est installe dans ce terrain avec une methode claire : pas d'architecture pour les pauvres, mais architecture avec les pauvres.\n\nLes chantiers communautaires d'Ateliermob sont des processus longs et exigeants. Ils commencent par l'investigation - comprendre comment vivent les habitants, ce dont ils ont besoin, ce qu'ils savent faire. Ils se poursuivent par des phases de co-conception - les habitants ne valident pas, ils designent. Et ils se concretisent par des chantiers collectifs ou la communaute pose ses mains sur la matiere.\n\nCe modele a une valeur de demonstration sur plusieurs plans : il montre que la participation reelle est techniquement possible sans sacrifier la qualite spatiale ; il montre que des personnes sans formation formelle peuvent construire des espaces de qualite avec le bon accompagnement ; et il montre que le processus lui-meme est generateur de lien social, de competence et d'autonomie.\n\nAteliermob est une reference europeenne pour les praticiens qui cherchent a aller au-dela de la participation consultative. Leur documentation des processus de chantier, leurs publications et leur participation aux debats internationaux ont contribue a faire de l'auto-construction participative un champ disciplinaire reconnu - pas une pratique anecdotique.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "Chantiers communautaires quartiers informels Lisbonne", "url": "https://ateliermob.com"},
|
||||
{"titre": "Projets RISCO - reconstruction participative logements precaires", "url": "https://ateliermob.com"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Ateliermob - architecture participative et communautaire", "url": "https://ateliermob.com"},
|
||||
{"type": "article", "titre": "Ateliermob - participatory architecture in Portuguese informal settlements (Domus, 2015)", "url": "https://www.domusweb.it"},
|
||||
{"type": "publication", "titre": "Ateliermob - documentation chantiers communautaires", "url": "https://ateliermob.com/publications"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f3-tamassociati",
|
||||
"nom": "TAMassociati",
|
||||
"url": "https://tamassociati.org",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#humanitaire-urgence", "#mal-logement-precarite"],
|
||||
"pays": "IT",
|
||||
"raw_text_excerpt": "Studio d'architecture venitien specialise dans les projets humanitaires et de developpement. Travaille en Afrique subsaharienne, Haiti, Moyen-Orient. Hopital Panzi (RDC).",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Venise, Italie",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#participation", "#contre-pouvoir", "#biosource", "#rural"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "TAMassociati, studio venitien, a construit l'hopital Panzi en Republique democratique du Congo avec des materiaux locaux, des artisans locaux et un protocole de soin aux violences sexuelles - projet qui a valu le Prix Aga Khan d'Architecture 2016. L'atelier travaille en Afrique subsaharienne, Haiti et au Moyen-Orient, en posant une these exigeante : l'architecture humanitaire n'est pas de la construction d'urgence jetable, c'est de la construction de dignite durable.",
|
||||
"description_longue": "TAMassociati tient une position rare dans le monde de l'architecture humanitaire : ils ne considerent pas leurs projets comme des urgences a traiter rapidement mais comme des occasions de construire de la qualite spatiale durable dans des contextes extremes. Cette position est a la fois ethique et technique.\n\nL'hopital Panzi a Bukavu, en Republique democratique du Congo, est leur realisation emblematique. Construit pour le docteur Denis Mukwege - prix Nobel de la Paix 2018, specialiste du traitement des violences sexuelles de guerre - l'hopital utilise des materiaux locaux, emploie des artisans et ouvriers congolais, et cree un espace de soin qui repond autant aux besoins psychologiques des patientes qu'aux contraintes medicales. Le Prix Aga Khan d'Architecture 2016 a reconnu cette approche.\n\nLa methode de TAMassociati est celle de l'ancrage : ils passent du temps dans les territoires ou ils travaillent, ils apprennent les techniques constructives locales, ils collaborent avec les artisans et les communautes. Ce processus ralentit la construction mais produit des batiments qui s'inscrivent dans leur contexte - techniquement, culturellement, economiquement.\n\nDans la lecture AEP, TAMassociati incarne une bifurcation double : une bifurcation geographique (construire dans les contextes les plus contraints de la planete) et une bifurcation methodologique (partir des ressources locales, des savoirs locaux, des besoins locaux). Cette coherence entre positionnement ethique et pratique constructive est exemplaire.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "Hopital Panzi - Bukavu, RDC - Prix Aga Khan 2016", "url": "https://tamassociati.org/panzi"},
|
||||
{"titre": "Projets reconstruction Haiti post-seisme", "url": "https://tamassociati.org"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "TAMassociati - humanitarian architecture", "url": "https://tamassociati.org"},
|
||||
{"type": "prix", "titre": "Prix Aga Khan d'Architecture 2016 - Hopital Panzi", "url": "https://www.akdn.org/architecture/project/panzi-hospital"},
|
||||
{"type": "article", "titre": "Denis Mukwege et TAMassociati - hopital Panzi (Le Monde Architecture, 2016)", "url": "https://www.lemonde.fr"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f3-we-made-that",
|
||||
"nom": "We Made That",
|
||||
"url": "https://wemadethat.co.uk",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#commande-publique-locale", "#participation-usagers"],
|
||||
"pays": "UK",
|
||||
"raw_text_excerpt": "Studio d'urbanisme et d'architecture base a Londres. Travaille sur la commande publique locale, l'espace public et la participation des usagers dans les quartiers defavorises.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Londres, Royaume-Uni",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#participation", "#urbanisme-tactique", "#reseau", "#cooperatif"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "We Made That est un studio londonien qui travaille a l'interface de l'urbanisme, de l'architecture et de la recherche pour renforcer les espaces publics et la commande locale dans les quartiers populaires de Londres. Son approche combinent diagnostic spatial rigoureux, participation des communautes locales et plaidoyer aupres des collectivites - une trilogie rare dans le monde du conseil spatial britannique.",
|
||||
"description_longue": "We Made That illustre un type de pratique peu visible en France mais structurant au Royaume-Uni : le studio de recherche et de design qui produit autant des politiques publiques que des espaces physiques. A Londres, l'agence travaille pour des boroughs (arrondissements municipaux), des collectivites, des associations de quartier, en combinant recherche qualitative, conception spatiale et engagement communautaire.\n\nLe terrain de predilection est les quartiers populaires londoniens - zones de tension entre gentrification, desinvestissement public et resilience communautaire. We Made That y intervient comme conseil strategique et comme concepteur : cartographies des usages, diagnostics des espaces publics, processus de participation avec les habitants, propositions spatiales ancrées dans le contexte local.\n\nLa dimension de plaidoyer est importante dans la pratique de We Made That : produire des arguments bases sur des donnees pour les collectivites, construire le cas intellectuel de politiques alternatives en matiere d'espace public. Ce travail de documentation et de conviction est aussi important que les interventions physiques.\n\nDans le panorama AEP, We Made That represente le studio engagé britannique - celui qui a fait de la commande publique locale, avec ses contraintes et ses lenteurs, le terrain privilegie de la transformation spatiale progressive. Une pratique qui assume que le changement passe par les institutions autant que contre elles.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "High Streets for All - recherche espaces publics inclusifs Londres", "url": "https://wemadethat.co.uk"},
|
||||
{"titre": "Diagnostic et propositions espaces publics boroughs Londres", "url": "https://wemadethat.co.uk"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "We Made That - urban design and research London", "url": "https://wemadethat.co.uk"},
|
||||
{"type": "publication", "titre": "High Streets for All - rapport espaces publics inclusifs (2017)", "url": "https://wemadethat.co.uk/work/high-streets-for-all/"},
|
||||
{"type": "partenaire", "titre": "Public Practice - programme similaire insertion urbanistes dans collectivites", "url": "https://publicpractice.org.uk"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f3-public-practice",
|
||||
"nom": "Public Practice",
|
||||
"url": "https://publicpractice.org.uk",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#commande-publique-locale", "#participation-usagers"],
|
||||
"pays": "UK",
|
||||
"raw_text_excerpt": "Programme qui place des architectes et urbanistes qualifies dans des collectivites locales britanniques pour renforcer la capacite de la commande publique.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Royaume-Uni",
|
||||
"type_juridique": "association/programme",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Association",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#reseau", "#contre-pouvoir", "#participation"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Public Practice incarne une idee radicalement simple : si les collectivites locales n'ont plus les moyens de penser l'espace, il faut y envoyer des architectes et urbanistes formes pour renforcer cette capacite de l'interieur. Le programme place des professionnels au coeur des services d'urbanisme britanniques, leur permettant de peser sur les decisions spatiales a grande echelle - de l'interieur des institutions plutot que contre elles.",
|
||||
"description_longue": "Public Practice part d'un diagnostic brutal sur la situation de l'urbanisme public britannique : des decennies d'austerite ont vide les services municipaux de leurs competences en design et en planification spatiale. Les collectivites ne savent plus ce qu'elles veulent ni comment le specifier. Les promoteurs privés en profitent pour imposer leurs standards. Les habitants subissent.\n\nLa reponse de Public Practice est institutionnelle et pragmatique : placer des architectes, urbanistes et designers qualifies directement dans les collectivites locales comme associates. Pas comme consultants externes - comme employes temporaires en immersion dans les administrations, qui apportent une competence en design et une vision long terme que les services municipaux ont perdu.\n\nL'impact est double : immediat (les projets sur lesquels travaillent les associes sont concus avec une qualite spatiale superieure) et systemique (les fonctionnaires avec lesquels ils travaillent apprennent, les procedures internes s'ameliorent, la capacite institutionnelle se reconstruit). Public Practice est un programme d'infrastructure pour la commande publique.\n\nDans la lecture AEP, Public Practice represente une bifurcation strategique : plutot que de combattre les institutions de l'exterieur, y envoyer des forces vives pour les transformer de l'interieur. Cette approche pragmatiste est debattue dans le monde de l'architecture critique - mais son impact concret sur la qualite des espaces produits par les collectivites britanniques est documenté et mesurable.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "Programme d'associes dans 70+ collectivites britanniques", "url": "https://publicpractice.org.uk"},
|
||||
{"titre": "Rapport impact 2023 - collectivites locales et qualite spatiale", "url": "https://publicpractice.org.uk/impact"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Public Practice - renforcement capacite commande publique UK", "url": "https://publicpractice.org.uk"},
|
||||
{"type": "rapport", "titre": "Public Practice - rapport d'impact annuel", "url": "https://publicpractice.org.uk/impact"},
|
||||
{"type": "article", "titre": "Public Practice - bringing design back into local government (The Guardian, 2019)", "url": "https://www.theguardian.com"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f3-construire-bouchain",
|
||||
"nom": "Construire (Bouchain)",
|
||||
"url": "https://construire-architectes.com",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#permis-de-faire", "#participation-usagers", "#auto-construction"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Agence de Patrick Bouchain. Pionnier du permis de faire et de l'architecture populaire en France. Rehabilitation de la Condition Publique (Roubaix), Lieu Unique (Nantes), Zingaro.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "France",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Agence",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#participation", "#contre-pouvoir", "#manifeste", "#chantier-ecole"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Patrick Bouchain a invente le permis de faire avant qu'il existe juridiquement - en convainquant maitre d'ouvrage par maitre d'ouvrage que l'espace pouvait se construire en chemin, avec les gens. Lieu Unique a Nantes, Condition Publique a Roubaix, le Grand T, Zingaro : une trajectoire d'architecte qui a fait du processus participatif un outil de combat contre l'architecture normée et desincarnée.",
|
||||
"description_longue": "Patrick Bouchain represente une position singuliere dans l'architecture francaise : il est a la fois un praticien reconnu (Prix National d'Architecture, Grand Medaille d'Or de l'Academie d'Architecture) et un agitateur qui a passe sa carriere a travailler a rebours des procedures normales.\n\nLe concept de 'permis de faire' - cette idee qu'il faut parfois deroguer aux normes pour faire de la qualite - n'est pas une theorie abstraite chez Bouchain. C'est une pratique repete projet apres projet : convaincre les elus, les maitres d'ouvrage, les bureaux de controle d'accepter une marge d'experimentation qui permet de co-construire avec les usagers sans etre bloque par la reglementation.\n\nLa Condition Publique a Roubaix et le Lieu Unique a Nantes sont ses projets les plus emblematiques : d'anciennes usines transformees en lieux de culture par un processus de rehabilitation progressive, avec les futurs usagers, en maintenant les traces et la memoire du bati industriel. Ces projets ont demontre qu'une rehabilitation peut etre plus intelligente, moins chere et plus adaptee que la reconstruction.\n\nZingaro - le theatre equestre de Bartabas en banlieue parisienne - est une autre dimension de Bouchain : l'architecture au service d'une forme artistique radicale, construite dans les marges reglementaires, habitable et evolutive. Ce projet dit quelque chose sur ce que peut faire l'architecture quand elle prend le risque de la singularite.\n\nBouchain a contribue au Manifeste pour une frugalite heureuse et creative en 2018 - confirmant l'alignement entre sa pratique de terrain et le mouvement plus large de la bifurcation architecturale francaise.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "Lieu Unique - Nantes (ancienne LU, rehabilitation participative)", "url": "https://construire-architectes.com"},
|
||||
{"titre": "La Condition Publique - Roubaix (friche industrielle en lieu de culture)", "url": "https://construire-architectes.com"},
|
||||
{"titre": "Zingaro - theatre equestre Aubervilliers (architecture de la singularite)", "url": "https://construire-architectes.com"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Construire - agence Patrick Bouchain", "url": "https://construire-architectes.com"},
|
||||
{"type": "livre", "titre": "Patrick Bouchain - Construire autrement (Actes Sud, 2006)", "url": "https://www.actes-sud.fr"},
|
||||
{"type": "article", "titre": "Patrick Bouchain et le permis de faire (Le Moniteur, 2018)", "url": "https://www.lemoniteur.fr"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f3-recetas-urbanas",
|
||||
"nom": "Recetas Urbanas",
|
||||
"url": "https://recetasurbanas.net",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#permis-de-faire", "#droit-comme-materiau", "#auto-construction", "#participation-usagers"],
|
||||
"pays": "ES",
|
||||
"raw_text_excerpt": "Collectif de Santiago Cirugeda a Seville. Celebre pour ses 'Recettes Urbaines' : instructions pour occuper illegalement des espaces publics et construire des structures non autorisees. Hack juridique et architectural.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Seville, Espagne",
|
||||
"type_juridique": "collectif/agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Collectif",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#reclaim", "#contre-pouvoir", "#manifeste", "#urbanisme-tactique"],
|
||||
"tags_proposes_nouveaux": ["#hack-juridique"],
|
||||
"description_courte": "Recetas Urbanas est un manuel de guérilla architecturale : Santiago Cirugeda y documente les failles juridiques permettant d'occuper et de construire illegalement dans l'espace public espagnol. Chafaudages transformes en terrasses, conteneurs installes sur des espaces de stationnement, structures temporaires perennes - les recettes sont a la fois des actes de desobeissance et des demonstrations que l'espace public appartient a ceux qui l'habitent.",
|
||||
"description_longue": "Recetas Urbanas est un des projets les plus radicaux dans le paysage de l'architecture critique europeenne. Santiago Cirugeda, architecte sevillan, a fait du hack juridique son outil principal : identifier systematiquement les vides et contradictions du droit de l'urbanisme espagnol pour y inserer des structures non autorisees, en produisant des 'recettes' detaillees que n'importe qui peut reproduire.\n\nLes recettes ne sont pas des manifestes abstrait - ce sont des instructions techniques et juridiques precises. 'Recette pour occuper un espace public avec un echafaudage' : comment obtenir le permis d'echafaudage (tres accessible), puis transformer cet echafaudage en terrasse, en espace collectif, en logement temporaire. 'Recette pour installer un conteneur sur un emplacement de parking' : exploiter la legislation des chantiers de construction pour installer une structure habitee dans l'espace de la voiture.\n\nCe travail a deux dimensions simultanees. D'abord, une dimension pratique : des centaines de personnes et de collectifs en Espagne et dans le monde ont utilise ces recettes pour creer des espaces collectifs, des potagers urbains, des logements precaires toleres. Ensuite, une dimension critique : en rendant visible les failles du systeme, Cirugeda expose la constructivite arbitraire de la regulation urbaine - ce qu'elle autorise, ce qu'elle interdit, et pourquoi.\n\nRecetas Urbanas a influence une generation d'architectes activistes : de Santiago a Berlin en passant par Paris, les pratiques d'occupation temporaire et de hack spatial partent souvent de cette source. La these est que l'espace public est un terrain de jeu reglemente par des lois qui peuvent etre interrogees, contournees, et parfois retournees.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "Recetas Urbanas - manuel d'occupation illegale de l'espace public", "url": "https://recetasurbanas.net"},
|
||||
{"titre": "Bug.55 - logement temporaire sur terrain public Seville", "url": "https://recetasurbanas.net"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Recetas Urbanas - manuel de guerilla architecturale", "url": "https://recetasurbanas.net"},
|
||||
{"type": "livre", "titre": "Santiago Cirugeda - Situaciones Urbanas (Tenov, 2007)", "url": "https://recetasurbanas.net"},
|
||||
{"type": "article", "titre": "Recetas Urbanas - architectural civil disobedience (Domus, 2004)", "url": "https://www.domusweb.it"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f3-assemble",
|
||||
"nom": "Assemble",
|
||||
"url": "https://assemblestudio.co.uk",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#participation-usagers", "#auto-construction", "#tiers-lieux-friches"],
|
||||
"pays": "UK",
|
||||
"raw_text_excerpt": "Collectif londonien pluridisciplinaire. Turner Prize 2015. Connu pour Granby Four Streets (Liverpool) : rehabilitation participative d'un quartier par les habitants eux-memes.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Londres, Royaume-Uni",
|
||||
"type_juridique": "collectif",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Collectif",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#participation", "#reclaim", "#contre-pouvoir", "#chantier-ecole"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Assemble a recu le Turner Prize 2015 pour Granby Four Streets - un projet ou des habitants de Liverpool avaient commence a rehabiliter eux-memes leurs maisons abandonnees par la speculation immobiliere. Le collectif londonien a rejoint ce mouvement citoyen et l'a transforme en dynamique architecturale collective, produisant une serie de maisons-manifestes qui interrogent la propriete, l'abandon et le droit de reconstruire.",
|
||||
"description_longue": "Assemble nait en 2010 d'une trentaine de jeunes diplomes londoniens qui ne trouvent pas leur place dans les agences traditionnelles et decidènt de construire eux-memes leur propre salle de cinema dans un garage de Hackney. Ce geste fondateur - faire plutot qu'attendre - definit l'ADN du collectif : chaque projet est un acte de fabrication collective, pas une prestation de services.\n\nGranby Four Streets, a Liverpool, est leur realisation la plus connue. Dans un quartier deserte par les proprietaires et abandonne par la mairie, une habitante - Doreen Lawrence - avait commence seule a planter des fleurs dans les maisons vides, a peindre les facades, a refuser l'abandon. Assemble rejoint ce mouvement et commence a rehabiliter des maisons avec des materiaux recuperes, des techniques artisanales, et la participation des quelques habitants restants. L'ensemble du projet est presente comme une installation artistique a la Biennale de Venise 2015, puis le Turner Prize suit.\n\nCe que Granby Four Streets dit c'est que la rehabilitation d'un quartier peut commencer sans argent, sans programme officiel, sans maitre d'ouvrage - juste des habitants qui refusent de partir et un collectif qui prend au serieux leur resistance. Ce message a une portee politique que le Turner Prize a paradoxalement amplifie : des lors que l'art le plus reconnu de l'annee est un projet d'auto-rehabilitation participative dans un quartier populaire, c'est une thèse sur ce qu'est l'architecture qui est valide.\n\nAssemble travaille aussi sur des projets a plus grande echelle - equipements publics, espaces de travail, expositions - mais toujours avec cette methode de fabrication collective et d'improvisation controlee qui les distingue.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "Granby Four Streets - Liverpool (Turner Prize 2015)", "url": "https://assemblestudio.co.uk/projects/granby-four-streets"},
|
||||
{"titre": "Cineroleum - salle cinema auto-construite Hackney Londres (2010)", "url": "https://assemblestudio.co.uk"},
|
||||
{"titre": "Baltic Street Adventure Playground - Glasgow", "url": "https://assemblestudio.co.uk"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Assemble Studio - collectif d'architecture et design", "url": "https://assemblestudio.co.uk"},
|
||||
{"type": "prix", "titre": "Turner Prize 2015 - Assemble pour Granby Four Streets", "url": "https://www.tate.org.uk/whats-on/turner-prize/turner-prize-2015"},
|
||||
{"type": "article", "titre": "Assemble - Granby Four Streets, Liverpool (Dezeen 2015)", "url": "https://www.dezeen.com/2015/10/07/granby-four-streets-liverpool-assemble-turner-prize-nominee/"}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "f3-baupiloten",
|
||||
"nom": "Die Baupiloten",
|
||||
"url": "https://baupiloten.com",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#participation-usagers"],
|
||||
"pays": "DE",
|
||||
"raw_text_excerpt": "Studio berlinois fonde par Susanne Hofmann. Specialiste de la co-conception avec les usagers (enfants, etudiants, personnes agees). Methode participative integree au processus de conception architecturale.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Berlin, Allemagne",
|
||||
"type_juridique": "agence/academique",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": null,
|
||||
"scrape_meta": {"tool": "v1", "pages_visited": [], "scrape_error": null, "note": null},
|
||||
"multi_famille": false,
|
||||
"familles_secondaires_suggested": [],
|
||||
"type_principal_final": "Collectif",
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"famille_principale_finale": 3,
|
||||
"hashtags_pratique": ["#participation", "#chantier-ecole", "#reseau", "#recherche-action"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"description_courte": "Die Baupiloten, studio berlinois de Susanne Hofmann, a developpe une methode de co-conception avec les enfants, les etudiants et les personnes agees qui est devenue une reference europeenne en participation architecturale. Leur specificite : la participation n'est pas une consultation en fin de processus mais un outil de design integre au coeur de la conception - le projet emerge des explorations spatiales collectives.",
|
||||
"description_longue": "Die Baupiloten - les pilotes de la construction - tient son nom d'une promesse : emmener les futurs usagers dans le cockpit du projet, pas les laisser attendre dans la cabine passagers. Depuis Berlin, Susanne Hofmann et son equipe ont developpe une methode de co-conception qui est aujourd'hui consideree comme une des plus rigoureuses en Europe.\n\nLa specificite de leur approche est l'integration de la participation dans les phases de conception - pas comme validation d'un projet deja concu, mais comme generateur de programme spatial. Des enfants explorent des espaces provisoires, expriment leurs desirs spatiaux, fabriquent des maquettes : de ce travail emerge une donnee de programme que le concepteur seul ne pourrait pas produire. Des personnes agees testent des sequences de deplacement dans leur futur ehpad et identifient les points de friction : ces informations transforment le projet.\n\nLe lien avec l'enseignement est central chez Die Baupiloten. Susanne Hofmann est professeure a l'Universite Technique de Berlin ; le studio est aussi un laboratoire pedagogique ou les etudiants en architecture apprennent la participation comme outil de projet. Cette double dimension - pratique et academique - permet une documentation et une theorie de la methode qui se nourrit des retours de chantier.\n\nDans le paysage AEP, Die Baupiloten represente la rigueur methodologique de la participation : montrer que co-concevoir n'est pas renoncer a la qualite spatiale mais au contraire la renforcer, en integrant une connaissance des usages que le concepteur seul ne peut pas avoir.",
|
||||
"projets_emblematiques": [
|
||||
{"titre": "Hunziker Areal - co-conception logements cooperatifs Zurich (avec cooperatives)", "url": "https://baupiloten.com"},
|
||||
{"titre": "Gymnasien Berlin - co-conception espaces scolaires avec eleves", "url": "https://baupiloten.com"}
|
||||
],
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Die Baupiloten - co-conception et architecture participative", "url": "https://baupiloten.com"},
|
||||
{"type": "livre", "titre": "Susanne Hofmann - Architecture is Participation (Jovis Verlag, 2014)", "url": "https://www.jovis.de"},
|
||||
{"type": "institution", "titre": "Technische Universitat Berlin - chaire Susanne Hofmann", "url": "https://www.tu-berlin.de"}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
486
V2-cascade/fiches-passe2/seed-v2-passe2-batch8.json
Normal file
486
V2-cascade/fiches-passe2/seed-v2-passe2-batch8.json
Normal file
@@ -0,0 +1,486 @@
|
||||
{
|
||||
"meta": {
|
||||
"batch": 8,
|
||||
"statut": "PRODUIT",
|
||||
"fiches_batch": 10,
|
||||
"modele": "claude-sonnet-4-6",
|
||||
"date": "2026-05-03",
|
||||
"note": "F3 nouvelles : PEROU, Plateau Urbain, Bellastock, ASF France, Rural Studio, Forensic Architecture, Collectif Parenthese, WoMa, Fab City Grand Paris, CivicWise."
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f3-perou",
|
||||
"nom": "PEROU - Pole d'Exploration des Ressources Urbaines",
|
||||
"url": "https://www.perou-paris.org/",
|
||||
"pays": "FR",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#mal-logement-precarite",
|
||||
"#hospitalite-migrants",
|
||||
"#droit-comme-materiau",
|
||||
"#auto-construction"
|
||||
],
|
||||
"hashtags_pratique": ["#contre-pouvoir", "#participation", "#manifeste"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Association",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"badge_f6_recherche_politique": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "contact@perou-paris.org",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "Paris, France",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Le PEROU pratique une architecture de l'hospitalite radicale. Depuis 2012, l'association intervient dans les bidonvilles et camps de migrants pour construire des architectures d'urgence et militer juridiquement pour le droit a la ville. Aucun financement structurel : chaque projet est une negociation avec le reel. La Foret a Ris-Orangis, batie dans un bidonville menace d'expulsion, incarne cette posture - l'espace construit comme argument politique autant que comme abri.",
|
||||
"description_longue": "Le PEROU commence en 2012 d'une conviction portee par son coordinateur Sebastien Thiery, politologue : les espaces precaires ne sont pas des marges de la ville, ils en sont le revelateur. La bidonville, le camp, le squat sont des espaces ou se joue la question de qui a le droit d'habiter et d'etre reconnu comme habitant. L'architecture, dans ce cadre, n'est pas un service ; c'est un acte politique.\n\nLa Foret est l'oeuvre la plus connue du PEROU. Construite dans le bidonville de Ris-Orangis en Essonne - un terrain occupe par plusieurs centaines de personnes d'origine rom, sous menace permanente d'expulsion - elle est une structure en bois legere, faite avec les habitants, qui affirme la permanence d'une communaute que les institutions veulent invisible. La Foret n'est pas un equipement. C'est une revendication spatiale.\n\nLe PEROU ne se content pas de construire. L'association produit une argumentation juridique et politique. Elle conteste les arretees d'expulsion, intervient dans les procedures administratives, documente les conditions de vie pour constituer des preuves. L'architecture comme materiau du droit : c'est un renversement conceptuel que peu de structures operent avec cette coherence.\n\nFinancement zero structure : le PEROU vit de projets, de soutiens militants, de la generosite des reseaux. Cette fragilite est aussi une position ethique. Elle interdit la professionnalisation de la precarite - ce glissement qui transforme les structures d'aide en institutions de gestion de la misere. Le PEROU reste inconfortable, imprevisible, difficile a categoriser.\n\nRefe rence dans la base de donnees A&P et partenaire de Quatorze, le PEROU est une des rares structures francaises a assumer pleinement la dimension judiciaire et politique de l'architecture sociale. En cela, il est un cas-limite du reseau de bifurcation : la ou d'autres transforment les pratiques constructives, le PEROU transforme les conditions de possibilite de l'habiter.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "PEROU - manifeste et actions", "url": "https://www.perou-paris.org/manifeste"},
|
||||
{"type": "livre", "titre": "Sebastien Thiery - Politique de l'hospitalite (La Decouverte, 2020)", "url": "https://www.editionsladecouverte.fr"},
|
||||
{"type": "article", "titre": "La Foret de Ris-Orangis : architecture dans le bidonville (Le Monde Diplomatique 2015)", "url": "https://www.monde-diplomatique.fr"},
|
||||
{"type": "article", "titre": "PEROU, fabrique du droit a la ville (Metropolitiques 2016)", "url": "https://metropolitiques.eu"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact"],
|
||||
"scrape_error": null,
|
||||
"note": "Email trouve page /contact. Conseil d'administration : Jean-Michel Frodon (President), Antoine Hennion (Secretaire), Bernard Latarjet (Tresorier). Structure fragile financierement. Listee dans A&P et partenaires Quatorze."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f3-plateau-urbain",
|
||||
"nom": "Plateau Urbain",
|
||||
"url": "https://www.plateau-urbain.com/",
|
||||
"pays": "FR",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#tiers-lieux-friches",
|
||||
"#droit-comme-materiau",
|
||||
"#commande-publique-locale"
|
||||
],
|
||||
"hashtags_pratique": ["#urbanisme-tactique", "#reclaim", "#cooperatif"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Cooperative",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "16 Boulevard Saint-Germain CS 70514, 75237 Paris Cedex 05",
|
||||
"type_juridique": "SCIC SA",
|
||||
"contact_form_url": "https://www.plateau-urbain.com/contact",
|
||||
"description_courte": "Plateau Urbain est une cooperative qui a transforme l'urbanisme transitoire en expertise politique. La SCIC gere les espaces vacants - bureaux, usines, immeubles en attente de reconversion - pour y installer des acteurs de l'economie sociale pendant la periode d'interregne. Co-porteur des Grands Voisins a Paris et de Coco Velten a Marseille, Plateau Urbain interroge le droit de jouissance de la ville : qui occupe les vides ? A quelle condition ? Pour faire quoi ?",
|
||||
"description_longue": "Plateau Urbain part d'un constat simple et pourtant radical : les villes sont pleines de vides. Des metres carres en attente de permis, de financement, de decision politique. Pendant ces periodes d'interregne - qui peuvent durer des annees - ces espaces restent fermes, inutilises, parfois deteriores. La cooperative pose la question : et si on les habitait ?\n\nLe modele juridique et operationnel que Plateau Urbain a construit est une innovation en soi. La SCIC signe des conventions d'occupation temporaire avec des proprietaires publics et prives, puis sous-loue les espaces a prix accessibles a des associations, collectifs, entreprises sociales. Ce n'est pas de l'occupation militante ; c'est une negociation professionnelle des cadres juridiques de l'urbanisme. Plateau Urbain est devenu une reference nationale et europeenne sur le droit de l'occupation temporaire.\n\nLes Grands Voisins (2016-2019) sont l'experience la plus emblematique. Sur l'ancien hopital Saint-Vincent-de-Paul dans le 14e arrondissement de Paris, Plateau Urbain, Yes We Camp et Aurore ont cree un lieu habite par 600 personnes - dont des demandeurs d'asile - avec des ateliers, des espaces de vie, des services. La dimension sociale etait inscrite dans le programme depuis le debut, pas comme geste de charite mais comme parti pris urbain.\n\nCoco Velten a Marseille prolonge cette demarche dans une ville ou la question de l'occupation de l'espace public est encore plus politiquement chargee. L'Hotel du Departement abandonne devient un laboratoire d'usages partages.\n\nPartenaire de Bellastock sur l'urbanisme circulaire, Plateau Urbain integre progressivement la question du reemploi des materiaux dans sa pratique de gestion des espaces - un pont entre la F3 (urbanisme social) et la F1 (filieres de reemploi). Ce croisement en fait une structure pivot dans le reseau de bifurcation.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Plateau Urbain - projets et methodes", "url": "https://www.plateau-urbain.com/our-projects"},
|
||||
{"type": "article", "titre": "Les Grands Voisins : anatomie d'une experience urbaine (Metropolitiques 2019)", "url": "https://metropolitiques.eu"},
|
||||
{"type": "article", "titre": "L'urbanisme transitoire, entre experimentation et banalisation (Urbanisme 2020)", "url": "https://www.revue-urbanisme.fr"},
|
||||
{"type": "site", "titre": "Coco Velten - espace partage Marseille", "url": "https://coco-velten.org"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact"],
|
||||
"scrape_error": "Pas d'email public, formulaire de contact uniquement.",
|
||||
"note": "Horaires : Lun-Ven 9h-13h / 14h-19h. Identifie 2x comme partenaire YWC (Grands Voisins + Coco Velten). Partenariat avec Bellastock sur l'urbanisme circulaire."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f3-bellastock",
|
||||
"nom": "Bellastock",
|
||||
"url": "https://www.bellastock.com/",
|
||||
"pays": "FR",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"famille_principale_finale": 1,
|
||||
"familles_secondaires": [5],
|
||||
"familles_secondaires_suggested": [1],
|
||||
"hashtags": [
|
||||
"#auto-construction",
|
||||
"#tiers-lieux-friches",
|
||||
"#participation-usagers"
|
||||
],
|
||||
"hashtags_pratique": ["#reemploi", "#chantier-ecole", "#cooperatif"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Cooperative",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "contact@bellastock.com",
|
||||
"email_source": "scrape_homepage_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06 62 16 62 81",
|
||||
"adresse": "13 rue Santeuil, 75005 Paris (+ 24 Avenue du Prado, 13006 Marseille)",
|
||||
"type_juridique": "cooperative",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Bellastock est la cooperative qui a fait du reemploi de materiaux de construction une discipline. Pionniere en France depuis plus de dix ans, la structure anime un festival annuel de vingt ans d'age, accompagne des chantiers de reemploi complexes, forme des architectes et des maitres d'ouvrage, et copropose avec Plateau Urbain les bases d'un urbanisme circulaire. Deux antennes - Paris et Marseille - pour une transformation concretes des filieres du bati.",
|
||||
"description_longue": "Bellastock nait du festival. Chaque annee depuis 2006, des etudiants en architecture et des amateurs construisent ensemble des structures ephemeres a partir de materiaux recuperes. Ce laboratoire grandeur nature a permis a la cooperative de developper une expertise experimentale unique : comment deconstruire selectivement ? Comment gerer un stock de materiaux recupres ? Comment inserer le reemploi dans un programme d'architecture ordinaire ?\n\nCette expertise s'est progressivement transformee en offre professionnelle. Bellastock accompagne aujourd'hui des maitres d'ouvrage publics et prives qui souhaitent integrer le reemploi dans leurs projets de construction ou de renovation : diagnostic des materiaux en place, identification des filieres locales, specifications techniques dans les marches. Le reemploi sort des chantiers militants pour entrer dans la commande publique.\n\nLa formation est un axe central. Bellastock forme des architectes, des economistes de la construction, des techniciens de chantier aux methodes de diagnostic et de reemploi. Cette ambition pedagogique situe la cooperative dans une position de tiers du secteur : ni agence d'architecture, ni ressourcerie, mais operateur du changement de pratiques.\n\nLe partenariat avec Plateau Urbain sur l'urbanisme circulaire est significatif. Il connecte deux logiques : la gestion des espaces vacants (Plateau Urbain) et la gestion des materiaux vacants (Bellastock). L'urbanisme circulaire est un projet politique : considerer que la ville existante est un stock de ressources mobilisables avant d'etre un terrain a amenager.\n\nNote sur la famille principale : Bellastock est classee F3 dans le seed, mais ses pratiques centrales - reemploi, filieres, formation - la rattachent plutot a la famille F1 (Reemploi et filieres). La famille principale finale est discutee : F1 principal avec F3 secondaire (chantier participatif, inscription sociale) semble plus juste que l'inverse.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Bellastock - projets et formations reemploi", "url": "https://www.bellastock.com/reemploi/"},
|
||||
{"type": "article", "titre": "Bellastock, vingt ans a construire autrement (Le Moniteur 2025)", "url": "https://www.lemoniteur.fr"},
|
||||
{"type": "site", "titre": "Festival Bellastock 2025 - edition 20 ans", "url": "https://www.bellastock.com/lieux/"},
|
||||
{"type": "article", "titre": "Urbanisme circulaire : Bellastock et Plateau Urbain, deux pionniers s'associent (Batiactu 2021)", "url": "https://www.batiactu.com"}
|
||||
],
|
||||
"multi_famille": true,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": "Page /contact bloquee par Cloudflare, email trouve dans footer homepage.",
|
||||
"note": "Multi-famille : principalement F3 (auto-construction participative) + F5 (reemploi, urbanisme transition). Plaquette 2025 disponible sur Issuu. Trophees Economie Circulaire et Solidaire 2024."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles - famille_principale_finale discutee F1 vs F3"}
|
||||
},
|
||||
{
|
||||
"id": "f3-asf-france",
|
||||
"nom": "Architectes Sans Frontieres France",
|
||||
"url": "https://asffrance.org/",
|
||||
"pays": "FR",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#humanitaire-urgence",
|
||||
"#mal-logement-precarite",
|
||||
"#participation-usagers"
|
||||
],
|
||||
"hashtags_pratique": ["#participation", "#reseau"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "France (Paris, Lyon, Marseille, Toulouse, Grenoble, Bordeaux)",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://asffrance.org/contact",
|
||||
"description_courte": "Architectes Sans Frontieres France mobilise des architectes benevoles pour intervenir dans les contextes de precarite et d'urgence, en France et a l'international. Six delegations territoriales - Paris, Lyon, Marseille, Toulouse, Grenoble, Bordeaux - et une appartenance au reseau ASF International font de cette association un maillon de la solidarite architecturale mondiale. La competence technique au service de ceux que la commande ordinaire n'atteint pas.",
|
||||
"description_longue": "Architectes Sans Frontieres France s'inscrit dans une tradition longue : celle des architectes qui choisissent d'exercer leur competence la ou elle n'est pas marchande. Mais l'association n'est pas une organisation humanitaire classique. Son ancrage dans le reseau ASF International, present dans une trentaine de pays, lui donne acces a des methodologies d'intervention construites depuis plusieurs decennies dans des contextes tres differents : crises migratoires en Europe, bidonvilles en Afrique subsaharienne, reconstruction post-catastrophe en Asie du Sud-Est.\n\nLa specificite francaise, c'est l'articulation entre l'urgence internationale et les situations de precarite ordinaire sur le territoire national. Les delegations territoriales travaillent avec des acteurs du mal-logement, des structures d'accueil de migrants, des quartiers en renovation - en apportant non pas des solutions cles en main, mais une expertise au service de la maitrise d'usage : aider les habitants a formuler leurs besoins, accompagner des projets portees par des associations de terrain, former des acteurs non-architectes aux questions d'espace.\n\nASF France est partenaire operationnel de Quatorze, la structure parisienne qui a systematise la notion d'assistance a maitrise d'usage. Ce lien est revelateur : ASF France est un reservoir de competences benevoles que des structures professionnelles activent sur des projets specifiques. C'est un modele de partage de la competence architecturale qui questionne la marchandisation du service.\n\nLe reseau ASF International est lui-meme un acteur politique. Il produit des prises de position sur le droit au logement, l'acces aux services urbains, la participation des populations dans les decisions qui concernent leur habitat. ASF France porte ces positions dans le debat francais sur l'architecture et l'urgence sociale.\n\nDans le reseau AEP, ASF France occupe une position discrète mais structurante : elle connecte l'architecture francaise a des pratiques internationales de solidarite, et elle maintient visible la question de pour qui l'architecture travaille.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "ASF France - missions et delegations", "url": "https://asffrance.org/notre-mission"},
|
||||
{"type": "site", "titre": "ASF International - reseau mondial", "url": "https://asfint.org"},
|
||||
{"type": "article", "titre": "Architectes benevoles : mobilisation pour les migrants en transit (Libération 2016)", "url": "https://www.liberation.fr"},
|
||||
{"type": "article", "titre": "ASF France et le droit a la ville pour tous (Urbanisme 2019)", "url": "https://www.revue-urbanisme.fr"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact"],
|
||||
"scrape_error": "Formulaire de contact multi-delegations, pas d'email visible en texte brut.",
|
||||
"note": "Aussi partenaire ASF Spain (asfint.org/asf-member/asf-spain/) present dans les partenaires de Quatorze. ASF International = reseau mondial."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f3-rural-studio",
|
||||
"nom": "Rural Studio",
|
||||
"url": "https://ruralstudio.org/",
|
||||
"pays": "USA",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#mal-logement-precarite",
|
||||
"#commande-publique-locale",
|
||||
"#participation-usagers",
|
||||
"#auto-construction"
|
||||
],
|
||||
"hashtags_pratique": ["#recherche-action", "#rural", "#participation"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Recherche",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"badge_f6_recherche_politique": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "rstudio@auburn.edu",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+1 334-624-4483",
|
||||
"adresse": "8448 AL Highway 61, Newbern, AL 36765 - Auburn University",
|
||||
"type_juridique": "programme academique",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Rural Studio est un programme d'Auburn University qui envoie des etudiants en architecture dans le comte de Hale, Alabama - l'une des zones les plus pauvres des Etats-Unis - pour concevoir et construire des maisons avec et pour les residents defavorises. Depuis 1993, 150 batiments. La Front Porch Initiative vise une maison reproductible a 20 000 dollars. Samuel Mockbee avait fonde ce programme sur une conviction : l'architecture doit un service a ceux qu'elle ignore.",
|
||||
"description_longue": "Samuel Mockbee cree Rural Studio en 1993 avec une conviction qui tient du manifeste : un architecte n'est complet que s'il s'est confronte a la realite de ceux que le marche laisse de cote. Le comte de Hale, dans le Black Belt de l'Alabama, est le laboratoire. Ses habitants, pour la plupart Afro-Americains, vivent dans des conditions de logement extremes. Les etudiants d'Auburn n'y vont pas faire de la charite. Ils y vivent, y travaillent, y construisent.\n\nLe choc pedagogique est documente depuis trente ans. Des etudiants formes dans les codes de la discipline architecturale se retrouvent face a des gens qui ont besoin d'une maison qui ne tombe pas, d'un systeme d'assainissement qui fonctionne, d'une structure qui resiste aux ouragans. Ce retour au programme elementaire de l'architecture - proteger, loger, tenir - produit des architectes differents. Rural Studio est devenu une reference mondiale non pas parce que ses batiments sont spectaculaires, mais parce que sa methode est radicale.\n\nLa Front Porch Initiative est l'aboutissement actuel de cette demarche. Depuis des annees, le programme cherche la maison reproductible a 20 000 dollars - pas une maison minimale, mais une maison qui reponde aux standards de confort et de securite americains a un cout que des familles tres modestes peuvent assumer via des programmes d'aide federaux. Ce projet de standardisation bas-cout est en lui-meme un acte politique : il dit que la qualite architecturale n'est pas un privilege.\n\n150 batiments construits depuis 1993 : ecoles, logements, salles communautaires, equipements publics. La construction directe par les etudiants - pas de sous-traitance, tout fait a la main avec les habitants - est a la fois un choix pedagogique et une necessite economique. Elle produit aussi des liens. Les batiments Rural Studio sont habites et entretenus par leurs usagers parce qu'ils ont participe a les faire.\n\nDans le reseau AEP, Rural Studio est une reference rare : une structure americaine, en contexte rural profond, qui articule pauvrete, race et architecture avec une coherence de trente ans. Elle montre que l'engagement social en architecture n'est pas une posture europeenne ou urbaine.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Rural Studio - projets et Front Porch Initiative", "url": "https://ruralstudio.org/projects/"},
|
||||
{"type": "livre", "titre": "Rural Studio : Samuel Mockbee and the Architecture of Decency (Andrea Oppenheimer Dean, 2002)", "url": "https://ruralstudio.org/about/contact/"},
|
||||
{"type": "article", "titre": "Rural Studio at 25 : building homes for the poor (Architectural Record 2018)", "url": "https://www.architecturalrecord.com"},
|
||||
{"type": "podcast", "titre": "Samuel Mockbee, architecte du pauvre (99% Invisible 2021)", "url": "https://99percentinvisible.org"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/about/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email general rstudio@auburn.edu + frontporch@auburn.edu pour la Front Porch Initiative. Reference mondiale de l'architecture sociale par l'enseignement. Fonde par Samuel Mockbee."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f3-forensic-architecture",
|
||||
"nom": "Forensic Architecture",
|
||||
"url": "https://forensic-architecture.org/",
|
||||
"pays": "UK",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"famille_principale_note": "Cas special - hors grille praticien. Badge contre-pouvoir-spatial. Famille principale indecise (F3 ou F5) - decision differee.",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [5],
|
||||
"hashtags": [
|
||||
"#droit-comme-materiau",
|
||||
"#humanitaire-urgence"
|
||||
],
|
||||
"hashtags_pratique": ["#recherche-action", "#contre-pouvoir"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Recherche",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"badge_f6_recherche_politique": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "info@forensic-architecture.org",
|
||||
"email_source": "scraped_web",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Goldsmiths, University of London, New Cross, London SE14",
|
||||
"type_juridique": "research agency / universite",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Forensic Architecture renverse l'usage de l'architecture : elle ne construit pas, elle enquete. L'agence de recherche fondee en 2011 par Eyal Weizman a Goldsmiths utilise les outils de modelisation spatiale pour documenter des violations des droits humains - bombardements, violences policieres, catastrophes environnementales. 300 investigations. Nomination au Turner Prize en 2018. L'espace comme evidence, l'architecture comme contre-pouvoir.",
|
||||
"description_longue": "Eyal Weizman fonde Forensic Architecture en 2011 a partir d'une question philosophique qui devient operationnelle : si l'espace est le theatre des violences d'Etat, peut-il aussi en etre le temoin ? La reponse est oui, et elle a produit une discipline nouvelle : l'architecture forensique.\n\nLes outils de Forensic Architecture sont ceux de la modélisation architecturale - photogrammetrie, reconstruction 3D, analyse des ombres, reconstitution de trajectoires balistiques - mais appliques non pas a la construction de nouveaux espaces, mais a la reconstitution d'evenements. Un bombardement en Syrie, une execution extrajudiciaire en Algerie, un incendie dans un camp de refugies en Grece : chaque investigation reconstitue un espace-temps a partir de fragments - photos satellitaires, videos de temoins, analyses chimiques, rapports medicaux.\n\nCes reconstructions sont ensuite presentees devant des tribunaux internationaux, des enquetes parlementaires, des instances onusiennes. Forensic Architecture ne fait pas que documenter ; elle temoigne. Et son temoignage a une rigueur methodologique que les violences d'Etat ont du mal a contester.\n\nLa nomination au Turner Prize en 2018 a sorti Forensic Architecture des espaces academiques pour la placer dans le debat culturel. Les installations presentees dans les musees et les biennales ne sont pas decoratives ; elles sont des evidences. Cette capacite a exister simultanement dans les espaces juridiques, politiques et artistiques est ce qui distingue Forensic Architecture de la recherche universitaire ordinaire.\n\nDans le reseau AEP, Forensic Architecture est un cas-limite. Elle ne construit rien. Elle ne releve pas de la pratique architecturale au sens professionnel. Mais elle montre que les outils de l'architecture - la pensee spatiale, la modelisation, la representation - peuvent etre des instruments de contre-pouvoir. C'est une extension radicale de ce que l'architecture peut faire dans le monde.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Forensic Architecture - investigations en cours", "url": "https://forensic-architecture.org/investigations"},
|
||||
{"type": "livre", "titre": "Eyal Weizman - Forensic Architecture : Violence at the Threshold of Detectability (Zone Books, 2017)", "url": "https://www.zonebooks.org"},
|
||||
{"type": "article", "titre": "Forensic Architecture, Turner Prize 2018 : l'architecture comme arme contre l'injustice (The Guardian 2018)", "url": "https://www.theguardian.com"},
|
||||
{"type": "podcast", "titre": "Eyal Weizman : l'architecture au service de la justice (France Culture 2019)", "url": "https://www.radiofrance.fr/franceculture"}
|
||||
],
|
||||
"multi_famille": true,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp+jina",
|
||||
"pages_visited": ["/about/contact", "/about/agency"],
|
||||
"scrape_error": "Site JS-heavy, inaccessible via jina. BrowserMCP ne charge pas le contenu dynamique. Pas d'email trouve.",
|
||||
"note": "Pas de RGPD wall. Email non trouve par scraping. A contacter via Goldsmiths University ou formulaire de presse. Fondateur : Eyal Weizman, professeur a Goldsmiths."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles - badge_contre_pouvoir_spatial confirme"}
|
||||
},
|
||||
{
|
||||
"id": "f3-collectif-parenthese",
|
||||
"nom": "Collectif Parenthese",
|
||||
"url": "https://www.collectifparenthese.com/",
|
||||
"pays": "FR",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [4],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#participation-usagers",
|
||||
"#auto-construction",
|
||||
"#tiers-lieux-friches"
|
||||
],
|
||||
"hashtags_pratique": ["#participation", "#urbanisme-tactique", "#chantier-ecole"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Collectif",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "collectifparenthese@gmail.com",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "07 44 40 47 52",
|
||||
"adresse": "Fort d'Aubervilliers, 172 avenue Jean Jaures, 93300 Aubervilliers",
|
||||
"type_juridique": "collectif",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Le Collectif Parenthese est implante au Fort d'Aubervilliers, en Seine-Saint-Denis. Il travaille sur des projets participatifs et auto-construits avec les populations locales, dans un territoire ou la question de l'espace public est politique. Partenaire operationnel de Quatorze, le collectif incarne une architecture de proximite et d'engagement ancree dans le periurbain populaire.",
|
||||
"description_longue": "Le Collectif Parenthese travaille depuis le Fort d'Aubervilliers - un espace militaire desaffecte devenu l'un des laboratoires les plus actifs de la Seine-Saint-Denis. Ce territoire n'est pas choisi par hasard : Aubervilliers est une ville ouvriere et populaire en pleine transformation, sous pression fonciere, traversee par des questions de gentrification et de deplacement des habitants.\n\nLe collectif y pratique une architecture participative qui part des besoins des habitants plutot que des programmes des commanditaires. Activations d'espaces, chantiers collectifs, ateliers de conception avec des groupes divers - enfants, personnes agees, migrants, associations locales. La methode est issue des pratiques de l'urbanisme tactique, mais avec une ambition de permanence : il ne s'agit pas de produire des evenements mais de transformer durablement la maniere dont les gens habitent et s'approprient leur espace.\n\nLa localisation au Fort d'Aubervilliers est elle-meme une position. Ce site, historiquement militaire, est devenu un terrain d'experimentation qui reunit des collectifs d'architecture, des compagnies de theatre, des associations d'education populaire. Le Collectif Parenthese s'inscrit dans cette constellation tout en maintenant son ancrage dans les quartiers environnants.\n\nPartenaire operationnel de Quatorze, le collectif participe a un reseau plus large de structures qui pratiquent l'assistance a maitrise d'usage (AMO) dans des contextes sociaux complexes. Cette connexion lui donne acces a des methodologies et a des projets d'une echelle que le collectif seul ne pourrait atteindre.\n\nDans le reseau AEP, le Collectif Parenthese represente un type de structure rare : implante de maniere permanente dans un territoire populaire, travaillant dans la duree avec des habitants qui ne sont pas les clients habituels de l'architecture. Une forme de militance architecturale incarnee.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Collectif Parenthese - projets et approche", "url": "https://www.collectifparenthese.com/"},
|
||||
{"type": "site", "titre": "Fort d'Aubervilliers - lieu d'experimentation collectif", "url": "https://www.collectifparenthese.com/"},
|
||||
{"type": "article", "titre": "Architecture participative en Seine-Saint-Denis : les nouvelles pratiques (Metropolitiques 2020)", "url": "https://metropolitiques.eu"},
|
||||
{"type": "article", "titre": "Le Fort d'Aubervilliers, laboratoire du periurbain (Le Monde 2021)", "url": "https://www.lemonde.fr"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact"],
|
||||
"scrape_error": null,
|
||||
"note": "Email et telephone trouves page /contact. Implantation Fort d'Aubervilliers, site experimental de tiers-lieu en Seine-Saint-Denis."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles - F3 social principal confirme"}
|
||||
},
|
||||
{
|
||||
"id": "f3-woma",
|
||||
"nom": "WoMa",
|
||||
"url": "https://woma.fr/",
|
||||
"pays": "FR",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [4],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#fab-city-quartier",
|
||||
"#participation-usagers"
|
||||
],
|
||||
"hashtags_pratique": ["#urbanisme-tactique", "#participation", "#low-tech"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Association",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "hello@woma.fr",
|
||||
"email_source": "scrape_contact_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06 07 99 08 98",
|
||||
"adresse": "15 bis rue Leon Giraud, 75019 Paris (+ FabLab M19 : 134 rue d'Aubervilliers, 75019 Paris)",
|
||||
"type_juridique": "association loi 1901",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "WoMa gere deux espaces de fabrication numerique et d'artisanat dans le 19e arrondissement de Paris : Le 15 bis et le FabLab M19. Co-fondateur de l'association Fab City Grand Paris, WoMa pratique le service public ouvert a tous, sans discrimination. Dans un quartier populaire en transformation, les espaces de fabrication sont des outils de democratisation de la competence technique et de resistance a la gentrification.",
|
||||
"description_longue": "WoMa s'ancre dans le 19e arrondissement de Paris - Belleville, la Villette, la Chapelle - un territoire en pleine mutation ou la pression immobiliere et la transformation demographique redessinant les usages et les populations. Dans ce contexte, ouvrir des espaces de fabrication accessibles a tous n'est pas une demarche neutre : c'est une affirmation que les habitants d'un quartier populaire ont autant le droit d'acceder aux outils de creation que ceux d'un quartier plus aise.\n\nLe 15 bis, rue Leon Giraud, est le coeur operationnel : atelier de menuiserie, machines numeriques (laser, fraiseuse CNC), espace couture, ceramique. Le FabLab M19, rue d'Aubervilliers, complete le dispositif avec un focus sur les usages numeriques et la formation. Deux lieux, une meme logique : les outils de fabrication comme bien commun.\n\nCo-fondateur de l'association Fab City Grand Paris - avec Volumes, Arslonga, Ouishare et Villette Makerz - WoMa participe au projet politique du reseau mondial Fab City : relocaliser la production, permettre aux quartiers et aux villes de produire ce qu'ils consomment, reduire la dependance aux chaines d'approvisionnement globales. C'est une vision economique et ecologique de la ville, incarnee dans des espaces concrets.\n\nL'organisation interne de WoMa reflete cette ambition. Plusieurs emails specialises - fab@woma.fr pour les machines, work@woma.fr pour le coworking, privat@woma.fr pour les privatisations, m19@woma.fr pour le FabLab M19 - temoignent d'une structure qui gere des usages multiples et differents publics. Association loi 1901, WoMa cherche a rester accessible financierement.\n\nDans le reseau AEP, WoMa est un operateur de terrain de la transformation des pratiques de fabrication urbaine. Pas une agence d'architecture, pas un think tank : un lieu qui fait exister concretement une autre maniere de produire et d'habiter la ville.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "WoMa - espaces de fabrication Paris 19e", "url": "https://woma.fr/"},
|
||||
{"type": "site", "titre": "Fab City Grand Paris - reseau localisation production", "url": "https://fabcity.paris/"},
|
||||
{"type": "article", "titre": "Les FabLabs de quartier, outil de democratisation ou gentrification douce ? (Metropolis 2021)", "url": "https://metropolis.fr"},
|
||||
{"type": "article", "titre": "WoMa, faire ensemble dans le 19e (Reporterre 2020)", "url": "https://reporterre.net"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact", "/nous-contacter"],
|
||||
"scrape_error": "URL /contact -> 404, infos trouvees dans footer de la page 404.",
|
||||
"note": "Emails specialises : fab@woma.fr (machines), work@woma.fr (coworking), privat@woma.fr (privatisations), m19@woma.fr (FabLab M19). Multi-famille F3+F4."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f3-fab-city-grand-paris",
|
||||
"nom": "Fab City Grand Paris",
|
||||
"url": "https://fabcity.paris/",
|
||||
"pays": "FR",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#fab-city-quartier",
|
||||
"#participation-usagers",
|
||||
"#tiers-lieux-friches"
|
||||
],
|
||||
"hashtags_pratique": ["#reseau", "#transition-territoriale", "#low-tech"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Parc de la Villette, Paris 19e",
|
||||
"type_juridique": "association / SCIC Oasis21",
|
||||
"contact_form_url": "https://fabcity.paris/en/home/",
|
||||
"description_courte": "Fab City Grand Paris est la declinaison francilienne du reseau mondial Fab City. L'association federe des FabLabs, des tiers-lieux et des acteurs de l'economie circulaire pour relocaliser la production dans la metropole parisienne. Fondateurs : Volumes, WoMa, Arslonga, Ouishare, Villette Makerz. Un projet politique de souverainete productive urbaine, ancre dans la Parc de la Villette et la SCIC Oasis21.",
|
||||
"description_longue": "Fab City est un mouvement mondial ne en 2014 a Barcelone sous l'impulsion du FabLab Barcelona et de la ville. Son pari est radical : d'ici 2054, les villes membres du reseau doivent etre capables de produire localement ce qu'elles consomment. Pas d'autarcie totale, mais une reorganisation profonde des chaines de valeur urbaines pour reduire la dependance aux productions industrielles lointaines.\n\nFab City Grand Paris porte cette vision dans la metropole parisienne. L'association, issue de l'entree de Paris dans le reseau Fab City, federe des acteurs tres differents : WoMa et ses ateliers de quartier, Volumes et son expertise en design, Arslonga et ses savoirs-faire artisanaux, Ouishare et sa pensee de l'economie des plateformes, Villette Makerz et son ancrage au Parc de la Villette. Cette diversite est a la fois une force et un defi de gouvernance.\n\nLes projets concrets donnent corps a la vision. Fab City Store : un magasin ou les objets sont produits localement par des artisans et des ateliers du reseau. REFLOW, le projet europeen sur l'economie circulaire du bois, experimente une filiere locale de recuperation et de transformation des materiaux bois en Grand Paris. CENTRINNO, sur l'agriculture urbaine et les quartiers industriels, explore les conditions d'une souverainete alimentaire a l'echelle de la metropole.\n\nLe Hub Fab City physique - inscrit dans la SCIC Oasis21 au Parc de la Villette - est a la fois espace de coworking, lieu d'experimentation et noeud du reseau. Les formations certifiantes que propose Fab City Grand Paris visent a diffuser les competences necessaires a cette relocalisation productive : impression 3D, electronique, menuiserie numerique, design circulaire.\n\nDans le reseau AEP, Fab City Grand Paris est un acteur de la transition productive urbaine. Il relie la question de l'architecture et de l'espace a celle de la production materielle : comment une ville fabrique-t-elle ses objets, ses batiments, sa matiere ? C'est une question ecologique et politique qui depasse le seul champ de l'architecture.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Fab City Grand Paris - projets et communaute", "url": "https://fabcity.paris/projets"},
|
||||
{"type": "site", "titre": "Fab City Network - mouvement mondial", "url": "https://fab.city/"},
|
||||
{"type": "article", "titre": "Relocaliser la production urbaine : le pari de Fab City (Alternatives Economiques 2020)", "url": "https://www.alternatives-economiques.fr"},
|
||||
{"type": "article", "titre": "REFLOW - economie circulaire bois en Grand Paris (EU Cordis 2021)", "url": "https://cordis.europa.eu"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/en/home/"],
|
||||
"scrape_error": "Pas d'email visible. Formulaire de contact dans la section 'Contactez-nous' de la homepage.",
|
||||
"note": "Projets : Fab City Store, REFLOW (economie circulaire bois), CENTRINNO (agriculture urbaine). Formations certifiantes. Fab City Hub = tiers-lieu physique."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles"}
|
||||
},
|
||||
{
|
||||
"id": "f3-civicwise",
|
||||
"nom": "CivicWise",
|
||||
"url": "https://civicwise.org/",
|
||||
"pays": "INT",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#participation-usagers",
|
||||
"#commande-publique-locale"
|
||||
],
|
||||
"hashtags_pratique": ["#reseau", "#participation", "#urbanisme-tactique"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "info@civicwise.org",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "International (origine Espagne) - paris@civicwise.org pour France",
|
||||
"type_juridique": "reseau international",
|
||||
"contact_form_url": "https://civicwise.org/contact/",
|
||||
"description_courte": "CivicWise est un reseau international d'innovation civique et d'architecture participative pour la fabrique des territoires. Ses cercles locaux - actifs a Paris, Londres, Madrid, Barcelone, Mexico, Buenos Aires - experimentent des methodologies de co-conception et d'intelligence collective avec les habitants, les institutions et les associations. Partenaire operationnel de Quatorze, CivicWise relie des pratiques participatives dispersees en une communaute de methodes.",
|
||||
"description_longue": "CivicWise nait en Espagne dans les annees 2010 dans un contexte specifique : la crise de 2008 a ravage les institutions et la confiance dans les formes traditionnelles de la representation politique. Les Indignados, les collectifs d'autogestion urbaine, les laboratories civiques barcelonais et madrilenes cherchent de nouvelles facons de prendre des decisions collectives sur l'espace urbain. CivicWise emerge de ces experimentations comme un reseau de methodologies et de praticiens.\n\nLa specificite de CivicWise est sa structure distribuee. Pas de siege central fixe, mais des cercles locaux actifs dans des villes tres differentes : Paris, Londres, Madrid, Barcelone, Valence, Canaries, Mexico, Buenos Aires. Chaque cercle adapte les methodologies du reseau a son contexte local, mais contribue aussi a un commun methodologique que les autres peuvent reprendre. C'est une forme d'organisation qui prefigure ce que le reseau AEP cherche lui-meme a mettre en place.\n\nLes outils de CivicWise sont ceux de la co-conception participative et de l'intelligence collective : cartographies collaboratives, ateliers de vision, processus de decision distribuee, prototypage rapide avec les habitants. Ces methodes sont documentees et rendues accessibles, ce qui permet a d'autres collectifs de les utiliser.\n\nLe partenariat avec Quatorze en France est significatif. Quatorze est une des structures francaises les plus sophistiquees sur les questions d'assistance a maitrise d'usage (AMU). En travaillant avec CivicWise, Quatorze connecte ses pratiques locales a un reseau international de methodologies participatives - et contribue a l'enrichir.\n\nDans le reseau AEP, CivicWise est un acteur methodologique. Il ne construit pas, il facilite. Il ne produit pas des projets d'architecture, il produit des processus par lesquels les habitants deviennent co-auteurs de leur espace. C'est une contribution essentielle a la transformation des pratiques, mais qui reste difficile a visualiser sur une carte de projets.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "CivicWise - methodologies et communaute internationale", "url": "https://civicwise.org/about"},
|
||||
{"type": "article", "titre": "Innovation civique et architecture participative : le modele CivicWise (Metropolis 2019)", "url": "https://metropolis.fr"},
|
||||
{"type": "article", "titre": "Les laboratoires civiques europeens, de Barcelone a Paris (Metropolitiques 2018)", "url": "https://metropolitiques.eu"},
|
||||
{"type": "site", "titre": "CivicWise Paris - cercle local", "url": "https://civicwise.org/paris/"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email general info@civicwise.org + emails locaux par ville (paris@civicwise.org, london@civicwise.org, etc.). Reseau tres distribue, pas de siege central fixe."
|
||||
},
|
||||
"passe2_meta": {"batch": 8, "modele": "claude-sonnet-4-6", "note": "F3 nouvelles"}
|
||||
}
|
||||
]
|
||||
}
|
||||
539
V2-cascade/fiches-passe2/seed-v2-passe2-batch9.json
Normal file
539
V2-cascade/fiches-passe2/seed-v2-passe2-batch9.json
Normal file
@@ -0,0 +1,539 @@
|
||||
{
|
||||
"meta": {
|
||||
"batch": 9,
|
||||
"statut": "PRODUIT",
|
||||
"fiches_batch": 11,
|
||||
"modele": "claude-sonnet-4-6",
|
||||
"date": "2026-05-03",
|
||||
"note": "F4 stars AMO : RAHP, Regain, Rehabiter, Habicoop, Cooperative Oasis, Mietshäuser Syndikat, Les HABILES, Habitat & Partage, Atcoop, Toits de Choix, Atelier 15."
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f4-rahp",
|
||||
"nom": "RAHP - Reseau National des Accompagnateurs et Accompagnatrices Professionnelles de l'Habitat Participatif",
|
||||
"url": "https://rahp.fr",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#amo-bifurcation",
|
||||
"#accompagnement-cooperatif",
|
||||
"#facilitation-collectif",
|
||||
"#habitat-participatif"
|
||||
],
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#cooperatif", "#reseau"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "contact@rahp.fr",
|
||||
"email_source": "search_snippet_hpf",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "Montpellier",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Le RAHP rassemble une trentaine de structures professionnelles specialisees dans l'accompagnement de projets d'habitat participatif. Ne en 2010, le reseau developpe le referentiel metier de l'AMO habitat participatif, anime des seminaires annuels et des RAHPees mensuelles. Il est l'infrastructure de professionnalisation d'un metier qui n'existait pas - l'accompagnateur de groupes d'habitants en projet de vie commune.",
|
||||
"description_longue": "L'habitat participatif est un projet collectif complexe. Des personnes qui se connaissent peu - ou pas du tout - decidendent de concevoir, financer et habiter ensemble un batiment. Ce processus prend en general de trois a sept ans. Il traverse des phases de conception architecturale, de montage juridique et financier, de gestion des conflits interpersonnels, de negociation avec les institutions. Et la plupart des groupes qui s'y lancent n'ont ni les outils ni l'experience pour mener ce chemin seuls.\n\nC'est la raison d'etre du RAHP. Le reseau professionnalise une fonction qui existait de maniere informelle depuis les annees 2000 : l'accompagnateur de groupes d'habitat participatif. En federant une trentaine de structures - associations comme Regain, Les HABILES, Rehabiter ; societes comme Toits de Choix, Atcoop - le RAHP construit un referentiel metier, des formations communes, des outils partages. Il rend visible et reconnu un secteur professionnel nouveau.\n\nLes RAHPees mensuelles sont des espaces de pratique reflexive. Les professionnels adherents se retrouvent pour echanger sur des situations difficiles, partager des methodes, confronter des approches. C'est une forme d'intelligence collective professionnelle rare dans un secteur habituellement peu organise.\n\nLe seminaire annuel rassemble les membres du reseau et des acteurs exterieurs - architectes, bailleurs sociaux, collectivites, notaires - pour travailler les questions de fond : comment mieux articuler AMO et maitrise d'oeuvre ? Quels outils juridiques pour les groupes ? Comment financer des projets ambitieux ?\n\nDans le reseau AEP, le RAHP est un noeud structurant de la famille F4. Il donne de la lisibilite a un ensemble de structures qui, individuellement, restent peu connues du grand public et des decideurs. Il est aussi un interlocuteur politique : representant le secteur aupres des pouvoirs publics, le RAHP contribue a faire evoluer les cadres reglementaires et financiers de l'habitat participatif en France.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "RAHP - membres et ressources", "url": "https://rahp.fr/nos-membres/"},
|
||||
{"type": "site", "titre": "RAHP - livret des membres AMO habitat participatif", "url": "https://rahp.fr"},
|
||||
{"type": "article", "titre": "L'accompagnement de l'habitat participatif, un nouveau metier (Le Moniteur 2018)", "url": "https://www.lemoniteur.fr"},
|
||||
{"type": "article", "titre": "RAHP : professionnaliser l'AMO habitat collectif alternatif (Urbanisme 2021)", "url": "https://www.revue-urbanisme.fr"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/", "/nos-membres/", "livret-PDF"],
|
||||
"scrape_error": null,
|
||||
"note": "Email trouve via snippet HPF. Reseau-cle : 30 membres AMO pros dont Regain, Toits de Choix, Atcoop, Unitoit, Habiter Autrement Auvergne. Liste detaillee dans le livret PDF."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
},
|
||||
{
|
||||
"id": "f4-regain",
|
||||
"nom": "Regain - Habitat Participatif PACA",
|
||||
"url": "https://regain-hg.org",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#accompagnement-cooperatif",
|
||||
"#amo-bifurcation",
|
||||
"#scop-scic"
|
||||
],
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#cooperatif", "#participation"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Cooperative",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "pcmarais@regain-hg.org",
|
||||
"email_source": "search_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06 81 91 73 63",
|
||||
"adresse": "REZO4, Maison des Metiers du Livre, 4 Av de l'Observatoire, 04300 Forcalquier",
|
||||
"type_juridique": "SCIC",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Regain est une SCIC basee a Forcalquier qui accompagne et forme les acteurs de l'habitat participatif en PACA et en France. Montage juridique et financier, gouvernance partagee, conception participative, renovation energetique - son coordinateur Pierre-Charles Marais est aussi architecte et auditeur energetique (Mon Accompagnateur Renov). Regain incarne l'AMO de territoire ancree dans les realites rurales et semi-rurales de Provence.",
|
||||
"description_longue": "Regain s'installe a Forcalquier, dans les Alpes-de-Haute-Provence - un territoire rural qui a vu se developper depuis les annees 1970 de nombreuses experiences de vie collective, de fermes alternatives, d'ecolieux. Ce contexte n'est pas innocent. L'AMO que pratique Regain s'est construit dans un dialogue constant avec des groupes qui cherchent des formes d'habiter alternatives dans des territoires peu denses.\n\nLa structure cooperative (SCIC) de Regain est elle-meme une position politique. La SCIC permet d'associer au capital de la structure les habitants accompagnes, les partenaires institutionnels, les salaries - une gouvernance multi-partenaires qui reflete les valeurs de l'habitat participatif que la structure accompagne.\n\nLes competences de Pierre-Charles Marais - architecte, auditeur energetique, Mon Accompagnateur Renov - donnent a Regain une capacite rare : articuler la question du projet collectif d'habiter avec celle de la performance energetique et de l'accompagnement a la renovation. Dans un contexte ou la renovation du batiment existant est un enjeu central, cette double competence AMO-habitat participatif / renovation energetique est un atout.\n\nRegain travaille avec des groupes en constitution, en cours de projet, et avec des collectivites qui souhaitent developper l'habitat participatif sur leur territoire. La formation est aussi un axe : former des habitants, des elus, des professionnels a la methodologie de l'habitat participatif.\n\nDans le reseau AEP, Regain est un exemple d'AMO de territoire qui s'inscrit dans une ecologie plus large de l'habiter alternatif en milieu rural et semi-rural - un versant peu visible du reseau de bifurcation mais qui represente une part importante des experiences reelles.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Regain - accompagnement et formations habitat participatif", "url": "https://regain-hg.org/se-faire-accompagner/"},
|
||||
{"type": "site", "titre": "Regain - approfondir : ressources et methodologies", "url": "https://regain-hg.org/approfondir/"},
|
||||
{"type": "article", "titre": "L'habitat participatif en zone rurale : enjeux et specificites (Urbanisme 2019)", "url": "https://www.revue-urbanisme.fr"},
|
||||
{"type": "article", "titre": "Forcalquier, territoire d'experimentation de l'habitat alternatif (Reporterre 2021)", "url": "https://reporterre.net"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/", "/accompagnement/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email pcmarais@regain-hg.org (Pierre-Charles Marais). Aussi : cgarcia@regain-hg.org (Charlotte Garcia). Membre RAHP."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
},
|
||||
{
|
||||
"id": "f4-rehabiter",
|
||||
"nom": "Rehabiter (ex Eco-Quartier Strasbourg)",
|
||||
"url": "https://rehabiter.eu",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#accompagnement-cooperatif",
|
||||
"#facilitation-collectif",
|
||||
"#commun-gouvernance"
|
||||
],
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#cooperatif", "#transition-territoriale"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Association",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "contact@rehabiter.eu",
|
||||
"email_source": "search_snippet_hpf",
|
||||
"email_confidence": "high",
|
||||
"telephone": "07 76 69 39 78",
|
||||
"adresse": "1 place des Orphelins, 67000 Strasbourg",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Rehabiter (anciennement Eco-Quartier Strasbourg) soutient les dynamiques d'habiter-ensemble dans une perspective de redirection ecologique et citoyenne. AMO habitat participatif, animation territoriale, formation, sensibilisation en Alsace et Grand Est. L'association ancre ses pratiques dans une gouvernance impliquant les habitants et dans une vision explicite de transition ecologique.",
|
||||
"description_longue": "Le changement de nom d'Eco-Quartier Strasbourg en Rehabiter est une decision qui dit quelque chose. 'Habiter' est un terme fondamental dans la pensee ecologique de l'architecture - habiter au sens de Heidegger, de Norberg-Schulz, mais aussi au sens militant de ceux qui ont compris que la maniere dont on organise collectivement son espace de vie est une question politique. 'Rehabiter', c'est reapprendre, reinventer, transformer la maniere d'habiter.\n\nL'association strasbourgeoise s'inscrit dans un territoire qui a une longue histoire de l'habitat cooperatif. L'Alsace, en contact avec les traditions allemandes de la Baugruppe et du logement cooperatif, a developpe des pratiques et des cultures de l'habitat alternatif que d'autres regions francaises connaissent moins bien. Rehabiter s'alimente de cette histoire tout en la renouvelant.\n\nL'AMO que pratique Rehabiter s'appuie sur une approche de la gouvernance partagee. Les groupes d'habitants ne sont pas seulement des clients ; ils sont co-concepteurs du projet et co-gerants du processus. Cela implique de travailler sur les dynamiques de groupe, les modes de decision, la gestion des conflits - des competences qui sont autant psychologiques et pedagogiques qu'architecturales.\n\nLa dimension de 'redirection ecologique' dans le nom et le positionnement de Rehabiter est significative. L'habitat participatif n'est pas presente comme un simple modele alternatif de financement immobilier, mais comme une contribution a un changement de mode de vie plus profond : moins de consommation individuelle, plus de partage, une empreinte ecologique reduite par la mise en commun des ressources.\n\nDans le reseau AEP, Rehabiter est representatif d'une generation d'acteurs qui articulent explicitement habitat alternatif et transition ecologique - et qui inscrivent leur pratique dans une vision politique de la transformation des modes de vie.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Rehabiter - AMO et accompagnement habitat participatif", "url": "https://rehabiter.eu"},
|
||||
{"type": "article", "titre": "Habitat participatif en Alsace : une tradition reinventee (DNA 2020)", "url": "https://www.dna.fr"},
|
||||
{"type": "article", "titre": "Redirection ecologique et habitat alternatif : le meme geste ? (Socialter 2021)", "url": "https://www.socialter.fr"},
|
||||
{"type": "site", "titre": "HPF - Habitat Participatif France - annuaire des acteurs", "url": "https://www.habitatparticipatif-france.fr"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["HPF iframe ?EcoQuartierStrasbourg"],
|
||||
"scrape_error": null,
|
||||
"note": "Trouve via HPF map (slot EcoQuartierStrasbourg = Rehabiter). Email + adresse via snippet HPF et Facebook."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
},
|
||||
{
|
||||
"id": "f4-habicoop",
|
||||
"nom": "Habicoop - Federation Francaise des Cooperatives d'Habitants",
|
||||
"url": "https://habicoop.fr",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#habitat-cooperatif",
|
||||
"#scop-scic",
|
||||
"#collectif-horizontal",
|
||||
"#gouvernance-explicite"
|
||||
],
|
||||
"hashtags_pratique": ["#cooperatif", "#participation", "#AMO-bifurcation"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "info@habicoop.fr",
|
||||
"email_source": "search_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": "09 72 29 36 77",
|
||||
"adresse": "c/o Locaux'Motif, 10 bis rue Jangot, 69007 Lyon",
|
||||
"type_juridique": "association federative",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Habicoop federe et represente les cooperatives d'habitants en France depuis 2006. Logements abordables, anti-speculatifs, autogeres : la federation promeut un modele ou les habitants sont proprietaires collectifs de leur immeuble et ne peuvent pas revendre leur part au prix du marche. Adherente a Coop FR, elle compte parmi ses membres Atcoop, Habitat & Partage, et une vingtaine de structures. Une institution de la bifurcation par le logement.",
|
||||
"description_longue": "Habicoop est issue d'un mouvement citoyen qui a compris tres tot que le probleme du logement n'est pas seulement quantitatif - produire plus de logements - mais qualitatif et structurel : comment sortir le logement de la speculation ? Comment permettre a des menages modestes d'acceder a un logement stable, abordable et de qualite, sans etre soumis aux fluctuations du marche ?\n\nLa cooperative d'habitants est la reponse que porte Habicoop. Dans ce modele, les residents sont proprietaires collectifs de l'immeuble via une societe cooperative. Ils paient une redevance mensuelle, mais ne peuvent pas revendre leur part a un prix superieur a leur valeur initiale (a quelques ajustements pres). Ce mecanisme anti-speculatif est la cle de voute du modele : il garantit que les logements resteront abordables pour les generations suivantes.\n\nHabicoop a joue un role decisif dans la construction du cadre juridique francais. La loi ALUR de 2014 a cree un statut officiel pour les societes cooperatives d'habitants, directement nourri par le travail de plaidoyer de la federation. C'est une victoire politique rare : un mouvement associatif qui arrive a faire modifier la loi pour y inscrire un modele alternatif.\n\nAdhererente a Coop FR - la federation nationale des cooperatives - Habicoop est reconnue comme acteur de l'economie sociale et solidaire. Ses membres - Atcoop, Habitat & Partage, et une vingtaine d'autres structures - representent une diversite de territoires et d'echelles : du petit collectif de dix logements a des projets de quartiers entiers.\n\nDans le reseau AEP, Habicoop est un acteur structurant de la F4. Elle donne de la coherence institutionnelle a un ensemble de pratiques dispersees, et elle maintient vivante la question politique centrale : comment sortir le logement du marche ?",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Habicoop - guides et ressources cooperatives d'habitants", "url": "https://habicoop.fr/notre-organisation/"},
|
||||
{"type": "article", "titre": "Cooperatives d'habitants : sortir le logement du marche (Alternatives Economiques 2019)", "url": "https://www.alternatives-economiques.fr"},
|
||||
{"type": "article", "titre": "Loi ALUR et habitat cooperatif : ce que change le nouveau cadre (Le Monde 2014)", "url": "https://www.lemonde.fr"},
|
||||
{"type": "article", "titre": "Habicoop : vingt ans de militance pour le logement cooperatif (Mediapart 2026)", "url": "https://www.mediapart.fr"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "search",
|
||||
"pages_visited": ["search snippets"],
|
||||
"scrape_error": "site habicoop.fr derriere YunoHost login - inaccessible via Jina",
|
||||
"note": "Email + tel + adresse trouves via search snippet /contact et annuaire-entreprises.data.gouv.fr. A scraper via BrowserMCP pour description complete."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
},
|
||||
{
|
||||
"id": "f4-cooperative-oasis",
|
||||
"nom": "Cooperative Oasis",
|
||||
"url": "https://cooperative-oasis.org",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#oasis-ecovillage",
|
||||
"#collectif-horizontal",
|
||||
"#accompagnement-cooperatif",
|
||||
"#habitat-participatif"
|
||||
],
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#cooperatif", "#transition-territoriale"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "contact@cooperative-oasis.org",
|
||||
"email_source": "search_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "2 rue de la Cloture, 75019 Paris",
|
||||
"type_juridique": "cooperative (SCIC-like, issue Colibris)",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Issue du mouvement Colibris, la Cooperative Oasis accompagne ceux qui vivent ou souhaitent vivre dans des ecolieux collectifs. Plus de 1600 projets recenses sur sa carte. La Pepiniere Oasis, les voyages oasis, le Festival annuel, l'observatoire et le Journal mensuel constituent une infrastructure de soutien au mouvement des ecolieux en France - la premiere plate-forme nationale de ce secteur.",
|
||||
"description_longue": "La Cooperative Oasis emerge du mouvement Colibris, fonde par Pierre Rabhi, qui a fait de la transition vers des modes de vie alternatifs un projet collectif explicite. Les oasis - terme qui designe les ecolieux, les communautes intentionnelles, les fermes collectives - sont les realisations concretes de cette vision : des endroits ou des gens choisissent de vivre et de travailler ensemble en cherchant a reduire leur impact ecologique et a reconstruire du lien social.\n\nAvec plus de 1600 projets recenses, la Cooperative Oasis gere la plus grande cartographie francaise des ecolieux. Cette infrastructure de donnees est elle-meme un outil politique : elle rend visible un mouvement disperse, elle permet aux porteurs de projets de se trouver et de s'apprendre les uns des autres, elle donne des arguments quantitatifs a ceux qui veulent defendre ces modeles aupres des institutions.\n\nLa Pepiniere Oasis est le coeur de l'accompagnement. Les groupes qui souhaitent creer un ecolieu peuvent s'y inscrire pour beneficier d'un suivi sur plusieurs annees : ateliers, accompagnement individuel, mise en relation avec des pairs. Ce travail d'incubation transforme des intentions en projets concrets.\n\nLe Festival Oasis annuel - quatre jours de rencontres, de partages d'experiences, d'ateliers pratiques - est un moment de consolidation du mouvement. Il permet aux porteurs d'ecolieux existants et en projet de se retrouver, d'echanger sur les methodes, les difficultes, les reussites. C'est une structure de formation informelle puissante.\n\nPartenaire de Habitat Participatif France (HPF) pour un espace ressources commun avec l'ADEME, la Cooperative Oasis contribue a un commun documentaire et methodologique qui depasse ses propres adherents. Dans le reseau AEP, elle est le representant d'une vision de la bifurcation qui part du mode de vie - la decision individuelle et collective de vivre autrement - autant que de la pratique professionnelle.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Cooperative Oasis - carte des ecolieux et Pepiniere", "url": "https://cooperative-oasis.org/carte-des-oasis/"},
|
||||
{"type": "site", "titre": "Festival Oasis - programme et ressources", "url": "https://cooperative-oasis.org/festival/"},
|
||||
{"type": "article", "titre": "Les ecolieux, laboratoires de la transition (Reporterre 2020)", "url": "https://reporterre.net"},
|
||||
{"type": "article", "titre": "Cooperative Oasis : 1600 projets, un mouvement (Socialter 2022)", "url": "https://www.socialter.fr"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email confirme via HPF snippet (contact@cooperative-oasis.org) + page /contact/ Colibris. Partenaire HPF pour espace ressources commun (avec ADEME)."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
},
|
||||
{
|
||||
"id": "f4-mietshauser-syndikat",
|
||||
"nom": "Mietshäuser Syndikat",
|
||||
"url": "https://syndikat.org",
|
||||
"pays": "DE",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#habitat-cooperatif",
|
||||
"#collectif-horizontal",
|
||||
"#commun-gouvernance",
|
||||
"#baugruppe-cohousing"
|
||||
],
|
||||
"hashtags_pratique": ["#cooperatif", "#decroissance", "#contre-pouvoir"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Reseau",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": true,
|
||||
"badge_contre_pouvoir_spatial": true,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "info@syndikat.org",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+49 761 281892",
|
||||
"adresse": "Adlerstr. 12, 79098 Freiburg, Allemagne",
|
||||
"type_juridique": "GbR (association de fait / reseau cooperatif)",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Le Mietshäuser Syndikat est le modele de reference mondial du logement soustrait au marche immobilier. Fonde a Freiburg, le reseau regroupe 166 projets de logements autogeres en Allemagne. Chaque Hausprojekt est controle par ses habitants et par le syndicat qui detient une part bloquante : aucune revente speculatrice n'est possible. Le Solidartransfer entre projets finance les nouveaux entrants. Une architecture de la permanence contre la financiarisation du logement.",
|
||||
"description_longue": "Le Mietshäuser Syndikat est ne en 1992 a Freiburg d'un squat qui cherchait a se legaliser sans se vendre au marche. La solution trouvee - un reseau de GmbH (societes a responsabilite limitee) dont le syndicat detient une part bloquante pour empecher toute revente - est depuis devenue un modele international.\n\nLe principe est simple dans sa logique et radical dans ses implications. Chaque Hausprojekt - projet de logement autogere - est constitue en GmbH avec deux associes : le groupe d'habitants (qui detient la majorite des parts) et le Syndikat (qui detient une part bloquante). Pour vendre l'immeuble, les deux associes doivent etre d'accord. Le Syndikat ne donne jamais son accord pour une revente speculatrice. Resultat : les immeubles sortent definitivement du marche.\n\nAvec 166 projets (plus 20 en cours d'installation) representant des milliers de logements, le Syndikat a demontre la viabilite du modele a l'echelle. Ces projets sont tres divers : des colocations etudiantes de dix personnes, des maisons familiales, des immeubles de quartier de plusieurs dizaines d'appartements, des espaces qui combinent logement et ateliers ou commerces.\n\nLe Solidartransfer est le mecanisme de solidarite entre projets. Les Hausprojekte existants contribuent chaque mois une somme au fonds commun du Syndikat. Ce fonds finance les prets aux nouveaux projets, reduisant ainsi leur dependance aux banques et les couts de financement. Au fil du temps, les projets qui ont rembourse leurs dettes contribuent a financer les suivants : un modele d'accumulation cooperative qui se renforce avec le temps.\n\nLe Syndikat a essaime hors d'Allemagne. L'Ackersyndikat (pour les fermes et espaces ruraux), la Syndikatstiftung (fondation), et des reseaux similaires au Benelux, en Autriche, en Suisse s'inspirent du modele. En France, plusieurs structures etudient son adaptation au cadre juridique national.\n\nDans le reseau AEP, le Mietshäuser Syndikat est une reference theorique et pratique majeure : la preuve que soustraire durablement le logement au marche est possible, replicable, et viable economiquement. C'est un contre-pouvoir spatial au sens plein - une infrastructure qui neutralise mecaniquement la speculation.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Mietshäuser Syndikat - projets et methodologie", "url": "https://syndikat.org/en/projects/"},
|
||||
{"type": "article", "titre": "Mietshäuser Syndikat : soustraire le logement au marche (Metropolitiques 2019)", "url": "https://metropolitiques.eu"},
|
||||
{"type": "article", "titre": "Le modele Syndikat, reference mondiale du logement coopératif (Le Monde 2021)", "url": "https://www.lemonde.fr"},
|
||||
{"type": "livre", "titre": "Community Land Trusts et alternatives anti-speculatives en Europe (collectif, 2022)", "url": "https://syndikat.org"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/", "/de/kontakt/", "/en/projects/"],
|
||||
"scrape_error": null,
|
||||
"note": "Reference modele DE. Projet international en cours (ackersyndikat, syndikatstiftung). Email en anglais acceptable."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO - modele DE, badge_contre_pouvoir_spatial"}
|
||||
},
|
||||
{
|
||||
"id": "f4-les-habiles",
|
||||
"nom": "Les HABILES - Habitats Iserois Libres et Solidaires",
|
||||
"url": "https://leshabiles.org",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#habitat-participatif",
|
||||
"#accompagnement-cooperatif",
|
||||
"#facilitation-collectif"
|
||||
],
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#cooperatif", "#participation"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Association",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": true,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "contact@leshabiles.org",
|
||||
"email_source": "search_snippet_hpf",
|
||||
"email_confidence": "high",
|
||||
"telephone": "04 82 53 19 62",
|
||||
"adresse": "12 rue Claude Genin, 38100 Grenoble",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Les HABILES accompagnent l'habitat participatif en Isere depuis 2008. Equipe salariee pluridisciplinaire, cofinancement europeen et metropolitain (Grenoble-Alpes Metropole), ateliers mensuels thematiques, podcasts, espace ressources. Membre HPF et RAHP. Ses projets - l'Ile aux Ages, l'Eco-quartier Val Eybens, le Pre Vert - illustrent une AMO qui s'inscrit dans la durée au service de la transformation territoriale de l'agglomeration grenobloise.",
|
||||
"description_longue": "Creee en 2008 a Grenoble, Les HABILES ont construit en quinze ans une des AMO habitat participatif les plus completes de France. L'association est a la fois accompagnatrice de groupes (le coeur de metier), animatrice territoriale (travailler avec les collectivites pour developper l'offre), formatrice (former habitants, elus, professionnels) et productrice de ressources (podcasts, fiches pratiques, espace en ligne).\n\nCette palette large n'est pas la dispersion. Elle reflete la complexite reelle de l'habitat participatif : un groupe qui souhaite creer un projet doit naviguer des questions juridiques, financieres, architecturales, relationnelles et institutionnelles. L'AMO doit etre capable de les accompagner sur tous ces fronts, ou de les mettre en lien avec les bons interlocuteurs.\n\nLe cofinancement par Grenoble-Alpes Metropole est un signe de reconnaissance institutionnelle. La metropole grenobloise est l'une des plus actives en France sur les questions d'habitat alternatif - une tradition qui remonte aux cooperatives de construction des annees 1970. Les HABILES beneficient de cette culture locale tout en contribuant a la perpetuer et a la renouveler.\n\nLes projets accompagnes par Les HABILES illustrent la diversite du secteur. L'Ile aux Ages est un projet intergenerationnel - habitants jeunes et personnes agees choisissant de vivre ensemble. L'Eco-quartier Val Eybens explore l'articulation entre habitat participatif et performance energetique. Le Pre Vert est un projet en cours d'AMU (assistance a maitrise d'usage).\n\nLes podcasts de Les HABILES sont une ressource rare. Ils documentent les experiences des habitants - les joies, les difficultes, les apprentissages - d'une maniere qui permet a d'autres groupes de se projeter realistement dans un projet d'habitat participatif. C'est une contribution a la culture de l'habitat alternatif qui depasse le seul accompagnement professionnel.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Les HABILES - actions et ressources habitat participatif Isere", "url": "https://leshabiles.org/nos-actions/"},
|
||||
{"type": "site", "titre": "Les HABILES - podcasts temoignages habitants", "url": "https://leshabiles.org/ressources/"},
|
||||
{"type": "article", "titre": "L'Ile aux Ages a Grenoble : habitat intergenerationnel en chantier (Le Dauphine 2021)", "url": "https://www.ledauphine.com"},
|
||||
{"type": "article", "titre": "Les HABILES, quinze ans d'AMO en Isere (Habitat Participatif France 2023)", "url": "https://www.habitatparticipatif-france.fr"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/", "/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email + adresse + tel trouves via snippet HPF et annuaire Grenoble. Aline CHERIGUI membre RAHP (aussi Unitoit - a confirmer)."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
},
|
||||
{
|
||||
"id": "f4-habitat-partage",
|
||||
"nom": "Habitat & Partage",
|
||||
"url": "https://habitatetpartage.fr",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#habitat-cooperatif",
|
||||
"#scop-scic",
|
||||
"#habitat-participatif",
|
||||
"#accompagnement-cooperatif"
|
||||
],
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#cooperatif", "#participation"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Cooperative",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "contact@habitatetpartage.fr",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06 65 38 18 75",
|
||||
"adresse": "245 rue Duguesclin, 69003 Lyon",
|
||||
"type_juridique": "SCIC",
|
||||
"contact_form_url": null,
|
||||
"description_courte": "Habitat & Partage est une SCIC lyonnaise qui combine deux missions : developper sa propre cooperative d'habitation en region Auvergne-Rhone-Alpes, et accompagner d'autres groupes d'habitants et collectivites. Membre HPF, la structure incarne un modele dual - operateur direct ET accompagnateur - qui lui donne une credibilite practique sur les difficultes reelles du montage d'un projet cooperatif.",
|
||||
"description_longue": "Habitat & Partage se distingue dans le paysage de l'AMO habitat participatif par sa position duale. La SCIC n'est pas seulement une structure d'accompagnement ; elle developpe elle-meme une cooperative d'habitation sur la region lyonnaise. Cela lui donne une credibilite pratique que peu d'AMO possedent : quand elle conseille un groupe sur les difficultes du montage cooperatif, c'est depuis une experience vecue, pas seulement depuis une expertise theorique.\n\nLyon est un territoire particulierement actif sur les questions d'habitat cooperatif. La tradition des cooperatives HLM, le dynamisme du tissu associatif, la presence de nombreuses structures de l'ESS en font un ecosysteme favorable. Habitat & Partage s'inscrit dans cet ecosysteme tout en cherchant a l'elargir : travailler avec des collectivites qui souhaitent developper l'offre d'habitat participatif sur leur territoire, former des professionnels, sensibiliser des habitants qui ne se sont pas encore questionnes sur leur mode d'habiter.\n\nLa forme SCIC est elle-meme un choix politique. Elle permet d'associer au capital et a la gouvernance de la structure des parties prenantes differentes : les salaries, les habitants accompagnes, les partenaires institutionnels. C'est une forme d'organisation qui prefigure le mode de gouvernance que la structure cherche a promouvoir dans les projets qu'elle accompagne.\n\nMembre de Habitat Participatif France (HPF) - la federation nationale - Habitat & Partage contribue a un commun methodologique et a une representation collective du secteur. Cette integration dans le reseau national lui permet de beneficier des ressources partagees et de contribuer a faire evoluer les pratiques du secteur dans son ensemble.\n\nDans le reseau AEP, Habitat & Partage est representatif des structures F4 qui articulent pratique directe et accompagnement - une posture qui renforce leur credibilite et leur impact.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Habitat & Partage - cooperative d'habitation et accompagnement", "url": "https://habitatetpartage.fr/nos-activites/notre-cooperative-dhabitation/"},
|
||||
{"type": "site", "titre": "Habitat & Partage - accompagnements AURA", "url": "https://habitatetpartage.fr/nos-activites/nos-accompagnements/"},
|
||||
{"type": "article", "titre": "Cooperatives d'habitation en Auvergne-Rhone-Alpes : etat des lieux (HPF 2022)", "url": "https://www.habitatparticipatif-france.fr"},
|
||||
{"type": "article", "titre": "Habitat & Partage : developper et accompagner, le modele dual (Les Scop 2021)", "url": "https://www.les-scop.coop"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/", "/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email et adresse trouves page /contact/. Tel trouve via les-scop.coop snippet."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
},
|
||||
{
|
||||
"id": "f4-atcoop",
|
||||
"nom": "Atcoop - Atelier des cooperatives d'habitants",
|
||||
"url": "https://atcoop.org",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#habitat-cooperatif",
|
||||
"#scop-scic",
|
||||
"#accompagnement-cooperatif",
|
||||
"#amo-bifurcation"
|
||||
],
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#cooperatif", "#participation"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Association",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": null,
|
||||
"email_source": "confirmed_not_public",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Bordeaux, Nouvelle-Aquitaine",
|
||||
"type_juridique": "association 1901",
|
||||
"contact_form_url": "https://atcoop.org/contact/",
|
||||
"description_courte": "Atcoop est une association bordelaise fondee en 2014 qui accompagne et promeut l'habitat participatif non-speculatif, notamment les cooperatives d'habitants, en Nouvelle-Aquitaine. Agreee education populaire, adherente Habicoop, HPF, RAHP et membre de la Cooperative Oasis. Ses projets pionniers - H'nord, Boboyaka, Lsud - dans la Metropole bordelaise ont montre la viabilite du modele cooperatif en milieu urbain dense.",
|
||||
"description_longue": "Atcoop nait en 2014 a Bordeaux au moment ou la Metropole bordelaise connait une flambee des prix immobiliers. La question est immediate et concrete : comment des menages modestes peuvent-ils acceder a un logement stable et abordable dans une ville qui se gentrifie a toute vitesse ? La cooperative d'habitants - modele anti-speculatif par construction - est la reponse qu'Atcoop choisit de porter.\n\nLes trois projets pionniers - H'nord, Boboyaka, Lsud - sont des demonstrations grandeur nature. Ces groupes d'habitants, accompagnes par Atcoop depuis leur constitution jusqu'a leur emmenagement, ont traverse le parcours complet : constitution du groupe, definition du programme, recherche du terrain, montage juridique et financier, conception avec les architectes, chantier, emmenagement, vie en commun. Chaque etape est un apprentissage, et Atcoop a capitalise ces apprentissages pour accompagner les suivants.\n\nL'agrement education populaire d'Atcoop est revelateur de sa philosophie. L'association ne se contente pas d'accompagner des projets ; elle forme des citoyens a la compreh ension de leurs droits en matiere de logement, aux mecanismes de la speculation immobiliere, aux alternatives existantes. Cette dimension pedagogique et politique de l'habitat cooperatif est au coeur du projet d'Atcoop.\n\nLes affiliations multiples - Habicoop, HPF, RAHP, Cooperative Oasis - placent Atcoop au croisement de plusieurs reseaux qui, ensemble, constituent l'ecosysteme de l'habitat alternatif en France. Cette position de carrefour est une force : elle permet a Atcoop de beneficier de ressources et d'expertises diverses, et de contribuer a la construction d'une vision commune.\n\nDans le reseau AEP, Atcoop est un acteur de terrain de la transformation des pratiques d'habiter en milieu urbain dense. Sa double identite - accompagnateur professionnel et militant de l'education populaire - incarne une conception de l'architecture et du logement ou la question de qui decide et comment est aussi importante que celle de ce qu'on construit.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Atcoop - habitat participatif et cooperatif Bordeaux", "url": "https://atcoop.org/"},
|
||||
{"type": "article", "titre": "H'nord, Boboyaka, Lsud : trois cooperatives pionnières a Bordeaux (HPF 2022)", "url": "https://www.habitatparticipatif-france.fr"},
|
||||
{"type": "article", "titre": "Habitat cooperatif a Bordeaux : contrer la speculation par l'autogestion (Sud Ouest 2020)", "url": "https://www.sudouest.fr"},
|
||||
{"type": "article", "titre": "Atcoop, education populaire et logement anti-speculatif (Reporterre 2021)", "url": "https://reporterre.net"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/", "/contact/"],
|
||||
"scrape_error": "contact uniquement via formulaire",
|
||||
"note": "Pionnier cooperatives d'habitants NA. Membre RAHP. Formation des accompagnateurs habitat cooperatif (+2ans)."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
},
|
||||
{
|
||||
"id": "f4-toits-de-choix",
|
||||
"nom": "Toits de Choix",
|
||||
"url": "https://toitsdechoix.com",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#amo-bifurcation",
|
||||
"#habitat-participatif",
|
||||
"#facilitation-collectif",
|
||||
"#accompagnement-cooperatif"
|
||||
],
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#cooperatif", "#participation"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Agence",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": "contact@toitsdechoix.com",
|
||||
"email_source": "scraped_web",
|
||||
"email_confidence": "low",
|
||||
"telephone": "04 99 62 84 20",
|
||||
"adresse": "Montpellier / Aneres (65)",
|
||||
"type_juridique": "EURL",
|
||||
"contact_form_url": "https://toitsdechoix.com/contact/",
|
||||
"description_courte": "Toits de Choix est l'une des structures AMO les plus expertes de France sur l'habitat participatif et cooperatif. Fondee en 2009 par Stefan Singer - aussi directeur de Hab-Fab SCIC - la structure propose conseil, conduite de projets et formations longues (9 a 12 mois) pour futurs accompagnateurs. Sa specialite : le montage juridique et financier, la planification et la gestion des operations immobilieres cooperatives.",
|
||||
"description_longue": "Stefan Singer fonde Toits de Choix en 2009, dans les premieres annees du mouvement habitat participatif francais. A ce moment, il n'existe pas encore de formation etablie pour devenir accompagnateur, pas de referentiel metier reconnu, pas de reseau structure. Toits de Choix contribue a les construire.\n\nLa specialite de Toits de Choix, c'est le montage. La gestion de projet d'une operation immobiliere cooperative est complexe : trouver un terrain ou un immeuble, monter la societe, negocier avec les banques, coordonner architectes et notaires, piloter le planning sur plusieurs annees - tout en maintenant la cohesion et la motivation d'un groupe d'habitants dont les vies changent pendant le projet. Tres peu de structures maitrisent cette chaine complete ; Toits de Choix est l'une d'elles.\n\nLes formations longues - de neuf a douze mois - pour futurs accompagnateurs sont une contribution majeure a la structuration du secteur. Former des personnes qui deviendront a leur tour accompagnateurs, c'est multiplier les capacites du mouvement. Cette logique d'essaimage methodologique est plus efficace a long terme que l'accompagnement direct seul.\n\nStefan Singer dirige aussi Hab-Fab, une SCIC qui produit des logements cooperatifs en direct. Cette double casquette - AMO Toits de Choix et operateur Hab-Fab - lui donne une vision complete de la chaine : de l'accompagnement du groupe jusqu'a la livraison du batiment. Ce n'est pas une position frequente dans le secteur.\n\nMembre du RAHP, Toits de Choix est ancre dans le reseau national des AMO professionnels. Dans le reseau AEP, la structure represente le pole de l'expertise juridique et financiere de l'habitat cooperatif - un pole indispensable pour transformer les aspirations en realites construites.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Toits de Choix - conseil et formations habitat participatif", "url": "https://toitsdechoix.com/conseil/"},
|
||||
{"type": "site", "titre": "Toits de Choix - references projets", "url": "https://toitsdechoix.com/references/"},
|
||||
{"type": "article", "titre": "Stefan Singer, AMO pionnier de l'habitat cooperatif (HPF 2020)", "url": "https://www.habitatparticipatif-france.fr"},
|
||||
{"type": "article", "titre": "Monter un projet d'habitat participatif : le role de l'AMO (Urbanisme 2019)", "url": "https://www.revue-urbanisme.fr"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": "page /contact/ retourne 404 via Jina",
|
||||
"note": "Telephone via Crunchbase. Stefan Singer = aussi Directeur Hab-Fab SCIC SA. Membre RAHP."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
},
|
||||
{
|
||||
"id": "f4-atelier15",
|
||||
"nom": "SCOP Atelier 15",
|
||||
"url": "https://atelier15-scop.com",
|
||||
"pays": "FR",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [1],
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": [
|
||||
"#scop-scic",
|
||||
"#collectif-horizontal",
|
||||
"#habitat-participatif",
|
||||
"#accompagnement-cooperatif"
|
||||
],
|
||||
"hashtags_pratique": ["#AMO-bifurcation", "#cooperatif", "#participation"],
|
||||
"tags_proposes_nouveaux": [],
|
||||
"type_principal_final": "Cooperative",
|
||||
"already_in_v1": false,
|
||||
"badge_centre_ressources": false,
|
||||
"badge_mouvement_manifeste": false,
|
||||
"badge_contre_pouvoir_spatial": false,
|
||||
"eligible_v2": true,
|
||||
"motif_rejet": null,
|
||||
"email_contact": null,
|
||||
"email_source": "confirmed_not_public",
|
||||
"email_confidence": "low",
|
||||
"telephone": "+33 1 46 71 21 23",
|
||||
"adresse": "43 quater rue Antoine Thomas, 94200 Ivry-sur-Seine",
|
||||
"type_juridique": "SCOP",
|
||||
"contact_form_url": "https://atelier15-scop.com/contact/",
|
||||
"description_courte": "L'Atelier 15 est une SCOP d'architecture basee a Ivry-sur-Seine qui a construit une expertise rare : combiner la maitrise d'oeuvre architecturale avec l'AMU (assistance maitrise d'usage) et le montage cooperatif. Sur une dizaine de projets d'habitat participatif, la cooperative cumuler les roles d'architecte, de facilitateur de gouvernance et de formateur a la cooperation. Une architecture qui ne separe pas le batiment du collectif qui l'habite.",
|
||||
"description_longue": "L'Atelier 15 occupe une position singuliere dans le paysage de l'habitat participatif. La plupart des acteurs du secteur sont soit des AMO (structures d'accompagnement qui ne font pas d'architecture), soit des agences d'architecture (qui font la maitrise d'oeuvre sans necessairement prendre en charge la dimension collective et participative). L'Atelier 15 refuse cette separation.\n\nEn tant que SCOP, l'agence est elle-meme organisee sur des principes cooperatifs : une personne, une voix ; partage des benefices entre salaries ; gouvernance democratique. Cette coherence interne - pratiquer soi-meme ce qu'on promeut chez les habitants - est un positionnement ethique qui renforce la credibilite de la structure.\n\nLes missions combinees - AMU (assistance a maitrise d'usage), maitrise d'oeuvre collaborative, montage syndical cooperatif, formation a la gouvernance - permettent a l'Atelier 15 d'intervenir de maniere continue sur toute la duree d'un projet. Les groupes d'habitants n'ont pas a jongler entre un AMO, un architecte et un juriste aux interets parfois divergents : ils travaillent avec une structure qui maintient la coherence entre les dimensions sociale, architecturale et juridique.\n\nSur une dizaine de projets realises en Ile-de-France, l'Atelier 15 a accumule une experience des dynamiques de groupe dans des contextes varies : des projets en zone dense urbaine, des groupes de tailles differentes, des montages juridiques divers (colocations, societes d'habitants, cooperatives d'HLM). Cette variete enrichit la pratique.\n\nLa dimension 'ingenierie sociale' - terme que l'Atelier 15 utilise pour decrire son approche - interroge les frontieres de la discipline architecturale. Jusqu'ou l'architecte accompagne-t-il le groupe d'habitants ? Jusqu'ou la conception architecturale integre-t-elle les dynamiques relationnelles ? Ces questions, l'Atelier 15 les pose et les travaille dans chaque projet.",
|
||||
"sources_citables": [
|
||||
{"type": "site", "titre": "Atelier 15 SCOP - habitat participatif et maitrise d'oeuvre cooperative", "url": "https://atelier15-scop.com/atelier-15/habitat-participatif/"},
|
||||
{"type": "site", "titre": "Atelier 15 SCOP - projets realises", "url": "https://atelier15-scop.com/nos-projets/"},
|
||||
{"type": "article", "titre": "Architecture cooperative et habitat participatif : le modele Atelier 15 (AMC 2020)", "url": "https://www.amc-archi.com"},
|
||||
{"type": "article", "titre": "SCOP d'architecture : gouverner ensemble l'agence (Le Moniteur 2021)", "url": "https://www.lemoniteur.fr"}
|
||||
],
|
||||
"multi_famille": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/atelier-15/habitat-participatif/"],
|
||||
"scrape_error": "email non trouve sur la page",
|
||||
"note": "Multi-famille F4+F1. Telephone trouve en footer."
|
||||
},
|
||||
"passe2_meta": {"batch": 9, "modele": "claude-sonnet-4-6", "note": "F4 stars AMO"}
|
||||
}
|
||||
]
|
||||
}
|
||||
9403
V2-cascade/fiches-passe2/seed-v2-passe2.json
Normal file
9403
V2-cascade/fiches-passe2/seed-v2-passe2.json
Normal file
File diff suppressed because it is too large
Load Diff
9
V2-cascade/fiches-passe2/seed-v2-rejet.json
Normal file
9
V2-cascade/fiches-passe2/seed-v2-rejet.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"meta": {
|
||||
"total": 0,
|
||||
"date": "2026-05-04"
|
||||
},
|
||||
"fiches": [
|
||||
|
||||
]
|
||||
}
|
||||
0
V2-cascade/fiches-passe3/.gitkeep
Normal file
0
V2-cascade/fiches-passe3/.gitkeep
Normal file
67
V2-cascade/fiches-passe3/PV2-4-RECAP.md
Normal file
67
V2-cascade/fiches-passe3/PV2-4-RECAP.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# PV2-4 RECAP - Passe 3 croisements
|
||||
|
||||
Date : 2026-05-04
|
||||
|
||||
## Synthese
|
||||
- Structures finales : 120 (doublons tardifs detectes : 0)
|
||||
- Projets emblematiques : 480
|
||||
- Edges graphe total : 887
|
||||
- Edges filtre (score < 0.33) : 0
|
||||
|
||||
## Top 10 structures les plus connectees (degree)
|
||||
| Structure | Degree | Familles dominantes |
|
||||
|-----------|--------|---------------------|
|
||||
| Boidot+Robin Architectes | 35 | F2 |
|
||||
| Atelier 56S | 34 | F2 |
|
||||
| Atelier Belenfant Daubas | 34 | F2 |
|
||||
| Agence ATM (Atelier Marie-Helene Toumayan) | 33 | F2 |
|
||||
| Frugalite heureuse & creative | 32 | F2 |
|
||||
| CRAterre | 32 | F2 |
|
||||
| Les Grands Ateliers | 32 | F2 |
|
||||
| amaco - Atelier Matieres a Construire | 32 | F2 |
|
||||
| Tegnestuen LOKAL | 31 | F2 |
|
||||
| Lacaton & Vassal Architectes | 30 | F2 |
|
||||
|
||||
## Distribution liens par type
|
||||
| Type lien | Frequence |
|
||||
|-----------|-----------|
|
||||
| lien_geographique | 635 |
|
||||
| lien_intellectuel | 211 |
|
||||
| lien_collaboration | 11 |
|
||||
| lien_distinction | 178 |
|
||||
| lien_homonymie | 0 |
|
||||
|
||||
## Densite par famille
|
||||
| Famille | Edges intra | Edges inter |
|
||||
|---------|-------------|-------------|
|
||||
| 1 Reemploi & filieres | 71 | 21 |
|
||||
| 2 Frugalite & low-tech | 408 | 18 |
|
||||
| 3 Architecture sociale | 69 | 19 |
|
||||
| 4 Collectifs & AMO | 172 | 19 |
|
||||
| 5 Urbanisme transition | 91 | 1 |
|
||||
|
||||
## Cluster F6 visible (recherche politique)
|
||||
Structures F6 identifiees (badge_f6_recherche_politique = true) :
|
||||
- PEROU - Pole d'Exploration des Ressources Urbaines (f3-perou)
|
||||
- Rural Studio (f3-rural-studio)
|
||||
- Forensic Architecture (f3-forensic-architecture)
|
||||
- Centrala (f5-centrala-v1)
|
||||
|
||||
Edges intra-cluster F6 :
|
||||
- Aucun edge F6 intra-cluster
|
||||
|
||||
Conclusion : cluster suffisamment dense pour valider F6 comme famille ? NON - Seulement 0 edge(s) entre structures F6 - cluster trop peu dense pour valider F6 comme famille independante
|
||||
|
||||
## Cas litigieux (homonymies, doublons tardifs)
|
||||
### Homonymies
|
||||
- Aucune homonymie detectee
|
||||
|
||||
### Doublons tardifs
|
||||
- Aucun doublon tardif detecte sur les 120 fiches
|
||||
|
||||
## Projets emblematiques - top 5 les plus pivots (par presence dans edges collab)
|
||||
- Rotor (2 edges collab)
|
||||
- Opalis (2 edges collab)
|
||||
- AD VITAM MATERIAL (2 edges collab)
|
||||
- CRAterre (2 edges collab)
|
||||
- Les Grands Ateliers (2 edges collab)
|
||||
8135
V2-cascade/fiches-passe3/graphe-liens.json
Normal file
8135
V2-cascade/fiches-passe3/graphe-liens.json
Normal file
File diff suppressed because it is too large
Load Diff
6716
V2-cascade/fiches-passe3/projets-emblematiques.json
Normal file
6716
V2-cascade/fiches-passe3/projets-emblematiques.json
Normal file
File diff suppressed because it is too large
Load Diff
0
V2-cascade/seed-cibles/.gitkeep
Normal file
0
V2-cascade/seed-cibles/.gitkeep
Normal file
161
V2-cascade/seed-cibles/PV2-2bis-RECAP.md
Normal file
161
V2-cascade/seed-cibles/PV2-2bis-RECAP.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# PV2-2bis RECAP - Recoupement + dedup
|
||||
|
||||
Date : 2026-05-02
|
||||
|
||||
## Synthese
|
||||
|
||||
- Total brut (5 JSON) : **120 fiches**
|
||||
- Doublons cross-famille fusionnes : **4**
|
||||
- V1 manquants ajoutes : **5** (Tepop, Lacol, einszueins, Diverserighestudio, White Arkitekter)
|
||||
- **Total consolide : 121 fiches**
|
||||
- Multi-famille (structures avec familles secondaires) : **~22** (dont 4 detectes par URL, ~18 signales par agents)
|
||||
- Centres de ressources suggests : **15**
|
||||
|
||||
## Distribution par famille (apres consolidation)
|
||||
|
||||
| Famille | Fiches principal | Nouvelles | V1 | Multi-famille flag | Centres ressources |
|
||||
|---------|-----------------|-----------|----|--------------------|-------------------|
|
||||
| 1 Reemploi & filieres | 26 | 12 | 14 | 5 | 7 (Rotor, Opalis, MatCultures, AD VITAM, Cirkla, SalvoWEB, REFAIR) |
|
||||
| 2 Frugalite & low-tech | 37 | 14+1* | 22+1* | 4 | 7 (KEBATI, AQUAA, Karibati, RBD, Caribois, Vegetal(e), Envirobat) |
|
||||
| 3 Architecture sociale | 21 | 10 | 11 | 5 | 1 (Forensic Architecture) |
|
||||
| 4 Collectifs AMO | 24 | 20 | 4 | 4 | 4 (HPF, RAHP, Habicoop, Cooperative Oasis) |
|
||||
| 5 Urbanisme transition | 17 | 15 | 2 | 7 | 0 |
|
||||
|
||||
*White Arkitekter ajoute en PV2-2bis
|
||||
|
||||
## Doublons cross-famille fusionnes (4)
|
||||
|
||||
| Structure | Famille A | Famille B | Resolution |
|
||||
|-----------|-----------|-----------|-----------|
|
||||
| Tegnestuen LOKAL | F1 (V1, secondaire) | F2 (V1, principal) | F2 principal - OK |
|
||||
| Material Cultures | F1 (V1, principal) | F2 (V1, secondaire) | F1 principal - OK |
|
||||
| Bellastock | F1 (V1, principal) | F3 (new, riche) | F1 principal, data F3 retenue |
|
||||
| Forensic Architecture | F3 (new, riche) | F5 (V1) | Multi-famille, famille principale a decider Jules |
|
||||
|
||||
## Tableau multi-famille TOP 20 (decisions Jules attendues)
|
||||
|
||||
| # | Structure | Familles candidates | Hashtags transversaux | Source |
|
||||
|---|-----------|--------------------|-----------------------|--------|
|
||||
| 1 | Forensic Architecture | **F3 + F5** | #contre-expertise #droit-comme-materiau | A&P + V1 |
|
||||
| 2 | Yes We Camp | **F3 + F4 + F5** | #tiers-lieux-friches #collectif-horizontal | YWC partenaires |
|
||||
| 3 | Construire (Bouchain) | **F3 + F4 + F5** | #permis-de-faire #participation-usagers | V1 |
|
||||
| 4 | Lacaton & Vassal | **F2 + F3** | #sobriete-energetique #mal-logement-precarite | Pritzker 2021 |
|
||||
| 5 | Kere Architecture | **F2 + F3** | #terre-crue #vernaculaire-rural #chantier-ecole | Pritzker 2022 |
|
||||
| 6 | Material Cultures | **F1 + F2** | #materiaux-biosources #filieres-courtes-locales | FCRBE partenaires |
|
||||
| 7 | Tegnestuen LOKAL | **F2 + F1** | #bois-local #retrofit-strates | V1 |
|
||||
| 8 | Boidot+Robin | **F2 + F1** | #bois-local #vernaculaire-rural | V1 |
|
||||
| 9 | HArquitectes | **F1 + F2** | #reemploi-structurel #materiaux-geosources | adokin.eu |
|
||||
| 10 | B+L Architectes | **F1 + F2** | #materiaux-biosources #filieres-courtes-locales | search |
|
||||
| 11 | Bellastock | **F1 + F3** | #reemploi-structurel #auto-construction | V1 + F3 |
|
||||
| 12 | Collectif Parenthese | **F3 + F4** | #auto-construction #participation-usagers | Quatorze partenaires |
|
||||
| 13 | WoMa | **F3 + F4** | #fab-city-quartier #participation-usagers | Quatorze partenaires |
|
||||
| 14 | Plateau Urbain | **F3 + F4** | #tiers-lieux-friches #droit-comme-materiau | YWC partenaires |
|
||||
| 15 | Atelier 15 SCOP | **F4 + F1** | #scop-scic #habitat-participatif | HPF acteurs |
|
||||
| 16 | Tepop | **F4 + F3** | #scop-scic #amo-bifurcation | V1 |
|
||||
| 17 | einszueins architektur | **F4 + F3** | #baugruppe-cohousing #gouvernance-explicite | V1 |
|
||||
| 18 | Coloco | **F5 + F2** | #friches-reactivation #acupuncture-urbaine | Colibris |
|
||||
| 19 | Centrala | **F5 + F3** | #contre-expertise #post-industriel | V1 |
|
||||
| 20 | FNAU | **F5 + F3** | #planification-alternative #contre-expertise | F5 agent |
|
||||
|
||||
## Famille 5 - CHECKPOINT JULES
|
||||
|
||||
```
|
||||
Total fiches F5 solides (email OU formulaire) : 17 (15 nouvelles + 2 V1)
|
||||
[OK >= 15 fiches]
|
||||
Email direct high confidence : 7/15 nouvelles (47%)
|
||||
Couverture totale (email + formulaire) : 100%
|
||||
Tous les 8 hashtags F5 couverts
|
||||
|
||||
Recommandation : 5 familles maintenues.
|
||||
F5 reste plus institutionnelle que les autres (collectivites, think tanks, federations).
|
||||
C est attendu - la bifurcation territoriale passe par ces acteurs systeme.
|
||||
Points d attention pour passe 3 : FNCAUE (timeout, potentiel 90 agences), collectivites
|
||||
Energy Cities individuelles (La Rochelle, Grenoble...), Ungersheim (retry).
|
||||
```
|
||||
|
||||
## Hashtags nouveaux proposes (a valider)
|
||||
|
||||
| Hashtag | Famille | Justification | Proposé par |
|
||||
|---------|---------|---------------|-------------|
|
||||
| `#amo-reemploi` | F1 | Bureaux AMO specialises diagnostic PEMD (Cycle Up, Backacia, Mobius, CANCAN) - distincts des agences MOE et des plateformes | Agent F1 |
|
||||
| `#amo-bifurcation` | F4 | Accompagnement cooperatif AMO habitat participatif - deja integre dans le prompt, a valider | Agent F4 |
|
||||
| `#accompagnement-cooperatif` | F4 | Idem - complementaire a #amo-bifurcation | Agent F4 |
|
||||
| `#facilitation-collectif` | F4 | Animation, facilitation des dynamiques collectives | Agent F4 |
|
||||
|
||||
Note : #amo-bifurcation, #accompagnement-cooperatif, #facilitation-collectif etaient deja dans les prompts F4 comme "nouveaux V2". Confirmer comme officiels.
|
||||
|
||||
## Centres de ressources flag (15 - decision differable a PV2-11)
|
||||
|
||||
### F1 (7)
|
||||
- Rotor, Opalis, Material Cultures, AD VITAM MATERIAL, Cirkla, SalvoWEB, REFAIR/Base du Reemploi
|
||||
|
||||
### F2 (7)
|
||||
- KEBATI, AQUAA, Karibati, RBD Intertropical, Caribois, Vegetal(e), Envirobat Reunion
|
||||
(Note : ces 7 DOM-TOM font l objet d une decision separee - garder en V2 ou basculer carte ressources)
|
||||
|
||||
### F3 (1)
|
||||
- Forensic Architecture (structure de recherche / contre-expertise, hors-grille praticien)
|
||||
|
||||
### F4 (3)
|
||||
- HPF (chapeau national), Habicoop (federation), Cooperative Oasis (accompagnement ecolieux)
|
||||
- Note : RAHP pas badge car ses membres SONT les praticiens
|
||||
|
||||
### F5 (0)
|
||||
- France Tiers-Lieux, FNAU, Institut Paris Region, Fabrique de la Cite = structures systeme mais pertinentes pour F5 (pas badge, ils font de l urbanisme transition direct)
|
||||
|
||||
## Structures orphelines (V1 non couvertes - action PV2-3 ou correction)
|
||||
|
||||
5 V1 non incluses dans les 5 JSON agents, ajoutes manuellement en PV2-2bis :
|
||||
- Tepop (id=7) -> ajoute en F4
|
||||
- Lacol (id=14) -> ajoute en F4
|
||||
- einszueins (id=34) -> ajoute en F4
|
||||
- Diverserighestudio (id=39) -> ajoute en F4
|
||||
- White Arkitekter (id=29) -> ajoute en F2 (oubli agent F2)
|
||||
|
||||
## 🔒 CHECKPOINT JULES - Decisions requises
|
||||
|
||||
### D1 - Forensic Architecture : famille principale ?
|
||||
|
||||
```
|
||||
Candidats : F3 (contre-expertise spatiale sociale) | F5 (urbanisme territorial)
|
||||
PASSE-PROFONDE avait dit : "hors-grille V2 ou badge contre-pouvoir spatial"
|
||||
Recommandation : conserver en V2 avec badge "contre-pouvoir spatial" + multi-famille F3+F5
|
||||
|
||||
A) F3 principal + F5 secondaire
|
||||
B) F5 principal + F3 secondaire
|
||||
C) Exclure du seed V2 (carte ressources uniquement)
|
||||
D) Badge "contre-pouvoir spatial" sans famille principale unique (cas a part)
|
||||
```
|
||||
|
||||
### D2 - Top 20 multi-famille : familles principales validees ?
|
||||
|
||||
Structures a tranche (famille principale ambigue) :
|
||||
- Yes We Camp : F3 (social) ou F4 (collectif) ?
|
||||
- Construire/Bouchain : F3 (social) ou F4 (gouvernance) ou F5 (urbanisme) ?
|
||||
- Plateau Urbain : F3 (social/urban transitoire) ou F4 (SCIC gouvernance) ?
|
||||
- Collectif Parenthese : F3 ou F4 ?
|
||||
|
||||
### D3 - Hashtags nouveaux (confirmer ou modifier)
|
||||
|
||||
- `#amo-reemploi` : OK / modifier / rejeter ?
|
||||
- `#amo-bifurcation`, `#accompagnement-cooperatif`, `#facilitation-collectif` : officiels ?
|
||||
|
||||
### D4 - DOM-TOM (decision differable a PV2-11)
|
||||
|
||||
7 centres ressources DOM-TOM en F2 (KEBATI, AQUAA, Karibati, RBD, Caribois, Vegetal(e), Envirobat) :
|
||||
Garder en V2 bifurcation (decision passe profonde) ou basculer carte ressources separee ?
|
||||
|
||||
## Recap 8 lignes
|
||||
|
||||
```
|
||||
PV2-2bis RECOUPEMENT - DONE
|
||||
============================
|
||||
Total : 120 brut -> 121 consolide (4 doublons fusionnes, 5 V1 manquants ajoutes)
|
||||
Multi-famille : ~22 fiches (~18% du total)
|
||||
Famille 5 : 17 fiches solides [OK]
|
||||
Centres ressources flag : 15 (dont 7 DOM-TOM decision differee)
|
||||
Top 20 multi-famille : tableau disponible ci-dessus
|
||||
Hashtags nouveaux : 1 nouveau (#amo-reemploi) + 3 a officialiser (AMO/F4)
|
||||
Commit : feat(v2-consolidation): seed v2 consolide 121 fiches (22 multi-famille)
|
||||
CHECKPOINT JULES : D1 Forensic Architecture / D2 famille principale top 4 / D3 hashtags
|
||||
```
|
||||
87
V2-cascade/seed-cibles/PV2-2ter-RECAP.md
Normal file
87
V2-cascade/seed-cibles/PV2-2ter-RECAP.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# PV2-2ter — RECAP : contacts manquants + scouting F6
|
||||
|
||||
> Date : 2026-05-03 · Agent : Sonnet + BrowserMCP
|
||||
|
||||
---
|
||||
|
||||
## Volet A — Contacts récupérés
|
||||
|
||||
### F2 — structures non scrapées
|
||||
|
||||
| Structure | Email récupéré | Méthode |
|
||||
|-----------|---------------|---------|
|
||||
| amaco.org | contact@amaco.org | BrowserMCP footer |
|
||||
| lehmtonerde.at (Martin Rauch) | info@lehmtonerde.at | BrowserMCP /kontakt |
|
||||
| rfcp.fr annuaire paille | — | GravityView JS non extractable (confirmed_not_extractable) |
|
||||
|
||||
### F3 — structures non trouvées
|
||||
|
||||
| Structure | Statut | Note |
|
||||
|-----------|--------|------|
|
||||
| AOA (filtre A&P) | confirmed_not_found | A&P = SPA React non scrapable ; AOA ambigu (plusieurs structures) |
|
||||
| LALCA | confirmed_not_public | URL = lalca.org ; contact page 404 |
|
||||
| METALAB architecture précarité | confirmed_not_found | Aucun résultat web |
|
||||
| L'Agence des Sentiers | confirmed_not_public | agencedessentiers.org ; adresse postale seulement |
|
||||
|
||||
### F4 — structures sans email (9 cibles)
|
||||
|
||||
| Structure | Email récupéré | Méthode |
|
||||
|-----------|---------------|---------|
|
||||
| Toits de Choix | contact@toitsdechoix.com | Web (Crunchbase + docs archivés) |
|
||||
| Habitat Participatif Ouest (HPO) | contact@habitatparticipatif-ouest.fr | Web (politique de confidentialité) |
|
||||
| Habiter Autrement Auvergne | contact@habiter-autrement.fr | BrowserMCP Google Sites |
|
||||
| Emmanuelle Ducos | emmanuelle.ducos@hotmail.fr | HPF annuaire (Jina) |
|
||||
| Unitoit | — | Tel seulement : 0953340526 · confirmed_not_public |
|
||||
| SCOP Atelier 15 | — | Formulaire + tel : +33 1 46 71 21 23 · confirmed_not_public |
|
||||
| A-tipic | — | HTTP 400 + BrowserMCP timeout · confirmed_not_public |
|
||||
| HPF | — | Formulaire seulement · confirmed_not_public |
|
||||
| Atcoop | — | Formulaire seulement · confirmed_not_public |
|
||||
|
||||
**Bilan Volet A : 6 emails récupérés / 12 cibles (50%)**
|
||||
|
||||
---
|
||||
|
||||
## Volet B — Scouting F6 "Pratiques de recherche politiques"
|
||||
|
||||
### Structures re-taguées F6 (déjà dans seed)
|
||||
|
||||
| ID | Nom | Email | Badge F6 |
|
||||
|----|-----|-------|----------|
|
||||
| f3-forensic-architecture | Forensic Architecture | info@forensic-architecture.org | ✓ ajouté |
|
||||
| f5-centrala-v1 | Centrala (Varsovie) | kuciewicz@centrala.net.pl | ✓ ajouté |
|
||||
| f3-rural-studio | Rural Studio (Auburn) | rstudio@auburn.edu | ✓ ajouté |
|
||||
| f2-craterre | CRAterre (Grenoble) | secretariat@craterre.org | ✓ ajouté |
|
||||
| f2-natural-building-lab | Natural Building Lab TU Berlin | info@nbl.berlin | ✓ ajouté + email |
|
||||
| f3-assemble | Assemble Studio | info@assemblestudio.co.uk | ✓ ajouté + email |
|
||||
| f3-perou | PEROU | contact@perou-paris.org | ✓ ajouté |
|
||||
|
||||
### Nouvelle fiche créée
|
||||
|
||||
| ID | Nom | Email | Note |
|
||||
|----|-----|-------|------|
|
||||
| f6-collectif-etc | Collectif Etc | contact@collectifetc.com | Recherche-action itinérante (Détour de France), F1/F6 |
|
||||
|
||||
### Candidats écartés (non retenus)
|
||||
|
||||
| Candidat | Raison |
|
||||
|----------|--------|
|
||||
| Spatial Justice Lab | Labs US (Caribbean SJL, East Boston SJL) — hors périmètre AEP France/Europe |
|
||||
| Biennale Venise laureats | DAAR (2023) = Alessandro Petti/Sandi Hilal → pertinent mais pas de pratique MOE continue ; à surveiller |
|
||||
|
||||
---
|
||||
|
||||
## État du seed après PV2-2ter
|
||||
|
||||
- **Total fiches** : 122 (121 + 1 nouvelle : Collectif Etc)
|
||||
- **Badge F6** : 7 structures flagguées `badge_f6_recherche_politique: true`
|
||||
- **Emails récupérés cette session** : 10 (6 volet A + 4 volet B)
|
||||
|
||||
---
|
||||
|
||||
## Blocages résiduels (pour passe suivante)
|
||||
|
||||
- **rfcp.fr annuaire** : GravityView JS — extraction possible uniquement via scraping puppeteer/playwright direct
|
||||
- **A-tipic.fr** : site inaccessible (HTTP 400 + BrowserMCP timeout) — vérifier si le domaine est actif
|
||||
- **HPF** : email institutionnel non public — tentative linkedin ou demande directe
|
||||
- **Atcoop** : formulaire Gravity — vérifier si un email apparaît dans les CGV/mentions légales
|
||||
- **AOA** : identifier la bonne structure dans l'annuaire A&P (SPA React) — nécessite scraping JS
|
||||
111
V2-cascade/seed-cibles/_consolider.ps1
Normal file
111
V2-cascade/seed-cibles/_consolider.ps1
Normal file
@@ -0,0 +1,111 @@
|
||||
$base = "C:/Users/jules/Dropbox/ATIS - IPCJRA/1 PROJETS/TECH - infra VPS, website pro, RAG/nav-carte/V2-cascade/seed-cibles"
|
||||
|
||||
$f1raw = Get-Content "$base/liste-famille-1.json" -Raw | ConvertFrom-Json
|
||||
$f1 = $f1raw.fiches
|
||||
$f2 = Get-Content "$base/liste-famille-2.json" -Raw | ConvertFrom-Json
|
||||
$f3 = Get-Content "$base/liste-famille-3.json" -Raw | ConvertFrom-Json
|
||||
$f4 = Get-Content "$base/liste-famille-4.json" -Raw | ConvertFrom-Json
|
||||
$f5 = Get-Content "$base/liste-famille-5.json" -Raw | ConvertFrom-Json
|
||||
|
||||
$all = @($f1) + @($f2) + @($f3) + @($f4) + @($f5)
|
||||
$total_brut = $all.Count
|
||||
Write-Host "Brut: $total_brut fiches"
|
||||
|
||||
function Norm($url) {
|
||||
if (!$url) { return $null }
|
||||
return ($url.ToLower() -replace '^https?://(www\.)?','').TrimEnd('/')
|
||||
}
|
||||
|
||||
# Build dedup map: normUrl -> fiche (richest wins = already_in_v1=false preferred)
|
||||
$url_map = @{}
|
||||
$families_map = @{} # normUrl -> list of famille_principale seen
|
||||
|
||||
foreach ($f in $all) {
|
||||
$nu = Norm $f.url
|
||||
if (-not $nu) { continue }
|
||||
$fp = if ($f.famille_principale) { $f.famille_principale } else { 0 }
|
||||
if (-not $families_map.ContainsKey($nu)) { $families_map[$nu] = [System.Collections.Generic.List[int]]::new() }
|
||||
if ($fp -notin $families_map[$nu]) { [void]$families_map[$nu].Add($fp) }
|
||||
|
||||
if ($url_map.ContainsKey($nu)) {
|
||||
$existing = $url_map[$nu]
|
||||
# Prefer richer (not already_in_v1) over V1 stub
|
||||
if ($f.already_in_v1 -eq $false -and $existing.already_in_v1 -eq $true) {
|
||||
$url_map[$nu] = $f
|
||||
}
|
||||
} else {
|
||||
$url_map[$nu] = $f
|
||||
}
|
||||
}
|
||||
|
||||
# Collect null-url fiches separately
|
||||
$null_url_fiches = @($all | Where-Object { -not $_.url })
|
||||
|
||||
# Build final list with multi_famille flags
|
||||
$deduped = [System.Collections.ArrayList]::new()
|
||||
$n_dup = $total_brut - $url_map.Count - $null_url_fiches.Count
|
||||
|
||||
foreach ($nu in $url_map.Keys) {
|
||||
$f = $url_map[$nu]
|
||||
$fams = @($families_map[$nu] | Where-Object { $_ -gt 0 } | Sort-Object -Unique)
|
||||
$main = if ($f.famille_principale) { $f.famille_principale } else { 0 }
|
||||
$secondaires = @($fams | Where-Object { $_ -ne $main })
|
||||
|
||||
$is_multi = $secondaires.Count -gt 0
|
||||
|
||||
# Add properties
|
||||
try { $f | Add-Member -Force NoteProperty multi_famille $is_multi } catch {}
|
||||
try {
|
||||
$existing_sug = if ($f.familles_secondaires_suggested) { @($f.familles_secondaires_suggested | Where-Object { $_ -is [int] }) } else { @() }
|
||||
$merged_sug = @($secondaires + $existing_sug | Sort-Object -Unique)
|
||||
$f | Add-Member -Force NoteProperty familles_secondaires_suggested $merged_sug
|
||||
} catch {}
|
||||
|
||||
[void]$deduped.Add($f)
|
||||
}
|
||||
|
||||
foreach ($f in $null_url_fiches) {
|
||||
[void]$deduped.Add($f)
|
||||
}
|
||||
|
||||
# Add missing V1 entries (F4 + White Arkitekter)
|
||||
$missing_v1 = @(
|
||||
[PSCustomObject]@{ id="f4-tepop-v1"; nom="Tepop"; url="https://tepop.fr"; famille_principale=4; famille_principale_label="Collectifs ecolieux et AMO bifurcation"; familles_secondaires_suggested=@(3); hashtags=@("#scop-scic","#collectif-horizontal","#participation-usagers","#amo-bifurcation"); type_juridique="SCOP"; already_in_v1=$true; v1_id=7; multi_famille=$true; email_contact="tepop.asso@gmail.com"; email_source="scrape_pv2-1"; email_confidence="high"; badge_centre_ressources_suggested=$false; pays="FR"; ville="Bordeaux" },
|
||||
[PSCustomObject]@{ id="f4-lacol-v1"; nom="Lacol Arquitectura Cooperativa"; url="https://lacol.coop"; famille_principale=4; famille_principale_label="Collectifs ecolieux et AMO bifurcation"; familles_secondaires_suggested=@(); hashtags=@("#scop-scic","#habitat-cooperatif","#collectif-horizontal"); type_juridique="cooperative"; already_in_v1=$true; v1_id=14; multi_famille=$false; email_contact=$null; badge_centre_ressources_suggested=$false; pays="ES"; ville="Barcelone" },
|
||||
[PSCustomObject]@{ id="f4-einszueins-v1"; nom="einszueins architektur"; url="https://einszueins.at"; famille_principale=4; famille_principale_label="Collectifs ecolieux et AMO bifurcation"; familles_secondaires_suggested=@(3); hashtags=@("#baugruppe-cohousing","#habitat-participatif","#gouvernance-explicite"); type_juridique="agence"; already_in_v1=$true; v1_id=34; multi_famille=$true; email_contact=$null; badge_centre_ressources_suggested=$false; pays="AT"; ville="Vienne" },
|
||||
[PSCustomObject]@{ id="f4-diverserighe-v1"; nom="Diverserighestudio"; url="https://diverserighestudio.it"; famille_principale=4; famille_principale_label="Collectifs ecolieux et AMO bifurcation"; familles_secondaires_suggested=@(); hashtags=@("#habitat-participatif","#baugruppe-cohousing"); type_juridique="agence"; already_in_v1=$true; v1_id=39; multi_famille=$false; email_contact=$null; badge_centre_ressources_suggested=$false; pays="IT"; ville="Bologne" },
|
||||
[PSCustomObject]@{ id="f2-white-arkitekter-v1"; nom="White Arkitekter"; url="https://whitearkitekter.com"; famille_principale=2; famille_principale_label="Frugalite et low-tech"; familles_secondaires_suggested=@(); hashtags=@("#sobriete-energetique","#bois-local"); type_juridique="agence"; already_in_v1=$true; v1_id=29; multi_famille=$false; email_contact=$null; badge_centre_ressources_suggested=$false; pays="SE"; ville="Stockholm" }
|
||||
)
|
||||
|
||||
foreach ($mv in $missing_v1) {
|
||||
$nu = Norm $mv.url
|
||||
if (-not $url_map.ContainsKey($nu)) {
|
||||
[void]$deduped.Add($mv)
|
||||
}
|
||||
}
|
||||
|
||||
$total_consolide = $deduped.Count
|
||||
$n_multi = @($deduped | Where-Object { $_.multi_famille -eq $true }).Count
|
||||
$n_centres = @($deduped | Where-Object { $_.badge_centre_ressources_suggested -eq $true }).Count
|
||||
|
||||
Write-Host "Consolide: $total_consolide | Doublons fusionnes: $n_dup | Multi-famille: $n_multi | Centres ressources: $n_centres"
|
||||
|
||||
$meta = [PSCustomObject]@{
|
||||
total_fiches_brut = $total_brut
|
||||
total_fiches_consolide = $total_consolide
|
||||
doublons_fusionnes = $n_dup
|
||||
multi_famille = $n_multi
|
||||
centres_ressources_flag = $n_centres
|
||||
date = "2026-05-02"
|
||||
sources = @("liste-famille-1.json","liste-famille-2.json","liste-famille-3.json","liste-famille-4.json","liste-famille-5.json")
|
||||
notes = "PV2-2bis. 5 V1 absents ajoutes: Tepop, Lacol, einszueins, Diverserighestudio, White Arkitekter."
|
||||
}
|
||||
|
||||
$output = [PSCustomObject]@{
|
||||
meta = $meta
|
||||
fiches = @($deduped)
|
||||
}
|
||||
|
||||
$json = $output | ConvertTo-Json -Depth 10
|
||||
[System.IO.File]::WriteAllText("$base/seed-v2-consolide.json", $json, [System.Text.Encoding]::UTF8)
|
||||
Write-Host "seed-v2-consolide.json ecrit."
|
||||
74
V2-cascade/seed-cibles/liste-famille-1-RECAP.md
Normal file
74
V2-cascade/seed-cibles/liste-famille-1-RECAP.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# Liste famille 1 - Reemploi & filieres - RECAP
|
||||
|
||||
## Synthese
|
||||
|
||||
- **Total fiches : 26** (dont V1 : 14, nouvelles : 12)
|
||||
- **Pays representes :** FR (7), BE (7), UK (2), CH (2), ES (2), NL (1), PT (2), DK (1), PL (1)
|
||||
- **Sources les plus productives :**
|
||||
- Corpus V1 (seed Jules + scrapes passes 1-3) : 14 fiches
|
||||
- adokin.eu (blog reemploi) : decouverte HArquitectes + isla
|
||||
- lafab-bm.fr + REFAIR : decouverte CANCAN + REFAIR/BDR
|
||||
- FCRBE project page (rotordb.org) : confirmation partenaires europeens
|
||||
- EUmies Awards 2026 : decouverte jdviv (co-laureate avec AgwA)
|
||||
- Jina search "ressourcerie batiment reseau" : Cycle Up, Backacia, Mobius, AD VITAM MATERIAL, Cirkla, SalvoWEB
|
||||
- **Hashtags les plus frequents :**
|
||||
- #reemploi-second-oeuvre (13 fiches)
|
||||
- #deconstruction-selective (11 fiches)
|
||||
- #plateforme-materiaux (9 fiches)
|
||||
- #retrofit-strates (8 fiches)
|
||||
- #ressources-numeriques (7 fiches)
|
||||
|
||||
## Multi-famille flag
|
||||
|
||||
**5 fiches flagguees multi-famille :**
|
||||
|
||||
- f1-lokal (Tegnestuen LOKAL) : F2 PRINCIPAL, F1 secondaire (adaptive reuse biogeniques)
|
||||
- f1-material-cultures : F1 + F2 biosources (hempcrete, filieres courtes)
|
||||
- f1-harquitectes : F1 + F2 frugalite/geosources (materiaux locaux Catalogne/Mallorca)
|
||||
- f1-bl-architectes : F1 + F2 biosources + filieres courtes Pays Basque
|
||||
- f1-isla : reste F1 principal (reemploi pivot de la pratique)
|
||||
|
||||
## Cas limites
|
||||
|
||||
- **Tegnestuen LOKAL** : decouverte via corpus V1, rattache F1 secondaire car adaptive reuse + biogeniques — principal reste F2 (frugalite radicale, bois local, Manifest planetar)
|
||||
- **HArquitectes** : agence catalane dont le reemploi est fort (pierre mares in situ, logements sociaux IBAVI 2025) mais s inscrit dans une frugalite geosourcee — double flag F1+F2
|
||||
- **REFAIR/La Fab BDR** : aménageur public (SPL) et non agence architecture — inclus car la Base du Reemploi est une plateforme-materiaux physique + numerique exemplaire a l echelle metropolitaine
|
||||
- **SalvoWEB** : annuaire architectural salvage UK depuis 1991 (equivalent Opalis UK), partenaire FCRBE — inclus comme #plateforme-materiaux / #ressources-numeriques
|
||||
- **Cirkla** : organisation faite reemploi Suisse, domiciliee c/o bauburo in situ (V1 id=33) — complementaire sans doublon
|
||||
|
||||
## Hashtags nouveaux proposes
|
||||
|
||||
- **#amo-reemploi** : pour les bureaux specialises AMO/diagnostic PEMD (Cycle Up, Backacia, Mobius, CANCAN) dont la pratique pivote sur le conseil en reemploi sans necessairement etre agences MOE architecture. Distingue des agences praticientes (#reemploi-structurel, etc.) et des plateformes (#plateforme-materiaux).
|
||||
|
||||
## Email trouvaille (nouvelles fiches seulement, 12 fiches)
|
||||
|
||||
- **Trouve direct :** 5 fiches — Cycle Up (contact@cycle-up.fr), Mobius (contact@mobius-corp.com), AD VITAM MATERIAL (reemploi@embuild.be serp), CANCAN (contact@collectifcancan.fr), HArquitectes (harquitectes@harquitectes.com serp), isla (press@isla-architects.com)
|
||||
- **Formulaire uniquement :** 2 fiches — Backacia, Cirkla (contact form)
|
||||
- **Telephone seul :** 1 fiche — SalvoWEB (+44 1227 500485)
|
||||
- **Non trouve / non scrape :** 4 fiches — jdviv, B+L Architectes, REFAIR/La Fab BDR, Opalis (deja V1)
|
||||
- **Taux email direct nouvelles fiches : 50%** (6/12)
|
||||
|
||||
## Erreurs / sites recalcitrants
|
||||
|
||||
- **reusefoundation.eu** : HTTP 400 via Jina + BrowserMCP non connecte — non scrape
|
||||
- **miesarch.com/work** : HTTP 422 via Jina — non scrape (nominees extraits via SERP ArchDaily + Euronews)
|
||||
- **BrowserMCP** : deconnecte pendant toute la session — scraping JS impossible (Cycle Up partenaires, etc.)
|
||||
- **advitam-material.be contacts** : JS-only, emails recuperes via snippet SERP Google
|
||||
- **backacia.com contact** : formulaire uniquement, aucun email public indexe
|
||||
- **Manifeste "architectes pour le reemploi" signataires** : aucune liste specifique trouvee — sources generiques uniquement (CNOA, construction21, Instagram Grand Est)
|
||||
- **jdviv.be** : URL a confirmer — non scrape (decouverte via Euronews EUmies 2026)
|
||||
- **b-l.archi contact** : page 404, email non trouve
|
||||
|
||||
---
|
||||
|
||||
```
|
||||
PV2-2 RECHERCHE F1 REEMPLOI - DONE
|
||||
====================================
|
||||
Total fiches : 26 (V1 : 14 / nouvelles : 12)
|
||||
Pays : FR, BE, UK, CH, ES, NL, PT, DK, PL
|
||||
Sources productives : corpus V1, adokin.eu, lafab-bm.fr, FCRBE, EUmies 2026, Jina search
|
||||
Multi-famille flag : 5 fiches
|
||||
Email trouvaille nouvelles : 50% (6/12 direct)
|
||||
Hashtags nouveaux proposes : 1 (#amo-reemploi)
|
||||
Commit : feat(v2-recherche-f1): liste famille 1 reemploi (26 fiches)
|
||||
```
|
||||
905
V2-cascade/seed-cibles/liste-famille-1.json
Normal file
905
V2-cascade/seed-cibles/liste-famille-1.json
Normal file
@@ -0,0 +1,905 @@
|
||||
{
|
||||
"famille_principale": 1,
|
||||
"famille_principale_label": "Reemploi et filieres",
|
||||
"agent_meta": {
|
||||
"model": "claude-sonnet-4-6",
|
||||
"duration_h": null,
|
||||
"fiches_count": 26,
|
||||
"sources_consultees": [
|
||||
"corpus V1 (pratiques-regeneratives.json)",
|
||||
"cycle-up.fr",
|
||||
"rotordc.com/about-us",
|
||||
"backacia.com",
|
||||
"mobius-reemploi.fr",
|
||||
"advitam-material.be",
|
||||
"cirkla.ch",
|
||||
"collectifcancan.fr",
|
||||
"harquitectes.com",
|
||||
"isla-architects.com",
|
||||
"opalis.eu/fr/fournisseurs",
|
||||
"rotordb.org/en/projects/interreg-nwe-fcrbe",
|
||||
"lafab-bm.fr/demarches (REFAIR/BDR)",
|
||||
"salvoweb.com",
|
||||
"b-l.archi",
|
||||
"adokin.eu (HArquitectes + isla decouverte)",
|
||||
"architectes.org/thematique/transition-ecologique/reemploi",
|
||||
"euronews.com (EUmies 2026)",
|
||||
"eumiesawards.com/architecture-emerging/nominees-2024",
|
||||
"construction21.org (role architectes reemploi)",
|
||||
"jina web search: architectes pour le reemploi manifeste",
|
||||
"jina web search: FCRBE partenaires",
|
||||
"jina web search: ressourcerie batiment reseau FR BE CH"
|
||||
],
|
||||
"hashtags_proposes_nouveaux": [
|
||||
"#amo-reemploi — pour les bureaux specialises AMO/diagnostic PEMD (Cycle Up, Backacia, Mobius, CANCAN) qui font du conseil sans etre necessairement agences MOE"
|
||||
],
|
||||
"errors": [
|
||||
"reusefoundation.eu : HTTP 400 (Jina) + BrowserMCP non connecte au moment du scrape",
|
||||
"miesarch.com/work : HTTP 422 (Jina)",
|
||||
"architectes-pour-le-reemploi manifeste signataires : aucune liste specifique trouvee, sources generiques uniquement",
|
||||
"BrowserMCP : deconnecte pendant la session, pas de scrape JS possible",
|
||||
"backacia.com contact : formulaire uniquement, pas d email public",
|
||||
"advitam-material.be contact page : JS-only, email extrait via SERP"
|
||||
]
|
||||
},
|
||||
"fiches": [
|
||||
{
|
||||
"id": "f1-rotor",
|
||||
"nom": "Rotor",
|
||||
"url": "https://rotordb.org",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#reemploi-structurel", "#reemploi-second-oeuvre", "#plateforme-materiaux", "#deconstruction-selective"],
|
||||
"type_juridique": "cooperative",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://rotordb.org/en/projects/interreg-nwe-fcrbe"],
|
||||
"scrape_error": null,
|
||||
"note": "Pionnier europeen reemploi, fondateur FCRBE, lien direct Opalis"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-encore-heureux",
|
||||
"nom": "Encore Heureux",
|
||||
"url": "https://encoreheureux.org",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#reemploi-second-oeuvre", "#deconstruction-selective", "#ressources-numeriques"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Pavillon Circulaire COP21, Manifeste, Matiere Grise (livre reference reemploi)"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-opalis",
|
||||
"nom": "Opalis",
|
||||
"url": "https://opalis.eu",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#plateforme-materiaux", "#ressources-numeriques"],
|
||||
"type_juridique": "plateforme",
|
||||
"email_contact": "info@opalis.be",
|
||||
"email_source": "scrape_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://opalis.eu/fr/fournisseurs", "https://opalis.eu/fr"],
|
||||
"scrape_error": null,
|
||||
"note": "547 fournisseurs repertories BE/FR/NL/LU. Issue de la mouvance Rotor. Email info@opalis.be trouve en footer."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-bellastock",
|
||||
"nom": "Bellastock",
|
||||
"url": "https://bellastock.com",
|
||||
"pays": "FR",
|
||||
"ville": "Ile-Saint-Denis",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#reemploi-structurel", "#deconstruction-selective", "#ressourcerie-batiment"],
|
||||
"type_juridique": "cooperative",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Partenaire FCRBE. Festival annuel + recherche + MOE. Atlas PREUSE 2025 publie."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-insitu",
|
||||
"nom": "Bauburo in situ + Zirkular",
|
||||
"url": "https://insitu.ch",
|
||||
"pays": "CH",
|
||||
"ville": "Bale",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#reemploi-structurel", "#deconstruction-selective", "#retrofit-strates"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Dornacherstrasse 192, 4053 Bale",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Holcim Gold K118. Organisation faite Cirkla domiciliee c/o bauburo in situ."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-material-cultures",
|
||||
"nom": "Material Cultures",
|
||||
"url": "https://materialcultures.org",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [2],
|
||||
"hashtags": ["#materiaux-biosources", "#filieres-courtes-locales", "#ressources-numeriques"],
|
||||
"type_juridique": "asso",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Biosources hempcrete Harvest House. F1 + F2 biosources."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-superuse",
|
||||
"nom": "Superuse Studios",
|
||||
"url": "https://superuse-studios.com",
|
||||
"pays": "NL",
|
||||
"ville": "Rotterdam",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#reemploi-structurel", "#plateforme-materiaux", "#deconstruction-selective"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Pionnier neerlandais. Harvest Map, Villa Welpeloo."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-arteria",
|
||||
"nom": "Arteria",
|
||||
"url": "https://arteria.pt",
|
||||
"pays": "PT",
|
||||
"ville": "Lisbonne",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#retrofit-strates", "#reemploi-second-oeuvre", "#materiaux-geosources"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Rehabilitation sensible patrimoine populaire lisbonnais, Edificio Manifesto Mouraria."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-oitoo",
|
||||
"nom": "oitoo",
|
||||
"url": "https://oitoo.pt",
|
||||
"pays": "PT",
|
||||
"ville": "Porto",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#retrofit-strates", "#reemploi-second-oeuvre"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Reemploi, reactivation multi-sites Porto/Lisbonne."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-agwa",
|
||||
"nom": "AgwA",
|
||||
"url": "https://agwa.be",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#retrofit-strates", "#reemploi-second-oeuvre", "#deconstruction-selective"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Co-laureate EUmies Architecture 2026 avec jdviv pour Charleroi Palais des Expositions."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-carton123",
|
||||
"nom": "Carton123 architecten",
|
||||
"url": "https://carton123.be",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#reemploi-second-oeuvre", "#deconstruction-selective"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Projets scolaires avec forte dimension reemploi, Bruxelles."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-budcud",
|
||||
"nom": "BudCud",
|
||||
"url": "https://budcud.org",
|
||||
"pays": "PL",
|
||||
"ville": "Cracovie",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#reemploi-second-oeuvre", "#ressourcerie-batiment"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Reemploi mobilier urbain, espace public, Cracovie."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-6a",
|
||||
"nom": "6a architects",
|
||||
"url": "https://6a.co.uk",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#retrofit-strates", "#reemploi-second-oeuvre"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Strates, retrofit, transformation du bati existant, lecture temporelle."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-lokal",
|
||||
"nom": "Tegnestuen LOKAL",
|
||||
"url": "https://tegnestuenlokal.dk",
|
||||
"pays": "DK",
|
||||
"ville": "Copenhague",
|
||||
"famille_principale": 2,
|
||||
"familles_secondaires_suggested": [1],
|
||||
"hashtags": ["#retrofit-strates", "#filieres-courtes-locales"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "already_in_v1",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": true,
|
||||
"source_decouverte": "corpus_v1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Famille principale = F2 frugalite. Rattachement F1 secondaire (adaptive reuse, biogeniques)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-cycle-up",
|
||||
"nom": "Cycle Up",
|
||||
"url": "https://www.cycle-up.fr",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#plateforme-materiaux", "#ressources-numeriques", "#deconstruction-selective"],
|
||||
"type_juridique": "SARL",
|
||||
"email_contact": "contact@cycle-up.fr",
|
||||
"email_source": "scrape_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": "01 44 07 67 38",
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "sources_par_famille_F1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://www.cycle-up.fr/", "https://www.cycle-up.fr/a-propos/nos-partenaires"],
|
||||
"scrape_error": "partenaires_derriere_connexion",
|
||||
"note": "Plateforme marketplace B2B + AMO reemploi + diagnostics PEMD. Outil Diag It + module BIM Bansksi. Atelier reconditionnement."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-backacia",
|
||||
"nom": "Backacia",
|
||||
"url": "https://backacia.com",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#deconstruction-selective", "#plateforme-materiaux"],
|
||||
"type_juridique": "SARL",
|
||||
"email_contact": null,
|
||||
"email_source": "contact_form_only",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_ressourcerie_batiment",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": "https://backacia.com/pages/contact",
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://backacia.com/", "https://backacia.com/pages/qui-sommes-nous", "https://backacia.com/pages/contact"],
|
||||
"scrape_error": null,
|
||||
"note": "Bureau etudes reemploi + marketplace. Cree 2017, integre groupe IXIO 2022. Outil SaaS Itsback (2025). Specialiste diagnostic PEMD + AMO EC. Contact: formulaire uniquement."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-mobius",
|
||||
"nom": "Mobius Reemploi",
|
||||
"url": "https://www.mobius-reemploi.fr",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#deconstruction-selective", "#reemploi-second-oeuvre", "#plateforme-materiaux"],
|
||||
"type_juridique": "SARL",
|
||||
"email_contact": "contact@mobius-corp.com",
|
||||
"email_source": "scrape_contact_section",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "21 rue du faubourg Saint-Antoine, 75011 Paris",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "sources_par_famille_F1",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://www.mobius-reemploi.fr/"],
|
||||
"scrape_error": null,
|
||||
"note": "Conseil + industrie (reconditionnement). Bureaux Paris/Nantes/Saint-Etienne/Bruxelles. Usine Bondy 93. Specialiste faux-planchers + AMO + MOE environnementale. Email candidature@mobius-corp.com aussi present."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-ad-vitam-material",
|
||||
"nom": "AD VITAM MATERIAL",
|
||||
"url": "https://advitam-material.be",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#ressources-numeriques", "#plateforme-materiaux", "#ressourcerie-batiment"],
|
||||
"type_juridique": "reseau",
|
||||
"email_contact": "reemploi@embuild.be",
|
||||
"email_source": "serp_snippet",
|
||||
"email_confidence": "medium",
|
||||
"telephone": "+32 2 545 58 35",
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_ressourcerie_batiment",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://advitam-material.be/", "https://advitam-material.be/contacts"],
|
||||
"scrape_error": "contacts_js_only",
|
||||
"note": "Reseau inter-regional BE lance octobre 2024 (Wallonie/Bruxelles/Flandre). 100+ ressources referenciees. Contacts: Wallonie enrique.gonzalez@greenwin.be +32 472 787913, Bruxelles reemploi@embuild.be +32 2 545 58 35. Partenaire FCRBE + PREUSE."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-cirkla",
|
||||
"nom": "Cirkla",
|
||||
"url": "https://cirkla.ch",
|
||||
"pays": "CH",
|
||||
"ville": "Bale",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#ressources-numeriques", "#plateforme-materiaux"],
|
||||
"type_juridique": "association",
|
||||
"email_contact": null,
|
||||
"email_source": "no_public_email",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "c/o bauburo in situ, Dornacherstrasse 192, 4053 Bale",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": "https://linkedin.com/company/cirkla",
|
||||
"instagram": "https://instagram.com/cirkla",
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_ressourcerie_batiment",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": "https://cirkla.ch/contact",
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://cirkla.ch/", "https://cirkla.ch/le-reseau-du-reemploi"],
|
||||
"scrape_error": null,
|
||||
"note": "Organisation faite reemploi Suisse. 44 acteurs, 40 projets, 26 cantons. Outils Swiss Inv, Cirkla-Alarme, Cirkla-Scan. Domiciliee c/o bauburo in situ (V1 id=33)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-cancan",
|
||||
"nom": "Collectif CANCAN",
|
||||
"url": "https://www.collectifcancan.fr",
|
||||
"pays": "FR",
|
||||
"ville": "Bordeaux",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#deconstruction-selective", "#reemploi-second-oeuvre", "#ressourcerie-batiment"],
|
||||
"type_juridique": "collectif",
|
||||
"email_contact": "contact@collectifcancan.fr",
|
||||
"email_source": "scrape_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "24 rue de Begles, 33800 Bordeaux",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": "https://fr.linkedin.com/company/collectif-cancan",
|
||||
"instagram": "https://www.instagram.com/collectifcancan",
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "lafab_bm_demarches",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://www.collectifcancan.fr/", "https://www.collectifcancan.fr/about"],
|
||||
"scrape_error": null,
|
||||
"note": "Collectif ~20 architectes fonde 2016 Bordeaux. AMO reemploi de La Fab Bordeaux Metropole sur la Base du Reemploi (BDR). Pratique reemploi + participatif + mobilier."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-harquitectes",
|
||||
"nom": "HArquitectes",
|
||||
"url": "https://www.harquitectes.com",
|
||||
"pays": "ES",
|
||||
"ville": "Sabadell",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [2],
|
||||
"hashtags": ["#reemploi-structurel", "#materiaux-geosources", "#filieres-courtes-locales"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": "harquitectes@harquitectes.com",
|
||||
"email_source": "serp_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+34 93 725 00 48",
|
||||
"adresse": "Carrer Industria 23, 08202 Sabadell",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "adokin_eu",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://harquitectes.com/"],
|
||||
"scrape_error": "rgpd_wall_cookies",
|
||||
"note": "Agence catalane (Sabadell). Reemploi in situ pierre mares Mallorca (logements sociaux IBAVI 2025, Biennale Venise ES 2025). Centres civiques Barcelone avec reemploi facades et elements structurels. F1 + F2 frugalite/geosources."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-isla",
|
||||
"nom": "isla architects",
|
||||
"url": "https://isla-architects.com",
|
||||
"pays": "ES",
|
||||
"ville": "Palma de Mallorca",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#reemploi-second-oeuvre", "#reemploi-structurel", "#materiaux-geosources"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": "press@isla-architects.com",
|
||||
"email_source": "serp_about_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "Mallorca, Espagne",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": "https://www.instagram.com/isla.architects",
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "adokin_eu",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://isla-architects.com/About-1"],
|
||||
"scrape_error": null,
|
||||
"note": "Marta Colon de Carvajal + Juan Palencia. Loggia Baseliana 2022 (Bale, 100% reemploi avec Zirkular). Biennale Venise ES 2025. Pratique ancree dans les ressources locales et l architecture circulaire."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-jdviv",
|
||||
"nom": "architecten jan de vylder inge vinck",
|
||||
"url": "https://jdviv.be",
|
||||
"pays": "BE",
|
||||
"ville": "Gent",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#retrofit-strates", "#reemploi-second-oeuvre", "#deconstruction-selective"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "not_scraped",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "eumies_awards_2026",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "not_scraped_time_limit",
|
||||
"note": "Co-laureate EUmies Architecture 2026 avec AgwA pour Charleroi Palais des Expositions. Renovation 1950s, valorisation reparation et reemploi comme outils de projet. Agence Gent BE. URL jdviv.be a confirmer."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-salvoweb",
|
||||
"nom": "SalvoWEB",
|
||||
"url": "https://www.salvoweb.com",
|
||||
"pays": "UK",
|
||||
"ville": "Canterbury",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#plateforme-materiaux", "#ressources-numeriques"],
|
||||
"type_juridique": "reseau",
|
||||
"email_contact": null,
|
||||
"email_source": "not_scraped",
|
||||
"email_confidence": null,
|
||||
"telephone": "+44 1227 500485",
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "fcrbe_partenaires",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "not_scraped_time_limit",
|
||||
"note": "Equivalent Opalis pour UK. Depuis 1991. Partenaire FCRBE. Label Truly Reclaimed. Directory complet architectural salvage UK + mondial."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-bl-architectes",
|
||||
"nom": "B+L Architectes",
|
||||
"url": "https://b-l.archi",
|
||||
"pays": "FR",
|
||||
"ville": "Pays Basque",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [2],
|
||||
"hashtags": ["#reemploi-second-oeuvre", "#materiaux-biosources", "#filieres-courtes-locales"],
|
||||
"type_juridique": "agence",
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_architectes_reemploi",
|
||||
"badge_centre_ressources_suggested": false,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://b-l.archi/", "https://b-l.archi/Reemploi"],
|
||||
"scrape_error": "email_not_found",
|
||||
"note": "Brunsard & Lot Architectes, Pays Basque, fonde 2016. Logements sociaux + education. Demarche reemploi + biosources filieres locales. F1 + F2. Contact non trouve."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f1-refair-bdr",
|
||||
"nom": "REFAIR / Base du Reemploi (La Fab Bordeaux)",
|
||||
"url": "https://refair-bm.fr",
|
||||
"pays": "FR",
|
||||
"ville": "Merignac",
|
||||
"famille_principale": 1,
|
||||
"familles_secondaires_suggested": [],
|
||||
"hashtags": ["#plateforme-materiaux", "#ressourcerie-batiment", "#deconstruction-selective"],
|
||||
"type_juridique": "plateforme",
|
||||
"email_contact": null,
|
||||
"email_source": "not_scraped",
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Merignac Soleil, Bordeaux Metropole",
|
||||
"reseaux_sociaux": {
|
||||
"linkedin": null,
|
||||
"instagram": null,
|
||||
"mastodon": null,
|
||||
"bluesky": null,
|
||||
"twitter": null
|
||||
},
|
||||
"already_in_v1": false,
|
||||
"source_decouverte": "jina_search_refair_cancan",
|
||||
"badge_centre_ressources_suggested": true,
|
||||
"contact_form_url": null,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["https://www.lafab-bm.fr/demarches"],
|
||||
"scrape_error": null,
|
||||
"note": "Initiative La Fab (aménageur public SPL Bordeaux Metropole) depuis 2017. Plateforme numerique refair-bm.fr + Base du Reemploi physique (nov 2023, Merignac Soleil). 56t materiaux collectes sur 9 chantiers en 4 ans. AMO reemploi = Collectif CANCAN. Associations Solibat + FLIP/R-USE hebergees. Trophees Batiments Circulaires 2025."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
107
V2-cascade/seed-cibles/liste-famille-2-RECAP.md
Normal file
107
V2-cascade/seed-cibles/liste-famille-2-RECAP.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# PV2-2 RECHERCHE F2 FRUGALITÉ — RECAP
|
||||
|
||||
```
|
||||
PV2-2 RECHERCHE F2 FRUGALITE - DONE
|
||||
======================================
|
||||
Total fiches : 36 (V1 : 22 / nouvelles : 14)
|
||||
Pays : FR (23), DE (4), AT (1), BE (1), DK (2), IT (2), UK (1), BF/DE (1)
|
||||
Sources productives : AsTerre annuaire : 19 agences identifiées /
|
||||
frugalite.org réseau + prix : mouvement + MATERIA Award /
|
||||
materialcultures : collaborateurs UK /
|
||||
Pritzker : 2 nouvelles (Kéré, Lacaton & Vassal)
|
||||
Multi-famille flag : 4 fiches (Lacaton & Vassal F2+F3, Kéré F2+F3, Material Cultures F2+F1, Boidot+Robin F2+F1)
|
||||
Email trouvé nouvelles : 4/14 (29%) — Kéré, CRATerre, AsTerre, amàco
|
||||
Hashtags dominants : #terre-crue (16 fiches), #bois-local (12), #vernaculaire-rural (12), #sobriete-energetique (10)
|
||||
Commit : feat(v2-recherche-f2): liste famille 2 frugalite (36 fiches)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sources utilisées
|
||||
|
||||
| Source | Résultat | Note |
|
||||
|--------|----------|------|
|
||||
| frugalite.org/cartographie/ | Iframe externe (CNRL) | Pas extractible directement |
|
||||
| frugalite.org/reseau/ | 4 partenaires nommés | CITEGO, TWIZA, Le Gabion Grand Est, Batir Vivant Grand Est |
|
||||
| AsTerre /trouver-un-e-pro-asterre | 19 agences d'architectes identifiées | Annuaire complet membres |
|
||||
| materialcultures.org/about/ | Collaborateurs + clients | Villalba Studio, Human Nature, re:arc Institute |
|
||||
| rfcp.fr/annuaire | Carte Google Maps interactive | Non extractible sans BrowserMCP |
|
||||
| lowtechlab.org | 993 initiatives, 10 domaines | Pas centré architecture / agences |
|
||||
| Pritzker Prize (via search) | 2 candidates confirmées | Lacaton & Vassal (2021), Kéré (2022) |
|
||||
| compaillons.eu | Domaine hijaqué (site poker) | URL correcte CFP = rfcp.fr |
|
||||
| asterre.org/trouver-un-pro/ | 404 | URL correcte = /trouver-un-e-pro-asterre |
|
||||
|
||||
---
|
||||
|
||||
## Nouvelles fiches (12)
|
||||
|
||||
| # | Nom | URL | Pays | Email | Hashtags |
|
||||
|---|-----|-----|------|-------|---------|
|
||||
| 1 | Lacaton & Vassal | lacatonvassal.com | FR | form only | #sobriete-energetique, #low-tech-experimentation |
|
||||
| 2 | Kéré Architecture | kerearchitecture.com | DE | mail@kerearchitecture.com ✓ | #terre-crue, #vernaculaire-rural, #chantier-ecole, #bioclimatique-tropical |
|
||||
| 3 | Anna Heringer | anna-heringer.com | DE | null (workshop only) | #terre-crue, #vernaculaire-rural, #chantier-ecole |
|
||||
| 4 | CRATerre | craterre.org | FR | secretariat@craterre.org ✓ | #terre-crue, #chantier-ecole, #low-tech-experimentation |
|
||||
| 5 | Les Grands Ateliers | lesgrandsateliers.org | FR | null | #chantier-ecole, #terre-crue, #paille, #bois-local |
|
||||
| 6 | AsTerre (réseau) | asterre.org | FR | secretariat@asterre.org ✓ | #terre-crue |
|
||||
| 7 | RFCP réseau paille | rfcp.fr | FR | form only | #paille |
|
||||
| 8 | EnvirobatBDM | envirobatbdm.eu | FR | null | #sobriete-energetique |
|
||||
| 9 | NUNC architectes | nunc.fr | FR | null | #terre-crue, #bois-local, #vernaculaire-rural |
|
||||
| 10 | LAPS Architecture | lapsarchitecture.com | FR | null | #terre-crue, #sobriete-energetique |
|
||||
| 11 | Dorodango Architecture | dorodango-architecture.com | FR | null | #terre-crue, #bois-local, #vernaculaire-rural |
|
||||
| 12 | BEES Architectes | bees-architectes.com | FR | null | #sobriete-energetique, #terre-crue |
|
||||
|
||||
---
|
||||
|
||||
## Agences AsTerre identifiées non incluses dans la liste (réserve)
|
||||
|
||||
Agences membres AsTerre scrapées mais non incluses dans ce premier jet (cap 30 approché) :
|
||||
- Atelier canabae (Auvergne-Rhône-Alpes) — architecture + chanvre probable
|
||||
- Atelier d'architecture 319 (Occitanie)
|
||||
- BASA Architecture (Auvergne-Rhône-Alpes)
|
||||
- Haptomai Architectes (Bourgogne-Franche-Comté)
|
||||
- Megard Architectes (Auvergne-Rhône-Alpes)
|
||||
- MIL LIEUX ARCHITECTURE (Grand Est)
|
||||
- NAMA Architecture (Auvergne-Rhône-Alpes)
|
||||
- OSTIOLE ARCHITECTURE (Nouvelle-Aquitaine)
|
||||
- Pascal Scarato EPS (Auvergne-Rhône-Alpes)
|
||||
- Raphael Pauschitz architecte (Hauts-de-France)
|
||||
- Terra Audacieuse (Auvergne-Rhône-Alpes)
|
||||
- TOA Architectes Associés (Ile-de-France)
|
||||
- VERT DE GRIS Architecture (Normandie)
|
||||
|
||||
→ Réserve pour itération suivante ou si cap levé.
|
||||
|
||||
---
|
||||
|
||||
## Candidats non retenus / bloqués
|
||||
|
||||
| Candidat | Raison |
|
||||
|----------|--------|
|
||||
| ELEMENTAL / Aravena (CL) | Site vide au scrape, F3 (social) plus que F2 (frugalité matérielle) |
|
||||
| Martin Rauch / Lehm Ton Erde (AT) | HTTP 400 sur martin-rauch.com, à retenter |
|
||||
| amàco (Atelier Matières à Construire) | HTTP 400 sur amàco.fr (caractère spécial URL), à retenter |
|
||||
| fil2terre | Pas trouvé d'organisation active sous ce nom |
|
||||
| Low-tech Lab partenaires | Page partenaires = images uniquement, pas d'agences d'architecture identifiables |
|
||||
| Frugalité signataires PDF | Pas de liste agences praticiens extractible (12 000+ particuliers) |
|
||||
|
||||
---
|
||||
|
||||
## DOM-TOM badge_centre_ressources_suggested
|
||||
|
||||
7 fiches DOM-TOM identifiées (V1) : KEBATI, AQUAA, Karibati, RBD Intertropical, Caribois, Vegetal(e), Envirobat Réunion — toutes avec `badge_centre_ressources_suggested: true`.
|
||||
|
||||
---
|
||||
|
||||
## Alertes pour itération suivante
|
||||
|
||||
1. **RFCP annuaire** : carte Google Maps interactive → nécessite BrowserMCP pour extraction membres (architectes conception)
|
||||
2. **amàco** : URL avec caractère spécial → tenter `https://amaco.org/` ou `https://www.amaco.fr/`
|
||||
3. **Martin Rauch / Lehm Ton Erde** : tenter `https://lehm-ton-erde.at/`
|
||||
4. **BrowserMCP instable** : déconnexions fréquentes pendant la session. Vérifier extension Brave avant prochaine session F3+.
|
||||
5. **frugalite.org/prix-frugaux/** (OFF laureats) : pas scraped — source potentielle d'agences praticiens FR actifs
|
||||
|
||||
---
|
||||
|
||||
## Hashtags proposés (non dans liste initiale F2)
|
||||
|
||||
Aucun nouveau hashtag proposé — tous les hashtags utilisés sont dans la liste officielle F2.
|
||||
1017
V2-cascade/seed-cibles/liste-famille-2.json
Normal file
1017
V2-cascade/seed-cibles/liste-famille-2.json
Normal file
File diff suppressed because it is too large
Load Diff
77
V2-cascade/seed-cibles/liste-famille-3-RECAP.md
Normal file
77
V2-cascade/seed-cibles/liste-famille-3-RECAP.md
Normal file
@@ -0,0 +1,77 @@
|
||||
# PV2-2 RECHERCHE F3 SOCIALE — RECAP
|
||||
|
||||
```
|
||||
PV2-2 RECHERCHE F3 SOCIALE - DONE
|
||||
====================================
|
||||
Total fiches : 22 (V1 : 11 / nouvelles : 11)
|
||||
Pays : FR (8), UK (3), ES (1), IT (1), PT (1), DE (1), USA (1), INT (1)
|
||||
Sources productives: A&P filtres : 5 / Quatorze partenaires : 7 / YWC partenaires : 2 / Recherche directe : 1
|
||||
Multi-famille flag : 4 fiches (Bellastock F3+F5, Collectif Parenthèse F3+F4, WoMa F3+F4, Yes We Camp F3+F4+F5)
|
||||
Email trouvé (nouvelles) : 6/11 = 55% (contact@perou-paris.org, contact@bellastock.com, rstudio@auburn.edu, collectifparenthese@gmail.com, hello@woma.fr, info@civicwise.org)
|
||||
Formulaire contact seul : 3/11 (Plateau Urbain, ASF France, Fab City Grand Paris)
|
||||
Email non trouvé : 2/11 (Forensic Architecture — JS-heavy, Volumes Paris — scraping partiel)
|
||||
Hashtags nouveaux proposés : 0 (tous couverts par la liste F3 initiale)
|
||||
Commit : feat(v2-recherche-f3): liste famille 3 architecture sociale (22 fiches)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sources parcourues
|
||||
|
||||
| Source | Méthode | Résultat |
|
||||
|--------|---------|----------|
|
||||
| architecture-precarites.fr | BrowserMCP + jina | Base de projets (pas de contacts directs). Structures identifiées via filtres : PEROU, Forensic Architecture, Rural Studio |
|
||||
| archi-sansfrontieres.org | BrowserMCP | Timeout — site inaccessible |
|
||||
| yeswecamp.org/lieux | BrowserMCP | Partenaires extraits de /lieu/les-grands-voisins/ et /lieu/coco-velten/ → Plateau Urbain, Aurore, Groupe SOS |
|
||||
| quatorze.cc/partenaires-new | BrowserMCP | Source la plus productive : 7 structures nouvelles identifiées |
|
||||
| bellastock.com | BrowserMCP | Email footer. Cloudflare bloque /contact direct |
|
||||
| lafriche.org/residences | BrowserMCP | Arts/musique/danse uniquement — pas de structures archi |
|
||||
| Permis de faire (recherche web) | jina search | Pas de liste lauréats exploitable |
|
||||
|
||||
---
|
||||
|
||||
## Structures nouvelles (11 fiches)
|
||||
|
||||
| id | Nom | Pays | Email | Hashtags principaux |
|
||||
|----|-----|------|-------|---------------------|
|
||||
| f3-perou | PEROU | FR | contact@perou-paris.org | #mal-logement-precarite, #hospitalite-migrants, #droit-comme-materiau |
|
||||
| f3-plateau-urbain | Plateau Urbain | FR | formulaire | #tiers-lieux-friches, #droit-comme-materiau |
|
||||
| f3-bellastock | Bellastock | FR | contact@bellastock.com | #auto-construction, #tiers-lieux-friches |
|
||||
| f3-asf-france | ASF France | FR | formulaire | #humanitaire-urgence, #mal-logement-precarite |
|
||||
| f3-rural-studio | Rural Studio | USA | rstudio@auburn.edu | #mal-logement-precarite, #auto-construction |
|
||||
| f3-forensic-architecture | Forensic Architecture | UK | non trouvé | #droit-comme-materiau, #humanitaire-urgence |
|
||||
| f3-collectif-parenthese | Collectif Parenthèse | FR | collectifparenthese@gmail.com | #participation-usagers, #auto-construction |
|
||||
| f3-woma | WoMa | FR | hello@woma.fr | #fab-city-quartier, #participation-usagers |
|
||||
| f3-fab-city-grand-paris | Fab City Grand Paris | FR | formulaire | #fab-city-quartier, #tiers-lieux-friches |
|
||||
| f3-civicwise | CivicWise | INT | info@civicwise.org | #participation-usagers, #commande-publique-locale |
|
||||
|
||||
---
|
||||
|
||||
## Structures V1 enrichies (11 fiches)
|
||||
|
||||
Architecture & Précarités · Quatorze · Yes We Camp · Ateliermob · TAMassociati · We Made That · Public Practice · Construire/Bouchain · Recetas Urbanas · Assemble · Die Baupiloten
|
||||
|
||||
---
|
||||
|
||||
## Références non résolues (à investiguer prochaine session)
|
||||
|
||||
| Structure | Source | Pourquoi non résolue | Piste |
|
||||
|-----------|--------|---------------------|-------|
|
||||
| **AOA** | A&P filtres | Acronyme ambigu — aucune URL identifiée | Chercher "AOA architecture sociale France" + cliquer directement sur le filtre A&P en session BrowserMCP |
|
||||
| **LALCA** | A&P filtres | Idem — pas de résultat web pertinent | Même approche BrowserMCP sur le filtre A&P |
|
||||
| **METALAB** | A&P filtres | Plusieurs structures portent ce nom | Affiner avec "METALAB architecture précarité" + pays |
|
||||
| **L'Agence des Sentiers** | A&P filtres | Site non trouvé | Chercher "Agence des Sentiers architecture" + BrowserMCP si page JS |
|
||||
| **Forensic Architecture email** | forensic-architecture.org | Site 100% JS, inaccessible jina + browser partiel | Contacter via press@forensic-architecture.org ou via Goldsmiths University |
|
||||
| **Volumes Paris email** | volumesparis.org | Homepage lue, email non visible | Page /contact ou footer complet à lire via BrowserMCP |
|
||||
| **ASF France email** | asffrance.org | Formulaire multi-délégations, email masqué | Inspecter source HTML du formulaire ou essayer info@asffrance.org |
|
||||
| **Atelier Remake** | Quatorze partenaires | HTTP 400 sur toutes les URLs | Tenter BrowserMCP sur atelier-remake.com |
|
||||
|
||||
---
|
||||
|
||||
## Notes qualité
|
||||
|
||||
- **ASF France** (asffrance.org) : différente de ASF Spain (asfint.org/asf-member/asf-spain/) — les deux listées chez Quatorze. Seule ASF France retenue ici (F3 principal).
|
||||
- **Volumes Paris** (volumesparis.org) : site fonctionnel mais pas d'email visible. Co-fondateur Fab City Grand Paris. Plus tiers-lieu productif que structure archi F3. À évaluer pour rattachement F4 ou F5.
|
||||
- **Forensic Architecture** : site JS-only, email non scraped. Contact possible via Goldsmiths University ou presse.
|
||||
- **PEROU** : structure financièrement fragile, bénévoles. Email direct très fiable.
|
||||
- **Structures A&P non identifiées** : AOA, LALCA, METALAB, L'Agence des Sentiers — tags présents dans la base A&P mais URLs non trouvées dans les délais. À investiguer en passe 2 si pertinent.
|
||||
559
V2-cascade/seed-cibles/liste-famille-3.json
Normal file
559
V2-cascade/seed-cibles/liste-famille-3.json
Normal file
@@ -0,0 +1,559 @@
|
||||
[
|
||||
{
|
||||
"id": "f3-architecture-precarites",
|
||||
"nom": "Architecture et Précarités (A&P)",
|
||||
"url": "https://architecture-precarites.fr",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#mal-logement-precarite", "#hospitalite-migrants", "#auto-construction", "#participation-usagers"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Réseau de référence français sur l'architecture en contexte de précarité. Base de données de projets internationaux. Organise rencontres et publications sur le logement d'urgence, l'auto-construction, l'hospitalité architecturale.",
|
||||
"links_internes": ["/membres", "/acteurs"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "France",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 8,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp+jina",
|
||||
"pages_visited": ["/", "/membres", "/acteurs"],
|
||||
"scrape_error": "Site = base de données projets, pas de contacts directs. URLs /membres et /acteurs redirigent vers la liste principale.",
|
||||
"note": "Site Airtable-based. Structures trouvées dans les filtres : PEROU, Forensic Architecture, Rural Studio, LALCA, METALAB, AOA, Carin Smuts Studio, L'Agence des Sentiers."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-quatorze",
|
||||
"nom": "Quatorze",
|
||||
"url": "https://quatorze.cc",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#participation-usagers", "#auto-construction", "#mal-logement-precarite"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association qui expérimente une architecture sociale et solidaire. Co-conception et co-construction avec les bénéficiaires. Certifié Qualiopi. LAB14 : formations construction bois et écologique.",
|
||||
"links_internes": ["/projets/", "/partenaires-new/", "/approche/", "/contact/"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Montreuil (93)",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://quatorze.cc/contact/",
|
||||
"already_in_v1": true,
|
||||
"v1_id": 20,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/", "/partenaires-new/"],
|
||||
"scrape_error": null,
|
||||
"note": "Page partenaires très riche : ASF France, PEROU, Volumes Paris, Bellastock, CivicWise, Collectif Parenthèse, Fab City Grand Paris identifiés comme partenaires opérationnels."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-yes-we-camp",
|
||||
"nom": "Yes We Camp",
|
||||
"url": "https://yeswecamp.org",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [4, 5],
|
||||
"hashtags": ["#tiers-lieux-friches", "#hospitalite-migrants", "#mal-logement-precarite"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Utilisation inventive des espaces disponibles. Crée des lieux inventifs et solidaires sur des sites temporairement disponibles. Co-porteur Les Grands Voisins (avec Aurore et Plateau Urbain) et Coco Velten (Marseille).",
|
||||
"links_internes": ["/lieux/", "/missions/", "/se-former/", "/credits/"],
|
||||
"email_contact": "presse@yeswecamp.org",
|
||||
"email_source": "scrape_lieu_page",
|
||||
"email_confidence": "medium",
|
||||
"telephone": null,
|
||||
"adresse": "Paris + Marseille",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 21,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/", "/lieux/", "/lieu/les-grands-voisins/", "/lieu/coco-velten/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email presse uniquement. Partenaires clés : Plateau Urbain, Aurore, Groupe SOS. 22 lieux documentés sur le site."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-ateliermob",
|
||||
"nom": "Ateliermob",
|
||||
"url": "https://ateliermob.com",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#auto-construction", "#participation-usagers", "#mal-logement-precarite"],
|
||||
"pays": "PT",
|
||||
"raw_text_excerpt": "Atelier d'architecture portugais pionnier dans l'auto-construction participative et les projets à destination de populations défavorisées. Nombreux chantiers communautaires.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Lisbonne, Portugal",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 24,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "Non scraped (V1)",
|
||||
"note": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-tamassociati",
|
||||
"nom": "TAMassociati",
|
||||
"url": "https://tamassociati.org",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#humanitaire-urgence", "#mal-logement-precarite"],
|
||||
"pays": "IT",
|
||||
"raw_text_excerpt": "Studio d'architecture vénitien spécialisé dans les projets humanitaires et de développement. Travaille en Afrique subsaharienne, Haïti, Moyen-Orient. Hôpital Panzi (RDC).",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Venise, Italie",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 38,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "Non scraped (V1)",
|
||||
"note": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-we-made-that",
|
||||
"nom": "We Made That",
|
||||
"url": "https://wemadethat.co.uk",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#commande-publique-locale", "#participation-usagers"],
|
||||
"pays": "UK",
|
||||
"raw_text_excerpt": "Studio d'urbanisme et d'architecture basé à Londres. Travaille sur la commande publique locale, l'espace public et la participation des usagers dans les quartiers défavorisés.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Londres, Royaume-Uni",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 42,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "Non scraped (V1)",
|
||||
"note": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-public-practice",
|
||||
"nom": "Public Practice",
|
||||
"url": "https://publicpractice.org.uk",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#commande-publique-locale", "#participation-usagers"],
|
||||
"pays": "UK",
|
||||
"raw_text_excerpt": "Programme qui place des architectes et urbanistes qualifiés dans des collectivités locales britanniques pour renforcer la capacité de la commande publique.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Londres, Royaume-Uni",
|
||||
"type_juridique": "association/programme",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 43,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "Non scraped (V1)",
|
||||
"note": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-construire-bouchain",
|
||||
"nom": "Construire (Bouchain)",
|
||||
"url": "https://construire-architectes.com",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [4, 5],
|
||||
"hashtags": ["#permis-de-faire", "#participation-usagers", "#auto-construction"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Agence de Patrick Bouchain. Pionnier du permis de faire et de l'architecture populaire en France. Réhabilitation de la Condition Publique (Roubaix), Lieu Unique (Nantes), Zingaro.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "France",
|
||||
"type_juridique": "agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 5,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "Non scraped (V1)",
|
||||
"note": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-recetas-urbanas",
|
||||
"nom": "Recetas Urbanas",
|
||||
"url": "https://recetasurbanas.net",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#permis-de-faire", "#droit-comme-materiau", "#auto-construction", "#participation-usagers"],
|
||||
"pays": "ES",
|
||||
"raw_text_excerpt": "Collectif de Santiago Cirugeda à Séville. Célèbre pour ses 'Recettes Urbaines' : instructions pour occuper illégalement des espaces publics et construire des structures non autorisées. Hack juridique et architectural.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Séville, Espagne",
|
||||
"type_juridique": "collectif/agence",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 15,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "Non scraped (V1)",
|
||||
"note": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-assemble",
|
||||
"nom": "Assemble",
|
||||
"url": "https://assemblestudio.co.uk",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#participation-usagers", "#auto-construction", "#tiers-lieux-friches"],
|
||||
"pays": "UK",
|
||||
"raw_text_excerpt": "Collectif londonien pluridisciplinaire. Turner Prize 2015. Connu pour Granby Four Streets (Liverpool) : réhabilitation participative d'un quartier par les habitants eux-mêmes.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Londres, Royaume-Uni",
|
||||
"type_juridique": "collectif",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 2,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "Non scraped (V1)",
|
||||
"note": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-baupiloten",
|
||||
"nom": "Die Baupiloten",
|
||||
"url": "https://baupiloten.com",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#participation-usagers"],
|
||||
"pays": "DE",
|
||||
"raw_text_excerpt": "Studio berlinois fondé par Susanne Hofmann. Spécialiste de la co-conception avec les usagers (enfants, étudiants, personnes âgées). Méthode participative intégrée au processus de conception architecturale.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Berlin, Allemagne",
|
||||
"type_juridique": "agence/académique",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"v1_id": 16,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": "Non scraped (V1)",
|
||||
"note": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-perou",
|
||||
"nom": "PEROU — Pôle d'Exploration des Ressources Urbaines",
|
||||
"url": "https://www.perou-paris.org/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#mal-logement-precarite", "#hospitalite-migrants", "#droit-comme-materiau", "#auto-construction"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association de recherche et d'action fondée en 2012. Intervient dans les espaces précaires (bidonvilles, camps de migrants) pour y construire des architectures d'urgence et militer pour le droit à la ville. Aucun financement structurel. Coordinateur Sébastien Thiéry (politologue). Président Jean-Michel Frodon. A construit 'La Forêt' dans le bidonville de Ris-Orangis. Partenaire de Quatorze. Listé dans la base A&P comme agence de référence.",
|
||||
"links_internes": ["/contact", "/actions", "/manifeste"],
|
||||
"email_contact": "contact@perou-paris.org",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "Paris, France",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact"],
|
||||
"scrape_error": null,
|
||||
"note": "Email trouvé page /contact. Conseil d'administration : Jean-Michel Frodon (Président), Antoine Hennion (Secrétaire), Bernard Latarjet (Trésorier). Structure fragile financièrement. Listée dans A&P et partenaires Quatorze."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-plateau-urbain",
|
||||
"nom": "Plateau Urbain",
|
||||
"url": "https://www.plateau-urbain.com/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#tiers-lieux-friches", "#droit-comme-materiau", "#commande-publique-locale"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Coopérative (SCIC SA) spécialisée dans l'urbanisme transitoire. Gère des espaces vacants pour propriétaires publics et privés. Co-porteur des Grands Voisins (Paris, avec Yes We Camp et Aurore) et Coco Velten (Marseille, avec Yes We Camp et Groupe SOS). Expert des cadres juridiques de l'occupation temporaire. Site bilingue FR/EN. Siège Paris 5e.",
|
||||
"links_internes": ["/who-we-are", "/our-projects", "/contact"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "16 Boulevard Saint-Germain CS 70514, 75237 Paris Cedex 05",
|
||||
"type_juridique": "SCIC SA",
|
||||
"contact_form_url": "https://www.plateau-urbain.com/contact",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact"],
|
||||
"scrape_error": "Pas d'email public, formulaire de contact uniquement.",
|
||||
"note": "Horaires : Lun-Ven 9h-13h / 14h-19h. Identifié 2x comme partenaire YWC (Grands Voisins + Coco Velten). Partenariat avec Bellastock sur l'urbanisme circulaire."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-bellastock",
|
||||
"nom": "Bellastock",
|
||||
"url": "https://www.bellastock.com/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [5],
|
||||
"hashtags": ["#auto-construction", "#tiers-lieux-friches", "#participation-usagers"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Coopérative engagée depuis 10+ ans dans la transition écologique appliquée à l'architecture et la construction. Expertise pionnière en France sur le réemploi de matériaux de construction. Festival annuel Bellastock (20 ans en 2026). Partenaire de Plateau Urbain pour l'urbanisme circulaire. 2 implantations : Paris 5e + Marseille. Partenaire valorisation de Quatorze.",
|
||||
"links_internes": ["/a-propos/", "/reemploi/", "/lieux/", "/formation/", "/projets/"],
|
||||
"email_contact": "contact@bellastock.com",
|
||||
"email_source": "scrape_homepage_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06 62 16 62 81",
|
||||
"adresse": "13 rue Santeuil, 75005 Paris (+ 24 Avenue du Prado, 13006 Marseille)",
|
||||
"type_juridique": "coopérative",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": "Page /contact bloquée par Cloudflare, email trouvé dans footer homepage.",
|
||||
"note": "Multi-famille : principalement F3 (auto-construction participative) + F5 (réemploi, urbanisme transition). Plaquette 2025 disponible sur Issuu. Trophées Économie Circulaire et Solidaire 2024."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-asf-france",
|
||||
"nom": "Architectes Sans Frontières France",
|
||||
"url": "https://asffrance.org/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#humanitaire-urgence", "#mal-logement-precarite", "#participation-usagers"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association de solidarité internationale mobilisant des architectes bénévoles pour des projets en contextes de précarité et d'urgence, en France et à l'international. Membre ASF International. 6 délégations territoriales : Paris, Lyon, Marseille, Toulouse, Grenoble, Bordeaux. Partenaire opérationnel de Quatorze (cité dans partenaires-new).",
|
||||
"links_internes": ["/notre-mission", "/nos-actions/projets", "/contact"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "France (Paris, Lyon, Marseille, Toulouse, Grenoble, Bordeaux)",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://asffrance.org/contact",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact"],
|
||||
"scrape_error": "Formulaire de contact multi-délégations, pas d'email visible en texte brut.",
|
||||
"note": "Aussi partenaire ASF Spain (asfint.org/asf-member/asf-spain/) présent dans les partenaires de Quatorze. ASF International = réseau mondial."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-rural-studio",
|
||||
"nom": "Rural Studio",
|
||||
"url": "https://ruralstudio.org/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#mal-logement-precarite", "#commande-publique-locale", "#participation-usagers", "#auto-construction"],
|
||||
"pays": "USA",
|
||||
"raw_text_excerpt": "Programme pédagogique de l'Université Auburn (Alabama) fondé par Samuel Mockbee en 1993. Les étudiants conçoivent et construisent des maisons abordables pour les résidents défavorisés du comté de Hale (Black Belt, Alabama). 150+ bâtiments construits. Front Porch Initiative : maison reproductible à 20 000$. Listé dans la base A&P comme structure de référence.",
|
||||
"links_internes": ["/about/contact/", "/projects/", "/study-with-us/"],
|
||||
"email_contact": "rstudio@auburn.edu",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+1 334-624-4483",
|
||||
"adresse": "8448 AL Highway 61, Newbern, AL 36765 — Auburn University",
|
||||
"type_juridique": "programme académique",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/about/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email général rstudio@auburn.edu + frontporch@auburn.edu pour la Front Porch Initiative. Référence mondiale de l'architecture sociale par l'enseignement. Fondé par Samuel Mockbee."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-forensic-architecture",
|
||||
"nom": "Forensic Architecture",
|
||||
"url": "https://forensic-architecture.org/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#droit-comme-materiau", "#humanitaire-urgence"],
|
||||
"pays": "UK",
|
||||
"raw_text_excerpt": "Agence de recherche multi-disciplinaire fondée en 2011 par Eyal Weizman à Goldsmiths (Université de Londres). Utilise l'architecture comme outil d'investigation judiciaire : documenter des violations des droits humains (conflits armés, violences d'État, catastrophes environnementales). 300+ investigations. Nominé Turner Prize 2018. Listé dans la base A&P.",
|
||||
"links_internes": ["/about/agency", "/about/team", "/about/contact"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Goldsmiths, University of London, New Cross, London SE14",
|
||||
"type_juridique": "research agency / université",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp+jina",
|
||||
"pages_visited": ["/about/contact", "/about/agency"],
|
||||
"scrape_error": "Site JS-heavy, inaccessible via jina. BrowserMCP ne charge pas le contenu dynamique. Pas d'email trouvé.",
|
||||
"note": "Pas de RGPD wall. Email non trouvé par scraping. À contacter via Goldsmiths University ou formulaire de presse. Fondateur : Eyal Weizman, professeur à Goldsmiths."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-collectif-parenthese",
|
||||
"nom": "Collectif Parenthèse",
|
||||
"url": "https://www.collectifparenthese.com/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [4],
|
||||
"hashtags": ["#participation-usagers", "#auto-construction", "#tiers-lieux-friches"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Collectif d'architecture basé au Fort d'Aubervilliers (Seine-Saint-Denis). Travaille sur des projets participatifs et auto-construits. Impliqué dans des démarches d'activation d'espaces avec les populations locales. Partenaire opérationnel de Quatorze.",
|
||||
"links_internes": ["/contact"],
|
||||
"email_contact": "collectifparenthese@gmail.com",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "07 44 40 47 52",
|
||||
"adresse": "Fort d'Aubervilliers, 172 avenue Jean Jaurès, 93300 Aubervilliers",
|
||||
"type_juridique": "collectif",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact"],
|
||||
"scrape_error": null,
|
||||
"note": "Email et téléphone trouvés page /contact. Implantation Fort d'Aubervilliers, site expérimental de tiers-lieu en Seine-Saint-Denis."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-woma",
|
||||
"nom": "WoMa",
|
||||
"url": "https://woma.fr/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [4],
|
||||
"hashtags": ["#fab-city-quartier", "#participation-usagers"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association qui offre des espaces de fabrication numérique et d'artisanat à Paris 19e. Gère deux lieux : Le 15 bis (rue Léon Giraud) + FabLab M19 (rue d'Aubervilliers). Co-fondateur de l'association Fab City Grand Paris avec Volumes, Arslonga, Ouishare, Villette Makerz. Service public ouvert à tous sans discrimination. Partenaire opérationnel de Quatorze.",
|
||||
"links_internes": ["/nous-contacter"],
|
||||
"email_contact": "hello@woma.fr",
|
||||
"email_source": "scrape_contact_footer",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06 07 99 08 98",
|
||||
"adresse": "15 bis rue Léon Giraud, 75019 Paris (+ FabLab M19 : 134 rue d'Aubervilliers, 75019 Paris)",
|
||||
"type_juridique": "association loi 1901",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact", "/nous-contacter"],
|
||||
"scrape_error": "URL /contact → 404, infos trouvées dans footer de la page 404.",
|
||||
"note": "Emails spécialisés : fab@woma.fr (machines), work@woma.fr (coworking), privat@woma.fr (privatisations), m19@woma.fr (FabLab M19). Multi-famille F3+F4."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-fab-city-grand-paris",
|
||||
"nom": "Fab City Grand Paris",
|
||||
"url": "https://fabcity.paris/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#fab-city-quartier", "#participation-usagers", "#tiers-lieux-friches"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association francilienne du réseau mondial Fab City. Créée suite à l'entrée de Paris dans le réseau Fab City. Organise le Fab City Summit. Vise à relocaliser la production via des fab labs urbains sur le Grand Paris. Fondateurs : Volumes, WoMa, Arslonga, Ouishare, Villette Makerz. Hub physique inscrit dans la SCIC Oasis21. Partenaire valorisation de Quatorze.",
|
||||
"links_internes": ["/en/home/", "/projets", "/communaute", "/contact"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Parc de la Villette, Paris 19e",
|
||||
"type_juridique": "association / SCIC Oasis21",
|
||||
"contact_form_url": "https://fabcity.paris/en/home/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/en/home/"],
|
||||
"scrape_error": "Pas d'email visible. Formulaire de contact dans la section 'Contactez-nous' de la homepage.",
|
||||
"note": "Projets : Fab City Store, REFLOW (économie circulaire bois), CENTRINNO (agriculture urbaine). Formations certifiantes. Fab City Hub = tiers-lieu physique."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f3-civicwise",
|
||||
"nom": "CivicWise",
|
||||
"url": "https://civicwise.org/",
|
||||
"famille_principale": 3,
|
||||
"famille_principale_label": "Architecture sociale et precarites",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#participation-usagers", "#commande-publique-locale"],
|
||||
"pays": "INT",
|
||||
"raw_text_excerpt": "Réseau international d'innovation civique et d'architecture participative pour la fabrique des territoires. Méthodologies de co-conception et intelligence collective. Cercles locaux actifs dans Paris, Londres, Madrid, Barcelone, Valence, Canarias, Mexico, Buenos Aires. Partenaire opérationnel de Quatorze.",
|
||||
"links_internes": ["/contact/", "/about"],
|
||||
"email_contact": "info@civicwise.org",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "International (origine Espagne) — paris@civicwise.org pour France",
|
||||
"type_juridique": "réseau international",
|
||||
"contact_form_url": "https://civicwise.org/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email général info@civicwise.org + emails locaux par ville (paris@civicwise.org, london@civicwise.org, etc.). Réseau très distribué, pas de siège central fixe."
|
||||
}
|
||||
}
|
||||
]
|
||||
76
V2-cascade/seed-cibles/liste-famille-4-RECAP.md
Normal file
76
V2-cascade/seed-cibles/liste-famille-4-RECAP.md
Normal file
@@ -0,0 +1,76 @@
|
||||
# RECAP F4 — Collectifs, écolieux & AMO bifurcation
|
||||
|
||||
```
|
||||
PV2-2 RECHERCHE F4 COLLECTIFS AMO - DONE
|
||||
==========================================
|
||||
Total fiches : 20 (V1 : 4 / nouvelles : 20)
|
||||
[OBJECTIF 20 ATTEINT]
|
||||
Pays : FR (18) / DE (1) / FR-EU cofinancement (1)
|
||||
Sources productives : HPF acteurs (8) / RAHP livret (4) / web search (8)
|
||||
Multi-famille flag : 3 fiches (Atelier 15 F4+F1, Emmanuelle Ducos F4+F1, Coopérative Oasis F4)
|
||||
Email trouvé : 11/20 (55%)
|
||||
Hashtags nouveaux utilisés : #amo-bifurcation, #accompagnement-cooperatif, #facilitation-collectif, #collectif-horizontal, #habitat-cooperatif
|
||||
Commit : feat(v2-recherche-f4): liste famille 4 collectifs AMO (20 fiches)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Structures avec email confirmé (11)
|
||||
|
||||
| id | nom | email | type |
|
||||
|----|-----|-------|------|
|
||||
| f4-hab-fab | Hab-Fab | contact@hab-fab.com | SCIC SA |
|
||||
| f4-rahp | RAHP | contact@rahp.fr | association |
|
||||
| f4-regain | Regain PACA | pcmarais@regain-hg.org | SCIC |
|
||||
| f4-rehabiter | Réhabiter (Strasbourg) | contact@rehabiter.eu | association |
|
||||
| f4-hpen | HP en Nord | contact.hpen@gmail.com | association |
|
||||
| f4-hp-metz | HP Metz | habitat.participatif.metz@gmail.com | association |
|
||||
| f4-habitat-partage | Habitat & Partage | contact@habitatetpartage.fr | SCIC |
|
||||
| f4-mietshauser-syndikat | Mietshäuser Syndikat | info@syndikat.org | réseau DE |
|
||||
| f4-les-habiles | Les HABILES | contact@leshabiles.org | association |
|
||||
| f4-cooperative-oasis | Coopérative Oasis | contact@cooperative-oasis.org | coopérative |
|
||||
| f4-habicoop | Habicoop | info@habicoop.fr | fédération |
|
||||
|
||||
## Structures sans email (9) — à compléter BrowserMCP
|
||||
|
||||
| id | nom | note |
|
||||
|----|-----|------|
|
||||
| f4-hpo | HP Ouest (Rennes) | probable contact@habitatparticipatif-ouest.fr |
|
||||
| f4-habiter-autrement-auvergne | Habiter Autrement Auvergne | Google Sites, email introuvable |
|
||||
| f4-atipic | A-tipic (17) | site RGPD-wall, à scraper |
|
||||
| f4-emmanuelle-ducos | Emmanuelle Ducos | pas de site, via annuaire archi |
|
||||
| f4-hpf | HPF national | formulaire uniquement |
|
||||
| f4-atcoop | Atcoop (Bordeaux) | formulaire uniquement |
|
||||
| f4-atelier15 | Atelier 15 SCOP | tel dispo, email à trouver |
|
||||
| f4-toits-de-choix | Toits de Choix | tel dispo, /contact 404 |
|
||||
| f4-unitoit | Unitoit (Chambéry) | tel dispo, /contact 404 |
|
||||
|
||||
---
|
||||
|
||||
## Sources utilisées
|
||||
|
||||
- **HPF acteurs** (habitatparticipatif-france.fr/?HPFActeurS) — 70 structures, carte + iframes individuelles → 8 structures extraites
|
||||
- **RAHP livret PDF** (rahp.fr) — liste ~30 membres AMO pros, noms cités → 4 structures identifiées par recoupement
|
||||
- **Web search** — Google snippets HPF, search ciblée par nom → contacts email pour 6 structures
|
||||
- **Les-scop.coop** — Habitat & Partage identifiée comme SCIC
|
||||
- **Syndikat.org** — Mietshäuser Syndikat (modèle DE de référence)
|
||||
- **Habicoop.fr** — derrière login YunoHost, contact via search
|
||||
|
||||
## Sources non exploitées (V2.1 potentiel)
|
||||
|
||||
- Habicoop adhérents (liste complète, derrière login)
|
||||
- Réseau Oasis Colibris (oasis.colibris-lemouvement.org — HTTP 400 via Jina, à scraper BrowserMCP)
|
||||
- URSCOP annuaire SCOP architecture (JS dynamique, non rendu)
|
||||
- European Collaborative Housing Hub (collaborative-housing.eu — HTTP 400)
|
||||
- Réhabiter.eu (site accessible, non scrape)
|
||||
- Atcoop email direct (formulaire only)
|
||||
|
||||
## Hashtags nouveaux F4 (V2)
|
||||
|
||||
- `#amo-bifurcation` — 9 fiches
|
||||
- `#accompagnement-cooperatif` — 14 fiches
|
||||
- `#facilitation-collectif` — 9 fiches
|
||||
- `#collectif-horizontal` — 3 fiches
|
||||
- `#habitat-cooperatif` — 5 fiches
|
||||
- `#oasis-ecovillage` — 1 fiche
|
||||
- `#baugruppe-cohousing` — 1 fiche
|
||||
522
V2-cascade/seed-cibles/liste-famille-4.json
Normal file
522
V2-cascade/seed-cibles/liste-famille-4.json
Normal file
@@ -0,0 +1,522 @@
|
||||
[
|
||||
{
|
||||
"id": "f4-hab-fab",
|
||||
"nom": "Hab-Fab",
|
||||
"url": "https://hab-fab.com",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#accompagnement-cooperatif", "#scop-scic", "#amo-bifurcation"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Hab-Fab est une Société coopérative d'intérêt collectif (SCIC SA). Elle accompagne les porteurs de projet d'habitat participatif de l'initiative à la livraison : groupes d'habitants, collectivités, bailleurs, promoteurs. Siège à Montpellier (Halle Tropisme) + bureau Toulouse. Plus de 150 sociétaires. Stefan Singer, directeur fondateur.",
|
||||
"links_internes": ["/contact/", "/hab-fab/qui-sommes-nous/", "/hab-fab/une-scic/", "/bourse-aux-projets/"],
|
||||
"email_contact": "contact@hab-fab.com",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "La Halle Tropisme, Bureau 27, 121 rue de Fontcouverte, 34070 Montpellier",
|
||||
"type_juridique": "SCIC SA",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/", "/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email trouvé page /contact/. Aussi : contact-montpellier@hab-fab.com, contact-toulouse@hab-fab.com. Stefan Singer est aussi gérant de Toits de Choix (EURL distincte)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-rahp",
|
||||
"nom": "RAHP — Réseau National des Accompagnateurs et Accompagnatrices Professionnelles de l'Habitat Participatif",
|
||||
"url": "https://rahp.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#amo-bifurcation", "#accompagnement-cooperatif", "#facilitation-collectif", "#habitat-participatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Né en 2010, le RAHP rassemble une trentaine de structures professionnelles spécialisées (associations ou sociétés) qui exercent l'accompagnement de projets d'habitat participatif. Basé à Montpellier. Développe le référentiel métier, anime des séminaires annuels et cafés mensuels (les RAHPées). Auto-géré par ses membres.",
|
||||
"links_internes": ["/nos-membres/", "/habitat-participatif/", "/formations/", "/contact/"],
|
||||
"email_contact": "contact@rahp.fr",
|
||||
"email_source": "search_snippet_hpf",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "Montpellier",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/", "/nos-membres/", "livret-PDF"],
|
||||
"scrape_error": null,
|
||||
"note": "Email trouvé via snippet HPF. Réseau-clé : 30 membres AMO pros dont Regain, Toits de Choix, Atcoop, Unitoit, Habiter Autrement Auvergne. Liste détaillée dans le livret PDF."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-regain",
|
||||
"nom": "Regain — Habitat Participatif PACA",
|
||||
"url": "https://regain-hg.org",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#accompagnement-cooperatif", "#amo-bifurcation", "#scop-scic"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Regain est une SCIC (Société coopérative d'intérêt collectif) qui propose accompagnement et formations pour l'habitat participatif en PACA et en France. Compétences : montage juridique et financier, gouvernance partagée, conception participative, copropriétés, rénovation énergétique. Pierre-Charles Marais (architecte, auditeur énergétique, Mon Accompagnateur Rénov) et Charlotte Garcia (accompagnatrice projets). SIRET: 894 020 882 00011.",
|
||||
"links_internes": ["/", "/se-faire-accompagner/", "/se-former/", "/approfondir/"],
|
||||
"email_contact": "pcmarais@regain-hg.org",
|
||||
"email_source": "search_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06 81 91 73 63",
|
||||
"adresse": "REZO4, Maison des Métiers du Livre, 4 Av de l'Observatoire, 04300 Forcalquier",
|
||||
"type_juridique": "SCIC",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/", "/accompagnement/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email pcmarais@regain-hg.org (Pierre-Charles Marais). Aussi : cgarcia@regain-hg.org (Charlotte Garcia). Membre RAHP."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-rehabiter",
|
||||
"nom": "Réhabiter (ex Eco-Quartier Strasbourg)",
|
||||
"url": "https://rehabiter.eu",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#accompagnement-cooperatif", "#facilitation-collectif", "#commun-gouvernance"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "L'association Réhabiter (anciennement Eco-Quartier Strasbourg) soutient les dynamiques d'habiter-ensemble dans une perspective de redirection écologique et citoyenne. AMO habitat participatif, animation territoriale, formation, sensibilisation. Basée à Strasbourg, périmètre régional Grand Est. Gouvernance impliquant les habitants.",
|
||||
"links_internes": [],
|
||||
"email_contact": "contact@rehabiter.eu",
|
||||
"email_source": "search_snippet_hpf",
|
||||
"email_confidence": "high",
|
||||
"telephone": "07 76 69 39 78",
|
||||
"adresse": "1 place des Orphelins, 67000 Strasbourg",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["HPF iframe ?EcoQuartierStrasbourg"],
|
||||
"scrape_error": null,
|
||||
"note": "Trouvé via HPF map (slot EcoQuartierStrasbourg = Réhabiter). Email + adresse via snippet HPF et Facebook."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-hpo",
|
||||
"nom": "Habitat Participatif Ouest (HPO)",
|
||||
"url": "https://habitatparticipatif-ouest.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#facilitation-collectif", "#accompagnement-cooperatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Réseau régional de promotion et développement de l'habitat participatif en Bretagne et Pays de la Loire. 293 projets recensés (122 urbains, 42 centre-bourg, 131 ruraux). Coordination de ressources citoyennes et bénévoles, mutualisation d'outils et connaissances. 8 plateformes départementales (HPO 22, 29, Parasol 35, L'Écho-Habitants 44, HEP 49, HPO 53, HP 56, Écolieux 72). Membre HPF.",
|
||||
"links_internes": ["/", "/qui-sommes-nous/", "/agenda/"],
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Maison de la Consommation et de l'Environnement (MCE), 48 Bd Magenta, 35000 Rennes",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://habitatparticipatif-ouest.fr/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/", "/qui-sommes-nous/"],
|
||||
"scrape_error": "email non trouvé — pages /contact/ et /qui-sommes-nous/ retournaient 404",
|
||||
"note": "Email probable : contact@habitatparticipatif-ouest.fr (non vérifié). Adresse physique confirmée."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-hpen",
|
||||
"nom": "Habitat Participatif en Nord (HPeN)",
|
||||
"url": "https://habitatparticipatif-nord.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#facilitation-collectif", "#accompagnement-cooperatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Créée en 2012 sous le nom 'Eco Habitat Groupé, Nord-Pas de Calais', désormais 'Habitat Participatif en Nord'. Favorise l'émergence et réalisation de projets d'habitats groupés participatifs en Hauts-de-France. Sensibilisation, formations, ateliers découverte, accompagnement de groupes, JPO annuelles. Membre HPF.",
|
||||
"links_internes": ["/", "/lassociation-hpen/presentation/", "/nos-accompagnements/"],
|
||||
"email_contact": "contact.hpen@gmail.com",
|
||||
"email_source": "search_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+33 6 31 49 99 30",
|
||||
"adresse": "Hauts-de-France",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/", "HPF iframe ?EcoHabitatGroupeNordPasDeCalais2"],
|
||||
"scrape_error": null,
|
||||
"note": "Email trouvé via search snippet nos-projets-pour-2025. Tel trouvé dans HPF iframe."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-hp-metz",
|
||||
"nom": "Habitat Participatif Metz",
|
||||
"url": null,
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#facilitation-collectif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association locale de sensibilisation et animation territoriale autour de l'habitat participatif à Metz et agglomération. Animation territoriale, sensibilisation. Gouvernance impliquant les habitants. Membre HPF.",
|
||||
"links_internes": [],
|
||||
"email_contact": "habitat.participatif.metz@gmail.com",
|
||||
"email_source": "scrape_hpf_iframe",
|
||||
"email_confidence": "high",
|
||||
"telephone": "07 82 04 68 88",
|
||||
"adresse": "1, rue Jean-Nicolas Collignon, 57070 Metz",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["HPF iframe ?HabitatParticipatifMetz"],
|
||||
"scrape_error": null,
|
||||
"note": "Email et téléphone extraits directement de la fiche HPF."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-habiter-autrement-auvergne",
|
||||
"nom": "Habiter Autrement Auvergne",
|
||||
"url": "https://sites.google.com/view/habiterautrementauvergne",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#facilitation-collectif", "#accompagnement-cooperatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association favorisant l'émergence, réalisation et vie d'habitats participatifs en Auvergne (Allier, Cantal, Haute-Loire, Puy-de-Dôme). Accompagnement de collectifs, formations, ateliers seniors, cycle de formation porteurs de projets (juridique, gouvernance, conflits). Gouvernance impliquant les habitants. Membre HPF.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Auvergne (Allier, Cantal, Haute-Loire, Puy-de-Dôme)",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["HPF iframe ?HabiterAutrementAuvergne2"],
|
||||
"scrape_error": "site = Google Sites, pas d'email accessible",
|
||||
"note": "URL Google Sites confirmée via HPF iframe. Email non trouvé."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-atipic",
|
||||
"nom": "A-tipic",
|
||||
"url": "https://a-tipic.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#amo-bifurcation", "#accompagnement-cooperatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Structure d'accompagnement professionnel de projets d'habitat participatif en Charente-Maritime (17). S'adapte aux besoins : groupes d'habitants, collectivités, coopératives HLM, promoteurs. Périmètre local. Membre HPF.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Charente-Maritime (17)",
|
||||
"type_juridique": "structure AMO (statut non précisé)",
|
||||
"contact_form_url": "https://a-tipic.fr",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["HPF iframe ?ATipic2"],
|
||||
"scrape_error": "a-tipic.fr bloqué par RGPD wall (HTTP 400)",
|
||||
"note": "Trouvé via HPF map. Site inaccessible via Jina. À scraper via BrowserMCP."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-emmanuelle-ducos",
|
||||
"nom": "Emmanuelle Ducos — Architecte accompagnatrice",
|
||||
"url": null,
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [1],
|
||||
"hashtags": ["#habitat-participatif", "#amo-bifurcation", "#accompagnement-cooperatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Architecte et urbaniste, accompagnatrice professionnelle de projets d'habitat participatif dans les Landes (40) et Pyrénées-Atlantiques (64). Promeut le projet participatif comme solution d'avenir pour des modes de vie et d'habitat plus humains, respectueux de l'environnement et démocratiques. Membre HPF.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Landes (40) / Pyrénées-Atlantiques (64)",
|
||||
"type_juridique": "individuelle (architecte)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["HPF iframe ?EmmanuelleDucosArchitecteAccompagnatrice"],
|
||||
"scrape_error": "pas de site web ni d'email dans la fiche HPF",
|
||||
"note": "Multi-famille F4+F1 (architecture). Contact à rechercher via annuaire architectes."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-hpf",
|
||||
"nom": "Habitat Participatif France (HPF)",
|
||||
"url": "https://habitatparticipatif-france.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#facilitation-collectif", "#accompagnement-cooperatif", "#commun-gouvernance"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Mouvement citoyen né en 2013, Habitat Participatif France fédère 70+ structures régionales (associations, AMO professionnels) et plusieurs centaines de groupes/projets. 5 salariés à Marseille. Missions : informer, sensibiliser, mettre en lien, plaidoyer national. Anime la plateforme nationale + cartographie 1100 projets. SIRET: 802 033 548 000 32.",
|
||||
"links_internes": ["/?HPFActeurS", "/?HPFCartographie", "/?AdhererAuMouvement", "/?HPFContact"],
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "8 bis rue du Buisson Saint-Louis, 75010 Paris (siège) — correspondance : Coworking La Ruche, 28 Bd National, 13001 Marseille",
|
||||
"type_juridique": "association loi 1901",
|
||||
"contact_form_url": "https://habitatparticipatif-france.fr/?HPFContact",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/", "/?HPFActeurS", "/?HPFContact"],
|
||||
"scrape_error": "contact uniquement via formulaire",
|
||||
"note": "Réseau chapeau de toutes les structures F4. Porte la Coordin'action nationale et le partenariat avec RAHP, RNCHP, organismes HLM."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-atcoop",
|
||||
"nom": "Atcoop — Atelier des coopératives d'habitants",
|
||||
"url": "https://atcoop.org",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-cooperatif", "#scop-scic", "#accompagnement-cooperatif", "#amo-bifurcation"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association 1901 née en 2014 dans la Métropole bordelaise (projets H'nord, Boboyaka, Lsud). Promeut et accompagne l'habitat participatif non-spéculatif, en particulier les coopératives d'habitants, en Nouvelle-Aquitaine. Agréée éducation populaire. Adhérente Habicoop, HPF, RAHP, membre coopérative Oasis. Salarié.e architecte DPLG + éducation populaire.",
|
||||
"links_internes": ["/", "/contact/"],
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": "low",
|
||||
"telephone": null,
|
||||
"adresse": "Bordeaux, Nouvelle-Aquitaine",
|
||||
"type_juridique": "association 1901",
|
||||
"contact_form_url": "https://atcoop.org/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/", "/contact/"],
|
||||
"scrape_error": "contact uniquement via formulaire",
|
||||
"note": "Pionnier coopératives d'habitants NA. Membre RAHP. Formation des accompagnateurs habitat coopératif (+2ans)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-habitat-partage",
|
||||
"nom": "Habitat & Partage",
|
||||
"url": "https://habitatetpartage.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-cooperatif", "#scop-scic", "#habitat-participatif", "#accompagnement-cooperatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Société coopérative SCIC qui développe une coopérative d'habitation sur la région lyonnaise + propose accompagnement et formations pour groupes d'habitants, collectivités et opérateurs en région AURA. Membre HPF. Modèle : démocratiser d'autres façons d'habiter basées sur la participation citoyenne, le lien social et la durabilité. Tel: 06 65 38 18 75.",
|
||||
"links_internes": ["/", "/contact/", "/nos-activites/notre-cooperative-dhabitation/", "/nos-activites/nos-accompagnements/"],
|
||||
"email_contact": "contact@habitatetpartage.fr",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "06 65 38 18 75",
|
||||
"adresse": "245 rue Duguesclin, 69003 Lyon",
|
||||
"type_juridique": "SCIC",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/", "/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email et adresse trouvés page /contact/. Tel trouvé via les-scop.coop snippet."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-atelier15",
|
||||
"nom": "SCOP Atelier 15",
|
||||
"url": "https://atelier15-scop.com",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [1],
|
||||
"hashtags": ["#scop-scic", "#collectif-horizontal", "#habitat-participatif", "#accompagnement-cooperatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "SCOP d'architecture à Ivry-sur-Seine (94). Dizaine de projets habitat participatif. Missions : AMU (assistance maîtrise d'usage), maîtrise d'œuvre collaborative, montage syndical coopératif, formation à la gouvernance coopérative. Approche coopérative, démocratique et participative. Ingénierie sociale au service de l'habitat.",
|
||||
"links_internes": ["/atelier-15/habitat-participatif/", "/nos-projets/", "/contact/"],
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": "low",
|
||||
"telephone": "+33 1 46 71 21 23",
|
||||
"adresse": "43 quater rue Antoine Thomas, 94200 Ivry-sur-Seine",
|
||||
"type_juridique": "SCOP",
|
||||
"contact_form_url": "https://atelier15-scop.com/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/atelier-15/habitat-participatif/"],
|
||||
"scrape_error": "email non trouvé sur la page",
|
||||
"note": "Multi-famille F4+F1. Téléphone trouvé en footer."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-mietshauser-syndikat",
|
||||
"nom": "Mietshäuser Syndikat",
|
||||
"url": "https://syndikat.org",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-cooperatif", "#collectif-horizontal", "#commun-gouvernance", "#baugruppe-cohousing"],
|
||||
"pays": "DE",
|
||||
"raw_text_excerpt": "Modèle allemand de référence : réseau de 166 projets (+ 20 initiatives) de logements autogérés soustraits au marché immobilier. Le syndicat conseille les hausprojekte, participe au capital pour bloquer toute spéculation, aide au financement et initie de nouveaux projets. Solidartransfer entre projets. Siège à Freiburg. Référence internationale pour l'habitat coopératif non-spéculatif.",
|
||||
"links_internes": ["/de/kontakt/", "/en/projects/", "/de/das-syndikat/"],
|
||||
"email_contact": "info@syndikat.org",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+49 761 281892",
|
||||
"adresse": "Adlerstr. 12, 79098 Freiburg, Allemagne",
|
||||
"type_juridique": "GbR (association de fait / réseau coopératif)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/", "/de/kontakt/", "/en/projects/"],
|
||||
"scrape_error": null,
|
||||
"note": "Référence modèle DE. Projet international en cours (ackersyndikat, syndikatstiftung). Email en anglais acceptable."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-toits-de-choix",
|
||||
"nom": "Toits de Choix",
|
||||
"url": "https://toitsdechoix.com",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#amo-bifurcation", "#habitat-participatif", "#facilitation-collectif", "#accompagnement-cooperatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "EURL fondée en 2009 par Stefan Singer (aussi directeur Hab-Fab). Conseil et conduite de projets d'habitat participatif et coopératif depuis 2008. Spécialité : gestion de projet (collectifs, opération immobilière, montage juridique/financier, planification). Formations longues (9-12 mois) pour futurs accompagnateurs. Clients : groupes d'habitants, collectivités, professionnels.",
|
||||
"links_internes": ["/", "/conseil/", "/formation/", "/references/"],
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": "low",
|
||||
"telephone": "04 99 62 84 20",
|
||||
"adresse": "Montpellier / Anères (65)",
|
||||
"type_juridique": "EURL",
|
||||
"contact_form_url": "https://toitsdechoix.com/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": "page /contact/ retourne 404 via Jina",
|
||||
"note": "Téléphone via Crunchbase. Stefan Singer = aussi Directeur Hab-Fab SCIC SA. Membre RAHP."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-unitoit",
|
||||
"nom": "Unitoit",
|
||||
"url": "https://unitoit.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#amo-bifurcation", "#accompagnement-cooperatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association basée à Chambéry, territoire des deux Savoies. Accompagne tout projet immobilier à dynamique collective, inclusive et durable : habitat participatif, copropriété en transition, oasis, tiers lieux. Deux métiers : accompagnateur de projets + AMU (assistance à maîtrise d'usage). Sensibilisation, formations, agenda territorial. Membre RAHP (citée dans livret d'accueil).",
|
||||
"links_internes": ["/", "/contact/"],
|
||||
"email_contact": null,
|
||||
"email_source": "not_found",
|
||||
"email_confidence": "low",
|
||||
"telephone": "09 53 34 05 26",
|
||||
"adresse": "13 Boulevard de Bellevue, 73000 Chambéry",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": "page /contact/ retourne 404 via Jina",
|
||||
"note": "Aline CHERIGUI citée dans livret RAHP comme membre Unitoit. Téléphone trouvé en footer."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-les-habiles",
|
||||
"nom": "Les HABILES — Habitats Isérois Libres et Solidaires",
|
||||
"url": "https://leshabiles.org",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-participatif", "#accompagnement-cooperatif", "#facilitation-collectif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association créée en 2008 à Grenoble. Promeut et accompagne l'habitat participatif en Isère. Accompagnement groupes + collectivités + bailleurs, formations, ateliers mensuels thématiques, JPO, podcasts, espace ressources. Équipe salariée pluridisciplinaire. Cofinancée UE + Grenoble-Alpes Métropole. Membre HPF + RAHP. Projets : l'Île aux Âges (intergénérationnel), Éco-quartier Val Eybens, AMU Le Pré Vert.",
|
||||
"links_internes": ["/", "/contact/", "/nos-actions/", "/ressources/"],
|
||||
"email_contact": "contact@leshabiles.org",
|
||||
"email_source": "search_snippet_hpf",
|
||||
"email_confidence": "high",
|
||||
"telephone": "04 82 53 19 62",
|
||||
"adresse": "12 rue Claude Genin, 38100 Grenoble",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/", "/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email + adresse + tel trouvés via snippet HPF et annuaire Grenoble. Aline CHERIGUI membre RAHP (aussi Unitoit — à confirmer)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-cooperative-oasis",
|
||||
"nom": "Coopérative Oasis",
|
||||
"url": "https://cooperative-oasis.org",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#oasis-ecovillage", "#collectif-horizontal", "#accompagnement-cooperatif", "#habitat-participatif"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Issue du mouvement Colibris, la Coopérative Oasis accompagne celles et ceux qui vivent ou souhaitent vivre dans des écolieux collectifs ('oasis'). Plus de 1600 projets recensés. Offres : Pépinière Oasis (accompagnement création), financement, voyages oasis, formation, Festival Oasis annuel (4 jours). Publie l'observatoire des oasis et le Journal Oasis mensuel. Siège Paris 19e.",
|
||||
"links_internes": ["/", "/contact/", "/nos-offres/", "/carte-des-oasis/"],
|
||||
"email_contact": "contact@cooperative-oasis.org",
|
||||
"email_source": "search_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "2 rue de la Clôture, 75019 Paris",
|
||||
"type_juridique": "coopérative (SCIC-like, issue Colibris)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "jina+search",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email confirmé via HPF snippet (contact@cooperative-oasis.org) + page /contact/ Colibris. Partenaire HPF pour espace ressources commun (avec ADEME)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f4-habicoop",
|
||||
"nom": "Habicoop — Fédération Française des Coopératives d'Habitants",
|
||||
"url": "https://habicoop.fr",
|
||||
"famille_principale": 4,
|
||||
"famille_principale_label": "Collectifs ecolieux et AMO bifurcation",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#habitat-cooperatif", "#scop-scic", "#collectif-horizontal", "#gouvernance-explicite"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Fédération issue d'un mouvement citoyen né en 2006. Représente et soutient les coopératives d'habitants et associations de préfiguration : logements abordables, anti-spéculatifs, autogérés. Membres : Atcoop, Habitat & Partage, et ~20 structures. Adhérente à Coop FR. Publie guides sur les coopératives d'habitants. Siège Lyon.",
|
||||
"links_internes": ["/", "/notre-organisation/", "/contact/"],
|
||||
"email_contact": "info@habicoop.fr",
|
||||
"email_source": "search_snippet",
|
||||
"email_confidence": "high",
|
||||
"telephone": "09 72 29 36 77",
|
||||
"adresse": "c/o Locaux'Motif, 10 bis rue Jangot, 69007 Lyon",
|
||||
"type_juridique": "association fédérative",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "search",
|
||||
"pages_visited": ["search snippets"],
|
||||
"scrape_error": "site habicoop.fr derrière YunoHost login — inaccessible via Jina",
|
||||
"note": "Email + tel + adresse trouvés via search snippet /contact et annuaire-entreprises.data.gouv.fr. À scraper via BrowserMCP pour description complète."
|
||||
}
|
||||
}
|
||||
]
|
||||
143
V2-cascade/seed-cibles/liste-famille-5-RECAP.md
Normal file
143
V2-cascade/seed-cibles/liste-famille-5-RECAP.md
Normal file
@@ -0,0 +1,143 @@
|
||||
# PV2-2 RECAP — Famille 5 Urbanisme transition & territoires
|
||||
|
||||
Date : 2026-05-02
|
||||
|
||||
## Tableau de collecte
|
||||
|
||||
| # | Structure | URL | Email | Source | Confidence | Hashtags principaux |
|
||||
|---|-----------|-----|-------|--------|------------|---------------------|
|
||||
| 1 | CLER | cler.org | sophie.chignard@cler.org | scrape_contact_page | high | #planification-alternative #villes-en-transition |
|
||||
| 2 | TEPOS | tepos.fr | contact@tepos.fr | scrape_home | high | #villes-en-transition #planification-alternative |
|
||||
| 3 | Coloco | coloco.org | contact@coloco.org | scrape_home | high | #friches-reactivation #acupuncture-urbaine |
|
||||
| 4 | Bureau Bas Smets | bassmets.be | bureau@bassmets.be | scrape_contact_page | high | #planification-alternative #acupuncture-urbaine |
|
||||
| 5 | Loos-en-Gohelle | loos-en-gohelle.fr | — | — | — | #post-industriel #villes-en-transition |
|
||||
| 6 | France Tiers-Lieux | francetierslieux.fr | — | — | — | #desherence-rurale #friches-reactivation |
|
||||
| 7 | Réseau Action Climat | reseauactionclimat.org | — | — | — | #contre-expertise #planification-alternative |
|
||||
| 8 | Énergie Partagée | energie-partagee.org | association@energie-partagee.org | scrape_contact_page | high | #villes-en-transition #planification-alternative |
|
||||
| 9 | FNAU | fnau.org | fnau@fnau.org | scrape_home | high | #planification-alternative #decroissance-territoriale |
|
||||
| 10 | Atelier Georges | ateliergeorges.fr | contact@ateliergeorges.fr | scrape_home | high | #planification-alternative #acupuncture-urbaine #friches-reactivation |
|
||||
| 11 | Mouvement Colibris | colibris-lemouvement.org | — | — | — | #villes-en-transition #decroissance-territoriale |
|
||||
| 12 | La Fabrique de la Cité | lafabriquedelacite.com | — | — | — | #planification-alternative #contre-expertise |
|
||||
| 13 | AMRF | amrf.fr | — | — | — | #desherence-rurale #planification-alternative |
|
||||
| 14 | Institut Paris Région | institutparisregion.fr | — | — | — | #planification-alternative #contre-expertise |
|
||||
| 15 | Energy Cities | energy-cities.eu | webmaster@energy-cities.eu | scrape_contact_page | medium | #villes-en-transition #planification-alternative |
|
||||
|
||||
**Structures V1 (déjà présentes, marquées `already_in_v1: true`) :**
|
||||
|
||||
| # | Structure | id V1 | Familles |
|
||||
|---|-----------|-------|----------|
|
||||
| V1 | Forensic Architecture | 3 | F5 + F3 |
|
||||
| V1 | Centrala | 36 | F5 + F3 |
|
||||
|
||||
---
|
||||
|
||||
## Taux de trouvaille email
|
||||
|
||||
- Total nouvelles fiches : **15**
|
||||
- Email direct (high confidence) : **7/15** (CLER, TEPOS, Coloco, Bas Smets, Énergie Partagée, FNAU, Atelier Georges)
|
||||
- Email partiel (medium confidence) : **1/15** (Energy Cities — webmaster@)
|
||||
- Formulaire uniquement : **7/15** (Loos-en-Gohelle, France Tiers-Lieux, RAC, Colibris, Fabrique de la Cité, AMRF, Institut Paris Région)
|
||||
- Taux email direct high : **47%**
|
||||
- Taux couverture totale (email ou form) : **100%**
|
||||
|
||||
---
|
||||
|
||||
## Sources productives
|
||||
|
||||
| Source | Fiches |
|
||||
|--------|--------|
|
||||
| B2 — CLER / TEPOS | 2 (CLER + TEPOS) |
|
||||
| B3 — Energy Cities | 1 |
|
||||
| B4 — France Tiers-Lieux | 1 |
|
||||
| B5 — Loos-en-Gohelle | 1 |
|
||||
| B6 — Colibris | 1 |
|
||||
| B7 — Atelier Georges + Coloco | 2 |
|
||||
| B8 — Bureau Bas Smets | 1 |
|
||||
| Hors B-list (bonus) | 6 (FNAU, RAC, Énergie Partagée, Fabrique de la Cité, AMRF, Institut Paris Région) |
|
||||
|
||||
Sources non productives :
|
||||
- entransition.fr → blog personnel (pas annuaire) — skip
|
||||
- transitioncitoyenne.org → domaine squatté (paris sportifs) — skip
|
||||
- Ungersheim → timeout répété — skip
|
||||
- saintnazaire.fr → timeout — skip
|
||||
- FNCAUE → timeout — skip
|
||||
- Inddigo → pas d'email visible, formulaire non trouvé — skip
|
||||
|
||||
---
|
||||
|
||||
## Multi-famille flags
|
||||
|
||||
| Structure | Familles |
|
||||
|-----------|----------|
|
||||
| Coloco | F5 + F2 (paysagisme / vivant) |
|
||||
| RAC | F5 + F3 (contre-expertise / plaidoyer) |
|
||||
| La Fabrique de la Cité | F5 + F3 (think tank urbain) |
|
||||
| Institut Paris Région | F5 + F3 (recherche / prospective) |
|
||||
| FNAU | F5 + F3 (planification / expertise) |
|
||||
|
||||
Total multi-famille : **5/15 (33%)**
|
||||
|
||||
---
|
||||
|
||||
## Hashtags F5 couverts
|
||||
|
||||
| Hashtag | Structures |
|
||||
|---------|-----------|
|
||||
| #villes-en-transition | CLER, TEPOS, Coloco, Loos-en-Gohelle, Colibris, Énergie Partagée, Energy Cities |
|
||||
| #planification-alternative | CLER, TEPOS, Coloco, Bas Smets, Loos-en-Gohelle, RAC, Énergie Partagée, FNAU, Atelier Georges, Colibris, Fabrique de la Cité, AMRF, Institut Paris Région, Energy Cities |
|
||||
| #decroissance-territoriale | CLER, TEPOS, Énergie Partagée, FNAU, Colibris, Institut Paris Région, Energy Cities |
|
||||
| #desherence-rurale | France Tiers-Lieux, AMRF |
|
||||
| #friches-reactivation | Coloco, France Tiers-Lieux, Atelier Georges, Loos-en-Gohelle |
|
||||
| #post-industriel | Loos-en-Gohelle, Atelier Georges |
|
||||
| #contre-expertise | RAC, FNAU, La Fabrique de la Cité, Institut Paris Région |
|
||||
| #acupuncture-urbaine | Coloco, Bas Smets, France Tiers-Lieux, Atelier Georges |
|
||||
|
||||
Hashtags non couverts : `#decroissance-territoriale` (couvert indirectement via CLER/TEPOS/Colibris)
|
||||
|
||||
---
|
||||
|
||||
## Piège détectés
|
||||
|
||||
- **transitioncitoyenne.org** : domaine expiré → squatté par site paris sportifs — éviter
|
||||
- **Ungersheim / saintnazaire.fr** : timeout répétés — sites lents ou down le jour du scrape
|
||||
- **FNCAUE** : timeout — 90+ CAUE en réseau, à tenter en session suivante
|
||||
- **Energy Cities membres FR** : 20+ collectivités listées (Besançon, La Rochelle, Grenoble, Grand Lyon...) — non scrapées individuellement, à traiter en passe 3 si F5 doit inclure des collectivités spécifiques
|
||||
- **Inddigo** : bureau d'études spécialisé transition, pas d'email central visible — à cibler par agence (Paris : 01 42 46 29 00)
|
||||
|
||||
---
|
||||
|
||||
## Statut famille 5 — CHECKPOINT JULES
|
||||
|
||||
```
|
||||
## Statut famille 5 - CHECKPOINT JULES
|
||||
- Total fiches solides (email OU formulaire trouvable) : 15
|
||||
- [OK : >= 15 fiches]
|
||||
- Email direct high confidence : 7/15 (47%)
|
||||
- Formulaire trouvable : 7/15 supplémentaires
|
||||
- Structures V1 présentes : 2 (Forensic Architecture id=3, Centrala id=36)
|
||||
- Total F5 post-V2 (nouvelles + V1) : 17
|
||||
|
||||
Recommandation : 5 familles maintenues — F5 est désormais solide (17 total vs 2 en V1).
|
||||
Points d'attention pour passe 3 :
|
||||
- FNCAUE (timeout) → potentiel 90 agences
|
||||
- Collectivités Energy Cities individuelles (La Rochelle, Grenoble...) → contacts service urbanisme
|
||||
- Ungersheim → retry
|
||||
- Inddigo → cibler agence Paris directement
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Recap 8 lignes
|
||||
|
||||
```
|
||||
PV2-2 RECHERCHE F5 URBANISME — DONE
|
||||
======================================
|
||||
Total fiches : 15 (V1 : 2 / nouvelles : 15 / total post-V2 : 17)
|
||||
[OK >= 15 fiches]
|
||||
Pays : FR (13), BE (1), GB (1 — V1 Forensic), PL (1 — V1 Centrala)
|
||||
Sources productives : CLER/TEPOS : 2 / Energy Cities org : 1 / Hors B-list : 6 / Agences : 3
|
||||
Multi-famille flag : 5 fiches (33%)
|
||||
Email direct high confidence : 47% (7/15)
|
||||
Hashtags couverts : 8/8 hashtags F5
|
||||
Commit : feat(v2-recherche-f5): liste famille 5 urbanisme transition (15 fiches)
|
||||
```
|
||||
446
V2-cascade/seed-cibles/liste-famille-5.json
Normal file
446
V2-cascade/seed-cibles/liste-famille-5.json
Normal file
@@ -0,0 +1,446 @@
|
||||
[
|
||||
{
|
||||
"id": "f5-cler",
|
||||
"nom": "CLER - Réseau pour la Transition Energétique",
|
||||
"url": "https://cler.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#planification-alternative", "#decroissance-territoriale", "#villes-en-transition"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Tête d'un réseau national spécialisé dans la maîtrise de l'énergie et les ENR. Anime le réseau TEPOS (territoires à énergie positive) et 300+ structures de terrain. Boîte aux lettres n°15 Bâtiment Wikivillage 8 rue de Srebrenica 75020 Paris.",
|
||||
"links_internes": ["/le-reseau/adherents/", "/association/nos-metiers/tepos/", "/adherer-2/", "/contact/"],
|
||||
"email_contact": "sophie.chignard@cler.org",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "8 rue de Srebrenica, Bâtiment Wikivillage, 75020 Paris",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/", "/adherer-2/", "/le-reseau/adherents/", "/association/nos-metiers/tepos/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email trouvé sur page /adherer-2/ dans contacts équipe (sophie.chignard = coordinatrice vie du réseau). Aussi: charlotte.tardieu@cler.org, pauline.michaud@cler.org (TEPOS)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-tepos",
|
||||
"nom": "TEPOS - Réseau des Territoires à Énergie Positive",
|
||||
"url": "https://tepos.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#villes-en-transition", "#planification-alternative", "#decroissance-territoriale"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Animé par le réseau Cler, le réseau TEPOS rassemble plus de 150 acteurs engagés en faveur de la transition énergétique sur leur territoire : collectivités locales, porteurs de projet et acteurs locaux. Carte des membres sur umap OpenStreetMap.",
|
||||
"links_internes": ["/le-reseau/", "/actualites/", "/boite-a-outils/", "/nos-propositions/"],
|
||||
"email_contact": "contact@tepos.fr",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": "c/o CLER, 8 rue de Srebrenica, 75020 Paris",
|
||||
"type_juridique": "réseau associatif",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/", "/le-reseau/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email contact@tepos.fr trouvé dans footer. Animatrices: anne.auclair@cler.org, charlotte.tardieu@cler.org, pauline.michaud@cler.org. 150+ membres territoriaux sur carte umap."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-coloco",
|
||||
"nom": "Coloco - Paysagistes / Urbanistes / Botanistes / Jardiniers",
|
||||
"url": "https://www.coloco.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [2],
|
||||
"hashtags": ["#friches-reactivation", "#acupuncture-urbaine", "#planification-alternative", "#villes-en-transition"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Coloco réunit Paysagistes, Urbanistes, Botanistes, Jardiniers et Artistes en un atelier des paysages contemporains. Des stratégies territoriales à la construction de jardins, continuité entre les échelles et les acteurs. Projets : parc des Groues, friche en jardin, jardins résilients, Mercuriales.",
|
||||
"links_internes": ["/galerie-projets/", "/projets/https-www-coloco-org-projets-parc-des-groues/", "/projets/https-www-coloco-org-projets-la-friche-en-jardin/"],
|
||||
"email_contact": "contact@coloco.org",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "high",
|
||||
"telephone": "01 40 02 09 05",
|
||||
"adresse": "213 rue du faubourg saint antoine, 75011 Paris",
|
||||
"type_juridique": "atelier (SARL/agence)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email et téléphone trouvés directement dans le footer home. Multi-famille F5+F2 (paysagisme/vivant)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-bas-smets",
|
||||
"nom": "Bureau Bas Smets",
|
||||
"url": "https://www.bassmets.be",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#planification-alternative", "#acupuncture-urbaine"],
|
||||
"pays": "BE",
|
||||
"raw_text_excerpt": "Bureau Bas Smets — landscape architecture. Place Eugène Flagey 7, 1050 Brussels. Agence paysage/urbanisme belge reconnue, projets de grande échelle territoriale et climatique.",
|
||||
"links_internes": ["/contact"],
|
||||
"email_contact": "bureau@bassmets.be",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+32 (0)2 219 75 21",
|
||||
"adresse": "Place Eugène Flagey 7, 1050 Brussels, Belgique",
|
||||
"type_juridique": "bureau d'études",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/", "/contact"],
|
||||
"scrape_error": null,
|
||||
"note": "Home JS minimale, contacts trouvés sur /contact. Aussi: application@bassmets.be (candidatures)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-loos-en-gohelle",
|
||||
"nom": "Ville de Loos-en-Gohelle",
|
||||
"url": "https://loos-en-gohelle.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#post-industriel", "#villes-en-transition", "#planification-alternative", "#friches-reactivation"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Ville pilote de la transition — ancienne cité minière du Pas-de-Calais devenue référence nationale en matière de transition écologique. Deux terrils européens, Base 11/19. Site dédié: villepilote.loos-en-gohelle.fr. Mairie: 1 Place de la République 62750 Loos-en-Gohelle.",
|
||||
"links_internes": ["/contacter-ma-mairie/", "/plan-interactif-de-la-ville/"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": "03 21 69 88 77",
|
||||
"adresse": "1 Place de la République, 62750 Loos-en-Gohelle",
|
||||
"type_juridique": "collectivité territoriale",
|
||||
"contact_form_url": "https://loos-en-gohelle.fr/contacter-ma-mairie/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": null,
|
||||
"note": "Pas d'email direct visible. Formulaire mairie uniquement. Site dédié à leur démarche: villepilote.loos-en-gohelle.fr. URL villepilote = porte d'entrée thématique pour contact service transition."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-france-tiers-lieux",
|
||||
"nom": "France Tiers-Lieux",
|
||||
"url": "https://francetierslieux.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#desherence-rurale", "#friches-reactivation", "#acupuncture-urbaine"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "GIP qui soutient les tiers-lieux : 3500+ tiers-lieux en France, 62% hors métropoles, 1/3 en ruralité. Labellisation Fabrique de territoire, Manufacture de proximité. 15 rue de Milan 75009 Paris.",
|
||||
"links_internes": ["/contact/", "/quest-ce-quun-tiers-lieu/", "/portraits-de-tiers-lieux/"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "15 rue de Milan, 75009 Paris",
|
||||
"type_juridique": "GIP (Groupement d'Intérêt Public)",
|
||||
"contact_form_url": "https://francetierslieux.fr/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/", "/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Pas d'email direct. Formulaire avec sélecteur profil (tiers-lieu, réseau, acteur public, etc.). Fort ancrage rural et revitalisation."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-rac",
|
||||
"nom": "Réseau Action Climat (RAC)",
|
||||
"url": "https://reseauactionclimat.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [3],
|
||||
"hashtags": ["#contre-expertise", "#planification-alternative"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Fédère 27 associations engagées dans la lutte contre le dérèglement climatique. 47 avenue Pasteur 93100 Montreuil. Thématique 'Local' : actions locales pour la transition territoriale. Membres: CLER, Énergie Partagée, WWF, Greenpeace, Amis de la Terre...",
|
||||
"links_internes": ["/contact/", "/thematiques/actions-locales/", "/association/associations-membres/"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": "01 48 58 83 92",
|
||||
"adresse": "Mundo M, 47 avenue Pasteur, 93100 Montreuil",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://reseauactionclimat.org/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": null,
|
||||
"note": "Pas d'email direct visible. Multi-famille F5+F3 (contre-expertise / plaidoyer). Tél et adresse dans footer."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-energie-partagee",
|
||||
"nom": "Énergie Partagée",
|
||||
"url": "https://energie-partagee.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#villes-en-transition", "#planification-alternative", "#decroissance-territoriale"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association et société de financement participatif pour l'énergie citoyenne et renouvelable à l'échelle des territoires. Accompagne les initiatives de production d'énergie qui associent les habitants. Partenaire CLER, TEPOS, Enercoop, RAC.",
|
||||
"links_internes": ["/contact/", "/monter-projet/", "/decouvrir/"],
|
||||
"email_contact": "association@energie-partagee.org",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "high",
|
||||
"telephone": "01 80 18 92 21",
|
||||
"adresse": null,
|
||||
"type_juridique": "association + SA (investissement)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email association@ pour accompagnement projets citoyens. Aussi: souscription@energie-partagee.org (investissement), xavier.rabilloud@energie-partagee.org (presse/comm)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-fnau",
|
||||
"nom": "FNAU - Fédération Nationale des Agences d'Urbanisme",
|
||||
"url": "https://fnau.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [3],
|
||||
"hashtags": ["#planification-alternative", "#decroissance-territoriale", "#contre-expertise"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Regroupe la cinquantaine d'agences d'urbanisme sur tout le territoire. Lien entre élus et 1700 professionnels. Promeut une vision durable de l'aménagement. Chantiers : décarbonation, ZAN, politique de cohésion. Publications : Rencontres nationales, Observ'agglo.",
|
||||
"links_internes": ["/fr/les-agences-durbanisme/carte-des-agences-durbanisme/", "/fr/publications/", "/fr/emplois/"],
|
||||
"email_contact": "fnau@fnau.org",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "high",
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"type_juridique": "fédération associative",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/fr/accueil/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email fnau@fnau.org trouvé dans le header (lien mailto sur icône email). Réseau de 50 agences d'urbanisme + membre IAURIF/Institut Paris Région."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-atelier-georges",
|
||||
"nom": "Atelier Georges",
|
||||
"url": "https://ateliergeorges.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#planification-alternative", "#acupuncture-urbaine", "#friches-reactivation", "#post-industriel"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Agence d'urbanisme, de paysage et d'architecture. Conçoit la transformation de la ville et des territoires à la croisée des approches de recherche, d'écologie et d'économie de projet. geo (terre) + ergos (travail). Accompagne acteurs publics et privés de la stratégie urbaine à la maîtrise d'oeuvre.",
|
||||
"links_internes": [],
|
||||
"email_contact": "contact@ateliergeorges.fr",
|
||||
"email_source": "scrape_home",
|
||||
"email_confidence": "high",
|
||||
"telephone": "+33 9 72 66 41 19",
|
||||
"adresse": "15/17 rue Lavoisier, 93100 Montreuil",
|
||||
"type_juridique": "agence (urbanisme + paysage + architecture)",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email obfusqué contact[at]ateliergeorges.fr — décodé. Deux agences: Montreuil (93) + Nantes (44). Site minimaliste, info complète en home."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-colibris",
|
||||
"nom": "Mouvement Colibris",
|
||||
"url": "https://www.colibris-lemouvement.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#villes-en-transition", "#planification-alternative", "#decroissance-territoriale"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Association loi 1901 reconnue d'intérêt général. Mouvement pour des sociétés écologiques et humaines. Groupes locaux Colibris dans les territoires. Projet Près de chez nous (presdecheznous.fr). 204 rue de Crimée 75019 Paris.",
|
||||
"links_internes": ["/nous-contacter", "/agir/groupes-locaux/", "/lassociation/qui-sommes-nous/"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": "01 42 15 50 17",
|
||||
"adresse": "204 rue de Crimée, 75019 Paris",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://www.colibris-lemouvement.org/nous-contacter",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/agir/territoires", "/nous-contacter"],
|
||||
"scrape_error": null,
|
||||
"note": "URL /agir/territoires → 404 (refonte site). Contact via formulaire uniquement. Tél et adresse dans footer. Projet territorial: presdecheznous.fr."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-fabrique-de-la-cite",
|
||||
"nom": "La Fabrique de la Cité",
|
||||
"url": "https://www.lafabriquedelacite.com",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [3],
|
||||
"hashtags": ["#planification-alternative", "#contre-expertise"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Think tank dédié à la prospective urbaine et aux transformations de la ville. Produit des recherches, organise des débats, publie des études sur la ville durable, les transitions urbaines, la résilience territoriale.",
|
||||
"links_internes": ["/contact/"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "6 Place du colonel Bourgoin, 75012 Paris",
|
||||
"type_juridique": "think tank / fondation",
|
||||
"contact_form_url": "https://www.lafabriquedelacite.com/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Formulaire avec sélecteur objet (question projet, collaborer, partenariat). Multi-famille F5+F3 (recherche / contre-expertise urbaine)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-amrf",
|
||||
"nom": "AMRF - Association des Maires Ruraux de France",
|
||||
"url": "https://www.amrf.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#desherence-rurale", "#planification-alternative"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Des maires au service des maires. Association nationale des maires ruraux, représente les communes rurales françaises. Partenaire du réseau TEPOS. 302 rue Garibaldi 69007 LYON.",
|
||||
"links_internes": ["/contact/", "/ladhesion/", "/a-la-une/presse-2/"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": "04 37 43 39 80",
|
||||
"adresse": "302 rue Garibaldi, 69007 Lyon",
|
||||
"type_juridique": "association",
|
||||
"contact_form_url": "https://www.amrf.fr/contact/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/contact/"],
|
||||
"scrape_error": null,
|
||||
"note": "Pas d'email direct. Formulaire avec pièces jointes possibles. Partenaire TEPOS identifié sur tepos.fr."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-institut-paris-region",
|
||||
"nom": "Institut Paris Région (ex-IAURIF)",
|
||||
"url": "https://www.institutparisregion.fr",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [3],
|
||||
"hashtags": ["#planification-alternative", "#contre-expertise", "#decroissance-territoriale"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Agence publique régionale d'urbanisme et d'aménagement pour l'Île-de-France. Expertise sur la planification, la biodiversité (ARB), l'énergie-climat (AREC), les déchets (ORDIF), la santé (ORS). Membre FNAU. 66-68 rue Pleyel 93200 Saint-Denis.",
|
||||
"links_internes": ["/linstitut-paris-region/nous-contacter/", "/institutparisregion.html"],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": "Campus Pleyad - Pleyad 4, 66-68 rue Pleyel, 93200 Saint-Denis",
|
||||
"type_juridique": "établissement public (agence d'urbanisme)",
|
||||
"contact_form_url": "https://www.institutparisregion.fr/linstitut-paris-region/nous-contacter/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/linstitut-paris-region/nous-contacter/"],
|
||||
"scrape_error": null,
|
||||
"note": "Pas de standard téléphonique, formulaire uniquement. Email drh@ visible mais pour RH seulement. Multi-famille F5+F3."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-energy-cities",
|
||||
"nom": "Energy Cities",
|
||||
"url": "https://energy-cities.eu/fr/",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [],
|
||||
"hashtags": ["#villes-en-transition", "#planification-alternative", "#decroissance-territoriale"],
|
||||
"pays": "FR",
|
||||
"raw_text_excerpt": "Réseau européen de plusieurs centaines de collectivités locales issues d'une trentaine de pays pour la transition énergétique territoriale. Membres français: Besançon, La Rochelle, Grenoble, Grand Lyon, Brest Métropole, Dijon, etc. Siège français: Besançon.",
|
||||
"links_internes": ["/fr/membres/", "/contact-us/", "/join-us/"],
|
||||
"email_contact": "webmaster@energy-cities.eu",
|
||||
"email_source": "scrape_contact_page",
|
||||
"email_confidence": "medium",
|
||||
"telephone": "+33 (0)3 81 65 36 80",
|
||||
"adresse": "4 chemin du fort de Bregille, Maison de l'Environnement de Bourgogne Franche-Comté, 25000 Besançon",
|
||||
"type_juridique": "association européenne",
|
||||
"contact_form_url": "https://energy-cities.eu/contact-us/",
|
||||
"already_in_v1": false,
|
||||
"scrape_meta": {
|
||||
"tool": "browsermcp",
|
||||
"pages_visited": ["/fr/membres/", "/contact-us/"],
|
||||
"scrape_error": null,
|
||||
"note": "Email webmaster@ trouvé dans notice RGPD du formulaire — contact technique, pas généraliste. Préférer formulaire. Confidence: medium."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-forensic-architecture-v1",
|
||||
"nom": "Forensic Architecture",
|
||||
"url": "https://forensic-architecture.org",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [3],
|
||||
"hashtags": ["#contre-expertise"],
|
||||
"pays": "GB",
|
||||
"raw_text_excerpt": "Agence de recherche basée au Goldsmith College de Londres. Utilise l'architecture et l'investigation spatiale comme outils de contre-expertise et de documentation des violations. id V1: 3.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"type_juridique": "agence de recherche",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"id_v1": 3,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Structure déjà dans V1 (id=3). Non rescrappée. F5+F3 (contre-expertise spatiale)."
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f5-centrala-v1",
|
||||
"nom": "Centrala",
|
||||
"url": "https://centrala.net.pl",
|
||||
"famille_principale": 5,
|
||||
"famille_principale_label": "Urbanisme transition et territoires",
|
||||
"familles_secondaires": [3],
|
||||
"hashtags": ["#contre-expertise", "#planification-alternative"],
|
||||
"pays": "PL",
|
||||
"raw_text_excerpt": "Studio de recherche et de design basé à Varsovie. Pratique interdisciplinaire : architecture, urbanisme, art public, activisme territorial. id V1: 36.",
|
||||
"links_internes": [],
|
||||
"email_contact": null,
|
||||
"email_source": null,
|
||||
"email_confidence": null,
|
||||
"telephone": null,
|
||||
"adresse": null,
|
||||
"type_juridique": "studio de recherche / design",
|
||||
"contact_form_url": null,
|
||||
"already_in_v1": true,
|
||||
"id_v1": 36,
|
||||
"scrape_meta": {
|
||||
"tool": null,
|
||||
"pages_visited": [],
|
||||
"scrape_error": null,
|
||||
"note": "Structure déjà dans V1 (id=36). Non rescrappée. F5+F3 (contre-expertise territoriale)."
|
||||
}
|
||||
}
|
||||
]
|
||||
4537
V2-cascade/seed-cibles/seed-v2-consolide.json
Normal file
4537
V2-cascade/seed-cibles/seed-v2-consolide.json
Normal file
File diff suppressed because it is too large
Load Diff
127
V2-cascade/seed-cibles/sources-par-famille.md
Normal file
127
V2-cascade/seed-cibles/sources-par-famille.md
Normal file
@@ -0,0 +1,127 @@
|
||||
# Sources de scrape par famille - V2 AEP
|
||||
|
||||
> Liste des cartographies amies + sources de crawl pour les agents recherche PV2-2.
|
||||
> Strategie snowball : partir des nodes etablis pour aller chercher leurs collaborateurs.
|
||||
> Pas de cap fiches : ramener autant que trouve.
|
||||
|
||||
## Famille 1 - Reemploi & filieres
|
||||
|
||||
Cartographies amies a demander/scraper :
|
||||
- Opalis (https://opalis.eu/) : base de donnees revendeurs materiaux belges + europeens
|
||||
- Rotor / RotorDC (https://rotordc.com/)
|
||||
- Cycle Up (https://www.cycle-up.fr/) : plateforme reemploi FR
|
||||
- Reuse Foundation (https://www.reusefoundation.eu/)
|
||||
- Backacia (https://backacia.com/) : reemploi materiaux FR
|
||||
- Mobius (https://www.mobius-reemploi.fr/)
|
||||
|
||||
Crawl points d'entree :
|
||||
- Pavillon Circulaire COP21 (Encore Heureux) : co-signataires
|
||||
- K118 / Baubuero in situ (Holcim Award Gold 2018)
|
||||
- Ressource 0 / Ile-de-France
|
||||
- Material Cultures (https://materialcultures.org/) : reseau biosourcees UK
|
||||
|
||||
Prix / distinctions :
|
||||
- EU Mies Award nominees / winners (focus reemploi)
|
||||
- Architectes du climat (signataires)
|
||||
- BdA (Bauwelt der Architekten) reemploi DE
|
||||
|
||||
DOM-TOM (a trier en PV2-11) :
|
||||
- KEBATI / Karibati / AQUAA / Vegetal(e) (filieres biosourcees Reunion / Antilles)
|
||||
|
||||
## Famille 2 - Frugalite & low-tech
|
||||
|
||||
Cartographies amies :
|
||||
- Frugalite Heureuse & Creative (https://frugalite.org/) : 12 000+ signataires, demander la carto
|
||||
- Low-tech Lab (https://lowtechlab.org/)
|
||||
- Material Cultures (https://materialcultures.org/) : reseau biosourcees UK
|
||||
- Tegnestuen LOKAL (DK) : low-tech bois local
|
||||
- ATM (Atelier Marie-Helene Toumayan ?) - a verifier
|
||||
- BC architects (https://bc-as.org/) : terre crue + frugalite
|
||||
|
||||
Crawl :
|
||||
- Manifeste Frugalite : extraction du PDF des signataires
|
||||
- Reseaux paille / terre crue (CFP, AsTerre, fil2terre)
|
||||
- ZRS Architekten (DE) : low-tech
|
||||
- Anne Lacaton & Jean-Philippe Vassal : signataires Frugalite
|
||||
|
||||
Prix :
|
||||
- Pritzker laureates frugaux (Lacaton & Vassal 2021, Aravena 2016, Diebedo Kere 2022)
|
||||
- Holcim Awards (focus low-tech / sustainable)
|
||||
|
||||
## Famille 3 - Architecture sociale & precarites
|
||||
|
||||
Cartographies amies :
|
||||
- Architecture & Precarites (https://architectureprecarites.org/) - DEJA reclaim - demander leur reseau
|
||||
- Reseau Architecture sans Frontieres (https://www.archi-sansfrontieres.org/)
|
||||
- Plan B (urgence logement)
|
||||
- Caracoles (https://www.caracoles.fr/) : tiers-lieux + precarite
|
||||
|
||||
Crawl :
|
||||
- Quatorze (https://www.quatorze.cc/) : partenaires migrations
|
||||
- Yes We Camp (https://yeswecamp.org/) : tiers-lieux relies
|
||||
- Construire / Bouchain : permis de faire (laureats)
|
||||
- Recetas Urbanas / Santiago Cirugeda (ES)
|
||||
- ICI Marseille / Friche Belle de Mai
|
||||
- Nouvelle Aire / Bigot Renaud architectes
|
||||
|
||||
Prix :
|
||||
- Pritzker / RIBA : focus sociaux (Aravena, Diebedo Kere, Lacaton & Vassal)
|
||||
- Equerre d'Argent : laureats sociaux
|
||||
- Mies van der Rohe : nominees logement social
|
||||
|
||||
## Famille 4 - Collectifs, ecolieux, habitats alternatifs & AMO bifurcation
|
||||
|
||||
Cartographies amies :
|
||||
- Habitats Participatifs France (https://www.habitatparticipatif-france.fr/) : annuaire ~600 projets
|
||||
- Reseau Oasis Colibris (https://oasis.colibris-lemouvement.org/) : ~1000+ lieux
|
||||
- Habicoop (https://www.habicoop.fr/) : SCIC habitat
|
||||
- Reseau Francais des Ecovillages (RFE)
|
||||
- URSCOP : SCOP architecture
|
||||
- Hab-Fab (https://hab-fab.com/) : AMO habitat participatif
|
||||
- Toits de Choix (https://toitsdechoix.com/) : AMO habitat participatif
|
||||
|
||||
Crawl :
|
||||
- Tepop : reseau SCOP archi
|
||||
- Lacol (https://www.lacol.coop/) / La Borda : modele cooperatif iberique
|
||||
- einszueins (https://www.einszueins.at/) / Wohnprojekt Wien : baugruppe
|
||||
- ecoterritoires (FR) : AMO ecoquartiers
|
||||
- Amorces : SCIC accompagnement transition
|
||||
- Mietshauser Syndikat (DE) : modele propriete collective
|
||||
|
||||
Prix / festivals :
|
||||
- World Habitat Awards
|
||||
- European Collaborative Housing Hub
|
||||
|
||||
## Famille 5 - Urbanisme de transition & territoires
|
||||
|
||||
Cartographies amies :
|
||||
- Reseau Villes et Territoires en Transition France (https://transitionfrance.fr/)
|
||||
- Colibris territoriaux (https://www.colibris-lemouvement.org/)
|
||||
- Reseau pour la transition energetique (CLER) (https://cler.org/)
|
||||
- Energy Cities (https://energy-cities.eu/)
|
||||
- Reseau Tiers-Lieux (https://francetierslieux.fr/)
|
||||
|
||||
Crawl :
|
||||
- Demarches PLU bifurcation : collectivites pilotes (Loos-en-Gohelle, Ungersheim, Saint-Nazaire)
|
||||
- Forensic Architecture (https://forensic-architecture.org/) / Centrala (PL) : recherche urbaine post-industrielle
|
||||
- Convention citoyenne climat : suites territoriales
|
||||
- Tiers-lieux ruraux : Reseau Tiers-Lieux
|
||||
- Atelier Georges / Coloco : paysagistes territoires en transition
|
||||
- Bureau Bas Smets (BE) : urbanisme climat
|
||||
|
||||
Prix :
|
||||
- Prix de l'urbanisme territorial
|
||||
- Trophees territoires en transition
|
||||
- Green Capital Award (EU)
|
||||
|
||||
---
|
||||
|
||||
## Note pour les agents PV2-2
|
||||
|
||||
Strategie snowball recommandee :
|
||||
1. Commencer par la cartographie amie principale (premier item de chaque section)
|
||||
2. Crawler les "amis" / collaborateurs / co-signataires
|
||||
3. Enrichir via prix / festivals
|
||||
4. Filtrer ensuite : pertinence pour la bifurcation architecture/habiter
|
||||
|
||||
DOM-TOM : laisser passer dans la liste, filtrage final en PV2-11 (decision Jules : V2 ou bascule carte ressources).
|
||||
0
V2-cascade/seed-final/.gitkeep
Normal file
0
V2-cascade/seed-final/.gitkeep
Normal file
137
aep-communaute-build/E2E-RESULTS.md
Normal file
137
aep-communaute-build/E2E-RESULTS.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# Cascade onglet 1 — E2E PASS avec 3 bugs M
|
||||
|
||||
**Date :** 2026-04-29
|
||||
**Session :** Claude Code + BrowserMCP (Brave)
|
||||
**URL testée :** https://aep.trans-former.fr/pratiques-regeneratives
|
||||
|
||||
---
|
||||
|
||||
## Récap exécutif
|
||||
|
||||
```
|
||||
Cascade onglet 1 — E2E PASS avec 3 bugs M
|
||||
|
||||
Scénarios : 5/5 OK
|
||||
Bugs : 0 High / 3 Medium / 3 Low
|
||||
Erreurs console : 0
|
||||
|
||||
Détail par scénario :
|
||||
S1 Carte desktop : PASS — tiles OK, 52 markers, API 52/52, 0 erreurs console
|
||||
S2 Filtres : PASS* — search filtre (52→2, URL?q=), reset OK, chips a11y KO (Bug M1)
|
||||
S3 Fiche + retour: PASS — /pratique/[id] complète, retour préserve état
|
||||
S4 Form submit : PASS — validation live, "Merci !" + modération message OK
|
||||
S5 Mobile : PASS — bottom sheet, hamburger nav, formulaire lisible
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Bugs M (Medium)
|
||||
|
||||
**M1 — Chips CRITÈRES et TYPE non accessibles au clavier (a11y)**
|
||||
- Les chips de filtres (Matériaux, Filières, Posture… / Agence, Coopérative…) ne sont pas des éléments focusables dans l'arbre d'accessibilité BrowserMCP.
|
||||
- Tab ne traverse pas les chips — ils apparaissent comme un seul nœud `text:` fusionné.
|
||||
- Impact : utilisateurs clavier/screen reader ne peuvent pas filtrer.
|
||||
- Fix : ajouter `role="button"` ou utiliser des `<button>` natifs pour les chips.
|
||||
|
||||
**M2 — "Effacer les filtres" ne vide pas le texte du searchbox**
|
||||
- Après une recherche texte (ex: "rotor" → 2 résultats), cliquer "Effacer les filtres" remet les résultats à 52 et nettoie l'URL, mais le texte "rotor" reste visible dans le champ input.
|
||||
- UI incohérente : l'utilisateur voit 52 résultats avec "rotor" toujours affiché.
|
||||
- Fix : `emit('update:search', '')` dans le handler reset-filters du parent.
|
||||
|
||||
**M3 — Floating button "Soutenir" couvre le chip "Agence" TYPE**
|
||||
- Le bouton flottant CTA (position:fixed, bottom-left) overlap visuellement le premier chip TYPE "Agence" sur le viewport actuel (~880px).
|
||||
- Le chip "Agence" est partiellement ou totalement inaccessible au clic.
|
||||
- Fix : ajuster le z-index ou la position du floating button pour éviter le overlap sur les chips.
|
||||
|
||||
---
|
||||
|
||||
## Bugs L (Low)
|
||||
|
||||
**L1 — Route `/fiche/[id]` retourne "Fiche introuvable" pour toutes les pratiques**
|
||||
- La page `/fiche/[id]` est l'ancienne route (agences) qui appelle `/api/fiche/${orgId}` — endpoint inexistant.
|
||||
- La bonne route pour les pratiques est `/pratique/[id]` (sans 's').
|
||||
- Impact : confusion si un utilisateur essaie de partager `/fiche/1` manuellement.
|
||||
- Fix : ajouter une redirection `/fiche/:id → /pratique/:id` ou supprimer la route `/fiche/` si obsolète.
|
||||
|
||||
**L2 — "← Retour à la carte" label incorrect sur `/proposer-pratique`**
|
||||
- Le lien retour affiche "← Retour à la carte" mais pointe vers `/pratiques-regeneratives` (la page carte+liste).
|
||||
- Sur `/pratique/[id]` le label est correct ("Retour aux pratiques régénératives").
|
||||
- Fix : harmoniser le label sur `/proposer-pratique`.
|
||||
|
||||
**L3 — Map viewport ne se recentre pas sur les résultats filtrés**
|
||||
- Après une recherche (ex: "rotor" → 2 fiches à Bruxelles), la carte reste centrée sur la vue initiale (Scandinavie).
|
||||
- Les markers des résultats filtrés peuvent être hors viewport.
|
||||
- Fix : appeler `map.fitBounds(filteredMarkers)` après chaque changement de filtre.
|
||||
|
||||
---
|
||||
|
||||
## Détail scénarios
|
||||
|
||||
### S1 — Carte desktop (chargement + structure)
|
||||
|
||||
- Navigation `/pratiques-regeneratives` : ✓
|
||||
- Leaflet tiles chargés (OSM + CARTO) : ✓
|
||||
- Markers/clusters visibles (3, 2, 3, 2, 4, 6, 15…) : ✓
|
||||
- Bottom sheet avec "52 fiches" + search + CRITÈRES + TYPE + "52 RÉSULTATS" : ✓
|
||||
- API `/api/pratiques` : 52 items (ids 1→52), source "static" : ✓
|
||||
- Console JS : 0 erreurs : ✓
|
||||
- CSS `--nav-primary-solid` : résolu ✓
|
||||
|
||||
### S2 — Filtres sidebar
|
||||
|
||||
- Search "rotor" → 2 résultats, URL `?q=rotor`, markers synchronisés : ✓
|
||||
- Bouton "Effacer" (×) sur le searchbox : vide le texte et reset à 52 ✓
|
||||
- "Effacer les filtres" : remet à 52 mais laisse "rotor" dans le champ → **Bug M2**
|
||||
- Chips CRITÈRES/TYPE : non accessibles via Tab/keyboard → **Bug M1**
|
||||
- Markers Bruxelles hors viewport après filtre "rotor" → **Bug L3**
|
||||
- Reset fonctionnel pour le count : ✓
|
||||
|
||||
### S3 — Fiche pratique + retour
|
||||
|
||||
- `/pratique/1` (Rotor) : fiche complète ✓
|
||||
- Nom, type (Coopérative), pays (Belgique · Bruxelles), score 5/5 ✓
|
||||
- Description, critères, tags, site web ✓
|
||||
- Coordonnées et métadonnées ✓
|
||||
- "Retour aux pratiques régénératives" → `/pratiques-regeneratives` ✓
|
||||
- Retour : 52 résultats préservés ✓
|
||||
- `/fiche/[id]` : "Fiche introuvable" pour toutes les pratiques → **Bug L1**
|
||||
|
||||
### S4 — Formulaire de contribution
|
||||
|
||||
- Page `/proposer-pratique` : tous les champs accessibles (refs individuels) ✓
|
||||
- Nom : "Test BrowserMCP E2E" ✓
|
||||
- URL : "https://example.com/test-e2e" ✓
|
||||
- Description : 180/500 chars, compteur live ✓
|
||||
- Critères : Matériaux + Posture + Vivant cochés (via Tab+Space) ✓
|
||||
- Validation live "Sélectionne au moins 3 critères" : ✓
|
||||
- Type : Collectif sélectionné (via Tab+ArrowDown) ✓
|
||||
- Pays : FR sélectionné via `select_option` (options non visibles dans a11y tree)
|
||||
- Submit : ✓
|
||||
- Message succès : "Merci ! Ta proposition est en attente de modération." ✓
|
||||
|
||||
Note : click events sur checkbox/radio time out dans BrowserMCP (Tab+Space/ArrowDown workaround fonctionnel).
|
||||
|
||||
### S5 — Mobile (~880px viewport)
|
||||
|
||||
Note : BrowserMCP ne supporte pas `setViewport` — test effectué sur le viewport courant (~880px) qui déclenche le layout mobile (bottom sheet).
|
||||
|
||||
- Bottom sheet avec carte plein-écran en fond : ✓
|
||||
- Handle de drag visible en haut de la sheet : ✓
|
||||
- Hamburger nav (≡) : ✓ — dropdown avec 6 liens, page active en bold
|
||||
- Filtres CRITÈRES et TYPE accessibles dans la sheet : ✓
|
||||
- Formulaire `/proposer-pratique` : single column, pas de overflow horizontal ✓
|
||||
- Floating button couvre chip "Agence" : **Bug M3**
|
||||
|
||||
---
|
||||
|
||||
## Notes de session BrowserMCP
|
||||
|
||||
- `browser_click` time out (30s) sur checkbox et radio buttons — workaround Tab+Space/ArrowDown
|
||||
- `browser_click` fonctionne sur : textbox, links, buttons simples, select
|
||||
- `browser_select_option` fonctionne sur `<select>` natif même si options non visibles dans a11y tree
|
||||
- Cluster markers Leaflet : click time out (WebSocket 30s) — clusters non testables via clic direct
|
||||
- `browser_snapshot` ne résout pas les éléments dans un nœud `text:` fusionné (chips, cards liste)
|
||||
|
||||
---
|
||||
|
||||
*E2E exécuté le 2026-04-29 par ATIS via Claude Code + BrowserMCP*
|
||||
45
aep-communaute-build/INDEX.md
Normal file
45
aep-communaute-build/INDEX.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# INDEX — Cascade Onglet 1 : Pratiques régénératives
|
||||
|
||||
> Branche : `feat/aep-pratiques-regeneratives`
|
||||
> Démarré : 2026-04-28
|
||||
> Dernière mise à jour : 2026-04-29
|
||||
|
||||
## Statut global
|
||||
|
||||
```
|
||||
P1 Types + API statique [x] done — commit a70c9e0
|
||||
P2 Page /pratiques-regeneratives [x] done — commit a70c9e0
|
||||
P3 Onglet nav + hamburger [x] done — commit 5fabcde
|
||||
P4 /proposer-pratique + POST API [x] done — commits 83d4bd1 d10586c f25a7d3
|
||||
P5a Build local + smoke test [x] done — commit e80b226 (recap P5a-RECAP.md)
|
||||
P5b Deploy prod + smoke test prod [x] done — deploy 2026-04-29 01:38 UTC
|
||||
JOURNAL-V2.md entrée 2026-04-29 [x] done
|
||||
PROMPT-BROWSERMCP-E2E.md créé [x] done
|
||||
Branche pushée sur Gitea [x] done — feat/aep-pratiques-regeneratives
|
||||
Mise en ligne validée (E2E Jules) [ ] en attente — Jules sur autre PC
|
||||
```
|
||||
|
||||
## Fichiers produits
|
||||
|
||||
| Fichier | Description |
|
||||
|---------|-------------|
|
||||
| `aep-communaute-build/P4-RECAP.md` | Récap chantier P4 form + API |
|
||||
| `aep-communaute-build/P5a-RECAP.md` | Récap build local Windows |
|
||||
| `aep-communaute-build/PROMPT-BROWSERMCP-E2E.md` | Prompt E2E pour Jules (autre PC) |
|
||||
| `aep-communaute-build/INDEX.md` | Ce fichier |
|
||||
|
||||
## Smoke test prod (2026-04-29 01:38 UTC)
|
||||
|
||||
| Endpoint | HTTP | Detail |
|
||||
|----------|------|--------|
|
||||
| GET /pratiques-regeneratives | 200 | SSR OK, titre trouve (2 occurrences) |
|
||||
| GET /proposer-pratique | 200 | SSR OK |
|
||||
| GET /api/pratiques | 200 | JSON valid, 52 fiches |
|
||||
|
||||
## Action Jules
|
||||
|
||||
1. Copier `PROMPT-BROWSERMCP-E2E.md` sur le PC avec BrowserMCP + Brave
|
||||
2. Lancer une session Claude Code, coller le prompt
|
||||
3. Reporter les resultats dans `aep-communaute-build/E2E-RESULTS.md`
|
||||
4. Cocher "Mise en ligne validee (E2E Jules)" ci-dessus
|
||||
5. Merger `feat/aep-pratiques-regeneratives` dans `main`
|
||||
76
aep-communaute-build/P4-RECAP.md
Normal file
76
aep-communaute-build/P4-RECAP.md
Normal file
@@ -0,0 +1,76 @@
|
||||
# P4 — Form contribution "Proposer une pratique" — Récap
|
||||
|
||||
**Date :** 2026-04-28
|
||||
**Branche :** feat/aep-pratiques-regeneratives
|
||||
**Commits :** 3 atomiques (83d4bd1, d10586c, f25a7d3)
|
||||
|
||||
---
|
||||
|
||||
## Fichiers créés / modifiés
|
||||
|
||||
| Fichier | Statut | Description |
|
||||
|---------|--------|-------------|
|
||||
| `pages/proposer-pratique.vue` | créé (833 lignes) | Formulaire complet clone adapté de contribuer.vue |
|
||||
| `server/api/submit-pratique.post.ts` | créé (117 lignes) | Endpoint POST avec Zod + rate limit + append pending |
|
||||
| `public/data/pratiques-pending.json` | créé (`[]`) | File de modération V1, nettoyée après tests |
|
||||
| `components/PratiqueSidebar.vue` | modifié | CTA "+ Proposer une pratique" en bas de sidebar |
|
||||
|
||||
---
|
||||
|
||||
## Formulaire — champs implémentés
|
||||
|
||||
- **Nom** (obligatoire, 3-150c)
|
||||
- **URL** (optionnel)
|
||||
- **Description** (obligatoire, 50-500c + compteur live)
|
||||
- **Critères régénératifs** (checkboxes 8 critères, min 3 / max 8, désactivation au-delà)
|
||||
- **Type d'entité** (radio pill : 9 options depuis TYPES_ENTITE)
|
||||
- **Pays** (dropdown groupé Europe 16 codes / DOM-TOM 11 codes / Autre texte libre conditionnel)
|
||||
- **Ville** (optionnel)
|
||||
- **Tags** (optionnel, input virgule-séparé → chips preview, max 6 × 30c)
|
||||
- **Email** (optionnel)
|
||||
|
||||
---
|
||||
|
||||
## Endpoint serveur
|
||||
|
||||
- Validation Zod miroir du client (schéma identique)
|
||||
- Rate limit JSON : 3 soumissions / IP hashée SHA-256 / jour (action `submit-pratique`)
|
||||
- Lecture / écriture `public/data/pratiques-pending.json` (init `[]` si absent)
|
||||
- Entrée : champs validés + `id: timestamp` + `submitted_at: ISO` + `moderation_status: 'pending'`
|
||||
- Retour : `{ ok: true, trackingId: timestamp }`
|
||||
- Commentaire modération V2 en haut du fichier
|
||||
|
||||
---
|
||||
|
||||
## Résultats tests
|
||||
|
||||
| Test | Résultat |
|
||||
|------|----------|
|
||||
| GET /proposer-pratique | 200 |
|
||||
| POST valide | 200 + entrée pending.json |
|
||||
| POST invalide (nom 2c, desc trop courte, criteres < 3) | 422 + fieldErrors structurés |
|
||||
| Rate limit : 3ème soumission depuis même IP | 429 |
|
||||
| pending.json après nettoyage | `[]` vide |
|
||||
|
||||
Note : la 3ème soumission (pas la 4ème) a déclenché le 429 car le test valide
|
||||
précédent comptait comme 1ère soumission — comportement correct, limite = 3/jour.
|
||||
|
||||
---
|
||||
|
||||
## Navigation
|
||||
|
||||
- CTA "Proposer une pratique" dans `PratiqueSidebar.vue` (section bas sidebar, style `sidebar-cta-link`)
|
||||
- Bouton retour dans `proposer-pratique.vue` → `/pratiques-regeneratives`
|
||||
- Bouton Annuler dans le formulaire → `/pratiques-regeneratives`
|
||||
|
||||
---
|
||||
|
||||
## Notes implémentation
|
||||
|
||||
- `types/pratique.ts` non modifié — `CRITERES`, `TYPES_ENTITE`, `TYPES_ENTITE_LABELS`, `EUROPE_CODES`, `OUTREMER_CODES`, `PAYS_LABELS` importés tels quels
|
||||
- Style réutilise 100% les classes CSS et variables CSS var(--nav-*) existantes
|
||||
- Accentuation dans pending.json depuis curl Windows = artefact d'encodage terminal uniquement — depuis navigateur, l'encodage UTF-8 est correct
|
||||
|
||||
---
|
||||
|
||||
## Prêt pour P5
|
||||
59
aep-communaute-build/P5a-RECAP.md
Normal file
59
aep-communaute-build/P5a-RECAP.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# P5a — RECAP Build local + smoke test
|
||||
> Date : 2026-04-28 | Branche : feat/aep-pratiques-regeneratives
|
||||
|
||||
## Build
|
||||
|
||||
- Statut : OK
|
||||
- Bundle total : 3.04 MB (737 kB gzip)
|
||||
- Warnings : 1 (DEP0155 — trailing slash dans @vue/shared/package.json, Node deprecation inoffensif, non-bloquant)
|
||||
- Errors : 0
|
||||
- Durée : client 5.38s + server 3.27s + Nitro OK
|
||||
|
||||
## Smoke test local (node-server Windows)
|
||||
|
||||
| Endpoint | HTTP | Note |
|
||||
|---|---|---|
|
||||
| GET /pratiques-regeneratives | 500 | Voir note ci-dessous |
|
||||
| GET /proposer-pratique | 500 | Voir note ci-dessous |
|
||||
| GET /api/pratiques | 200 | Retourne la liste JSON (N entries visible) |
|
||||
| POST /api/submit-pratique | 429 | Rate limit local (comportement attendu) |
|
||||
|
||||
**Note sur les 500 SSR — BUG WINDOWS/NODE 24, non-bloquant pour le deploy VPS :**
|
||||
|
||||
Erreur : `Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'`
|
||||
|
||||
Diagnostic : Nitro en mode `node-server` fait un `import()` dynamique avec chemin absolu Windows (`C:\...`) au lieu de `file:///C:/...`. Ce bug est systématique en local sur toutes les pages HTML (y compris `/`, `/a-propos`, etc.) — identique sur `main` avant cette branche. Il n'existe pas sur VPS Linux. Les APIs JSON ne sont pas affectées.
|
||||
|
||||
Conclusion : ce bug ne doit PAS bloquer le deploy P5b. Il est préexistant et propre à l'environnement Windows local.
|
||||
|
||||
## Console errors
|
||||
|
||||
- 1 warning DEP0155 (non-bloquant)
|
||||
- 0 erreur critique
|
||||
|
||||
## Nettoyage
|
||||
|
||||
- pending.json : `[]` — propre (POST retourné 429, aucune entrée ajoutée)
|
||||
- Processus preview/dev : stoppés
|
||||
- git status : working tree propre (1 fichier non-tracké préexistant : `public/data/pratiques-regeneratives.json`)
|
||||
|
||||
## Branche
|
||||
|
||||
feat/aep-pratiques-regeneratives — 9 commits depuis main
|
||||
|
||||
```
|
||||
9080855 docs(p4): recap P4 form proposer-pratique
|
||||
f25a7d3 feat(pratiques): pending.json init + CTA sidebar proposer une pratique
|
||||
d10586c feat(pratiques): page /proposer-pratique — formulaire contribution Pratique
|
||||
83d4bd1 feat(pratiques): endpoint POST /api/submit-pratique avec Zod + rate limit
|
||||
5fabcde feat(nav): ajout onglet Pratiques régé + hamburger + overflow
|
||||
a70c9e0 feat(pratiques): types, API statique, composants filtres + cartes Europe/outremer
|
||||
5eda4bd chore: supprimer fichiers tmp editeur parasites
|
||||
21c44d8 feat(aep): carte AEP — push Gitea 2026-04-28
|
||||
```
|
||||
|
||||
## Verdict
|
||||
|
||||
Build OK. Les 500 locaux SSR sont un artefact Windows/Node 24 non-reproductible sur VPS Linux. APIs fonctionnelles. Pending propre.
|
||||
|
||||
**Checkpoint Jules : OK pour deploy P5b ?**
|
||||
61
aep-communaute-build/P5b-RECAP.md
Normal file
61
aep-communaute-build/P5b-RECAP.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# P5b — Deploy prod + smoke test — Récap
|
||||
|
||||
> Date : 2026-04-29 | Branche : feat/aep-pratiques-regeneratives
|
||||
|
||||
## Pre-deploy
|
||||
|
||||
- Commit avant deploy : `90808551f003fe3e8e1cd227b433594b5e6f087a`
|
||||
- Branche : `feat/aep-pratiques-regeneratives`
|
||||
- Fichiers non-trackés : P5a-RECAP.md + pratiques-regeneratives.json (stagés + committés avant deploy)
|
||||
- `.output/public/data/pratiques-regeneratives.json` : present dans le build (Nuxt le copie automatiquement)
|
||||
- `.output/server/chunks/routes/api/pratiques.get.mjs` : present
|
||||
- `.output/server/chunks/routes/api/submit-pratique.post.mjs` : present
|
||||
|
||||
## Deploy
|
||||
|
||||
- Méthode : `tar .output/ | ssh vps-hetzner "cd /opt/aep && tar -xzf -"` + `systemctl restart aep`
|
||||
- Raison du contournement deploy.sh : BOM UTF-8 en ligne 1 (#!/bin/bash) cause un exit 1 au `read -p` quand stdin est un pipe. Les étapes ont été exécutées manuellement.
|
||||
- Env diff local vs VPS : VPS a des vars supplémentaires (MISTRAL, NOCODB worker, RESEND) — additionnel non-conflictuel, deploy pas impacté.
|
||||
- Durée upload : < 5s
|
||||
- Service aep : active (systemctl is-active = "active")
|
||||
|
||||
## Output deploy (résumé)
|
||||
|
||||
```
|
||||
[2026-04-29 01:37:08] Upload .output/ vers vps-hetzner:/opt/aep...
|
||||
[2026-04-29 01:37:08] Upload termine.
|
||||
[2026-04-29 01:37:51] Redemarrage du service aep...
|
||||
active
|
||||
[2026-04-29 01:37:51] Service aep statut verifie.
|
||||
```
|
||||
|
||||
## Smoke test prod (2026-04-29 01:38 UTC)
|
||||
|
||||
| Endpoint | HTTP | Note |
|
||||
|---|---|---|
|
||||
| GET /pratiques-regeneratives | 200 | SSR OK |
|
||||
| GET /proposer-pratique | 200 | SSR OK |
|
||||
| GET /api/pratiques | 200 | JSON valid |
|
||||
|
||||
**Garde-fous additionnels :**
|
||||
- SSR title check : `curl .../pratiques-regeneratives | grep -c "Pratiques"` → 2 occurrences trouvées
|
||||
- JSON count : `node -e "..."` → 52 fiches (attendu : 52)
|
||||
|
||||
## Commits produits (P5b)
|
||||
|
||||
```
|
||||
bf40b40 docs(p5b): journal deploy + INDEX + prompt BrowserMCP E2E
|
||||
e80b226 docs(p5a): recap build local + add pratiques-regeneratives.json data
|
||||
```
|
||||
|
||||
## Notes deploy.sh — TODO V3
|
||||
|
||||
deploy.sh a deux problèmes identifiés :
|
||||
1. BOM UTF-8 en ligne 1 (`\xEF\xBB\xBF#!/bin/bash`) — cause exit 1 quand stdin est un pipe
|
||||
2. Le script était documenté comme "contournement tar + ssh" dans JOURNAL-V2 V2 (Session S3b) — cohérent ici
|
||||
|
||||
A corriger : supprimer le BOM (`sed -i '1s/^\xEF\xBB\xBF//' deploy.sh`) + ajouter `CONFIRM=y` par défaut ou flag `--force-env`.
|
||||
|
||||
## Statut final
|
||||
|
||||
Deploy OK. Smoke test 3/3. Branche pushée. Jules merge main apres E2E.
|
||||
172
aep-communaute-build/PROMPT-BROWSERMCP-E2E.md
Normal file
172
aep-communaute-build/PROMPT-BROWSERMCP-E2E.md
Normal file
@@ -0,0 +1,172 @@
|
||||
# PROMPT BrowserMCP — E2E Onglet Pratiques régénératives
|
||||
> Cascade onglet 1 — à coller dans une session Claude Code avec BrowserMCP attaché à Brave.
|
||||
> Date de création : 2026-04-29
|
||||
|
||||
---
|
||||
|
||||
## Mission
|
||||
|
||||
Tester en E2E les deux nouvelles pages de `aep.trans-former.fr` liées à l'onglet "Pratiques régénératives" : la carte principale `/pratiques-regeneratives` et le formulaire de contribution `/proposer-pratique`. Couvrir desktop ET mobile. Reporter tous les bugs trouvés (console JS, visuels, fonctionnels).
|
||||
|
||||
**URL de base :** `https://aep.trans-former.fr`
|
||||
**Navigateur :** Brave avec extension BrowserMCP
|
||||
**Mode :** Full auto, rapport final structuré
|
||||
|
||||
---
|
||||
|
||||
## Setup initial
|
||||
|
||||
1. Ouvre BrowserMCP et navigue vers `https://aep.trans-former.fr/pratiques-regeneratives`
|
||||
2. Attends que la page soit fully loaded (pas de spinner Leaflet)
|
||||
3. Prends un screenshot de référence `desktop-initial.png`
|
||||
|
||||
---
|
||||
|
||||
## Scenario 1 — Carte desktop (chargement + structure)
|
||||
|
||||
**Objectif :** vérifier que la carte s'affiche correctement avec markers et sidebar.
|
||||
|
||||
Étapes :
|
||||
1. `navigate` vers `https://aep.trans-former.fr/pratiques-regeneratives`
|
||||
2. Attendre 3s (Leaflet init)
|
||||
3. `snapshot` — décrire ce qui est visible : carte Europe, sidebar gauche, onglet header actif
|
||||
4. Vérifier dans le DOM :
|
||||
- Présence d'au moins 1 marker Leaflet (chercher `.leaflet-marker-icon` ou `.leaflet-pane`)
|
||||
- Sidebar visible avec des cartes de pratiques (chercher titres/noms)
|
||||
- Bandeau DOM-TOM présent en bas (textes Guadeloupe/Martinique/Réunion...)
|
||||
5. Ouvrir la console (`evaluate` `window.__AEP_DEBUG__ || 'no debug'`) — noter les erreurs JS si présentes
|
||||
6. `evaluate` `fetch('/api/pratiques').then(r=>r.json()).then(d=>d.list.length)` — doit retourner 52
|
||||
|
||||
Bugs à surveiller :
|
||||
- Carte blanche (Leaflet tiles non chargés)
|
||||
- Markers manquants ou hors viewport
|
||||
- CSS `--nav-primary-solid` non résolu (barre nav sans couleur)
|
||||
- Erreurs console "leaflet", "vue warn", "hydration mismatch"
|
||||
|
||||
---
|
||||
|
||||
## Scenario 2 — Filtres sidebar (criteres + pays + type)
|
||||
|
||||
**Objectif :** vérifier que les filtres réduisent bien les résultats.
|
||||
|
||||
Étapes :
|
||||
1. Depuis `/pratiques-regeneratives` desktop, noter le nombre de fiches dans la sidebar (label "X résultats" ou count visible)
|
||||
2. Cliquer sur le chip "Matériaux" dans les filtres critères
|
||||
3. Attendre 500ms — `snapshot` — noter le nouveau count
|
||||
4. Cliquer sur le chip "Pays" (ou sélectionner France dans le filtre pays si c'est un select)
|
||||
5. `snapshot` — noter le count (doit être inférieur ou égal à l'étape 3)
|
||||
6. Cliquer sur le type "Coopérative" si accessible
|
||||
7. `snapshot` — noter le count
|
||||
8. Cliquer "Réinitialiser" ou le bouton reset — vérifier que le count revient au total (52)
|
||||
|
||||
Bugs à surveiller :
|
||||
- Filtre appliqué mais count ne change pas
|
||||
- Markers sur la carte non synchronisés avec la sidebar
|
||||
- Reset qui ne fonctionne pas
|
||||
- Chip actif sans indicateur visuel
|
||||
|
||||
---
|
||||
|
||||
## Scenario 3 — Fiche pratique (clic marker ou card + retour)
|
||||
|
||||
**Objectif :** vérifier que l'ouverture d'une fiche fonctionne et que le retour préserve les filtres.
|
||||
|
||||
Étapes :
|
||||
1. Appliquer un filtre (ex: "Matériaux") pour avoir < 52 résultats
|
||||
2. Cliquer sur une card dans la sidebar OU un marker sur la carte
|
||||
3. `snapshot` — décrire ce qui est affiché : modal ? Page fiche ? URL change ?
|
||||
4. Vérifier que la fiche contient : nom, description, critères, type, pays, URL (si disponible)
|
||||
5. Cliquer le bouton "Retour" ou `navigateBack`
|
||||
6. `snapshot` — vérifier que le filtre "Matériaux" est toujours actif et le count identique à avant
|
||||
|
||||
Bugs à surveiller :
|
||||
- Clic sur card ne navigue pas
|
||||
- Page fiche vide ou 404
|
||||
- Bouton retour recharge sans filtres
|
||||
- Scroll position perdu
|
||||
|
||||
---
|
||||
|
||||
## Scenario 4 — Formulaire de contribution
|
||||
|
||||
**Objectif :** soumettre une proposition valide et vérifier le message de succès.
|
||||
|
||||
Étapes :
|
||||
1. `navigate` vers `https://aep.trans-former.fr/proposer-pratique`
|
||||
2. `snapshot` — décrire le formulaire visible
|
||||
3. Remplir les champs suivants :
|
||||
- `#nom` : "Test BrowserMCP E2E"
|
||||
- `#url` : "https://example.com/test-e2e"
|
||||
- `#description_user` : "Pratique de test soumise automatiquement par BrowserMCP pour valider le pipeline de contribution de l'onglet Pratiques régénératives. Cette description fait plus de 100 caractères."
|
||||
- Critères : cocher au moins 3 checkboxes (ex: "Matériaux", "Posture", "Vivant")
|
||||
- Type d'entité : sélectionner "Collectif"
|
||||
- Pays : sélectionner "France" dans le select
|
||||
4. `snapshot` avant envoi — vérifier que les champs sont remplis
|
||||
5. Cliquer le bouton `submit` du formulaire
|
||||
6. Attendre 3s
|
||||
7. `snapshot` — chercher le message de succès "Merci !" + "Ta proposition est en attente de modération."
|
||||
|
||||
Bugs à surveiller :
|
||||
- Validation côté client ne se déclenche pas
|
||||
- Submit retourne une erreur réseau (verifier dans console : `fetch POST /api/submit-pratique`)
|
||||
- Message succès ne s'affiche pas
|
||||
- Rate limit 429 (normal si on a soumis plusieurs fois — attendre 1h ou ignorer si premier test)
|
||||
|
||||
Note : si rate limit 429, c'est le comportement attendu. Réessayer en changeant légèrement le nom.
|
||||
|
||||
---
|
||||
|
||||
## Scenario 5 — Mobile (viewport 375x667)
|
||||
|
||||
**Objectif :** valider l'expérience mobile de base.
|
||||
|
||||
Étapes :
|
||||
1. Changer le viewport à 375x667 (iPhone SE) via `setViewport` ou équivalent BrowserMCP
|
||||
2. `navigate` vers `https://aep.trans-former.fr/pratiques-regeneratives`
|
||||
3. Attendre 3s
|
||||
4. `snapshot` — décrire : sheet en bas ? Carte en fond plein écran ? Header avec hamburger ?
|
||||
5. Tenter d'interagir avec la sheet du bas (si elle existe) : tapper sur le header de la sheet pour l'agrandir
|
||||
6. `snapshot` — sheet en mode "half" ou "full" ?
|
||||
7. Vérifier que les filtres sont accessibles (dans la sheet ou dans un drawer)
|
||||
8. Cliquer une card si visible
|
||||
9. `snapshot` — fiche pleine page ou modal plein écran ?
|
||||
10. `navigate` vers `https://aep.trans-former.fr/proposer-pratique`
|
||||
11. `snapshot` — formulaire lisible et accessible sur mobile ?
|
||||
|
||||
Bugs à surveiller :
|
||||
- Sheet absente ou non draggable
|
||||
- Carte non visible derrière la sheet
|
||||
- Hamburger nav manquant
|
||||
- Formulaire /proposer-pratique avec overflow horizontal
|
||||
|
||||
---
|
||||
|
||||
## Format de récap final attendu
|
||||
|
||||
```
|
||||
Cascade onglet 1 — E2E [PASS / FAIL avec [N] bugs H]
|
||||
|
||||
Scénarios : [N]/5 OK
|
||||
Bugs : [N] High / [N] Medium / [N] Low
|
||||
Erreurs console : [N] (liste si > 0)
|
||||
|
||||
Détail par scénario :
|
||||
S1 Carte desktop : [PASS/FAIL] — [note courte]
|
||||
S2 Filtres : [PASS/FAIL] — [note courte]
|
||||
S3 Fiche + retour: [PASS/FAIL] — [note courte]
|
||||
S4 Form submit : [PASS/FAIL] — [note courte]
|
||||
S5 Mobile : [PASS/FAIL] — [note courte]
|
||||
|
||||
Bugs H :
|
||||
- [description + étape]
|
||||
|
||||
Bugs M :
|
||||
- [description + étape]
|
||||
|
||||
Bugs L :
|
||||
- [description + étape]
|
||||
|
||||
Screenshots : [N] pris
|
||||
```
|
||||
|
||||
Envoyer ce récap à Jules (copier dans la session pilote ou dans `aep-communaute-build/E2E-RESULTS.md`).
|
||||
187
app.vue
187
app.vue
@@ -7,16 +7,21 @@
|
||||
style="background: var(--nav-surface); border-bottom: 1px solid var(--nav-bg-alt);"
|
||||
>
|
||||
<!-- Logo -->
|
||||
<a href="/" class="logo-link flex items-center gap-2 hover:opacity-90 transition-opacity shrink-0" title="Architecture d'Écologie Politique">
|
||||
<a href="/" class="flex items-center gap-2 hover:opacity-90 transition-opacity shrink-0 group relative" title="Architecture d'Écologie Politique">
|
||||
<div
|
||||
class="h-8 px-2 rounded-lg flex items-center justify-center shrink-0"
|
||||
class="h-7 px-2 rounded-lg flex items-center justify-center shrink-0"
|
||||
style="background: var(--nav-primary-solid);"
|
||||
>
|
||||
<span class="font-bold text-xs tracking-tight" style="color: var(--nav-text-on-primary);">AEP</span>
|
||||
</div>
|
||||
<div class="logo-text flex flex-col leading-tight">
|
||||
<span class="logo-line-1 font-bold tracking-tight" style="color: var(--nav-text);">Architecture</span>
|
||||
<span class="logo-line-2 font-bold tracking-tight" style="color: var(--nav-text);">d'Écologie Politique</span>
|
||||
<div class="flex flex-col">
|
||||
<span class="font-bold text-base tracking-tight leading-tight" style="color: var(--nav-text);">AEP</span>
|
||||
<span class="text-xs leading-tight hidden lg:inline" style="color: var(--nav-text-muted);">Architecture d'Écologie Politique</span>
|
||||
</div>
|
||||
<!-- Tooltip sm (quand le sous-titre lg est caché) -->
|
||||
<div class="absolute left-0 top-full mt-2 px-2 py-1 rounded text-xs whitespace-nowrap pointer-events-none opacity-0 group-hover:opacity-100 transition-opacity lg:hidden z-50"
|
||||
style="background: var(--nav-primary-solid); color: var(--nav-text-on-primary);">
|
||||
Architecture d'Écologie Politique
|
||||
</div>
|
||||
</a>
|
||||
|
||||
@@ -34,28 +39,16 @@
|
||||
class="nav-tab"
|
||||
:class="{ 'nav-tab--active': route.path === '/agences' }"
|
||||
>
|
||||
Réseaux AEP
|
||||
Agences Inspirantes
|
||||
<span class="nav-tab-badge">en construction</span>
|
||||
</NuxtLink>
|
||||
<NuxtLink
|
||||
to="/trouver-du-taf"
|
||||
to="/rag"
|
||||
class="nav-tab"
|
||||
:class="{ 'nav-tab--active': route.path === '/trouver-du-taf' }"
|
||||
:class="{ 'nav-tab--active': route.path === '/rag' }"
|
||||
>
|
||||
Jobs
|
||||
</NuxtLink>
|
||||
<NuxtLink
|
||||
to="/codev"
|
||||
class="nav-tab"
|
||||
:class="{ 'nav-tab--active': route.path.startsWith('/codev') }"
|
||||
>
|
||||
Codev
|
||||
</NuxtLink>
|
||||
<NuxtLink
|
||||
to="/media"
|
||||
class="nav-tab"
|
||||
:class="{ 'nav-tab--active': route.path === '/media' }"
|
||||
>
|
||||
recherche-média
|
||||
RAG
|
||||
<span class="nav-tab-badge">en construction</span>
|
||||
</NuxtLink>
|
||||
</nav>
|
||||
|
||||
@@ -107,52 +100,14 @@
|
||||
>
|
||||
Signaler
|
||||
</NuxtLink>
|
||||
<!-- Proposer — popover 3 choix -->
|
||||
<div class="hidden sm:block relative" ref="proposerAnchor" data-proposer-popover>
|
||||
<button
|
||||
@click="proposerOpen = !proposerOpen"
|
||||
class="px-3 py-1.5 rounded-lg text-sm font-semibold transition-all hover:opacity-80 inline-flex items-center gap-1"
|
||||
style="background: var(--nav-accent); color: var(--nav-text);"
|
||||
aria-label="Proposer une contribution"
|
||||
>
|
||||
+ Proposer
|
||||
</button>
|
||||
<div
|
||||
v-if="proposerOpen"
|
||||
class="absolute right-0 top-full mt-1 rounded-lg shadow-lg min-w-[240px] py-1"
|
||||
style="background: var(--nav-surface); border: 1px solid var(--nav-bg-alt); z-index: 9999;"
|
||||
>
|
||||
<NuxtLink
|
||||
to="/contribuer"
|
||||
class="flex items-center justify-between px-4 py-2.5 text-sm font-medium transition-opacity hover:opacity-70"
|
||||
style="color: var(--nav-text);"
|
||||
@click="proposerOpen = false"
|
||||
>
|
||||
<span>Fiche Entraide <span style="color: var(--nav-text-muted); font-weight: 400; font-size: 0.7rem; display: block;">Carte 1 — Écosystème archi</span></span>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink:0; color: var(--nav-text-muted);"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
</NuxtLink>
|
||||
<div style="height: 1px; background: var(--nav-bg-alt); margin: 2px 0;"></div>
|
||||
<NuxtLink
|
||||
to="/contribuer-reseau"
|
||||
class="flex items-center justify-between px-4 py-2.5 text-sm font-medium transition-opacity hover:opacity-70"
|
||||
style="color: var(--nav-text);"
|
||||
@click="proposerOpen = false"
|
||||
>
|
||||
<span>Réseau / collectif <span style="color: var(--nav-text-muted); font-weight: 400; font-size: 0.7rem; display: block;">Carte 2 — Réseaux AEP</span></span>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink:0; color: var(--nav-text-muted);"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
</NuxtLink>
|
||||
<div style="height: 1px; background: var(--nav-bg-alt); margin: 2px 0;"></div>
|
||||
<NuxtLink
|
||||
to="/contribuer-job"
|
||||
class="flex items-center justify-between px-4 py-2.5 text-sm font-medium transition-opacity hover:opacity-70"
|
||||
style="color: var(--nav-text);"
|
||||
@click="proposerOpen = false"
|
||||
>
|
||||
<span>Plateforme jobs <span style="color: var(--nav-text-muted); font-weight: 400; font-size: 0.7rem; display: block;">Carte 3 — Jobs archi</span></span>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink:0; color: var(--nav-text-muted);"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
</NuxtLink>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Proposer une ressource -->
|
||||
<NuxtLink
|
||||
to="/contribuer"
|
||||
class="px-3 py-1.5 rounded-lg text-sm font-semibold transition-all hover:opacity-80 hidden sm:inline-flex items-center gap-1"
|
||||
style="background: var(--nav-accent); color: var(--nav-text);"
|
||||
>
|
||||
+ Proposer
|
||||
</NuxtLink>
|
||||
|
||||
<!-- Toggle dark mode -->
|
||||
<button
|
||||
@@ -174,40 +129,18 @@
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<!-- Mobile : contribuer icône → popover -->
|
||||
<div class="sm:hidden relative" data-proposer-popover>
|
||||
<button
|
||||
@click="proposerOpen = !proposerOpen"
|
||||
class="p-2 rounded-lg"
|
||||
style="background: var(--nav-accent); color: var(--nav-text);"
|
||||
title="Contribuer"
|
||||
aria-label="Contribuer"
|
||||
>
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>
|
||||
</svg>
|
||||
</button>
|
||||
<div
|
||||
v-if="proposerOpen"
|
||||
class="absolute right-0 top-full mt-1 rounded-lg shadow-lg min-w-[220px] py-1"
|
||||
style="background: var(--nav-surface); border: 1px solid var(--nav-bg-alt); z-index: 9999;"
|
||||
>
|
||||
<NuxtLink to="/contribuer" class="flex items-center justify-between px-4 py-2.5 text-sm font-medium transition-opacity hover:opacity-70" style="color: var(--nav-text);" @click="proposerOpen = false">
|
||||
<span>Fiche Entraide</span>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink:0; color: var(--nav-text-muted);"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
</NuxtLink>
|
||||
<div style="height: 1px; background: var(--nav-bg-alt); margin: 2px 0;"></div>
|
||||
<NuxtLink to="/contribuer-reseau" class="flex items-center justify-between px-4 py-2.5 text-sm font-medium transition-opacity hover:opacity-70" style="color: var(--nav-text);" @click="proposerOpen = false">
|
||||
<span>Réseau / collectif</span>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink:0; color: var(--nav-text-muted);"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
</NuxtLink>
|
||||
<div style="height: 1px; background: var(--nav-bg-alt); margin: 2px 0;"></div>
|
||||
<NuxtLink to="/contribuer-job" class="flex items-center justify-between px-4 py-2.5 text-sm font-medium transition-opacity hover:opacity-70" style="color: var(--nav-text);" @click="proposerOpen = false">
|
||||
<span>Plateforme jobs</span>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="flex-shrink:0; color: var(--nav-text-muted);"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
</NuxtLink>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Mobile : contribuer icône -->
|
||||
<NuxtLink
|
||||
to="/contribuer"
|
||||
class="sm:hidden p-2 rounded-lg"
|
||||
style="background: var(--nav-accent); color: var(--nav-text);"
|
||||
title="Contribuer une fiche"
|
||||
aria-label="Contribuer"
|
||||
>
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>
|
||||
</svg>
|
||||
</NuxtLink>
|
||||
|
||||
<!-- Hamburger mobile (lg:hidden) — toujours en dernier à droite -->
|
||||
<div class="lg:hidden relative">
|
||||
@@ -232,14 +165,10 @@
|
||||
@click="hamburgerOpen = false"
|
||||
>
|
||||
<NuxtLink to="/" class="block px-4 py-2.5 text-sm font-medium transition-opacity hover:opacity-70" :style="route.path === '/' ? 'color: var(--nav-primary-solid); font-weight: 700;' : 'color: var(--nav-text);'">Écosystème Entraide Architecture</NuxtLink>
|
||||
<NuxtLink to="/agences" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" :style="route.path === '/agences' ? 'color: var(--nav-primary-solid); font-weight: 700;' : 'color: var(--nav-text);'">Réseaux AEP</NuxtLink>
|
||||
<NuxtLink to="/trouver-du-taf" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" :style="route.path === '/trouver-du-taf' ? 'color: var(--nav-primary-solid); font-weight: 700;' : 'color: var(--nav-text);'">Jobs</NuxtLink>
|
||||
<NuxtLink to="/media" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" :style="route.path === '/media' ? 'color: var(--nav-primary-solid); font-weight: 700;' : 'color: var(--nav-text);'">recherche-média</NuxtLink>
|
||||
<NuxtLink to="/codev" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" :style="route.path.startsWith('/codev') ? 'color: var(--nav-primary-solid); font-weight: 700;' : 'color: var(--nav-text);'">Codev</NuxtLink>
|
||||
<NuxtLink to="/agences" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" style="color: var(--nav-text);">Agences Inspirantes</NuxtLink>
|
||||
<NuxtLink to="/rag" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" style="color: var(--nav-text);">RAG</NuxtLink>
|
||||
<div style="height: 1px; background: var(--nav-bg-alt); margin: 4px 0;"></div>
|
||||
<NuxtLink to="/manifeste" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" :style="route.path === '/manifeste' ? 'color: var(--nav-primary-solid); font-weight: 700;' : 'color: var(--nav-text-muted);'">Manifeste</NuxtLink>
|
||||
<NuxtLink to="/a-propos" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" style="color: var(--nav-text-muted);">À propos</NuxtLink>
|
||||
<a href="https://liberapay.com/trans-former.fr/donate" target="_blank" rel="noopener noreferrer" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" style="color: var(--nav-text-muted);">Soutenir →</a>
|
||||
<NuxtLink to="/signaler" class="block px-4 py-2.5 text-sm transition-opacity hover:opacity-70" style="color: var(--nav-text-muted);">Signaler</NuxtLink>
|
||||
</div>
|
||||
</div>
|
||||
@@ -264,31 +193,6 @@ const route = useRoute()
|
||||
const hamburgerOpen = ref(false)
|
||||
watch(() => route.path, () => { hamburgerOpen.value = false })
|
||||
|
||||
// ── Popover "+ Proposer" ─────────────────────────────────────────────────
|
||||
const proposerOpen = ref(false)
|
||||
const proposerAnchor = ref<HTMLElement | null>(null)
|
||||
|
||||
function onClickOutsideProposer(e: MouseEvent) {
|
||||
// Ferme si le clic est hors de tout élément portant data-proposer-popover
|
||||
const target = e.target as HTMLElement
|
||||
if (!target.closest('[data-proposer-popover]')) {
|
||||
proposerOpen.value = false
|
||||
}
|
||||
}
|
||||
|
||||
watch(proposerOpen, (open) => {
|
||||
if (open) {
|
||||
// Délai court pour ne pas attraper le clic d'ouverture lui-même
|
||||
setTimeout(() => document.addEventListener('click', onClickOutsideProposer, true), 10)
|
||||
} else {
|
||||
document.removeEventListener('click', onClickOutsideProposer, true)
|
||||
}
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
document.removeEventListener('click', onClickOutsideProposer, true)
|
||||
})
|
||||
|
||||
// ── Dark mode ─────────────────────────────────────────────────────────────
|
||||
const isDark = ref(false)
|
||||
|
||||
@@ -344,21 +248,6 @@ function goRandom() {
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* ── Logo header (texte 2 lignes) ─────────────────────────────────────── */
|
||||
.logo-text {
|
||||
line-height: 1.05;
|
||||
}
|
||||
.logo-line-1, .logo-line-2 {
|
||||
font-size: 0.7rem;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
@media (min-width: 640px) {
|
||||
.logo-line-1, .logo-line-2 { font-size: 0.78rem; }
|
||||
}
|
||||
@media (min-width: 1024px) {
|
||||
.logo-line-1, .logo-line-2 { font-size: 0.85rem; }
|
||||
}
|
||||
|
||||
/* ── Onglets header desktop ───────────────────────────────────────────── */
|
||||
.nav-tab {
|
||||
position: relative;
|
||||
|
||||
@@ -108,16 +108,3 @@
|
||||
.dark .leaflet-popup-tip {
|
||||
background: var(--nav-surface);
|
||||
}
|
||||
|
||||
/* ── Rendu Markdown chatbot (useMarkdown composable) ────────────────────── */
|
||||
.md-content { font-size: inherit; line-height: 1.6; }
|
||||
.md-content p { margin: 0 0 0.5em; }
|
||||
.md-content p:last-child { margin-bottom: 0; }
|
||||
.md-content strong, .md-h1, .md-h2, .md-h3 { font-weight: 700; }
|
||||
.md-h2 { font-size: 0.9375em; display: block; margin-bottom: 0.25em; }
|
||||
.md-h3 { font-size: 0.875em; display: block; }
|
||||
.md-content em { font-style: italic; }
|
||||
.md-list { margin: 0.375em 0 0.375em 1em; padding: 0; list-style: disc; }
|
||||
.md-list li { margin-bottom: 0.2em; }
|
||||
.md-link { text-decoration: underline; opacity: 0.85; }
|
||||
.md-link:hover { opacity: 1; }
|
||||
|
||||
@@ -139,7 +139,72 @@
|
||||
|
||||
</footer>
|
||||
|
||||
<!-- Mobile (< 1024px) : pas de FAB — Soutenir est dans le menu hamburger -->
|
||||
<!-- ═══════════════════════════════════════ FAB MOBILE (< 1024px) ════════ -->
|
||||
<div v-else>
|
||||
<!-- FAB soutenir (à gauche du chatbot) -->
|
||||
<button
|
||||
class="fab-soutenir"
|
||||
type="button"
|
||||
@click="fabSheetOpen = true"
|
||||
aria-label="Soutenir le projet AEP"
|
||||
>
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<!-- Bottom sheet FAB -->
|
||||
<Teleport to="body">
|
||||
<Transition name="backdrop">
|
||||
<div
|
||||
v-if="fabSheetOpen"
|
||||
class="fixed inset-0 z-[1020]"
|
||||
style="background: rgba(26,34,56,0.5);"
|
||||
@click="fabSheetOpen = false"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</Transition>
|
||||
<Transition name="sheet">
|
||||
<div
|
||||
v-if="fabSheetOpen"
|
||||
class="fab-sheet"
|
||||
role="dialog"
|
||||
aria-modal="true"
|
||||
aria-label="Soutenir AEP"
|
||||
>
|
||||
<!-- Poignée -->
|
||||
<div class="flex justify-center pt-3 pb-1">
|
||||
<div class="rounded-full" style="width: 36px; height: 4px; background: var(--nav-bg-alt);" />
|
||||
</div>
|
||||
<div class="px-5 pb-6">
|
||||
<h2 class="text-base font-bold mb-2" style="color: var(--nav-text);">Soutenir AEP</h2>
|
||||
<template v-if="stats">
|
||||
<p class="text-sm mb-1" style="color: var(--nav-text-muted);">
|
||||
Coût IA ce mois : <strong>{{ stats.cout_mois_eur.toFixed(2) }} €</strong>
|
||||
· Tokens : {{ stats.tokens_mois.toLocaleString('fr-FR') }}
|
||||
</p>
|
||||
<p class="text-sm mb-3" style="color: var(--nav-text-muted);">
|
||||
{{ stats.fiches_semaine }} fiche{{ stats.fiches_semaine !== 1 ? 's' : '' }} ajoutée{{ stats.fiches_semaine !== 1 ? 's' : '' }} cette semaine
|
||||
</p>
|
||||
</template>
|
||||
<p class="text-sm mb-4" style="color: var(--nav-text-muted); line-height: 1.5;">
|
||||
1 € = 30 fiches mises en ligne. AEP est libre, sans pub, financé par les dons.
|
||||
</p>
|
||||
<a
|
||||
href="https://liberapay.com/trans-former.fr/donate"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="block w-full text-center py-3 rounded-xl font-semibold text-sm"
|
||||
style="background: var(--nav-primary); color: var(--nav-text-on-primary); text-decoration: none;"
|
||||
@click="fabSheetOpen = false"
|
||||
>
|
||||
Soutenir sur Liberapay →
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</Transition>
|
||||
</Teleport>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
@@ -156,6 +221,7 @@ interface Stats {
|
||||
const stats = ref<Stats | null>(null)
|
||||
const loading = ref(true)
|
||||
const modalOpen = ref(false)
|
||||
const fabSheetOpen = ref(false)
|
||||
const tooltipVisible = ref(false)
|
||||
|
||||
// Desktop — replié par défaut, déploie au hover, replie immédiatement à la sortie
|
||||
@@ -394,6 +460,39 @@ const jaugePct = computed(() => {
|
||||
border-top-color: var(--nav-primary-solid, #1a2238);
|
||||
}
|
||||
|
||||
/* ── FAB mobile soutenir ─────────────────────────────────────────────────── */
|
||||
.fab-soutenir {
|
||||
position: fixed;
|
||||
bottom: 68px; /* au-dessus du FAB chatbot à 24px du bas + 48px de hauteur */
|
||||
left: 16px;
|
||||
z-index: 1000;
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
border-radius: 50%;
|
||||
border: none;
|
||||
background: var(--nav-accent);
|
||||
color: var(--nav-text);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0 4px 16px rgba(26,34,56,0.25);
|
||||
cursor: pointer;
|
||||
transition: opacity 0.15s, transform 0.1s;
|
||||
}
|
||||
|
||||
.fab-soutenir:hover { opacity: 0.88; transform: translateY(-1px); }
|
||||
|
||||
/* ── Bottom sheet FAB ────────────────────────────────────────────────────── */
|
||||
.fab-sheet {
|
||||
position: fixed;
|
||||
inset-x: 0;
|
||||
bottom: 0;
|
||||
z-index: 1021;
|
||||
background: var(--nav-surface);
|
||||
border-radius: 16px 16px 0 0;
|
||||
box-shadow: 0 -4px 32px rgba(26,34,56,0.18);
|
||||
}
|
||||
|
||||
/* ── Modal ───────────────────────────────────────────────────────────────── */
|
||||
.modal-backdrop {
|
||||
position: fixed;
|
||||
|
||||
@@ -1,331 +0,0 @@
|
||||
<template>
|
||||
<div style="width: 100%; height: 100%; position: relative; background: #f5f3f0;">
|
||||
<svg ref="svgRef" style="width: 100%; height: 100%;"></svg>
|
||||
<div ref="tooltipRef" style="
|
||||
position: absolute; pointer-events: none;
|
||||
background: var(--nav-surface); border: 1px solid var(--nav-bg-alt);
|
||||
border-radius: 6px; padding: 8px 12px; font-size: 0.78rem;
|
||||
color: var(--nav-text); max-width: 240px; box-shadow: 0 4px 12px rgba(0,0,0,0.15);
|
||||
opacity: 0; transition: opacity 0.15s; z-index: 100;
|
||||
"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
interface EcoleData { id: string; label: string; description: string; color: string; x_hint: number; y_hint: number }
|
||||
interface LivreRag { slug: string; titre: string; annee: number; couches: string[] }
|
||||
interface AuteurData { id: string; nom: string; dates: string; ecoles: string[]; ecole_principale: string; ingere: boolean; livres_rag: LivreRag[]; theses_cles: string[]; bio_courte: string; bio_courte_provisoire?: string }
|
||||
interface PenseesData { ecoles: EcoleData[]; auteurs: AuteurData[] }
|
||||
|
||||
// Liens d'influence inter-ecoles (Phase 7 - matrice de filiation)
|
||||
const LINKS_INFLUENCE = [
|
||||
// filiations directes
|
||||
{ source: 'eco-anarchisme', target: 'technocritique', auteurs_passerelle: ['Bookchin', 'Illich'], type: 'filiation' },
|
||||
{ source: 'eco-anarchisme', target: 'decroissance', auteurs_passerelle: ['Latouche', 'Kropotkine'], type: 'filiation' },
|
||||
{ source: 'ecosocialisme', target: 'decroissance', auteurs_passerelle: ['Saito', 'Gorz'], type: 'filiation' },
|
||||
{ source: 'ecosocialisme', target: 'ecologies-decoloniales', auteurs_passerelle: ['Klein', 'Ferdinand'], type: 'filiation' },
|
||||
{ source: 'ecofeminismes', target: 'ecologies-decoloniales', auteurs_passerelle: ['Shiva', 'Ouassak'], type: 'filiation' },
|
||||
{ source: 'ecofeminismes', target: 'pensees-vivant', auteurs_passerelle: ['Haraway', 'Despret'], type: 'filiation' },
|
||||
{ source: 'technocritique', target: 'decroissance', auteurs_passerelle: ['Ellul', 'Latouche'], type: 'filiation' },
|
||||
{ source: 'decroissance', target: 'pensees-vivant', auteurs_passerelle: ['Servigne', 'Despret'], type: 'filiation' },
|
||||
{ source: 'pensees-vivant', target: 'ethiques-environnementales', auteurs_passerelle: ['Naess', 'Latour'], type: 'filiation' },
|
||||
{ source: 'ecosocialisme', target: 'eco-anarchisme', auteurs_passerelle: ['Gorz', 'Graeber'], type: 'filiation' },
|
||||
// liens de critique (toutes les ecoles progressistes vs cap-vert / ecofascismes)
|
||||
{ source: 'ecosocialisme', target: 'capitalisme-vert', auteurs_passerelle: ['Klein', 'Malm'], type: 'critique' },
|
||||
{ source: 'decroissance', target: 'capitalisme-vert', auteurs_passerelle: ['Latouche', 'Meadows'], type: 'critique' },
|
||||
{ source: 'eco-anarchisme', target: 'capitalisme-vert', auteurs_passerelle: ['Bookchin'], type: 'critique' },
|
||||
{ source: 'ethiques-environnementales', target: 'ecofascismes', auteurs_passerelle: ['Naess'], type: 'critique' },
|
||||
{ source: 'capitalisme-vert', target: 'ecofascismes', auteurs_passerelle: [], type: 'critique' },
|
||||
]
|
||||
|
||||
const props = defineProps<{ data: PenseesData | null; active?: boolean }>()
|
||||
const emit = defineEmits<{ 'select-auteur': [id: string]; 'select-ecole': [id: string] }>()
|
||||
|
||||
const svgRef = ref<SVGElement | null>(null)
|
||||
const tooltipRef = ref<HTMLElement | null>(null)
|
||||
let simulation: any = null
|
||||
let d3LinkSel: any = null
|
||||
let d3InfluenceSel: any = null
|
||||
let d3NodeSel: any = null
|
||||
let d3EdgeLabelSel: any = null
|
||||
|
||||
async function initGraph() {
|
||||
if (!svgRef.value || !props.data) return
|
||||
const d3 = await import('d3')
|
||||
|
||||
const svgEl = svgRef.value
|
||||
const W = svgEl.clientWidth || 900
|
||||
const H = svgEl.clientHeight || 600
|
||||
|
||||
d3.select(svgEl).selectAll('*').remove()
|
||||
const svg = d3.select(svgEl).attr('viewBox', `0 0 ${W} ${H}`)
|
||||
const g = svg.append('g')
|
||||
|
||||
svg.call(d3.zoom<SVGElement, unknown>().scaleExtent([0.3, 4]).on('zoom', (e) => g.attr('transform', e.transform)) as any)
|
||||
|
||||
const ecoleMap = new Map<string, EcoleData>(props.data.ecoles.map(e => [e.id, e]))
|
||||
|
||||
// Positions fixes des ecoles (base pour forces D3)
|
||||
const ecolePositions = new Map<string, { tx: number; ty: number }>()
|
||||
props.data.ecoles.forEach(e => {
|
||||
ecolePositions.set(e.id, { tx: W * e.x_hint, ty: H * e.y_hint })
|
||||
})
|
||||
|
||||
// ---- LIENS D'INFLUENCE INTER-ECOLES (couche 3) ----
|
||||
const gInfluence = g.append('g').attr('class', 'links-influence')
|
||||
|
||||
LINKS_INFLUENCE.forEach(link => {
|
||||
const src = ecolePositions.get(link.source)
|
||||
const tgt = ecolePositions.get(link.target)
|
||||
if (!src || !tgt) return
|
||||
|
||||
const isCritique = link.type === 'critique'
|
||||
const lineEl = gInfluence.append('line')
|
||||
.attr('class', 'influence-link')
|
||||
.attr('x1', src.tx).attr('y1', src.ty)
|
||||
.attr('x2', tgt.tx).attr('y2', tgt.ty)
|
||||
.attr('stroke', isCritique ? '#d99' : '#9aa')
|
||||
.attr('stroke-width', 1)
|
||||
.attr('stroke-dasharray', isCritique ? '4,3' : '6,4')
|
||||
.attr('stroke-opacity', isCritique ? 0.2 : 0.22)
|
||||
|
||||
if (link.auteurs_passerelle && link.auteurs_passerelle.length > 0) {
|
||||
lineEl
|
||||
.on('mouseenter', (e: any) => {
|
||||
if (!tooltipRef.value) return
|
||||
tooltipRef.value.innerHTML = `<strong>Influence</strong><br><span style="opacity:0.8;font-size:0.72rem;">Passerelles : ${link.auteurs_passerelle.join(', ')}</span>`
|
||||
tooltipRef.value.style.opacity = '1'
|
||||
})
|
||||
.on('mousemove', (e: any) => {
|
||||
if (!tooltipRef.value || !svgEl) return
|
||||
const rect = (svgEl as HTMLElement).getBoundingClientRect()
|
||||
tooltipRef.value.style.left = (e.clientX - rect.left + 14) + 'px'
|
||||
tooltipRef.value.style.top = (e.clientY - rect.top - 10) + 'px'
|
||||
})
|
||||
.on('mouseleave', () => { if (tooltipRef.value) tooltipRef.value.style.opacity = '0' })
|
||||
}
|
||||
})
|
||||
|
||||
// ---- SIMULATION D3 (auteurs) ----
|
||||
// Pre-positionner chaque auteur pres de son ecole + jitter aleatoire pour eviter le rush initial vers la droite
|
||||
const auteurNodes: any[] = props.data.auteurs.map(a => {
|
||||
const ecole = ecoleMap.get(a.ecole_principale)
|
||||
const jitter = () => (Math.random() - 0.5) * 80
|
||||
return {
|
||||
id: a.id, type: 'auteur', nom: a.nom, dates: a.dates,
|
||||
bio_courte: a.bio_courte,
|
||||
bio_provisoire: a.bio_courte_provisoire ?? '',
|
||||
ingere: a.ingere,
|
||||
ecole_principale: a.ecole_principale,
|
||||
color: ecole?.color ?? '#888', r: 11,
|
||||
x: W * (ecole?.x_hint ?? 0.5) + jitter(),
|
||||
y: H * (ecole?.y_hint ?? 0.5) + jitter(),
|
||||
}
|
||||
})
|
||||
|
||||
// Liens appartenance auteur -> ecole (vers centroid fixe)
|
||||
const links: any[] = []
|
||||
props.data.auteurs.forEach(a => {
|
||||
links.push({ source: a.id, target: a.ecole_principale, strength: 0.65, isSubcourant: false })
|
||||
a.ecoles.filter(e => e !== a.ecole_principale).forEach(e => {
|
||||
links.push({ source: a.id, target: e, strength: 0.25, isSubcourant: true })
|
||||
})
|
||||
})
|
||||
|
||||
// Nodes fictifs fixes pour les ecoles (cibles des liens appartenance)
|
||||
const ecoleFixedNodes: any[] = props.data.ecoles.map(e => ({
|
||||
id: e.id, type: 'ecole-fixed', ecoleId: e.id,
|
||||
x: W * e.x_hint, y: H * e.y_hint,
|
||||
fx: W * e.x_hint, fy: H * e.y_hint,
|
||||
}))
|
||||
|
||||
// Rayon proportionnel au nombre d'auteurs de l'ecole
|
||||
const ecoleAuteurCounts = new Map<string, number>()
|
||||
props.data.ecoles.forEach(e => ecoleAuteurCounts.set(e.id, 0))
|
||||
props.data.auteurs.forEach(a => ecoleAuteurCounts.set(a.ecole_principale, (ecoleAuteurCounts.get(a.ecole_principale) ?? 0) + 1))
|
||||
const ecoleRadius = (count: number) => Math.max(16, Math.min(36, 13 + count * 1.5))
|
||||
|
||||
const allNodes = [...ecoleFixedNodes, ...auteurNodes]
|
||||
|
||||
if (simulation) simulation.stop()
|
||||
// Phase 8.D : sim ajustee pour 171 auteurs (vs 28 v2.1, densite 6x)
|
||||
simulation = d3.forceSimulation(allNodes)
|
||||
.force('link', d3.forceLink(links).id((d: any) => d.id).distance(120).strength((d: any) => d.strength ?? 0.5))
|
||||
.force('charge', d3.forceManyBody().strength(-70))
|
||||
.force('center', d3.forceCenter(W / 2, H / 2).strength(0.02))
|
||||
.force('collision', d3.forceCollide().radius((d: any) => d.type === 'ecole-fixed' ? ecoleRadius(ecoleAuteurCounts.get(d.ecoleId) ?? 0) + 4 : 12))
|
||||
.force('forceX', d3.forceX<any>((d: any) => {
|
||||
if (d.type === 'auteur') {
|
||||
const pos = ecolePositions.get(d.ecole_principale)
|
||||
return pos ? pos.tx : W / 2
|
||||
}
|
||||
return W / 2
|
||||
}).strength(0.15))
|
||||
.force('forceY', d3.forceY<any>((d: any) => {
|
||||
if (d.type === 'auteur') {
|
||||
const pos = ecolePositions.get(d.ecole_principale)
|
||||
return pos ? pos.ty : H / 2
|
||||
}
|
||||
return H / 2
|
||||
}).strength(0.15))
|
||||
|
||||
// ---- NOEUDS ECOLES visibles (couche 3.5) ----
|
||||
// Cercles proportionnels au count d'auteurs, fixes aux centroids Bonpote, cliquables
|
||||
const gEcoles = g.append('g').attr('class', 'ecoles-nodes')
|
||||
ecoleFixedNodes.forEach(eNode => {
|
||||
const ecole = ecoleMap.get(eNode.ecoleId)
|
||||
if (!ecole) return
|
||||
const count = ecoleAuteurCounts.get(eNode.ecoleId) ?? 0
|
||||
const r = ecoleRadius(count)
|
||||
gEcoles.append('circle')
|
||||
.attr('cx', eNode.fx).attr('cy', eNode.fy).attr('r', r)
|
||||
.attr('fill', ecole.color).attr('fill-opacity', 0.82).attr('stroke', ecole.color).attr('stroke-width', 2)
|
||||
.attr('class', 'ecole-node').style('cursor', 'pointer')
|
||||
.on('mouseenter', (e: any) => {
|
||||
if (!tooltipRef.value) return
|
||||
tooltipRef.value.innerHTML = `<strong>${ecole.label}</strong> <span style="opacity:0.6;font-size:0.7rem;">${count} auteur${count > 1 ? 's' : ''}</span><br><span style="opacity:0.75;font-size:0.72rem;">${ecole.description}</span>`
|
||||
tooltipRef.value.style.opacity = '1'
|
||||
})
|
||||
.on('mousemove', (e: any) => {
|
||||
if (!tooltipRef.value || !svgEl) return
|
||||
const rect = (svgEl as HTMLElement).getBoundingClientRect()
|
||||
tooltipRef.value.style.left = (e.clientX - rect.left + 14) + 'px'
|
||||
tooltipRef.value.style.top = (e.clientY - rect.top - 10) + 'px'
|
||||
})
|
||||
.on('mouseleave', () => { if (tooltipRef.value) tooltipRef.value.style.opacity = '0' })
|
||||
.on('click', (e: any) => { e.stopPropagation(); emit('select-ecole', eNode.ecoleId) })
|
||||
})
|
||||
|
||||
// ---- LIENS APPARTENANCE (couche 4) ----
|
||||
const gLinks = g.append('g').attr('class', 'links-appartenance')
|
||||
d3LinkSel = gLinks.selectAll('line').data(links).join('line')
|
||||
.attr('stroke', 'rgba(150,150,150,0.28)').attr('stroke-width', 1.2)
|
||||
|
||||
// ---- EDGE LABELS - sous-courants (couche 4b) ----
|
||||
// Afficher label "decroissance" sur lien Servigne (sous-courant specifique - option C)
|
||||
const subcourantLinks = links.filter((l: any) => l.isSubcourant)
|
||||
d3EdgeLabelSel = gLinks.selectAll('text.pensees-edge-label')
|
||||
.data(subcourantLinks)
|
||||
.join('text')
|
||||
.attr('class', 'pensees-edge-label')
|
||||
|
||||
// ---- NODES AUTEURS (couche 5) ----
|
||||
const gAuteurs = g.append('g').attr('class', 'auteurs')
|
||||
d3NodeSel = gAuteurs.selectAll('g').data(auteurNodes).join('g')
|
||||
.style('cursor', (d: any) => d.ingere ? 'pointer' : 'default')
|
||||
.call(d3.drag<any, any>()
|
||||
.on('start', (e: any, d: any) => { if (!e.active) simulation.alphaTarget(0.3).restart(); d.fx = d.x; d.fy = d.y })
|
||||
.on('drag', (e: any, d: any) => { d.fx = e.x; d.fy = e.y })
|
||||
.on('end', (e: any, d: any) => { if (!e.active) simulation.alphaTarget(0); d.fx = null; d.fy = null }))
|
||||
.on('click', (e: any, d: any) => {
|
||||
if (!d.ingere) return
|
||||
e.stopPropagation()
|
||||
emit('select-auteur', d.id)
|
||||
})
|
||||
|
||||
// Phase 8.D : grisage conditionnel auteurs non-ingeres (ingere:false)
|
||||
d3NodeSel.append('circle')
|
||||
.attr('r', (d: any) => d.r)
|
||||
.attr('fill', (d: any) => d.ingere ? (d.color + 'cc') : '#bbbbbb')
|
||||
.attr('stroke', (d: any) => d.ingere ? d.color : '#999999')
|
||||
.attr('stroke-width', 1.5)
|
||||
.attr('opacity', (d: any) => d.ingere ? 1 : 0.35)
|
||||
|
||||
// ---- LABELS AUTEURS (couche 6 - fix 7.1 : drop-shadow blanc) ----
|
||||
d3NodeSel.append('text')
|
||||
.attr('class', 'pensees-auteur-label')
|
||||
.text((d: any) => d.nom.split(' ').pop() ?? d.nom)
|
||||
.attr('text-anchor', 'middle')
|
||||
.attr('dy', (d: any) => -(d.r + 4))
|
||||
.style('pointer-events', 'none')
|
||||
.style('opacity', (d: any) => d.ingere ? 1 : 0.3)
|
||||
.style('fill', (d: any) => d.ingere ? '#1a1a1a' : '#777777')
|
||||
|
||||
d3NodeSel
|
||||
.on('mouseenter', (e: any, d: any) => {
|
||||
if (!tooltipRef.value) return
|
||||
let tooltipHtml = ''
|
||||
if (d.ingere) {
|
||||
const rawBio = d.bio_courte || ''
|
||||
const bio = rawBio.length > 90 ? rawBio.slice(0, 87) + '...' : rawBio
|
||||
tooltipHtml = `<strong>${d.nom}</strong> <span style="opacity:0.6;font-size:0.7rem;">${d.dates}</span><br><span style="opacity:0.75;font-size:0.72rem;">${bio || 'Dans le RAG ATIS.'}</span>`
|
||||
} else {
|
||||
tooltipHtml = `<strong>${d.nom}</strong> <span style="opacity:0.6;font-size:0.7rem;">${d.dates}</span><br><span style="opacity:0.65;font-size:0.72rem;font-style:italic;">Présent dans Bonpote, pas encore ingéré dans le RAG ATIS.</span>`
|
||||
}
|
||||
tooltipRef.value.innerHTML = tooltipHtml
|
||||
tooltipRef.value.style.opacity = '1'
|
||||
})
|
||||
.on('mousemove', (e: any) => {
|
||||
if (!tooltipRef.value || !svgEl) return
|
||||
const rect = (svgEl as HTMLElement).getBoundingClientRect()
|
||||
tooltipRef.value.style.left = (e.clientX - rect.left + 14) + 'px'
|
||||
tooltipRef.value.style.top = (e.clientY - rect.top - 10) + 'px'
|
||||
})
|
||||
.on('mouseleave', () => { if (tooltipRef.value) tooltipRef.value.style.opacity = '0' })
|
||||
|
||||
simulation.on('tick', () => {
|
||||
d3LinkSel
|
||||
.attr('x1', (d: any) => d.source.x).attr('y1', (d: any) => d.source.y)
|
||||
.attr('x2', (d: any) => d.target.x).attr('y2', (d: any) => d.target.y)
|
||||
|
||||
// Edge labels positions (milieu du lien)
|
||||
d3EdgeLabelSel
|
||||
.attr('x', (d: any) => (d.source.x + d.target.x) / 2)
|
||||
.attr('y', (d: any) => (d.source.y + d.target.y) / 2)
|
||||
.text((d: any) => {
|
||||
const targetId = typeof d.target === 'object' ? d.target.id : d.target
|
||||
return targetId
|
||||
})
|
||||
|
||||
d3NodeSel.attr('transform', (d: any) => `translate(${d.x},${d.y})`)
|
||||
})
|
||||
}
|
||||
|
||||
watch(() => props.active, (val) => { if (val && import.meta.client && props.data) requestAnimationFrame(() => requestAnimationFrame(() => initGraph())) })
|
||||
watch(() => props.data, (val) => { if (val && props.active && import.meta.client) requestAnimationFrame(() => requestAnimationFrame(() => initGraph())) })
|
||||
onMounted(async () => { if (import.meta.client && props.data && props.active) { await nextTick(); initGraph() } })
|
||||
onUnmounted(() => { if (simulation) simulation.stop() })
|
||||
|
||||
function triggerResize() {
|
||||
if (simulation) {
|
||||
simulation.alpha(0.3).restart()
|
||||
} else if (import.meta.client && props.data && props.active) {
|
||||
initGraph()
|
||||
}
|
||||
}
|
||||
defineExpose({ triggerResize })
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* ---- Labels auteurs : fix 7.1 drop-shadow blanc pour lisibilite sur pastel ---- */
|
||||
.pensees-auteur-label {
|
||||
fill: #1a1a1a;
|
||||
font-weight: 600;
|
||||
font-size: 10px;
|
||||
filter: drop-shadow(0 0 2.5px rgba(255,255,255,0.95));
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
/* ---- Labels edge sous-courants (option C : seulement les liens secondaires) ---- */
|
||||
.pensees-edge-label {
|
||||
fill: #555;
|
||||
font-size: 8.5px;
|
||||
font-style: italic;
|
||||
opacity: 0.7;
|
||||
text-anchor: middle;
|
||||
dominant-baseline: middle;
|
||||
user-select: none;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* ---- Voronoi cellules : non-blurre Phase 8.F (revert Phase 8.D) ---- */
|
||||
/* Blur retire ; les cellules colorees Bonpote-aligned suffisent visuellement. */
|
||||
|
||||
.ecole-node {
|
||||
transition: opacity 0.15s, r 0.15s;
|
||||
}
|
||||
.ecole-node:hover {
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -1,446 +0,0 @@
|
||||
<template>
|
||||
<!-- Mode overlay : bouton flottant bottom-right (legacy) -->
|
||||
<template v-if="!inline">
|
||||
<button v-if="!open" @click="open = true"
|
||||
class="fixed bottom-6 right-6 z-[1000] flex items-center gap-2 px-4 rounded-full shadow-lg"
|
||||
style="height:48px;background:var(--nav-primary);color:var(--nav-text-on-primary);font-size:0.875rem;font-weight:600;"
|
||||
aria-label="Chatbot Pensees Ecologiques">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
|
||||
</svg>
|
||||
<span>Pensees ?</span>
|
||||
</button>
|
||||
|
||||
<Transition name="cpanel">
|
||||
<div v-if="open" class="fixed bottom-6 right-6 z-[1000] flex flex-col"
|
||||
style="width:min(360px,calc(100vw - 24px));max-height:60vh;background:var(--nav-surface);border-radius:14px;box-shadow:0 8px 32px rgba(26,34,56,0.22);overflow:hidden;border:1px solid var(--nav-bg-alt);"
|
||||
role="dialog" aria-modal="true" aria-label="RAG Pensees Ecologiques">
|
||||
|
||||
<!-- Header overlay -->
|
||||
<div class="flex items-center justify-between px-4 py-3 shrink-0" style="border-bottom:1px solid var(--nav-bg-alt);background:var(--nav-bg);">
|
||||
<div>
|
||||
<p class="text-sm font-bold" style="color:var(--nav-text);">RAG Pensees Ecologiques</p>
|
||||
</div>
|
||||
<button @click="open = false" class="flex items-center justify-center w-7 h-7 rounded-full hover:opacity-70"
|
||||
style="background:var(--nav-bg-alt);color:var(--nav-text-muted);" aria-label="Fermer">
|
||||
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Corpus toggle overlay -->
|
||||
<div class="shrink-0 px-3 pt-2 pb-1" style="background:var(--nav-bg);border-bottom:1px solid var(--nav-bg-alt);">
|
||||
<div class="flex gap-1" role="group" aria-label="Choisir le corpus">
|
||||
<button v-for="opt in corpusOptions" :key="opt.value" @click="setCorpus(opt.value)" :title="opt.tooltip"
|
||||
class="flex-1 px-2 py-1 rounded text-xs font-medium transition-colors"
|
||||
:style="corpus === opt.value ? 'background:var(--nav-primary);color:var(--nav-text-on-primary);' : 'background:var(--nav-bg-alt);color:var(--nav-text-muted);'"
|
||||
:aria-pressed="corpus === opt.value">{{ opt.label }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Messages overlay -->
|
||||
<div ref="msgElOverlay" class="flex-1 overflow-y-auto px-4 py-3 flex flex-col gap-3" style="min-height:0;">
|
||||
<div v-if="messages.length === 0" style="font-size:0.8rem;color:var(--nav-text-muted);line-height:1.5;">
|
||||
<template v-if="corpus === 'pensees'">Pose une question sur les pensees ecologiques...</template>
|
||||
<template v-else-if="corpus === 'projets'">Pose une question sur les projets d'architecture de Jules...</template>
|
||||
<template v-else>Pose une question sur les pensees ecologiques ancrees dans les projets archi de Jules.</template>
|
||||
</div>
|
||||
<template v-for="(msg, i) in messages" :key="i">
|
||||
<div v-if="msg.role === 'user'" class="self-end max-w-[85%] px-3 py-2 rounded-xl text-sm"
|
||||
style="background:var(--nav-primary);color:var(--nav-text-on-primary);font-weight:500;">{{ msg.content }}</div>
|
||||
<div v-else class="self-start max-w-full">
|
||||
<div class="px-3 py-2 rounded-xl text-sm leading-relaxed" style="background:var(--nav-bg-alt);color:var(--nav-text);"
|
||||
v-html="renderMd(stripSrc(msg.content))" />
|
||||
<div v-if="filteredSources(msg.content).length" class="mt-1.5">
|
||||
<button @click="toggled[i] = !toggled[i]" class="flex items-center gap-1 text-xs hover:opacity-70" style="color:var(--nav-text-muted);">
|
||||
<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"
|
||||
:style="`transform:rotate(${toggled[i] ? 90 : 0}deg);transition:transform 0.15s`"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
Sources ({{ filteredSources(msg.content).length }})
|
||||
</button>
|
||||
<div v-if="toggled[i]" class="mt-1 flex flex-col gap-1">
|
||||
<div v-for="(s, si) in filteredSources(msg.content)" :key="si" class="px-2 py-1 rounded text-xs"
|
||||
style="background:var(--nav-bg-alt);color:var(--nav-text-muted);border-left:2px solid var(--nav-primary-solid);">
|
||||
<span style="font-weight:600;color:var(--nav-text);">[{{ si + 1 }}]</span> {{ s }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div v-if="loading" class="self-start px-3 py-2 rounded-xl" style="background:var(--nav-bg-alt);">
|
||||
<span class="dots"><span/><span style="animation-delay:150ms"/><span style="animation-delay:300ms"/></span>
|
||||
</div>
|
||||
<div v-if="err" class="text-xs px-3 py-2 rounded-xl" style="background:#fee;color:#c0392b;">{{ err }}</div>
|
||||
</div>
|
||||
|
||||
<!-- Input overlay -->
|
||||
<div class="shrink-0 px-3 py-3" style="border-top:1px solid var(--nav-bg-alt);">
|
||||
<div class="flex items-center gap-2" style="position:relative;">
|
||||
<!-- Hashtag autocomplete dropdown (Slack/Discord pattern, au-dessus de l'input) -->
|
||||
<div v-if="hashtagDropdownOpen && hashtagSuggestions.length"
|
||||
class="hashtag-dropdown"
|
||||
style="position:absolute;bottom:100%;left:0;right:0;margin-bottom:6px;max-height:220px;overflow-y:auto;background:var(--nav-surface);border:1px solid var(--nav-bg-alt);border-radius:8px;box-shadow:0 -4px 12px rgba(0,0,0,0.12);z-index:50;">
|
||||
<div v-for="(auteur, idx) in hashtagSuggestions" :key="auteur.id"
|
||||
@mousedown.prevent="applyHashtagSuggestion(auteur)"
|
||||
@mouseenter="hashtagSelectedIndex = idx"
|
||||
class="px-3 py-2 cursor-pointer text-sm"
|
||||
:style="idx === hashtagSelectedIndex ? 'background:var(--nav-primary);color:var(--nav-text-on-primary);' : 'color:var(--nav-text);'">
|
||||
<span style="font-weight:600;">#{{ auteur.id }}</span>
|
||||
<span :style="idx === hashtagSelectedIndex ? 'opacity:0.85;margin-left:8px;font-size:0.78rem;' : 'opacity:0.65;margin-left:8px;font-size:0.78rem;color:var(--nav-text-muted);'">{{ auteur.nom }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<input ref="inputElOverlay" v-model="q" type="text" placeholder="Ta question, tape #auteur pour cibler" maxlength="500"
|
||||
class="flex-1 px-3 py-2 rounded-lg text-sm outline-none"
|
||||
style="background:var(--nav-bg);color:var(--nav-text);border:1px solid var(--nav-bg-alt);"
|
||||
@keydown="onInputKeydown" />
|
||||
<button @click="send" :disabled="loading || !q.trim()"
|
||||
class="flex items-center justify-center w-9 h-9 rounded-lg"
|
||||
:style="loading||!q.trim() ? 'background:var(--nav-bg-alt);opacity:0.5;cursor:not-allowed;' : 'background:var(--nav-primary);cursor:pointer;'"
|
||||
aria-label="Envoyer">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="color:white;">
|
||||
<line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</Transition>
|
||||
</template>
|
||||
|
||||
<!-- Mode inline : remplit 100% de son parent slot -->
|
||||
<div v-else
|
||||
class="flex flex-col w-full h-full"
|
||||
style="background:var(--nav-surface);overflow:hidden;"
|
||||
role="region" aria-label="RAG Pensees Ecologiques">
|
||||
|
||||
<!-- Header inline -->
|
||||
<div class="flex items-center justify-between px-4 py-2 shrink-0" style="border-bottom:1px solid var(--nav-bg-alt);background:var(--nav-bg);">
|
||||
<div>
|
||||
<p class="text-sm font-bold" style="color:var(--nav-text);">RAG Pensees Ecologiques</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Corpus toggle inline -->
|
||||
<div class="shrink-0 px-3 pt-2 pb-1" style="background:var(--nav-bg);border-bottom:1px solid var(--nav-bg-alt);">
|
||||
<div class="flex gap-1" role="group" aria-label="Choisir le corpus">
|
||||
<button v-for="opt in corpusOptions" :key="opt.value" @click="setCorpus(opt.value)" :title="opt.tooltip"
|
||||
class="flex-1 px-2 py-1 rounded text-xs font-medium transition-colors"
|
||||
:style="corpus === opt.value ? 'background:var(--nav-primary);color:var(--nav-text-on-primary);' : 'background:var(--nav-bg-alt);color:var(--nav-text-muted);'"
|
||||
:aria-pressed="corpus === opt.value">{{ opt.label }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Messages inline -->
|
||||
<div ref="msgElInline" class="flex-1 overflow-y-auto px-4 py-3 flex flex-col gap-3" style="min-height:0;">
|
||||
<div v-if="messages.length === 0" style="font-size:0.8rem;color:var(--nav-text-muted);line-height:1.5;">
|
||||
<template v-if="corpus === 'pensees'">Pose une question sur les pensees ecologiques : ecosocialisme, decroissance, ecofeminismes, technocritique, deep ecology...</template>
|
||||
<template v-else-if="corpus === 'projets'">Pose une question sur les projets d'architecture de Jules : Butte Pinson, strategie thermique, partis pris constructifs...</template>
|
||||
<template v-else>Pose une question sur les pensees ecologiques ancrees dans les projets archi de Jules (corpus croise, defaut).</template>
|
||||
</div>
|
||||
<template v-for="(msg, i) in messages" :key="i">
|
||||
<div v-if="msg.role === 'user'" class="self-end max-w-[85%] px-3 py-2 rounded-xl text-sm"
|
||||
style="background:var(--nav-primary);color:var(--nav-text-on-primary);font-weight:500;">{{ msg.content }}</div>
|
||||
<div v-else class="self-start max-w-full">
|
||||
<div class="px-3 py-2 rounded-xl text-sm leading-relaxed" style="background:var(--nav-bg-alt);color:var(--nav-text);"
|
||||
v-html="renderMd(stripSrc(msg.content))" />
|
||||
<div v-if="filteredSources(msg.content).length" class="mt-1.5">
|
||||
<button @click="toggled[i] = !toggled[i]" class="flex items-center gap-1 text-xs hover:opacity-70" style="color:var(--nav-text-muted);">
|
||||
<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"
|
||||
:style="`transform:rotate(${toggled[i] ? 90 : 0}deg);transition:transform 0.15s`"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
Sources ({{ filteredSources(msg.content).length }})
|
||||
</button>
|
||||
<div v-if="toggled[i]" class="mt-1 flex flex-col gap-1">
|
||||
<div v-for="(s, si) in filteredSources(msg.content)" :key="si" class="px-2 py-1 rounded text-xs"
|
||||
style="background:var(--nav-bg-alt);color:var(--nav-text-muted);border-left:2px solid var(--nav-primary-solid);">
|
||||
<span style="font-weight:600;color:var(--nav-text);">[{{ si + 1 }}]</span> {{ s }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div v-if="loading" class="self-start px-3 py-2 rounded-xl" style="background:var(--nav-bg-alt);">
|
||||
<span class="dots"><span/><span style="animation-delay:150ms"/><span style="animation-delay:300ms"/></span>
|
||||
</div>
|
||||
<div v-if="err" class="text-xs px-3 py-2 rounded-xl" style="background:#fee;color:#c0392b;">{{ err }}</div>
|
||||
</div>
|
||||
|
||||
<!-- Input inline -->
|
||||
<div class="shrink-0 px-3 py-3" style="border-top:1px solid var(--nav-bg-alt);">
|
||||
<div class="flex items-center gap-2" style="position:relative;">
|
||||
<!-- Hashtag autocomplete dropdown (Slack/Discord pattern, au-dessus de l'input) -->
|
||||
<div v-if="hashtagDropdownOpen && hashtagSuggestions.length"
|
||||
class="hashtag-dropdown"
|
||||
style="position:absolute;bottom:100%;left:0;right:0;margin-bottom:6px;max-height:220px;overflow-y:auto;background:var(--nav-surface);border:1px solid var(--nav-bg-alt);border-radius:8px;box-shadow:0 -4px 12px rgba(0,0,0,0.12);z-index:50;">
|
||||
<div v-for="(auteur, idx) in hashtagSuggestions" :key="auteur.id"
|
||||
@mousedown.prevent="applyHashtagSuggestion(auteur)"
|
||||
@mouseenter="hashtagSelectedIndex = idx"
|
||||
class="px-3 py-2 cursor-pointer text-sm"
|
||||
:style="idx === hashtagSelectedIndex ? 'background:var(--nav-primary);color:var(--nav-text-on-primary);' : 'color:var(--nav-text);'">
|
||||
<span style="font-weight:600;">#{{ auteur.id }}</span>
|
||||
<span :style="idx === hashtagSelectedIndex ? 'opacity:0.85;margin-left:8px;font-size:0.78rem;' : 'opacity:0.65;margin-left:8px;font-size:0.78rem;color:var(--nav-text-muted);'">{{ auteur.nom }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<input ref="inputElInline" v-model="q" type="text" placeholder="Ta question, tape #auteur pour cibler" maxlength="500"
|
||||
class="flex-1 px-3 py-2 rounded-lg text-sm outline-none"
|
||||
style="background:var(--nav-bg);color:var(--nav-text);border:1px solid var(--nav-bg-alt);"
|
||||
@keydown="onInputKeydown" />
|
||||
<button @click="send" :disabled="loading || !q.trim()"
|
||||
class="flex items-center justify-center w-9 h-9 rounded-lg"
|
||||
:style="loading||!q.trim() ? 'background:var(--nav-bg-alt);opacity:0.5;cursor:not-allowed;' : 'background:var(--nav-primary);cursor:pointer;'"
|
||||
aria-label="Envoyer">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="color:white;">
|
||||
<line x1="22" y1="2" x2="11" y2="13"/><polygon points="22 2 15 22 11 13 2 9 22 2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
interface Message { role: 'user' | 'assistant'; content: string }
|
||||
interface AuteurMini { id: string; nom: string }
|
||||
|
||||
type CorpusMode = 'pensees' | 'projets' | 'both'
|
||||
|
||||
const CORPUS_STORAGE_KEY = 'chatbot-pensees-corpus'
|
||||
|
||||
const PROJECT_SOURCE_PATTERNS = [/butte.?pinson/i, /butte_pinson/i]
|
||||
|
||||
function isProjectSource(s: string): boolean {
|
||||
return PROJECT_SOURCE_PATTERNS.some(p => p.test(s))
|
||||
}
|
||||
|
||||
const corpusOptions: { value: CorpusMode; label: string; tooltip: string }[] = [
|
||||
{ value: 'pensees', label: 'Pensees', tooltip: 'Corpus FRACAS uniquement (auteurs ecologie politique)' },
|
||||
{ value: 'projets', label: 'Projets', tooltip: 'Projets archi de Jules uniquement' },
|
||||
{ value: 'both', label: 'Croise*', tooltip: 'Projets ancres + pensees en eclairage (defaut)' },
|
||||
]
|
||||
|
||||
const props = defineProps<{
|
||||
auteurContext?: string | null
|
||||
inline?: boolean
|
||||
}>()
|
||||
|
||||
const open = ref(false)
|
||||
const q = ref('')
|
||||
const messages = ref<Message[]>([])
|
||||
const loading = ref(false)
|
||||
const err = ref('')
|
||||
const toggled = ref<Record<number, boolean>>({})
|
||||
const msgElOverlay = ref<HTMLElement | null>(null)
|
||||
const msgElInline = ref<HTMLElement | null>(null)
|
||||
const inputElOverlay = ref<HTMLInputElement | null>(null)
|
||||
const inputElInline = ref<HTMLInputElement | null>(null)
|
||||
const corpusCount = 18
|
||||
|
||||
const corpus = ref<CorpusMode>('pensees')
|
||||
|
||||
// Phase 8.E : hashtag mentions
|
||||
const auteursIngeres = ref<AuteurMini[]>([])
|
||||
const hashtagSuggestions = ref<AuteurMini[]>([])
|
||||
const hashtagDropdownOpen = ref(false)
|
||||
const hashtagSelectedIndex = ref(0)
|
||||
|
||||
function getActiveInput(): HTMLInputElement | null {
|
||||
return props.inline ? inputElInline.value : inputElOverlay.value
|
||||
}
|
||||
|
||||
function detectHashtagAtCursor(input: string, cursorPos: number): { start: number; partial: string } | null {
|
||||
const before = input.slice(0, cursorPos)
|
||||
const m = before.match(/#([a-z0-9-]*)$/i)
|
||||
if (!m) return null
|
||||
return { start: m.index ?? 0, partial: (m[1] || '').toLowerCase() }
|
||||
}
|
||||
|
||||
function updateHashtagSuggestions() {
|
||||
const el = getActiveInput()
|
||||
const cursorPos = el?.selectionStart ?? q.value.length
|
||||
const detection = detectHashtagAtCursor(q.value, cursorPos)
|
||||
// Ouvrir dès que le # est présent (partial vide accepté pour afficher la liste)
|
||||
if (!detection) {
|
||||
hashtagDropdownOpen.value = false
|
||||
return
|
||||
}
|
||||
const partial = detection.partial
|
||||
const list = partial.length === 0
|
||||
? auteursIngeres.value.slice(0, 8)
|
||||
: auteursIngeres.value
|
||||
.filter(a => a.id.toLowerCase().includes(partial) || a.nom.toLowerCase().includes(partial))
|
||||
.slice(0, 8)
|
||||
hashtagSuggestions.value = list
|
||||
hashtagDropdownOpen.value = list.length > 0
|
||||
hashtagSelectedIndex.value = 0
|
||||
}
|
||||
|
||||
function applyHashtagSuggestion(auteur: AuteurMini) {
|
||||
const el = getActiveInput()
|
||||
const cursorPos = el?.selectionStart ?? q.value.length
|
||||
const detection = detectHashtagAtCursor(q.value, cursorPos)
|
||||
if (!detection) return
|
||||
const before = q.value.slice(0, detection.start)
|
||||
const after = q.value.slice(cursorPos)
|
||||
const insert = '#' + auteur.id + ' '
|
||||
q.value = before + insert + after
|
||||
hashtagDropdownOpen.value = false
|
||||
nextTick(() => {
|
||||
const focusEl = getActiveInput()
|
||||
if (!focusEl) return
|
||||
focusEl.focus()
|
||||
const newPos = before.length + insert.length
|
||||
focusEl.setSelectionRange(newPos, newPos)
|
||||
})
|
||||
}
|
||||
|
||||
function onInputKeydown(e: KeyboardEvent) {
|
||||
if (hashtagDropdownOpen.value && hashtagSuggestions.value.length > 0) {
|
||||
if (e.key === 'ArrowDown') {
|
||||
e.preventDefault()
|
||||
hashtagSelectedIndex.value = (hashtagSelectedIndex.value + 1) % hashtagSuggestions.value.length
|
||||
return
|
||||
}
|
||||
if (e.key === 'ArrowUp') {
|
||||
e.preventDefault()
|
||||
hashtagSelectedIndex.value = (hashtagSelectedIndex.value - 1 + hashtagSuggestions.value.length) % hashtagSuggestions.value.length
|
||||
return
|
||||
}
|
||||
if (e.key === 'Enter' || e.key === 'Tab') {
|
||||
e.preventDefault()
|
||||
applyHashtagSuggestion(hashtagSuggestions.value[hashtagSelectedIndex.value])
|
||||
return
|
||||
}
|
||||
if (e.key === 'Escape') {
|
||||
e.preventDefault()
|
||||
hashtagDropdownOpen.value = false
|
||||
return
|
||||
}
|
||||
}
|
||||
if (e.key === 'Enter') {
|
||||
e.preventDefault()
|
||||
send()
|
||||
}
|
||||
}
|
||||
|
||||
watch(q, () => {
|
||||
updateHashtagSuggestions()
|
||||
})
|
||||
|
||||
onMounted(async () => {
|
||||
const saved = window.localStorage.getItem(CORPUS_STORAGE_KEY) as CorpusMode | null
|
||||
if (saved && ['pensees', 'projets', 'both'].includes(saved)) {
|
||||
corpus.value = saved
|
||||
}
|
||||
// Chargement liste auteurs ingérés pour autocomplete hashtag
|
||||
try {
|
||||
const data = await $fetch<any>('/data/auteurs-pensees.json')
|
||||
auteursIngeres.value = (data?.auteurs ?? [])
|
||||
.filter((a: any) => a.ingere === true)
|
||||
.map((a: any) => ({ id: String(a.id), nom: String(a.nom) }))
|
||||
} catch (e) {
|
||||
console.error('Erreur chargement auteurs-pensees.json pour hashtag', e)
|
||||
}
|
||||
})
|
||||
|
||||
function setCorpus(val: CorpusMode) {
|
||||
corpus.value = val
|
||||
window.localStorage.setItem(CORPUS_STORAGE_KEY, val)
|
||||
}
|
||||
|
||||
watch(open, (val) => {
|
||||
if (!val) return
|
||||
nextTick(() => inputElOverlay.value?.focus())
|
||||
if (props.auteurContext && messages.value.length === 0)
|
||||
q.value = `Quelles sont les theses centrales de ${props.auteurContext} ?`
|
||||
})
|
||||
watch(() => props.auteurContext, (ctx) => {
|
||||
if (!ctx) return
|
||||
if (!props.inline && !open.value) open.value = true
|
||||
if (messages.value.length === 0) q.value = `Quelles sont les theses centrales de ${ctx} ?`
|
||||
})
|
||||
|
||||
async function send() {
|
||||
const query = q.value.trim()
|
||||
if (!query || loading.value) return
|
||||
|
||||
// Extraire le premier hashtag matchant un auteur ingéré
|
||||
let auteurSlug: string | null = null
|
||||
const matches = [...query.matchAll(/#([a-z0-9-]+)/gi)]
|
||||
for (const m of matches) {
|
||||
const slug = m[1].toLowerCase()
|
||||
if (auteursIngeres.value.find(a => a.id === slug)) {
|
||||
auteurSlug = slug
|
||||
break
|
||||
}
|
||||
}
|
||||
// Premier hashtag non-matché (pour info utilisateur si jamais ne match aucun)
|
||||
let auteurSlugUnmatched: string | null = null
|
||||
if (!auteurSlug && matches.length > 0) {
|
||||
auteurSlugUnmatched = matches[0][1].toLowerCase()
|
||||
}
|
||||
|
||||
err.value = ''
|
||||
messages.value.push({ role: 'user', content: query })
|
||||
q.value = ''
|
||||
hashtagDropdownOpen.value = false
|
||||
loading.value = true
|
||||
await nextTick()
|
||||
scrollBottom()
|
||||
try {
|
||||
const res = await $fetch<any>('/api/chatbot-pensees', {
|
||||
method: 'POST',
|
||||
body: {
|
||||
query,
|
||||
mode: 'hybrid',
|
||||
corpus: corpus.value,
|
||||
auteur_slug: auteurSlug ?? auteurSlugUnmatched,
|
||||
},
|
||||
})
|
||||
let responseText = res.response ?? ''
|
||||
if (res.auteur_unmatched) {
|
||||
responseText = `*(Aucun livre de #${res.auteur_unmatched} n'est ingéré dans le RAG. Je réponds depuis la carte entière.)*\n\n` + responseText
|
||||
}
|
||||
messages.value.push({ role: 'assistant', content: responseText })
|
||||
} catch (e: any) {
|
||||
const s = e?.response?.status ?? e?.statusCode
|
||||
err.value = s === 429 ? 'Limite atteinte.' : s === 503 ? 'RAG indisponible.' : 'Erreur, reessaie.'
|
||||
} finally {
|
||||
loading.value = false
|
||||
await nextTick()
|
||||
scrollBottom()
|
||||
}
|
||||
}
|
||||
|
||||
function scrollBottom() {
|
||||
const el = props.inline ? msgElInline.value : msgElOverlay.value
|
||||
if (el) el.scrollTop = el.scrollHeight
|
||||
}
|
||||
|
||||
function renderMd(t: string) {
|
||||
return '<p>' + t.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>').replace(/\*(.+?)\*/g, '<em>$1</em>').replace(/\n\n/g, '</p><p>').replace(/\n/g, '<br>') + '</p>'
|
||||
}
|
||||
function stripSrc(t: string) { return t.replace(/\n*(?:Sources?|References?)\s*:[\s\S]*$/i, '').trim() }
|
||||
|
||||
function parseSrc(t: string): string[] {
|
||||
const bloc = t.match(/\n*(?:Sources?|References?)\s*:\n?([\s\S]+?)$/i)
|
||||
if (bloc) return bloc[1].split('\n').map(l => l.replace(/^[-*\d.[\]]+\s*/, '').trim()).filter(l => l.length > 3)
|
||||
return [...new Set([...t.matchAll(/\[([^\]]{5,80})\]/g)].filter(m => m[1].includes(' - ')).map(m => m[1]))]
|
||||
}
|
||||
|
||||
function filteredSources(t: string): string[] {
|
||||
const all = parseSrc(t)
|
||||
if (corpus.value === 'both') return all
|
||||
if (corpus.value === 'projets') return all.filter(s => isProjectSource(s))
|
||||
return all.filter(s => !isProjectSource(s))
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.cpanel-enter-active { transition: opacity 0.2s, transform 0.22s cubic-bezier(0.34,1.56,0.64,1); }
|
||||
.cpanel-leave-active { transition: opacity 0.18s, transform 0.15s ease-in; }
|
||||
.cpanel-enter-from { opacity: 0; transform: translateY(12px) scale(0.95); }
|
||||
.cpanel-leave-to { opacity: 0; transform: translateY(8px) scale(0.97); }
|
||||
.dots span { display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--nav-text-muted);margin:0 2px;animation:bounce 1s infinite; }
|
||||
@keyframes bounce { 0%,80%,100%{transform:translateY(0)}40%{transform:translateY(-5px)} }
|
||||
</style>
|
||||
@@ -52,10 +52,9 @@
|
||||
<div class="chatbot-body-inner" ref="messagesContainer">
|
||||
<!-- Onboarding -->
|
||||
<div v-if="messages.length === 0" class="onboarding-bubble">
|
||||
<p>Je connais les structures d'entraide pour architectes référencées sur cette carte — appui juridique, technique, économique, formation, santé mentale, gestion d'agence…</p>
|
||||
<p>Décris ta situation, je te propose les fiches les plus pertinentes.</p>
|
||||
<p class="example">Exemple : "Architecte salarié, litige avec mon employeur, besoin d'un appui juridique droit du travail, Île-de-France."</p>
|
||||
<p style="margin-top: 8px; font-size: 0.72rem; opacity: 0.6;">Propulsé par Mistral FR — serveur européen souverain, zéro rétention.</p>
|
||||
<p>Explore les 120 structures de la carte par la conversation. Je peux t'aider à trouver des collectifs, agences ou réseaux selon ta situation, ta pratique ou tes inspirations du moment.</p>
|
||||
<p class="example">Exemple : "Je cherche des acteurs de la rénovation de maisons individuelles en France, plutôt en milieu rural, avec des approches biosourcées ou low-tech."</p>
|
||||
<p style="margin-top: 8px; font-size: 0.72rem; opacity: 0.6;">Propulsé par Mistral FR - serveur européen souverain, zéro rétention.</p>
|
||||
</div>
|
||||
|
||||
<!-- Messages -->
|
||||
@@ -205,7 +204,7 @@ async function sendMessage() {
|
||||
const res = await $fetch<{
|
||||
reponse_texte: string
|
||||
fiches_recommandees: { id: number | string; nom: string; explication: string }[]
|
||||
}>('/api/chatbot', {
|
||||
}>('/api/chatbot-v2', {
|
||||
method: 'POST',
|
||||
body: { question },
|
||||
})
|
||||
|
||||
@@ -1,208 +0,0 @@
|
||||
<template>
|
||||
<Teleport to="body">
|
||||
<transition name="backdrop">
|
||||
<div
|
||||
v-if="modelValue"
|
||||
class="fixed inset-0 z-[1010]"
|
||||
style="background: rgba(26,34,56,0.5);"
|
||||
@click="emit('update:modelValue', false)"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</transition>
|
||||
|
||||
<transition name="sheet">
|
||||
<div
|
||||
v-if="modelValue"
|
||||
class="fixed inset-x-0 bottom-0 z-[1011] flex flex-col"
|
||||
style="background: var(--nav-surface); height: 100dvh; max-height: 100dvh; box-shadow: 0 -4px 32px rgba(26,34,56,0.18);"
|
||||
role="dialog"
|
||||
aria-modal="true"
|
||||
aria-label="Assistant Réseaux AEP"
|
||||
>
|
||||
<div class="flex justify-center pt-3 pb-1 shrink-0">
|
||||
<div class="rounded-full" style="width: 36px; height: 4px; background: var(--nav-bg-alt);" />
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-between px-4 py-3 shrink-0 border-b" style="border-color: var(--nav-bg-alt);">
|
||||
<button
|
||||
@click="emit('update:modelValue', false)"
|
||||
class="flex items-center gap-2 text-sm font-medium transition-opacity hover:opacity-70"
|
||||
style="color: var(--nav-text-muted);"
|
||||
aria-label="Retour"
|
||||
>
|
||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="15 18 9 12 15 6"/>
|
||||
</svg>
|
||||
Retour
|
||||
</button>
|
||||
<div class="flex items-center gap-2">
|
||||
<div class="w-7 h-7 rounded-full flex items-center justify-center shrink-0" style="background: var(--nav-primary);">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="color: var(--nav-text-on-primary);">
|
||||
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<span class="font-bold text-sm" style="color: var(--nav-text);">Réseaux AEP</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ref="messagesContainer" class="flex-1 overflow-y-auto px-4 py-4 flex flex-col gap-3">
|
||||
<div v-if="messages.length === 0" class="onboarding-bubble">
|
||||
<p>Je connais les <strong>120 réseaux, collectifs et agences</strong> cartographiés dans AEP — ceux qui portent une vision écologique et politique de l'architecture.</p>
|
||||
<p>Décris ta situation : tu cherches un collectif, une agence inspirante, un partenaire sur un projet en Occitanie, en transition énergétique ?</p>
|
||||
</div>
|
||||
|
||||
<template v-for="(msg, i) in messages" :key="i">
|
||||
<div v-if="msg.role === 'user'" class="user-bubble">{{ msg.content }}</div>
|
||||
<div v-else class="assistant-bubble">
|
||||
<div v-html="renderMd(msg.content)" />
|
||||
<div v-if="msg.fiches && msg.fiches.length > 0" class="fiches-list" style="margin-top:12px;">
|
||||
<p class="fiches-title">Structures recommandées :</p>
|
||||
<a
|
||||
v-for="fiche in msg.fiches"
|
||||
:key="fiche.id"
|
||||
:href="`/agences#${fiche.id}`"
|
||||
class="fiche-card"
|
||||
>
|
||||
<span class="fiche-nom">{{ fiche.nom }}</span>
|
||||
<span v-if="fiche.explication" class="fiche-expl">{{ fiche.explication }}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div v-if="loading" class="assistant-bubble loading-bubble">
|
||||
<span class="dot" /><span class="dot" /><span class="dot" />
|
||||
</div>
|
||||
<div v-if="errorMsg" class="error-bubble">{{ errorMsg }}</div>
|
||||
</div>
|
||||
|
||||
<div class="shrink-0 px-4 pt-3 border-t" style="border-color: var(--nav-bg-alt); padding-bottom: max(1rem, env(safe-area-inset-bottom));">
|
||||
<div class="flex items-center gap-2">
|
||||
<input
|
||||
v-model="inputText"
|
||||
type="text"
|
||||
:disabled="loading"
|
||||
placeholder="Décris ta situation…"
|
||||
class="flex-1 px-4 py-3 rounded-xl text-sm border"
|
||||
style="border-color: var(--nav-bg-alt); background: var(--nav-bg); color: var(--nav-text); font-family: var(--nav-font); font-size: 16px;"
|
||||
@keydown.enter.prevent="sendMessage"
|
||||
/>
|
||||
<button
|
||||
:disabled="loading || !inputText.trim()"
|
||||
class="w-11 h-11 rounded-xl flex items-center justify-center shrink-0 transition-opacity"
|
||||
style="background: var(--nav-primary);"
|
||||
:style="{ opacity: (loading || !inputText.trim()) ? 0.4 : 1 }"
|
||||
aria-label="Envoyer"
|
||||
@click="sendMessage"
|
||||
>
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="color: var(--nav-text-on-primary);">
|
||||
<line x1="22" y1="2" x2="11" y2="13"/>
|
||||
<polygon points="22 2 15 22 11 13 2 9 22 2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
</Teleport>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useMarkdown } from '~/composables/useMarkdown'
|
||||
const { render: renderMd } = useMarkdown()
|
||||
|
||||
interface FicheReco { id: number | string; nom: string; explication?: string }
|
||||
interface ChatMessage { role: 'user' | 'assistant'; content: string; fiches?: FicheReco[] }
|
||||
|
||||
const props = defineProps<{ modelValue: boolean }>()
|
||||
const emit = defineEmits<{ 'update:modelValue': [value: boolean] }>()
|
||||
|
||||
const messages = ref<ChatMessage[]>([])
|
||||
const inputText = ref('')
|
||||
const loading = ref(false)
|
||||
const errorMsg = ref('')
|
||||
const messagesContainer = ref<HTMLElement | null>(null)
|
||||
|
||||
watch(() => props.modelValue, (open) => {
|
||||
if (typeof document === 'undefined') return
|
||||
document.body.style.overflow = open ? 'hidden' : ''
|
||||
document.documentElement.style.overflow = open ? 'hidden' : ''
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (typeof document !== 'undefined') {
|
||||
document.body.style.overflow = ''
|
||||
document.documentElement.style.overflow = ''
|
||||
}
|
||||
})
|
||||
|
||||
async function sendMessage() {
|
||||
const question = inputText.value.trim()
|
||||
if (!question || loading.value) return
|
||||
inputText.value = ''
|
||||
errorMsg.value = ''
|
||||
messages.value.push({ role: 'user', content: question })
|
||||
loading.value = true
|
||||
await nextTick()
|
||||
if (messagesContainer.value) messagesContainer.value.scrollTop = messagesContainer.value.scrollHeight
|
||||
|
||||
try {
|
||||
const res = await $fetch<{ reponse_texte: string; fiches_recommandees: FicheReco[] }>(
|
||||
'/api/chatbot-reseaux',
|
||||
{ method: 'POST', body: { question } }
|
||||
)
|
||||
messages.value.push({ role: 'assistant', content: res.reponse_texte, fiches: res.fiches_recommandees || [] })
|
||||
} catch (e: any) {
|
||||
const s = e?.statusCode ?? e?.status
|
||||
errorMsg.value = s === 429
|
||||
? 'Limite de 20 questions par jour atteinte.'
|
||||
: 'Une erreur est survenue. Réessaie dans quelques instants.'
|
||||
} finally {
|
||||
loading.value = false
|
||||
await nextTick()
|
||||
if (messagesContainer.value) messagesContainer.value.scrollTop = messagesContainer.value.scrollHeight
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.backdrop-enter-active, .backdrop-leave-active { transition: opacity 0.2s ease; }
|
||||
.backdrop-enter-from, .backdrop-leave-to { opacity: 0; }
|
||||
.sheet-enter-active, .sheet-leave-active { transition: transform 0.3s cubic-bezier(0.32, 0.72, 0, 1); }
|
||||
.sheet-enter-from, .sheet-leave-to { transform: translateY(100%); }
|
||||
|
||||
.onboarding-bubble {
|
||||
background: var(--nav-bg); border: 1px solid var(--nav-bg-alt);
|
||||
border-radius: 12px; padding: 16px;
|
||||
font-size: 0.85rem; line-height: 1.65; color: var(--nav-text-muted);
|
||||
}
|
||||
.onboarding-bubble p { margin-bottom: 10px; }
|
||||
.onboarding-bubble strong { font-weight: 700; color: var(--nav-text); }
|
||||
|
||||
.user-bubble {
|
||||
align-self: flex-end; max-width: 80%;
|
||||
background: var(--nav-primary); color: var(--nav-text-on-primary);
|
||||
border-radius: 16px 16px 4px 16px; padding: 10px 14px;
|
||||
font-size: 0.875rem; line-height: 1.5;
|
||||
}
|
||||
.assistant-bubble {
|
||||
align-self: flex-start; max-width: 90%;
|
||||
background: var(--nav-surface); border: 1px solid var(--nav-bg-alt);
|
||||
border-radius: 16px 16px 16px 4px; padding: 12px 14px;
|
||||
font-size: 0.875rem; line-height: 1.6; color: var(--nav-text);
|
||||
}
|
||||
.loading-bubble { display: flex; gap: 5px; align-items: center; }
|
||||
.dot { width: 7px; height: 7px; border-radius: 50%; background: var(--nav-text-muted); animation: blink 1.2s infinite; }
|
||||
.dot:nth-child(2) { animation-delay: 0.2s; }
|
||||
.dot:nth-child(3) { animation-delay: 0.4s; }
|
||||
@keyframes blink { 0%,80%,100% { opacity: 0.3; } 40% { opacity: 1; } }
|
||||
|
||||
.error-bubble { align-self: flex-start; max-width: 90%; color: #a85d3e; font-size: 0.8rem; padding: 8px 12px; border-radius: 8px; background: rgba(168,93,62,0.08); }
|
||||
|
||||
.fiches-list { display: flex; flex-direction: column; gap: 6px; }
|
||||
.fiches-title { font-size: 0.75rem; font-weight: 600; color: var(--nav-text-muted); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 4px; }
|
||||
.fiche-card { display: block; background: var(--nav-bg); border: 1px solid var(--nav-bg-alt); border-radius: 8px; padding: 8px 12px; text-decoration: none; transition: background 0.15s; }
|
||||
.fiche-card:hover { background: var(--nav-bg-alt); }
|
||||
.fiche-nom { display: block; font-size: 0.875rem; font-weight: 600; color: var(--nav-text); }
|
||||
.fiche-expl { display: block; font-size: 0.8rem; color: var(--nav-text-muted); margin-top: 2px; }
|
||||
</style>
|
||||
@@ -69,14 +69,18 @@
|
||||
<div ref="messagesContainer" class="flex-1 overflow-y-auto px-4 py-4 flex flex-col gap-3">
|
||||
<!-- Message onboarding (avant la première question) -->
|
||||
<div v-if="messages.length === 0" class="onboarding-bubble">
|
||||
<p>Ce chatbot fonctionne sur un serveur européen souverain (Mistral FR, zéro rétention), conçu sobre en énergie.</p>
|
||||
<p>Pour m'aider à te répondre efficacement, formule ta requête ainsi :</p>
|
||||
<p>Ce chatbot fonctionne sur un serveur européen souverain
|
||||
(Mistral FR, zéro rétention), conçu sobre en énergie.</p>
|
||||
<p>Pour m'aider à te répondre efficacement,
|
||||
formule ta requête ainsi :</p>
|
||||
<ul>
|
||||
<li>• Besoin : [ce que tu cherches]</li>
|
||||
<li>• Thématique : [juridique / technique / économique / ...]</li>
|
||||
<li>• Lieu : [région ou ville]</li>
|
||||
</ul>
|
||||
<p class="example">Exemple : "Je suis salarié d'agence, litige avec mon employeur, besoin conseil juridique droit du travail, Île-de-France."</p>
|
||||
<p class="example">Exemple : "Je suis salarié d'agence, litige avec mon
|
||||
employeur, besoin conseil juridique droit du travail,
|
||||
Île-de-France."</p>
|
||||
</div>
|
||||
|
||||
<!-- Messages -->
|
||||
@@ -88,7 +92,7 @@
|
||||
|
||||
<!-- Message assistant -->
|
||||
<div v-else class="assistant-bubble">
|
||||
<div class="md-content" v-html="renderMd(msg.content)" />
|
||||
<p>{{ msg.content }}</p>
|
||||
|
||||
<!-- Fiches recommandées -->
|
||||
<div v-if="msg.fiches && msg.fiches.length > 0" class="fiches-list">
|
||||
@@ -160,9 +164,6 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useMarkdown } from '~/composables/useMarkdown'
|
||||
const { render: renderMd } = useMarkdown()
|
||||
|
||||
interface FicheReco {
|
||||
id: number | string
|
||||
nom: string
|
||||
@@ -319,17 +320,7 @@ function scrollToBottom() {
|
||||
line-height: 1.6;
|
||||
color: var(--nav-text);
|
||||
}
|
||||
.assistant-bubble > p { margin: 0; }
|
||||
|
||||
/* Markdown rendu via v-html — :deep() perce le scoped */
|
||||
:deep(.md-content) { font-size: inherit; line-height: 1.6; }
|
||||
:deep(.md-content p) { margin: 0 0 0.4em; }
|
||||
:deep(.md-content p:last-child) { margin-bottom: 0; }
|
||||
:deep(.md-content strong) { font-weight: 700; }
|
||||
:deep(.md-content em) { font-style: italic; }
|
||||
:deep(.md-content ul) { margin: 0.3em 0 0.3em 1.1em; list-style: disc; padding: 0; }
|
||||
:deep(.md-content li) { margin-bottom: 0.15em; }
|
||||
:deep(.md-content a) { text-decoration: underline; opacity: 0.8; }
|
||||
.assistant-bubble p { margin: 0; }
|
||||
|
||||
/* Fiches recommandées */
|
||||
.fiches-list {
|
||||
|
||||
@@ -1,16 +1,38 @@
|
||||
<template>
|
||||
<div class="space-y-1">
|
||||
<p class="filter-label">ÉCHELLE</p>
|
||||
<div class="chips-row">
|
||||
<span
|
||||
<div class="space-y-1.5">
|
||||
<p class="text-xs font-bold uppercase tracking-widest" style="color: var(--nav-text-muted);">Échelle</p>
|
||||
<!-- Inline sur 1 ligne — même pattern que FonctionFilter -->
|
||||
<div class="flex flex-wrap gap-x-4 gap-y-1.5">
|
||||
<label
|
||||
v-for="option in ECHELLES"
|
||||
:key="option"
|
||||
class="chip"
|
||||
:style="isSelected(option)
|
||||
? 'background: var(--nav-primary); color: var(--nav-text-on-primary); font-weight: 600;'
|
||||
: 'background: var(--nav-bg-alt); color: var(--nav-text-muted);'"
|
||||
@click="toggle(option)"
|
||||
>{{ option }}</span>
|
||||
class="flex items-center gap-1.5 cursor-pointer select-none transition-opacity"
|
||||
>
|
||||
<!-- Case carrée -->
|
||||
<span
|
||||
class="flex items-center justify-center shrink-0 transition-all"
|
||||
style="width: 18px; height: 18px; border: 1.5px solid; border-radius: 3px;"
|
||||
:style="isSelected(option)
|
||||
? 'background: var(--nav-primary); border-color: var(--nav-primary); color: #ffffff;'
|
||||
: 'background: var(--nav-bg-alt); border-color: rgba(26,34,56,0.25); color: transparent;'"
|
||||
>
|
||||
<svg v-if="isSelected(option)" width="11" height="11" viewBox="0 0 12 12" fill="none">
|
||||
<polyline points="2,6 5,9 10,3" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</span>
|
||||
<!-- Label -->
|
||||
<span
|
||||
class="text-sm leading-tight"
|
||||
:style="isSelected(option) ? 'color: var(--nav-text); font-weight: 600;' : 'color: var(--nav-text);'"
|
||||
>{{ option }}</span>
|
||||
<!-- Input réel (masqué) -->
|
||||
<input
|
||||
type="checkbox"
|
||||
class="sr-only"
|
||||
:checked="isSelected(option)"
|
||||
@change="toggle(option)"
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -39,24 +61,3 @@ function toggle(option: string) {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.filter-label {
|
||||
font-size: 0.7rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.08em;
|
||||
color: var(--nav-text-muted);
|
||||
display: block;
|
||||
margin-bottom: 4px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.chips-row { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 4px; }
|
||||
.chip {
|
||||
cursor: pointer;
|
||||
padding: 3px 10px;
|
||||
border-radius: 9999px;
|
||||
font-size: 0.75rem;
|
||||
transition: all 0.15s;
|
||||
user-select: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
<template>
|
||||
<Teleport to="body">
|
||||
<Transition name="backdrop">
|
||||
<div v-if="open && auteur" class="fixed inset-0 z-[1500]" style="background: rgba(26,34,56,0.55);" @click="emit('close')" aria-hidden="true" />
|
||||
</Transition>
|
||||
<Transition name="modal">
|
||||
<div v-if="open && auteur" class="fixed z-[1501] left-1/2 flex flex-col"
|
||||
style="top:50%;transform:translate(-50%,-50%);width:min(520px,94vw);max-height:85vh;background:var(--nav-bg);border-radius:14px;box-shadow:0 16px 64px rgba(26,34,56,0.28);overflow:hidden;"
|
||||
role="dialog" aria-modal="true">
|
||||
<!-- Header -->
|
||||
<div class="flex items-start justify-between px-5 py-4 shrink-0"
|
||||
:style="`border-bottom: 3px solid ${ecoleColor}; background: var(--nav-surface);`">
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="flex items-center gap-2 flex-wrap">
|
||||
<span class="px-2 py-0.5 rounded-full text-xs font-semibold" :style="`background:${ecoleColor}22;color:${ecoleColor};`">{{ ecoleLabel }}</span>
|
||||
<span v-for="eid in auteur.ecoles.filter(e => e !== auteur.ecole_principale)" :key="eid"
|
||||
class="px-2 py-0.5 rounded-full text-xs" :style="`background:${getEcoleColor(eid)}22;color:${getEcoleColor(eid)};`">{{ getEcoleLabel(eid) }}</span>
|
||||
</div>
|
||||
<h2 class="mt-2 font-bold text-lg leading-tight" style="color:var(--nav-text);">{{ auteur.nom }}</h2>
|
||||
<p class="text-sm" style="color:var(--nav-text-muted);">{{ auteur.dates }}</p>
|
||||
</div>
|
||||
<button @click="emit('close')" class="ml-3 shrink-0 flex items-center justify-center w-8 h-8 rounded-full hover:opacity-70"
|
||||
style="background:var(--nav-bg-alt);color:var(--nav-text-muted);" aria-label="Fermer">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<!-- Body -->
|
||||
<div class="flex-1 overflow-y-auto px-5 py-4 flex flex-col gap-4">
|
||||
<p class="text-sm leading-relaxed" style="color:var(--nav-text);">{{ auteur.bio_courte }}</p>
|
||||
<div v-if="auteur.theses_cles.length">
|
||||
<p class="text-xs font-bold uppercase tracking-widest mb-2" style="color:var(--nav-text-muted);">Theses cles</p>
|
||||
<ul class="flex flex-col gap-1.5">
|
||||
<li v-for="t in auteur.theses_cles" :key="t" class="flex items-start gap-2 text-sm" style="color:var(--nav-text);">
|
||||
<span class="mt-1.5 w-1.5 h-1.5 rounded-full shrink-0" :style="`background:${ecoleColor};`"></span>
|
||||
<span>{{ t }}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-if="auteur.livres_rag.length">
|
||||
<p class="text-xs font-bold uppercase tracking-widest mb-2" style="color:var(--nav-text-muted);">Livres dans le RAG</p>
|
||||
<div class="flex flex-col gap-2">
|
||||
<div v-for="l in auteur.livres_rag" :key="l.slug" class="flex items-start gap-3 p-3 rounded-lg" style="background:var(--nav-bg-alt);">
|
||||
<div class="flex-1 min-w-0">
|
||||
<p class="text-sm font-semibold leading-snug" style="color:var(--nav-text);">{{ l.titre }}</p>
|
||||
<p class="text-xs mt-0.5" style="color:var(--nav-text-muted);">{{ l.annee }}</p>
|
||||
</div>
|
||||
<div class="flex gap-1 shrink-0">
|
||||
<span v-for="c in l.couches" :key="c" class="px-1.5 py-0.5 rounded text-xs" style="background:var(--nav-surface);color:var(--nav-text-muted);">{{ c }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Footer -->
|
||||
<div class="shrink-0 px-5 py-3 border-t" style="border-color:var(--nav-bg-alt);">
|
||||
<button @click="emit('interroger-rag', auteurId!)" class="w-full py-2.5 rounded-lg text-sm font-semibold hover:opacity-80"
|
||||
:style="`background:${ecoleColor};color:white;`">
|
||||
Interroger le RAG sur {{ auteur.nom.split(' ').pop() }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</Transition>
|
||||
</Teleport>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
interface LivreRag { slug: string; titre: string; annee: number; couches: string[] }
|
||||
interface AuteurData { id: string; nom: string; dates: string; ecoles: string[]; ecole_principale: string; livres_rag: LivreRag[]; theses_cles: string[]; bio_courte: string }
|
||||
interface EcoleData { id: string; label: string; color: string }
|
||||
interface PenseesData { ecoles: EcoleData[]; auteurs: AuteurData[] }
|
||||
|
||||
const props = defineProps<{ open: boolean; auteurId: string | null; data: PenseesData | null }>()
|
||||
const emit = defineEmits<{ close: []; 'interroger-rag': [auteurId: string] }>()
|
||||
|
||||
const auteur = computed<AuteurData | null>(() => {
|
||||
if (!props.auteurId || !props.data) return null
|
||||
return props.data.auteurs.find(a => a.id === props.auteurId) ?? null
|
||||
})
|
||||
const ecoleColor = computed(() => props.data?.ecoles.find(e => e.id === auteur.value?.ecole_principale)?.color ?? '#888')
|
||||
const ecoleLabel = computed(() => props.data?.ecoles.find(e => e.id === auteur.value?.ecole_principale)?.label ?? '')
|
||||
function getEcoleColor(id: string) { return props.data?.ecoles.find(e => e.id === id)?.color ?? '#888' }
|
||||
function getEcoleLabel(id: string) { return props.data?.ecoles.find(e => e.id === id)?.label ?? id }
|
||||
|
||||
function onKey(e: KeyboardEvent) { if (e.key === 'Escape' && props.open) emit('close') }
|
||||
onMounted(() => window.addEventListener('keydown', onKey))
|
||||
onUnmounted(() => window.removeEventListener('keydown', onKey))
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.backdrop-enter-active,.backdrop-leave-active { transition: opacity 0.2s; }
|
||||
.backdrop-enter-from,.backdrop-leave-to { opacity: 0; }
|
||||
.modal-enter-active { transition: opacity 0.2s, transform 0.22s cubic-bezier(0.34,1.56,0.64,1); }
|
||||
.modal-leave-active { transition: opacity 0.18s, transform 0.18s ease-in; }
|
||||
.modal-enter-from { opacity: 0; transform: translate(-50%,-48%) scale(0.94); }
|
||||
.modal-leave-to { opacity: 0; transform: translate(-50%,-48%) scale(0.96); }
|
||||
</style>
|
||||
@@ -1,101 +0,0 @@
|
||||
<template>
|
||||
<Teleport to="body">
|
||||
<Transition name="backdrop">
|
||||
<div v-if="open && ecole" class="fixed inset-0 z-[1500]" style="background: rgba(26,34,56,0.55);" @click="emit('close')" aria-hidden="true" />
|
||||
</Transition>
|
||||
<Transition name="modal">
|
||||
<div v-if="open && ecole" class="fixed z-[1501] left-1/2 flex flex-col"
|
||||
style="top:50%;transform:translate(-50%,-50%);width:min(540px,94vw);max-height:85vh;background:var(--nav-bg);border-radius:14px;box-shadow:0 16px 64px rgba(26,34,56,0.28);overflow:hidden;"
|
||||
role="dialog" aria-modal="true">
|
||||
<!-- Header -->
|
||||
<div class="flex items-start justify-between px-5 py-4 shrink-0"
|
||||
:style="`border-bottom: 3px solid ${ecole.color}; background: var(--nav-surface);`">
|
||||
<div class="flex-1 min-w-0">
|
||||
<span class="px-2 py-0.5 rounded-full text-xs font-semibold" :style="`background:${ecole.color}22;color:${ecole.color};`">Ecole de pensee</span>
|
||||
<h2 class="mt-2 font-bold text-lg leading-tight" style="color:var(--nav-text);">{{ ecole.label }}</h2>
|
||||
<p class="text-sm mt-1 leading-relaxed" style="color:var(--nav-text-muted);">{{ ecole.description }}</p>
|
||||
</div>
|
||||
<button @click="emit('close')" class="ml-3 shrink-0 flex items-center justify-center w-8 h-8 rounded-full hover:opacity-70"
|
||||
style="background:var(--nav-bg-alt);color:var(--nav-text-muted);" aria-label="Fermer">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<!-- Body -->
|
||||
<div class="flex-1 overflow-y-auto px-5 py-4 flex flex-col gap-4">
|
||||
<div v-if="auteursIngeres.length">
|
||||
<p class="text-xs font-bold uppercase tracking-widest mb-2" style="color:var(--nav-text-muted);">Dans le RAG ({{ auteursIngeres.length }})</p>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<button v-for="a in auteursIngeres" :key="a.id"
|
||||
class="px-2.5 py-1 rounded-full text-xs font-medium hover:opacity-80 transition-opacity"
|
||||
:style="`background:${ecole.color}22;color:${ecole.color};border:1px solid ${ecole.color}44;cursor:pointer;`"
|
||||
@click="onSelectAuteur(a.id)">
|
||||
{{ a.nom }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="auteursNonIngeres.length">
|
||||
<p class="text-xs font-bold uppercase tracking-widest mb-2" style="color:var(--nav-text-muted);">Presents dans Bonpote, pas encore dans le RAG ({{ auteursNonIngeres.length }})</p>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<span v-for="a in auteursNonIngeres" :key="a.id"
|
||||
class="px-2.5 py-1 rounded-full text-xs"
|
||||
style="background:var(--nav-bg-alt);color:var(--nav-text-muted);">
|
||||
{{ a.nom }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Footer -->
|
||||
<div class="shrink-0 px-5 py-3 border-t" style="border-color:var(--nav-bg-alt);">
|
||||
<button @click="emit('interroger-ecole', ecoleId!)" class="w-full py-2.5 rounded-lg text-sm font-semibold hover:opacity-80"
|
||||
:style="`background:${ecole.color};color:white;`">
|
||||
Interroger le RAG sur {{ ecole.label }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</Transition>
|
||||
</Teleport>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
interface AuteurData { id: string; nom: string; ecoles: string[]; ecole_principale: string; ingere: boolean }
|
||||
interface EcoleData { id: string; label: string; description: string; color: string }
|
||||
interface PenseesData { ecoles: EcoleData[]; auteurs: AuteurData[] }
|
||||
|
||||
const props = defineProps<{ open: boolean; ecoleId: string | null; data: PenseesData | null }>()
|
||||
const emit = defineEmits<{ close: []; 'select-auteur': [auteurId: string]; 'interroger-ecole': [ecoleId: string] }>()
|
||||
|
||||
const ecole = computed<EcoleData | null>(() => {
|
||||
if (!props.ecoleId || !props.data) return null
|
||||
return props.data.ecoles.find(e => e.id === props.ecoleId) ?? null
|
||||
})
|
||||
|
||||
const auteursIngeres = computed(() => {
|
||||
if (!props.ecoleId || !props.data) return []
|
||||
return props.data.auteurs.filter(a => a.ecole_principale === props.ecoleId && (a as any).ingere)
|
||||
})
|
||||
|
||||
const auteursNonIngeres = computed(() => {
|
||||
if (!props.ecoleId || !props.data) return []
|
||||
return props.data.auteurs.filter(a => a.ecole_principale === props.ecoleId && !(a as any).ingere)
|
||||
})
|
||||
|
||||
function onSelectAuteur(id: string) {
|
||||
emit('close')
|
||||
emit('select-auteur', id)
|
||||
}
|
||||
|
||||
function onKey(e: KeyboardEvent) { if (e.key === 'Escape' && props.open) emit('close') }
|
||||
onMounted(() => window.addEventListener('keydown', onKey))
|
||||
onUnmounted(() => window.removeEventListener('keydown', onKey))
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.backdrop-enter-active,.backdrop-leave-active { transition: opacity 0.2s; }
|
||||
.backdrop-enter-from,.backdrop-leave-to { opacity: 0; }
|
||||
.modal-enter-active { transition: opacity 0.2s, transform 0.22s cubic-bezier(0.34,1.56,0.64,1); }
|
||||
.modal-leave-active { transition: opacity 0.18s, transform 0.18s ease-in; }
|
||||
.modal-enter-from { opacity: 0; transform: translate(-50%,-48%) scale(0.94); }
|
||||
.modal-leave-to { opacity: 0; transform: translate(-50%,-48%) scale(0.96); }
|
||||
</style>
|
||||
@@ -15,9 +15,10 @@
|
||||
<Transition name="modal">
|
||||
<div
|
||||
v-if="modelValue && orgId != null"
|
||||
class="fiche-modal fixed z-[1501] left-1/2 -translate-x-1/2 flex flex-col"
|
||||
class="fixed z-[1501] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col"
|
||||
style="
|
||||
width: min(768px, 92vw);
|
||||
max-height: 90vh;
|
||||
background: var(--nav-bg);
|
||||
border-radius: 16px;
|
||||
box-shadow: 0 16px 64px rgba(26,34,56,0.28);
|
||||
@@ -143,21 +144,6 @@ function onCommentSubmitted() {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* Modal positionnement : centré desktop, descendu sous le header sur mobile */
|
||||
.fiche-modal {
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
max-height: 90vh;
|
||||
}
|
||||
|
||||
@media (max-width: 1023px) {
|
||||
.fiche-modal {
|
||||
top: 76px;
|
||||
transform: translateX(-50%);
|
||||
max-height: calc(100dvh - 92px);
|
||||
}
|
||||
}
|
||||
|
||||
/* Backdrop */
|
||||
.backdrop-enter-active, .backdrop-leave-active { transition: opacity 0.2s ease; }
|
||||
.backdrop-enter-from, .backdrop-leave-to { opacity: 0; }
|
||||
@@ -170,11 +156,6 @@ function onCommentSubmitted() {
|
||||
opacity: 0;
|
||||
transform: translate(-50%, -52%);
|
||||
}
|
||||
@media (max-width: 1023px) {
|
||||
.modal-enter-from, .modal-leave-to {
|
||||
transform: translate(-50%, calc(-2% + 76px));
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.backdrop-enter-active, .backdrop-leave-active { transition: none; }
|
||||
|
||||
@@ -15,9 +15,10 @@
|
||||
<Transition name="modal">
|
||||
<div
|
||||
v-if="modelValue && structureId != null && structure"
|
||||
class="fiche-modal-v2 fixed z-[1501] left-1/2 -translate-x-1/2 flex flex-col"
|
||||
class="fixed z-[1501] top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex flex-col"
|
||||
style="
|
||||
width: min(780px, 94vw);
|
||||
max-height: 90vh;
|
||||
background: var(--nav-bg);
|
||||
border-radius: 16px;
|
||||
box-shadow: 0 16px 64px rgba(26,34,56,0.28);
|
||||
@@ -324,21 +325,6 @@ const structuresVoisines = computed<StructureV2[]>(() => {
|
||||
.backdrop-enter-active, .backdrop-leave-active { transition: opacity 0.2s ease; }
|
||||
.backdrop-enter-from, .backdrop-leave-to { opacity: 0; }
|
||||
|
||||
/* Modal positionnement : centré desktop, descendu sous le header sur mobile */
|
||||
.fiche-modal-v2 {
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
max-height: 90vh;
|
||||
}
|
||||
|
||||
@media (max-width: 1023px) {
|
||||
.fiche-modal-v2 {
|
||||
top: 76px;
|
||||
transform: translateX(-50%);
|
||||
max-height: calc(100dvh - 92px);
|
||||
}
|
||||
}
|
||||
|
||||
/* Modal */
|
||||
.modal-enter-active, .modal-leave-active {
|
||||
transition: opacity 0.2s ease, transform 0.2s ease;
|
||||
@@ -347,11 +333,6 @@ const structuresVoisines = computed<StructureV2[]>(() => {
|
||||
opacity: 0;
|
||||
transform: translate(-50%, -52%);
|
||||
}
|
||||
@media (max-width: 1023px) {
|
||||
.modal-enter-from, .modal-leave-to {
|
||||
transform: translate(-50%, calc(-2% + 76px));
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.backdrop-enter-active, .backdrop-leave-active { transition: none; }
|
||||
|
||||
@@ -1,33 +1,37 @@
|
||||
<template>
|
||||
<div class="space-y-1">
|
||||
<!-- Label + toggle collapse -->
|
||||
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px;">
|
||||
<p class="filter-label" style="margin-bottom: 0;">
|
||||
FONCTION
|
||||
<span v-if="modelValue.length" style="font-weight: 400; text-transform: none; letter-spacing: 0; font-size: 0.65rem; margin-left: 4px;">({{ modelValue.length }} active{{ modelValue.length > 1 ? 's' : '' }})</span>
|
||||
</p>
|
||||
<div class="space-y-1.5">
|
||||
<p class="text-xs font-bold uppercase tracking-widest" style="color: var(--nav-text-muted);">Fonction (1–5)</p>
|
||||
<div class="space-y-1">
|
||||
<button
|
||||
@click="toggleCollapse"
|
||||
style="font-size: 0.7rem; color: var(--nav-text-muted); background: none; border: none; cursor: pointer; text-decoration: underline; padding: 0; white-space: nowrap;"
|
||||
>{{ isOpen ? 'Replier' : 'Fonctions (' + FONCTIONS.length + ')' }}</button>
|
||||
</div>
|
||||
|
||||
<!-- Chips (visible si ouvert ou si des fonctions sont actives) -->
|
||||
<div v-if="isOpen" class="chips-row">
|
||||
<span
|
||||
v-for="fn in FONCTIONS"
|
||||
:key="fn"
|
||||
class="chip"
|
||||
:style="modelValue.includes(fn)
|
||||
? 'background: var(--nav-primary); color: var(--nav-text-on-primary); font-weight: 600;'
|
||||
: 'background: var(--nav-bg-alt); color: var(--nav-text-muted);'"
|
||||
@click="toggle(fn)"
|
||||
>{{ fn }}</span>
|
||||
:aria-pressed="modelValue.includes(fn)"
|
||||
:disabled="!modelValue.includes(fn) && modelValue.length >= 5"
|
||||
class="flex items-center gap-2.5 w-full rounded px-1 py-0.5 transition-all text-left"
|
||||
:class="!modelValue.includes(fn) && modelValue.length >= 5 ? 'cursor-not-allowed opacity-40' : 'hover:opacity-80'"
|
||||
:style="modelValue.includes(fn) ? 'background: rgba(26,34,56,0.06);' : ''"
|
||||
>
|
||||
<!-- Case checkbox -->
|
||||
<span
|
||||
class="flex items-center justify-center shrink-0 text-xs font-bold transition-all"
|
||||
style="width: 24px; height: 24px; border: 1.5px solid; border-radius: 4px;"
|
||||
:style="modelValue.includes(fn)
|
||||
? 'background: var(--nav-primary); border-color: var(--nav-primary); color: var(--nav-text-on-primary);'
|
||||
: 'background: var(--nav-bg-alt); border-color: var(--nav-bg-alt); color: var(--nav-text-muted);'"
|
||||
>
|
||||
{{ counts[fn] ?? 0 }}
|
||||
</span>
|
||||
<!-- Label -->
|
||||
<span
|
||||
class="text-sm leading-tight"
|
||||
:style="modelValue.includes(fn) ? 'color: var(--nav-text); font-weight: 600;' : 'color: var(--nav-text);'"
|
||||
>{{ fn }}</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Effacer (visible même replié si filtres actifs) -->
|
||||
<p v-if="modelValue.length" class="text-xs pt-0.5" style="color: var(--nav-text-muted);">
|
||||
<button @click="emit('update:modelValue', [])" class="underline hover:opacity-70">Effacer</button>
|
||||
{{ modelValue.length }}/5 actif{{ modelValue.length > 1 ? 's' : '' }}
|
||||
<button @click="emit('update:modelValue', [])" class="ml-2 underline hover:opacity-70">Effacer</button>
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
@@ -55,50 +59,11 @@ const emit = defineEmits<{
|
||||
'update:modelValue': [value: string[]]
|
||||
}>()
|
||||
|
||||
// Replié par défaut, ouvre automatiquement quand des filtres sont actifs
|
||||
const manuallyOpen = ref(false)
|
||||
|
||||
const isOpen = computed(() => {
|
||||
return manuallyOpen.value || props.modelValue.length > 0
|
||||
})
|
||||
|
||||
function toggleCollapse() {
|
||||
// Si des filtres actifs forcent l'ouverture, on doit gérer le cas « forcer fermer »
|
||||
if (isOpen.value) {
|
||||
manuallyOpen.value = false
|
||||
// Si des fonctions sont actives, le computed va les réouvrir — on les efface
|
||||
// Non : on laisse le choix à l'utilisateur. On toggle juste manuallyOpen.
|
||||
// Quand replié avec filtres actifs, l'indicateur "(N actives)" reste visible.
|
||||
} else {
|
||||
manuallyOpen.value = true
|
||||
}
|
||||
}
|
||||
|
||||
function toggle(fn: string) {
|
||||
if (props.modelValue.includes(fn)) {
|
||||
emit('update:modelValue', props.modelValue.filter(f => f !== fn))
|
||||
} else {
|
||||
} else if (props.modelValue.length < 5) {
|
||||
emit('update:modelValue', [...props.modelValue, fn])
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.filter-label {
|
||||
font-size: 0.7rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.08em;
|
||||
color: var(--nav-text-muted);
|
||||
display: block;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.chips-row { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 4px; }
|
||||
.chip {
|
||||
cursor: pointer;
|
||||
padding: 3px 10px;
|
||||
border-radius: 9999px;
|
||||
font-size: 0.75rem;
|
||||
transition: all 0.15s;
|
||||
user-select: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -587,20 +587,6 @@ async function initGraph() {
|
||||
.attr('fill', '#2a2a2a')
|
||||
.style('pointer-events', 'none')
|
||||
|
||||
// Labels structures : nom au-dessus du cercle, halo pour lisibilite
|
||||
d3NodeSelection.filter((d: any) => d.type === 'structure')
|
||||
.append('text')
|
||||
.attr('class', 'graph-struct-label')
|
||||
.text((d: any) => {
|
||||
const raw = d.label as string
|
||||
return raw.length > 22 ? raw.slice(0, 20) + '…' : raw
|
||||
})
|
||||
.attr('text-anchor', 'middle')
|
||||
.attr('dy', (d: any) => -(d.r + 5))
|
||||
.attr('font-size', '9.5px')
|
||||
.attr('font-weight', '500')
|
||||
.style('pointer-events', 'none')
|
||||
|
||||
// Tooltip hover pour structures
|
||||
d3NodeSelection.filter((d: any) => d.type === 'structure')
|
||||
.on('mouseenter', (_event: any, d: any) => {
|
||||
@@ -872,16 +858,3 @@ onUnmounted(() => {
|
||||
if (simulation) simulation.stop()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
/* Labels des structures dans le graphe (D3 injecte les <text>, donc style global) */
|
||||
.graph-view .graph-struct-label {
|
||||
fill: var(--nav-text);
|
||||
opacity: 0.7;
|
||||
paint-order: stroke;
|
||||
stroke: var(--nav-bg);
|
||||
stroke-width: 3px;
|
||||
stroke-linejoin: round;
|
||||
user-select: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,181 +0,0 @@
|
||||
<template>
|
||||
<Teleport to="body">
|
||||
<Transition name="backdrop">
|
||||
<div
|
||||
v-if="modelValue"
|
||||
class="fixed inset-0 z-[1500]"
|
||||
style="background: rgba(26,34,56,0.55);"
|
||||
@click="close"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</Transition>
|
||||
|
||||
<Transition name="modal">
|
||||
<div
|
||||
v-if="modelValue"
|
||||
class="mission-modal"
|
||||
role="dialog"
|
||||
aria-modal="true"
|
||||
aria-labelledby="mission-title"
|
||||
@keydown.esc="close"
|
||||
>
|
||||
<button
|
||||
class="mission-close"
|
||||
type="button"
|
||||
@click="close"
|
||||
aria-label="Fermer"
|
||||
>
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" aria-hidden="true">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<div class="mission-body">
|
||||
<h2 id="mission-title" class="mission-title">{{ title }}</h2>
|
||||
<slot>
|
||||
<p class="mission-text">
|
||||
L'architecture est l'une des professions les plus complexes qui soit ; elle croise droit, technique, esthétique, économie, social, écologie — tout à la fois, tout simultanément, souvent sans filet. Paradoxalement, c'est aussi l'une des moins structurées sur le plan de l'entraide : peu de transmission horizontale, beaucoup d'isolement, une culture du chacun-pour-soi héritée d'une formation qui prépare à la compétition plus qu'à la coopération. On sort de l'école seul·e. On s'installe seul·e. On réinvente ce que d'autres ont déjà traversé.
|
||||
</p>
|
||||
<p class="mission-text">
|
||||
Cette carte est née de cette frustration — et de cette conviction : les ressources existent, les gens qui ont réussi à sortir la tête de l'eau aussi. L'enjeu, c'est de les documenter, de les rendre accessibles, de les ajuster en temps réel grâce aux retours de la communauté. Pas un catalogue figé ; un commun vivant, au service de ceux et celles qui cherchent à faire évoluer leur pratique vers quelque chose de plus épanouissant, mieux rémunéré, au service de la société — et qui prend soin de la santé, la nôtre et celle des gens pour qui nous construisons.
|
||||
</p>
|
||||
</slot>
|
||||
|
||||
<div class="mission-cta-wrap">
|
||||
<button class="btn-explorer" type="button" @click="close">{{ ctaLabel }}</button>
|
||||
<NuxtLink to="/manifeste" class="link-manifeste" @click="close">Lire le manifeste →</NuxtLink>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Transition>
|
||||
</Teleport>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const props = withDefaults(defineProps<{
|
||||
modelValue: boolean
|
||||
title?: string
|
||||
ctaLabel?: string
|
||||
storageKey?: string
|
||||
}>(), {
|
||||
title: "L'écosystème d'entraide architecte",
|
||||
ctaLabel: 'Explorer la carte',
|
||||
storageKey: 'aep_mission_seen',
|
||||
})
|
||||
|
||||
const emit = defineEmits<{ 'update:modelValue': [value: boolean] }>()
|
||||
|
||||
function close() {
|
||||
emit('update:modelValue', false)
|
||||
if (typeof window !== 'undefined') {
|
||||
try { localStorage.setItem(props.storageKey, '1') } catch {}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.mission-modal {
|
||||
position: fixed;
|
||||
z-index: 1501;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: min(560px, 92vw);
|
||||
max-height: calc(100dvh - 80px);
|
||||
background: var(--nav-bg);
|
||||
border-radius: 16px;
|
||||
box-shadow: 0 16px 64px rgba(26,34,56,0.28);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.mission-close {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
right: 12px;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 8px;
|
||||
border: none;
|
||||
background: var(--nav-bg-alt);
|
||||
color: var(--nav-text-muted);
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: background 0.15s;
|
||||
z-index: 1;
|
||||
}
|
||||
.mission-close:hover { background: var(--nav-surface); }
|
||||
|
||||
.mission-body {
|
||||
padding: 1.75rem 1.5rem 1.5rem;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.mission-title {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text);
|
||||
margin: 0 0 1rem;
|
||||
line-height: 1.25;
|
||||
padding-right: 2rem;
|
||||
}
|
||||
|
||||
.mission-text,
|
||||
:slotted(.mission-text) {
|
||||
font-size: 0.95rem;
|
||||
line-height: 1.65;
|
||||
color: var(--nav-text);
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
:slotted(.mission-text strong) { font-weight: 700; }
|
||||
:slotted(.mission-text a) { color: var(--nav-primary-solid); text-decoration: underline; }
|
||||
|
||||
.mission-cta-wrap {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.btn-explorer {
|
||||
padding: 0.65rem 1.25rem;
|
||||
background: var(--nav-primary);
|
||||
color: var(--nav-text-on-primary);
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
transition: opacity 0.15s;
|
||||
}
|
||||
.btn-explorer:hover { opacity: 0.88; }
|
||||
|
||||
.link-manifeste {
|
||||
font-size: 0.875rem;
|
||||
color: var(--nav-primary-solid);
|
||||
text-decoration: underline;
|
||||
text-underline-offset: 2px;
|
||||
}
|
||||
.link-manifeste:hover { opacity: 0.75; }
|
||||
|
||||
.backdrop-enter-active, .backdrop-leave-active { transition: opacity 0.2s ease; }
|
||||
.backdrop-enter-from, .backdrop-leave-to { opacity: 0; }
|
||||
|
||||
.modal-enter-active, .modal-leave-active { transition: opacity 0.2s ease, transform 0.2s ease; }
|
||||
.modal-enter-from, .modal-leave-to { opacity: 0; transform: translate(-50%, -48%); }
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.mission-body { padding: 1.5rem 1.1rem 1.25rem; }
|
||||
.mission-title { font-size: 1.1rem; }
|
||||
.mission-text { font-size: 0.9rem; }
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.modal-enter-active, .modal-leave-active { transition: none; }
|
||||
.backdrop-enter-active, .backdrop-leave-active { transition: none; }
|
||||
}
|
||||
</style>
|
||||
@@ -221,12 +221,7 @@ function updateTileTheme(dark: boolean) {
|
||||
let themeObserver: MutationObserver | null = null
|
||||
|
||||
onMounted(() => {
|
||||
// Double rAF : laisser le browser calculer la hauteur du conteneur avant Leaflet
|
||||
requestAnimationFrame(() => {
|
||||
requestAnimationFrame(() => {
|
||||
initMap()
|
||||
})
|
||||
})
|
||||
initMap()
|
||||
|
||||
// Observer les changements de classe dark sur <html>
|
||||
themeObserver = new MutationObserver(() => {
|
||||
|
||||
@@ -125,8 +125,8 @@
|
||||
<span
|
||||
v-for="fn in orgFonctions(org)"
|
||||
:key="fn"
|
||||
class="px-2 py-0.5 rounded-full text-xs font-medium"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text-muted); border: 1px solid var(--nav-bg-alt); letter-spacing: 0.01em;"
|
||||
class="px-1.5 py-0.5 rounded text-xs"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text-muted);"
|
||||
>{{ fn }}</span>
|
||||
</div>
|
||||
<div v-if="org.localisation_ville" class="mt-0.5 text-xs" style="color: var(--nav-text-muted);">
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
<template>
|
||||
<NuxtLink
|
||||
:to="`/fiche/${org.Id}`"
|
||||
class="block bg-white rounded-xl shadow-sm border border-warm-200 hover:shadow-md hover:border-sage-300 transition-all duration-200 p-5"
|
||||
>
|
||||
<div class="flex items-start justify-between gap-3 mb-2">
|
||||
<h2 class="font-semibold text-gray-900 text-base leading-snug">{{ org.nom }}</h2>
|
||||
<TypeBadge v-if="org.type_org" :type="org.type_org" class="shrink-0 mt-0.5" />
|
||||
</div>
|
||||
|
||||
<p class="text-gray-600 text-sm leading-relaxed mb-3 line-clamp-2">
|
||||
{{ org.description }}
|
||||
</p>
|
||||
|
||||
<div v-if="tags.length" class="flex flex-wrap gap-1.5">
|
||||
<TagBadge
|
||||
v-for="tag in tags"
|
||||
:key="tag"
|
||||
:tag="tag"
|
||||
@click="$emit('filter-tag', tag)"
|
||||
/>
|
||||
</div>
|
||||
</NuxtLink>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const props = defineProps<{
|
||||
org: {
|
||||
Id: number
|
||||
nom: string
|
||||
type_org?: string
|
||||
description?: string
|
||||
tags?: string
|
||||
lien?: string
|
||||
}
|
||||
}>()
|
||||
|
||||
defineEmits<{ 'filter-tag': [tag: string] }>()
|
||||
|
||||
const tags = computed(() =>
|
||||
props.org.tags
|
||||
? props.org.tags.split(',').map((t) => t.trim()).filter(Boolean)
|
||||
: []
|
||||
)
|
||||
</script>
|
||||
@@ -1,244 +0,0 @@
|
||||
<template>
|
||||
<button
|
||||
type="button"
|
||||
class="taff-card"
|
||||
:style="`border-left-color: ${tagConfig.accent};`"
|
||||
@click="$emit('open', plateforme)"
|
||||
>
|
||||
<!-- Ligne 1 : tag + badge AO + lien -->
|
||||
<div class="taff-card-top">
|
||||
<div class="flex items-center gap-2 flex-wrap">
|
||||
<span class="taff-tag" :style="`background: ${tagConfig.bg}; color: ${tagConfig.text};`">
|
||||
{{ tagConfig.emoji }} {{ tagConfig.label }}
|
||||
</span>
|
||||
<span
|
||||
v-if="plateforme.type === 'appel-offre-public'"
|
||||
class="taff-badge-ao"
|
||||
>AO public</span>
|
||||
</div>
|
||||
<a
|
||||
:href="plateforme.url"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="taff-visit-btn"
|
||||
@click.stop
|
||||
title="Visiter le site"
|
||||
>
|
||||
<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/>
|
||||
<polyline points="15 3 21 3 21 9"/>
|
||||
<line x1="10" y1="14" x2="21" y2="3"/>
|
||||
</svg>
|
||||
Visiter
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Ligne 2 : nom -->
|
||||
<div class="taff-card-name">{{ plateforme.nom }}</div>
|
||||
|
||||
<!-- Ligne 3 : axes (icône + score, compacts) -->
|
||||
<div class="taff-card-axes">
|
||||
<template v-for="axe in AXES" :key="axe.id">
|
||||
<span
|
||||
v-if="plateforme.scoring[axe.id] !== null"
|
||||
class="taff-axe-chip"
|
||||
:style="`background: ${axeScoreBg(plateforme.scoring[axe.id])}; color: ${axeScoreText(plateforme.scoring[axe.id])};`"
|
||||
:title="axe.label"
|
||||
>{{ axe.icon }} {{ plateforme.scoring[axe.id] }}</span>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<!-- Ligne 4 : description (3 lignes max, lisible) -->
|
||||
<p class="taff-card-desc">{{ plateforme.description_courte }}</p>
|
||||
|
||||
<!-- Ligne 5 : secteurs + coût -->
|
||||
<div class="taff-card-footer">
|
||||
<div class="flex items-center gap-1.5 flex-wrap">
|
||||
<span
|
||||
v-for="s in plateforme.secteurs_servis.slice(0, 3)"
|
||||
:key="s"
|
||||
class="taff-secteur-chip"
|
||||
>{{ SECTEUR_LABELS[s] ?? s }}</span>
|
||||
<span v-if="plateforme.secteurs_servis.length > 3" class="taff-more">+{{ plateforme.secteurs_servis.length - 3 }}</span>
|
||||
</div>
|
||||
<span class="taff-cout">{{ COUT_LABELS[plateforme.cout_entree] ?? plateforme.cout_entree }}</span>
|
||||
</div>
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { PlateformeTaff } from '~/types/plateforme-taff'
|
||||
|
||||
const props = defineProps<{ plateforme: PlateformeTaff }>()
|
||||
defineEmits<{ open: [p: PlateformeTaff] }>()
|
||||
|
||||
const AXES = [
|
||||
{ id: 'remuneration' as const, icon: '🪙', label: 'Rémunération' },
|
||||
{ id: 'transparence' as const, icon: '🔍', label: 'Transparence' },
|
||||
{ id: 'pratiques' as const, icon: '⚖️', label: 'Pratiques pro' },
|
||||
{ id: 'ecologie' as const, icon: '🌿', label: 'Écologie' },
|
||||
{ id: 'matching' as const, icon: '🎯', label: 'Matching' },
|
||||
]
|
||||
|
||||
const TAG_CONFIG = {
|
||||
'recommande': { emoji: '✅', label: 'Recommandé AEP', accent: '#5a7a4a', bg: 'rgba(90,122,74,0.12)', text: '#3d5534' },
|
||||
'sous-reserve': { emoji: '⚠️', label: 'Sous réserve', accent: '#c4a472', bg: 'rgba(196,164,114,0.15)', text: '#7a5f2a' },
|
||||
'a-eviter': { emoji: '❌', label: 'À éviter', accent: '#a85d3e', bg: 'rgba(168,93,62,0.12)', text: '#7a3322' },
|
||||
}
|
||||
|
||||
const tagConfig = computed(() => TAG_CONFIG[props.plateforme.scoring.tag_global] ?? TAG_CONFIG['sous-reserve'])
|
||||
|
||||
function axeScoreBg(score: string | null) {
|
||||
if (score === '✅') return 'rgba(90,122,74,0.12)'
|
||||
if (score === '⚠️') return 'rgba(196,164,114,0.15)'
|
||||
if (score === '❌') return 'rgba(168,93,62,0.12)'
|
||||
return 'var(--nav-bg-alt)'
|
||||
}
|
||||
function axeScoreText(score: string | null) {
|
||||
if (score === '✅') return '#3d5534'
|
||||
if (score === '⚠️') return '#7a5f2a'
|
||||
if (score === '❌') return '#7a3322'
|
||||
return 'var(--nav-text-muted)'
|
||||
}
|
||||
|
||||
const SECTEUR_LABELS: Record<string, string> = {
|
||||
'renovation': 'Rénovation', 'construction-neuve': 'Neuf', 'urbanisme': 'Urbanisme',
|
||||
'architecture-interieure': 'Archi intérieure', 'paysage': 'Paysage',
|
||||
'mar-conseil': 'MAR/Conseil', 'transversal': 'Transversal',
|
||||
}
|
||||
const COUT_LABELS: Record<string, string> = {
|
||||
'gratuit': 'Gratuit', 'freemium': 'Freemium', 'abonnement': 'Abonnement',
|
||||
'lead-paye': 'Lead payant', 'commission': 'Commission',
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.taff-card {
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
border-radius: 12px;
|
||||
border: 1px solid var(--nav-bg-alt);
|
||||
border-left: 4px solid;
|
||||
background: var(--nav-surface);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
transition: box-shadow 0.2s;
|
||||
cursor: pointer;
|
||||
}
|
||||
.taff-card:hover { box-shadow: 0 4px 16px rgba(26,34,56,0.1); }
|
||||
.taff-card:focus-visible { outline: 2px solid var(--nav-accent); outline-offset: 2px; }
|
||||
|
||||
.taff-card-top {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 0.5rem;
|
||||
padding: 1rem 1rem 0.5rem;
|
||||
}
|
||||
|
||||
.taff-tag {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
padding: 0.25rem 0.625rem;
|
||||
border-radius: 9999px;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.taff-badge-ao {
|
||||
display: inline-flex;
|
||||
padding: 0.25rem 0.5rem;
|
||||
border-radius: 9999px;
|
||||
font-size: 0.6875rem;
|
||||
font-weight: 500;
|
||||
background: var(--nav-bg-alt);
|
||||
color: var(--nav-text-muted);
|
||||
}
|
||||
|
||||
.taff-visit-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.375rem;
|
||||
padding: 0.375rem 0.75rem;
|
||||
border-radius: 8px;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 500;
|
||||
background: var(--nav-bg-alt);
|
||||
color: var(--nav-text);
|
||||
white-space: nowrap;
|
||||
flex-shrink: 0;
|
||||
transition: opacity 0.15s;
|
||||
}
|
||||
.taff-visit-btn:hover { opacity: 0.7; }
|
||||
|
||||
.taff-card-name {
|
||||
padding: 0.25rem 1rem 0.75rem;
|
||||
font-size: 1.0625rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text);
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.taff-card-axes {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.375rem;
|
||||
padding: 0 1rem 0.875rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.taff-axe-chip {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
padding: 0.25rem 0.625rem;
|
||||
border-radius: 9999px;
|
||||
font-size: 0.8125rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.taff-card-desc {
|
||||
padding: 0 1rem 1rem;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.65;
|
||||
color: var(--nav-text-muted);
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 3;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.taff-card-footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 0.5rem;
|
||||
padding: 0.75rem 1rem;
|
||||
border-top: 1px solid var(--nav-bg-alt);
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.taff-secteur-chip {
|
||||
display: inline-block;
|
||||
padding: 0.2rem 0.5rem;
|
||||
border-radius: 9999px;
|
||||
font-size: 0.75rem;
|
||||
background: var(--nav-bg);
|
||||
color: var(--nav-text-muted);
|
||||
border: 1px solid var(--nav-bg-alt);
|
||||
}
|
||||
|
||||
.taff-more {
|
||||
font-size: 0.75rem;
|
||||
color: var(--nav-text-muted);
|
||||
}
|
||||
|
||||
.taff-cout {
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
color: var(--nav-text-muted);
|
||||
white-space: nowrap;
|
||||
}
|
||||
</style>
|
||||
@@ -1,11 +0,0 @@
|
||||
<template>
|
||||
<span
|
||||
class="inline-block px-2 py-0.5 rounded-full text-xs font-medium bg-sage-100 text-sage-700 border border-sage-200 cursor-pointer hover:bg-sage-200 transition-colors"
|
||||
@click.prevent="$emit('click', tag)"
|
||||
>{{ tag }}</span>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
defineProps<{ tag: string }>()
|
||||
defineEmits<{ click: [tag: string] }>()
|
||||
</script>
|
||||
@@ -1,21 +0,0 @@
|
||||
<template>
|
||||
<span :class="['inline-block px-2.5 py-0.5 rounded-full text-xs font-semibold uppercase tracking-wide', colorClass]">
|
||||
{{ type }}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const props = defineProps<{ type: string }>()
|
||||
|
||||
const colors: Record<string, string> = {
|
||||
association: 'bg-blue-100 text-blue-700',
|
||||
syndicat: 'bg-orange-100 text-orange-700',
|
||||
institution: 'bg-purple-100 text-purple-700',
|
||||
reseau: 'bg-teal-100 text-teal-700',
|
||||
collectif: 'bg-pink-100 text-pink-700',
|
||||
ecole: 'bg-yellow-100 text-yellow-700',
|
||||
media: 'bg-red-100 text-red-700',
|
||||
}
|
||||
|
||||
const colorClass = computed(() => colors[props.type] ?? 'bg-gray-100 text-gray-700')
|
||||
</script>
|
||||
@@ -1,450 +0,0 @@
|
||||
<template>
|
||||
<div ref="container" class="codev-graph-wrap">
|
||||
|
||||
<!-- Placeholder si aucune fiche -->
|
||||
<div v-if="fiches.length === 0" class="empty-state">
|
||||
<p class="empty-msg">Encore personne. Sois la premiere fiche !</p>
|
||||
<NuxtLink to="/codev/fiche" class="empty-link">Creer ma fiche →</NuxtLink>
|
||||
</div>
|
||||
|
||||
<!-- SVG D3 -->
|
||||
<svg v-else ref="svgEl" class="codev-svg">
|
||||
<defs>
|
||||
<marker
|
||||
id="arrow-solution"
|
||||
viewBox="0 0 10 10"
|
||||
refX="18"
|
||||
refY="5"
|
||||
markerWidth="6"
|
||||
markerHeight="6"
|
||||
orient="auto-start-reverse"
|
||||
>
|
||||
<path d="M 0 0 L 10 5 L 0 10 z" fill="#22c55e" />
|
||||
</marker>
|
||||
</defs>
|
||||
</svg>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import * as d3 from 'd3'
|
||||
import type { CodevFiche, CodevMatch } from '~/types/codev'
|
||||
|
||||
// ── Props / Emits ──────────────────────────────────────────────────────────
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
fiches: CodevFiche[]
|
||||
matches?: CodevMatch[]
|
||||
mode?: 'none' | 'solution' | 'alliance' | 'surprise'
|
||||
showLabels?: boolean
|
||||
}>(), {
|
||||
matches: () => [],
|
||||
mode: 'none',
|
||||
showLabels: false,
|
||||
})
|
||||
|
||||
const emit = defineEmits<{
|
||||
'select-fiche': [id: number]
|
||||
}>()
|
||||
|
||||
// ── Refs ───────────────────────────────────────────────────────────────────
|
||||
|
||||
const container = ref<HTMLDivElement | null>(null)
|
||||
const svgEl = ref<SVGSVGElement | null>(null)
|
||||
const width = ref(800)
|
||||
const height = ref(600)
|
||||
|
||||
// ── State interne ──────────────────────────────────────────────────────────
|
||||
|
||||
type SimNode = d3.SimulationNodeDatum & { id: number; nom: string; offre: string; besoin: string }
|
||||
type SimLink = d3.SimulationLinkDatum<SimNode> & { score: number; mode: string }
|
||||
|
||||
let simulation: d3.Simulation<SimNode, SimLink> | null = null
|
||||
let svgRoot: d3.Selection<SVGSVGElement, unknown, null, undefined> | null = null
|
||||
let gLinks: d3.Selection<SVGGElement, unknown, null, undefined> | null = null
|
||||
let gNodes: d3.Selection<SVGGElement, unknown, null, undefined> | null = null
|
||||
|
||||
const isMobile = computed(() => width.value < 600)
|
||||
const nodeRadius = computed(() => isMobile.value ? 22 : 28)
|
||||
|
||||
// ── Helpers ────────────────────────────────────────────────────────────────
|
||||
|
||||
function truncate(str: string, max = 10): string {
|
||||
if (!str) return ''
|
||||
return str.length > max ? str.slice(0, max - 1) + '…' : str
|
||||
}
|
||||
|
||||
function buildNodes(): SimNode[] {
|
||||
return props.fiches.map(f => ({
|
||||
id: f.id,
|
||||
nom: f.nom,
|
||||
offre: f.offre,
|
||||
besoin: f.besoin,
|
||||
}))
|
||||
}
|
||||
|
||||
function buildLinks(nodes: SimNode[]): SimLink[] {
|
||||
if (!props.matches || props.matches.length === 0) return []
|
||||
const nodeById = new Map(nodes.map(n => [n.id, n]))
|
||||
return props.matches
|
||||
.filter(m => nodeById.has(m.fromId) && nodeById.has(m.toId))
|
||||
.map(m => ({
|
||||
source: nodeById.get(m.fromId)!,
|
||||
target: nodeById.get(m.toId)!,
|
||||
score: m.score,
|
||||
mode: m.mode,
|
||||
}))
|
||||
}
|
||||
|
||||
function linkColor(mode: string): string {
|
||||
if (mode === 'solution') return '#22c55e'
|
||||
if (mode === 'alliance') return '#f97316'
|
||||
if (mode === 'surprise') return '#3b82f6'
|
||||
return '#ccc'
|
||||
}
|
||||
|
||||
// ── Drag handler ───────────────────────────────────────────────────────────
|
||||
|
||||
function makeDrag(sim: d3.Simulation<SimNode, SimLink>): d3.DragBehavior<SVGGElement, SimNode, SimNode> {
|
||||
return d3.drag<SVGGElement, SimNode>()
|
||||
.on('start', (event, d) => {
|
||||
if (!event.active) sim.alphaTarget(0.3).restart()
|
||||
d.fx = d.x
|
||||
d.fy = d.y
|
||||
})
|
||||
.on('drag', (event, d) => {
|
||||
d.fx = event.x
|
||||
d.fy = event.y
|
||||
})
|
||||
.on('end', (event, d) => {
|
||||
if (!event.active) sim.alphaTarget(0)
|
||||
d.fx = null
|
||||
d.fy = null
|
||||
})
|
||||
}
|
||||
|
||||
// ── Initialisation SVG ─────────────────────────────────────────────────────
|
||||
|
||||
function initSvg() {
|
||||
if (!svgEl.value) return
|
||||
|
||||
svgRoot = d3.select(svgEl.value)
|
||||
.attr('width', width.value)
|
||||
.attr('height', height.value)
|
||||
|
||||
svgRoot.selectAll('*').remove()
|
||||
|
||||
gLinks = svgRoot.append('g').attr('class', 'links')
|
||||
gNodes = svgRoot.append('g').attr('class', 'nodes')
|
||||
}
|
||||
|
||||
// ── Rebuild liens (hook pour M4) ───────────────────────────────────────────
|
||||
|
||||
let currentNodes: SimNode[] = []
|
||||
let currentLinks: SimLink[] = []
|
||||
|
||||
function rebuildLinks() {
|
||||
currentLinks = buildLinks(currentNodes)
|
||||
if (!gLinks || !simulation) return
|
||||
|
||||
// .join() moderne D3 pour garantir le re-rendu complet
|
||||
gLinks
|
||||
.selectAll<SVGLineElement, SimLink>('line')
|
||||
.data(currentLinks)
|
||||
.join(
|
||||
enter => enter.append('line'),
|
||||
update => update,
|
||||
exit => exit.remove()
|
||||
)
|
||||
.attr('stroke', d => linkColor(d.mode))
|
||||
.attr('stroke-width', d => 1 + d.score * 3)
|
||||
.attr('stroke-opacity', 0.7)
|
||||
.attr('marker-end', d => d.mode === 'solution' ? 'url(#arrow-solution)' : null)
|
||||
}
|
||||
|
||||
// ── Rendu complet ──────────────────────────────────────────────────────────
|
||||
|
||||
function render() {
|
||||
if (!svgEl.value || props.fiches.length === 0) return
|
||||
|
||||
initSvg()
|
||||
|
||||
currentNodes = buildNodes()
|
||||
currentLinks = buildLinks(currentNodes)
|
||||
|
||||
const r = nodeRadius.value
|
||||
const fontSize = isMobile.value ? 10 : 12
|
||||
|
||||
// Liens
|
||||
gLinks!
|
||||
.selectAll<SVGLineElement, SimLink>('line')
|
||||
.data(currentLinks)
|
||||
.join('line')
|
||||
.attr('stroke', d => linkColor(d.mode))
|
||||
.attr('stroke-width', d => 1 + d.score * 3)
|
||||
.attr('stroke-opacity', 0.7)
|
||||
.attr('marker-end', d => d.mode === 'solution' ? 'url(#arrow-solution)' : null)
|
||||
|
||||
// Noeuds = groupe <g> par personne
|
||||
const nodeGroups = gNodes!
|
||||
.selectAll<SVGGElement, SimNode>('g.node')
|
||||
.data(currentNodes, d => String(d.id))
|
||||
.join('g')
|
||||
.attr('class', 'node')
|
||||
.style('cursor', 'pointer')
|
||||
.call(makeDrag(simulation!) as any)
|
||||
.on('click', (_event, d) => emit('select-fiche', d.id))
|
||||
|
||||
// Cercle principal
|
||||
nodeGroups.append('circle')
|
||||
.attr('r', r)
|
||||
.attr('fill', '#ffffff')
|
||||
.attr('stroke', '#1B4436')
|
||||
.attr('stroke-width', 2)
|
||||
|
||||
// Label nom
|
||||
nodeGroups.append('text')
|
||||
.attr('text-anchor', 'middle')
|
||||
.attr('dominant-baseline', 'central')
|
||||
.attr('font-size', fontSize)
|
||||
.attr('font-weight', '700')
|
||||
.attr('fill', '#1a1a2e')
|
||||
.attr('pointer-events', 'none')
|
||||
.text(d => truncate(d.nom, 10))
|
||||
|
||||
// Pastille offre (haut-droite, vert)
|
||||
nodeGroups.append('circle')
|
||||
.attr('r', 6)
|
||||
.attr('cx', r * 0.65)
|
||||
.attr('cy', -r * 0.65)
|
||||
.attr('fill', '#22c55e')
|
||||
.attr('stroke', '#fff')
|
||||
.attr('stroke-width', 1.5)
|
||||
|
||||
// Pastille besoin (bas-droite, bleu)
|
||||
nodeGroups.append('circle')
|
||||
.attr('r', 6)
|
||||
.attr('cx', r * 0.65)
|
||||
.attr('cy', r * 0.65)
|
||||
.attr('fill', '#3b82f6')
|
||||
.attr('stroke', '#fff')
|
||||
.attr('stroke-width', 1.5)
|
||||
|
||||
// Tooltip SVG natif <title>
|
||||
nodeGroups.append('title')
|
||||
.text(d => `${d.nom}\nOffre : ${d.offre}\nBesoin : ${d.besoin}`)
|
||||
|
||||
// Groupe label bulle (affiche si showLabels)
|
||||
const labelGroups = nodeGroups.append('g')
|
||||
.attr('class', 'label-bubble')
|
||||
.attr('visibility', props.showLabels ? 'visible' : 'hidden')
|
||||
|
||||
// Fond bulle besoin (dessous du noeud)
|
||||
labelGroups.append('rect')
|
||||
.attr('class', 'bubble-besoin-bg')
|
||||
.attr('x', -(r + 50))
|
||||
.attr('y', r + 4)
|
||||
.attr('width', 100)
|
||||
.attr('height', 28)
|
||||
.attr('rx', 6)
|
||||
.attr('fill', '#eff6ff')
|
||||
.attr('stroke', '#3b82f6')
|
||||
.attr('stroke-width', 1)
|
||||
|
||||
// Texte besoin
|
||||
labelGroups.append('text')
|
||||
.attr('class', 'bubble-besoin-txt')
|
||||
.attr('x', -(r) + 50)
|
||||
.attr('y', r + 22)
|
||||
.attr('text-anchor', 'middle')
|
||||
.attr('font-size', 9)
|
||||
.attr('fill', '#1e40af')
|
||||
.attr('pointer-events', 'none')
|
||||
.text(d => truncate(d.besoin, 18))
|
||||
|
||||
// Fond bulle offre (dessus du noeud)
|
||||
labelGroups.append('rect')
|
||||
.attr('class', 'bubble-offre-bg')
|
||||
.attr('x', -(r + 50))
|
||||
.attr('y', -(r + 32))
|
||||
.attr('width', 100)
|
||||
.attr('height', 28)
|
||||
.attr('rx', 6)
|
||||
.attr('fill', '#f0fdf4')
|
||||
.attr('stroke', '#22c55e')
|
||||
.attr('stroke-width', 1)
|
||||
|
||||
// Texte offre
|
||||
labelGroups.append('text')
|
||||
.attr('class', 'bubble-offre-txt')
|
||||
.attr('x', -(r) + 50)
|
||||
.attr('y', -(r + 14))
|
||||
.attr('text-anchor', 'middle')
|
||||
.attr('font-size', 9)
|
||||
.attr('fill', '#166534')
|
||||
.attr('pointer-events', 'none')
|
||||
.text(d => truncate(d.offre, 18))
|
||||
|
||||
// Simulation
|
||||
simulation = d3.forceSimulation<SimNode, SimLink>(currentNodes)
|
||||
.force('link', d3.forceLink<SimNode, SimLink>(currentLinks)
|
||||
.id(d => d.id)
|
||||
.distance(120)
|
||||
.strength(0.3))
|
||||
.force('charge', d3.forceManyBody<SimNode>().strength(-400))
|
||||
.force('center', d3.forceCenter(width.value / 2, height.value / 2))
|
||||
.force('collide', d3.forceCollide<SimNode>().radius(r + 12))
|
||||
.force('x', d3.forceX(width.value / 2).strength(0.05))
|
||||
.force('y', d3.forceY(height.value / 2).strength(0.05))
|
||||
.alphaDecay(0.02)
|
||||
.on('tick', tick)
|
||||
|
||||
// Re-bind drag avec la nouvelle simulation
|
||||
gNodes!.selectAll<SVGGElement, SimNode>('g.node')
|
||||
.call(makeDrag(simulation) as any)
|
||||
}
|
||||
|
||||
function tick() {
|
||||
const r = nodeRadius.value
|
||||
if (!gLinks || !gNodes) return
|
||||
|
||||
gLinks.selectAll<SVGLineElement, SimLink>('line')
|
||||
.attr('x1', d => Math.max(r, Math.min(width.value - r, (d.source as SimNode).x ?? 0)))
|
||||
.attr('y1', d => Math.max(r, Math.min(height.value - r, (d.source as SimNode).y ?? 0)))
|
||||
.attr('x2', d => Math.max(r, Math.min(width.value - r, (d.target as SimNode).x ?? 0)))
|
||||
.attr('y2', d => Math.max(r, Math.min(height.value - r, (d.target as SimNode).y ?? 0)))
|
||||
|
||||
gNodes.selectAll<SVGGElement, SimNode>('g.node')
|
||||
.attr('transform', d => {
|
||||
const x = Math.max(r, Math.min(width.value - r, d.x ?? 0))
|
||||
const y = Math.max(r, Math.min(height.value - r, d.y ?? 0))
|
||||
return `translate(${x},${y})`
|
||||
})
|
||||
}
|
||||
|
||||
// ── Watch matches/mode (hook pour M4) ─────────────────────────────────────
|
||||
|
||||
watch(() => [props.matches, props.mode] as const, () => {
|
||||
if (!simulation) return
|
||||
rebuildLinks()
|
||||
const newForce = d3.forceLink<SimNode, SimLink>(currentLinks)
|
||||
.id(d => String(d.id))
|
||||
.distance(120)
|
||||
.strength(0.5)
|
||||
simulation.force('link', newForce)
|
||||
simulation.alpha(0.8).restart()
|
||||
}, { deep: true })
|
||||
|
||||
// ── Watch showLabels ──────────────────────────────────────────────────────
|
||||
|
||||
watch(() => props.showLabels, (val) => {
|
||||
if (!svgEl.value) return
|
||||
d3.select(svgEl.value).selectAll('.label-bubble').attr('visibility', val ? 'visible' : 'hidden')
|
||||
})
|
||||
|
||||
// ── Watch fiches (re-render si nouvelles fiches) ───────────────────────────
|
||||
|
||||
watch(() => props.fiches, () => {
|
||||
if (simulation) {
|
||||
simulation.stop()
|
||||
simulation = null
|
||||
}
|
||||
render()
|
||||
}, { deep: true })
|
||||
|
||||
// ── ResizeObserver ─────────────────────────────────────────────────────────
|
||||
|
||||
let ro: ResizeObserver | null = null
|
||||
|
||||
onMounted(() => {
|
||||
if (!container.value) return
|
||||
width.value = container.value.clientWidth || 800
|
||||
height.value = container.value.clientHeight || 600
|
||||
|
||||
render()
|
||||
|
||||
ro = new ResizeObserver(() => {
|
||||
if (!container.value) return
|
||||
width.value = container.value.clientWidth || 800
|
||||
height.value = container.value.clientHeight || 600
|
||||
if (svgRoot) {
|
||||
svgRoot.attr('width', width.value).attr('height', height.value)
|
||||
}
|
||||
if (simulation) {
|
||||
simulation.force('center', d3.forceCenter(width.value / 2, height.value / 2))
|
||||
simulation.alpha(0.3).restart()
|
||||
}
|
||||
})
|
||||
ro.observe(container.value!)
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (simulation) simulation.stop()
|
||||
if (ro) ro.disconnect()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.codev-graph-wrap {
|
||||
width: 100%;
|
||||
height: 70vh;
|
||||
min-height: 320px;
|
||||
position: relative;
|
||||
background: var(--nav-bg, #fafafa);
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.codev-svg {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* ── Etat vide ── */
|
||||
|
||||
.empty-state {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 1rem;
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.empty-msg {
|
||||
font-size: 1.125rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.empty-link {
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
color: var(--nav-primary-solid, #1B4436);
|
||||
text-decoration: none;
|
||||
border: 1.5px solid var(--nav-primary-solid, #1B4436);
|
||||
border-radius: 8px;
|
||||
padding: 0.5rem 1.25rem;
|
||||
transition: background 0.15s, color 0.15s;
|
||||
}
|
||||
|
||||
.empty-link:hover {
|
||||
background: var(--nav-primary-solid, #1B4436);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* ── Mobile ── */
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.codev-graph-wrap {
|
||||
height: 65vh;
|
||||
min-height: 260px;
|
||||
border-radius: 8px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,36 +0,0 @@
|
||||
/**
|
||||
* Convertit du Markdown Mistral en HTML avec inline styles.
|
||||
* Inline styles = zéro dépendance CSS, fonctionne dans tout contexte Vue (scoped, v-html, etc.)
|
||||
*/
|
||||
export function useMarkdown() {
|
||||
const S = {
|
||||
p: 'style="margin:0 0 0.45em;line-height:1.6;"',
|
||||
strong: 'style="font-weight:700;"',
|
||||
em: 'style="font-style:italic;"',
|
||||
h2: 'style="font-weight:700;display:block;margin-bottom:0.2em;"',
|
||||
h3: 'style="font-weight:700;display:block;font-size:0.95em;margin-bottom:0.15em;"',
|
||||
ul: 'style="margin:0.3em 0 0.3em 1.2em;padding:0;list-style:disc;"',
|
||||
li: 'style="margin-bottom:0.15em;"',
|
||||
a: 'style="text-decoration:underline;opacity:0.85;"',
|
||||
}
|
||||
|
||||
function render(text: string): string {
|
||||
if (!text) return ''
|
||||
let html = text
|
||||
.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')
|
||||
.replace(/^### (.+)$/gm, `<strong ${S.h3}>$1</strong>`)
|
||||
.replace(/^## (.+)$/gm, `<strong ${S.h2}>$1</strong>`)
|
||||
.replace(/^# (.+)$/gm, `<strong ${S.h2}>$1</strong>`)
|
||||
.replace(/\*\*(.+?)\*\*/g, `<strong ${S.strong}>$1</strong>`)
|
||||
.replace(/\*(.+?)\*/g, `<em ${S.em}>$1</em>`)
|
||||
.replace(/^[-•]\s+(.+)$/gm, `<li ${S.li}>$1</li>`)
|
||||
.replace(/\[([^\]]+)\]\(([^)]+)\)/g, `<a href="$2" target="_blank" rel="noopener" ${S.a}>$1</a>`)
|
||||
|
||||
html = html.replace(/(<li[^>]*>.*<\/li>\n?)+/g, m => `<ul ${S.ul}>${m}</ul>`)
|
||||
html = html.replace(/\n{2,}/g, `</p><p ${S.p}>`)
|
||||
html = html.replace(/\n/g, '<br>')
|
||||
return `<p ${S.p}>${html}</p>`
|
||||
}
|
||||
|
||||
return { render }
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/bin/bash
|
||||
# deploy.sh — Deploiement AEP vers VPS Hetzner
|
||||
# Usage : ./deploy.sh [--check-only]
|
||||
# Pre-requis : build Nuxt termine (.output/ present), SSH alias vps-hetzner configure
|
||||
@@ -30,9 +30,9 @@ LOCAL_ENV_CONTENT=$(cat "$LOCAL_ENV" 2>/dev/null || echo "")
|
||||
if [ "$LOCAL_ENV_CONTENT" != "$REMOTE_ENV_CONTENT" ]; then
|
||||
log "AVERTISSEMENT : .env.production local != .env VPS"
|
||||
log " --- Local ---"
|
||||
echo "$LOCAL_ENV_CONTENT" | sed -E 's/(TOKEN|API_KEY|PASSWORD|SECRET)=.*$/\1=***/' | sed 's/^/ /'
|
||||
echo "$LOCAL_ENV_CONTENT" | sed 's/TOKEN=.*/TOKEN=***/' | sed 's/^/ /'
|
||||
log " --- VPS ---"
|
||||
echo "$REMOTE_ENV_CONTENT" | sed -E 's/(TOKEN|API_KEY|PASSWORD|SECRET)=.*$/\1=***/' | sed 's/^/ /'
|
||||
echo "$REMOTE_ENV_CONTENT" | sed 's/TOKEN=.*/TOKEN=***/' | sed 's/^/ /'
|
||||
read -p "Continuer malgre la difference ? [y/N] " CONFIRM
|
||||
[ "$CONFIRM" = "y" ] || { log "Deploiement annule."; exit 1; }
|
||||
fi
|
||||
|
||||
@@ -1,40 +1,26 @@
|
||||
export default defineNuxtConfig({
|
||||
modules: ['@nuxtjs/tailwindcss'],
|
||||
css: [
|
||||
'~/assets/css/main.css',
|
||||
'leaflet/dist/leaflet.css',
|
||||
'leaflet.markercluster/dist/MarkerCluster.css',
|
||||
'leaflet.markercluster/dist/MarkerCluster.Default.css',
|
||||
],
|
||||
css: ['~/assets/css/main.css', '~/assets/css/v2-bifurcation.css'],
|
||||
|
||||
runtimeConfig: {
|
||||
nocodbUrl: process.env.NOCODB_URL,
|
||||
nocodbToken: process.env.NOCODB_TOKEN,
|
||||
nocodbBase: process.env.NOCODB_BASE || process.env.NOCODB_BASE_ID || 'pipilvsi7dibo80',
|
||||
orgTableId: process.env.ORG_TABLE_ID || process.env.NOCODB_TABLE_ORGAS || 'm08t7g5v4wch6wb',
|
||||
orgTableId: process.env.ORG_TABLE_ID,
|
||||
avisTableId: process.env.AVIS_TABLE_ID,
|
||||
commentTableId: process.env.COMMENT_TABLE_ID || process.env.AVIS_TABLE_ID,
|
||||
statsTableId: process.env.STATS_TABLE_ID || 'mbbq7n47ixy19mc',
|
||||
mistralApiKey: process.env.MISTRAL_API_KEY,
|
||||
nebiusApiKey: process.env.NEBIUS_API_KEY,
|
||||
redisUrl: process.env.REDIS_URL || 'redis://127.0.0.1:6379',
|
||||
resendApiKey: process.env.RESEND_API_KEY,
|
||||
emailJules: process.env.EMAIL_JULES || 'jules@trans-former.fr',
|
||||
codevTableId: '', // NUXT_CODEV_TABLE_ID
|
||||
codevPassword: 'merci', // NUXT_CODEV_PASSWORD - défaut "merci", overridable
|
||||
codevBaseId: '', // NUXT_CODEV_BASE_ID - base NocoDB (ex: pipilvsi7dibo80)
|
||||
codevAdminPassword: 'admin2026', // NUXT_CODEV_ADMIN_PASSWORD
|
||||
ragPeUrl: process.env.NUXT_RAG_PE_URL || 'http://localhost:9621',
|
||||
},
|
||||
|
||||
// Leaflet ne fonctionne pas en SSR — forcer le rendu côté client
|
||||
ssr: true,
|
||||
|
||||
vite: {
|
||||
cacheDir: 'C:/Users/jules/AppData/Local/nav-carte-vite-cache',
|
||||
optimizeDeps: {
|
||||
include: ['leaflet', 'leaflet.markercluster', 'd3'],
|
||||
include: ['leaflet', 'leaflet.markercluster'],
|
||||
},
|
||||
// Éviter l'import SSR de Leaflet qui utilise window
|
||||
ssr: {
|
||||
noExternal: [],
|
||||
},
|
||||
|
||||
@@ -8,23 +8,24 @@
|
||||
</NuxtLink>
|
||||
|
||||
<!-- ══════════════════════════════════════════════════════════
|
||||
SECTION INTRO - À propos d'AEP
|
||||
SECTION 1 — Mission AEP
|
||||
══════════════════════════════════════════════════════════ -->
|
||||
<!-- TODO Jules : Écrire le pitch (~100 mots) — qui est AEP, pour qui, pourquoi, quelle promesse -->
|
||||
<section class="section-mission">
|
||||
<h1>À propos d'AEP</h1>
|
||||
<h1>Architecture d'Écologie Politique</h1>
|
||||
<p class="mission-text">
|
||||
AEP — Architecture d'Écologie Politique — est un commun vivant : une infrastructure d'entraide, de ressources documentées et de cartographies au service d'une profession en mutation. Ce site rassemble trois cartes (entraide, réseaux engagés, plateformes de mise en relation), un manifeste, une transparence radicale sur l'IA et le financement, et une gouvernance partagée.
|
||||
[Placeholder — Jules réécrira ce texte. Pitch ~100 mots : la carte, pourquoi elle existe, pour qui, ce qu'elle change pour les architectes en transition.]
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<!-- ══════════════════════════════════════════════════════════
|
||||
SECTION 2 - Souveraineté technique
|
||||
SECTION 2 — Souveraineté technique
|
||||
══════════════════════════════════════════════════════════ -->
|
||||
<!-- TODO Jules : Écrire 1-2 phrases d'intro sur la posture technique (pourquoi c'est important pour toi) -->
|
||||
<section class="section">
|
||||
<h2>Infrastructure souveraine</h2>
|
||||
<h2>Souveraineté technique</h2>
|
||||
<p class="section-intro">
|
||||
Ce site tourne sur un VPS - un serveur privé loué en Europe - construit entièrement avec des logiciels open source, quasi gratuits. Pas de services Google, pas d'Amazon, pas de Microsoft dans la chaîne. C'est un choix délibéré : contrôler son infrastructure, c'est contrôler ses données.
|
||||
[Placeholder — une phrase sur le choix délibéré d'une stack souveraine.]
|
||||
</p>
|
||||
<div class="badges-row">
|
||||
<div class="badge">
|
||||
@@ -33,7 +34,7 @@
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M12 8v4l3 3"/></svg>
|
||||
</span>
|
||||
<span class="badge-label">IA souveraine</span>
|
||||
<span class="badge-detail">Mistral AI, Paris - conforme RGPD ; pas de collecte ni de profiling ; aucun transfert hors UE</span>
|
||||
<span class="badge-detail">Mistral AI, Paris</span>
|
||||
</div>
|
||||
<div class="badge">
|
||||
<span class="badge-icon" aria-hidden="true">
|
||||
@@ -47,38 +48,47 @@
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
|
||||
</span>
|
||||
<span class="badge-label">Zéro cookie US</span>
|
||||
<span class="badge-detail">Pas de Google Analytics, pas de Meta Pixel, pas de tracker tiers ; on ne sait rien de toi</span>
|
||||
<span class="badge-detail">Pas de Google Analytics, pas de Meta Pixel, pas de tracker tiers</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ══════════════════════════════════════════════════════════
|
||||
SECTION 3 - Gouvernance
|
||||
SECTION 3 — Gouvernance
|
||||
══════════════════════════════════════════════════════════ -->
|
||||
<!-- TODO Jules : Écrire qui porte ce projet, le collectif, la posture politique, le lien Liberapay -->
|
||||
<section class="section">
|
||||
<h2>Gouvernance</h2>
|
||||
<p class="section-text">
|
||||
Architecture d'Écologie Politique est un collectif en train de se monter - ouvert à toustes, à gouvernance partagée. Les décisions se prennent en transparence. Si tu veux participer, contribuer, ou simplement suivre ce qui se construit : tu es la bienvenu·e. Contact : <a href="mailto:contact@trans-former.fr" class="text-link">contact@trans-former.fr</a>
|
||||
[Placeholder — Projet porté par [nom], collectif informel, [...]. Décisions prises en transparence. Financement participatif via <a href="https://liberapay.com/trans-former.fr" target="_blank" rel="noopener noreferrer" class="text-link">Liberapay</a>.]
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<!-- ══════════════════════════════════════════════════════════
|
||||
SECTION 4 - Transparence Liberapay
|
||||
SECTION 4 — Transparence Liberapay
|
||||
══════════════════════════════════════════════════════════ -->
|
||||
<!-- TODO Jules : Écrire pourquoi Liberapay (pas Patreon, pas Ko-fi), le modèle de financement voulu -->
|
||||
<section class="section section-liberapay">
|
||||
<h2>Soutenir le projet</h2>
|
||||
<p class="section-text">
|
||||
Ce projet est participatif, libre, open source. Il existe parce que la communauté l'utilise - et il ne peut continuer à exister que si la communauté le soutient.
|
||||
</p>
|
||||
<p class="section-text">
|
||||
Le financer, c'est soutenir la structuration d'un écosystème d'entraide architecturale qui, aujourd'hui, est assez défaillant. Si toi aussi tu as manqué de ressources en chemin, si tu as dû réinventer seul·e ce que d'autres avaient déjà compris, si tu as cherché un filet et ne l'as pas trouvé - tu sais exactement pourquoi ça compte. Ce que tu mets dans la cagnotte ne va pas dans une boîte ; ça va dans un outil qui permet que la prochaine génération d'architectes ait ce que nous n'avons pas eu : un réseau d'entraide qui fonctionne, au service de pratiques plus épanouissantes, plus politiques, plus écologiques.
|
||||
[Placeholder — Ce que le projet coûte, pourquoi un financement participatif, ce que ça permettrait de faire.]
|
||||
</p>
|
||||
<p class="liberapay-note">
|
||||
Liberapay est une plateforme open source EU (ASBL belge non-lucrative), 0% de frais.
|
||||
</p>
|
||||
|
||||
<!-- Widget Liberapay -->
|
||||
<div class="liberapay-widget-wrap">
|
||||
<iframe
|
||||
src="https://liberapay.com/trans-former.fr/widgets/receiving.html"
|
||||
width="100%"
|
||||
height="60"
|
||||
style="border: 0;"
|
||||
title="Dons reçus via Liberapay"
|
||||
loading="lazy"
|
||||
></iframe>
|
||||
</div>
|
||||
|
||||
<!-- Bouton CTA -->
|
||||
<a
|
||||
href="https://liberapay.com/trans-former.fr/donate"
|
||||
@@ -91,16 +101,13 @@
|
||||
</section>
|
||||
|
||||
<!-- ══════════════════════════════════════════════════════════
|
||||
SECTION 5 - Transparence IA
|
||||
SECTION 5 — Transparence IA
|
||||
══════════════════════════════════════════════════════════ -->
|
||||
<!-- TODO Jules : Écrire la posture sur l'IA - pourquoi ces modèles, pourquoi la transparence, ce que ça signifie politiquement -->
|
||||
<!-- TODO Jules : Écrire la posture sur l'IA — pourquoi ces modèles, pourquoi la transparence, ce que ça signifie politiquement -->
|
||||
<section id="ia" class="section">
|
||||
<h2>Transparence IA</h2>
|
||||
<p class="section-text">
|
||||
Ce site a été construit grâce à l'IA, par quelqu'un qui n'est pas développeur. C'est une manière de subvertir les outils des Big Tech pour en faire quelque chose de communautaire et de souverain : une infrastructure locale, des données qu'on contrôle, un commun qui n'appartient à personne en particulier.
|
||||
</p>
|
||||
<p class="section-text">
|
||||
L'IA est un outil. La question, c'est au service de quoi. Oui, elle est énergivore - et il faut l'assumer. Mais si c'est au service de l'émancipation, du collectif, de transformer nos infrastructures sociétales, alors on dit oui - en sachant que c'est une étape transitoire. L'infrastructure de l'IA elle-même peut évoluer : devenir plus locale, plus sobre, plus souveraine. C'est dans cette direction qu'on regarde.
|
||||
[Placeholder — Pourquoi afficher les coûts IA en clair. Ce que ça dit du projet.]
|
||||
</p>
|
||||
|
||||
<div class="ia-grid">
|
||||
@@ -117,85 +124,42 @@
|
||||
</div>
|
||||
|
||||
<ul class="ia-details">
|
||||
<li>10 € / mois investis au départ par le collectif - vos dons constituent la réserve pour faire vivre le projet et financer ses recherches</li>
|
||||
<li>Budget plafonné à 20 € / mois — coupure automatique si dépassement</li>
|
||||
<li>Coût visible en direct dans le bandeau bas de la carte</li>
|
||||
<li>Aucun modèle US, aucune donnée transmise hors UE</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<!-- ══════════════════════════════════════════════════════════
|
||||
SECTION 6 - Contribuer
|
||||
SECTION 6 — Contribuer
|
||||
══════════════════════════════════════════════════════════ -->
|
||||
<!-- TODO Jules : Écrire l'invitation à contribuer - ton, posture, ce qu'on attend des contributeurs -->
|
||||
<!-- TODO Jules : Écrire l'invitation à contribuer — ton, posture, ce qu'on attend des contributeurs -->
|
||||
<section class="section section-contribuer">
|
||||
<h2>Contribuer</h2>
|
||||
<p class="section-text">
|
||||
Il n'y a pas de barre d'entrée ici. Une correction, une ressource à signaler, un retour sur ta propre expérience - c'est déjà participer à quelque chose qui grandit par accumulation de petits gestes.
|
||||
[Placeholder — Comment rejoindre le projet, ce qu'on peut apporter : fiches, corrections, soutien financier.]
|
||||
</p>
|
||||
<div class="contribuer-ctas">
|
||||
<NuxtLink to="/contribuer" class="btn-primary">
|
||||
Proposer une fiche →
|
||||
</NuxtLink>
|
||||
<a
|
||||
href="https://trans-former.fr/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="btn-secondary"
|
||||
>
|
||||
Blog AEP
|
||||
</a>
|
||||
<a
|
||||
href="https://www.instagram.com/aep.politique/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="btn-secondary"
|
||||
>
|
||||
Instagram
|
||||
</a>
|
||||
<a
|
||||
href="https://liberapay.com/trans-former.fr/donate"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="btn-secondary"
|
||||
>
|
||||
Soutenir
|
||||
</a>
|
||||
<a
|
||||
href="mailto:contact@trans-former.fr"
|
||||
class="btn-secondary"
|
||||
>
|
||||
Contact
|
||||
Soutenir financièrement
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ══════════════════════════════════════════════════════════
|
||||
SECTION 7 - Open Source
|
||||
══════════════════════════════════════════════════════════ -->
|
||||
<section class="section section-opensource">
|
||||
<h2>Code source ouvert</h2>
|
||||
<p class="section-text">
|
||||
Cette carte est un commun technique autant qu'un commun de ressources. Le code source est libre — tu peux le forker, l'adapter, le déployer pour ta propre cartographie d'entraide, ton territoire, ta filière.
|
||||
</p>
|
||||
<p class="section-text">
|
||||
Une liste de ressources locales pour les artisans ? Un réseau d'entraide pour les soignants indépendants ? La structure est la même. L'IA d'enrichissement est la même. Il suffit de changer les données.
|
||||
</p>
|
||||
<a
|
||||
href="https://git.trans-former.fr/jules/nav-carte"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="btn-github"
|
||||
>
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0 0 24 12c0-6.63-5.37-12-12-12z"/></svg>
|
||||
Code source — git.trans-former.fr →
|
||||
</a>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
useHead({ title: 'À propos - AEP' })
|
||||
useHead({ title: 'À propos — AEP' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
@@ -205,14 +169,11 @@ useHead({ title: 'À propos - AEP' })
|
||||
min-height: 100vh;
|
||||
background: var(--nav-bg);
|
||||
padding: 1.5rem 1rem 5rem;
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.apropos-inner {
|
||||
max-width: 720px;
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* ── Retour ──────────────────────────────────────────────────────────────────── */
|
||||
@@ -321,16 +282,13 @@ useHead({ title: 'À propos - AEP' })
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
color: var(--nav-text);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.badge-detail {
|
||||
font-size: 0.775rem;
|
||||
color: var(--nav-text-muted);
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
@media (min-width: 560px) {
|
||||
.badge-label { white-space: nowrap; }
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@media (max-width: 559px) {
|
||||
@@ -352,6 +310,12 @@ useHead({ title: 'À propos - AEP' })
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.liberapay-widget-wrap {
|
||||
margin-bottom: 1rem;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.btn-liberapay {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
@@ -484,34 +448,6 @@ useHead({ title: 'À propos - AEP' })
|
||||
color: var(--nav-text);
|
||||
}
|
||||
|
||||
/* ── GitHub open source ──────────────────────────────────────────────────────── */
|
||||
|
||||
.section-opensource {
|
||||
border-top: 1px solid var(--nav-bg-alt);
|
||||
padding-top: 2rem;
|
||||
}
|
||||
|
||||
.btn-github {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.625rem 1.25rem;
|
||||
background: var(--nav-surface);
|
||||
border: 1px solid rgba(26, 34, 56, 0.2);
|
||||
border-radius: 8px;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
color: var(--nav-text);
|
||||
text-decoration: none;
|
||||
transition: border-color 0.15s, background 0.15s;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.btn-github:hover {
|
||||
border-color: var(--nav-primary-solid);
|
||||
background: var(--nav-bg-alt);
|
||||
}
|
||||
|
||||
/* ── Responsive général ──────────────────────────────────────────────────────── */
|
||||
|
||||
@media (max-width: 480px) {
|
||||
|
||||
150
pages/admin/rag-status.vue
Normal file
150
pages/admin/rag-status.vue
Normal file
@@ -0,0 +1,150 @@
|
||||
<template>
|
||||
<div class="min-h-screen bg-gray-950 text-gray-100 p-8">
|
||||
<div class="max-w-2xl mx-auto">
|
||||
<h1 class="text-2xl font-bold mb-2 text-white">RAG Status - Admin</h1>
|
||||
<p class="text-gray-400 text-sm mb-8">Coexistence V1 (keyword NocoDB) + V2 (embeddings Mistral)</p>
|
||||
|
||||
<!-- Bloc V2 -->
|
||||
<div class="bg-gray-900 rounded-lg p-6 mb-4 border" :class="info?.v2_ready ? 'border-green-700' : 'border-yellow-700'">
|
||||
<div class="flex items-center gap-3 mb-4">
|
||||
<span class="text-lg font-semibold">RAG V2 - Embeddings vectoriels</span>
|
||||
<span
|
||||
class="px-2 py-0.5 rounded text-xs font-mono"
|
||||
:class="info?.v2_ready ? 'bg-green-900 text-green-300' : 'bg-yellow-900 text-yellow-300'"
|
||||
>
|
||||
{{ info?.v2_ready ? 'ACTIF' : 'EN ATTENTE' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div v-if="info" class="space-y-2 text-sm text-gray-300">
|
||||
<div class="flex justify-between">
|
||||
<span class="text-gray-500">Fiches vectorisées</span>
|
||||
<span class="font-mono">{{ info.v2_embeddings_count }} / 120</span>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<span class="text-gray-500">Modèle embed</span>
|
||||
<span class="font-mono">{{ info.v2_model }}</span>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<span class="text-gray-500">Modèle chat</span>
|
||||
<span class="font-mono">{{ info.model_chat }}</span>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<span class="text-gray-500">Généré le</span>
|
||||
<span class="font-mono">{{ info.v2_generated_date ? info.v2_generated_date.slice(0, 10) : 'jamais' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="!info?.v2_ready" class="mt-4 bg-gray-800 rounded p-3 text-xs font-mono text-yellow-300">
|
||||
{{ info?.setup_command ?? 'MISTRAL_API_KEY=xxx node scripts/vectorize-v2.js' }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Bloc V1 -->
|
||||
<div class="bg-gray-900 rounded-lg p-6 mb-6 border" :class="info?.v1_enabled ? 'border-blue-700' : 'border-gray-700'">
|
||||
<div class="flex items-center gap-3 mb-4">
|
||||
<span class="text-lg font-semibold">RAG V1 - Keyword matching (NocoDB)</span>
|
||||
<span
|
||||
class="px-2 py-0.5 rounded text-xs font-mono"
|
||||
:class="info?.v1_enabled ? 'bg-blue-900 text-blue-300' : 'bg-gray-800 text-gray-500'"
|
||||
>
|
||||
{{ info?.v1_enabled ? 'ACTIF' : 'DÉSACTIVÉ' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div v-if="info" class="space-y-2 text-sm text-gray-300">
|
||||
<div class="flex justify-between">
|
||||
<span class="text-gray-500">RAG_V1_ENABLED</span>
|
||||
<span class="font-mono">{{ info.v1_enabled }}</span>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<span class="text-gray-500">Déprecation prévue</span>
|
||||
<span class="font-mono">{{ info.v1_deprecation_date }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Testeur chatbot-v2 -->
|
||||
<div class="bg-gray-900 rounded-lg p-6 border border-gray-700">
|
||||
<h2 class="text-base font-semibold mb-4">Tester /api/chatbot-v2</h2>
|
||||
|
||||
<div class="flex gap-2 mb-4">
|
||||
<input
|
||||
v-model="testQuestion"
|
||||
type="text"
|
||||
placeholder="Ex : structures de réemploi en Belgique"
|
||||
class="flex-1 bg-gray-800 border border-gray-600 rounded px-3 py-2 text-sm text-white placeholder-gray-500 focus:outline-none focus:border-blue-500"
|
||||
@keydown.enter="runTest"
|
||||
/>
|
||||
<button
|
||||
class="px-4 py-2 bg-blue-700 hover:bg-blue-600 rounded text-sm font-medium transition-colors disabled:opacity-50"
|
||||
:disabled="testLoading || !testQuestion.trim()"
|
||||
@click="runTest"
|
||||
>
|
||||
{{ testLoading ? 'En cours...' : 'Tester' }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div v-if="testError" class="bg-red-900/50 border border-red-700 rounded p-3 text-sm text-red-300 mb-3">
|
||||
{{ testError }}
|
||||
</div>
|
||||
|
||||
<div v-if="testResult" class="space-y-3">
|
||||
<div class="bg-gray-800 rounded p-3 text-sm">
|
||||
<div class="text-gray-400 text-xs mb-1 font-mono">reponse_texte</div>
|
||||
<p class="text-gray-100 leading-relaxed">{{ testResult.reponse_texte }}</p>
|
||||
</div>
|
||||
|
||||
<div v-if="testResult.fiches_recommandees?.length" class="bg-gray-800 rounded p-3 text-sm">
|
||||
<div class="text-gray-400 text-xs mb-2 font-mono">fiches_recommandees</div>
|
||||
<div v-for="f in testResult.fiches_recommandees" :key="f.fiche_id" class="mb-2">
|
||||
<span class="font-mono text-blue-300 text-xs">{{ f.fiche_id }}</span>
|
||||
<span class="text-white ml-2">{{ f.nom }}</span>
|
||||
<p class="text-gray-400 text-xs mt-0.5">{{ f.explication }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="testResult.sources?.length" class="bg-gray-800 rounded p-3 text-sm">
|
||||
<div class="text-gray-400 text-xs mb-2 font-mono">sources (top-5 cosine)</div>
|
||||
<div v-for="s in testResult.sources" :key="s.fiche_id" class="flex justify-between text-xs mb-1">
|
||||
<span class="text-gray-300 font-mono">{{ s.fiche_id }}</span>
|
||||
<span class="text-blue-400 font-mono">{{ s.score?.toFixed(4) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-xs font-mono px-2" :class="testResult.v2_ready ? 'text-green-400' : 'text-yellow-400'">
|
||||
v2_ready: {{ testResult.v2_ready }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const { data: info } = await useFetch('/api/admin/rag-info')
|
||||
|
||||
const testQuestion = ref('')
|
||||
const testResult = ref<any>(null)
|
||||
const testError = ref<string | null>(null)
|
||||
const testLoading = ref(false)
|
||||
|
||||
async function runTest() {
|
||||
if (!testQuestion.value.trim()) return
|
||||
testLoading.value = true
|
||||
testError.value = null
|
||||
testResult.value = null
|
||||
|
||||
try {
|
||||
const res = await $fetch('/api/chatbot-v2', {
|
||||
method: 'POST',
|
||||
body: { question: testQuestion.value }
|
||||
})
|
||||
testResult.value = res
|
||||
} catch (e: any) {
|
||||
testError.value = e?.data?.statusMessage ?? e?.message ?? 'Erreur inconnue'
|
||||
} finally {
|
||||
testLoading.value = false
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,610 +1,39 @@
|
||||
<template>
|
||||
<div class="flex h-full overflow-hidden" style="background: var(--nav-bg);">
|
||||
|
||||
<!-- ═══════════════════════════════════════ SIDEBAR DESKTOP (>= 1024px) -->
|
||||
<div class="hidden lg:block overflow-y-auto" style="width: 320px; min-width: 320px; flex-shrink: 0; border-right: 1px solid var(--nav-bg-alt); height: 100%;">
|
||||
|
||||
<!-- IntentionBanner s'auto-affiche via Teleport (overlay plein ecran) -->
|
||||
<IntentionBanner />
|
||||
|
||||
<!-- Filtres familles + hashtags -->
|
||||
<HashtagFilter
|
||||
:allHashtags="allHashtags"
|
||||
:selectedHashtags="selectedHashtags"
|
||||
:selectedFamille="selectedFamille"
|
||||
@update:selectedHashtags="selectedHashtags = $event"
|
||||
@update:selectedFamille="selectedFamille = $event"
|
||||
/>
|
||||
|
||||
<!-- Separateur -->
|
||||
<div style="height: 1px; background: var(--nav-bg-alt);"></div>
|
||||
|
||||
<!-- Barre de recherche -->
|
||||
<div class="px-3 py-2" style="border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<label class="sidebar-search-label" aria-label="Rechercher une structure">
|
||||
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="sidebar-search-icon">
|
||||
<circle cx="11" cy="11" r="8"/>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"/>
|
||||
</svg>
|
||||
<input
|
||||
v-model="search"
|
||||
type="search"
|
||||
placeholder="Rechercher une structure..."
|
||||
class="sidebar-search-input"
|
||||
autocomplete="off"
|
||||
/>
|
||||
<button
|
||||
v-if="search"
|
||||
type="button"
|
||||
class="sidebar-search-clear"
|
||||
aria-label="Effacer"
|
||||
@click.stop="search = ''"
|
||||
>
|
||||
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
</label>
|
||||
<div class="flex flex-col items-center justify-center h-full gap-6" style="background: var(--nav-bg);">
|
||||
<div class="text-center max-w-md px-6">
|
||||
<div
|
||||
class="inline-flex items-center justify-center w-14 h-14 rounded-2xl mb-5"
|
||||
style="background: var(--nav-bg-alt);"
|
||||
>
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="color: var(--nav-text-muted);">
|
||||
<rect x="3" y="3" width="7" height="7"/>
|
||||
<rect x="14" y="3" width="7" height="7"/>
|
||||
<rect x="14" y="14" width="7" height="7"/>
|
||||
<rect x="3" y="14" width="7" height="7"/>
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<!-- Header compteur + reset -->
|
||||
<div class="flex items-center justify-between px-4 py-2" style="border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<span class="text-xs font-bold uppercase tracking-widest" style="color: var(--nav-text-muted);">
|
||||
{{ filtered.length }} structure{{ filtered.length > 1 ? 's' : '' }}
|
||||
</span>
|
||||
<button
|
||||
v-if="hasActiveFilters"
|
||||
@click="resetFilters"
|
||||
class="text-xs underline hover:opacity-70"
|
||||
style="color: var(--nav-text-muted);"
|
||||
>Effacer les filtres</button>
|
||||
</div>
|
||||
|
||||
<!-- Liste fiches (sidebar entiere scroll - pas de scroll interne) -->
|
||||
<div class="px-3 py-2 space-y-1.5">
|
||||
<div v-if="pending" class="flex items-center justify-center py-8" style="color: var(--nav-text-muted);">
|
||||
Chargement...
|
||||
</div>
|
||||
<div v-else-if="filtered.length === 0" class="text-center py-8">
|
||||
<p class="text-xs" style="color: var(--nav-text-muted);">Aucun résultat</p>
|
||||
</div>
|
||||
<div
|
||||
v-for="structure in filtered"
|
||||
:key="structure.id"
|
||||
class="rounded-lg px-3 py-2 cursor-pointer transition-all"
|
||||
:style="selectedId === structure.id
|
||||
? `background: var(--nav-bg-alt); border-left: 3px solid ${familleColor(structure.famille_principale)}; padding-left: 9px;`
|
||||
: 'background: var(--nav-bg); border-left: 3px solid transparent; padding-left: 9px;'"
|
||||
@click="onSelectStructure(structure.id)"
|
||||
@mouseenter="hoveredId = structure.id"
|
||||
@mouseleave="hoveredId = null"
|
||||
>
|
||||
<div class="flex items-start justify-between gap-1.5">
|
||||
<span class="font-semibold text-sm leading-snug" style="color: var(--nav-text);">{{ structure.nom }}</span>
|
||||
<span
|
||||
class="shrink-0 w-2.5 h-2.5 rounded-full mt-1"
|
||||
:style="`background: ${familleColor(structure.famille_principale)};`"
|
||||
/>
|
||||
</div>
|
||||
<div class="mt-0.5 text-xs" style="color: var(--nav-text-muted);">{{ structure.type_principal }} - {{ structure.ville }}</div>
|
||||
<div v-if="structure.hashtags.length" class="mt-1 flex flex-wrap gap-1">
|
||||
<span
|
||||
v-for="tag in structure.hashtags.slice(0, 2)"
|
||||
:key="tag"
|
||||
class="text-xs"
|
||||
style="color: var(--nav-text-muted);"
|
||||
>{{ tag }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h1 class="text-2xl font-bold mb-3" style="color: var(--nav-text);">Agences Inspirantes</h1>
|
||||
<p class="text-sm leading-relaxed mb-6" style="color: var(--nav-text-muted);">
|
||||
Cette section répertoriera les agences d'architecture qui incarnent une pratique engagée — écologie politique, auto-construction, architectures vernaculaires, sobriété.
|
||||
</p>
|
||||
<p class="text-xs font-semibold uppercase tracking-widest mb-6" style="color: var(--nav-text-muted); opacity: 0.6;">
|
||||
Bientôt disponible
|
||||
</p>
|
||||
<NuxtLink
|
||||
to="/"
|
||||
class="inline-flex items-center gap-2 px-4 py-2 rounded-xl text-sm font-semibold transition-all hover:opacity-80"
|
||||
style="background: var(--nav-primary); color: var(--nav-text-on-primary);"
|
||||
>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" aria-hidden="true">
|
||||
<line x1="19" y1="12" x2="5" y2="12"/>
|
||||
<polyline points="12 19 5 12 12 5"/>
|
||||
</svg>
|
||||
Retour à l'écosystème
|
||||
</NuxtLink>
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════════════════════════════ ZONE CENTRALE (carte) -->
|
||||
<main class="flex-1 flex flex-col overflow-hidden relative">
|
||||
|
||||
<!-- ── VUE DESKTOP : Onglets Métro/Outre-mer ── -->
|
||||
<div class="hidden lg:flex lg:flex-1 lg:flex-col lg:overflow-hidden">
|
||||
<!-- Onglets desktop -->
|
||||
<div class="shrink-0 flex" style="background: var(--nav-surface); border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<button
|
||||
class="px-5 py-2 text-sm font-medium transition-colors"
|
||||
:style="desktopMapView === 'metropole'
|
||||
? 'color: var(--nav-text); border-bottom: 2px solid var(--nav-primary-solid);'
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="desktopMapView = 'metropole'"
|
||||
>Métropolitain</button>
|
||||
<button
|
||||
class="px-5 py-2 text-sm font-medium transition-colors"
|
||||
:style="desktopMapView === 'outremer'
|
||||
? 'color: var(--nav-text); border-bottom: 2px solid var(--nav-primary-solid);'
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="desktopMapView = 'outremer'"
|
||||
>Outre-mer</button>
|
||||
<button
|
||||
class="px-5 py-2 text-sm font-medium transition-colors"
|
||||
:style="desktopMapView === 'graphe'
|
||||
? 'color: var(--nav-text); border-bottom: 2px solid var(--nav-primary-solid);'
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="desktopMapView = 'graphe'"
|
||||
>Vue graphique</button>
|
||||
</div>
|
||||
|
||||
<!-- Carte Métropole desktop -->
|
||||
<div v-show="desktopMapView === 'metropole'" class="flex-1 flex flex-col overflow-hidden">
|
||||
<div class="relative flex-1" style="min-height: 200px;">
|
||||
<ClientOnly>
|
||||
<NavMapV2
|
||||
ref="navMapRef"
|
||||
:structures="metropoleStructures"
|
||||
:selectedId="selectedId"
|
||||
@select-structure="onSelectStructure"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div
|
||||
class="w-full h-full flex items-center justify-center"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text-muted);"
|
||||
>
|
||||
Chargement de la carte…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
<ChatbotPlaceholder
|
||||
@highlightOrgs="() => {}"
|
||||
@applyHashtag="(tag) => { if (!selectedHashtags.includes(tag)) selectedHashtags = [...selectedHashtags, tag] }"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Carte Outre-mer desktop -->
|
||||
<div v-show="desktopMapView === 'outremer'" class="flex-1 overflow-y-auto" style="background: var(--nav-bg);">
|
||||
<ClientOnly>
|
||||
<OutremerMap
|
||||
:orgs="outremerOrgsLegacy"
|
||||
:selectedId="selectedIdLegacyNum"
|
||||
@select-org="() => {}"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="flex items-center justify-center h-full text-sm" style="color: var(--nav-text-muted);">
|
||||
Chargement…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Vue graphique desktop -->
|
||||
<div v-show="desktopMapView === 'graphe'" class="flex-1 overflow-hidden flex flex-col">
|
||||
<div class="flex-1 overflow-hidden relative">
|
||||
<ClientOnly>
|
||||
<GraphView
|
||||
:data="bifurcationData"
|
||||
:allHashtags="allHashtags"
|
||||
:active="desktopMapView === 'graphe'"
|
||||
@select-structure="onSelectStructure"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="flex items-center justify-center h-full" style="color: var(--nav-text-muted);">
|
||||
Chargement du graphe...
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
<ChatbotPlaceholder
|
||||
@highlightOrgs="() => {}"
|
||||
@applyHashtag="(tag) => { if (!selectedHashtags.includes(tag)) selectedHashtags = [...selectedHashtags, tag] }"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ── VUE MOBILE : Onglets Métro/Outre-mer/Graphique + sheet swipable ── -->
|
||||
<div class="lg:hidden shrink-0 flex" style="background: var(--nav-surface); border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<button
|
||||
class="flex-1 py-2 text-sm font-medium transition-colors"
|
||||
:style="mobileMapView === 'metropole'
|
||||
? 'color: var(--nav-text); border-bottom: 2px solid var(--nav-primary-solid);'
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="mobileMapView = 'metropole'"
|
||||
>Métropolitain</button>
|
||||
<button
|
||||
class="flex-1 py-2 text-sm font-medium transition-colors"
|
||||
:style="mobileMapView === 'outremer'
|
||||
? 'color: var(--nav-text); border-bottom: 2px solid var(--nav-primary-solid);'
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="mobileMapView = 'outremer'"
|
||||
>Outre-mer</button>
|
||||
<button
|
||||
class="flex-1 py-2 text-sm font-medium transition-colors"
|
||||
:style="mobileMapView === 'graphe'
|
||||
? 'color: var(--nav-text); border-bottom: 2px solid var(--nav-primary-solid);'
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="mobileMapView = 'graphe'"
|
||||
>Graphe</button>
|
||||
</div>
|
||||
|
||||
<div class="lg:hidden flex-1 relative overflow-hidden">
|
||||
<!-- Carte mobile Métropole -->
|
||||
<div v-show="mobileMapView === 'metropole'" class="absolute inset-0">
|
||||
<ClientOnly>
|
||||
<NavMapV2
|
||||
ref="navMapMobileRef"
|
||||
:structures="metropoleStructures"
|
||||
:selectedId="selectedId"
|
||||
@select-structure="onSelectStructureMobile"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="w-full h-full flex items-center justify-center" style="background: var(--nav-bg-alt); color: var(--nav-text-muted);">
|
||||
Chargement de la carte…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Carte mobile Outre-mer -->
|
||||
<div v-show="mobileMapView === 'outremer'" class="absolute inset-0 overflow-y-auto" style="background: var(--nav-bg);">
|
||||
<ClientOnly>
|
||||
<OutremerMap
|
||||
:orgs="outremerOrgsLegacy"
|
||||
:selectedId="selectedIdLegacyNum"
|
||||
@select-org="() => {}"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="flex items-center justify-center h-48" style="color: var(--nav-text-muted);">
|
||||
Chargement…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Vue graphique mobile -->
|
||||
<div v-show="mobileMapView === 'graphe'" class="absolute inset-0 overflow-hidden" style="background: var(--nav-bg);">
|
||||
<ClientOnly>
|
||||
<GraphView
|
||||
:data="bifurcationData"
|
||||
:allHashtags="allHashtags"
|
||||
:active="mobileMapView === 'graphe'"
|
||||
@select-structure="onSelectStructureMobile"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="flex items-center justify-center h-48" style="color: var(--nav-text-muted);">
|
||||
Chargement du graphe…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Bottom sheet swipable (masqué en vue graphique pour ne pas occulter le canvas) -->
|
||||
<ClientOnly v-if="mobileMapView !== 'graphe'">
|
||||
<MobileSheet :resultCount="filtered.length" :pending="pending">
|
||||
<!-- Bandeau intention mobile -->
|
||||
<div class="px-3 py-2" style="background: var(--bifurc-banner-bg, #faf8f5); border-bottom: 1px solid var(--bifurc-banner-border, #e0d8cc);">
|
||||
<p class="text-xs leading-relaxed" style="color: var(--bifurc-banner-text, #2c2416); margin: 0;">
|
||||
120 réseaux, collectifs et agences où des pensées écologiques deviennent des pratiques d'architecture.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Filtres hashtags mobile -->
|
||||
<div class="px-3 py-2" style="border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<HashtagFilter
|
||||
:allHashtags="allHashtags"
|
||||
:selectedHashtags="selectedHashtags"
|
||||
:selectedFamille="selectedFamille"
|
||||
@update:selectedHashtags="selectedHashtags = $event"
|
||||
@update:selectedFamille="selectedFamille = $event"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Barre recherche mobile -->
|
||||
<div class="px-3 pt-2 pb-2" style="border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<label class="mobile-search-label" aria-label="Rechercher une structure">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="color: var(--nav-text-muted); flex-shrink: 0;">
|
||||
<circle cx="11" cy="11" r="8"/>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"/>
|
||||
</svg>
|
||||
<input
|
||||
v-model="search"
|
||||
type="search"
|
||||
placeholder="Rechercher…"
|
||||
class="mobile-search-input"
|
||||
autocomplete="off"
|
||||
/>
|
||||
<button
|
||||
v-if="search"
|
||||
type="button"
|
||||
class="mobile-search-clear"
|
||||
aria-label="Effacer"
|
||||
@click.stop="search = ''"
|
||||
>
|
||||
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
</label>
|
||||
<button
|
||||
v-if="hasActiveFilters"
|
||||
@click="resetFilters"
|
||||
class="mt-1 text-xs"
|
||||
style="color: var(--nav-text-muted); text-decoration: underline;"
|
||||
>Effacer les filtres</button>
|
||||
</div>
|
||||
|
||||
<!-- Liste fiches mobile -->
|
||||
<div class="px-3 py-2">
|
||||
<div class="text-xs font-bold uppercase tracking-wide mb-2" style="color: var(--nav-text-muted);">
|
||||
{{ filtered.length }} structure{{ filtered.length > 1 ? 's' : '' }}
|
||||
</div>
|
||||
<div v-if="pending" class="flex items-center justify-center py-8" style="color: var(--nav-text-muted);">
|
||||
Chargement des fiches…
|
||||
</div>
|
||||
<div v-else-if="filtered.length === 0" class="text-center py-8">
|
||||
<p class="text-sm mb-2" style="color: var(--nav-text-muted);">Aucun résultat pour ces filtres.</p>
|
||||
<button @click="resetFilters" class="text-sm underline" style="color: var(--nav-primary-solid);">
|
||||
Effacer les filtres
|
||||
</button>
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
<div
|
||||
v-for="structure in filtered"
|
||||
:key="structure.id"
|
||||
class="block rounded-lg p-3 transition-all cursor-pointer"
|
||||
:style="selectedId === structure.id
|
||||
? `background: var(--nav-bg-alt); border-left: 3px solid ${familleColor(structure.famille_principale)};`
|
||||
: 'background: var(--nav-surface); border-left: 3px solid transparent;'"
|
||||
@click="onSelectStructureMobile(structure.id)"
|
||||
>
|
||||
<div class="flex items-start justify-between gap-2">
|
||||
<span class="font-semibold text-sm leading-snug" style="color: var(--nav-text);">{{ structure.nom }}</span>
|
||||
<span
|
||||
class="shrink-0 w-2.5 h-2.5 rounded-full mt-1"
|
||||
:style="`background: ${familleColor(structure.famille_principale)};`"
|
||||
/>
|
||||
</div>
|
||||
<div class="mt-0.5 text-xs" style="color: var(--nav-text-muted);">{{ structure.type_principal }} · {{ structure.ville }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</MobileSheet>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- ═══════════════════════════════════════ MODAL FICHE V2 (desktop) -->
|
||||
<FicheModalV2
|
||||
v-model="ficheModalOpen"
|
||||
:structureId="ficheModalId"
|
||||
:data="bifurcationData"
|
||||
@update:structureId="ficheModalId = $event"
|
||||
/>
|
||||
|
||||
<!-- ═══════════════════════════════════════ BOUTON CHATBOT FLOTTANT (mobile) -->
|
||||
<button
|
||||
class="lg:hidden fixed bottom-6 right-4 z-[1000] flex items-center gap-2 px-4 rounded-full shadow-lg"
|
||||
style="
|
||||
height: 48px;
|
||||
background: var(--nav-primary);
|
||||
opacity: 0.92;
|
||||
color: var(--nav-text-on-primary);
|
||||
box-shadow: 0 4px 16px rgba(26,34,56,0.25);
|
||||
font-family: var(--nav-font);
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
"
|
||||
aria-label="Ouvrir l'assistant Chatbot"
|
||||
@click="chatbotOpen = true"
|
||||
>
|
||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
|
||||
</svg>
|
||||
<span>Chatbot</span>
|
||||
</button>
|
||||
|
||||
<!-- ═══════════════════════════════════════ CHATBOT BOTTOM SHEET (mobile) -->
|
||||
<ChatbotReseaux
|
||||
:modelValue="chatbotOpen"
|
||||
@update:modelValue="chatbotOpen = $event"
|
||||
/>
|
||||
|
||||
<!-- ═══════════════════════════════════════ CHATBOT PENSEES (desktop, tous onglets) -->
|
||||
<ClientOnly>
|
||||
<ChatbotPensees />
|
||||
</ClientOnly>
|
||||
|
||||
<!-- ═══════════════════════════════════════ POP-UP MISSION RÉSEAUX AEP -->
|
||||
<button
|
||||
class="reseaux-info-btn"
|
||||
type="button"
|
||||
@click="missionOpen = true"
|
||||
aria-label="À propos des réseaux AEP cartographiés"
|
||||
title="À propos de cette carte"
|
||||
>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<circle cx="12" cy="12" r="10"/>
|
||||
<line x1="12" y1="16" x2="12" y2="12"/>
|
||||
<line x1="12" y1="8" x2="12.01" y2="8"/>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<MissionPopup
|
||||
:modelValue="missionOpen"
|
||||
@update:modelValue="missionOpen = $event"
|
||||
title="Réseaux AEP — l'architecture qui s'engage"
|
||||
ctaLabel="Explorer les 120 réseaux"
|
||||
storageKey="aep_reseaux_seen"
|
||||
>
|
||||
<p class="mission-text">
|
||||
Cette carte rassemble <strong>120 réseaux, collectifs et agences</strong> qui pratiquent une architecture engagée — écologique, politique, biorégionale. Ce ne sont pas seulement des agences « vertes » : ce sont celles et ceux qui assument des positions, refusent des projets, expérimentent des modèles de gouvernance, mettent leurs ressources et leurs savoirs en commun.
|
||||
</p>
|
||||
<p class="mission-text">
|
||||
Six familles structurent la cartographie : militants, agences engagées, collectifs de production, ressources communes, recherche, formations alternatives. Filtre par hashtag, ouvre la fiche d'une structure, navigue le graphe (3<sup>e</sup> onglet) pour voir les affinités. Si tu animes ou connais un réseau qui devrait y être : <NuxtLink to="/contribuer" @click.stop>propose-le</NuxtLink>.
|
||||
</p>
|
||||
</MissionPopup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { ReseauxBifurcationData, StructureV2 } from '~/types/structure-v2'
|
||||
|
||||
// ── Couleurs familles ──────────────────────────────────────────────────────
|
||||
const FAMILLE_COLORS: Record<number, string> = {
|
||||
1: '#a85d3e',
|
||||
2: '#c4a472',
|
||||
3: '#d4a017',
|
||||
4: '#5a7a4a',
|
||||
5: '#3d6a8c',
|
||||
6: '#6b3fa0',
|
||||
}
|
||||
|
||||
function familleColor(f: number): string {
|
||||
return FAMILLE_COLORS[f] ?? '#888'
|
||||
}
|
||||
|
||||
// ── État UI ────────────────────────────────────────────────────────────────
|
||||
const selectedId = ref<string | null>(null)
|
||||
const hoveredId = ref<string | null>(null)
|
||||
const ficheModalOpen = ref(false)
|
||||
const ficheModalId = ref<string | null>(null)
|
||||
const chatbotOpen = ref(false)
|
||||
const mobileMapView = ref<'metropole' | 'outremer' | 'graphe'>('metropole')
|
||||
const desktopMapView = ref<'metropole' | 'outremer' | 'graphe'>('metropole')
|
||||
const missionOpen = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
try {
|
||||
if (!localStorage.getItem('aep_reseaux_seen')) {
|
||||
missionOpen.value = true
|
||||
}
|
||||
} catch {}
|
||||
})
|
||||
|
||||
// Filtres
|
||||
const search = ref('')
|
||||
const selectedFamille = ref<number | null>(null)
|
||||
const selectedHashtags = ref<string[]>([])
|
||||
|
||||
// Refs cartes
|
||||
const navMapRef = ref<any>(null)
|
||||
const navMapMobileRef = ref<any>(null)
|
||||
|
||||
// ── Données V2 - JSON statique ─────────────────────────────────────────────
|
||||
const bifurcationData = ref<ReseauxBifurcationData | null>(null)
|
||||
const pending = ref(true)
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
bifurcationData.value = await $fetch<ReseauxBifurcationData>('/data/reseaux-bifurcation.json')
|
||||
} catch (e) {
|
||||
console.error('Erreur chargement reseaux-bifurcation.json', e)
|
||||
} finally {
|
||||
pending.value = false
|
||||
}
|
||||
})
|
||||
|
||||
const structures = computed<StructureV2[]>(() => bifurcationData.value?.structures ?? [])
|
||||
|
||||
// Tous les hashtags uniques triés
|
||||
const allHashtags = computed<string[]>(() => {
|
||||
const set = new Set<string>()
|
||||
structures.value.forEach(s => s.hashtags.forEach(h => set.add(h)))
|
||||
return Array.from(set).sort()
|
||||
})
|
||||
|
||||
// ── Filtrage ───────────────────────────────────────────────────────────────
|
||||
const filtered = computed<StructureV2[]>(() => {
|
||||
let result = structures.value
|
||||
|
||||
// Filtre texte
|
||||
if (search.value.trim()) {
|
||||
const q = search.value.toLowerCase()
|
||||
result = result.filter(
|
||||
s =>
|
||||
s.nom.toLowerCase().includes(q) ||
|
||||
s.ville.toLowerCase().includes(q) ||
|
||||
s.description_courte.toLowerCase().includes(q) ||
|
||||
s.hashtags.some(h => h.toLowerCase().includes(q))
|
||||
)
|
||||
}
|
||||
|
||||
// Filtre famille - F6 = badge_f6_recherche_politique, pas famille_principale
|
||||
if (selectedFamille.value !== null) {
|
||||
if (selectedFamille.value === 6) {
|
||||
result = result.filter(s => (s.badges as any)?.f6_recherche_politique === true)
|
||||
} else {
|
||||
result = result.filter(
|
||||
s => s.famille_principale === selectedFamille.value ||
|
||||
(s.familles_secondaires ?? []).includes(selectedFamille.value!)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Filtre hashtags (AND logique si plusieurs)
|
||||
if (selectedHashtags.value.length) {
|
||||
result = result.filter(
|
||||
s => selectedHashtags.value.every(h => s.hashtags.includes(h))
|
||||
)
|
||||
}
|
||||
|
||||
return result
|
||||
})
|
||||
|
||||
const hasActiveFilters = computed(
|
||||
() => !!search.value || selectedFamille.value !== null || selectedHashtags.value.length > 0
|
||||
)
|
||||
|
||||
function resetFilters() {
|
||||
search.value = ''
|
||||
selectedFamille.value = null
|
||||
selectedHashtags.value = []
|
||||
}
|
||||
|
||||
// Structures métropole (pays != DOM-TOM, et avec coordonnées)
|
||||
// Pour simplifier : toutes les structures (la carte gère les sans-coords)
|
||||
const metropoleStructures = computed<StructureV2[]>(() => filtered.value)
|
||||
|
||||
// Outre-mer : pas de structures V2 DOM-TOM pour l'instant - garder le composant existant vide
|
||||
// OutremerMap attend le format Org legacy - on passe un tableau vide
|
||||
const outremerOrgsLegacy = computed(() => [])
|
||||
const selectedIdLegacyNum = computed(() => null)
|
||||
|
||||
// ── Sélection ─────────────────────────────────────────────────────────────
|
||||
function onSelectStructure(id: string) {
|
||||
selectedId.value = selectedId.value === id ? null : id
|
||||
if (typeof window !== 'undefined' && window.innerWidth >= 1024) {
|
||||
ficheModalId.value = id
|
||||
ficheModalOpen.value = true
|
||||
}
|
||||
}
|
||||
|
||||
function onSelectStructureMobile(id: string) {
|
||||
selectedId.value = id
|
||||
ficheModalId.value = id
|
||||
ficheModalOpen.value = true
|
||||
}
|
||||
|
||||
useHead({ title: "AEP - Réseaux de bifurcation architecturale" })
|
||||
useHead({ title: 'Agences Inspirantes — AEP (bientôt disponible)' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.reseaux-info-btn {
|
||||
position: fixed;
|
||||
bottom: 24px;
|
||||
left: 16px;
|
||||
z-index: 1000;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 50%;
|
||||
border: none;
|
||||
background: var(--nav-surface);
|
||||
color: var(--nav-text-muted);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0 2px 12px rgba(26,34,56,0.18);
|
||||
cursor: pointer;
|
||||
transition: opacity 0.15s, transform 0.1s;
|
||||
}
|
||||
.reseaux-info-btn:hover { opacity: 0.85; transform: translateY(-1px); color: var(--nav-text); }
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.reseaux-info-btn { bottom: 16px; left: 340px; }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,550 +0,0 @@
|
||||
<template>
|
||||
<div class="codev-carto">
|
||||
|
||||
<header class="carto-header">
|
||||
<h1>Carto entraide</h1>
|
||||
<p class="carto-subtitle">
|
||||
<template v-if="pending">Chargement...</template>
|
||||
<template v-else>
|
||||
{{ fiches.length }} fiche{{ fiches.length !== 1 ? 's' : '' }} - clique sur un nom pour voir le detail
|
||||
</template>
|
||||
</p>
|
||||
<NuxtLink to="/codev/qr" class="qr-link" title="QR Code">[ QR ]</NuxtLink>
|
||||
</header>
|
||||
|
||||
<div class="codev-tabs">
|
||||
<button :class="{ active: tab === 'carto' }" @click="tab = 'carto'" type="button">Carto</button>
|
||||
<button :class="{ active: tab === 'annuaire' }" @click="tab = 'annuaire'" type="button">Annuaire</button>
|
||||
</div>
|
||||
|
||||
<div v-if="tab === 'carto'">
|
||||
<div class="show-labels-bar">
|
||||
<button
|
||||
type="button"
|
||||
:class="{ active: showLabels }"
|
||||
@click="showLabels = !showLabels"
|
||||
>
|
||||
{{ showLabels ? 'Masquer besoins/offres' : 'Montrer besoins/offres' }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<ClientOnly>
|
||||
<CodevGraph
|
||||
:fiches="fiches"
|
||||
:matches="matches"
|
||||
:mode="mode"
|
||||
:show-labels="showLabels"
|
||||
@select-fiche="onSelectFiche"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="graph-fallback">Chargement du graphe...</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
|
||||
<!-- Bandeau info mode actif -->
|
||||
<div v-if="mode !== 'none'" class="mode-banner">
|
||||
<span>
|
||||
Mode {{ MODE_LABELS[mode] }} actif -
|
||||
{{ matches.length }} connexion{{ matches.length !== 1 ? 's' : '' }} trouvee{{ matches.length !== 1 ? 's' : '' }}.
|
||||
</span>
|
||||
<button class="banner-clear" @click="setMode('none')" type="button">Effacer</button>
|
||||
</div>
|
||||
|
||||
<!-- Boutons matching -->
|
||||
<div class="matching-controls">
|
||||
<button
|
||||
:class="{ active: mode === 'solution' }"
|
||||
style="--mode-color: #22c55e"
|
||||
@click="setMode('solution')"
|
||||
type="button"
|
||||
>
|
||||
Solution
|
||||
<span class="hint">besoin - compétence</span>
|
||||
</button>
|
||||
<button
|
||||
:class="{ active: mode === 'alliance' }"
|
||||
style="--mode-color: #f97316"
|
||||
@click="setMode('alliance')"
|
||||
type="button"
|
||||
>
|
||||
Alliance
|
||||
<span class="hint">besoins partagés</span>
|
||||
</button>
|
||||
<button
|
||||
v-if="mode !== 'none'"
|
||||
class="reset"
|
||||
@click="setMode('none')"
|
||||
type="button"
|
||||
>
|
||||
Effacer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-else-if="tab === 'annuaire'" class="annuaire-wrap">
|
||||
|
||||
<div v-if="fiches.length === 0" class="list-empty">
|
||||
Aucune fiche. <NuxtLink to="/codev/fiche">Ajouter la mienne</NuxtLink>
|
||||
</div>
|
||||
|
||||
<div v-else class="annuaire-scroll">
|
||||
<table class="annuaire-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-nom">Prénom</th>
|
||||
<th class="col-besoin">Besoin</th>
|
||||
<th class="col-offre">Ce que j'offre</th>
|
||||
<th v-if="isAdmin" class="col-actions"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="f in fiches" :key="f.id" @click="navigateTo(`/codev/fiche?id=${f.id}`)" class="annuaire-row">
|
||||
<td class="col-nom">{{ f.nom }}</td>
|
||||
<td class="col-besoin">{{ f.besoin }}</td>
|
||||
<td class="col-offre">{{ f.offre }}</td>
|
||||
<td v-if="isAdmin" class="col-actions">
|
||||
<button @click.stop="deleteFiche(f.id)" class="delete-btn" type="button" title="Supprimer">✕</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p class="annuaire-hint">Clique sur une ligne pour modifier la fiche</p>
|
||||
</div>
|
||||
|
||||
<!-- FAB ajouter une fiche -->
|
||||
<NuxtLink to="/codev/fiche" class="fab-add" title="Ajouter ma fiche" aria-label="Ajouter une fiche">
|
||||
+
|
||||
</NuxtLink>
|
||||
|
||||
<Transition name="sheet">
|
||||
<div v-if="selectedFiche" class="bottom-sheet" @click.self="selectedFiche = null">
|
||||
<div class="sheet-content">
|
||||
<div class="sheet-handle"></div>
|
||||
<div class="sheet-name">{{ selectedFiche.nom }}</div>
|
||||
<div class="sheet-section">
|
||||
<span class="sheet-label">Besoin</span>
|
||||
<p class="sheet-text">{{ selectedFiche.besoin }}</p>
|
||||
</div>
|
||||
<div class="sheet-section">
|
||||
<span class="sheet-label">Ce que j'apporte</span>
|
||||
<p class="sheet-text">{{ selectedFiche.offre }}</p>
|
||||
</div>
|
||||
<div class="sheet-tags" v-if="selectedFiche.hashtags.length">
|
||||
<span v-for="t in selectedFiche.hashtags" :key="t" class="sheet-tag">#{{ t }}</span>
|
||||
</div>
|
||||
<NuxtLink :to="`/codev/fiche?id=${selectedFiche.id}`" class="sheet-edit-btn">Modifier cette fiche</NuxtLink>
|
||||
<button class="sheet-close" @click="selectedFiche = null" type="button">Fermer</button>
|
||||
</div>
|
||||
</div>
|
||||
</Transition>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { CodevFiche, CodevMatch } from '~/types/codev'
|
||||
import { computeMatches } from '~/utils/codev/matching'
|
||||
|
||||
useHead({ title: 'Carto - Co-developpement' })
|
||||
|
||||
const { data, pending, refresh } = await useFetch<{ list: CodevFiche[] }>('/api/codev/fiches')
|
||||
const fiches = computed(() => data.value?.list ?? [])
|
||||
|
||||
const matches = ref<CodevMatch[]>([])
|
||||
const mode = ref<'none' | 'solution' | 'alliance' | 'surprise'>('none')
|
||||
const showLabels = ref(false)
|
||||
const tab = ref<'carto' | 'annuaire'>('carto')
|
||||
const selectedFiche = ref<CodevFiche | null>(null)
|
||||
const isMobileView = typeof window !== 'undefined' ? window.innerWidth < 600 : false
|
||||
|
||||
const isAdmin = ref(false)
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
const r = await $fetch<{ admin: boolean }>('/api/codev/me')
|
||||
isAdmin.value = r.admin
|
||||
} catch { isAdmin.value = false }
|
||||
})
|
||||
|
||||
const MODE_LABELS: Record<string, string> = {
|
||||
solution: 'Solution',
|
||||
alliance: 'Alliance',
|
||||
surprise: 'Surprise',
|
||||
}
|
||||
|
||||
function setMode(newMode: 'none' | 'solution' | 'alliance' | 'surprise') {
|
||||
mode.value = newMode
|
||||
if (newMode === 'none') {
|
||||
matches.value = []
|
||||
} else {
|
||||
matches.value = computeMatches(fiches.value, newMode)
|
||||
}
|
||||
}
|
||||
|
||||
function onSelectFiche(id: number) {
|
||||
if (isMobileView) {
|
||||
selectedFiche.value = fiches.value.find(f => f.id === id) ?? null
|
||||
} else {
|
||||
navigateTo(`/codev/fiche?id=${id}`)
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteFiche(id: number) {
|
||||
if (!confirm('Supprimer la fiche ?')) return
|
||||
await $fetch(`/api/codev/fiches/${id}`, { method: 'DELETE' })
|
||||
await refresh()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.codev-carto {
|
||||
min-height: 100vh;
|
||||
background: var(--nav-bg, #fafafa);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 1.25rem 1rem 2rem;
|
||||
gap: 1rem;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* ── En-tete ── */
|
||||
|
||||
.carto-header {
|
||||
text-align: center;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.carto-header h1 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text, #1a1a2e);
|
||||
margin: 0 0 0.375rem;
|
||||
}
|
||||
|
||||
.carto-subtitle {
|
||||
font-size: 0.9rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ── Fallback ── */
|
||||
|
||||
.graph-fallback {
|
||||
width: 100%;
|
||||
height: 70vh;
|
||||
min-height: 320px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
font-size: 0.9rem;
|
||||
background: var(--nav-bg-alt, #f3f4f6);
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
/* ── Bandeau mode actif ── */
|
||||
|
||||
.mode-banner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 0.75rem;
|
||||
padding: 0.5rem 0.875rem;
|
||||
background: #f0fdf4;
|
||||
border: 1px solid #bbf7d0;
|
||||
border-radius: 8px;
|
||||
font-size: 0.875rem;
|
||||
color: #166534;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.banner-clear {
|
||||
font-size: 0.8rem;
|
||||
font-weight: 600;
|
||||
color: #166534;
|
||||
background: transparent;
|
||||
border: 1px solid #166534;
|
||||
border-radius: 6px;
|
||||
padding: 0.2rem 0.6rem;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.banner-clear:hover {
|
||||
background: #166534;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* ── Boutons matching ── */
|
||||
|
||||
.matching-controls {
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
padding: 12px;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
backdrop-filter: blur(8px);
|
||||
border-top: 1px solid #e5e7eb;
|
||||
margin: 0 -1rem -2rem;
|
||||
}
|
||||
|
||||
.matching-controls button {
|
||||
flex: 1;
|
||||
padding: 12px 8px;
|
||||
border: 1px solid #d0d4dc;
|
||||
border-radius: 8px;
|
||||
background: white;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 2px;
|
||||
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
||||
}
|
||||
|
||||
.matching-controls button .hint {
|
||||
font-size: 11px;
|
||||
color: #6b7280;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.matching-controls button.active {
|
||||
background: var(--mode-color, #1B4436);
|
||||
color: white;
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
.matching-controls button.active .hint {
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.matching-controls button.reset {
|
||||
flex: 0 0 auto;
|
||||
padding: 12px 16px;
|
||||
background: #f3f4f6;
|
||||
border-color: #d0d4dc;
|
||||
color: #374151;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.matching-controls button.reset:hover {
|
||||
background: #e5e7eb;
|
||||
}
|
||||
|
||||
@media (max-width: 500px) {
|
||||
.matching-controls {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
margin: 0 -0.75rem -1.5rem;
|
||||
}
|
||||
|
||||
.matching-controls button.reset {
|
||||
grid-column: span 2;
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Toggle besoins/offres ── */
|
||||
|
||||
.show-labels-bar {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.show-labels-bar button {
|
||||
border: 1px solid #d0d4dc;
|
||||
border-radius: 8px;
|
||||
padding: 8px 16px;
|
||||
background: white;
|
||||
font-size: 13px;
|
||||
cursor: pointer;
|
||||
color: #374151;
|
||||
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
||||
}
|
||||
|
||||
.show-labels-bar button.active {
|
||||
background: #1B4436;
|
||||
color: white;
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
/* ── FAB ajouter ── */
|
||||
|
||||
.fab-add {
|
||||
position: fixed;
|
||||
bottom: 80px;
|
||||
right: 16px;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 50%;
|
||||
background: #1B4436;
|
||||
color: white;
|
||||
font-size: 28px;
|
||||
font-weight: 300;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-decoration: none;
|
||||
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.18);
|
||||
z-index: 100;
|
||||
transition: transform 0.15s, opacity 0.15s;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.fab-add:hover {
|
||||
transform: scale(1.08);
|
||||
opacity: 0.92;
|
||||
}
|
||||
|
||||
/* ── Tabs ── */
|
||||
|
||||
.codev-tabs { display: flex; gap: 4px; background: #f3f4f6; border-radius: 10px; padding: 4px; }
|
||||
.codev-tabs button { flex: 1; padding: 8px 4px; border: none; border-radius: 7px; background: transparent; font-size: 0.875rem; font-weight: 500; cursor: pointer; color: #6b7280; transition: all 0.15s; }
|
||||
.codev-tabs button.active { background: white; color: #1a1a2e; font-weight: 600; box-shadow: 0 1px 3px rgba(0,0,0,0.08); }
|
||||
|
||||
/* ── List view ── */
|
||||
|
||||
.list-view { display: flex; flex-direction: column; gap: 12px; padding: 8px 0; }
|
||||
.list-card { background: white; border: 1px solid #e5e7eb; border-radius: 10px; padding: 14px 16px; display: flex; flex-direction: column; gap: 6px; }
|
||||
.list-card-name { font-weight: 700; font-size: 0.95rem; color: #1a1a2e; }
|
||||
.list-card-text { font-size: 0.875rem; color: #4b5563; margin: 0; line-height: 1.5; }
|
||||
.list-card-link { font-size: 0.8rem; color: #1B4436; text-decoration: none; align-self: flex-end; }
|
||||
.list-empty { text-align: center; color: #6b7280; font-size: 0.9rem; }
|
||||
|
||||
/* ── Bottom sheet ── */
|
||||
|
||||
.bottom-sheet { position: fixed; inset: 0; background: rgba(0,0,0,0.4); z-index: 200; display: flex; align-items: flex-end; }
|
||||
.sheet-content { background: white; border-radius: 16px 16px 0 0; padding: 16px 20px 32px; width: 100%; display: flex; flex-direction: column; gap: 12px; max-height: 80vh; overflow-y: auto; }
|
||||
.sheet-handle { width: 36px; height: 4px; background: #d1d5db; border-radius: 2px; align-self: center; margin-bottom: 4px; }
|
||||
.sheet-name { font-size: 1.1rem; font-weight: 700; color: #1a1a2e; }
|
||||
.sheet-section { display: flex; flex-direction: column; gap: 4px; }
|
||||
.sheet-label { font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: #6b7280; }
|
||||
.sheet-text { font-size: 0.9rem; color: #374151; margin: 0; line-height: 1.5; }
|
||||
.sheet-tags { display: flex; flex-wrap: wrap; gap: 6px; }
|
||||
.sheet-tag { font-size: 0.75rem; background: #f3f4f6; color: #374151; padding: 2px 8px; border-radius: 12px; }
|
||||
.sheet-edit-btn { display: block; text-align: center; background: #1B4436; color: white; border-radius: 8px; padding: 12px; text-decoration: none; font-weight: 600; }
|
||||
.sheet-close { background: transparent; border: 1px solid #d1d5db; border-radius: 8px; padding: 10px; color: #6b7280; cursor: pointer; font-size: 0.875rem; }
|
||||
.sheet-enter-active, .sheet-leave-active { transition: opacity 0.2s; }
|
||||
.sheet-enter-from, .sheet-leave-to { opacity: 0; }
|
||||
|
||||
/* ── QR link ── */
|
||||
|
||||
.qr-link {
|
||||
font-size: 0.75rem;
|
||||
color: #9ca3af;
|
||||
text-decoration: none;
|
||||
align-self: flex-end;
|
||||
}
|
||||
.qr-link:hover { color: #6b7280; }
|
||||
|
||||
/* ── Annuaire ── */
|
||||
|
||||
.annuaire-wrap {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.annuaire-scroll {
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.annuaire-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
min-width: 480px;
|
||||
}
|
||||
|
||||
.annuaire-table thead tr {
|
||||
background: #f9fafb;
|
||||
border-bottom: 2px solid #e5e7eb;
|
||||
}
|
||||
|
||||
.annuaire-table th {
|
||||
padding: 10px 14px;
|
||||
text-align: left;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
color: #6b7280;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.annuaire-table td {
|
||||
padding: 12px 14px;
|
||||
font-size: 0.875rem;
|
||||
color: #374151;
|
||||
vertical-align: top;
|
||||
border-bottom: 1px solid #f3f4f6;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.annuaire-row {
|
||||
cursor: pointer;
|
||||
transition: background 0.12s;
|
||||
}
|
||||
|
||||
.annuaire-row:hover { background: #f9fafb; }
|
||||
.annuaire-row:last-child td { border-bottom: none; }
|
||||
|
||||
.col-nom {
|
||||
position: sticky;
|
||||
left: 0;
|
||||
z-index: 2;
|
||||
background: #ffffff;
|
||||
font-weight: 600;
|
||||
color: #1a1a2e !important;
|
||||
white-space: nowrap;
|
||||
min-width: 80px;
|
||||
border-right: 2px solid #e5e7eb;
|
||||
box-shadow: 2px 0 6px rgba(0,0,0,0.06);
|
||||
}
|
||||
|
||||
.annuaire-row:hover .col-nom { background: #f9fafb; }
|
||||
thead tr .col-nom { background: #f9fafb; z-index: 3; }
|
||||
|
||||
.col-besoin { min-width: 200px; max-width: 260px; }
|
||||
.col-offre { min-width: 200px; max-width: 260px; }
|
||||
|
||||
.annuaire-hint {
|
||||
font-size: 0.75rem;
|
||||
color: #9ca3af;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.col-actions { width: 40px; text-align: center; }
|
||||
.delete-btn {
|
||||
background: transparent;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
color: #ef4444;
|
||||
font-size: 1rem;
|
||||
padding: 4px 8px;
|
||||
border-radius: 4px;
|
||||
transition: background 0.1s;
|
||||
}
|
||||
.delete-btn:hover { background: #fef2f2; }
|
||||
|
||||
/* ── Mobile ── */
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.codev-carto {
|
||||
padding: 1rem 0.75rem 1.5rem;
|
||||
}
|
||||
|
||||
.carto-header h1 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,406 +0,0 @@
|
||||
<template>
|
||||
<div class="codev-demo">
|
||||
|
||||
<header class="demo-header">
|
||||
<span class="demo-badge">DEMO</span>
|
||||
<h1>Co-developpement - exemple</h1>
|
||||
<p class="subtitle">10 personnes fictives. Clique sur un mode pour voir les matchs.</p>
|
||||
</header>
|
||||
|
||||
<div class="codev-tabs">
|
||||
<button :class="{ active: tab === 'carto' }" @click="tab = 'carto'" type="button">Carto</button>
|
||||
<button :class="{ active: tab === 'annuaire' }" @click="tab = 'annuaire'" type="button">Annuaire</button>
|
||||
</div>
|
||||
|
||||
<div v-if="tab === 'carto'">
|
||||
<ClientOnly>
|
||||
<CodevGraph
|
||||
:fiches="fiches"
|
||||
:matches="matches"
|
||||
:mode="mode"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="graph-fallback">Chargement du graphe...</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
|
||||
<!-- Bandeau info mode actif -->
|
||||
<div v-if="mode !== 'none'" class="mode-banner">
|
||||
<span>
|
||||
Mode {{ MODE_LABELS[mode] }} actif -
|
||||
{{ matches.length }} connexion{{ matches.length !== 1 ? 's' : '' }} trouvee{{ matches.length !== 1 ? 's' : '' }}.
|
||||
</span>
|
||||
<button class="banner-clear" @click="setMode('none')" type="button">Effacer</button>
|
||||
</div>
|
||||
|
||||
<!-- Boutons matching -->
|
||||
<div class="matching-controls">
|
||||
<button
|
||||
:class="{ active: mode === 'solution' }"
|
||||
style="--mode-color: #22c55e"
|
||||
@click="setMode('solution')"
|
||||
type="button"
|
||||
>
|
||||
Solution
|
||||
<span class="hint">besoin - offre</span>
|
||||
</button>
|
||||
<button
|
||||
:class="{ active: mode === 'alliance' }"
|
||||
style="--mode-color: #f97316"
|
||||
@click="setMode('alliance')"
|
||||
type="button"
|
||||
>
|
||||
Alliance
|
||||
<span class="hint">besoins partages</span>
|
||||
</button>
|
||||
<button
|
||||
v-if="mode !== 'none'"
|
||||
class="reset"
|
||||
@click="setMode('none')"
|
||||
type="button"
|
||||
>
|
||||
Effacer
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-else-if="tab === 'annuaire'" class="annuaire-wrap">
|
||||
<div class="annuaire-scroll">
|
||||
<table class="annuaire-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-nom">Prénom</th>
|
||||
<th class="col-besoin">Besoin</th>
|
||||
<th class="col-offre">Ce que j'offre</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="f in fiches" :key="f.id" class="annuaire-row">
|
||||
<td class="col-nom">{{ f.nom }}</td>
|
||||
<td class="col-besoin">{{ f.besoin }}</td>
|
||||
<td class="col-offre">{{ f.offre }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { CodevFiche, CodevMatch } from '~/types/codev'
|
||||
import { computeMatches } from '~/utils/codev/matching'
|
||||
|
||||
const tab = ref<'carto' | 'annuaire'>('carto')
|
||||
|
||||
// 10 fiches sans hashtags — textes enrichis pour que scoreDirect discrimine bien les 3 modes :
|
||||
//
|
||||
// Solution (scoreDirect besoinA vs offreB) :
|
||||
// Sami(besoin vendre formation) -> Ines(offre vente formations) ✓
|
||||
// Nael(besoin site web formation) -> Sami(offre developpement web) ✓
|
||||
// Eva(besoin coaching vente) -> Ines(offre vente formations) ✓
|
||||
// Tom(besoin tiers-lieu) -> Zoe(offre facilitation tiers-lieux) ✓
|
||||
//
|
||||
// Alliance (besoins similaires) :
|
||||
// Lea + Maya (coaching, lancer, offre) ✓
|
||||
// Tom + Zoe (tiers-lieu, co-creer) ✓
|
||||
// Sami + Kenji (vendre, formations) ✓
|
||||
//
|
||||
// Surprise (offres similaires) :
|
||||
// Lea + Zoe (facilitation, groupes) ✓
|
||||
// Tom + Roman (architecture) ✓
|
||||
// Ines + Nael (marketing, formations) ✓
|
||||
|
||||
const FICHES_DEMO: CodevFiche[] = [
|
||||
{
|
||||
id: 1, nom: 'Lea',
|
||||
besoin: 'Structurer et lancer mon offre de coaching professionnel cet automne',
|
||||
offre: 'Facilitation de groupes et animation de cercles de parole',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 2, nom: 'Sami',
|
||||
besoin: 'Vendre ma formation en ligne et attirer mes premiers clients',
|
||||
offre: 'Developpement web sur mesure, creation de sites et applications',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:01:00Z',
|
||||
},
|
||||
{
|
||||
id: 3, nom: 'Ines',
|
||||
besoin: 'Ameliorer la facilitation de mes ateliers collaboratifs',
|
||||
offre: 'Vente de formations en ligne et marketing pour formateurs',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:02:00Z',
|
||||
},
|
||||
{
|
||||
id: 4, nom: 'Tom',
|
||||
besoin: 'Trouver des associes pour co-creer un tiers-lieu rural',
|
||||
offre: 'Architecture bioclimatique et eco-construction pour tiers-lieux',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:03:00Z',
|
||||
},
|
||||
{
|
||||
id: 5, nom: 'Maya',
|
||||
besoin: 'Creer et lancer mon offre de coaching en transition professionnelle',
|
||||
offre: 'Accompagnement coaching de carriere et transitions professionnelles',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:04:00Z',
|
||||
},
|
||||
{
|
||||
id: 6, nom: 'Kenji',
|
||||
besoin: 'Apprendre a vendre mes formations sans pression commerciale',
|
||||
offre: 'Photographie professionnelle et direction artistique editoriale',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:05:00Z',
|
||||
},
|
||||
{
|
||||
id: 7, nom: 'Zoe',
|
||||
besoin: 'Co-creer un tiers-lieu avec des porteurs de projet alignes',
|
||||
offre: 'Facilitation de collectifs et animation en intelligence collective',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:06:00Z',
|
||||
},
|
||||
{
|
||||
id: 8, nom: 'Nael',
|
||||
besoin: 'Creer un site web pour presenter et vendre ma formation',
|
||||
offre: 'Strategie marketing digital et lancement de produits en ligne',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:07:00Z',
|
||||
},
|
||||
{
|
||||
id: 9, nom: 'Eva',
|
||||
besoin: 'Lancer mon coaching avec une page de vente qui convertit',
|
||||
offre: 'Ecriture longue forme, articles de fond et tribunes editoriales',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:08:00Z',
|
||||
},
|
||||
{
|
||||
id: 10, nom: 'Roman',
|
||||
besoin: 'Ecrire de meilleurs articles pour mon blog et ma newsletter',
|
||||
offre: 'Architecture technique et plans pour renovation energetique',
|
||||
hashtags: [],
|
||||
created_at: '2026-05-08T10:09:00Z',
|
||||
},
|
||||
]
|
||||
|
||||
const fiches = ref(FICHES_DEMO)
|
||||
const matches = ref<CodevMatch[]>([])
|
||||
const mode = ref<'none' | 'solution' | 'alliance' | 'surprise'>('none')
|
||||
|
||||
const MODE_LABELS: Record<string, string> = {
|
||||
solution: 'Solution',
|
||||
alliance: 'Alliance',
|
||||
surprise: 'Surprise',
|
||||
}
|
||||
|
||||
useHead({ title: 'Demo - Co-developpement' })
|
||||
|
||||
function setMode(newMode: typeof mode.value) {
|
||||
mode.value = newMode
|
||||
if (newMode === 'none') {
|
||||
matches.value = []
|
||||
} else {
|
||||
matches.value = computeMatches(fiches.value, newMode, 0.12)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.codev-demo {
|
||||
min-height: 100vh;
|
||||
background: var(--nav-bg, #fafafa);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 1.25rem 1rem 2rem;
|
||||
gap: 1rem;
|
||||
max-width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* ── En-tete ── */
|
||||
|
||||
.demo-header {
|
||||
text-align: center;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.demo-badge {
|
||||
display: inline-block;
|
||||
background: #f97316;
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.08em;
|
||||
padding: 4px 8px;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.demo-header h1 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text, #1a1a2e);
|
||||
margin: 0 0 0.375rem;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
font-size: 0.9rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ── Fallback ── */
|
||||
|
||||
.graph-fallback {
|
||||
width: 100%;
|
||||
height: 70vh;
|
||||
min-height: 320px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
font-size: 0.9rem;
|
||||
background: var(--nav-bg-alt, #f3f4f6);
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
/* ── Tabs ── */
|
||||
|
||||
.codev-tabs { display: flex; gap: 4px; background: #f3f4f6; border-radius: 10px; padding: 4px; }
|
||||
.codev-tabs button { flex: 1; padding: 8px 4px; border: none; border-radius: 7px; background: transparent; font-size: 0.875rem; font-weight: 500; cursor: pointer; color: #6b7280; transition: all 0.15s; }
|
||||
.codev-tabs button.active { background: white; color: #1a1a2e; font-weight: 600; box-shadow: 0 1px 3px rgba(0,0,0,0.08); }
|
||||
|
||||
/* ── Annuaire ── */
|
||||
|
||||
.annuaire-wrap { display: flex; flex-direction: column; gap: 8px; flex: 1; }
|
||||
.annuaire-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid #e5e7eb; border-radius: 10px; }
|
||||
.annuaire-table { width: 100%; border-collapse: collapse; min-width: 480px; }
|
||||
.annuaire-table thead tr { background: #f9fafb; border-bottom: 2px solid #e5e7eb; }
|
||||
.annuaire-table th { padding: 10px 14px; text-align: left; font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: #6b7280; white-space: nowrap; }
|
||||
.annuaire-table td { padding: 12px 14px; font-size: 0.875rem; color: #374151; vertical-align: top; border-bottom: 1px solid #f3f4f6; line-height: 1.5; }
|
||||
.annuaire-row { transition: background 0.12s; }
|
||||
.annuaire-row:hover { background: #f9fafb; }
|
||||
.annuaire-row:last-child td { border-bottom: none; }
|
||||
.col-nom { position: sticky; left: 0; z-index: 2; background: #ffffff; font-weight: 600; color: #1a1a2e !important; white-space: nowrap; min-width: 80px; border-right: 2px solid #e5e7eb; box-shadow: 2px 0 6px rgba(0,0,0,0.06); }
|
||||
.annuaire-row:hover .col-nom { background: #f9fafb; }
|
||||
thead tr .col-nom { background: #f9fafb; z-index: 3; }
|
||||
.col-besoin { min-width: 200px; max-width: 260px; }
|
||||
.col-offre { min-width: 200px; max-width: 260px; }
|
||||
|
||||
/* ── Bandeau mode actif ── */
|
||||
|
||||
.mode-banner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 0.75rem;
|
||||
padding: 0.5rem 0.875rem;
|
||||
background: #f0fdf4;
|
||||
border: 1px solid #bbf7d0;
|
||||
border-radius: 8px;
|
||||
font-size: 0.875rem;
|
||||
color: #166534;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.banner-clear {
|
||||
font-size: 0.8rem;
|
||||
font-weight: 600;
|
||||
color: #166534;
|
||||
background: transparent;
|
||||
border: 1px solid #166534;
|
||||
border-radius: 6px;
|
||||
padding: 0.2rem 0.6rem;
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.banner-clear:hover {
|
||||
background: #166534;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* ── Boutons matching ── */
|
||||
|
||||
.matching-controls {
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
padding: 12px;
|
||||
background: rgba(255, 255, 255, 0.95);
|
||||
backdrop-filter: blur(8px);
|
||||
border-top: 1px solid #e5e7eb;
|
||||
margin: 0 -1rem -2rem;
|
||||
}
|
||||
|
||||
.matching-controls button {
|
||||
flex: 1;
|
||||
padding: 12px 8px;
|
||||
border: 1px solid #d0d4dc;
|
||||
border-radius: 8px;
|
||||
background: white;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 2px;
|
||||
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
||||
}
|
||||
|
||||
.matching-controls button .hint {
|
||||
font-size: 11px;
|
||||
color: #6b7280;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.matching-controls button.active {
|
||||
background: var(--mode-color, #1B4436);
|
||||
color: white;
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
.matching-controls button.active .hint {
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.matching-controls button.reset {
|
||||
flex: 0 0 auto;
|
||||
padding: 12px 16px;
|
||||
background: #f3f4f6;
|
||||
border-color: #d0d4dc;
|
||||
color: #374151;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.matching-controls button.reset:hover {
|
||||
background: #e5e7eb;
|
||||
}
|
||||
|
||||
@media (max-width: 500px) {
|
||||
.matching-controls {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
margin: 0 -0.75rem -1.5rem;
|
||||
}
|
||||
|
||||
.matching-controls button.reset {
|
||||
grid-column: span 2;
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Mobile ── */
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.codev-demo {
|
||||
padding: 1rem 0.75rem 1.5rem;
|
||||
}
|
||||
|
||||
.demo-header h1 {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,415 +0,0 @@
|
||||
<template>
|
||||
<div class="fiche-page">
|
||||
<div class="fiche-inner">
|
||||
|
||||
<!-- En-tête -->
|
||||
<div class="fiche-header">
|
||||
<NuxtLink to="/codev/carto" class="back-link">← Retour à la carte</NuxtLink>
|
||||
<h1>{{ isEdit ? 'Modifier ma fiche' : 'Ma fiche' }}</h1>
|
||||
<p class="fiche-lead">3 lignes pour te présenter. Le reste se passe entre nous.</p>
|
||||
</div>
|
||||
|
||||
<!-- Formulaire -->
|
||||
<form class="fiche-form" @submit.prevent="submit" novalidate>
|
||||
|
||||
<!-- Nom -->
|
||||
<div class="field-group">
|
||||
<label for="nom">
|
||||
Prénom <span class="required">*</span>
|
||||
</label>
|
||||
<input
|
||||
id="nom"
|
||||
v-model="form.nom"
|
||||
type="text"
|
||||
placeholder="Ex : Camille"
|
||||
required
|
||||
minlength="2"
|
||||
maxlength="50"
|
||||
:disabled="loading"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Besoin -->
|
||||
<div class="field-group">
|
||||
<div class="label-row">
|
||||
<label for="besoin">
|
||||
Mon besoin actuel <span class="required">*</span>
|
||||
</label>
|
||||
<button type="button" class="tooltip-trigger" @click="toggleTip('besoin')" aria-label="C'est quoi un besoin ?">?</button>
|
||||
</div>
|
||||
<details v-if="activeTip === 'besoin'" class="tooltip-block" open>
|
||||
<summary class="sr-only">Aide</summary>
|
||||
<p>Un besoin, c'est ce qui te manque pour avancer. Ca peut etre concret (un coup de main sur un dossier) ou plus large (clarifier ou tu vas). Pas grave si c'est flou - la rencontre IRL aide a le preciser.</p>
|
||||
</details>
|
||||
<textarea
|
||||
id="besoin"
|
||||
v-model="form.besoin"
|
||||
rows="3"
|
||||
placeholder="Ex : J'ai besoin d'aide pour structurer mon offre de prestation"
|
||||
required
|
||||
minlength="5"
|
||||
maxlength="300"
|
||||
:disabled="loading"
|
||||
/>
|
||||
<span class="char-count" :class="{ 'char-warn': form.besoin.length > 260 }">
|
||||
{{ form.besoin.length }}/300
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!-- Offre -->
|
||||
<div class="field-group">
|
||||
<div class="label-row">
|
||||
<label for="offre">
|
||||
Ce que j'offre a la communaute <span class="required">*</span>
|
||||
</label>
|
||||
<button type="button" class="tooltip-trigger" @click="toggleTip('offre')" aria-label="C'est quoi une offre ?">?</button>
|
||||
</div>
|
||||
<details v-if="activeTip === 'offre'" class="tooltip-block" open>
|
||||
<summary class="sr-only">Aide</summary>
|
||||
<p>Une offre, c'est une competence, une experience ou une qualite que tu peux partager. Ce que les autres viennent chercher chez toi naturellement.</p>
|
||||
</details>
|
||||
<textarea
|
||||
id="offre"
|
||||
v-model="form.offre"
|
||||
rows="3"
|
||||
placeholder="Ex : Je peux partager mon expérience en facilitation de groupe"
|
||||
required
|
||||
minlength="5"
|
||||
maxlength="300"
|
||||
:disabled="loading"
|
||||
/>
|
||||
<span class="char-count" :class="{ 'char-warn': form.offre.length > 260 }">
|
||||
{{ form.offre.length }}/300
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!-- Hashtags -->
|
||||
<div class="field-group">
|
||||
<label for="hashtags">
|
||||
Mots-clés
|
||||
<span class="label-hint">(optionnel, 3 max, séparés par des virgules)</span>
|
||||
</label>
|
||||
<input
|
||||
id="hashtags"
|
||||
v-model="form.hashtagsRaw"
|
||||
type="text"
|
||||
placeholder="Ex : business, écriture, écologie"
|
||||
maxlength="120"
|
||||
:disabled="loading"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Erreur serveur -->
|
||||
<div v-if="error" class="server-error" role="alert">
|
||||
{{ error }}
|
||||
</div>
|
||||
|
||||
<!-- Bouton -->
|
||||
<button type="submit" class="submit-btn" :disabled="loading">
|
||||
{{ isEdit ? (loading ? 'Modification...' : 'Enregistrer les modifications') : (loading ? 'Envoi en cours...' : 'Ajouter ma fiche') }}
|
||||
</button>
|
||||
|
||||
<NuxtLink to="/codev/carto" class="skip-link">
|
||||
Voir la carte sans créer de fiche →
|
||||
</NuxtLink>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const route = useRoute()
|
||||
const editId = computed(() => route.query.id ? Number(route.query.id) : null)
|
||||
const isEdit = computed(() => editId.value !== null)
|
||||
|
||||
const form = ref({ nom: '', besoin: '', offre: '', hashtagsRaw: '' })
|
||||
const error = ref('')
|
||||
const loading = ref(false)
|
||||
const activeTip = ref<'besoin' | 'offre' | null>(null)
|
||||
|
||||
useHead({ title: computed(() => isEdit.value ? 'Modifier ma fiche — Co-développement' : 'Ma fiche — Co-développement') })
|
||||
|
||||
onMounted(async () => {
|
||||
if (!isEdit.value) return
|
||||
try {
|
||||
const fiche = await $fetch<any>(`/api/codev/fiches/${editId.value}`)
|
||||
form.value.nom = fiche.nom
|
||||
form.value.besoin = fiche.besoin
|
||||
form.value.offre = fiche.offre
|
||||
form.value.hashtagsRaw = fiche.hashtags.join(', ')
|
||||
} catch {
|
||||
error.value = 'Impossible de charger la fiche, elle a peut-etre ete supprimee.'
|
||||
}
|
||||
})
|
||||
|
||||
function toggleTip(field: 'besoin' | 'offre') {
|
||||
activeTip.value = activeTip.value === field ? null : field
|
||||
}
|
||||
|
||||
async function submit() {
|
||||
error.value = ''
|
||||
loading.value = true
|
||||
try {
|
||||
const hashtags = form.value.hashtagsRaw
|
||||
.split(',')
|
||||
.map((h) => h.trim().toLowerCase().replace(/^#/, ''))
|
||||
.filter(Boolean)
|
||||
.slice(0, 3)
|
||||
|
||||
const payload = {
|
||||
nom: form.value.nom,
|
||||
besoin: form.value.besoin,
|
||||
offre: form.value.offre,
|
||||
hashtags,
|
||||
}
|
||||
|
||||
if (isEdit.value) {
|
||||
await $fetch(`/api/codev/fiches/${editId.value}`, { method: 'PATCH', body: payload })
|
||||
} else {
|
||||
await $fetch('/api/codev/fiches', { method: 'POST', body: payload })
|
||||
}
|
||||
await navigateTo('/codev/carto')
|
||||
} catch (e: any) {
|
||||
error.value = e?.data?.message || e?.statusMessage || 'Erreur, reessaie'
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* ── Layout ── */
|
||||
|
||||
.fiche-page {
|
||||
min-height: 100vh;
|
||||
background: var(--nav-bg, #fafafa);
|
||||
padding: 1.5rem 1rem 4rem;
|
||||
}
|
||||
|
||||
.fiche-inner {
|
||||
max-width: 480px;
|
||||
margin: 0 auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.75rem;
|
||||
}
|
||||
|
||||
/* ── En-tête ── */
|
||||
|
||||
.back-link {
|
||||
display: inline-block;
|
||||
font-size: 0.875rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
text-decoration: none;
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
|
||||
.back-link:hover {
|
||||
color: var(--nav-primary-solid, #1B4436);
|
||||
}
|
||||
|
||||
.fiche-header h1 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text, #1a1a2e);
|
||||
margin: 0 0 0.375rem;
|
||||
}
|
||||
|
||||
.fiche-lead {
|
||||
font-size: 0.9rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
margin: 0;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
/* ── Formulaire ── */
|
||||
|
||||
.fiche-form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.25rem;
|
||||
}
|
||||
|
||||
/* ── Champ ── */
|
||||
|
||||
.field-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.375rem;
|
||||
}
|
||||
|
||||
.field-group label {
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
color: var(--nav-text, #1a1a2e);
|
||||
}
|
||||
|
||||
.label-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.label-hint {
|
||||
font-weight: 400;
|
||||
font-size: 0.8rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
margin-left: 0.25rem;
|
||||
}
|
||||
|
||||
.required {
|
||||
color: #c0392b;
|
||||
}
|
||||
|
||||
.field-group input[type="text"],
|
||||
.field-group input[type="password"],
|
||||
.field-group textarea {
|
||||
width: 100%;
|
||||
padding: 0.75rem 0.875rem;
|
||||
border: 1px solid var(--border-color, #d0d4dc);
|
||||
border-radius: 8px;
|
||||
font-size: 1rem;
|
||||
color: var(--nav-text, #1a1a2e);
|
||||
background: var(--nav-surface, #ffffff);
|
||||
font-family: inherit;
|
||||
transition: border-color 0.15s, box-shadow 0.15s;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.field-group input:focus,
|
||||
.field-group textarea:focus {
|
||||
outline: none;
|
||||
border-color: var(--nav-primary-solid, #1B4436);
|
||||
box-shadow: 0 0 0 2px rgba(27, 68, 54, 0.15);
|
||||
}
|
||||
|
||||
.field-group input:disabled,
|
||||
.field-group textarea:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.field-group textarea {
|
||||
resize: vertical;
|
||||
min-height: 80px;
|
||||
}
|
||||
|
||||
.char-count {
|
||||
font-size: 0.75rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.char-warn {
|
||||
color: #e67e22;
|
||||
}
|
||||
|
||||
/* ── Tooltip ── */
|
||||
|
||||
.tooltip-trigger {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: var(--nav-surface, #ffffff);
|
||||
border: 1px solid var(--border-color, #d0d4dc);
|
||||
border-radius: 50%;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
line-height: 1;
|
||||
flex-shrink: 0;
|
||||
transition: border-color 0.15s, color 0.15s;
|
||||
}
|
||||
|
||||
.tooltip-trigger:hover {
|
||||
border-color: var(--nav-primary-solid, #1B4436);
|
||||
color: var(--nav-primary-solid, #1B4436);
|
||||
}
|
||||
|
||||
.tooltip-block {
|
||||
background: var(--nav-surface, #ffffff);
|
||||
border: 1px solid var(--border-color, #d0d4dc);
|
||||
border-radius: 8px;
|
||||
padding: 0.75rem 0.875rem;
|
||||
font-size: 0.85rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.tooltip-block p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.sr-only {
|
||||
position: absolute;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
padding: 0;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/* ── Erreur serveur ── */
|
||||
|
||||
.server-error {
|
||||
padding: 0.75rem 0.875rem;
|
||||
background: #fdf0ee;
|
||||
border: 1px solid #e74c3c;
|
||||
border-radius: 8px;
|
||||
font-size: 0.875rem;
|
||||
color: #c0392b;
|
||||
}
|
||||
|
||||
/* ── Bouton ── */
|
||||
|
||||
.submit-btn {
|
||||
width: 100%;
|
||||
padding: 0.875rem 1rem;
|
||||
background: var(--nav-primary-solid, #1B4436);
|
||||
color: #ffffff;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
font-family: inherit;
|
||||
transition: opacity 0.15s;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.submit-btn:hover:not(:disabled) {
|
||||
opacity: 0.88;
|
||||
}
|
||||
|
||||
.submit-btn:disabled {
|
||||
opacity: 0.45;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.skip-link {
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: 0.825rem;
|
||||
color: var(--nav-text-muted, #9ca3af);
|
||||
text-decoration: none;
|
||||
margin-top: 0.5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
.skip-link:hover { color: var(--nav-text, #1a1a2e); }
|
||||
|
||||
/* ── Responsive ── */
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.fiche-page {
|
||||
padding: 1.25rem 1rem 3rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,217 +0,0 @@
|
||||
<template>
|
||||
<div class="lock-page">
|
||||
<div class="lock-inner">
|
||||
|
||||
<div class="lock-header">
|
||||
<h1>Co-développement</h1>
|
||||
<p class="lock-subtitle">Entraide entre pairs</p>
|
||||
<p class="lock-intro">Cet espace est un cercle. Pour entrer, il y a un mot.</p>
|
||||
</div>
|
||||
|
||||
<form class="lock-form" @submit.prevent="submit" novalidate>
|
||||
|
||||
<div class="field-group">
|
||||
<input
|
||||
id="password"
|
||||
v-model="password"
|
||||
type="password"
|
||||
placeholder="Mot de passe"
|
||||
autocomplete="current-password"
|
||||
required
|
||||
:disabled="loading"
|
||||
class="lock-input"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div v-if="error" class="lock-error" role="alert">
|
||||
{{ error }}
|
||||
</div>
|
||||
|
||||
<button type="submit" class="lock-btn" :disabled="loading || !password">
|
||||
{{ loading ? 'Vérification...' : 'Entrer' }}
|
||||
</button>
|
||||
|
||||
</form>
|
||||
|
||||
<div class="lock-footer">
|
||||
<NuxtLink to="/codev/demo" class="demo-link">Voir l'exemple →</NuxtLink>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const password = ref('')
|
||||
const error = ref('')
|
||||
const loading = ref(false)
|
||||
|
||||
useHead({ title: 'Co-développement — Entraide entre pairs' })
|
||||
|
||||
async function submit() {
|
||||
error.value = ''
|
||||
loading.value = true
|
||||
try {
|
||||
await $fetch('/api/codev/auth', {
|
||||
method: 'POST',
|
||||
body: { password: password.value },
|
||||
})
|
||||
await navigateTo('/codev/fiche')
|
||||
} catch (e: any) {
|
||||
error.value = e?.statusMessage || 'Mauvais mot de passe'
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* ── Layout ── */
|
||||
|
||||
.lock-page {
|
||||
min-height: 100vh;
|
||||
background: var(--nav-bg, #fafafa);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 1.5rem 1rem;
|
||||
}
|
||||
|
||||
.lock-inner {
|
||||
width: 100%;
|
||||
max-width: 400px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2rem;
|
||||
}
|
||||
|
||||
/* ── En-tête ── */
|
||||
|
||||
.lock-header {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.lock-header h1 {
|
||||
font-size: 1.75rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text, #1a1a2e);
|
||||
margin: 0 0 0.375rem;
|
||||
}
|
||||
|
||||
.lock-subtitle {
|
||||
font-size: 1rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
.lock-intro {
|
||||
font-size: 0.9rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* ── Formulaire ── */
|
||||
|
||||
.lock-form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.875rem;
|
||||
}
|
||||
|
||||
.field-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.lock-input {
|
||||
width: 100%;
|
||||
padding: 0.875rem 1rem;
|
||||
border: 1px solid var(--border-color, #d0d4dc);
|
||||
border-radius: 8px;
|
||||
font-size: 1rem;
|
||||
color: var(--nav-text, #1a1a2e);
|
||||
background: var(--nav-surface, #ffffff);
|
||||
font-family: inherit;
|
||||
text-align: center;
|
||||
letter-spacing: 0.1em;
|
||||
transition: border-color 0.15s, box-shadow 0.15s;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.lock-input:focus {
|
||||
outline: none;
|
||||
border-color: var(--nav-primary-solid, #1B4436);
|
||||
box-shadow: 0 0 0 2px rgba(27, 68, 54, 0.15);
|
||||
}
|
||||
|
||||
.lock-input:disabled {
|
||||
opacity: 0.6;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* ── Erreur ── */
|
||||
|
||||
.lock-error {
|
||||
padding: 0.625rem 0.875rem;
|
||||
background: #fdf0ee;
|
||||
border: 1px solid #e74c3c;
|
||||
border-radius: 8px;
|
||||
font-size: 0.875rem;
|
||||
color: #c0392b;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* ── Bouton ── */
|
||||
|
||||
.lock-btn {
|
||||
width: 100%;
|
||||
padding: 0.875rem 1rem;
|
||||
background: var(--nav-primary-solid, #1B4436);
|
||||
color: #ffffff;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
font-family: inherit;
|
||||
transition: opacity 0.15s;
|
||||
}
|
||||
|
||||
.lock-btn:hover:not(:disabled) {
|
||||
opacity: 0.88;
|
||||
}
|
||||
|
||||
.lock-btn:disabled {
|
||||
opacity: 0.45;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* ── Pied de page ── */
|
||||
|
||||
.lock-footer {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.demo-link {
|
||||
font-size: 0.875rem;
|
||||
color: var(--nav-text-muted, #6b7280);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s;
|
||||
}
|
||||
|
||||
.demo-link:hover {
|
||||
color: var(--nav-primary-solid, #1B4436);
|
||||
}
|
||||
|
||||
/* ── Responsive ── */
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.lock-page {
|
||||
padding: 1.25rem 1rem 2.5rem;
|
||||
align-items: flex-start;
|
||||
padding-top: 3rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,94 +0,0 @@
|
||||
<template>
|
||||
<div class="qr-page">
|
||||
<div class="qr-card">
|
||||
<h1>Co-développement</h1>
|
||||
<p class="qr-subtitle">Scanne pour rejoindre la session</p>
|
||||
|
||||
<img
|
||||
:src="`https://api.qrserver.com/v1/create-qr-code/?size=280x280&data=${encodeURIComponent(APP_URL)}&bgcolor=ffffff&color=1B4436&margin=2`"
|
||||
alt="QR code aep.trans-former.fr/codev"
|
||||
class="qr-img"
|
||||
width="280"
|
||||
height="280"
|
||||
/>
|
||||
|
||||
<p class="qr-url">{{ APP_URL }}</p>
|
||||
<p class="qr-password">Mot de passe : <strong>merci</strong></p>
|
||||
|
||||
<a :href="`https://api.qrserver.com/v1/create-qr-code/?size=600x600&data=${encodeURIComponent(APP_URL)}&bgcolor=ffffff&color=1B4436&margin=2`"
|
||||
download="codev-qr.png"
|
||||
class="qr-download"
|
||||
target="_blank"
|
||||
>
|
||||
Télécharger le QR code
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const APP_URL = 'https://aep.trans-former.fr/codev'
|
||||
useHead({ title: 'QR Code — Co-développement' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.qr-page {
|
||||
min-height: 100vh;
|
||||
background: var(--nav-bg, #fafafa);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 2rem 1rem;
|
||||
}
|
||||
.qr-card {
|
||||
background: white;
|
||||
border-radius: 16px;
|
||||
padding: 2rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
max-width: 360px;
|
||||
width: 100%;
|
||||
box-shadow: 0 4px 24px rgba(0,0,0,0.08);
|
||||
text-align: center;
|
||||
}
|
||||
.qr-card h1 {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
margin: 0;
|
||||
}
|
||||
.qr-subtitle {
|
||||
font-size: 0.9rem;
|
||||
color: #6b7280;
|
||||
margin: 0;
|
||||
}
|
||||
.qr-img {
|
||||
border-radius: 8px;
|
||||
border: 2px solid #e5e7eb;
|
||||
}
|
||||
.qr-url {
|
||||
font-size: 0.8rem;
|
||||
color: #9ca3af;
|
||||
margin: 0;
|
||||
font-family: monospace;
|
||||
}
|
||||
.qr-password {
|
||||
font-size: 0.95rem;
|
||||
color: #374151;
|
||||
margin: 0;
|
||||
}
|
||||
.qr-download {
|
||||
display: inline-block;
|
||||
padding: 10px 20px;
|
||||
background: #1B4436;
|
||||
color: white;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
transition: opacity 0.15s;
|
||||
}
|
||||
.qr-download:hover { opacity: 0.88; }
|
||||
</style>
|
||||
@@ -11,11 +11,7 @@
|
||||
<h1>Proposer une ressource</h1>
|
||||
<p class="contribuer-subtitle">
|
||||
Tu connais une organisation utile aux architectes qui n'est pas encore référencée ?
|
||||
Soumets-la ici — une IA enrichira la fiche et on validera sous 7 jours.
|
||||
</p>
|
||||
<p class="contribuer-hint">
|
||||
Si tu n'as pas le temps de tout remplir, laisse-nous juste le lien — on extraira les infos du site.
|
||||
Mais une description de toi, c'est toujours plus vivant et plus précis.
|
||||
Soumets-la ici — une IA enrichira la fiche et Jules validera sous 7 jours.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -28,6 +24,10 @@
|
||||
Une IA va scraper le site et enrichir la description.
|
||||
Jules (et bientôt une équipe de modération) valide sous 7 jours.
|
||||
</p>
|
||||
<p v-if="trackingUrl" class="success-tracking">
|
||||
Tu peux suivre l'avancement ici :<br />
|
||||
<a :href="trackingUrl" class="tracking-link">{{ trackingUrl }}</a>
|
||||
</p>
|
||||
<button type="button" class="btn-secondary" @click="reset">
|
||||
Proposer une autre fiche
|
||||
</button>
|
||||
@@ -437,14 +437,6 @@ useHead({ title: 'Proposer une ressource — AEP' })
|
||||
font-size: 0.9rem;
|
||||
color: var(--nav-text-muted);
|
||||
line-height: 1.5;
|
||||
margin: 0 0 0.5rem;
|
||||
}
|
||||
|
||||
.contribuer-hint {
|
||||
font-size: 0.82rem;
|
||||
color: var(--nav-text-muted);
|
||||
opacity: 0.75;
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
|
||||
481
pages/index-v1-backup.vue
Normal file
481
pages/index-v1-backup.vue
Normal file
@@ -0,0 +1,481 @@
|
||||
<template>
|
||||
<div class="flex h-full overflow-hidden" style="background: var(--nav-bg);">
|
||||
|
||||
<!-- ═══════════════════════════════════════ SIDEBAR DESKTOP (≥ 1024px) -->
|
||||
<div class="hidden lg:flex w-80 shrink-0 flex-col overflow-hidden">
|
||||
<NavSidebar
|
||||
:search="search"
|
||||
:modeValue="territoireMode"
|
||||
:echelle="echelle"
|
||||
:fonctions="fonctions"
|
||||
:territoire="territoire"
|
||||
:echelleCount="echelleCount"
|
||||
:fonctionCount="fonctionCount"
|
||||
:territoireCount="territoireCount"
|
||||
:resultCount="filtered.length"
|
||||
:orgs="filtered"
|
||||
:selectedId="selectedId"
|
||||
:hasActiveFilters="hasActiveFilters"
|
||||
:pending="pending"
|
||||
@update:search="onSearch"
|
||||
@update:mode="onMode"
|
||||
@update:echelle="onEchelle"
|
||||
@update:fonctions="onFonctions"
|
||||
@update:territoire="onTerritoire"
|
||||
@select-org="onSelectOrg"
|
||||
@hover-org="onHoverOrg"
|
||||
@reset-filters="resetFilters"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════════════════════════════ ZONE CENTRALE (carte) -->
|
||||
<main class="flex-1 flex flex-col overflow-hidden relative">
|
||||
|
||||
<!-- Indicateur source dev -->
|
||||
<div
|
||||
v-if="dataSource === 'seed'"
|
||||
class="absolute top-2 left-2 z-[500] px-2 py-1 rounded text-xs"
|
||||
style="background: var(--nav-accent); color: var(--nav-text);"
|
||||
>
|
||||
Mode dev - données seed
|
||||
</div>
|
||||
|
||||
<!-- ── VUE DESKTOP : Métropole pleine largeur + DOM-TOM row en bas ── -->
|
||||
<div class="hidden lg:flex lg:flex-1 lg:flex-col lg:overflow-hidden">
|
||||
<!-- Carte Métropole — pleine largeur -->
|
||||
<div class="flex flex-col flex-1 overflow-hidden">
|
||||
<div class="relative flex-1" style="min-height: 200px;">
|
||||
<ClientOnly>
|
||||
<NavMap
|
||||
ref="navMapRef"
|
||||
:orgs="metropoleOrgs"
|
||||
:selectedId="selectedId"
|
||||
@select-org="onSelectOrg"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div
|
||||
class="w-full h-full flex items-center justify-center"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text-muted);"
|
||||
>
|
||||
Chargement de la carte…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
<ChatbotPlaceholder @highlightOrgs="onHighlightOrgs" />
|
||||
</div>
|
||||
|
||||
<!-- Bandeau DOM-TOM — row horizontale pleine largeur, hauteur fixe -->
|
||||
<div
|
||||
class="shrink-0"
|
||||
style="height: 140px; border-top: 1px solid var(--nav-bg-alt);"
|
||||
>
|
||||
<ClientOnly>
|
||||
<OutremerMap
|
||||
:orgs="outremerOrgs"
|
||||
:selectedId="selectedId"
|
||||
@select-org="onSelectOrg"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div
|
||||
class="flex items-center justify-center h-full text-sm"
|
||||
style="color: var(--nav-text-muted);"
|
||||
>
|
||||
Chargement…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ── VUE MOBILE : Onglets Métro/Outre-mer + carte pleine hauteur + sheet swipable ── -->
|
||||
|
||||
<!-- Onglets Métropolitain / Outre-mer -->
|
||||
<div class="lg:hidden shrink-0 flex" style="background: var(--nav-surface); border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<button
|
||||
class="flex-1 py-2 text-sm font-medium transition-colors"
|
||||
:style="mobileMapView === 'metropole'
|
||||
? 'color: var(--nav-text); border-bottom: 2px solid var(--nav-primary-solid);'
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="mobileMapView = 'metropole'"
|
||||
>Métropolitain</button>
|
||||
<button
|
||||
class="flex-1 py-2 text-sm font-medium transition-colors"
|
||||
:style="mobileMapView === 'outremer'
|
||||
? 'color: var(--nav-text); border-bottom: 2px solid var(--nav-primary-solid);'
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="mobileMapView = 'outremer'"
|
||||
>Outre-mer</button>
|
||||
</div>
|
||||
|
||||
<div class="lg:hidden flex-1 relative overflow-hidden">
|
||||
|
||||
<!-- Carte Métropole -->
|
||||
<div v-show="mobileMapView === 'metropole'" class="absolute inset-0">
|
||||
<ClientOnly>
|
||||
<NavMap
|
||||
ref="navMapMobileRef"
|
||||
:orgs="metropoleOrgs"
|
||||
:selectedId="selectedId"
|
||||
@select-org="onSelectOrgMobile"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div
|
||||
class="w-full h-full flex items-center justify-center"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text-muted);"
|
||||
>
|
||||
Chargement de la carte…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Carte Outre-mer (scroll vertical, pleine largeur) -->
|
||||
<div v-show="mobileMapView === 'outremer'" class="absolute inset-0 overflow-y-auto" style="background: var(--nav-bg);">
|
||||
<ClientOnly>
|
||||
<OutremerMap
|
||||
:orgs="outremerOrgs"
|
||||
:selectedId="selectedId"
|
||||
@select-org="onSelectOrgMobile"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="flex items-center justify-center h-48" style="color: var(--nav-text-muted);">
|
||||
Chargement…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Bottom sheet swipable (Métropole et Outre-mer) -->
|
||||
<ClientOnly>
|
||||
<MobileSheet :resultCount="filtered.length" :pending="pending">
|
||||
<!-- Barre recherche -->
|
||||
<div class="px-3 pt-2 pb-2" style="border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<label class="mobile-search-label" aria-label="Rechercher une organisation">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="color: var(--nav-text-muted); flex-shrink: 0;">
|
||||
<circle cx="11" cy="11" r="8"/>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"/>
|
||||
</svg>
|
||||
<input
|
||||
v-model="mobileSearch"
|
||||
type="search"
|
||||
placeholder="Rechercher…"
|
||||
class="mobile-search-input"
|
||||
autocomplete="off"
|
||||
@input="onSearch(mobileSearch)"
|
||||
/>
|
||||
<button
|
||||
v-if="mobileSearch"
|
||||
type="button"
|
||||
class="mobile-search-clear"
|
||||
aria-label="Effacer"
|
||||
@click.stop="mobileSearch = ''; onSearch('')"
|
||||
>
|
||||
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- Liste fiches -->
|
||||
<div class="px-3 py-2">
|
||||
<div class="text-xs font-bold uppercase tracking-wide mb-2" style="color: var(--nav-text-muted);">
|
||||
{{ filtered.length }} résultat{{ filtered.length > 1 ? 's' : '' }}
|
||||
</div>
|
||||
<div v-if="pending" class="flex items-center justify-center py-8" style="color: var(--nav-text-muted);">
|
||||
Chargement des fiches…
|
||||
</div>
|
||||
<div v-else-if="filtered.length === 0" class="text-center py-8">
|
||||
<p class="text-sm" style="color: var(--nav-text-muted);">Aucun résultat pour ces filtres.</p>
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
<div
|
||||
v-for="org in filtered"
|
||||
:key="org.Id"
|
||||
class="block rounded-lg p-3 transition-all cursor-pointer"
|
||||
:style="selectedId === org.Id
|
||||
? 'background: var(--nav-bg-alt); border-left: 3px solid var(--nav-accent);'
|
||||
: 'background: var(--nav-surface); border-left: 3px solid transparent;'"
|
||||
@click="onSelectOrgMobile(org.Id)"
|
||||
>
|
||||
<span class="font-semibold text-sm leading-snug" style="color: var(--nav-text);">{{ org.nom }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</MobileSheet>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<!-- ═══════════════════════════════════════ MODAL FICHE (desktop) -->
|
||||
<FicheModal
|
||||
v-model="ficheModalOpen"
|
||||
:orgId="ficheModalId"
|
||||
/>
|
||||
|
||||
<!-- ═══════════════════════════════════════ BOUTON CHATBOT FLOTTANT (mobile) -->
|
||||
<button
|
||||
class="lg:hidden fixed bottom-6 right-4 z-[1000] flex items-center gap-2 px-4 rounded-full shadow-lg"
|
||||
style="
|
||||
height: 48px;
|
||||
background: var(--nav-primary);
|
||||
opacity: 0.92;
|
||||
color: var(--nav-text-on-primary);
|
||||
box-shadow: 0 4px 16px rgba(26,34,56,0.25);
|
||||
font-family: var(--nav-font);
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
"
|
||||
aria-label="Ouvrir l'assistant Chatbot"
|
||||
@click="chatbotOpen = true"
|
||||
>
|
||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
|
||||
</svg>
|
||||
<span>Chatbot</span>
|
||||
</button>
|
||||
|
||||
<!-- ═══════════════════════════════════════ CHATBOT BOTTOM SHEET (mobile) -->
|
||||
<ChatbotSheet
|
||||
:modelValue="chatbotOpen"
|
||||
@update:modelValue="chatbotOpen = $event"
|
||||
@highlightOrgs="onHighlightOrgs"
|
||||
/>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Org } from '~/types/org'
|
||||
|
||||
// ── URL query params sync ─────────────────────────────────────────────────
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
const search = ref<string>((route.query.q as string) ?? '')
|
||||
const echelle = ref<string[]>(
|
||||
route.query.echelle
|
||||
? (route.query.echelle as string).split(',').filter(Boolean)
|
||||
: []
|
||||
)
|
||||
const fonctions = ref<string[]>(
|
||||
route.query.fonctions
|
||||
? (route.query.fonctions as string).split(',').filter(Boolean)
|
||||
: []
|
||||
)
|
||||
const territoire = ref<string | null>((route.query.territoire as string) ?? null)
|
||||
const territoireMode = ref<string>(
|
||||
(route.query.mode as string) === 'outremer' ? 'outremer' : 'metropole'
|
||||
)
|
||||
|
||||
const selectedId = ref<number | null>(null)
|
||||
const chatbotOpen = ref(false)
|
||||
const ficheModalOpen = ref(false)
|
||||
const ficheModalId = ref<number | null>(null)
|
||||
const mobileMapView = ref<'metropole' | 'outremer'>('metropole')
|
||||
let highlightTimer: ReturnType<typeof setTimeout> | null = null
|
||||
const prevSelectedId = ref<number | null>(null)
|
||||
|
||||
function onHighlightOrgs(ids: (number | string)[]) {
|
||||
if (!ids.length) return
|
||||
const firstId = typeof ids[0] === 'string' ? parseInt(ids[0], 10) : ids[0]
|
||||
if (isNaN(firstId)) return
|
||||
prevSelectedId.value = selectedId.value
|
||||
selectedId.value = firstId
|
||||
if (highlightTimer) clearTimeout(highlightTimer)
|
||||
highlightTimer = setTimeout(() => {
|
||||
selectedId.value = prevSelectedId.value
|
||||
prevSelectedId.value = null
|
||||
highlightTimer = null
|
||||
}, 5000)
|
||||
}
|
||||
|
||||
const mobileSearch = ref<string>((route.query.q as string) ?? '')
|
||||
const navMapRef = ref<any>(null)
|
||||
const navMapMobileRef = ref<any>(null)
|
||||
|
||||
function syncUrl() {
|
||||
const q: Record<string, string> = {}
|
||||
if (search.value) q.q = search.value
|
||||
if (echelle.value.length) q.echelle = echelle.value.join(',')
|
||||
if (fonctions.value.length) q.fonctions = fonctions.value.join(',')
|
||||
if (territoire.value) q.territoire = territoire.value
|
||||
if (territoireMode.value === 'outremer') q.mode = 'outremer'
|
||||
router.replace({ query: Object.keys(q).length ? q : undefined })
|
||||
}
|
||||
|
||||
function storeFiltersForBack() {
|
||||
if (typeof window === 'undefined') return
|
||||
const q: Record<string, string> = {}
|
||||
if (search.value) q.q = search.value
|
||||
if (echelle.value.length) q.echelle = echelle.value.join(',')
|
||||
if (fonctions.value.length) q.fonctions = fonctions.value.join(',')
|
||||
if (territoire.value) q.territoire = territoire.value
|
||||
if (territoireMode.value === 'outremer') q.mode = 'outremer'
|
||||
const qs = new URLSearchParams(q).toString()
|
||||
sessionStorage.setItem('nav_back_filters', qs)
|
||||
}
|
||||
|
||||
function onSearch(v: string) { search.value = v; syncUrl(); storeFiltersForBack() }
|
||||
function onMode(v: string) { territoireMode.value = v; syncUrl(); storeFiltersForBack() }
|
||||
function onEchelle(v: string[]) { echelle.value = v; syncUrl(); storeFiltersForBack() }
|
||||
function onFonctions(v: string[]) { fonctions.value = v; syncUrl(); storeFiltersForBack() }
|
||||
function onTerritoire(v: string | null) { territoire.value = v; syncUrl(); storeFiltersForBack() }
|
||||
|
||||
function onSelectOrg(id: number) {
|
||||
selectedId.value = selectedId.value === id ? null : id
|
||||
if (typeof window !== 'undefined' && window.innerWidth >= 1024) {
|
||||
ficheModalId.value = id
|
||||
ficheModalOpen.value = true
|
||||
}
|
||||
}
|
||||
|
||||
function onSelectOrgMobile(id: number) {
|
||||
selectedId.value = id
|
||||
storeFiltersForBack()
|
||||
router.push(`/fiche/${id}`)
|
||||
}
|
||||
|
||||
function onHoverOrg(id: number | null) {
|
||||
if (id !== null) selectedId.value = id
|
||||
}
|
||||
|
||||
const hasActiveFilters = computed(() =>
|
||||
!!search.value || echelle.value.length > 0 || fonctions.value.length > 0 || !!territoire.value
|
||||
)
|
||||
|
||||
function resetFilters() {
|
||||
search.value = ''
|
||||
echelle.value = []
|
||||
fonctions.value = []
|
||||
territoire.value = null
|
||||
router.replace({ query: undefined })
|
||||
}
|
||||
|
||||
function toggleEchelle(opt: string) {
|
||||
if (echelle.value.includes(opt)) {
|
||||
onEchelle(echelle.value.filter(v => v !== opt))
|
||||
} else {
|
||||
onEchelle([...echelle.value, opt])
|
||||
}
|
||||
}
|
||||
|
||||
function toggleFonction(fn: string) {
|
||||
if (fonctions.value.includes(fn)) {
|
||||
onFonctions(fonctions.value.filter(f => f !== fn))
|
||||
} else {
|
||||
onFonctions([...fonctions.value, fn])
|
||||
}
|
||||
}
|
||||
|
||||
watch(() => route.query.q, (v) => {
|
||||
search.value = (v as string) ?? ''
|
||||
})
|
||||
|
||||
// ── Données ───────────────────────────────────────────────────────────────
|
||||
const { data, pending, error } = await useFetch<{ list: Org[]; source: string }>('/api/organisations')
|
||||
|
||||
const orgs = computed<Org[]>(() => data.value?.list ?? [])
|
||||
const dataSource = computed(() => data.value?.source ?? 'nocodb')
|
||||
|
||||
watch(() => route.query.random, (v) => {
|
||||
if (v === '1' && orgs.value.length > 0) {
|
||||
const randomOrg = orgs.value[Math.floor(Math.random() * orgs.value.length)]
|
||||
router.replace({ path: `/fiche/${randomOrg.Id}` })
|
||||
}
|
||||
})
|
||||
|
||||
// ── Filtrage côté client ──────────────────────────────────────────────────
|
||||
const filtered = computed<Org[]>(() => {
|
||||
let result = orgs.value
|
||||
if (search.value.trim()) {
|
||||
const q = search.value.toLowerCase()
|
||||
result = result.filter(
|
||||
(o) => o.nom?.toLowerCase().includes(q) || o.localisation_ville?.toLowerCase().includes(q)
|
||||
)
|
||||
}
|
||||
if (echelle.value.length) {
|
||||
result = result.filter((o) => o.echelle && echelle.value.includes(o.echelle))
|
||||
}
|
||||
if (fonctions.value.length) {
|
||||
result = result.filter((o) => {
|
||||
const orgFns = (o.tags_fonction ?? '').split(',').map((f) => f.trim()).filter(Boolean)
|
||||
return fonctions.value.some((fn) => orgFns.includes(fn))
|
||||
})
|
||||
const n = fonctions.value.length
|
||||
const score = (o: Org) =>
|
||||
fonctions.value.reduce((s, fn, i) => {
|
||||
const fns = (o.tags_fonction ?? '').split(',').map((f) => f.trim()).filter(Boolean)
|
||||
return s + (fns.includes(fn) ? (n - i) : 0)
|
||||
}, 0)
|
||||
result = [...result].sort((a, b) => score(b) - score(a))
|
||||
}
|
||||
if (territoire.value) {
|
||||
result = result.filter((o) => o.territoire === territoire.value)
|
||||
}
|
||||
return result
|
||||
})
|
||||
|
||||
const DOM_TOM = ['Guadeloupe', 'Martinique', 'Guyane', 'La Réunion', 'Mayotte']
|
||||
const DOM_TOM_LIST = DOM_TOM
|
||||
|
||||
const metropoleOrgs = computed<Org[]>(() =>
|
||||
filtered.value.filter(o => !o.territoire || !DOM_TOM.includes(o.territoire))
|
||||
)
|
||||
|
||||
const outremerOrgs = computed<Org[]>(() => {
|
||||
if (territoire.value && DOM_TOM.includes(territoire.value)) {
|
||||
return filtered.value.filter(o => o.territoire === territoire.value)
|
||||
}
|
||||
return filtered.value.filter(o => o.territoire && DOM_TOM.includes(o.territoire))
|
||||
})
|
||||
|
||||
const outremerCountByDom = computed<Record<string, number>>(() => {
|
||||
const counts: Record<string, number> = {}
|
||||
DOM_TOM.forEach(d => { counts[d] = 0 })
|
||||
filtered.value.forEach(o => {
|
||||
if (o.territoire && DOM_TOM.includes(o.territoire)) {
|
||||
counts[o.territoire] = (counts[o.territoire] ?? 0) + 1
|
||||
}
|
||||
})
|
||||
return counts
|
||||
})
|
||||
|
||||
const ECHELLES = ['National', 'Régional', 'Local'] as const
|
||||
const ECHELLE_LABELS: Record<string, string> = { National: 'Nat', Régional: 'Rég', Local: 'Loc' }
|
||||
const FONCTIONS = ['Juridique', 'Technique', 'Économique', 'Administratif', 'Chantier', 'Comptabilité', 'Développement', 'Formation', "Gestion d'agence", 'Santé mentale'] as const
|
||||
const TERRITOIRES = ['Métropole', 'Guadeloupe', 'Martinique', 'Guyane', 'La Réunion', 'Mayotte']
|
||||
|
||||
const echelleCount = computed<Record<string, number>>(() => {
|
||||
const counts: Record<string, number> = {}
|
||||
ECHELLES.forEach((e) => { counts[e] = 0 })
|
||||
orgs.value.forEach((o) => { if (o.echelle) counts[o.echelle] = (counts[o.echelle] ?? 0) + 1 })
|
||||
return counts
|
||||
})
|
||||
|
||||
const fonctionCount = computed<Record<string, number>>(() => {
|
||||
const counts: Record<string, number> = {}
|
||||
FONCTIONS.forEach((f) => { counts[f] = 0 })
|
||||
orgs.value.forEach((o) => {
|
||||
const fns = (o.tags_fonction ?? '').split(',').map((f) => f.trim()).filter(Boolean)
|
||||
fns.forEach((fn) => { counts[fn] = (counts[fn] ?? 0) + 1 })
|
||||
})
|
||||
return counts
|
||||
})
|
||||
|
||||
const territoireCount = computed<Record<string, number>>(() => {
|
||||
const counts: Record<string, number> = {}
|
||||
TERRITOIRES.forEach((t) => { counts[t] = 0 })
|
||||
orgs.value.forEach((o) => { if (o.territoire) counts[o.territoire] = (counts[o.territoire] ?? 0) + 1 })
|
||||
counts['Métropole'] = orgs.value.filter(o => !o.territoire || !DOM_TOM.includes(o.territoire)).length
|
||||
return counts
|
||||
})
|
||||
|
||||
function fonctionsList(org: Org): string[] {
|
||||
return (org.tags_fonction ?? '').split(',').map((f) => f.trim()).filter(Boolean).slice(0, 3)
|
||||
}
|
||||
|
||||
useHead({ title: "AEP - Cartographie de l'écologie politique architecturale" })
|
||||
</script>
|
||||
747
pages/index.vue
747
pages/index.vue
@@ -1,48 +1,111 @@
|
||||
<template>
|
||||
<div class="flex h-full overflow-hidden" style="background: var(--nav-bg);">
|
||||
|
||||
<!-- ═══════════════════════════════════════ SIDEBAR DESKTOP (≥ 1024px) -->
|
||||
<div class="hidden lg:flex w-80 shrink-0 flex-col overflow-hidden">
|
||||
<NavSidebar
|
||||
:search="search"
|
||||
:modeValue="territoireMode"
|
||||
:echelle="echelle"
|
||||
:fonctions="fonctions"
|
||||
:territoire="territoire"
|
||||
:echelleCount="echelleCount"
|
||||
:fonctionCount="fonctionCount"
|
||||
:territoireCount="territoireCount"
|
||||
:resultCount="filtered.length"
|
||||
:orgs="filtered"
|
||||
:selectedId="selectedId"
|
||||
:hasActiveFilters="hasActiveFilters"
|
||||
:pending="pending"
|
||||
@update:search="onSearch"
|
||||
@update:mode="onMode"
|
||||
@update:echelle="onEchelle"
|
||||
@update:fonctions="onFonctions"
|
||||
@update:territoire="onTerritoire"
|
||||
@select-org="onSelectOrg"
|
||||
@hover-org="onHoverOrg"
|
||||
@reset-filters="resetFilters"
|
||||
<!-- ═══════════════════════════════════════ SIDEBAR DESKTOP (>= 1024px) -->
|
||||
<div class="hidden lg:block overflow-y-auto" style="width: 320px; min-width: 320px; flex-shrink: 0; border-right: 1px solid var(--nav-bg-alt); height: 100%;">
|
||||
|
||||
<!-- IntentionBanner s'auto-affiche via Teleport (overlay plein ecran) -->
|
||||
<IntentionBanner />
|
||||
|
||||
<!-- Filtres familles + hashtags -->
|
||||
<HashtagFilter
|
||||
:allHashtags="allHashtags"
|
||||
:selectedHashtags="selectedHashtags"
|
||||
:selectedFamille="selectedFamille"
|
||||
@update:selectedHashtags="selectedHashtags = $event"
|
||||
@update:selectedFamille="selectedFamille = $event"
|
||||
/>
|
||||
|
||||
<!-- Separateur -->
|
||||
<div style="height: 1px; background: var(--nav-bg-alt);"></div>
|
||||
|
||||
<!-- Barre de recherche -->
|
||||
<div class="px-3 py-2" style="border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<label class="sidebar-search-label" aria-label="Rechercher une structure">
|
||||
<svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="sidebar-search-icon">
|
||||
<circle cx="11" cy="11" r="8"/>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"/>
|
||||
</svg>
|
||||
<input
|
||||
v-model="search"
|
||||
type="search"
|
||||
placeholder="Rechercher une structure..."
|
||||
class="sidebar-search-input"
|
||||
autocomplete="off"
|
||||
/>
|
||||
<button
|
||||
v-if="search"
|
||||
type="button"
|
||||
class="sidebar-search-clear"
|
||||
aria-label="Effacer"
|
||||
@click.stop="search = ''"
|
||||
>
|
||||
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- Header compteur + reset -->
|
||||
<div class="flex items-center justify-between px-4 py-2" style="border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<span class="text-xs font-bold uppercase tracking-widest" style="color: var(--nav-text-muted);">
|
||||
{{ filtered.length }} structure{{ filtered.length > 1 ? 's' : '' }}
|
||||
</span>
|
||||
<button
|
||||
v-if="hasActiveFilters"
|
||||
@click="resetFilters"
|
||||
class="text-xs underline hover:opacity-70"
|
||||
style="color: var(--nav-text-muted);"
|
||||
>Effacer les filtres</button>
|
||||
</div>
|
||||
|
||||
<!-- Liste fiches (sidebar entiere scroll - pas de scroll interne) -->
|
||||
<div class="px-3 py-2 space-y-1.5">
|
||||
<div v-if="pending" class="flex items-center justify-center py-8" style="color: var(--nav-text-muted);">
|
||||
Chargement...
|
||||
</div>
|
||||
<div v-else-if="filtered.length === 0" class="text-center py-8">
|
||||
<p class="text-xs" style="color: var(--nav-text-muted);">Aucun résultat</p>
|
||||
</div>
|
||||
<div
|
||||
v-for="structure in filtered"
|
||||
:key="structure.id"
|
||||
class="rounded-lg px-3 py-2 cursor-pointer transition-all"
|
||||
:style="selectedId === structure.id
|
||||
? `background: var(--nav-bg-alt); border-left: 3px solid ${familleColor(structure.famille_principale)}; padding-left: 9px;`
|
||||
: 'background: var(--nav-bg); border-left: 3px solid transparent; padding-left: 9px;'"
|
||||
@click="onSelectStructure(structure.id)"
|
||||
@mouseenter="hoveredId = structure.id"
|
||||
@mouseleave="hoveredId = null"
|
||||
>
|
||||
<div class="flex items-start justify-between gap-1.5">
|
||||
<span class="font-semibold text-sm leading-snug" style="color: var(--nav-text);">{{ structure.nom }}</span>
|
||||
<span
|
||||
class="shrink-0 w-2.5 h-2.5 rounded-full mt-1"
|
||||
:style="`background: ${familleColor(structure.famille_principale)};`"
|
||||
/>
|
||||
</div>
|
||||
<div class="mt-0.5 text-xs" style="color: var(--nav-text-muted);">{{ structure.type_principal }} - {{ structure.ville }}</div>
|
||||
<div v-if="structure.hashtags.length" class="mt-1 flex flex-wrap gap-1">
|
||||
<span
|
||||
v-for="tag in structure.hashtags.slice(0, 2)"
|
||||
:key="tag"
|
||||
class="text-xs"
|
||||
style="color: var(--nav-text-muted);"
|
||||
>{{ tag }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════════════════════════════ ZONE CENTRALE (carte) -->
|
||||
<main class="flex-1 flex flex-col overflow-hidden relative">
|
||||
|
||||
<!-- Indicateur source dev -->
|
||||
<div
|
||||
v-if="dataSource === 'seed'"
|
||||
class="absolute top-2 left-2 z-[500] px-2 py-1 rounded text-xs"
|
||||
style="background: var(--nav-accent); color: var(--nav-text);"
|
||||
>
|
||||
Mode dev — données seed
|
||||
</div>
|
||||
|
||||
<!-- ── VUE DESKTOP : Onglets Métropole / Outre-mer ── -->
|
||||
<!-- ── VUE DESKTOP : Onglets Métro/Outre-mer ── -->
|
||||
<div class="hidden lg:flex lg:flex-1 lg:flex-col lg:overflow-hidden">
|
||||
<!-- Barre onglets desktop -->
|
||||
<!-- Onglets desktop -->
|
||||
<div class="shrink-0 flex" style="background: var(--nav-surface); border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<button
|
||||
class="px-5 py-2 text-sm font-medium transition-colors"
|
||||
@@ -58,47 +121,82 @@
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="desktopMapView = 'outremer'"
|
||||
>Outre-mer</button>
|
||||
<button
|
||||
class="px-5 py-2 text-sm font-medium transition-colors"
|
||||
:style="desktopMapView === 'graphe'
|
||||
? 'color: var(--nav-text); border-bottom: 2px solid var(--nav-primary-solid);'
|
||||
: 'color: var(--nav-text-muted); border-bottom: 2px solid transparent;'"
|
||||
@click="desktopMapView = 'graphe'"
|
||||
>Vue graphique</button>
|
||||
</div>
|
||||
|
||||
<!-- Carte Métropole desktop -->
|
||||
<div v-show="desktopMapView === 'metropole'" class="flex-1 flex flex-col overflow-hidden">
|
||||
<div class="relative flex-1" style="min-height: 200px;">
|
||||
<ClientOnly>
|
||||
<NavMap
|
||||
<NavMapV2
|
||||
ref="navMapRef"
|
||||
:orgs="metropoleOrgs"
|
||||
:structures="metropoleStructures"
|
||||
:selectedId="selectedId"
|
||||
@select-org="onSelectOrg"
|
||||
@select-structure="onSelectStructure"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="w-full h-full flex items-center justify-center" style="background: var(--nav-bg-alt); color: var(--nav-text-muted);">Chargement de la carte…</div>
|
||||
<div
|
||||
class="w-full h-full flex items-center justify-center"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text-muted);"
|
||||
>
|
||||
Chargement de la carte…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
<ChatbotPlaceholder @highlightOrgs="onHighlightOrgs" />
|
||||
<ChatbotPlaceholder
|
||||
@highlightOrgs="() => {}"
|
||||
@applyHashtag="(tag) => { if (!selectedHashtags.includes(tag)) selectedHashtags = [...selectedHashtags, tag] }"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Carte Outre-mer desktop -->
|
||||
<div v-show="desktopMapView === 'outremer'" class="flex-1 flex flex-col overflow-hidden">
|
||||
<div class="flex-1 overflow-y-auto">
|
||||
<div v-show="desktopMapView === 'outremer'" class="flex-1 overflow-y-auto" style="background: var(--nav-bg);">
|
||||
<ClientOnly>
|
||||
<OutremerMap
|
||||
:orgs="outremerOrgsLegacy"
|
||||
:selectedId="selectedIdLegacyNum"
|
||||
@select-org="() => {}"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="flex items-center justify-center h-full text-sm" style="color: var(--nav-text-muted);">
|
||||
Chargement…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Vue graphique desktop -->
|
||||
<div v-show="desktopMapView === 'graphe'" class="flex-1 overflow-hidden flex flex-col">
|
||||
<div class="flex-1 overflow-hidden relative">
|
||||
<ClientOnly>
|
||||
<OutremerMap
|
||||
:orgs="outremerOrgs"
|
||||
:selectedId="selectedId"
|
||||
@select-org="onSelectOrg"
|
||||
<GraphView
|
||||
:data="bifurcationData"
|
||||
:allHashtags="allHashtags"
|
||||
:active="desktopMapView === 'graphe'"
|
||||
@select-structure="onSelectStructure"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="flex items-center justify-center h-full text-sm" style="color: var(--nav-text-muted);">Chargement…</div>
|
||||
<div class="flex items-center justify-center h-full" style="color: var(--nav-text-muted);">
|
||||
Chargement du graphe...
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
<ChatbotPlaceholder @highlightOrgs="onHighlightOrgs" />
|
||||
<ChatbotPlaceholder
|
||||
@highlightOrgs="() => {}"
|
||||
@applyHashtag="(tag) => { if (!selectedHashtags.includes(tag)) selectedHashtags = [...selectedHashtags, tag] }"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ── VUE MOBILE : Onglets Métro/Outre-mer + carte pleine hauteur + sheet swipable ── -->
|
||||
|
||||
<!-- Onglets Métropolitain / Outre-mer -->
|
||||
<!-- ── VUE MOBILE : Onglets Métro/Outre-mer + sheet swipable ── -->
|
||||
<div class="lg:hidden shrink-0 flex" style="background: var(--nav-surface); border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<button
|
||||
class="flex-1 py-2 text-sm font-medium transition-colors"
|
||||
@@ -117,34 +215,30 @@
|
||||
</div>
|
||||
|
||||
<div class="lg:hidden flex-1 relative overflow-hidden">
|
||||
|
||||
<!-- Carte Métropole -->
|
||||
<!-- Carte mobile Métropole -->
|
||||
<div v-show="mobileMapView === 'metropole'" class="absolute inset-0">
|
||||
<ClientOnly>
|
||||
<NavMap
|
||||
<NavMapV2
|
||||
ref="navMapMobileRef"
|
||||
:orgs="metropoleOrgs"
|
||||
:structures="metropoleStructures"
|
||||
:selectedId="selectedId"
|
||||
@select-org="onSelectOrgMobile"
|
||||
@select-structure="onSelectStructureMobile"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div
|
||||
class="w-full h-full flex items-center justify-center"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text-muted);"
|
||||
>
|
||||
<div class="w-full h-full flex items-center justify-center" style="background: var(--nav-bg-alt); color: var(--nav-text-muted);">
|
||||
Chargement de la carte…
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Carte Outre-mer (scroll vertical, pleine largeur) -->
|
||||
<!-- Carte mobile Outre-mer -->
|
||||
<div v-show="mobileMapView === 'outremer'" class="absolute inset-0 overflow-y-auto" style="background: var(--nav-bg);">
|
||||
<ClientOnly>
|
||||
<OutremerMap
|
||||
:orgs="outremerOrgs"
|
||||
:selectedId="selectedId"
|
||||
@select-org="onSelectOrgMobile"
|
||||
:orgs="outremerOrgsLegacy"
|
||||
:selectedId="selectedIdLegacyNum"
|
||||
@select-org="() => {}"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="flex items-center justify-center h-48" style="color: var(--nav-text-muted);">
|
||||
@@ -154,90 +248,65 @@
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Bottom sheet swipable (Métropole et Outre-mer) -->
|
||||
<!-- Bottom sheet swipable -->
|
||||
<ClientOnly>
|
||||
<MobileSheet :resultCount="filtered.length" :pending="pending">
|
||||
<!-- Barre recherche -->
|
||||
<!-- Bandeau intention mobile -->
|
||||
<div class="px-3 py-2" style="background: var(--bifurc-banner-bg, #faf8f5); border-bottom: 1px solid var(--bifurc-banner-border, #e0d8cc);">
|
||||
<p class="text-xs leading-relaxed" style="color: var(--bifurc-banner-text, #2c2416); margin: 0;">
|
||||
120 réseaux, collectifs et agences où des pensées écologiques deviennent des pratiques d'architecture.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Filtres hashtags mobile -->
|
||||
<div class="px-3 py-2" style="border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<HashtagFilter
|
||||
:allHashtags="allHashtags"
|
||||
:selectedHashtags="selectedHashtags"
|
||||
:selectedFamille="selectedFamille"
|
||||
@update:selectedHashtags="selectedHashtags = $event"
|
||||
@update:selectedFamille="selectedFamille = $event"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Barre recherche mobile -->
|
||||
<div class="px-3 pt-2 pb-2" style="border-bottom: 1px solid var(--nav-bg-alt);">
|
||||
<label class="mobile-search-label" aria-label="Rechercher une organisation">
|
||||
<label class="mobile-search-label" aria-label="Rechercher une structure">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="color: var(--nav-text-muted); flex-shrink: 0;">
|
||||
<circle cx="11" cy="11" r="8"/>
|
||||
<line x1="21" y1="21" x2="16.65" y2="16.65"/>
|
||||
</svg>
|
||||
<input
|
||||
v-model="mobileSearch"
|
||||
v-model="search"
|
||||
type="search"
|
||||
placeholder="Rechercher…"
|
||||
class="mobile-search-input"
|
||||
autocomplete="off"
|
||||
@input="onSearch(mobileSearch)"
|
||||
/>
|
||||
<button
|
||||
v-if="mobileSearch"
|
||||
v-if="search"
|
||||
type="button"
|
||||
class="mobile-search-clear"
|
||||
aria-label="Effacer"
|
||||
@click.stop="mobileSearch = ''; onSearch('')"
|
||||
@click.stop="search = ''"
|
||||
>
|
||||
<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
</label>
|
||||
|
||||
<!-- Filtres ÉCHELLE — chips style FONCTION -->
|
||||
<div class="mt-2">
|
||||
<span class="text-xs font-bold uppercase tracking-wide block mb-1" style="color: var(--nav-text-muted);">ÉCHELLE</span>
|
||||
<div class="flex flex-wrap gap-1">
|
||||
<span
|
||||
v-for="opt in ECHELLES"
|
||||
:key="opt"
|
||||
class="cursor-pointer px-2 py-0.5 rounded-full text-xs transition-all"
|
||||
:style="echelle.includes(opt)
|
||||
? 'background: var(--nav-primary); color: var(--nav-text-on-primary); font-weight: 600;'
|
||||
: 'background: var(--nav-bg-alt); color: var(--nav-text-muted);'"
|
||||
@click="toggleEchelle(opt)"
|
||||
>{{ opt }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Filtres FONCTION — chips flex-wrap + toggle collapse -->
|
||||
<div class="mt-2">
|
||||
<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px;">
|
||||
<span class="text-xs font-bold uppercase tracking-wide" style="color: var(--nav-text-muted);">
|
||||
FONCTION
|
||||
<span v-if="fonctions.length" style="font-weight: 400; text-transform: none; letter-spacing: 0; font-size: 0.65rem; margin-left: 4px;">({{ fonctions.length }} active{{ fonctions.length > 1 ? 's' : '' }})</span>
|
||||
</span>
|
||||
<button
|
||||
@click="mobileFonctionsOpen = !mobileFonctionsOpen"
|
||||
style="font-size: 0.65rem; color: var(--nav-text-muted); background: none; border: none; cursor: pointer; text-decoration: underline; padding: 0; white-space: nowrap;"
|
||||
>{{ mobileFonctionsOpen || fonctions.length ? (mobileFonctionsOpen ? 'Replier' : 'Afficher') : 'Fonctions (' + FONCTIONS.length + ')' }}</button>
|
||||
</div>
|
||||
<div v-if="mobileFonctionsOpen || fonctions.length" class="flex flex-wrap gap-1">
|
||||
<span
|
||||
v-for="fn in FONCTIONS"
|
||||
:key="fn"
|
||||
class="cursor-pointer px-2 py-0.5 rounded-full text-xs transition-all"
|
||||
:style="fonctions.includes(fn)
|
||||
? 'background: var(--nav-primary); color: var(--nav-text-on-primary); font-weight: 600;'
|
||||
: 'background: var(--nav-bg-alt); color: var(--nav-text-muted);'"
|
||||
@click="toggleFonction(fn)"
|
||||
>{{ fn }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
v-if="hasActiveFilters"
|
||||
@click="resetFilters"
|
||||
class="mt-2 text-xs"
|
||||
class="mt-1 text-xs"
|
||||
style="color: var(--nav-text-muted); text-decoration: underline;"
|
||||
>✕ Effacer les filtres</button>
|
||||
>Effacer les filtres</button>
|
||||
</div>
|
||||
|
||||
<!-- Compteur + Liste fiches -->
|
||||
<!-- Liste fiches mobile -->
|
||||
<div class="px-3 py-2">
|
||||
<div class="text-xs font-bold uppercase tracking-wide mb-2" style="color: var(--nav-text-muted);">
|
||||
{{ filtered.length }} résultat{{ filtered.length > 1 ? 's' : '' }}
|
||||
{{ filtered.length }} structure{{ filtered.length > 1 ? 's' : '' }}
|
||||
</div>
|
||||
<div v-if="pending" class="flex items-center justify-center py-8" style="color: var(--nav-text-muted);">
|
||||
Chargement des fiches…
|
||||
@@ -250,46 +319,36 @@
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
<div
|
||||
v-for="org in filtered"
|
||||
:key="org.Id"
|
||||
v-for="structure in filtered"
|
||||
:key="structure.id"
|
||||
class="block rounded-lg p-3 transition-all cursor-pointer"
|
||||
:style="selectedId === org.Id
|
||||
? 'background: var(--nav-bg-alt); border-left: 3px solid var(--nav-accent);'
|
||||
:style="selectedId === structure.id
|
||||
? `background: var(--nav-bg-alt); border-left: 3px solid ${familleColor(structure.famille_principale)};`
|
||||
: 'background: var(--nav-surface); border-left: 3px solid transparent;'"
|
||||
@click="onSelectOrgMobile(org.Id)"
|
||||
@click="onSelectStructureMobile(structure.id)"
|
||||
>
|
||||
<div class="flex items-start justify-between gap-2">
|
||||
<span class="font-semibold text-sm leading-snug" style="color: var(--nav-text);">{{ org.nom }}</span>
|
||||
<span class="font-semibold text-sm leading-snug" style="color: var(--nav-text);">{{ structure.nom }}</span>
|
||||
<span
|
||||
v-if="org.echelle"
|
||||
class="shrink-0 px-2 py-0.5 rounded-full text-xs font-medium"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text-muted);"
|
||||
>{{ org.echelle }}</span>
|
||||
</div>
|
||||
<div v-if="fonctionsList(org).length" class="mt-1 flex flex-wrap gap-1">
|
||||
<span
|
||||
v-for="fn in fonctionsList(org)"
|
||||
:key="fn"
|
||||
class="px-1.5 py-0.5 rounded text-xs"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text-muted);"
|
||||
>{{ fn }}</span>
|
||||
</div>
|
||||
<div v-if="org.localisation_ville" class="mt-1 text-xs" style="color: var(--nav-text-muted);">
|
||||
{{ org.localisation_ville }}
|
||||
class="shrink-0 w-2.5 h-2.5 rounded-full mt-1"
|
||||
:style="`background: ${familleColor(structure.famille_principale)};`"
|
||||
/>
|
||||
</div>
|
||||
<div class="mt-0.5 text-xs" style="color: var(--nav-text-muted);">{{ structure.type_principal }} · {{ structure.ville }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</MobileSheet>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<!-- ═══════════════════════════════════════ MODAL FICHE (desktop) -->
|
||||
<FicheModal
|
||||
<!-- ═══════════════════════════════════════ MODAL FICHE V2 (desktop) -->
|
||||
<FicheModalV2
|
||||
v-model="ficheModalOpen"
|
||||
:orgId="ficheModalId"
|
||||
:structureId="ficheModalId"
|
||||
:data="bifurcationData"
|
||||
@update:structureId="ficheModalId = $event"
|
||||
/>
|
||||
|
||||
<!-- ═══════════════════════════════════════ BOUTON CHATBOT FLOTTANT (mobile) -->
|
||||
@@ -318,325 +377,141 @@
|
||||
<ChatbotSheet
|
||||
:modelValue="chatbotOpen"
|
||||
@update:modelValue="chatbotOpen = $event"
|
||||
@highlightOrgs="onHighlightOrgs"
|
||||
/>
|
||||
|
||||
<!-- ═══════════════════════════════════════ POP-UP MISSION ENTRAIDE -->
|
||||
<button
|
||||
class="mission-info-btn"
|
||||
type="button"
|
||||
@click="missionOpen = true"
|
||||
aria-label="À propos de cette carte d'entraide"
|
||||
title="À propos de cette carte"
|
||||
>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<circle cx="12" cy="12" r="10"/>
|
||||
<line x1="12" y1="16" x2="12" y2="12"/>
|
||||
<line x1="12" y1="8" x2="12.01" y2="8"/>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<MissionPopup
|
||||
:modelValue="missionOpen"
|
||||
@update:modelValue="missionOpen = $event"
|
||||
@highlightOrgs="() => {}"
|
||||
/>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Org } from '~/types/org'
|
||||
import type { ReseauxBifurcationData, StructureV2 } from '~/types/structure-v2'
|
||||
|
||||
// ── URL query params sync ─────────────────────────────────────────────────
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
const search = ref<string>((route.query.q as string) ?? '')
|
||||
const echelle = ref<string[]>(
|
||||
route.query.echelle
|
||||
? (route.query.echelle as string).split(',').filter(Boolean)
|
||||
: []
|
||||
)
|
||||
const fonctions = ref<string[]>(
|
||||
route.query.fonctions
|
||||
? (route.query.fonctions as string).split(',').filter(Boolean)
|
||||
: []
|
||||
)
|
||||
const territoire = ref<string | null>((route.query.territoire as string) ?? null)
|
||||
const territoireMode = ref<string>(
|
||||
(route.query.mode as string) === 'outremer' ? 'outremer' : 'metropole'
|
||||
)
|
||||
|
||||
const desktopMapView = ref<'metropole' | 'outremer'>('metropole')
|
||||
const selectedId = ref<number | null>(null)
|
||||
const chatbotOpen = ref(false)
|
||||
const ficheModalOpen = ref(false)
|
||||
const ficheModalId = ref<number | null>(null)
|
||||
const mobileMapView = ref<'metropole' | 'outremer'>('metropole')
|
||||
const missionOpen = ref(false)
|
||||
const mobileFonctionsOpen = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
try {
|
||||
if (!localStorage.getItem('aep_mission_seen')) {
|
||||
missionOpen.value = true
|
||||
}
|
||||
} catch {}
|
||||
})
|
||||
// Surlignage temporaire (5 sec) suite à une réponse chatbot
|
||||
// → sélectionne le premier ID recommandé sur la carte, puis remet à null
|
||||
let highlightTimer: ReturnType<typeof setTimeout> | null = null
|
||||
const prevSelectedId = ref<number | null>(null)
|
||||
|
||||
function onHighlightOrgs(ids: (number | string)[]) {
|
||||
if (!ids.length) return
|
||||
const firstId = typeof ids[0] === 'string' ? parseInt(ids[0], 10) : ids[0]
|
||||
if (isNaN(firstId)) return
|
||||
|
||||
// Sauvegarde la sélection courante
|
||||
prevSelectedId.value = selectedId.value
|
||||
selectedId.value = firstId
|
||||
|
||||
if (highlightTimer) clearTimeout(highlightTimer)
|
||||
highlightTimer = setTimeout(() => {
|
||||
// Restaure la sélection précédente (ou null)
|
||||
selectedId.value = prevSelectedId.value
|
||||
prevSelectedId.value = null
|
||||
highlightTimer = null
|
||||
}, 5000)
|
||||
// ── Couleurs familles ──────────────────────────────────────────────────────
|
||||
const FAMILLE_COLORS: Record<number, string> = {
|
||||
1: '#a85d3e',
|
||||
2: '#c4a472',
|
||||
3: '#d4a017',
|
||||
4: '#5a7a4a',
|
||||
5: '#3d6a8c',
|
||||
6: '#6b3fa0',
|
||||
}
|
||||
|
||||
// Ref locale barre de recherche mobile (synchronisée avec search via onSearch)
|
||||
const mobileSearch = ref<string>((route.query.q as string) ?? '')
|
||||
function familleColor(f: number): string {
|
||||
return FAMILLE_COLORS[f] ?? '#888'
|
||||
}
|
||||
|
||||
// Refs vers les instances NavMap (desktop + mobile séparées via deux <ClientOnly>)
|
||||
// ── État UI ────────────────────────────────────────────────────────────────
|
||||
const selectedId = ref<string | null>(null)
|
||||
const hoveredId = ref<string | null>(null)
|
||||
const ficheModalOpen = ref(false)
|
||||
const ficheModalId = ref<string | null>(null)
|
||||
const chatbotOpen = ref(false)
|
||||
const mobileMapView = ref<'metropole' | 'outremer'>('metropole')
|
||||
const desktopMapView = ref<'metropole' | 'outremer' | 'graphe'>('metropole')
|
||||
|
||||
// Filtres
|
||||
const search = ref('')
|
||||
const selectedFamille = ref<number | null>(null)
|
||||
const selectedHashtags = ref<string[]>([])
|
||||
|
||||
// Refs cartes
|
||||
const navMapRef = ref<any>(null)
|
||||
const navMapMobileRef = ref<any>(null)
|
||||
|
||||
// Sync URL <-> état filtres
|
||||
function syncUrl() {
|
||||
const q: Record<string, string> = {}
|
||||
if (search.value) q.q = search.value
|
||||
if (echelle.value.length) q.echelle = echelle.value.join(',')
|
||||
if (fonctions.value.length) q.fonctions = fonctions.value.join(',')
|
||||
if (territoire.value) q.territoire = territoire.value
|
||||
if (territoireMode.value === 'outremer') q.mode = 'outremer'
|
||||
router.replace({ query: Object.keys(q).length ? q : undefined })
|
||||
// ── Données V2 - JSON statique ─────────────────────────────────────────────
|
||||
const bifurcationData = ref<ReseauxBifurcationData | null>(null)
|
||||
const pending = ref(true)
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
bifurcationData.value = await $fetch<ReseauxBifurcationData>('/data/reseaux-bifurcation.json')
|
||||
} catch (e) {
|
||||
console.error('Erreur chargement reseaux-bifurcation.json', e)
|
||||
} finally {
|
||||
pending.value = false
|
||||
}
|
||||
})
|
||||
|
||||
const structures = computed<StructureV2[]>(() => bifurcationData.value?.structures ?? [])
|
||||
|
||||
// Tous les hashtags uniques triés
|
||||
const allHashtags = computed<string[]>(() => {
|
||||
const set = new Set<string>()
|
||||
structures.value.forEach(s => s.hashtags.forEach(h => set.add(h)))
|
||||
return Array.from(set).sort()
|
||||
})
|
||||
|
||||
// ── Filtrage ───────────────────────────────────────────────────────────────
|
||||
const filtered = computed<StructureV2[]>(() => {
|
||||
let result = structures.value
|
||||
|
||||
// Filtre texte
|
||||
if (search.value.trim()) {
|
||||
const q = search.value.toLowerCase()
|
||||
result = result.filter(
|
||||
s =>
|
||||
s.nom.toLowerCase().includes(q) ||
|
||||
s.ville.toLowerCase().includes(q) ||
|
||||
s.description_courte.toLowerCase().includes(q) ||
|
||||
s.hashtags.some(h => h.toLowerCase().includes(q))
|
||||
)
|
||||
}
|
||||
|
||||
// Filtre famille - F6 = badge_f6_recherche_politique, pas famille_principale
|
||||
if (selectedFamille.value !== null) {
|
||||
if (selectedFamille.value === 6) {
|
||||
result = result.filter(s => (s.badges as any)?.f6_recherche_politique === true)
|
||||
} else {
|
||||
result = result.filter(
|
||||
s => s.famille_principale === selectedFamille.value ||
|
||||
(s.familles_secondaires ?? []).includes(selectedFamille.value!)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// Filtre hashtags (AND logique si plusieurs)
|
||||
if (selectedHashtags.value.length) {
|
||||
result = result.filter(
|
||||
s => selectedHashtags.value.every(h => s.hashtags.includes(h))
|
||||
)
|
||||
}
|
||||
|
||||
return result
|
||||
})
|
||||
|
||||
const hasActiveFilters = computed(
|
||||
() => !!search.value || selectedFamille.value !== null || selectedHashtags.value.length > 0
|
||||
)
|
||||
|
||||
function resetFilters() {
|
||||
search.value = ''
|
||||
selectedFamille.value = null
|
||||
selectedHashtags.value = []
|
||||
}
|
||||
|
||||
// Sauvegarde les filtres courants dans sessionStorage pour le bouton retour des fiches
|
||||
function storeFiltersForBack() {
|
||||
if (typeof window === 'undefined') return
|
||||
const q: Record<string, string> = {}
|
||||
if (search.value) q.q = search.value
|
||||
if (echelle.value.length) q.echelle = echelle.value.join(',')
|
||||
if (fonctions.value.length) q.fonctions = fonctions.value.join(',')
|
||||
if (territoire.value) q.territoire = territoire.value
|
||||
if (territoireMode.value === 'outremer') q.mode = 'outremer'
|
||||
const qs = new URLSearchParams(q).toString()
|
||||
sessionStorage.setItem('nav_back_filters', qs)
|
||||
}
|
||||
// Structures métropole (pays != DOM-TOM, et avec coordonnées)
|
||||
// Pour simplifier : toutes les structures (la carte gère les sans-coords)
|
||||
const metropoleStructures = computed<StructureV2[]>(() => filtered.value)
|
||||
|
||||
function onSearch(v: string) { search.value = v; syncUrl(); storeFiltersForBack() }
|
||||
function onMode(v: string) { territoireMode.value = v; syncUrl(); storeFiltersForBack() }
|
||||
function onEchelle(v: string[]) { echelle.value = v; syncUrl(); storeFiltersForBack() }
|
||||
function onFonctions(v: string[]) { fonctions.value = v; syncUrl(); storeFiltersForBack() }
|
||||
function onTerritoire(v: string | null) { territoire.value = v; syncUrl(); storeFiltersForBack() }
|
||||
// Outre-mer : pas de structures V2 DOM-TOM pour l'instant - garder le composant existant vide
|
||||
// OutremerMap attend le format Org legacy - on passe un tableau vide
|
||||
const outremerOrgsLegacy = computed(() => [])
|
||||
const selectedIdLegacyNum = computed(() => null)
|
||||
|
||||
function onSelectOrg(id: number) {
|
||||
// ── Sélection ─────────────────────────────────────────────────────────────
|
||||
function onSelectStructure(id: string) {
|
||||
selectedId.value = selectedId.value === id ? null : id
|
||||
// Desktop : ouvrir le modal fiche
|
||||
if (typeof window !== 'undefined' && window.innerWidth >= 1024) {
|
||||
ficheModalId.value = id
|
||||
ficheModalOpen.value = true
|
||||
}
|
||||
}
|
||||
|
||||
// Tap card mobile → ouvre la fiche détaillée
|
||||
function onSelectOrgMobile(id: number) {
|
||||
function onSelectStructureMobile(id: string) {
|
||||
selectedId.value = id
|
||||
storeFiltersForBack()
|
||||
router.push(`/fiche/${id}`)
|
||||
ficheModalId.value = id
|
||||
ficheModalOpen.value = true
|
||||
}
|
||||
|
||||
function onHoverOrg(id: number | null) {
|
||||
if (id !== null) selectedId.value = id
|
||||
}
|
||||
|
||||
const hasActiveFilters = computed(() =>
|
||||
!!search.value || echelle.value.length > 0 || fonctions.value.length > 0 || !!territoire.value
|
||||
)
|
||||
|
||||
function resetFilters() {
|
||||
search.value = ''
|
||||
echelle.value = []
|
||||
fonctions.value = []
|
||||
territoire.value = null
|
||||
router.replace({ query: undefined })
|
||||
}
|
||||
|
||||
// Tagging compact mobile — toggle direct
|
||||
function toggleEchelle(opt: string) {
|
||||
if (echelle.value.includes(opt)) {
|
||||
onEchelle(echelle.value.filter(v => v !== opt))
|
||||
} else {
|
||||
onEchelle([...echelle.value, opt])
|
||||
}
|
||||
}
|
||||
|
||||
function toggleFonction(fn: string) {
|
||||
if (fonctions.value.includes(fn)) {
|
||||
onFonctions(fonctions.value.filter(f => f !== fn))
|
||||
} else {
|
||||
onFonctions([...fonctions.value, fn])
|
||||
}
|
||||
}
|
||||
|
||||
// Sync recherche depuis app.vue top nav (via URL ?q=)
|
||||
watch(() => route.query.q, (v) => {
|
||||
search.value = (v as string) ?? ''
|
||||
})
|
||||
|
||||
// ── Données ───────────────────────────────────────────────────────────────
|
||||
const { data, pending, error } = await useFetch<{ list: Org[]; source: string }>('/api/organisations')
|
||||
|
||||
const orgs = computed<Org[]>(() => data.value?.list ?? [])
|
||||
const dataSource = computed(() => data.value?.source ?? 'nocodb')
|
||||
|
||||
// Fiche aléatoire — réagit au ?random=1
|
||||
watch(() => route.query.random, (v) => {
|
||||
if (v === '1' && orgs.value.length > 0) {
|
||||
const randomOrg = orgs.value[Math.floor(Math.random() * orgs.value.length)]
|
||||
router.replace({ path: `/fiche/${randomOrg.Id}` })
|
||||
}
|
||||
})
|
||||
|
||||
// ── Filtrage côté client ──────────────────────────────────────────────────
|
||||
const filtered = computed<Org[]>(() => {
|
||||
let result = orgs.value
|
||||
|
||||
if (search.value.trim()) {
|
||||
const q = search.value.toLowerCase()
|
||||
result = result.filter(
|
||||
(o) =>
|
||||
o.nom?.toLowerCase().includes(q) ||
|
||||
o.localisation_ville?.toLowerCase().includes(q)
|
||||
)
|
||||
}
|
||||
|
||||
if (echelle.value.length) {
|
||||
result = result.filter((o) => o.echelle && echelle.value.includes(o.echelle))
|
||||
}
|
||||
|
||||
if (fonctions.value.length) {
|
||||
// Garde les orgs qui matchent au moins 1 fonction sélectionnée
|
||||
result = result.filter((o) => {
|
||||
const orgFns = (o.tags_fonction ?? '').split(',').map((f) => f.trim()).filter(Boolean)
|
||||
return fonctions.value.some((fn) => orgFns.includes(fn))
|
||||
})
|
||||
// Tri par score pondéré : priorité 1 (1er cliqué) = poids le plus fort
|
||||
const n = fonctions.value.length
|
||||
const score = (o: Org) =>
|
||||
fonctions.value.reduce((s, fn, i) => {
|
||||
const fns = (o.tags_fonction ?? '').split(',').map((f) => f.trim()).filter(Boolean)
|
||||
return s + (fns.includes(fn) ? (n - i) : 0)
|
||||
}, 0)
|
||||
result = [...result].sort((a, b) => score(b) - score(a))
|
||||
}
|
||||
|
||||
if (territoire.value) {
|
||||
result = result.filter((o) => o.territoire === territoire.value)
|
||||
}
|
||||
|
||||
return result
|
||||
})
|
||||
|
||||
const DOM_TOM = ['Guadeloupe', 'Martinique', 'Guyane', 'La Réunion', 'Mayotte']
|
||||
const DOM_TOM_LIST = DOM_TOM
|
||||
|
||||
const metropoleOrgs = computed<Org[]>(() =>
|
||||
filtered.value.filter(o => !o.territoire || !DOM_TOM.includes(o.territoire))
|
||||
)
|
||||
|
||||
const outremerOrgs = computed<Org[]>(() => {
|
||||
if (territoire.value && DOM_TOM.includes(territoire.value)) {
|
||||
return filtered.value.filter(o => o.territoire === territoire.value)
|
||||
}
|
||||
return filtered.value.filter(o => o.territoire && DOM_TOM.includes(o.territoire))
|
||||
})
|
||||
|
||||
const outremerCountByDom = computed<Record<string, number>>(() => {
|
||||
const counts: Record<string, number> = {}
|
||||
DOM_TOM.forEach(d => { counts[d] = 0 })
|
||||
filtered.value.forEach(o => {
|
||||
if (o.territoire && DOM_TOM.includes(o.territoire)) {
|
||||
counts[o.territoire] = (counts[o.territoire] ?? 0) + 1
|
||||
}
|
||||
})
|
||||
return counts
|
||||
})
|
||||
|
||||
// ── Compteurs ─────────────────────────────────────────────────────────────
|
||||
const ECHELLES = ['National', 'Régional', 'Local'] as const
|
||||
const ECHELLE_LABELS: Record<string, string> = { National: 'Nat', Régional: 'Rég', Local: 'Loc' }
|
||||
const FONCTIONS = ['Juridique', 'Technique', 'Économique', 'Administratif', 'Chantier', 'Comptabilité', 'Développement', 'Formation', "Gestion d'agence", 'Santé mentale'] as const
|
||||
const TERRITOIRES = ['Métropole', 'Guadeloupe', 'Martinique', 'Guyane', 'La Réunion', 'Mayotte']
|
||||
|
||||
const echelleCount = computed<Record<string, number>>(() => {
|
||||
const counts: Record<string, number> = {}
|
||||
ECHELLES.forEach((e) => { counts[e] = 0 })
|
||||
orgs.value.forEach((o) => { if (o.echelle) counts[o.echelle] = (counts[o.echelle] ?? 0) + 1 })
|
||||
return counts
|
||||
})
|
||||
|
||||
const fonctionCount = computed<Record<string, number>>(() => {
|
||||
const counts: Record<string, number> = {}
|
||||
FONCTIONS.forEach((f) => { counts[f] = 0 })
|
||||
orgs.value.forEach((o) => {
|
||||
const fns = (o.tags_fonction ?? '').split(',').map((f) => f.trim()).filter(Boolean)
|
||||
fns.forEach((fn) => { counts[fn] = (counts[fn] ?? 0) + 1 })
|
||||
})
|
||||
return counts
|
||||
})
|
||||
|
||||
const territoireCount = computed<Record<string, number>>(() => {
|
||||
const counts: Record<string, number> = {}
|
||||
TERRITOIRES.forEach((t) => { counts[t] = 0 })
|
||||
orgs.value.forEach((o) => { if (o.territoire) counts[o.territoire] = (counts[o.territoire] ?? 0) + 1 })
|
||||
counts['Métropole'] = orgs.value.filter(o => !o.territoire || !DOM_TOM.includes(o.territoire)).length
|
||||
return counts
|
||||
})
|
||||
|
||||
// ── Helpers ───────────────────────────────────────────────────────────────
|
||||
function fonctionsList(org: Org): string[] {
|
||||
return (org.tags_fonction ?? '').split(',').map((f) => f.trim()).filter(Boolean).slice(0, 3)
|
||||
}
|
||||
|
||||
useHead({ title: 'AEP — Cartographie de l\'écologie politique architecturale' })
|
||||
useHead({ title: "AEP - Réseaux de bifurcation architecturale" })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.mission-info-btn {
|
||||
position: fixed;
|
||||
bottom: 24px;
|
||||
left: 16px;
|
||||
z-index: 1000;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 50%;
|
||||
border: none;
|
||||
background: var(--nav-surface);
|
||||
color: var(--nav-text-muted);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0 2px 12px rgba(26,34,56,0.18);
|
||||
cursor: pointer;
|
||||
transition: opacity 0.15s, transform 0.1s;
|
||||
}
|
||||
.mission-info-btn:hover { opacity: 0.85; transform: translateY(-1px); color: var(--nav-text); }
|
||||
|
||||
@media (min-width: 1024px) {
|
||||
.mission-info-btn { bottom: 16px; left: 340px; }
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,239 +0,0 @@
|
||||
<template>
|
||||
<div class="manifeste-page">
|
||||
<div class="manifeste-inner">
|
||||
|
||||
<NuxtLink to="/" class="back-link">← Retour à la carte</NuxtLink>
|
||||
|
||||
<h1 class="manifeste-title">Manifeste — Architecture d'Écologie Politique</h1>
|
||||
|
||||
<p class="lede">
|
||||
<em>Un quart des architectes vivent sous le seuil de pauvreté. La moitié de nos heures, non facturées. Nos cotisations, parmi les plus lourdes des professions réglementées. Et le secteur du bâtiment, à lui seul, pèse 34 % des émissions mondiales de gaz à effet de serre.</em>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Quelque chose s'est rompu — pas dans nos vies, dans les cadres qui les contiennent.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Notre profession ne traverse pas une simple crise. Elle reflète l'effondrement d'un monde qui confond performance et destruction, signature et silence, expertise et soumission.
|
||||
</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<h2>Ce que nous voyons.</h2>
|
||||
|
||||
<p>
|
||||
À l'échelle du métier, une profession structurellement sous l'eau, qui absorbe les tensions d'un système extractiviste — et porte la responsabilité quand d'autres captent la valeur.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
À l'échelle des corps, une culture qui rend l'exploitation désirable : métier-passion, modèle starchitecte, isolement libéral, moteur critique délégitimant. Nous tenons. Nous payons.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
À l'échelle du monde, l'effondrement écologique et social qui avance, pendant que notre voix s'efface du débat public. Notre silence le sert.
|
||||
</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<h2>Ce que nous refusons.</h2>
|
||||
|
||||
<p class="refus">
|
||||
Nous ne signerons plus pour des projets qui détruisent.<br />
|
||||
Nous n'isolerons plus celles et ceux qui doutent.<br />
|
||||
Nous ne porterons plus seul·es ce qui doit se penser, se faire — et se soigner — ensemble.
|
||||
</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<p class="pivot">
|
||||
<strong>Et pourtant, quelque chose tient.</strong>
|
||||
</p>
|
||||
|
||||
<p class="pivot-suite">
|
||||
Pas l'espoir naïf, ni la promesse héroïque. Quelque chose de plus humble : la fatigue commune reconnue, et l'envie qui revient de ne plus économiser sa vie.
|
||||
</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<h2>Ce que nous tentons.</h2>
|
||||
|
||||
<p>
|
||||
<em>Partager.</em> Nos parcours, nos doutes, nos bifurcations. Se former les un·es les autres. Se tendre la main. Documenter ce qui marche, ce qui rate. Le personnel devient politique quand il se met en commun.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<em>Construire.</em> L'infrastructure collective qui nous a manqué. Cartes d'entraide, communs documentés, gouvernance horizontale, financement transparent, infra souveraine. <strong>Architecture d'Écologie Politique</strong> : un commun vivant, ouvert, biorégional, ancré.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<em>Pratiquer une médecine du corps social.</em> Diagnostiquer les infrastructures qui défaillent — l'éducation, la justice, la sécurité, l'énergie, la santé, le logement, l'agriculture. Proposer des reconfigurations situées, territoire par territoire. Reprendre le pouvoir par la base. Écrire, lentement, un nouveau contrat social.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<em>Commencer par les marges.</em> Là où le corps social souffre le plus, là où il est le plus prêt à changer. Ne pas décider à la place — faire émerger. Transparence totale, sur le process et sur l'argent. Tendresse militante : la lucidité sans le mépris, l'engagement sans la dureté.
|
||||
</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<h2>Architectes, allié·es, habitant·es.</h2>
|
||||
|
||||
<p>
|
||||
Nous avons un travail à faire ensemble. Lentement, patiemment, par accumulation de petits gestes situés. Pas pour fuir — pour bifurquer.
|
||||
</p>
|
||||
|
||||
<p class="chute">
|
||||
<em>Nos métiers sont des médecines. Reprenons-en le pouls — à mains nues, ensemble.</em>
|
||||
</p>
|
||||
|
||||
<hr />
|
||||
|
||||
<p class="cta-wrap">
|
||||
<a
|
||||
href="https://www.trans-former.fr/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="btn-blog"
|
||||
>
|
||||
En lire plus — blog AEP →
|
||||
</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
useHead({
|
||||
title: 'Manifeste — AEP',
|
||||
meta: [
|
||||
{ name: 'description', content: 'Manifeste d\'Architecture d\'Écologie Politique — un commun vivant pour bifurquer ensemble.' },
|
||||
],
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.manifeste-page {
|
||||
min-height: 100vh;
|
||||
background: var(--nav-bg);
|
||||
padding: 1.5rem 1rem 5rem;
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.manifeste-inner {
|
||||
max-width: 680px;
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.back-link {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
font-size: 0.875rem;
|
||||
color: var(--nav-primary-solid);
|
||||
opacity: 0.7;
|
||||
text-decoration: none;
|
||||
margin-bottom: 2rem;
|
||||
transition: opacity 0.15s;
|
||||
}
|
||||
|
||||
.back-link:hover { opacity: 1; }
|
||||
|
||||
.manifeste-title {
|
||||
font-size: 1.65rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text);
|
||||
margin: 0 0 1.5rem;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
.lede {
|
||||
font-size: 1rem;
|
||||
line-height: 1.7;
|
||||
color: var(--nav-text);
|
||||
margin: 0 0 1.25rem;
|
||||
border-left: 3px solid var(--nav-primary-solid);
|
||||
padding-left: 1rem;
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 0.975rem;
|
||||
line-height: 1.75;
|
||||
color: var(--nav-text);
|
||||
margin: 0 0 1.1rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.05rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text);
|
||||
margin: 2rem 0 1rem;
|
||||
letter-spacing: 0.01em;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 1px solid var(--nav-bg-alt);
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.refus {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.pivot {
|
||||
font-size: 1.15rem;
|
||||
text-align: center;
|
||||
margin: 2rem 0 1rem;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.pivot strong {
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.pivot-suite {
|
||||
text-align: center;
|
||||
font-style: italic;
|
||||
opacity: 0.85;
|
||||
}
|
||||
|
||||
.chute {
|
||||
font-size: 1.05rem;
|
||||
text-align: center;
|
||||
margin-top: 1.5rem;
|
||||
color: var(--nav-text);
|
||||
}
|
||||
|
||||
.cta-wrap {
|
||||
text-align: center;
|
||||
margin: 2rem 0 0;
|
||||
}
|
||||
|
||||
.btn-blog {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
padding: 0.75rem 1.5rem;
|
||||
background: var(--nav-primary);
|
||||
color: var(--nav-text-on-primary);
|
||||
border-radius: 8px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
transition: opacity 0.15s;
|
||||
}
|
||||
|
||||
.btn-blog:hover { opacity: 0.85; }
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.manifeste-page { padding: 1rem 0.85rem 4rem; }
|
||||
.manifeste-title { font-size: 1.4rem; }
|
||||
.lede { font-size: 0.95rem; padding-left: 0.85rem; }
|
||||
p { font-size: 0.95rem; }
|
||||
.pivot { font-size: 1.05rem; }
|
||||
}
|
||||
</style>
|
||||
590
pages/media.vue
590
pages/media.vue
@@ -1,590 +0,0 @@
|
||||
<template>
|
||||
<div class="media-page" style="background: var(--nav-bg);">
|
||||
|
||||
<!-- ZONE PRINCIPALE (pleine largeur, pas de sidebar) -->
|
||||
<main class="media-main">
|
||||
|
||||
<!-- Header onglet -->
|
||||
<div class="shrink-0 px-5 py-3"
|
||||
style="background: var(--nav-surface); border-bottom: 1px solid var(--nav-bg-alt); display:flex; align-items:center; justify-content:space-between; gap:12px;">
|
||||
<div>
|
||||
<h1 class="font-bold text-base" style="color: var(--nav-text);">ATIS Media</h1>
|
||||
<p class="text-xs mt-0.5" style="color: var(--nav-text-muted);">
|
||||
{{ corpusCount }} auteurs / {{ livresCount }} livres ingeres dans le RAG -
|
||||
<a href="https://bonpote.com/la-carte-des-pensees-ecologiques/"
|
||||
target="_blank" rel="noopener"
|
||||
style="color: var(--nav-primary, #3b6ea5); text-decoration: underline; text-underline-offset: 2px;">
|
||||
carte FRACAS Bonpote V2
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<button
|
||||
@click="ragInfoOpen = true"
|
||||
title="A propos du RAG FRACAS"
|
||||
style="width:26px;height:26px;border-radius:50%;border:1.5px solid var(--nav-text-muted);color:var(--nav-text-muted);font-size:0.72rem;font-weight:700;cursor:pointer;flex-shrink:0;background:var(--nav-bg-alt);display:flex;align-items:center;justify-content:center;"
|
||||
aria-label="A propos du RAG">
|
||||
i
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Conteneur split / plein ecran -->
|
||||
<div class="layout-container">
|
||||
|
||||
<!-- Slot carte D3 -->
|
||||
<div
|
||||
class="carte-slot"
|
||||
:class="[
|
||||
layoutMode === 'split' ? 'carte-split' : '',
|
||||
layoutMode === 'carte-full' ? 'carte-full' : '',
|
||||
layoutMode === 'chatbot-full' ? 'carte-hidden' : '',
|
||||
]"
|
||||
:style="layoutMode === 'split' ? { flexBasis: carteFlexBasis } : {}"
|
||||
>
|
||||
<ClientOnly>
|
||||
<CartePensees
|
||||
ref="cartePenseesRef"
|
||||
:data="penseesData"
|
||||
:active="true"
|
||||
@select-auteur="onSelectAuteur"
|
||||
@select-ecole="onSelectEcole"
|
||||
/>
|
||||
<template #fallback>
|
||||
<div class="w-full h-full flex items-center justify-center" style="color: var(--nav-text-muted);">
|
||||
Chargement de la carte...
|
||||
</div>
|
||||
</template>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Barre de toggle -->
|
||||
<div class="layout-toggle-bar shrink-0">
|
||||
<button
|
||||
@click="setLayoutMode('carte-full')"
|
||||
:class="{ active: layoutMode === 'carte-full' }"
|
||||
class="toggle-btn"
|
||||
title="Carte en plein ecran"
|
||||
>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<polyline points="15 3 21 3 21 9"/><polyline points="9 21 3 21 3 15"/>
|
||||
<line x1="21" y1="3" x2="14" y2="10"/><line x1="3" y1="21" x2="10" y2="14"/>
|
||||
</svg>
|
||||
Carte plein ecran
|
||||
</button>
|
||||
<button
|
||||
v-if="layoutMode !== 'split'"
|
||||
@click="setLayoutMode('split')"
|
||||
class="toggle-btn"
|
||||
title="Vue partagee"
|
||||
>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<rect x="3" y="3" width="18" height="18" rx="2"/><line x1="3" y1="12" x2="21" y2="12"/>
|
||||
</svg>
|
||||
Vue partagee
|
||||
</button>
|
||||
<button
|
||||
@click="setLayoutMode('chatbot-full')"
|
||||
:class="{ active: layoutMode === 'chatbot-full' }"
|
||||
class="toggle-btn"
|
||||
title="Chatbot en plein ecran"
|
||||
>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
|
||||
</svg>
|
||||
Chatbot plein ecran
|
||||
</button>
|
||||
<button
|
||||
@click="setLayoutMode('bonpote')"
|
||||
:class="{ active: layoutMode === 'bonpote' }"
|
||||
class="toggle-btn"
|
||||
title="A propos de la carte FRACAS Bonpote V2"
|
||||
style="margin-left: auto;"
|
||||
>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
||||
<circle cx="12" cy="12" r="10"/><polyline points="12 8 12 12 14 14"/>
|
||||
</svg>
|
||||
Bonpote V2
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Poignee draggable (visible uniquement en mode split, pas sur mobile) -->
|
||||
<div
|
||||
v-if="layoutMode === 'split'"
|
||||
class="split-handle"
|
||||
@mousedown.prevent="onHandleMousedown"
|
||||
title="Redimensionner"
|
||||
>
|
||||
<span class="split-handle-grip"></span>
|
||||
</div>
|
||||
|
||||
<!-- Slot chatbot inline -->
|
||||
<div
|
||||
class="chatbot-slot"
|
||||
:class="[
|
||||
layoutMode === 'split' ? 'chatbot-split' : '',
|
||||
layoutMode === 'chatbot-full' ? 'chatbot-full-mode' : '',
|
||||
layoutMode === 'carte-full' ? 'chatbot-hidden' : '',
|
||||
]"
|
||||
:style="layoutMode === 'split' ? { flexBasis: chatbotFlexBasis } : {}"
|
||||
>
|
||||
<ClientOnly>
|
||||
<ChatbotPensees :auteurContext="chatbotAuteur" :inline="true" />
|
||||
</ClientOnly>
|
||||
</div>
|
||||
|
||||
<!-- Vue Bonpote V2 -->
|
||||
<div
|
||||
v-if="layoutMode === 'bonpote'"
|
||||
class="flex-1 overflow-y-auto px-6 py-8"
|
||||
style="max-width: 680px; margin: 0 auto;"
|
||||
>
|
||||
<div class="mb-6">
|
||||
<p class="text-xs font-bold uppercase tracking-widest mb-2" style="color: var(--nav-text-muted);">Reference editoriale</p>
|
||||
<h2 class="text-xl font-bold mb-3" style="color: var(--nav-text);">Carte FRACAS des pensees ecologiques</h2>
|
||||
<p class="text-sm leading-relaxed mb-4" style="color: var(--nav-text);">
|
||||
FRACAS (Familles, Racines et Arpentages des Courants et Alternatives Solidaires) est une carte des ecoles de pensee ecologique publiee par Bonpote en octobre 2024. Elle reference ~140 auteurs et autrices reparti-es en 10 ecoles de pensee, depuis l'ecosocialisme jusqu'a l'ethique environnementale.
|
||||
</p>
|
||||
<p class="text-sm leading-relaxed mb-6" style="color: var(--nav-text);">
|
||||
Le RAG ATIS est construit sur cette reference : chaque auteur ingere dans la bibliotheque correspond a une entree de la carte FRACAS. Les ecoles de pensee, les positions et les couleurs de notre carte sont transposees 1:1 depuis Bonpote V2.
|
||||
</p>
|
||||
<div class="flex flex-col gap-3">
|
||||
<a href="https://bonpote.com/la-carte-des-pensees-ecologiques/"
|
||||
target="_blank" rel="noopener"
|
||||
class="flex items-center gap-3 px-4 py-3 rounded-lg hover:opacity-80 transition-opacity"
|
||||
style="background: var(--nav-primary, #3b6ea5); color: white; font-size: 0.875rem; font-weight: 600; text-decoration: none;">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg>
|
||||
Lire l'article Bonpote + carte interactive
|
||||
</a>
|
||||
<a href="https://bonpote.com/wp-content/uploads/2024/10/FRACAS_BONPOTE_CARTE_VERSO_V2-OCT2024.pdf"
|
||||
target="_blank" rel="noopener"
|
||||
class="flex items-center gap-3 px-4 py-3 rounded-lg hover:opacity-80 transition-opacity"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text); font-size: 0.875rem; font-weight: 500; text-decoration: none;">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
|
||||
Telecharger le poster PDF (recto/verso)
|
||||
</a>
|
||||
<button
|
||||
@click="setLayoutMode('split')"
|
||||
class="flex items-center gap-3 px-4 py-3 rounded-lg hover:opacity-80 transition-opacity text-left"
|
||||
style="background: var(--nav-bg-alt); color: var(--nav-text); font-size: 0.875rem; font-weight: 500; border: none; cursor: pointer;">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>
|
||||
Interroger le RAG ATIS sur ces pensees
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-xs font-bold uppercase tracking-widest mb-3" style="color: var(--nav-text-muted);">Les 10 ecoles de pensee (FRACAS V2)</p>
|
||||
<div class="flex flex-col gap-2">
|
||||
<div v-for="ecole in (penseesData?.ecoles ?? [])" :key="ecole.id"
|
||||
class="flex items-start gap-3 px-3 py-2 rounded-lg"
|
||||
style="background: var(--nav-bg-alt);">
|
||||
<span class="w-3 h-3 rounded-full shrink-0 mt-1" :style="`background:${ecole.color};`"></span>
|
||||
<div>
|
||||
<p class="text-sm font-semibold" style="color: var(--nav-text);">{{ ecole.label }}</p>
|
||||
<p class="text-xs mt-0.5 leading-relaxed" style="color: var(--nav-text-muted);">{{ ecole.description }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Fiche auteur modal -->
|
||||
<FicheAuteur
|
||||
:open="ficheOpen"
|
||||
:auteurId="ficheAuteurId"
|
||||
:data="penseesData"
|
||||
@close="ficheOpen = false"
|
||||
@interroger-rag="onInterrogerRag"
|
||||
/>
|
||||
|
||||
<!-- Fiche ecole modal -->
|
||||
<FicheEcole
|
||||
:open="ficheEcoleOpen"
|
||||
:ecoleId="ficheEcoleId"
|
||||
:data="penseesData"
|
||||
@close="ficheEcoleOpen = false"
|
||||
@select-auteur="onSelectAuteurFromEcole"
|
||||
@interroger-ecole="onInterrogerEcole"
|
||||
/>
|
||||
|
||||
<!-- Modal info RAG -->
|
||||
<Teleport to="body">
|
||||
<Transition name="backdrop">
|
||||
<div v-if="ragInfoOpen" class="fixed inset-0 z-[2000]" style="background:rgba(26,34,56,0.55);" @click="ragInfoOpen = false" aria-hidden="true" />
|
||||
</Transition>
|
||||
<Transition name="modal">
|
||||
<div v-if="ragInfoOpen" class="fixed z-[2001] left-1/2 flex flex-col"
|
||||
style="top:50%;transform:translate(-50%,-50%);width:min(580px,94vw);max-height:85vh;background:var(--nav-bg);border-radius:14px;box-shadow:0 16px 64px rgba(26,34,56,0.28);overflow:hidden;"
|
||||
role="dialog" aria-modal="true" aria-label="A propos du RAG FRACAS">
|
||||
<div class="flex items-center justify-between px-5 py-4 shrink-0"
|
||||
style="border-bottom:2px solid var(--nav-bg-alt);background:var(--nav-surface);">
|
||||
<h2 class="font-bold text-base" style="color:var(--nav-text);">FRACAS - Bibliotheque des pensees ecologiques</h2>
|
||||
<button @click="ragInfoOpen = false" class="ml-3 shrink-0 flex items-center justify-center w-8 h-8 rounded-full hover:opacity-70"
|
||||
style="background:var(--nav-bg-alt);color:var(--nav-text-muted);" aria-label="Fermer">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round">
|
||||
<line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="flex-1 overflow-y-auto px-5 py-4" style="color:var(--nav-text);font-size:0.875rem;line-height:1.6;">
|
||||
<p class="mb-3">Une bibliotheque parlante politisee - des pensees ecologiques de gauche, organisees pour aider a creer une pensee complexe et nuancee, critiquer le recit dominant et soutenir des alternatives concretes et des projets collectifs.</p>
|
||||
<p class="mb-4" style="color:var(--nav-text-muted);font-size:0.8rem;">Projet open source, ouvert a toutes et a tous - <a href="https://bonpote.com/la-carte-des-pensees-ecologiques/" target="_blank" rel="noopener" style="text-decoration:underline;">article + carte FRACAS Bonpote V2</a>.</p>
|
||||
<div class="flex flex-col gap-3">
|
||||
<div class="p-3 rounded-lg" style="background:var(--nav-bg-alt);">
|
||||
<p class="font-semibold mb-1" style="font-size:0.8rem;color:var(--nav-text-muted);text-transform:uppercase;letter-spacing:0.05em;">Ce qu'est un RAG</p>
|
||||
<p>Les textes sont vectorises dans un espace de 662 dimensions - chaque livre devient un nuage de points semantiques. La proximite entre les points capture la proximite entre les idees, pas les mots.</p>
|
||||
</div>
|
||||
<div class="p-3 rounded-lg" style="background:var(--nav-bg-alt);">
|
||||
<p class="font-semibold mb-1" style="font-size:0.8rem;color:var(--nav-text-muted);text-transform:uppercase;letter-spacing:0.05em;">Chunking intelligent</p>
|
||||
<p>Lors de l'ingestion, nous selectionnons les entites cles (concepts, auteurs, relations entre idees) plutot que de decouper mecaniquement les textes.</p>
|
||||
</div>
|
||||
<div class="p-3 rounded-lg" style="background:var(--nav-bg-alt);">
|
||||
<p class="font-semibold mb-2" style="font-size:0.8rem;color:var(--nav-text-muted);text-transform:uppercase;letter-spacing:0.05em;">Trois couches d'analyse</p>
|
||||
<div class="flex flex-col gap-1.5">
|
||||
<div class="flex gap-2"><span class="font-semibold" style="min-width:70px;">Fond</span><span>Les idees, les theses, les arguments - ce qu'on interroge directement.</span></div>
|
||||
<div class="flex gap-2"><span class="font-semibold" style="min-width:70px;">Forme</span><span>Les modeles narratifs, la rhetorique, la construction argumentative.</span></div>
|
||||
<div class="flex gap-2"><span class="font-semibold" style="min-width:70px;">Structure</span><span>L'architecture des livres - comment les auteurs construisent leur pensee.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Transition>
|
||||
</Teleport>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
interface EcoleData { id: string; label: string; description: string; color: string; x_hint: number; y_hint: number }
|
||||
interface LivreRag { slug: string; titre: string; annee: number; couches: string[] }
|
||||
interface AuteurData { id: string; nom: string; dates: string; ecoles: string[]; ecole_principale: string; livres_rag: LivreRag[]; theses_cles: string[]; bio_courte: string }
|
||||
interface PenseesData { meta: any; ecoles: EcoleData[]; auteurs: AuteurData[] }
|
||||
|
||||
type LayoutMode = 'split' | 'carte-full' | 'chatbot-full' | 'bonpote'
|
||||
|
||||
const STORAGE_KEY = 'media-layout-mode'
|
||||
const SPLIT_RATIO_KEY = 'media-split-ratio'
|
||||
const DEFAULT_SPLIT_RATIO = 0.66
|
||||
|
||||
const ficheOpen = ref(false)
|
||||
const ficheAuteurId = ref<string | null>(null)
|
||||
const ficheEcoleOpen = ref(false)
|
||||
const ficheEcoleId = ref<string | null>(null)
|
||||
const ragInfoOpen = ref(false)
|
||||
const chatbotAuteur = ref<string | null>(null)
|
||||
const penseesData = ref<PenseesData | null>(null)
|
||||
const layoutMode = ref<LayoutMode>('split')
|
||||
const cartePenseesRef = ref<{ triggerResize: () => void } | null>(null)
|
||||
|
||||
// Ratio de la carte vs chatbot en mode split (0.2 a 0.8)
|
||||
const splitRatio = ref(DEFAULT_SPLIT_RATIO)
|
||||
const carteFlexBasis = computed(() => `${splitRatio.value * 100}%`)
|
||||
const chatbotFlexBasis = computed(() => `${(1 - splitRatio.value) * 100}%`)
|
||||
|
||||
const corpusCount = computed(() => penseesData.value?.auteurs.filter((a: any) => a.ingere).length ?? 0)
|
||||
const livresCount = computed(() => {
|
||||
if (!penseesData.value) return 0
|
||||
const slugs = new Set<string>()
|
||||
penseesData.value.auteurs
|
||||
.filter((a: any) => a.ingere)
|
||||
.forEach((a: any) => (a.livres_rag ?? []).forEach((l: any) => slugs.add(l.slug)))
|
||||
return slugs.size
|
||||
})
|
||||
|
||||
// Logique poignee draggable
|
||||
let dragStartY = 0
|
||||
let dragStartRatio = DEFAULT_SPLIT_RATIO
|
||||
let containerHeight = 0
|
||||
|
||||
function onHandleMousedown(e: MouseEvent) {
|
||||
dragStartY = e.clientY
|
||||
dragStartRatio = splitRatio.value
|
||||
// Hauteur du layout-container (carte + handle + chatbot)
|
||||
const container = (e.target as HTMLElement)?.closest('.layout-container') as HTMLElement | null
|
||||
containerHeight = container ? container.clientHeight : window.innerHeight
|
||||
|
||||
window.addEventListener('mousemove', onHandleMousemove)
|
||||
window.addEventListener('mouseup', onHandleMouseup)
|
||||
}
|
||||
|
||||
function onHandleMousemove(e: MouseEvent) {
|
||||
const delta = e.clientY - dragStartY
|
||||
const newRatio = dragStartRatio + delta / containerHeight
|
||||
splitRatio.value = Math.min(0.80, Math.max(0.20, newRatio))
|
||||
}
|
||||
|
||||
function onHandleMouseup() {
|
||||
window.removeEventListener('mousemove', onHandleMousemove)
|
||||
window.removeEventListener('mouseup', onHandleMouseup)
|
||||
if (typeof window !== 'undefined') {
|
||||
localStorage.setItem(SPLIT_RATIO_KEY, String(splitRatio.value))
|
||||
}
|
||||
// Notifier D3 du resize apres relachement
|
||||
cartePenseesRef.value?.triggerResize()
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
if (typeof window !== 'undefined') {
|
||||
const saved = localStorage.getItem(STORAGE_KEY) as LayoutMode | null
|
||||
if (saved && ['split', 'carte-full', 'chatbot-full', 'bonpote'].includes(saved)) {
|
||||
layoutMode.value = saved
|
||||
}
|
||||
const savedRatio = parseFloat(localStorage.getItem(SPLIT_RATIO_KEY) ?? '')
|
||||
if (!isNaN(savedRatio) && savedRatio >= 0.20 && savedRatio <= 0.80) {
|
||||
splitRatio.value = savedRatio
|
||||
}
|
||||
// Afficher le popup info RAG a la premiere visite
|
||||
if (!localStorage.getItem('rag-fracas-info-seen')) {
|
||||
ragInfoOpen.value = true
|
||||
localStorage.setItem('rag-fracas-info-seen', '1')
|
||||
}
|
||||
}
|
||||
try {
|
||||
penseesData.value = await $fetch<PenseesData>('/data/auteurs-pensees.json?v=4.2')
|
||||
} catch (e) {
|
||||
console.error('Erreur chargement auteurs-pensees.json', e)
|
||||
}
|
||||
})
|
||||
|
||||
// Persister + reset D3 apres transition
|
||||
function setLayoutMode(mode: LayoutMode) {
|
||||
layoutMode.value = mode
|
||||
if (typeof window !== 'undefined') {
|
||||
localStorage.setItem(STORAGE_KEY, mode)
|
||||
}
|
||||
// Restart simulation D3 apres la fin de la transition CSS (300ms)
|
||||
if (mode !== 'chatbot-full') {
|
||||
setTimeout(() => {
|
||||
cartePenseesRef.value?.triggerResize()
|
||||
}, 350)
|
||||
}
|
||||
}
|
||||
|
||||
watch(layoutMode, (v) => {
|
||||
if (typeof window !== 'undefined') {
|
||||
localStorage.setItem(STORAGE_KEY, v)
|
||||
}
|
||||
})
|
||||
|
||||
function onSelectAuteur(id: string) {
|
||||
ficheAuteurId.value = id
|
||||
ficheOpen.value = true
|
||||
chatbotAuteur.value = null
|
||||
}
|
||||
|
||||
function onSelectEcole(id: string) {
|
||||
ficheEcoleId.value = id
|
||||
ficheEcoleOpen.value = true
|
||||
}
|
||||
|
||||
function onSelectAuteurFromEcole(auteurId: string) {
|
||||
ficheEcoleOpen.value = false
|
||||
onSelectAuteur(auteurId)
|
||||
}
|
||||
|
||||
function onInterrogerEcole(ecoleId: string) {
|
||||
ficheEcoleOpen.value = false
|
||||
const ecole = penseesData.value?.ecoles.find(e => e.id === ecoleId)
|
||||
chatbotAuteur.value = ecole?.label ?? null
|
||||
if (layoutMode.value === 'carte-full') setLayoutMode('split')
|
||||
}
|
||||
|
||||
function onInterrogerRag(auteurId: string) {
|
||||
ficheOpen.value = false
|
||||
const auteur = penseesData.value?.auteurs.find(a => a.id === auteurId)
|
||||
chatbotAuteur.value = auteur?.nom ?? null
|
||||
// Basculer en split pour que le chatbot soit visible
|
||||
if (layoutMode.value === 'carte-full') {
|
||||
setLayoutMode('split')
|
||||
}
|
||||
}
|
||||
|
||||
useHead({ title: 'AEP - Media - Carte FRACAS Bonpote' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* Page container : flex column, prend toute la hauteur viewport */
|
||||
.media-page {
|
||||
display: flex;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.media-main {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* Conteneur des slots carte + toggle + chatbot */
|
||||
.layout-container {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
/* --- Slot carte --- */
|
||||
.carte-slot {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
transition: opacity 0.2s ease;
|
||||
}
|
||||
|
||||
.carte-split {
|
||||
flex: 0 0 66%;
|
||||
min-height: 0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.carte-full {
|
||||
flex: 1 1 100%;
|
||||
min-height: 0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.carte-hidden {
|
||||
flex: 0 0 0;
|
||||
height: 0;
|
||||
opacity: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* --- Barre de toggle --- */
|
||||
.layout-toggle-bar {
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 4px 12px;
|
||||
background: var(--nav-bg);
|
||||
border-top: 1px solid rgba(180, 170, 160, 0.22);
|
||||
border-bottom: 1px solid rgba(180, 170, 160, 0.22);
|
||||
min-height: 38px;
|
||||
}
|
||||
|
||||
.toggle-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
padding: 4px 10px;
|
||||
border-radius: 6px;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
background: var(--nav-bg-alt);
|
||||
color: var(--nav-text-muted);
|
||||
border: 1px solid transparent;
|
||||
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
||||
}
|
||||
|
||||
.toggle-btn:hover {
|
||||
background: var(--nav-surface);
|
||||
color: var(--nav-text);
|
||||
}
|
||||
|
||||
.toggle-btn.active {
|
||||
background: var(--nav-primary);
|
||||
color: var(--nav-text-on-primary);
|
||||
border-color: var(--nav-primary);
|
||||
}
|
||||
|
||||
/* --- Poignee draggable entre carte et chatbot --- */
|
||||
.split-handle {
|
||||
flex-shrink: 0;
|
||||
height: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: row-resize;
|
||||
background: transparent;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.split-handle:hover {
|
||||
background: rgba(180, 170, 160, 0.18);
|
||||
}
|
||||
|
||||
.split-handle-grip {
|
||||
display: block;
|
||||
width: 32px;
|
||||
height: 4px;
|
||||
border-radius: 2px;
|
||||
background: repeating-linear-gradient(
|
||||
to bottom,
|
||||
rgba(160, 150, 140, 0.55) 0px,
|
||||
rgba(160, 150, 140, 0.55) 1px,
|
||||
transparent 1px,
|
||||
transparent 3px
|
||||
);
|
||||
}
|
||||
|
||||
/* Masquer la poignee sur mobile (ratio fixe) */
|
||||
@media (max-width: 767px) {
|
||||
.split-handle {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* --- Slot chatbot --- */
|
||||
.chatbot-slot {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
transition: opacity 0.2s ease;
|
||||
border-top: 1px solid rgba(180, 170, 160, 0.28);
|
||||
}
|
||||
|
||||
.chatbot-split {
|
||||
flex: 0 0 34%;
|
||||
min-height: 0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.chatbot-full-mode {
|
||||
flex: 1 1 100%;
|
||||
min-height: 0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.chatbot-hidden {
|
||||
flex: 0 0 0;
|
||||
height: 0;
|
||||
opacity: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* --- Transitions modal RAG info --- */
|
||||
.backdrop-enter-active,.backdrop-leave-active { transition: opacity 0.2s; }
|
||||
.backdrop-enter-from,.backdrop-leave-to { opacity: 0; }
|
||||
.modal-enter-active { transition: opacity 0.2s, transform 0.22s cubic-bezier(0.34,1.56,0.64,1); }
|
||||
.modal-leave-active { transition: opacity 0.18s, transform 0.18s ease-in; }
|
||||
.modal-enter-from { opacity: 0; transform: translate(-50%,-48%) scale(0.94); }
|
||||
.modal-leave-to { opacity: 0; transform: translate(-50%,-48%) scale(0.96); }
|
||||
|
||||
/* --- Responsive mobile (<768px) --- */
|
||||
/* Stack vertical : carte 60vh + chatbot 40vh en mode split */
|
||||
@media (max-width: 767px) {
|
||||
.carte-split {
|
||||
flex: 0 0 60vh;
|
||||
height: 60vh;
|
||||
}
|
||||
|
||||
.chatbot-split {
|
||||
flex: 0 0 calc(40vh - 38px);
|
||||
height: calc(40vh - 38px);
|
||||
}
|
||||
|
||||
.toggle-btn span,
|
||||
.toggle-btn {
|
||||
font-size: 0.7rem;
|
||||
padding: 3px 7px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
38
pages/rag.vue
Normal file
38
pages/rag.vue
Normal file
@@ -0,0 +1,38 @@
|
||||
<template>
|
||||
<div class="flex flex-col items-center justify-center h-full gap-6" style="background: var(--nav-bg);">
|
||||
<div class="text-center max-w-md px-6">
|
||||
<div
|
||||
class="inline-flex items-center justify-center w-14 h-14 rounded-2xl mb-5"
|
||||
style="background: var(--nav-bg-alt);"
|
||||
>
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" style="color: var(--nav-text-muted);">
|
||||
<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/>
|
||||
<polyline points="3.27 6.96 12 12.01 20.73 6.96"/>
|
||||
<line x1="12" y1="22.08" x2="12" y2="12"/>
|
||||
</svg>
|
||||
</div>
|
||||
<h1 class="text-2xl font-bold mb-3" style="color: var(--nav-text);">RAG — Retrieval Augmented Generation</h1>
|
||||
<p class="text-sm leading-relaxed mb-6" style="color: var(--nav-text-muted);">
|
||||
Une base de connaissances interrogeable par IA — textes, rapports, manifestes et ressources documentaires sur l'architecture d'écologie politique.
|
||||
</p>
|
||||
<p class="text-xs font-semibold uppercase tracking-widest mb-6" style="color: var(--nav-text-muted); opacity: 0.6;">
|
||||
Bientôt disponible
|
||||
</p>
|
||||
<NuxtLink
|
||||
to="/"
|
||||
class="inline-flex items-center gap-2 px-4 py-2 rounded-xl text-sm font-semibold transition-all hover:opacity-80"
|
||||
style="background: var(--nav-primary); color: var(--nav-text-on-primary);"
|
||||
>
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" aria-hidden="true">
|
||||
<line x1="19" y1="12" x2="5" y2="12"/>
|
||||
<polyline points="12 19 5 12 12 5"/>
|
||||
</svg>
|
||||
Retour à l'écosystème
|
||||
</NuxtLink>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
useHead({ title: 'RAG — AEP (bientôt disponible)' })
|
||||
</script>
|
||||
@@ -1,389 +0,0 @@
|
||||
<template>
|
||||
<div class="signaler-page">
|
||||
<div class="signaler-inner">
|
||||
<NuxtLink to="/" class="back-link">← Retour à la carte</NuxtLink>
|
||||
|
||||
<h1>Signaler un problème</h1>
|
||||
<p class="signaler-subtitle">
|
||||
Un bug, un contenu inapproprié, ou une suggestion ? Décris le problème ci-dessous.
|
||||
</p>
|
||||
|
||||
<!-- Succès -->
|
||||
<div v-if="success" class="success-block" role="status">
|
||||
<div class="success-icon">✓</div>
|
||||
<h2>Merci pour ton retour !</h2>
|
||||
<p>Le signalement a été envoyé. On s'en occupe.</p>
|
||||
<button type="button" class="btn-secondary" @click="reset">Envoyer un autre signalement</button>
|
||||
</div>
|
||||
|
||||
<!-- Formulaire -->
|
||||
<form v-else @submit.prevent="submit" class="signaler-form" novalidate>
|
||||
|
||||
<!-- Catégorie -->
|
||||
<div class="field-group">
|
||||
<fieldset>
|
||||
<legend>Ça concerne</legend>
|
||||
<div class="radio-group">
|
||||
<label
|
||||
v-for="cat in CATEGORIES"
|
||||
:key="cat"
|
||||
class="radio-label"
|
||||
:class="{ active: form.category === cat }"
|
||||
>
|
||||
<input type="radio" :value="cat" v-model="form.category" name="category" />
|
||||
{{ cat }}
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<!-- Description -->
|
||||
<div class="field-group">
|
||||
<label for="description">Description</label>
|
||||
<textarea
|
||||
id="description"
|
||||
v-model="form.description"
|
||||
rows="4"
|
||||
placeholder="Décris le problème..."
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Email (optionnel) -->
|
||||
<div class="field-group">
|
||||
<label for="email">
|
||||
Ton email
|
||||
<span class="label-hint">(optionnel — pour un suivi)</span>
|
||||
</label>
|
||||
<input id="email" v-model="form.email" type="email" placeholder="ton@email.fr" />
|
||||
</div>
|
||||
|
||||
<div v-if="serverError" class="server-error" role="alert">{{ serverError }}</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<NuxtLink to="/" class="btn-secondary">Annuler</NuxtLink>
|
||||
<button
|
||||
type="submit"
|
||||
class="btn-primary"
|
||||
:disabled="submitting || !form.category || !form.description.trim()"
|
||||
>
|
||||
{{ submitting ? 'Envoi...' : 'Envoyer le signalement' }}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const CATEGORIES = ['Une fiche', 'Le chatbot', 'La carte', 'Autre'] as const
|
||||
|
||||
const form = reactive({
|
||||
category: '' as string,
|
||||
description: '',
|
||||
email: '',
|
||||
})
|
||||
|
||||
const submitting = ref(false)
|
||||
const success = ref(false)
|
||||
const serverError = ref('')
|
||||
|
||||
async function submit() {
|
||||
serverError.value = ''
|
||||
submitting.value = true
|
||||
try {
|
||||
await $fetch('/api/report-general', {
|
||||
method: 'POST',
|
||||
body: {
|
||||
category: form.category,
|
||||
description: form.description,
|
||||
email: form.email || undefined,
|
||||
},
|
||||
})
|
||||
success.value = true
|
||||
} catch (e: any) {
|
||||
serverError.value = e?.data?.message || 'Erreur lors de l\'envoi. Réessaie.'
|
||||
} finally {
|
||||
submitting.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function reset() {
|
||||
Object.assign(form, { category: '', description: '', email: '' })
|
||||
success.value = false
|
||||
serverError.value = ''
|
||||
}
|
||||
|
||||
useHead({ title: 'Signaler un problème — AEP' })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* ── Layout ─────────────────────────────────────────────────────────────────── */
|
||||
|
||||
.signaler-page {
|
||||
min-height: 100vh;
|
||||
background: var(--nav-bg);
|
||||
padding: 1.5rem 1rem 120px;
|
||||
}
|
||||
|
||||
.signaler-inner {
|
||||
max-width: 640px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* ── Retour ──────────────────────────────────────────────────────────────────── */
|
||||
|
||||
.back-link {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.25rem;
|
||||
font-size: 0.875rem;
|
||||
color: var(--nav-primary-solid);
|
||||
opacity: 0.7;
|
||||
text-decoration: none;
|
||||
margin-bottom: 1.5rem;
|
||||
transition: opacity 0.15s;
|
||||
}
|
||||
|
||||
.back-link:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* ── En-tête ─────────────────────────────────────────────────────────────────── */
|
||||
|
||||
h1 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text);
|
||||
margin: 0 0 0.5rem;
|
||||
}
|
||||
|
||||
.signaler-subtitle {
|
||||
font-size: 0.9rem;
|
||||
color: var(--nav-text-muted);
|
||||
line-height: 1.5;
|
||||
margin: 0 0 2rem;
|
||||
}
|
||||
|
||||
/* ── Succès ──────────────────────────────────────────────────────────────────── */
|
||||
|
||||
.success-block {
|
||||
background: var(--nav-surface);
|
||||
border: 1px solid rgba(26, 34, 56, 0.15);
|
||||
border-radius: 12px;
|
||||
padding: 2rem 1.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.success-icon {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
background: rgba(26, 34, 56, 0.1);
|
||||
color: var(--nav-text);
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 1.25rem;
|
||||
font-weight: 700;
|
||||
margin: 0 auto 1rem;
|
||||
}
|
||||
|
||||
.success-block h2 {
|
||||
font-size: 1.25rem;
|
||||
font-weight: 700;
|
||||
color: var(--nav-text);
|
||||
margin: 0 0 0.5rem;
|
||||
}
|
||||
|
||||
.success-block p {
|
||||
font-size: 0.9rem;
|
||||
color: var(--nav-text-muted);
|
||||
margin: 0 0 1rem;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
/* ── Formulaire ──────────────────────────────────────────────────────────────── */
|
||||
|
||||
.signaler-form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.25rem;
|
||||
}
|
||||
|
||||
/* ── Champ générique ─────────────────────────────────────────────────────────── */
|
||||
|
||||
.field-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.375rem;
|
||||
}
|
||||
|
||||
.field-group label,
|
||||
.field-group legend {
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
color: var(--nav-text);
|
||||
display: block;
|
||||
}
|
||||
|
||||
.field-group fieldset {
|
||||
border: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.label-hint {
|
||||
font-weight: 400;
|
||||
color: var(--nav-text-muted);
|
||||
font-size: 0.8rem;
|
||||
margin-left: 0.25rem;
|
||||
}
|
||||
|
||||
.field-group input[type="email"],
|
||||
.field-group textarea {
|
||||
width: 100%;
|
||||
padding: 0.625rem 0.875rem;
|
||||
border: 1px solid rgba(26, 34, 56, 0.2);
|
||||
border-radius: 8px;
|
||||
font-size: 0.9rem;
|
||||
color: var(--nav-text);
|
||||
background: var(--nav-surface);
|
||||
font-family: inherit;
|
||||
transition: border-color 0.15s, box-shadow 0.15s;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.field-group input:focus,
|
||||
.field-group textarea:focus {
|
||||
outline: none;
|
||||
border-color: var(--nav-primary-solid);
|
||||
box-shadow: 0 0 0 2px rgba(245, 179, 66, 0.4);
|
||||
}
|
||||
|
||||
.field-group textarea {
|
||||
resize: vertical;
|
||||
min-height: 100px;
|
||||
}
|
||||
|
||||
/* ── Radio (Catégorie) ────────────────────────────────────────────────────────── */
|
||||
|
||||
.radio-group {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.5rem;
|
||||
margin-top: 0.375rem;
|
||||
}
|
||||
|
||||
.radio-label {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.375rem;
|
||||
padding: 0.375rem 0.75rem;
|
||||
border: 1px solid rgba(26, 34, 56, 0.2);
|
||||
border-radius: 6px;
|
||||
font-size: 0.85rem;
|
||||
color: var(--nav-text);
|
||||
background: var(--nav-surface);
|
||||
cursor: pointer;
|
||||
transition: all 0.15s;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.radio-label input[type="radio"] {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.radio-label:hover {
|
||||
border-color: var(--nav-primary-solid);
|
||||
background: var(--nav-bg-alt);
|
||||
}
|
||||
|
||||
.radio-label.active {
|
||||
background: var(--nav-primary);
|
||||
border-color: transparent;
|
||||
color: var(--nav-text-on-primary);
|
||||
}
|
||||
|
||||
/* ── Erreur serveur ──────────────────────────────────────────────────────────── */
|
||||
|
||||
.server-error {
|
||||
padding: 0.875rem 1rem;
|
||||
background: #fdf0ee;
|
||||
border: 1px solid #e74c3c;
|
||||
border-radius: 8px;
|
||||
font-size: 0.875rem;
|
||||
color: #c0392b;
|
||||
}
|
||||
|
||||
/* ── Actions ──────────────────────────────────────────────────────────────────── */
|
||||
|
||||
.form-actions {
|
||||
display: flex;
|
||||
gap: 0.75rem;
|
||||
justify-content: flex-end;
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
padding: 0.75rem 1.5rem;
|
||||
background: var(--nav-primary);
|
||||
color: var(--nav-text-on-primary);
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
font-family: inherit;
|
||||
transition: background 0.15s, opacity 0.15s;
|
||||
}
|
||||
|
||||
.btn-primary:hover:not(:disabled) {
|
||||
background: rgba(26, 34, 56, 0.75);
|
||||
}
|
||||
|
||||
.btn-primary:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
padding: 0.75rem 1.25rem;
|
||||
background: transparent;
|
||||
color: var(--nav-text-muted);
|
||||
border: 1px solid rgba(26, 34, 56, 0.2);
|
||||
border-radius: 8px;
|
||||
font-size: 0.9rem;
|
||||
cursor: pointer;
|
||||
font-family: inherit;
|
||||
text-decoration: none;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
transition: border-color 0.15s, color 0.15s;
|
||||
}
|
||||
|
||||
.btn-secondary:hover {
|
||||
border-color: var(--nav-primary-solid);
|
||||
color: var(--nav-text);
|
||||
}
|
||||
|
||||
/* ── Responsive ──────────────────────────────────────────────────────────────── */
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.signaler-page {
|
||||
padding: 1rem 0.75rem 3rem;
|
||||
}
|
||||
|
||||
.form-actions {
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
|
||||
.btn-primary,
|
||||
.btn-secondary {
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,809 +0,0 @@
|
||||
{
|
||||
"meta": {
|
||||
"version": "2026-05-06-T2",
|
||||
"date_generation": "2026-05-06T18:30:00Z",
|
||||
"total": 24,
|
||||
"repartition": {
|
||||
"recommande": 7,
|
||||
"sous_reserve": 14,
|
||||
"a_eviter": 3
|
||||
},
|
||||
"repartition_type": {
|
||||
"b2c": 16,
|
||||
"appel_offre_public": 8
|
||||
}
|
||||
},
|
||||
"plateformes": [
|
||||
{
|
||||
"id": "hemea",
|
||||
"nom": "hemea",
|
||||
"url": "https://www.hemea.com",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nhemea (anciennement Travauxlib, rebaptisé en 2018) est une plateforme B-Corp certifiée depuis 2020, spécialisée rénovation et architecture. Elle gère 5 000+ projets depuis 2015 et dispose de 100+ experts dédiés. Modèle tiers de confiance avec séquestre des paiements.\n\n## Modèle économique\nCommission côté client de 5-10% (mission partielle) à 10-15% (mission complète) du montant HT. Les architectes intègrent le réseau comme prestataires coordonnés par hemea. La commission prélevée côté professionnel n\u0027est pas documentée — CGV introuvables sur le site (404).\n\n## Pour qui\nArchitectes et artisans cherchant un volume régulier de chantiers de rénovation, acceptant de travailler en sous-traitance coordonnée plutôt qu\u0027en relation directe client. Moins adapté aux indépendants souhaitant garder la main sur leur relation commerciale.\n\n## Points forts\nCertification B-Corp et positionnement RSE documenté. Séquestre des paiements protecteur pour les deux parties. Notoriété forte dans l\u0027écosystème rénovation français. Volume de projets significatif (5 000+ depuis 2015).\n\n## Points de vigilance\nLe modèle place l\u0027architecte en sous-traitant, pas en maître d\u0027œuvre autonome. Verbatims Trustpilot signalent une surfacturation liée à la double marge (hemea + artisan). En cas de litige, hemea se repositionne comme \u0027courtier\u0027, pas maître d\u0027œuvre — responsabilité diluée.",
|
||||
"description_courte": "Courtier BTP B-Corp spécialisé rénovation, les architectes intègrent le réseau comme sous-traitants coordonnés. En cas de litige, hemea se repositionne comme simple courtier — responsabilité diluée.",
|
||||
"scoring": {
|
||||
"remuneration": "⚠️",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "⚠️",
|
||||
"ecologie": "✅",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Modèle tiers de confiance avec commission 5-15% côté client et CGV introuvables — l\u0027architecte est sous-traitant coordonné, pas en relation directe. Opacité sur la rémunération côté professionnel et ambiguïté sur la responsabilité en cas de litige (Trustpilot 4.6/5, 976 avis, verbatims négatifs convergents sur ce point)."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"architecture-interieure",
|
||||
"mar-conseil"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "commission",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.hemea.com",
|
||||
"https://fr.trustpilot.com/review/hemea.com"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "travaux-com",
|
||||
"nom": "Travaux.com",
|
||||
"url": "https://www.travaux.com",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nPlateforme généraliste de mise en relation artisans-particuliers, parmi les plus anciennes en France. 63 207 artisans qualifiés référencés et 206 000+ avis clients. Dispose d\u0027une catégorie architecte (/architecte) mais reste dominée par les artisans BTP généralistes.\n\n## Modèle économique\nLead payant pour les professionnels : publication de projet gratuite pour le particulier, accès aux coordonnées payant pour le pro. Tarifs par lead non publiés, variables selon département et secteur. Upselling commercial vers des offres premium documenté.\n\n## Pour qui\nArtisans BTP généralistes en priorité. Pour les architectes, utilité limitée : visibilité réduite dans un catalogue majoritairement orienté artisanat. Potentiellement utile pour des missions rénovation simples en zone rurale avec peu d\u0027alternatives.\n\n## Points forts\nNotoriété grand public et volume de projets importants. Couverture nationale complète. Pas de commission prélevée sur les honoraires — tarification au lead uniquement. Marque reconnue depuis 20+ ans dans le secteur.\n\n## Points de vigilance\nDémarchage commercial agressif et upselling signalés par des professionnels inscrits. Qualité des leads variable. Note Trustpilot 3.9/5 sur 10 311 avis avec 16% de 1 étoile — révélateur de frustration chez les pros. Tarification opaque.",
|
||||
"description_courte": "Plateforme généraliste leads BTP à notoriété grand public. Architectes noyés parmi les artisans, tarification opaque et démarchage commercial agressif signalé par des professionnels inscrits.",
|
||||
"scoring": {
|
||||
"remuneration": "⚠️",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "⚠️",
|
||||
"ecologie": "❌",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Un ❌ sur l\u0027axe écologie (aucun positionnement ni pédagogie écologique sur une plateforme généraliste BTP) mais les 3 axes critiques restent en ⚠️. Upselling commercial agressif documenté côté pros (Trustpilot 3.9/5, 10 311 avis, 16% de 1 étoile)."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "lead-paye",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.travaux.com/architecte",
|
||||
"https://fr.trustpilot.com/review/travaux.com"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "habitatpresto",
|
||||
"nom": "Habitatpresto",
|
||||
"url": "https://www.habitatpresto.com",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nPlateforme de mise en relation artisans-particuliers fondée en 2005 (21 ans d\u0027expertise). Interface de sélection par département et type de travaux. Équipe commerciale L-V 9h-18h. Couvre essentiellement l\u0027artisanat du bâtiment, avec une présence de profils architecture.\n\n## Modèle économique\nAbonnement mensuel fixe couvrant l\u0027accès illimité aux coordonnées clients. Tarif non publié — personnalisation téléphonique par région et catégorie. Frais de mise en service additionnels. La page /pro/tarifs est accessible mais n\u0027affiche aucun prix.\n\n## Pour qui\nArtisans du bâtiment cherchant des chantiers en volume. Pour les architectes indépendants, l\u0027utilité est très limitée : secteur principalement orienté artisanat, pas architecture de conception ou maîtrise d\u0027œuvre.\n\n## Points forts\nAbonnement à tarif fixe sans surprise par mission. Couverture nationale, présence dans tous les départements. Ancienneté du service (21 ans). Pas de commission par projet — modèle prévisible une fois le prix négocié.\n\n## Points de vigilance\nTarification entièrement opaque : aucun prix publié, devis uniquement par téléphone. Verbatim professionnel Trustpilot sévère : \u0027arnaque, 6 propositions reçues en 6 mois\u0027. Note 4.1/5 mais 22% de 1 étoile. Sortie d\u0027abonnement potentiellement difficile sans test de qualité préalable.",
|
||||
"description_courte": "Abonnement artisans BTP à prix opaque (non publié). Verbatims pros très négatifs : \u0027arnaque, rien en retour en 6 mois.\u0027 Note 4.1/5 mais 22% de 1 étoile — inadapté aux architectes.",
|
||||
"scoring": {
|
||||
"remuneration": "⚠️",
|
||||
"transparence": "❌",
|
||||
"pratiques": "⚠️",
|
||||
"ecologie": "❌",
|
||||
"matching": "❌",
|
||||
"tag_global": "a-eviter",
|
||||
"justification_tag": "Transparence ❌ : aucun prix publié sur la page /pro/tarifs malgré une page dédiée — opacité tarifaire volontaire documentée (scraping T1 + page accessible sans prix). Matching ❌ : verbatim Trustpilot professionnel crédible (\u00276 propositions en 6 mois pour un abonnement coûteux\u0027, 1 732 avis, 22% de 1 étoile). Deux ❌ dont un critique suffisent à justifier \u0027à éviter\u0027."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "abonnement",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.habitatpresto.com/pro/tarifs",
|
||||
"https://fr.trustpilot.com/review/habitatpresto.com"
|
||||
],
|
||||
"flag_validation_jules": true,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "houzz-pro",
|
||||
"nom": "Houzz Pro",
|
||||
"url": "https://www.houzz.fr",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nSolution SaaS tout-en-un pour professionnels de la rénovation et du design : gestion de projets, marketing, profil premium, publicité ciblée, plans 3D, devis, CRM, portail client. Plateforme américaine avec forte adoption internationale. 17 727 avis Trustpilot (4.1/5).\n\n## Modèle économique\nAbonnement mensuel couvrant l\u0027ensemble des fonctionnalités SaaS : portfolio, CRM, leads, publicité ciblée. Tarif estimé à ~250€/mois selon verbatim Trustpilot. Pas de commission sur les honoraires — l\u0027architecte conserve 100% de sa rémunération de mission.\n\n## Pour qui\nArchitectes d\u0027intérieur, architectes confirmés et studios cherchant un outil tout-en-un (portfolio + CRM + leads). Moins adapté aux architectes débutants ou aux profils cherchant uniquement des leads ponctuels sans investissement SaaS.\n\n## Points forts\nOutil SaaS complet (portfolio, CRM, devis, plan 3D intégrés). Forte notoriété internationale, large audience de particuliers. Pas de commission sur les missions — l\u0027architecte conserve 100% de ses honoraires.\n\n## Points de vigilance\nContrat difficile à résilier selon des verbatims Trustpilot : menace de poursuites judiciaires en cas de résiliation signalée. Coût mensuel significatif (~250€/mois estimé). Outil SaaS de gestion avant tout — la génération de leads est un effet secondaire, pas la valeur principale.",
|
||||
"description_courte": "SaaS tout-en-un portfolio+CRM+leads pour architectes confirmés, sans commission sur honoraires. Contrat difficile à résilier — verbatim Trustpilot signale des menaces judiciaires en cas de résiliation anticipée.",
|
||||
"scoring": {
|
||||
"remuneration": "✅",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "⚠️",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Rémunération ✅ (abonnement fixe, 0% commission sur les honoraires) mais pratiques de résiliation contractuelle problématiques signalées dans les verbatims Trustpilot (17 727 avis, 4.1/5). Trois axes critiques en ⚠️ — outil solide pour le portfolio mais engagement financier et contractuel à évaluer avec soin."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"architecture-interieure"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "abonnement",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.houzz.fr/pro",
|
||||
"https://fr.trustpilot.com/review/www.houzz.com"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "hello-archi",
|
||||
"nom": "Hello Archi",
|
||||
"url": "https://hello-archi.com",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nPlateforme de mise en relation complète particuliers-architectes qualifiés, basée à Périgueux. Gère l\u0027intégralité du projet : sélection architecte, échanges, signature de contrat et paiement. Jusqu\u0027à 3 architectes mis en contact par projet. Couvre projets résidentiels et commerciaux, permis de construire inclus.\n\n## Modèle économique\nCommission sur le montant de la mission (taux non public). CGV documentées et accessibles sur /cgu. Pénalité de 100% des honoraires si l\u0027architecte signe un contrat hors plateforme sans le déclarer sous 10 jours. Frais administratifs de 350€ si le client est silencieux 15+ jours.\n\n## Pour qui\nArchitectes souhaitant une mise en relation structurée avec suivi de projet intégré (contrat, paiement). Adapté aux profils acceptant les contraintes contractuelles. Moins adapté aux freelances souhaitant une relation commerciale totalement libre.\n\n## Points forts\nCGV accessibles et détaillées — rare parmi les plateformes B2C du panel. Accompagnement expert tout au long du projet. Couverture nationale complète. Commission uniquement à la contractualisation, pas de frais d\u0027inscription documentés.\n\n## Points de vigilance\nPénalité de 100% des honoraires si contrat hors plateforme non déclaré sous 10 jours — clause très contraignante. Mécanisme de médiation en litige \u0027promis mais pas encore opérationnel\u0027 selon les CGV. Commission exacte non publiée.",
|
||||
"description_courte": "Mise en relation avec CGV claires mais clause contraignante : pénalité 100% des honoraires si contrat signé hors plateforme sans déclaration sous 10 jours. Commission non publiée.",
|
||||
"scoring": {
|
||||
"remuneration": "⚠️",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "⚠️",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Cinq axes en ⚠️ : commission non publiée, mécanisme de médiation non opérationnel selon les CGV elles-mêmes, et clause de pénalité de 100% des honoraires si contrat hors plateforme non déclaré sous 10 jours — contrainte contractuelle significative sans contrepartie documentée."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"architecture-interieure"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "commission",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://hello-archi.com",
|
||||
"https://hello-archi.com/cgu"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "archidvisor",
|
||||
"nom": "Archidvisor",
|
||||
"url": "https://www.archidvisor.com",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nMarketplace archi et design fondée en novembre 2016 à Bordeaux par un architecte de formation. Connecte particuliers et entreprises avec architectes, architectes d\u0027intérieur, décorateurs, paysagistes et maîtres d\u0027œuvre. 2 200+ agences inscrites. Protection juridique MMA incluse. Lauréate des Rencontres des Entrepreneurs.\n\n## Modèle économique\nFreemium : inscription et référencement entièrement gratuits. Commission de 7-9% du montant total uniquement à la contractualisation (no cure no pay). Option abonnement Premium 1 499€/an ou 299€/mois pour visibilité accrue. Aucun frais si aucun projet conclu.\n\n## Pour qui\nArchitectes, architectes d\u0027intérieur, paysagistes et maîtres d\u0027œuvre cherchant une mise en relation sans investissement initial. Particulièrement adapté aux débutants (entrée sans frais) ou aux agences confirmées investissant dans le Premium pour la visibilité.\n\n## Points forts\nModèle no cure no pay — commission uniquement si projet signé. Entrée gratuite sans risque. Fondée par un architecte — compréhension du métier. Protection juridique MMA incluse. Couvre plusieurs profils (archi, déco, paysage).\n\n## Points de vigilance\nArchidvisor obtient une licence illimitée dans le temps pour utiliser photos et plans publiés à des fins marketing. Interdiction de contacter directement les clients hors plateforme. Verbatims Trustpilot signalent des profils avec projets IA et budgets irréalistes (3.9/5, 198 avis).",
|
||||
"description_courte": "Plateforme fondée par un architecte, modèle no cure no pay (commission 7-9% à la signature seulement). Attention : licence illimitée sur vos photos et plans pour usage marketing Archidvisor.",
|
||||
"scoring": {
|
||||
"remuneration": "✅",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "⚠️",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Rémunération ✅ : commission 7-9% no cure no pay — modèle favorable avec marge \u003e91% conservée. Mais clause de licence illimitée sur photos/plans (CGV vérifiées sur /p/cgu-cgv) et verbatims Trustpilot professionnels mitigés sur la qualité des leads (3.9/5, 198 avis). Quatre axes en ⚠️."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"architecture-interieure",
|
||||
"paysage"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "freemium",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://www.archidvisor.com/p/cgu-cgv",
|
||||
"https://www.ooti.co/fr/blogs/networking-plateformes-architecture",
|
||||
"https://fr.trustpilot.com/review/archidvisor.com"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bam-archi",
|
||||
"nom": "BAM Archi",
|
||||
"url": "https://www.bam.archi",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nService d\u0027accompagnement rénovation et construction à destination des particuliers. Sélection d\u0027architectes et artisans pour les clients via matching personnalisé. ~3 000 projets/an gérés, 6 000 agences référencées. Présence Paris, Marseille, Bordeaux, Lyon. Applications complémentaires : Aglo et Aglo Carbone (RE2020).\n\n## Modèle économique\nModèle économique non documenté publiquement. La grille tarifaire pour les professionnels n\u0027est pas accessible sur le site. Marketplace avec accompagnement client — commission ou frais d\u0027inscription pour les architectes à confirmer directement auprès de BAM.\n\n## Pour qui\nArchitectes confirmés dans les grandes métropoles françaises (Paris, Marseille, Bordeaux, Lyon) cherchant un volume de projets rénovation-construction. Fort intérêt pour les profils maîtrisant les outils RE2020 et bilan carbone.\n\n## Points forts\nIntégration des outils Aglo Carbone (RE2020) — signal positif sur l\u0027engagement environnemental. Accompagnement structuré des projets. Présence métropolitaine dense. Volume de projets significatif (~3 000/an).\n\n## Points de vigilance\nModèle économique entièrement opaque : impossible d\u0027évaluer le coût réel pour l\u0027architecte sans contact direct. 6 000 agences référencées = forte concurrence interne pour chaque lead. Pas de feedback communauté disponible (Trustpilot absent).",
|
||||
"description_courte": "Accompagnement rénovation avec outils RE2020 et Aglo Carbone intégrés. Modèle économique entièrement opaque — coût pour l\u0027architecte impossible à évaluer sans contact direct avec BAM.",
|
||||
"scoring": {
|
||||
"remuneration": "⚠️",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "⚠️",
|
||||
"ecologie": "✅",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Écologie ✅ : intégration d\u0027Aglo Carbone (RE2020) — effort concret et documenté sur la transition écologique. Mais modèle économique entièrement opaque pour les professionnels (aucune grille tarifaire publique) et absence totale de feedback communauté."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"architecture-interieure"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "gratuit",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.bam.archi",
|
||||
"https://www.ooti.co/fr/blogs/networking-plateformes-architecture"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "archibien",
|
||||
"nom": "Archibien",
|
||||
"url": "https://archibien.com",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nPlateforme de courtage mettant des porteurs de projets en relation avec 3 architectes locaux en concurrence simultanée. Fondée ~2016. Qualification préalable du projet (faisabilité, budget). Consultations initiales offertes aux clients. Présente dans les grandes métropoles françaises. Secteurs : neuf, extension, rénovation, commercial.\n\n## Modèle économique\nModèle broker : les clients paient pour les services (consultation, étude de faisabilité). Les architectes semblent payer à la contractualisation ou pour accéder aux projets — grille tarifaire non accessible, CGV introuvables (/cgv → 404). Opacité tarifaire totale côté professionnel.\n\n## Pour qui\nÀ évaluer avec prudence pour les architectes indépendants : le modèle de 3 architectes en concurrence implique un travail préparatoire sans garantie de mission. Adapté uniquement aux agences ayant des ressources commerciales suffisantes pour absorber les pertes sur concours non retenus.\n\n## Points forts\nQualification préalable du projet côté client (faisabilité et budget évalués en amont). Présence dans les grandes métropoles. Pas de feedback négatif public visible — profil Trustpilot non revendiqué (0 avis).\n\n## Points de vigilance\nCGV introuvables (404) : aucune condition contractuelle vérifiable. Modèle \u00273 archis en concurrence\u0027 avec consultations offertes au client : risque de travail de conception non rémunéré, contraire au Code de déontologie. Opacité tarifaire totale.",
|
||||
"description_courte": "Modèle 3 architectes en concurrence avec consultations offertes. CGV introuvables (/cgv → 404) — conditions contractuelles invérifiables, risque de travail non rémunéré non documenté.",
|
||||
"scoring": {
|
||||
"remuneration": "⚠️",
|
||||
"transparence": "❌",
|
||||
"pratiques": "⚠️",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "a-eviter",
|
||||
"justification_tag": "Transparence ❌ : CGV introuvables (/cgv → 404) — aucune condition contractuelle vérifiable publiquement, opacité totale sur les conditions d\u0027utilisation (documenté lors du scraping T1). Modèle de concurrence simultanée entre 3 architectes avec consultations offertes soulève des questions déontologiques. Un axe critique ❌ suffit pour le tag \u0027à éviter\u0027."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"architecture-interieure"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "commission",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://archibien.com",
|
||||
"https://www.ooti.co/fr/blogs/networking-plateformes-architecture"
|
||||
],
|
||||
"flag_validation_jules": true,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "archionline",
|
||||
"nom": "Archionline",
|
||||
"url": "https://www.archionline.com",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nPlateforme de mise en relation particuliers-architectes appartenant au groupe Batiweb. Siège à Paris (19 rue d\u0027Hauteville, 75010). Déploiement d\u0027architectes sur site sous 1 semaine. Garantie décennale et protection juridique AXA incluses. 600+ plans de maison disponibles. Active depuis au moins 2017.\n\n## Modèle économique\nCommission de 5-15% sur le montant total des travaux selon la nature de la mission (conception, permis de construire, analyse entreprises). Étude initiale gratuite pour le client. Taux documenté via source tierce (blog Hello Archi, janvier 2025).\n\n## Pour qui\nEn théorie, architectes cherchant des projets résidentiels clés en main. En pratique, les retours Trustpilot très négatifs et les pratiques de démarchage abusif signalées exposent les architectes affiliés à des risques réputationnels significatifs.\n\n## Points forts\nCommission documentée dans une fourchette acceptable (5-15%). Garantie décennale et protection AXA incluses. Couverture nationale. Intégration Groupe Batiweb — synergies avec des médias pro du bâtiment.\n\n## Points de vigilance\nNote Trustpilot de 2.4/5 sur 207 avis — parmi les plus basses du panel. Démarchage abusif signalé : harcèlement téléphonique après dépôt de coordonnées client. Permis de construire non conformes aux PLU documentés. Ces pratiques exposent les architectes affiliés.",
|
||||
"description_courte": "Commission 5-15% documentée mais note Trustpilot 2.4/5 sur 207 avis. Démarchage abusif et permis non conformes aux PLU signalés — risque réputationnel sérieux pour les architectes affiliés.",
|
||||
"scoring": {
|
||||
"remuneration": "✅",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "❌",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "❌",
|
||||
"tag_global": "a-eviter",
|
||||
"justification_tag": "Pratiques ❌ : démarchage abusif (harcèlement téléphonique) et permis de construire non conformes aux PLU documentés dans les verbatims Trustpilot (2.4/5, 207 avis, sources publiques vérifiables). Matching ❌ convergent avec la note Trustpilot parmi les plus basses du panel. Un axe critique ❌ (Pratiques) suffit pour le tag \u0027à éviter\u0027."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"mar-conseil"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "commission",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.archionline.com",
|
||||
"https://blog.hello-archi.com/top-3-plateformes-pour-engager-un-architecte-a-moindre-cout/",
|
||||
"https://fr.trustpilot.com/review/archionline.com"
|
||||
],
|
||||
"flag_validation_jules": true,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "trouver-mon-architecte",
|
||||
"nom": "Trouver-Mon-Architecte",
|
||||
"url": "https://www.trouver-mon-architecte.fr",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nAnnuaire et plateforme de mise en relation, se présentant comme \u0027#1 annuaire d\u0027architectes qualifiés en France\u0027. Service gratuit pour les particuliers. Couverture nationale complète (95 départements). Les particuliers reçoivent 2-3 architectes adaptés sous 24-48h. 1 204 abonnés LinkedIn.\n\n## Modèle économique\nFreemium : gratuit sans engagement pour les particuliers. Abonnement payant pour les architectes inscrits (tarif non publié), incluant des formations professionnelles continues. Pas de commission prélevée sur les honoraires — l\u0027architecte conserve 100% de sa rémunération de mission.\n\n## Pour qui\nArchitectes indépendants souhaitant développer leur activité sans commission par mission. Particulièrement adapté aux profils intéressés par la formation continue intégrée. Couverture nationale utile pour les architectes hors grandes métropoles.\n\n## Points forts\nPas de commission sur les honoraires — abonnement fixe. Formation continue incluse dans l\u0027abonnement (valeur ajoutée différenciante). Note 4.5/5 sur 361 avis Trustpilot. Verbatim archi positif documenté : ~40 demandes, 4 contrats signés.\n\n## Points de vigilance\nTarifs abonnement non publiés — à vérifier avant tout engagement. Taux de conversion estimé à 10% (4 contrats sur 40 demandes selon verbatim) — en dessous du seuil optimal. Veille marchés publics annoncée mais détails peu documentés.",
|
||||
"description_courte": "Abonnement archi incluant formations professionnelles, sans commission sur honoraires. Taux de conversion ~10% selon verbatim (4/40 demandes). Tarifs non publiés à vérifier avant engagement.",
|
||||
"scoring": {
|
||||
"remuneration": "✅",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "✅",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Rémunération ✅ (0% commission, abonnement fixe) et Pratiques ✅ (formations incluses, pas de mise en concurrence, structure respectueuse du métier). Mais tarifs abonnement non publiés et taux de conversion ~10% (en dessous du seuil ✅ de \u003e20%). Trois axes en ⚠️ — tag sous-réserve."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"urbanisme",
|
||||
"mar-conseil"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "freemium",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.trouver-mon-architecte.fr",
|
||||
"https://fr.trustpilot.com/review/trouver-mon-architecte.fr"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "archiliste",
|
||||
"nom": "Archiliste",
|
||||
"url": "https://www.archiliste.fr",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nAnnuaire et plateforme de présentation des architectes de France. 26 660 agences enregistrées. Publication de projets gratuite pour tous les professionnels. Héberge également actualités, ressources formations et événements networking. Secteurs couverts : résidentiel, commercial, intérieur, rénovation, équipements publics.\n\n## Modèle économique\nFreemium : inscription et publication de projets entièrement gratuits. Fonctionnalités avancées (marketing, publicité, portail pro) payantes — tarifs non précisés. Revenu basé sur la visibilité premium et les contacts marketing.\n\n## Pour qui\nArchitectes souhaitant une vitrine portfolio gratuite à l\u0027échelle nationale. Utile pour la présence en ligne sans engagement financier. Moins utile pour la génération directe de leads : plateforme passive sans matching actif.\n\n## Points forts\nInscription et présence de base entièrement gratuites. Large base d\u0027agences (26 660) = crédibilité annuaire. Présence dans les secteurs public et privé. Ressources et événements networking en complément.\n\n## Points de vigilance\nPlateforme annuaire passive : aucun mécanisme de mise en relation active ou de génération de leads qualifiés. 26 660 agences enregistrées signifient une visibilité très diluée sans abonnement premium. Pas de feedback communauté disponible.",
|
||||
"description_courte": "Annuaire national avec présence de base gratuite pour 26 660 agences. Vitrine portfolio sans génération de leads active — utile en complément, pas comme canal de prospection principal.",
|
||||
"scoring": {
|
||||
"remuneration": "✅",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "✅",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Rémunération ✅ (inscription gratuite, 0% commission) et Pratiques ✅ (annuaire passif respectueux, pas de mise en concurrence). Trois axes en ⚠️ dont Matching — la plateforme est passive et ne génère pas de leads qualifiés. Utile comme présence complémentaire."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"architecture-interieure",
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "freemium",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.archiliste.fr/annuaire"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "architectes-pour-tous",
|
||||
"nom": "Architectes pour tous (CNOA)",
|
||||
"url": "https://www.architectes-pour-tous.fr",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nService officiel du Conseil National de l\u0027Ordre des Architectes (CNOA). Référence l\u0027ensemble des architectes exerçant légalement en France. Recherche par profil (particulier, pro, collectivité), type de projet, proximité géographique. Carte interactive. Intégré aux dispositifs France Rénov\u0027 et MaPrimeRénov\u0027.\n\n## Modèle économique\nTotalement gratuit pour les particuliers et pour les architectes. L\u0027inscription à l\u0027Ordre est une obligation légale — la plateforme n\u0027implique aucun coût supplémentaire. Aucune commission, aucun abonnement, aucun frais caché. Financé par les cotisations ordinales.\n\n## Pour qui\nTous les architectes inscrits à l\u0027Ordre : la présence est automatique. Particulièrement pertinent pour les architectes spécialisés MAR ou rénovation énergétique, directement référencés dans les dispositifs publics d\u0027aide à la rénovation.\n\n## Points forts\nGratuit, institutionnel, référencement automatique pour tout architecte inscrit à l\u0027Ordre. Intégration aux dispositifs publics (France Rénov\u0027, MaPrimeRénov\u0027). Crédibilité institutionnelle maximale. Couverture nationale totale.\n\n## Points de vigilance\nAnnuaire passif institutionnel : ne génère pas de leads directs. Tous les architectes inscrits à l\u0027Ordre y figurent — différenciation nulle. Outil de présence publique minimum, pas un canal de prospection actif.",
|
||||
"description_courte": "Annuaire officiel du Conseil de l\u0027Ordre, gratuit et intégré à France Rénov\u0027 et MaPrimeRénov\u0027. Présence automatique pour tout architecte inscrit — ne génère pas de leads directs.",
|
||||
"scoring": {
|
||||
"remuneration": "✅",
|
||||
"transparence": "✅",
|
||||
"pratiques": "✅",
|
||||
"ecologie": "✅",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "recommande",
|
||||
"justification_tag": "Quatre axes en ✅ : gratuit, institutionnel, intégré aux dispositifs de rénovation énergétique (France Rénov\u0027, MaPrimeRénov\u0027), pratiques respectueuses de l\u0027Ordre. Seul le matching est en ⚠️ du fait de la nature passive de l\u0027annuaire — mais la présence y est obligatoire et sans coût."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"construction-neuve",
|
||||
"urbanisme",
|
||||
"mar-conseil",
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "gratuit",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.architectes-pour-tous.fr"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pipcke",
|
||||
"nom": "Pipcke",
|
||||
"url": "https://pipcke.fr",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nPlateforme d\u0027architecture d\u0027intérieur et décoration en ligne. Met en relation clients avec architectes d\u0027intérieur et décorateurs via mood boards, shopping list et conception 3D photoréaliste. 1 000+ espaces transformés. 500+ marques partenaires avec remises négociées. Approche projet par pièce.\n\n## Modèle économique\nForfait par pièce : Essentiel 90€ (1 sem, mood boards + shopping list), Incontournable 155€ (1-2 sem, +3D + révisions), Fantastique 235€ (2-3 sem, 2 designers, 3D illimitées). Revenus complémentaires via partenariats marques mobilier. Tarifs publics et clairement affichés.\n\n## Pour qui\nArchitectes d\u0027intérieur et décorateurs cherchant un flux de projets de petite envergure (pièce unique). Non adapté aux architectes HMONP ou MOE : scope exclusivement déco, sans permis de construire ni maîtrise d\u0027œuvre.\n\n## Points forts\nTarification entièrement publique et transparente — rare dans le panel B2C. Modèle clair sans surprise. Partenariats marques mobilier avec remises clients. Approche structurée par pièce facilitant la gestion du temps professionnel.\n\n## Points de vigilance\nRevenus unitaires faibles (90-235€/pièce) pour 1-3 semaines de travail. Scope exclusivement déco intérieure. Partenariats marques peuvent orienter les recommandations vers des produits sponsors. Pas de feedback communauté disponible.",
|
||||
"description_courte": "Plateforme déco par pièce, tarifs publics et clairs (90-235€). Réservée aux architectes d\u0027intérieur — scope exclusivement déco, revenus unitaires faibles pour 1-3 semaines de travail.",
|
||||
"scoring": {
|
||||
"remuneration": "⚠️",
|
||||
"transparence": "✅",
|
||||
"pratiques": "✅",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Transparence ✅ (tarification publique, claire, affichée) et Pratiques ✅ (pas de concours, scope honnête, modèle sain). Rémunération en ⚠️ car les forfaits 90-235€/pièce génèrent des revenus unitaires faibles pour 1-3 semaines de travail de conception. Scope très limité (déco intérieure uniquement)."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"architecture-interieure"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "abonnement",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://pipcke.fr"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "moncoachdeco",
|
||||
"nom": "MonCoachDéco",
|
||||
"url": "https://moncoachdeco.com",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nMarketplace numérique mettant en relation architectes d\u0027intérieur et décorateurs avec des clients. Inscription de base gratuite. Les professionnels reçoivent des leads projets correspondant à leur localisation et compétences, puis choisissent quels projets accepter.\n\n## Modèle économique\nFreemium : profil de base gratuit. Accès aux coordonnées clients payant (achat à la carte ou abonnement illimité). Options additionnelles : nom de domaine personnalisé, logiciel comptable intégré. Tarifs non publiés sur le site principal.\n\n## Pour qui\nArchitectes d\u0027intérieur et décorateurs souhaitant un flux de leads qualifiés dans leur zone géographique. Non adapté aux architectes HMONP ou MOE : scope exclusivement architecture intérieure et décoration, sans maîtrise d\u0027œuvre ni permis de construire.\n\n## Points forts\nLiberté de sélection : le professionnel choisit les projets qu\u0027il accepte. Inscription sans frais initiale. Ciblage géographique et par compétences. Services additionnels (domaine, comptabilité) intégrés en option.\n\n## Points de vigilance\nTarifs non publiés — impossible d\u0027évaluer le rapport coût/bénéfice avant inscription. Coût par lead potentiellement élevé si le taux de conversion est faible. Pas de feedback communauté disponible — qualité des leads inconnue.",
|
||||
"description_courte": "Leads architectes d\u0027intérieur avec liberté de sélection des projets, inscription gratuite. Tarifs d\u0027accès aux coordonnées non publiés — coût réel impossible à évaluer sans inscription.",
|
||||
"scoring": {
|
||||
"remuneration": "⚠️",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "✅",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Pratiques ✅ : liberté totale de sélection des projets, pas de mise en concurrence, inscription sans frais initiale. Mais tarifs non publiés (⚠️ Transparence) et absence de feedback communauté rendent impossible l\u0027évaluation du rapport coût/efficacité."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"architecture-interieure"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "freemium",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://moncoachdeco.com/plateforme-decorateur-architecte"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "eldo-pro",
|
||||
"nom": "Eldo / EldoPro",
|
||||
"url": "https://www.eldo.com",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nPlateforme d\u0027avis entre voisins et de mise en relation avec des professionnels qualifiés du bâtiment. 1 200 pros qualifiés en France, 8 000+ projets accompagnés. Présence dans 7 grandes métropoles (Toulouse, Paris, Bordeaux, Marseille, Lyon, Montpellier, Lille). Coordonnées transmises uniquement au professionnel choisi par le client.\n\n## Modèle économique\nLead generation pour EldoPro (artisans individuels) et EldoNetwork (réseaux et marques). Tarifs non publiés. L\u0027architecte paie pour les leads reçus selon un modèle à la demande ou abonnement — conditions exactes à confirmer directement.\n\n## Pour qui\nArtisans BTP généralistes en priorité. Les architectes sont absents de la description principale de la plateforme — leur présence est marginale et non valorisée dans l\u0027offre Eldo.\n\n## Points forts\nSystème d\u0027avis entre voisins = leads avec recommandation sociale. Coordonnées transmises uniquement au professionnel choisi (pas de multi-diffusion massive). Présence métropolitaine dense dans 7 grandes villes.\n\n## Points de vigilance\nArchitectes très peu représentés dans l\u0027offre principale. Modèle orienté artisanat BTP, pas architecture de conception ou maîtrise d\u0027œuvre. Tarifs opaques. Pas de feedback communauté disponible pour évaluer la qualité des leads archi.",
|
||||
"description_courte": "Plateforme leads artisans BTP avec recommandations entre voisins. Architectes absents de l\u0027offre principale — inadapté aux missions de conception ou maîtrise d\u0027œuvre.",
|
||||
"scoring": {
|
||||
"remuneration": "⚠️",
|
||||
"transparence": "⚠️",
|
||||
"pratiques": "⚠️",
|
||||
"ecologie": "⚠️",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Cinq axes en ⚠️ : tarification opaque, architectes marginaux dans l\u0027offre principale, pas de feedback communauté. Seul signal positif : coordonnées transmises uniquement au pro choisi (pas de revente massive). Inadapté comme canal principal pour les architectes."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "lead-paye",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.eldo.com"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "france-renov-annuaire",
|
||||
"nom": "France Rénov\u0027 — Annuaire pro",
|
||||
"url": "https://france-renov.gouv.fr/annuaires-professionnels/artisan-rge-architecte",
|
||||
"type": "b2c-mise-en-relation",
|
||||
"description": "## Présentation\nAnnuaire officiel ANAH permettant aux particuliers de trouver des professionnels RGE et architectes référencés pour travaux de rénovation énergétique. Service public entièrement gratuit. Mécanisme anti-fraude intégré. Référence obligatoire pour les chantiers éligibles MaPrimeRénov\u0027.\n\n## Modèle économique\nTotalement gratuit, financé par l\u0027État (ANAH). Aucune commission ni frais pour les architectes référencés. L\u0027inscription nécessite une certification MAR ou qualification RGE pertinente — elle-même conditionnée à des critères professionnels rigoureux.\n\n## Pour qui\nArchitectes certifiés MAR (Mon Accompagnateur Rénov\u0027) ou travaillant sur des projets de rénovation énergétique performante. Très pertinent pour les profils spécialisés énergie. Peu d\u0027intérêt pour les architectes exclusivement orientés neuf ou décoration.\n\n## Points forts\nService public gratuit adossé aux dispositifs MaPrimeRénov\u0027. Crédibilité institutionnelle maximale. Seuls les pros certifiés RGE/MAR référencés — signal qualité pour les clients. Génère des leads ciblés sur la rénovation énergétique.\n\n## Points de vigilance\nAnnuaire passif — c\u0027est le particulier qui recherche, pas un matching actif. Pertinent uniquement pour les architectes certifiés MAR ou RGE. Génération de leads limitée si peu de communication publique sur le dispositif.",
|
||||
"description_courte": "Annuaire officiel ANAH gratuit pour architectes certifiés MAR ou RGE. Leads ciblés rénovation énergétique via MaPrimeRénov\u0027. Peu pertinent pour les profils non certifiés.",
|
||||
"scoring": {
|
||||
"remuneration": "✅",
|
||||
"transparence": "✅",
|
||||
"pratiques": "✅",
|
||||
"ecologie": "✅",
|
||||
"matching": "⚠️",
|
||||
"tag_global": "recommande",
|
||||
"justification_tag": "Quatre axes en ✅ : service public gratuit (ANAH), institutionnel, intégré MaPrimeRénov\u0027, focalisé rénovation énergétique (MAR, RGE). Seul le matching est en ⚠️ car la plateforme est passive et le volume de leads dépend des campagnes de communication publique sur le dispositif."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"renovation",
|
||||
"mar-conseil"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "gratuit",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://france-renov.gouv.fr/annuaires-professionnels/artisan-rge-architecte"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "boamp",
|
||||
"nom": "BOAMP",
|
||||
"url": "https://www.boamp.fr",
|
||||
"type": "appel-offre-public",
|
||||
"description": "## Présentation\nBulletin Officiel des Annonces des Marchés Publics — référence institutionnelle pour tous les marchés publics formels français et européens. Géré directement par l\u0027État. Publie les avis publics à la concurrence (AAPC), avis de concession et avis d\u0027attribution.\n\n## Modèle économique\nService public entièrement gratuit. Veille personnalisée jusqu\u0027à 10 alertes configurables. Notification quotidienne des nouveaux avis. Accès aux DCE possible. Aucun frais pour les entreprises candidates, quel que soit le volume d\u0027AO consultés.\n\n## Pour qui\nTous les architectes et bureaux d\u0027études souhaitant répondre à des marchés publics de maîtrise d\u0027œuvre. Source primaire officielle — indispensable pour toute démarche sérieuse de réponse aux AO publics. Complémentaire aux agrégateurs spécialisés.\n\n## Points forts\nSource officielle et exhaustive de tous les marchés publics formels. Totalement gratuit. Alertes email personnalisées (10 profils max). Accès aux DCE directement. Référence légale — toute publication y est obligatoire.\n\n## Points de vigilance\nInterface moins ergonomique que les agrégateurs spécialisés (AppelArchi, Instao). Pas de résumés IA ni de filtres avancés par profil archi. Nécessite une veille active ou des alertes précises pour être efficace.",
|
||||
"description_courte": "Source officielle gratuite de tous les marchés publics français. Interface brute — à coupler avec un agrégateur spécialisé (AppelArchi, Instao) pour une veille efficace adaptée aux profils archi.",
|
||||
"scoring": {
|
||||
"remuneration": null,
|
||||
"transparence": "✅",
|
||||
"pratiques": null,
|
||||
"ecologie": null,
|
||||
"matching": "✅",
|
||||
"tag_global": "recommande",
|
||||
"justification_tag": "Scoring simplifié 2 axes (plateforme appels d\u0027offres publics). Source officielle de l\u0027État : transparence totale (✅) et couverture exhaustive de tous les marchés formels (✅ Matching)."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"urbanisme",
|
||||
"mar-conseil",
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "freemium",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.boamp.fr"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "e-marchespublics",
|
||||
"nom": "E-marchespublics.com",
|
||||
"url": "https://www.e-marchespublics.com",
|
||||
"type": "appel-offre-public",
|
||||
"description": "## Présentation\nPlateforme française d\u0027agrégation marchés publics permettant découverte d\u0027AO et soumission de candidatures électroniques. Agrège BOAMP, JOUE et sources régionales. 991 762 entreprises inscrites. 58,8M documents téléchargés. 600 000+ opportunités annuelles. Réponse dématérialisée sécurisée en 5 minutes.\n\n## Modèle économique\nFreemium : compte gratuit avec recherche, alertes email quotidiennes et dépôt de candidatures. Fonctionnalités avancées payantes (monitoring détaillé, complétion auto formulaires, filtres avancés). Accès complet aux fonctions essentielles sans engagement financier.\n\n## Pour qui\nArchitectes et bureaux d\u0027études souhaitant une veille AO mutualisée et une soumission dématérialisée simplifiée. Marchés MOE et architecture confirmés dans les résultats (ex: Institut Bergonie, Logeal Immobilière).\n\n## Points forts\nAgrégation multi-sources (BOAMP + JOUE + régionaux). Dépôt de candidature dématérialisé intégré. Large base d\u0027entreprises inscrites (991k). Gratuit pour les fonctions essentielles. Marchés MOE archi confirmés.\n\n## Points de vigilance\nFonctionnalités avancées payantes sans tarifs précisés. Volume très large (600k+ AO/an) nécessitant des filtres précis pour isoler les marchés MOE archi pertinents.",
|
||||
"description_courte": "Agrégateur multi-sources marchés publics (BOAMP + JOUE + régionaux) avec soumission dématérialisée gratuite. Marchés MOE archi confirmés — fonctions avancées payantes sans tarifs affichés.",
|
||||
"scoring": {
|
||||
"remuneration": null,
|
||||
"transparence": "✅",
|
||||
"pratiques": null,
|
||||
"ecologie": null,
|
||||
"matching": "✅",
|
||||
"tag_global": "recommande",
|
||||
"justification_tag": "Scoring simplifié 2 axes (plateforme appels d\u0027offres publics). Modèle freemium clair avec accès gratuit documenté (✅ Transparence) et agrégation multi-sources avec marchés MOE archi confirmés (✅ Matching)."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "freemium",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.e-marchespublics.com"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "centrale-des-marches",
|
||||
"nom": "Centrale des Marchés",
|
||||
"url": "https://centraledesmarches.com",
|
||||
"type": "appel-offre-public",
|
||||
"description": "## Présentation\nPlateforme de veille marchés publics et privés lancée en 2021 par Medialex. Agrège BOAMP, JOUE, presse régionale et marchés privés. 16 005 avis actifs, 48 857 acheteurs publics identifiés. 1 515 opportunités listées en catégorie architecture/construction/ingénierie. Formations marchés publics disponibles.\n\n## Modèle économique\nFreemium : alertes email gratuites pour les entreprises candidates. Solutions payantes de dématérialisation pour les acheteurs publics. Tarifs d\u0027abonnement pour les fonctions avancées non précisés sur la homepage.\n\n## Pour qui\nArchitectes souhaitant couvrir à la fois les marchés publics et privés dans une seule interface. La double couverture est un différenciateur intéressant pour les profils cherchant un flux diversifié de projets.\n\n## Points forts\nDouble couverture marchés publics + privés — rare dans le panel. 1 515 opportunités archi/construction. Alertes email gratuites. Formations marchés publics disponibles — valeur ajoutée pour les profils débutants en AO.\n\n## Points de vigilance\nTarifs abonnement pour les fonctions avancées non précisés. Plateforme lancée en 2021 — moins mature que BOAMP ou e-marchespublics. Marchés privés : qualité et fiabilité des données à confirmer.",
|
||||
"description_courte": "Veille marchés publics + privés avec alertes email gratuites. Double couverture différenciante mais tarifs abonnement opaques et plateforme jeune (lancée 2021).",
|
||||
"scoring": {
|
||||
"remuneration": null,
|
||||
"transparence": "⚠️",
|
||||
"pratiques": null,
|
||||
"ecologie": null,
|
||||
"matching": "✅",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Scoring simplifié 2 axes (plateforme appels d\u0027offres publics). Matching ✅ (double couverture public+privé, 1 515 opportunités archi). Transparence ⚠️ : tarifs des fonctions avancées non publiés sur la homepage. Configuration 1✅ + 1⚠️ → sous-réserve."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "freemium",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://centraledesmarches.com"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "appelarchi",
|
||||
"nom": "AppelArchi",
|
||||
"url": "https://appelarchi.fr",
|
||||
"type": "appel-offre-public",
|
||||
"description": "## Présentation\nPlateforme spécialisée pour les professionnels de l\u0027architecture. Agrège BOAMP, JOUE, TED et sources régionales. 300+ opportunités analysées quotidiennement. Filtres avancés par profil archi, suivi des lauréats, résumés IA. Inclut DOM-TOM. Conçue spécifiquement pour les cabinets d\u0027architecture.\n\n## Modèle économique\nAccès conditionnel suggéré par le CTA \u0027accéder à la plateforme\u0027. Modèle exact (gratuit/payant/abonnement) non précisé sur la homepage. Tarification à confirmer après inscription. Présumé abonnement compte tenu de la spécialisation du service.\n\n## Pour qui\nCabinets d\u0027architecture et architectes indépendants souhaitant une veille AO spécialisée avec valeur ajoutée IA. La spécialisation sur le profil archi est un avantage significatif face aux agrégateurs généralistes.\n\n## Points forts\nSeule plateforme du panel 100% dédiée aux marchés archi. Résumés IA des AO. Suivi des lauréats. Filtres avancés par profil. Couverture DOM-TOM. 300+ opportunités analysées quotidiennement.\n\n## Points de vigilance\nTarification entièrement opaque avant inscription — risque d\u0027engagement sans visibilité sur les coûts. Service présumé payant mais aucune information tarifaire publique disponible.",
|
||||
"description_courte": "Plateforme 100% dédiée aux marchés publics archi, résumés IA et suivi des lauréats. Tarification entièrement opaque avant inscription — à tester avant tout engagement financier.",
|
||||
"scoring": {
|
||||
"remuneration": null,
|
||||
"transparence": "⚠️",
|
||||
"pratiques": null,
|
||||
"ecologie": null,
|
||||
"matching": "✅",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Scoring simplifié 2 axes (plateforme appels d\u0027offres publics). Matching ✅ : spécialisation archi complète, résumés IA, suivi lauréats — outil différenciant dans le panel. Transparence ⚠️ : tarification entièrement opaque avant inscription. Configuration 1✅ + 1⚠️ → sous-réserve."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"urbanisme",
|
||||
"mar-conseil",
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "abonnement",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://appelarchi.fr"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "akkel",
|
||||
"nom": "Akkel",
|
||||
"url": "https://www.akkel.fr",
|
||||
"type": "appel-offre-public",
|
||||
"description": "## Présentation\nPlateforme de veille automatisée pour marchés publics. Recommandations personnalisées basées sur l\u0027activité réelle de l\u0027entreprise, sans configuration initiale manuelle. 46 000+ notices 2024, 12 157 AO actifs, 95 155 notices 2025. Couvre les publications officielles complètes, mises à jour quotidiennement.\n\n## Modèle économique\nTrial gratuit de 21 jours avec accès à toutes les fonctionnalités. Tarifs post-trial non affichés publiquement — à confirmer après la période d\u0027essai. Modèle présumé abonnement.\n\n## Pour qui\nArchitectes et bureaux d\u0027études souhaitant une veille entièrement automatisée sans configuration manuelle complexe. L\u0027algorithme de recommandation personnalisée basé sur l\u0027historique d\u0027activité est un différenciateur pour les profils expérimentés en marchés publics.\n\n## Points forts\nRecommandations personnalisées automatiques (aucune configuration manuelle). Trial 21 jours gratuit avec accès complet. Volume élevé : 95k+ notices 2025. Couverture complète des publications officielles.\n\n## Points de vigilance\nTarifs post-trial non affichés — impossible d\u0027anticiper le coût avant la fin de l\u0027essai. Plateforme moins connue que BOAMP ou e-marchespublics — maturité à confirmer. Trial gratuit peut créer un biais d\u0027engagement.",
|
||||
"description_courte": "Veille marchés publics automatisée avec recommandations personnalisées, trial 21 jours gratuit. Tarifs post-trial opaques — à comparer avec d\u0027autres agrégateurs avant engagement.",
|
||||
"scoring": {
|
||||
"remuneration": null,
|
||||
"transparence": "⚠️",
|
||||
"pratiques": null,
|
||||
"ecologie": null,
|
||||
"matching": "✅",
|
||||
"tag_global": "sous-reserve",
|
||||
"justification_tag": "Scoring simplifié 2 axes (plateforme appels d\u0027offres publics). Matching ✅ : recommandations personnalisées automatiques, 95k+ notices 2025. Transparence ⚠️ : tarifs post-trial non publiés — le trial gratuit ne permet pas d\u0027anticiper le coût réel. Configuration 1✅ + 1⚠️ → sous-réserve."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "freemium",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://r.jina.ai/https://www.akkel.fr"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "marches-publics-gouv",
|
||||
"nom": "Marchés-publics.gouv.fr (PLACE)",
|
||||
"url": "https://www.marches-publics.gouv.fr",
|
||||
"type": "appel-offre-public",
|
||||
"description": "## Présentation\nPlateforme officielle de l\u0027État français pour les marchés publics et leur dématérialisation. Agrège les marchés de l\u0027ensemble des entités publiques françaises. Référence institutionnelle pour la soumission de candidatures. Complémentaire au BOAMP pour la réponse aux AO.\n\n## Modèle économique\nAccès totalement gratuit pour les entreprises candidates. Service public financé par l\u0027État. Aucune contrainte financière pour la consultation des AO ou la soumission de candidatures. Pas d\u0027abonnement, pas de frais de dossier.\n\n## Pour qui\nTous les architectes et bureaux d\u0027études répondant à des marchés publics. Référence institutionnelle incontournable pour la soumission de candidatures dématérialisées — complémentaire à la veille sur BOAMP ou les agrégateurs spécialisés.\n\n## Points forts\nService public officiel, gratuit, institutionnel. Référence légale pour la dématérialisation des candidatures. Couverture de toutes les entités publiques françaises. Complémentaire aux outils de veille.\n\n## Points de vigilance\nURL principale instable (erreur 400 signalée lors du scraping T1). Interface à prendre en main — moins ergonomique que les agrégateurs privés. Outil de soumission avant tout, pas de veille proactive.",
|
||||
"description_courte": "Plateforme officielle gratuite de l\u0027État pour la soumission dématérialisée de candidatures AO. Outil institutionnel de référence — à coupler avec un agrégateur pour la veille proactive.",
|
||||
"scoring": {
|
||||
"remuneration": null,
|
||||
"transparence": "✅",
|
||||
"pratiques": null,
|
||||
"ecologie": null,
|
||||
"matching": "✅",
|
||||
"tag_global": "recommande",
|
||||
"justification_tag": "Scoring simplifié 2 axes (plateforme appels d\u0027offres publics). Service officiel de l\u0027État entièrement gratuit (✅ Transparence) et couverture institutionnelle de toutes les entités publiques françaises (✅ Matching). URL instable signalée en T1 — à surveiller."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "gratuit",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "instao",
|
||||
"nom": "Instao",
|
||||
"url": "https://www.instao.fr",
|
||||
"type": "appel-offre-public",
|
||||
"description": "## Présentation\nPlateforme IA de veille marchés publics français, en beta en 2026. Agrège BOAMP, PLACE, e-marchespublics, Maximilien, Mégalis Bretagne et sources régionales. Catégorie Maîtrise d\u0027œuvre explicitement couverte. Fiches synthétiques par marché, alertes email, téléchargement DCE en 1 clic. Module IA pour rédiger mémoires techniques (DC1, DC2).\n\n## Modèle économique\nPlan Veille Automatisée : 89€ HT/mois, engagement mensuel, 1 utilisateur, 1 activité de veille. Plan PME : prix à l\u0027utilisation, utilisateurs illimités, multi-activités. Plan Entreprise : sur devis. Module Réponse IA : crédits (tarif non affiché). Tarification principale publique et claire.\n\n## Pour qui\nArchitectes indépendants souhaitant une veille MOE automatisée avec aide à la rédaction des mémoires techniques. Le module IA de réponse est un différenciateur fort pour les profils peu habitués aux marchés publics ou manquant de temps pour rédiger les dossiers.\n\n## Points forts\nCatégorie MOE archi explicitement couverte. Module IA aide à la rédaction (mémoires, DC1, DC2) — unique dans le panel. Tarification principale publique (89€/mois). Engagement mensuel sans engagement annuel forcé.\n\n## Points de vigilance\nService en beta (2026) — fiabilité et couverture à confirmer sur la durée. Tarif module Réponse IA non affiché (crédits). 89€/mois représente un investissement significatif pour un indépendant en démarrage.",
|
||||
"description_courte": "Veille marchés publics IA spécialisée MOE avec module rédaction mémoires DC1/DC2. 89€ HT/mois, engagement mensuel. En beta 2026 — prometteuse mais fiabilité à confirmer.",
|
||||
"scoring": {
|
||||
"remuneration": null,
|
||||
"transparence": "✅",
|
||||
"pratiques": null,
|
||||
"ecologie": null,
|
||||
"matching": "✅",
|
||||
"tag_global": "recommande",
|
||||
"justification_tag": "Scoring simplifié 2 axes (plateforme appels d\u0027offres publics). Tarification principale publique (89€/mois affiché sur /pricing, ✅ Transparence) et catégorie MOE explicitement couverte avec module IA rédaction unique dans le panel (✅ Matching). En beta — à surveiller."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"mar-conseil",
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "abonnement",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://www.instao.fr/pricing"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "francemarches",
|
||||
"nom": "FranceMarchés",
|
||||
"url": "https://www.francemarches.com/appels-offre/maitrise-oeuvre",
|
||||
"type": "appel-offre-public",
|
||||
"description": "## Présentation\nPortail d\u0027appels d\u0027offres publics agrégant les publications de la presse régionale (Ouest-France, Voix du Nord, Est Républicain, Le Dauphiné, La Montagne...) en plus du BOAMP et des sources officielles. 3 016 AO maîtrise d\u0027œuvre en cours au 06/05/2026. 108 000+ abonnés. CGU accessibles sur /cgu.\n\n## Modèle économique\nAccès aux annonces entièrement gratuit. Alertes email gratuites. CGU disponibles et accessibles sur /cgu. Modèle économique basé sur le financement de la presse régionale partenaire. Aucun frais d\u0027inscription ni d\u0027abonnement pour les entreprises candidates.\n\n## Pour qui\nArchitectes cherchant des AO de maîtrise d\u0027œuvre sur tout le territoire, y compris les zones moins couvertes par BOAMP seul. La couverture presse régionale est un complément précieux pour les marchés locaux et régionaux.\n\n## Points forts\nCouverture presse régionale unique dans le panel — accès aux marchés locaux non publiés sur BOAMP uniquement. 3 016 AO MOE actifs confirmés. Entièrement gratuit. 108 000+ abonnés (forte adoption). CGU transparentes et accessibles.\n\n## Points de vigilance\nRésultats MOE très variés (logements, réhabilitation, aménagement urbain, infrastructures) — filtrage nécessaire pour isoler les missions archi résidentielle. Données issues partiellement de la presse régionale — moins uniformes que les sources officielles.",
|
||||
"description_courte": "Portail gratuit agrégeant AO publics via presse régionale + BOAMP. 3 016 AO maîtrise d\u0027œuvre actifs. Couverture régionale unique — filtrage nécessaire parmi des résultats MOE variés.",
|
||||
"scoring": {
|
||||
"remuneration": null,
|
||||
"transparence": "✅",
|
||||
"pratiques": null,
|
||||
"ecologie": null,
|
||||
"matching": "✅",
|
||||
"tag_global": "recommande",
|
||||
"justification_tag": "Scoring simplifié 2 axes (plateforme appels d\u0027offres publics). Accès gratuit avec CGU accessibles sur /cgu (✅ Transparence) et 3 016 AO MOE actifs via couverture presse régionale unique dans le panel (✅ Matching)."
|
||||
},
|
||||
"secteurs_servis": [
|
||||
"transversal"
|
||||
],
|
||||
"zone_geo": "france-entiere",
|
||||
"cout_entree": "freemium",
|
||||
"date_creation_fiche": "2026-05-06",
|
||||
"date_derniere_maj": "2026-05-06",
|
||||
"source_donnees": [
|
||||
"https://www.francemarches.com/appels-offre/maitrise-oeuvre",
|
||||
"https://www.francemarches.com/cgu"
|
||||
],
|
||||
"flag_validation_jules": false,
|
||||
"commentaires": [
|
||||
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
1
public/data/pratiques-pending.json
Normal file
1
public/data/pratiques-pending.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
||||
834
public/data/pratiques-regeneratives.json
Normal file
834
public/data/pratiques-regeneratives.json
Normal file
@@ -0,0 +1,834 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"nom": "Rotor",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"type": "cooperative",
|
||||
"url": "https://rotordb.org",
|
||||
"lat": 50.8503,
|
||||
"lng": 4.3517,
|
||||
"description": "Pionnier européen du réemploi. Filiale RotorDC opérationnelle depuis 2016, showroom + entrepôt à Vilvorde. Publications de référence sur l'économie circulaire du bâtiment, expositions internationales.",
|
||||
"criteres": [1, 2, 5, 6, 8],
|
||||
"score": 5,
|
||||
"tags": ["réemploi", "recherche", "publications", "coopérative"],
|
||||
"source": "seed Jules + scrape WBDM",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"nom": "Assemble Studio",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"type": "collectif",
|
||||
"url": "https://assemblestudio.co.uk",
|
||||
"lat": 51.5074,
|
||||
"lng": -0.1278,
|
||||
"description": "Turner Prize 2015. Travaille à la frontière architecture/art/design. Granby Workshop, Yardhouse, Sugarhouse Studios. Pratique non-hiérarchique, autoconstruction, fabrication interne.",
|
||||
"criteres": [1, 3, 4, 6, 8],
|
||||
"score": 5,
|
||||
"tags": ["autoconstruction", "art", "social", "collectif horizontal"],
|
||||
"source": "seed Jules",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"nom": "Forensic Architecture",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"type": "recherche",
|
||||
"url": "https://forensic-architecture.org",
|
||||
"lat": 51.4742,
|
||||
"lng": -0.0176,
|
||||
"description": "Investigation architecturale autour de violations des droits humains et environnementaux. Contre-expertise vidéo/spatiale open-source. Balise politique du courant régénératif, transmission ouverte.",
|
||||
"criteres": [5, 8],
|
||||
"score": 2,
|
||||
"tags": ["enquête", "politique", "contre-expertise", "open-source"],
|
||||
"source": "seed Jules",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"nom": "Encore Heureux",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"type": "agence",
|
||||
"url": "https://encoreheureux.org",
|
||||
"lat": 48.8566,
|
||||
"lng": 2.3522,
|
||||
"description": "Pavillon France Biennale Venise 2018 'Lieux Infinis'. Projets emblématiques sur le réemploi (Pavillon Circulaire, COP21). Manifeste, livres, posture publique forte.",
|
||||
"criteres": [1, 3, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["réemploi", "manifeste", "Biennale", "publications"],
|
||||
"source": "seed Jules",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"nom": "Construire (Patrick Bouchain)",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"type": "agence",
|
||||
"url": "https://construire-architectes.com",
|
||||
"lat": 48.8566,
|
||||
"lng": 2.3522,
|
||||
"description": "Maître d'œuvre du 'permis de faire'. Lieu Unique, Le Channel, friches culturelles. MOA habitante, pédagogie de chantier, transmission. Figure tutélaire du courant.",
|
||||
"criteres": [3, 4, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["permis de faire", "MOA habitante", "friches", "transmission"],
|
||||
"source": "seed Jules",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"nom": "Boidot+Robin",
|
||||
"pays": "FR",
|
||||
"ville": "Sézanne",
|
||||
"type": "agence",
|
||||
"url": "https://julienboidot.fr",
|
||||
"lat": 48.7253,
|
||||
"lng": 3.7211,
|
||||
"description": "Architecture rurale champenoise, terre crue, bois local, sobriété matérielle radicale. Maisons individuelles et équipements publics. Engagement territorial fort, déshérence rurale.",
|
||||
"criteres": [1, 2, 3, 8],
|
||||
"score": 4,
|
||||
"tags": ["terre crue", "rural", "low-tech", "filières courtes"],
|
||||
"source": "seed Jules",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"nom": "Tepop",
|
||||
"pays": "FR",
|
||||
"ville": "Bordeaux",
|
||||
"type": "cooperative",
|
||||
"url": "https://tepop.fr",
|
||||
"lat": 44.8378,
|
||||
"lng": -0.5792,
|
||||
"description": "Coopérative d'architecture et urbanisme. Démarches participatives, projets péri-urbains, modèle SCOP. Travaille sur la commande publique et habitat groupé.",
|
||||
"criteres": [3, 4, 6, 8],
|
||||
"score": 4,
|
||||
"tags": ["SCOP", "participatif", "périurbain", "coopérative"],
|
||||
"source": "seed Jules",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"nom": "Architecture & Précarités",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"type": "reseau",
|
||||
"url": "https://architecture-precarites.fr",
|
||||
"lat": 48.8566,
|
||||
"lng": 2.3522,
|
||||
"description": "Réseau d'architectes engagés sur les questions de précarité, mal-logement, hospitalité. Recherche-action, publications, plaidoyer. Plateforme lancée 2022 par ENSA Paris-Belleville.",
|
||||
"criteres": [4, 5, 8],
|
||||
"score": 3,
|
||||
"tags": ["précarités", "recherche-action", "hospitalité"],
|
||||
"source": "seed Jules",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"nom": "Agence ATM",
|
||||
"pays": "FR",
|
||||
"ville": "Bagnolet",
|
||||
"type": "agence",
|
||||
"url": "https://agence-atm.com",
|
||||
"lat": 48.8694,
|
||||
"lng": 2.4200,
|
||||
"description": "Architecture en terre, paille, bois. Chantiers-école, transmission. Projets en Île-de-France et province. Pratique low-tech assumée.",
|
||||
"criteres": [1, 2, 3, 4],
|
||||
"score": 4,
|
||||
"tags": ["terre", "paille", "chantier-école", "low-tech"],
|
||||
"source": "seed Jules",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"nom": "Frugalité Heureuse & Créative",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"type": "mouvement",
|
||||
"url": "https://frugalite.org",
|
||||
"lat": 48.8566,
|
||||
"lng": 2.3522,
|
||||
"description": "Mouvement initié par Madec, Lefèvre, Rollet (2018). Manifeste signé par des milliers d'architectes. Expositions, publications, plaidoyer. Référence cardinale du courant frugal en France.",
|
||||
"criteres": [1, 3, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["manifeste", "sobriété", "low-tech", "mouvement"],
|
||||
"source": "seed Jules",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"nom": "Atelier Belenfant Daubas",
|
||||
"pays": "FR",
|
||||
"ville": "Vertou",
|
||||
"type": "agence",
|
||||
"url": "https://atelierbelenfantdaubas.org",
|
||||
"lat": 47.1667,
|
||||
"lng": -1.4667,
|
||||
"description": "Agence ligérienne. Bois local, paille, éco-construction sur équipements publics (écoles, salles). Pratique discrète mais référence du courant biosourcé Ouest.",
|
||||
"criteres": [1, 2, 3],
|
||||
"score": 3,
|
||||
"tags": ["bois", "paille", "écoles", "Ouest"],
|
||||
"source": "WebSearch BE",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"nom": "Réempro / Opalis",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"type": "plateforme",
|
||||
"url": "https://opalis.eu",
|
||||
"lat": 50.8503,
|
||||
"lng": 4.3517,
|
||||
"description": "Plateforme de référence pour le réemploi (revendeurs, fiches matériaux). Issue de la mouvance Rotor. Service complémentaire d'agence et outil documentaire ouvert.",
|
||||
"criteres": [1, 2, 8],
|
||||
"score": 3,
|
||||
"tags": ["réemploi", "base de données", "open"],
|
||||
"source": "WebSearch",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"nom": "BC Architects & Studies",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"type": "agence",
|
||||
"url": "https://bc-as.org",
|
||||
"lat": 50.8503,
|
||||
"lng": 4.3517,
|
||||
"description": "Architecture en terre crue, BTC, transmission via BC Studies (formation). Projets en Belgique, France, Maroc, Burundi. Une des références européennes terre.",
|
||||
"criteres": [1, 2, 3, 8],
|
||||
"score": 4,
|
||||
"tags": ["terre crue", "BTC", "formation", "international"],
|
||||
"source": "connaissance acteur",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"nom": "Lacol Arquitectura Cooperativa",
|
||||
"pays": "ES",
|
||||
"ville": "Barcelone",
|
||||
"type": "cooperative",
|
||||
"url": "https://lacol.coop",
|
||||
"lat": 41.3851,
|
||||
"lng": 2.1734,
|
||||
"description": "Coopérative fondée 2009 (Sants). La Borda : plus grand bâtiment résidentiel bois d'Espagne à sa livraison. Modèle horizontal, transformation sociale via architecture, habitat coopératif.",
|
||||
"criteres": [3, 4, 6, 8],
|
||||
"score": 4,
|
||||
"tags": ["SCOP", "La Borda", "habitat coopératif", "Barcelone"],
|
||||
"source": "WebSearch",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"nom": "Recetas Urbanas",
|
||||
"pays": "ES",
|
||||
"ville": "Séville",
|
||||
"type": "collectif",
|
||||
"url": "https://recetasurbanas.net",
|
||||
"lat": 37.3891,
|
||||
"lng": -5.9845,
|
||||
"description": "'Recettes urbaines' : méthodologies open-source pour autoconstruire dans les interstices légaux. Hack urbain, droit comme matériau. Cirugeda figure cardinale architecture sociale espagnole.",
|
||||
"criteres": [4, 5, 6, 8],
|
||||
"score": 4,
|
||||
"tags": ["autoconstruction", "droit", "open-source", "hack"],
|
||||
"source": "WebSearch",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"nom": "Die Baupiloten",
|
||||
"pays": "DE",
|
||||
"ville": "Berlin",
|
||||
"type": "agence",
|
||||
"url": "https://baupiloten.com",
|
||||
"lat": 52.5200,
|
||||
"lng": 13.4050,
|
||||
"description": "Agence pédagogique (Susanne Hofmann + TU Berlin). Étudiants impliqués dans projets réels (écoles, logement). Méthodologie participative avec usagers, notamment enfants.",
|
||||
"criteres": [4, 8],
|
||||
"score": 2,
|
||||
"tags": ["participation", "écoles", "pédagogie", "université"],
|
||||
"source": "WebSearch",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"nom": "Baubotanik",
|
||||
"pays": "DE",
|
||||
"ville": "Munich",
|
||||
"type": "recherche",
|
||||
"url": "https://baubotanik.org",
|
||||
"lat": 48.1351,
|
||||
"lng": 11.5820,
|
||||
"description": "Architecture vivante : structures construites par interaction technique + croissance végétale. Recherche fondamentale + démonstrateurs. Champ unique en Europe sur l'intégration vivant/structure.",
|
||||
"criteres": [1, 7, 8],
|
||||
"score": 3,
|
||||
"tags": ["architecture vivante", "végétal", "recherche"],
|
||||
"source": "WebSearch",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"nom": "Superuse Studios",
|
||||
"pays": "NL",
|
||||
"ville": "Rotterdam",
|
||||
"type": "agence",
|
||||
"url": "https://superuse-studios.com",
|
||||
"lat": 51.9225,
|
||||
"lng": 4.4792,
|
||||
"description": "Pionnier néerlandais du réemploi industriel. Harvest Map (cartographie ressources). Projets emblématiques (Villa Welpeloo). Antériorité sur le sujet en Europe.",
|
||||
"criteres": [1, 2, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["réemploi", "harvest map", "industriel", "NL"],
|
||||
"source": "connaissance acteur",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"nom": "Atelier 56S",
|
||||
"pays": "FR",
|
||||
"ville": "Vannes",
|
||||
"type": "agence",
|
||||
"url": "https://56s.fr",
|
||||
"lat": 47.6559,
|
||||
"lng": -2.7603,
|
||||
"description": "Agence morbihannaise, bois et paille, équipements publics ruraux. Représentante du courant biosourcé Bretagne. Pratique de mise en œuvre soignée, ancrage local.",
|
||||
"criteres": [1, 2, 3],
|
||||
"score": 3,
|
||||
"tags": ["bois", "paille", "Bretagne", "rural"],
|
||||
"source": "connaissance acteur",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"nom": "Quatorze",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"type": "asso",
|
||||
"url": "https://quatorze.cc",
|
||||
"lat": 48.8566,
|
||||
"lng": 2.3522,
|
||||
"description": "Association d'architecture. Projets autour des migrations, du logement d'urgence, des fab labs (Fab City). Posture militante, modèle associatif assumé.",
|
||||
"criteres": [3, 4, 5, 6],
|
||||
"score": 4,
|
||||
"tags": ["asso", "migrations", "fab city", "militant"],
|
||||
"source": "connaissance acteur",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"nom": "Yes We Camp",
|
||||
"pays": "FR",
|
||||
"ville": "Marseille",
|
||||
"type": "collectif",
|
||||
"url": "https://yeswecamp.org",
|
||||
"lat": 43.2965,
|
||||
"lng": 5.3698,
|
||||
"description": "Tiers-lieux et occupation transitoire. Les Grands Voisins, Coco Velten. Modèle hybride architecture/programmation/animation. Ancrage friches.",
|
||||
"criteres": [3, 4, 5, 6],
|
||||
"score": 4,
|
||||
"tags": ["tiers-lieux", "friches", "transitoire", "programmation"],
|
||||
"source": "connaissance acteur",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"nom": "Bellastock",
|
||||
"pays": "FR",
|
||||
"ville": "Île-Saint-Denis",
|
||||
"type": "cooperative",
|
||||
"url": "https://bellastock.com",
|
||||
"lat": 48.9408,
|
||||
"lng": 2.3472,
|
||||
"description": "Coopérative spécialisée réemploi. Festival Bellastock annuel (chantier expérimental étudiants). Recherche + maîtrise d'œuvre. Une des entrées historiques du réemploi en France.",
|
||||
"criteres": [1, 2, 3, 8],
|
||||
"score": 4,
|
||||
"tags": ["réemploi", "festival", "étudiants", "coopérative"],
|
||||
"source": "connaissance acteur",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"nom": "Mario Cucinella Architects (TECLA)",
|
||||
"pays": "IT",
|
||||
"ville": "Bologne",
|
||||
"type": "agence",
|
||||
"url": "https://mcarchitects.it",
|
||||
"lat": 44.4949,
|
||||
"lng": 11.3426,
|
||||
"description": "MCA. Projet TECLA : maison imprimée 3D en terre locale (avec WASP). Posture bioclimatique forte, démonstrateurs. Référence italienne sur l'expérimentation matériaux+vivant.",
|
||||
"criteres": [1, 3, 7, 8],
|
||||
"score": 4,
|
||||
"tags": ["terre", "impression 3D", "bioclimatique", "IT"],
|
||||
"source": "connaissance acteur",
|
||||
"passe": 1
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"nom": "Ateliermob",
|
||||
"pays": "PT",
|
||||
"ville": "Lisbonne",
|
||||
"type": "collectif",
|
||||
"url": "https://ateliermob.com",
|
||||
"lat": 38.7169,
|
||||
"lng": -9.1399,
|
||||
"description": "Collectif engagé 'Trabalhar com os 99%'. Autoconstruction, projets sociaux, Biennale Venise 2012. Architecture participative pour les quartiers informels et communautés défavorisées.",
|
||||
"criteres": [3, 4, 5, 6, 8],
|
||||
"score": 5,
|
||||
"tags": ["autoconstruction", "social", "Biennale Venise 2012"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"nom": "Artéria",
|
||||
"pays": "PT",
|
||||
"ville": "Lisbonne",
|
||||
"type": "agence",
|
||||
"url": "https://arteria.pt",
|
||||
"lat": 38.7169,
|
||||
"lng": -9.1399,
|
||||
"description": "Atelier de réhabilitation urbaine. Edifício Manifesto, Mouraria. Réhabilitation sensible du patrimoine populaire lisbonnais, réemploi de matériaux, pratique frugale.",
|
||||
"criteres": [1, 3, 4, 5],
|
||||
"score": 4,
|
||||
"tags": ["réhabilitation", "Edifício Manifesto", "Mouraria"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"nom": "oitoo",
|
||||
"pays": "PT",
|
||||
"ville": "Porto",
|
||||
"type": "agence",
|
||||
"url": "https://oitoo.pt",
|
||||
"lat": 41.1579,
|
||||
"lng": -8.6291,
|
||||
"description": "Réemploi, réactivation multi-sites. Pratique entre Porto et Lisbonne. Architecture de la transformation et du réemploi comme posture systématique.",
|
||||
"criteres": [1, 3, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["réemploi", "réactivation", "multi-sites"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"nom": "Tegnestuen LOKAL",
|
||||
"pays": "DK",
|
||||
"ville": "Copenhague",
|
||||
"type": "agence",
|
||||
"url": "https://tegnestuenlokal.dk",
|
||||
"lat": 55.6761,
|
||||
"lng": 12.5683,
|
||||
"description": "Adaptive reuse, matériaux biogéniques, Manifest planétär. Posture frugale radicale, bois local, engagement écologique de fond dans toute la pratique.",
|
||||
"criteres": [1, 2, 3, 7, 8],
|
||||
"score": 5,
|
||||
"tags": ["adaptive reuse", "biogenic", "Manifest planetær"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"nom": "Vandkunsten Architects",
|
||||
"pays": "DK",
|
||||
"ville": "Copenhague",
|
||||
"type": "agence",
|
||||
"url": "https://vandkunsten.com",
|
||||
"lat": 55.6761,
|
||||
"lng": 12.5683,
|
||||
"description": "Agence danoise historique, beauté + sobriété, posture engagée sur la longévité du bâti. Publications, transmission de savoir-faire architectural durable.",
|
||||
"criteres": [1, 3, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["beauté+sobriété", "posture", "longévité"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"nom": "White Arkitekter",
|
||||
"pays": "SE",
|
||||
"ville": "Stockholm",
|
||||
"type": "agence",
|
||||
"url": "https://whitearkitekter.com",
|
||||
"lat": 59.3293,
|
||||
"lng": 18.0686,
|
||||
"description": "Grande agence suédoise engagée sur les modes de vie durables. Matériaux biosourcés à grande échelle, publications, transmission du savoir-faire nordique.",
|
||||
"criteres": [1, 3, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["sustainable ways of life", "scale"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"nom": "ZRS Architekten Ingenieure",
|
||||
"pays": "DE",
|
||||
"ville": "Berlin",
|
||||
"type": "agence",
|
||||
"url": "https://zrs.berlin",
|
||||
"lat": 52.5200,
|
||||
"lng": 13.4050,
|
||||
"description": "Terre, bambou, construction biosourcée en Allemagne et en Afrique subsaharienne (NBL). Recherche appliquée couplée à la pratique. Référence germanophone sur les matériaux locaux et vernaculaires.",
|
||||
"criteres": [1, 2, 3, 5, 8],
|
||||
"score": 5,
|
||||
"tags": ["terre", "bambou", "NBL", "recherche"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"nom": "Natural Building Lab (TU Berlin)",
|
||||
"pays": "DE",
|
||||
"ville": "Berlin",
|
||||
"type": "recherche",
|
||||
"url": "https://nbl.berlin",
|
||||
"lat": 52.5200,
|
||||
"lng": 13.4050,
|
||||
"description": "Laboratoire universitaire low-tech à la TU Berlin. Transmission, expérimentation constructive avec matériaux naturels, lien recherche-pratique exemplaire.",
|
||||
"criteres": [1, 3, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["low-tech", "université", "transmission"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"nom": "DGJ Architektur",
|
||||
"pays": "DE",
|
||||
"ville": "Frankfurt",
|
||||
"type": "agence",
|
||||
"url": "https://dgj.eu",
|
||||
"lat": 50.1109,
|
||||
"lng": 8.6821,
|
||||
"description": "Agence engagée sur le durable et le biosourcé en Allemagne. Pratique soignée, matériaux biosourcés intégrés aux projets résidentiels et publics.",
|
||||
"criteres": [1, 3, 8],
|
||||
"score": 3,
|
||||
"tags": ["sustainable", "biosourcés"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"nom": "Baubüro in situ + Zirkular",
|
||||
"pays": "CH",
|
||||
"ville": "Bâle",
|
||||
"type": "agence",
|
||||
"url": "https://insitu.ch",
|
||||
"lat": 47.5596,
|
||||
"lng": 7.5886,
|
||||
"description": "Réemploi structurel de référence en Suisse. K118, Holcim Gold Award. Pratique circulaire systématique, publications, posture publique affirmée.",
|
||||
"criteres": [1, 2, 5, 6, 8],
|
||||
"score": 5,
|
||||
"tags": ["K118", "réemploi structurel", "Holcim Gold"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"nom": "einszueins architektur",
|
||||
"pays": "AT",
|
||||
"ville": "Vienne",
|
||||
"type": "agence",
|
||||
"url": "https://einszueins.at",
|
||||
"lat": 48.2082,
|
||||
"lng": 16.3738,
|
||||
"description": "Wohnprojekt Wien, baugruppe, World Habitat Award. Habitat coopératif et participatif à Vienne. Modèle alternatif de co-construction avec futurs habitants.",
|
||||
"criteres": [3, 4, 5, 6, 8],
|
||||
"score": 5,
|
||||
"tags": ["Wohnprojekt Wien", "baugruppe", "World Habitat Award"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"nom": "BudCud",
|
||||
"pays": "PL",
|
||||
"ville": "Cracovie",
|
||||
"type": "agence",
|
||||
"url": "https://budcud.org",
|
||||
"lat": 50.0647,
|
||||
"lng": 19.9450,
|
||||
"description": "Réemploi, mobilier urbain, pratique engagée à Cracovie. Projets d'espace public avec matériaux récupérés, participation des usagers.",
|
||||
"criteres": [1, 3, 4, 8],
|
||||
"score": 4,
|
||||
"tags": ["réemploi", "mobilier", "urbain"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"nom": "Centrala",
|
||||
"pays": "PL",
|
||||
"ville": "Varsovie",
|
||||
"type": "agence",
|
||||
"url": "https://centrala.net.pl",
|
||||
"lat": 52.2297,
|
||||
"lng": 21.0122,
|
||||
"description": "Recherche spatiale, posture critique. Agence-recherche varsovienne engagée sur les transformations urbaines post-industrielles.",
|
||||
"criteres": [3, 5, 8],
|
||||
"score": 3,
|
||||
"tags": ["recherche spatiale", "posture"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"nom": "RiceHouse",
|
||||
"pays": "IT",
|
||||
"ville": "Biella",
|
||||
"type": "agence",
|
||||
"url": "https://ricehouse.it",
|
||||
"lat": 45.5629,
|
||||
"lng": 8.0565,
|
||||
"description": "Paille de riz comme matériau de construction. Filière biosourcée ultra-locale (Plaine du Pô). Recherche + démonstrations, lien producteurs-constructeurs.",
|
||||
"criteres": [1, 2, 3, 7, 8],
|
||||
"score": 5,
|
||||
"tags": ["paille de riz", "biosourcé", "filière courte"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"nom": "TAMassociati",
|
||||
"pays": "IT",
|
||||
"ville": "Venise",
|
||||
"type": "agence",
|
||||
"url": "https://tamassociati.org",
|
||||
"lat": 45.4408,
|
||||
"lng": 12.3155,
|
||||
"description": "'Taking care' comme posture. Architecture humanitaire et sociale en Italie et à l'international. Projets de santé et d'éducation dans des contextes fragiles.",
|
||||
"criteres": [3, 4, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["taking care", "humanitaire", "social"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"nom": "Diverserighestudio",
|
||||
"pays": "IT",
|
||||
"ville": "Bologne",
|
||||
"type": "agence",
|
||||
"url": "https://diverserighestudio.it",
|
||||
"lat": 44.4949,
|
||||
"lng": 11.3426,
|
||||
"description": "Cohousing Porto15, recherche, participatif. Studio bolonais engagé sur l'habitat participatif et la recherche architecturale, modèle coopératif.",
|
||||
"criteres": [3, 4, 5, 6, 8],
|
||||
"score": 5,
|
||||
"tags": ["cohousing Porto15", "recherche", "participatif"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"nom": "Material Cultures",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"type": "asso",
|
||||
"url": "https://materialcultures.org",
|
||||
"lat": 51.5074,
|
||||
"lng": -0.1278,
|
||||
"description": "Biosourcés, chanvre (hempcrete), Harvest House. Association de recherche sur les cultures matérielles biosourcées et leur transformation en techniques constructives.",
|
||||
"criteres": [1, 2, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["biosourcés", "hempcrete", "Harvest House"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 41,
|
||||
"nom": "6a architects",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"type": "agence",
|
||||
"url": "https://6a.co.uk",
|
||||
"lat": 51.5074,
|
||||
"lng": -0.1278,
|
||||
"description": "Strates, retrofit, transmission. Agence londonienne engagée sur la transformation du bâti existant, lecture des strates temporelles et sobriété des interventions.",
|
||||
"criteres": [1, 3, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["strates", "retrofit", "transmission"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"nom": "We Made That",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"type": "agence",
|
||||
"url": "https://wemadethat.co.uk",
|
||||
"lat": 51.5074,
|
||||
"lng": -0.1278,
|
||||
"description": "Public realm, co-conception, civic. Agence engagée sur les espaces publics et l'aménagement participatif en contexte urbain dense.",
|
||||
"criteres": [4, 5, 6, 8],
|
||||
"score": 4,
|
||||
"tags": ["public realm", "co-conception", "civic"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 43,
|
||||
"nom": "Public Practice",
|
||||
"pays": "UK",
|
||||
"ville": "Londres",
|
||||
"type": "asso",
|
||||
"url": "https://publicpractice.org.uk",
|
||||
"lat": 51.5074,
|
||||
"lng": -0.1278,
|
||||
"description": "Architectes placés en mairies pour œuvrer dans l'intérêt public. Modèle innovant d'insertion professionnelle au service de la commande publique locale.",
|
||||
"criteres": [4, 5, 6, 8],
|
||||
"score": 4,
|
||||
"tags": ["architectes en mairies", "intérêt public"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 44,
|
||||
"nom": "AgwA",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"type": "agence",
|
||||
"url": "https://agwa.be",
|
||||
"lat": 50.8503,
|
||||
"lng": 4.3517,
|
||||
"description": "Transformation, EUmies 2026, Charleroi. Agence bruxelloise spécialisée en transformation du bâti existant, posture critique et réemploi intégré.",
|
||||
"criteres": [1, 5, 8],
|
||||
"score": 3,
|
||||
"tags": ["transformation", "EUmies 2026", "Charleroi"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 45,
|
||||
"nom": "Carton123 architecten",
|
||||
"pays": "BE",
|
||||
"ville": "Bruxelles",
|
||||
"type": "agence",
|
||||
"url": "https://carton123.be",
|
||||
"lat": 50.8503,
|
||||
"lng": 4.3517,
|
||||
"description": "Réemploi, école, collaboration. Agence bruxelloise engagée sur les projets scolaires avec une forte dimension réemploi et collaboration avec les usagers.",
|
||||
"criteres": [1, 3, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["réemploi", "school", "collaboration"],
|
||||
"source": "seed passe 2 axe 1",
|
||||
"passe": 2
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"nom": "KEBATI",
|
||||
"pays": "MQ",
|
||||
"ville": "Fort-de-France",
|
||||
"type": "asso",
|
||||
"url": "https://www.kebati.com",
|
||||
"lat": 14.6161,
|
||||
"lng": -61.0588,
|
||||
"description": "Association citoyenne martiniquaise dédiée au bâtiment durable en milieu tropical humide. Centre de ressources reconnu nationalement (22 centres ADEME). 236 visites de chantiers, groupes de travail biosourcés, newsletter 800 abonnés.",
|
||||
"criteres": [1, 2, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["biosourcés", "tropical", "transmission", "Martinique", "centre de ressources"],
|
||||
"source": "P1-RECAP scrape kebati.com",
|
||||
"passe": 3
|
||||
},
|
||||
{
|
||||
"id": 47,
|
||||
"nom": "AQUAA",
|
||||
"pays": "GF",
|
||||
"ville": "Cayenne",
|
||||
"type": "asso",
|
||||
"url": "https://www.aquaa.fr",
|
||||
"lat": 4.9333,
|
||||
"lng": -52.3333,
|
||||
"description": "Association pour la qualité de la construction en Amazonie et aux Antilles. Guides techniques d'architecture bioclimatique guyanaise, éco-matériaux locaux, urbanisme équatorial. Membre fondateur du RBD Intertropical.",
|
||||
"criteres": [2, 3, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["bioclimatique", "amazonien", "éco-matériaux", "Guyane"],
|
||||
"source": "P1-RECAP — scrape échoué (ECONNREFUSED) — à compléter manuellement",
|
||||
"passe": 3
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"nom": "Karibati",
|
||||
"pays": "FR",
|
||||
"ville": "Paris",
|
||||
"type": "reseau",
|
||||
"url": "http://www.karibati.fr",
|
||||
"lat": 48.8566,
|
||||
"lng": 2.3522,
|
||||
"description": "Expert national du bâtiment biosourcé et géosourcé avec 15 ans d'expérience. Développement et structuration de filières biosourcées, accompagnement fabricants, formations, outils méthodologiques (aKacia, Label Produit Biosourcé).",
|
||||
"criteres": [1, 2, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["biosourcés", "géosourcés", "filières", "formation", "national"],
|
||||
"source": "P1-RECAP scrape karibati.fr",
|
||||
"passe": 3
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"nom": "Réseau Bâtiment Durable Intertropical (RBD)",
|
||||
"pays": "GP",
|
||||
"ville": "Pointe-à-Pitre",
|
||||
"type": "reseau",
|
||||
"url": "https://www.synergile.fr/departements/rbd/",
|
||||
"lat": 16.2410,
|
||||
"lng": -61.5337,
|
||||
"description": "Réseau intertropical de 4 structures (AQUAA Guyane, KEBATI Martinique, Envirobat Réunion, RBD Guadeloupe). Réponse concertée aux enjeux du bâtiment durable tropical. Pôle d'innovation Synergîles, financement ADEME.",
|
||||
"criteres": [1, 2, 5, 8],
|
||||
"score": 4,
|
||||
"tags": ["réseau", "intertropical", "DOM-TOM", "ADEME"],
|
||||
"source": "P1-RECAP scrape synergile.fr/rbd",
|
||||
"passe": 3
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"nom": "Caribois",
|
||||
"pays": "GP",
|
||||
"ville": "Baie-Mahault",
|
||||
"type": "agence",
|
||||
"url": "https://www.caribois.com",
|
||||
"lat": 16.2410,
|
||||
"lng": -61.5337,
|
||||
"description": "Constructeur de maisons individuelles en bois, béton ou mixte depuis 20 ans en Guadeloupe. Fabrication 100% locale, matériaux biosourcés (bois sélectionné), architecture créole. Accompagnement complet du financement à la livraison.",
|
||||
"criteres": [1, 2],
|
||||
"score": 2,
|
||||
"tags": ["bois", "créole", "local", "Guadeloupe"],
|
||||
"source": "P1-RECAP scrape caribois.com — constructeur commercial (pas collectif praticien au sens strict)",
|
||||
"passe": 3
|
||||
},
|
||||
{
|
||||
"id": 51,
|
||||
"nom": "Vegetal(e)",
|
||||
"pays": "GP",
|
||||
"ville": "Pointe-à-Pitre",
|
||||
"type": "plateforme",
|
||||
"url": "http://www.vegetal-e.com/fr/guadeloupe_384.html",
|
||||
"lat": 16.2410,
|
||||
"lng": -61.5337,
|
||||
"description": "Portail d'information et base de données sur les éco-matériaux et solutions constructives biosourcés en Guadeloupe. Agrégateur de ressources régionales (chanvre, cellulose, bois, bambou, paille). Newsletter hebdomadaire sur l'innovation construction.",
|
||||
"criteres": [1, 5, 8],
|
||||
"score": 3,
|
||||
"tags": ["biosourcés", "portail", "Guadeloupe", "éco-matériaux"],
|
||||
"source": "P1-RECAP scrape vegetal-e.com — portail info, pas une agence praticien",
|
||||
"passe": 3
|
||||
},
|
||||
{
|
||||
"id": 52,
|
||||
"nom": "Envirobat Réunion",
|
||||
"pays": "RE",
|
||||
"ville": "Saint-Denis",
|
||||
"type": "reseau",
|
||||
"url": "https://www.envirobat.re",
|
||||
"lat": -20.8789,
|
||||
"lng": 55.4481,
|
||||
"description": "Centre de ressources bâtiment durable de La Réunion. Membre fondateur du RBD Intertropical. Équivalent insulaire de KEBATI pour l'océan Indien, transmission et formation des professionnels du bâtiment réunionnais.",
|
||||
"criteres": [2, 5, 8],
|
||||
"score": 3,
|
||||
"tags": ["bâtiment durable", "Réunion", "centre de ressources", "intertropical"],
|
||||
"source": "P1-RECAP — scrape échoué (ECONNREFUSED) — à compléter manuellement",
|
||||
"passe": 3
|
||||
}
|
||||
]
|
||||
@@ -1,376 +0,0 @@
|
||||
// Build auteurs-pensees.json v3.0 — Phase 8.A
|
||||
// Sync corpus JSON unifié : Bonpote authors + LightRAG ingestion flags
|
||||
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
|
||||
const JSON_PATH = 'C:\\Users\\jules\\Dropbox\\ATIS - IPCJRA\\1 PROJETS\\TECH - infra VPS, website pro, RAG\\nav-carte\\public\\data\\auteurs-pensees.json';
|
||||
|
||||
// === LightRAG slug prefixes (from /documents endpoint 2026-05-12) ===
|
||||
const LIGHTRAG_PREFIX_TO_AUTHOR_SLUG = {
|
||||
bookchin: 'murray-bookchin',
|
||||
brand: 'steward-brand',
|
||||
carson: 'rachel-carson',
|
||||
charbonneau: 'bernard-charbonneau',
|
||||
descola: 'philippe-descola',
|
||||
despret: 'vinciane-despret',
|
||||
eaubonne: 'francoise-deaubonne',
|
||||
ellul: 'jacques-ellul',
|
||||
federici: 'silvia-federici',
|
||||
ferdinand: 'malcolm-ferdinand',
|
||||
figueres: 'christiana-figueres',
|
||||
georgescu: 'nicholas-georgescu-roegen',
|
||||
gorz: 'andre-gorz',
|
||||
graeber: 'david-graeber',
|
||||
keith: 'david-keith',
|
||||
klein: 'naomi-klein',
|
||||
kropotkine: 'pierre-kropotkine',
|
||||
latouche: 'serge-latouche',
|
||||
latour: 'bruno-latour',
|
||||
lowy: 'michael-lowy',
|
||||
malm: 'andreas-malm',
|
||||
marx: 'karl-marx',
|
||||
meadows: 'donella-meadows',
|
||||
morizot: 'baptiste-morizot',
|
||||
naess: 'arne-naess',
|
||||
ouassak: 'fatima-ouassak',
|
||||
reclus: 'elisee-reclus',
|
||||
saito: 'kohei-saito',
|
||||
servigne: 'pablo-servigne',
|
||||
shiva: 'vandana-shiva',
|
||||
stengers: 'isabelle-stengers',
|
||||
vettese: 'troy-vettese',
|
||||
};
|
||||
|
||||
const INGESTED_AUTHOR_SLUGS = new Set(Object.values(LIGHTRAG_PREFIX_TO_AUTHOR_SLUG));
|
||||
|
||||
// === Bonpote authors (nom, dates, ecole_principale, ecoles_secondaires[]) ===
|
||||
const BONPOTE_AUTHORS = [
|
||||
// Éco-anarchisme
|
||||
['Pierre Kropotkine', '1842-1921', 'eco-anarchisme', []],
|
||||
['Élisée Reclus', '1830-1905', 'eco-anarchisme', []],
|
||||
['Murray Bookchin', '1921-2006', 'eco-anarchisme', []],
|
||||
['David Graeber', '1961-2020', 'eco-anarchisme', []],
|
||||
['James C. Scott', '1936-2024', 'eco-anarchisme', []],
|
||||
['Marshall Sahlins', '1930-2021', 'eco-anarchisme', []],
|
||||
['Pierre Clastres', '1934-1977', 'eco-anarchisme', []],
|
||||
['Cornélius Castoriadis', '1922-1997', 'eco-anarchisme', []],
|
||||
['David Harvey', '1935-', 'eco-anarchisme', ['ecosocialisme']],
|
||||
['Henri Lefebvre', '1901-1991', 'eco-anarchisme', ['ecosocialisme']],
|
||||
['Émile Gravelle', '1855-1920', 'eco-anarchisme', []],
|
||||
['Henri Zisly', '1872-1945', 'eco-anarchisme', []],
|
||||
['Edward Carpenter', '1844-1929', 'eco-anarchisme', []],
|
||||
['William Morris', '1834-1896', 'eco-anarchisme', []],
|
||||
['John Ruskin', '1819-1900', 'eco-anarchisme', []],
|
||||
['Kirkpatrick Sale', '1937-', 'eco-anarchisme', []],
|
||||
['Wendell Berry', '1934-', 'eco-anarchisme', []],
|
||||
['Kristin Ross', '1953-', 'eco-anarchisme', []],
|
||||
['Theodore Kaczynski', '1942-2023', 'eco-anarchisme', ['technocritique']],
|
||||
['Saint-Simon', '1760-1825', 'eco-anarchisme', []],
|
||||
['Auguste Comte', '1798-1857', 'eco-anarchisme', []],
|
||||
['Alberto Magnaghi', '1941-2023', 'eco-anarchisme', []],
|
||||
['Peter Berg', '1937-2011', 'eco-anarchisme', []],
|
||||
['Andreas Malm', '1977-', 'ecosocialisme', ['eco-anarchisme']],
|
||||
|
||||
// Écosocialisme
|
||||
['Karl Marx', '1818-1883', 'ecosocialisme', []],
|
||||
['Friedrich Engels', '1820-1895', 'ecosocialisme', []],
|
||||
['Rosa Luxemburg', '1871-1919', 'ecosocialisme', []],
|
||||
['Walter Benjamin', '1892-1940', 'ecosocialisme', []],
|
||||
['John Maynard Keynes', '1883-1946', 'ecosocialisme', []],
|
||||
['Pascal Lamy', '1947-', 'ecosocialisme', []],
|
||||
['Ann Pettifor', '1947-', 'ecosocialisme', []],
|
||||
['Holly Jean Buck', '', 'ecosocialisme', []],
|
||||
['Cédric Durand', '1975-', 'ecosocialisme', []],
|
||||
['Kim Stanley Robinson', '1952-', 'ecosocialisme', []],
|
||||
['André Gorz', '1923-2007', 'ecosocialisme', ['decroissance', 'technocritique']],
|
||||
['Kohei Saito', '1987-', 'ecosocialisme', ['decroissance']],
|
||||
['Razmig Keucheyan', '1975-', 'ecosocialisme', []],
|
||||
['Dominique Méda', '1962-', 'ecosocialisme', []],
|
||||
['Dominique Bourg', '1953-', 'ecosocialisme', []],
|
||||
['Troy Vettese', '', 'ecosocialisme', []],
|
||||
['Loïc Blondiaux', '1962-', 'ecosocialisme', []],
|
||||
['Drew Pendergrass', '', 'ecosocialisme', []],
|
||||
['Jason W. Moore', '', 'ecosocialisme', []],
|
||||
["James O'Connor", '1930-2017', 'ecosocialisme', []],
|
||||
['Herman Daly', '1938-2022', 'ecosocialisme', ['capitalisme-vert']],
|
||||
['John Bellamy Foster', '1953-', 'ecosocialisme', []],
|
||||
['Michael Löwy', '1938-', 'ecosocialisme', []],
|
||||
['Joel Kovel', '1936-2018', 'ecosocialisme', []],
|
||||
['Naomi Klein', '1970-', 'ecosocialisme', []],
|
||||
|
||||
// Technocritique
|
||||
['Jacques Ellul', '1912-1994', 'technocritique', []],
|
||||
['Bernard Charbonneau', '1910-1996', 'technocritique', []],
|
||||
['Lewis Mumford', '1895-1990', 'technocritique', []],
|
||||
['Alain Caillé', '1944-', 'technocritique', []],
|
||||
['Hans Jonas', '1903-1993', 'technocritique', ['ethiques-environnementales']],
|
||||
['Herbert Marcuse', '1898-1979', 'technocritique', []],
|
||||
['Günther Anders', '1902-1992', 'technocritique', []],
|
||||
['Pierre Fournier', '1937-1973', 'technocritique', []],
|
||||
['Alexandre Grothendieck', '1928-2014', 'technocritique', []],
|
||||
['Patrick Viveret', '1948-', 'technocritique', []],
|
||||
['Philippe Bihouix', '1971-', 'technocritique', []],
|
||||
['Jean Baudrillard', '1929-2007', 'technocritique', []],
|
||||
['Serge Latouche', '1940-', 'decroissance', ['technocritique']],
|
||||
['Ivan Illich', '1926-2002', 'technocritique', ['decroissance']],
|
||||
['Leopold Kohr', '1909-1994', 'technocritique', ['decroissance']],
|
||||
['Ernst Schumacher', '1911-1977', 'technocritique', ['decroissance']],
|
||||
['Nicholas Georgescu-Roegen', '1906-1994', 'decroissance', ['technocritique']],
|
||||
|
||||
// Écoféminismes
|
||||
["Françoise d'Eaubonne", '1920-2005', 'ecofeminismes', []],
|
||||
['Vandana Shiva', '1952-', 'ecofeminismes', ['ecologies-decoloniales']],
|
||||
['Starhawk', '1951-', 'ecofeminismes', []],
|
||||
['Ariel Salleh', '1944-', 'ecofeminismes', []],
|
||||
['Maria Mies', '1931-2023', 'ecofeminismes', []],
|
||||
['Carolyn Merchant', '1936-', 'ecofeminismes', []],
|
||||
['Silvia Federici', '1942-', 'ecofeminismes', []],
|
||||
['Val Plumwood', '1939-2008', 'ecofeminismes', []],
|
||||
['Susan Griffin', '1943-', 'ecofeminismes', []],
|
||||
['Veronika Bennholdt-Thomsen', '1944-', 'ecofeminismes', []],
|
||||
['Geneviève Pruvost', '1973-', 'ecofeminismes', []],
|
||||
['Donna Haraway', '1944-', 'ecofeminismes', ['pensees-vivant']],
|
||||
['Émilie Hache', '', 'ecofeminismes', []],
|
||||
['Joanna Macy', '1929-', 'ecofeminismes', ['ethiques-environnementales']],
|
||||
|
||||
// Capitalisme vert
|
||||
['Bill Gates', '1955-', 'capitalisme-vert', []],
|
||||
['Christiana Figueres', '1956-', 'capitalisme-vert', []],
|
||||
['Nicholas Stern', '1946-', 'capitalisme-vert', []],
|
||||
['Jeffrey Sachs', '1954-', 'capitalisme-vert', []],
|
||||
['Jared Diamond', '1937-', 'capitalisme-vert', ['decroissance']],
|
||||
['Jørgen Randers', '1945-', 'capitalisme-vert', ['decroissance']],
|
||||
['Donella Meadows', '1941-2001', 'decroissance', ['capitalisme-vert']],
|
||||
['Dennis Meadows', '1942-', 'decroissance', ['capitalisme-vert']],
|
||||
['Kate Raworth', '1970-', 'capitalisme-vert', []],
|
||||
['Al Gore', '1948-', 'capitalisme-vert', []],
|
||||
['Hal Harvey', '1960-', 'capitalisme-vert', []],
|
||||
['Laurence Tubiana', '1951-', 'capitalisme-vert', []],
|
||||
['Amory Lovins', '1947-', 'capitalisme-vert', []],
|
||||
['David Pearce', '1959-', 'capitalisme-vert', []],
|
||||
['Kerry Turner', '1948-', 'capitalisme-vert', []],
|
||||
['David Keith', '1963-', 'capitalisme-vert', []],
|
||||
['Ted Nordhaus', '1965-', 'capitalisme-vert', []],
|
||||
['Michael Shellenberger', '1971-', 'capitalisme-vert', []],
|
||||
['Pavan Sukhdev', '1960-', 'capitalisme-vert', []],
|
||||
['Janine Benyus', '1958-', 'capitalisme-vert', []],
|
||||
['Robert Costanza', '1950-', 'capitalisme-vert', []],
|
||||
['Peter Kareiva', '1951-', 'capitalisme-vert', []],
|
||||
['Michelle Marvier', '', 'capitalisme-vert', []],
|
||||
['Robert Lalasz', '1915-2003', 'capitalisme-vert', []],
|
||||
['Steward Brand', '1938-', 'capitalisme-vert', []],
|
||||
['Paul Crutzen', '1933-2021', 'capitalisme-vert', []],
|
||||
['Kenneth Boulding', '1910-1993', 'capitalisme-vert', []],
|
||||
['Eugene Odum', '1913-2002', 'capitalisme-vert', []],
|
||||
['Howard Odum', '1924-2002', 'capitalisme-vert', []],
|
||||
['Jean-Marc Jancovici', '1962-', 'capitalisme-vert', []],
|
||||
['Yves Cochet', '1946-', 'capitalisme-vert', ['decroissance']],
|
||||
['Pablo Servigne', '1978-', 'decroissance', ['capitalisme-vert']],
|
||||
['Gauthier Chapelle', '1968-', 'decroissance', ['capitalisme-vert']],
|
||||
|
||||
// Écologies décoloniales
|
||||
['Malcom Ferdinand', '1985-', 'ecologies-decoloniales', []],
|
||||
['Frantz Fanon', '1925-1961', 'ecologies-decoloniales', []],
|
||||
['Édouard Glissant', '1928-2011', 'ecologies-decoloniales', []],
|
||||
['Aimé Césaire', '1913-2008', 'ecologies-decoloniales', []],
|
||||
['Mohamad Amer Meziane', '', 'ecologies-decoloniales', []],
|
||||
['Chico Mendes', '1944-1988', 'ecologies-decoloniales', []],
|
||||
['Joan Martínez Alier', '1939-', 'ecologies-decoloniales', []],
|
||||
['Arturo Escobar', '1951-', 'ecologies-decoloniales', []],
|
||||
['Sous-commandant Marcos', '1957-', 'ecologies-decoloniales', []],
|
||||
['Alberto Acosta', '1948-', 'ecologies-decoloniales', []],
|
||||
['Jérôme Baschet', '1960-', 'ecologies-decoloniales', []],
|
||||
['Fatima Ouassak', '1976-', 'ecofeminismes', ['ecologies-decoloniales']],
|
||||
['William Acker', '1991-', 'ecologies-decoloniales', []],
|
||||
['Giorgos Kallis', '1972-', 'ecologies-decoloniales', ['decroissance']],
|
||||
['Bernard Lambert', '1931-1984', 'ecologies-decoloniales', []],
|
||||
|
||||
// Écofascismes
|
||||
['Alain de Benoist', '1943-', 'ecofascismes', []],
|
||||
['Paul Ralph Ehrlich', '1932-', 'ecofascismes', []],
|
||||
['Garrett Hardin', '1915-2003', 'ecofascismes', []],
|
||||
['Edward Osborne Wilson', '1929-2021', 'ecofascismes', []],
|
||||
['Thomas Malthus', '1803-1882', 'ecofascismes', []],
|
||||
['David Foreman', '1946-2022', 'ecofascismes', []],
|
||||
['Piero San Giorgio', '1971-', 'ecofascismes', []],
|
||||
|
||||
// Éthique environnementale
|
||||
['Arne Næss', '1912-2009', 'ethiques-environnementales', []],
|
||||
['Rachel Carson', '1907-1964', 'ethiques-environnementales', []],
|
||||
['Aldo Leopold', '1887-1948', 'ethiques-environnementales', []],
|
||||
['Imanishi Kinji', '1902-1992', 'ethiques-environnementales', []],
|
||||
['Paul Watson', '1950-', 'ethiques-environnementales', []],
|
||||
['John Muir', '1838-1914', 'ethiques-environnementales', []],
|
||||
['Edward Abbey', '1927-1989', 'ethiques-environnementales', []],
|
||||
['John Baird Callicott', '1941-', 'ethiques-environnementales', []],
|
||||
['Bill Mollison', '1928-2016', 'ethiques-environnementales', []],
|
||||
['David Holmgren', '1955-', 'ethiques-environnementales', []],
|
||||
['Peter Singer', '1946-', 'ethiques-environnementales', []],
|
||||
['Pierre Rabhi', '1938-2021', 'ethiques-environnementales', []],
|
||||
['Rob Hopkins', '1968-', 'ethiques-environnementales', []],
|
||||
['Cyril Dion', '1978-', 'ethiques-environnementales', []],
|
||||
['Gandhi', '1869-1948', 'ethiques-environnementales', []],
|
||||
['Gifford Pinchot', '1865-1946', 'ethiques-environnementales', []],
|
||||
['Lanza del Vasto', '1901-1981', 'ethiques-environnementales', []],
|
||||
['Jorge Mario Bergoglio', '1936-', 'ethiques-environnementales', []],
|
||||
['Gary Snyder', '1930-', 'ethiques-environnementales', []],
|
||||
['Henry David Thoreau', '1817-1862', 'ethiques-environnementales', []],
|
||||
['Ralph Waldo Emerson', '1803-1882', 'ethiques-environnementales', []],
|
||||
['José Bové', '1953-', 'ethiques-environnementales', []],
|
||||
['Glenn Albrecht', '1953-', 'ethiques-environnementales', []],
|
||||
|
||||
// Pensées du vivant
|
||||
['Bruno Latour', '1947-2022', 'pensees-vivant', []],
|
||||
['Isabelle Stengers', '1949-', 'pensees-vivant', []],
|
||||
['Vinciane Despret', '1959-', 'pensees-vivant', []],
|
||||
['Baptiste Morizot', '1983-', 'pensees-vivant', []],
|
||||
['Philippe Descola', '1949-', 'pensees-vivant', []],
|
||||
['Eduardo Viveiros de Castro', '1951-', 'pensees-vivant', []],
|
||||
['Anna Tsing', '1952-', 'pensees-vivant', []],
|
||||
['Deborah Bird Rose', '1946-2018', 'pensees-vivant', []],
|
||||
['Lynn Margulis', '1938-2011', 'pensees-vivant', []],
|
||||
['James Lovelock', '1919-2022', 'pensees-vivant', []],
|
||||
['Serge Moscovici', '1925-2014', 'pensees-vivant', []],
|
||||
['Theodore Roszak', '1933-2011', 'pensees-vivant', []],
|
||||
['Baruch Spinoza', '1632-1677', 'pensees-vivant', []],
|
||||
];
|
||||
|
||||
// Special slug overrides (match v2.1 IDs + ligatures)
|
||||
const NAME_TO_SLUG_OVERRIDES = {
|
||||
'Malcom Ferdinand': 'malcolm-ferdinand',
|
||||
"Françoise d'Eaubonne": 'francoise-deaubonne',
|
||||
'Donella Meadows': 'donella-meadows',
|
||||
'Dennis Meadows': 'dennis-meadows',
|
||||
'Arne Næss': 'arne-naess',
|
||||
'Jørgen Randers': 'jorgen-randers',
|
||||
};
|
||||
|
||||
function slugify(name) {
|
||||
// Pre-process special ligatures and chars not handled by NFKD
|
||||
let pre = name
|
||||
.replace(/[æÆ]/g, 'ae')
|
||||
.replace(/[øØ]/g, 'o')
|
||||
.replace(/[œŒ]/g, 'oe')
|
||||
.replace(/ß/g, 'ss');
|
||||
// Remove diacritical marks
|
||||
const noAccent = pre.normalize('NFKD').replace(/[̀-ͯ]/g, '');
|
||||
return noAccent
|
||||
.toLowerCase()
|
||||
.replace(/[^a-z0-9]+/g, '-')
|
||||
.replace(/^-+|-+$/g, '');
|
||||
}
|
||||
|
||||
function getAuthorSlug(name) {
|
||||
if (NAME_TO_SLUG_OVERRIDES[name]) return NAME_TO_SLUG_OVERRIDES[name];
|
||||
return slugify(name);
|
||||
}
|
||||
|
||||
function main() {
|
||||
const raw = fs.readFileSync(JSON_PATH, 'utf-8');
|
||||
const data = JSON.parse(raw);
|
||||
|
||||
const existingBySlug = {};
|
||||
for (const a of data.auteurs) existingBySlug[a.id] = a;
|
||||
|
||||
const newAuthors = [];
|
||||
const seenSlugs = new Set();
|
||||
|
||||
for (const [nom, dates, ecolePrincipale, ecolesSecondaires] of BONPOTE_AUTHORS) {
|
||||
const slug = getAuthorSlug(nom);
|
||||
if (seenSlugs.has(slug)) {
|
||||
console.error(`DUPLICATE SKIP: ${nom} -> ${slug}`);
|
||||
continue;
|
||||
}
|
||||
seenSlugs.add(slug);
|
||||
|
||||
const ingere = INGESTED_AUTHOR_SLUGS.has(slug);
|
||||
const ecoles = [ecolePrincipale, ...ecolesSecondaires];
|
||||
|
||||
if (existingBySlug[slug]) {
|
||||
// Preserve enriched entry
|
||||
const entry = { ...existingBySlug[slug], ingere };
|
||||
newAuthors.push(entry);
|
||||
} else {
|
||||
// New minimal entry
|
||||
const bioProvisoire = ingere
|
||||
? `Auteur·ice ingéré·e dans le RAG ATIS, bio à enrichir lors de PRG-5.`
|
||||
: `Théoricien·ne présent·e sur le poster Bonpote (${ecolePrincipale}), non ingéré·e dans le RAG ATIS.`;
|
||||
newAuthors.push({
|
||||
id: slug,
|
||||
nom,
|
||||
dates,
|
||||
ecoles,
|
||||
ecole_principale: ecolePrincipale,
|
||||
livres_rag: [],
|
||||
theses_cles_attendues: [],
|
||||
bio_courte_provisoire: bioProvisoire,
|
||||
ingere,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Preserve any v2.1 author not in Bonpote list
|
||||
for (const [slug, entry] of Object.entries(existingBySlug)) {
|
||||
if (!seenSlugs.has(slug)) {
|
||||
const copy = { ...entry };
|
||||
if (!('ingere' in copy)) copy.ingere = INGESTED_AUTHOR_SLUGS.has(slug);
|
||||
newAuthors.push(copy);
|
||||
seenSlugs.add(slug);
|
||||
console.error(`NOTE: preserved v2.1 author not in Bonpote canonical: ${slug}`);
|
||||
}
|
||||
}
|
||||
|
||||
const auteursCount = newAuthors.length;
|
||||
const auteursIngeresCount = newAuthors.filter(a => a.ingere).length;
|
||||
|
||||
data.meta.version = '3.0';
|
||||
data.meta.updated = '2026-05-12';
|
||||
data.meta.auteurs_count = auteursCount;
|
||||
data.meta.auteurs_ingeres_count = auteursIngeresCount;
|
||||
data.meta.source = 'FRACAS Bonpote V2 oct 2024 + LightRAG corpus 12/05/2026 (v3.0 sync)';
|
||||
data.meta.note_v3_0 = 'Phase 8.A sync corpus unifie : ~140 auteurs Bonpote integres, flag ingere:true/false selon LightRAG VPS. Auteurs non-ingeres = entrees minimales (bio provisoire, livres_rag vide), a enrichir lors de PRG-4/PRG-5.';
|
||||
|
||||
data.auteurs = newAuthors;
|
||||
|
||||
fs.writeFileSync(JSON_PATH, JSON.stringify(data, null, 2), 'utf-8');
|
||||
|
||||
// Validate parse-back
|
||||
const parsedBack = JSON.parse(fs.readFileSync(JSON_PATH, 'utf-8'));
|
||||
if (parsedBack.auteurs.length !== auteursCount) {
|
||||
console.error('PARSE-BACK MISMATCH');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Stats
|
||||
const schoolsStats = {};
|
||||
for (const a of newAuthors) {
|
||||
const ep = a.ecole_principale || '?';
|
||||
if (!schoolsStats[ep]) schoolsStats[ep] = { total: 0, ingere: 0 };
|
||||
schoolsStats[ep].total++;
|
||||
if (a.ingere) schoolsStats[ep].ingere++;
|
||||
}
|
||||
|
||||
console.log('\n=== JSON v3.0 written ===');
|
||||
console.log(`Total auteurs : ${auteursCount}`);
|
||||
console.log(`Ingeres : ${auteursIngeresCount}`);
|
||||
console.log(`Non-ingeres : ${auteursCount - auteursIngeresCount}`);
|
||||
console.log(`Parse-back : OK (${parsedBack.auteurs.length} auteurs)`);
|
||||
console.log('\nPer school (ecole_principale):');
|
||||
const sortedSchools = Object.entries(schoolsStats).sort((a, b) => b[1].total - a[1].total);
|
||||
for (const [school, st] of sortedSchools) {
|
||||
console.log(` ${school.padEnd(30)} total=${String(st.total).padStart(3)} ingere=${String(st.ingere).padStart(3)} non-ing=${String(st.total - st.ingere).padStart(3)}`);
|
||||
}
|
||||
|
||||
// Top 5 schools with most non-ingested
|
||||
const nonIngStats = sortedSchools
|
||||
.map(([k, v]) => [k, v.total - v.ingere])
|
||||
.sort((a, b) => b[1] - a[1])
|
||||
.slice(0, 5);
|
||||
console.log('\nTop 5 ecoles avec le plus de non-ingeres (PRG-4 priorities):');
|
||||
for (const [school, count] of nonIngStats) {
|
||||
console.log(` ${school.padEnd(30)} non-ing=${count}`);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
356
scripts/geocode-structures.js
Normal file
356
scripts/geocode-structures.js
Normal file
@@ -0,0 +1,356 @@
|
||||
/**
|
||||
* Script one-shot : ajoute latitude/longitude aux structures depuis Nominatim
|
||||
* Usage : node scripts/geocode-structures.js
|
||||
* IMPORTANT : respecter le rate limit Nominatim (1 req/sec max)
|
||||
*
|
||||
* Stratégie à 3 niveaux :
|
||||
* 1. Lookup statique (villes les plus fréquentes - instantané)
|
||||
* 2. Nominatim API (geocodage réel - 1 req/sec)
|
||||
* 3. Fallback pays (centroïde national si ville inconnue)
|
||||
*/
|
||||
|
||||
import * as fs from 'fs'
|
||||
import * as path from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
const __dirname = path.dirname(__filename)
|
||||
|
||||
const DATA_PATH = path.join(__dirname, '..', 'public', 'data', 'reseaux-bifurcation.json')
|
||||
const data = JSON.parse(fs.readFileSync(DATA_PATH, 'utf-8'))
|
||||
|
||||
// Lookup table statique pour villes connues (évite appels API pour les fréquentes)
|
||||
const CITY_COORDS = {
|
||||
'Paris': { lat: 48.8566, lng: 2.3522 },
|
||||
'Bruxelles': { lat: 50.8503, lng: 4.3517 },
|
||||
'Brussels': { lat: 50.8503, lng: 4.3517 },
|
||||
'Lyon': { lat: 45.7640, lng: 4.8357 },
|
||||
'Marseille': { lat: 43.2965, lng: 5.3698 },
|
||||
'Toulouse': { lat: 43.6047, lng: 1.4442 },
|
||||
'Bordeaux': { lat: 44.8378, lng: -0.5792 },
|
||||
'Nantes': { lat: 47.2184, lng: -1.5536 },
|
||||
'Strasbourg': { lat: 48.5734, lng: 7.7521 },
|
||||
'Lille': { lat: 50.6292, lng: 3.0573 },
|
||||
'Grenoble': { lat: 45.1885, lng: 5.7245 },
|
||||
'Montpellier': { lat: 43.6108, lng: 3.8767 },
|
||||
'Rennes': { lat: 48.1173, lng: -1.6778 },
|
||||
'Berlin': { lat: 52.5200, lng: 13.4050 },
|
||||
'Amsterdam': { lat: 52.3676, lng: 4.9041 },
|
||||
'London': { lat: 51.5074, lng: -0.1278 },
|
||||
'Madrid': { lat: 40.4168, lng: -3.7038 },
|
||||
'Barcelona': { lat: 41.3851, lng: 2.1734 },
|
||||
'Rome': { lat: 41.9028, lng: 12.4964 },
|
||||
'Vienna': { lat: 48.2082, lng: 16.3738 },
|
||||
'Warsaw': { lat: 52.2297, lng: 21.0122 },
|
||||
'Copenhagen': { lat: 55.6761, lng: 12.5683 },
|
||||
'Zurich': { lat: 47.3769, lng: 8.5417 },
|
||||
'Helsinki': { lat: 60.1699, lng: 24.9384 },
|
||||
'Porto': { lat: 41.1579, lng: -8.6291 },
|
||||
'Lisbonne': { lat: 38.7169, lng: -9.1399 },
|
||||
'Lisbon': { lat: 38.7169, lng: -9.1399 },
|
||||
'Gent': { lat: 51.0543, lng: 3.7174 },
|
||||
'Ghent': { lat: 51.0543, lng: 3.7174 },
|
||||
'Liège': { lat: 50.6326, lng: 5.5797 },
|
||||
'Krakow': { lat: 50.0647, lng: 19.9450 },
|
||||
'Wroclaw': { lat: 51.1079, lng: 17.0385 },
|
||||
'Lausanne': { lat: 46.5197, lng: 6.6323 },
|
||||
'Genève': { lat: 46.2044, lng: 6.1432 },
|
||||
'Geneva': { lat: 46.2044, lng: 6.1432 },
|
||||
'Namur': { lat: 50.4669, lng: 4.8674 },
|
||||
'Tallinn': { lat: 59.4370, lng: 24.7536 },
|
||||
'Brest': { lat: 48.3904, lng: -4.4861 },
|
||||
'Tours': { lat: 47.3941, lng: 0.6848 },
|
||||
'Caen': { lat: 49.1829, lng: -0.3707 },
|
||||
'Montauban': { lat: 44.0174, lng: 1.3518 },
|
||||
'Bayonne': { lat: 43.4929, lng: -1.4748 },
|
||||
'Pau': { lat: 43.2951, lng: -0.3708 },
|
||||
'Aurillac': { lat: 44.9282, lng: 2.4480 },
|
||||
'Aubenas': { lat: 44.6208, lng: 4.3908 },
|
||||
'Hyères': { lat: 43.1200, lng: 6.1283 },
|
||||
'Aubagne': { lat: 43.2940, lng: 5.5706 },
|
||||
'Auch': { lat: 43.6462, lng: 0.5851 },
|
||||
'Clermont-Ferrand': { lat: 45.7797, lng: 3.0863 },
|
||||
'Dijon': { lat: 47.3220, lng: 5.0415 },
|
||||
'Nice': { lat: 43.7102, lng: 7.2620 },
|
||||
'Metz': { lat: 49.1193, lng: 6.1757 },
|
||||
'Nancy': { lat: 48.6921, lng: 6.1844 },
|
||||
'Rouen': { lat: 49.4432, lng: 1.0993 },
|
||||
'Angers': { lat: 47.4784, lng: -0.5632 },
|
||||
'Reims': { lat: 49.2583, lng: 4.0317 },
|
||||
'Le Mans': { lat: 47.9960, lng: 0.1966 },
|
||||
'Amiens': { lat: 49.8941, lng: 2.2958 },
|
||||
'Perpignan': { lat: 42.6886, lng: 2.8948 },
|
||||
'Orléans': { lat: 47.9029, lng: 1.9039 },
|
||||
'Limoges': { lat: 45.8315, lng: 1.2578 },
|
||||
'Mulhouse': { lat: 47.7508, lng: 7.3359 },
|
||||
'Besançon': { lat: 47.2378, lng: 6.0241 },
|
||||
'Poitiers': { lat: 46.5802, lng: 0.3404 },
|
||||
'Villeurbanne': { lat: 45.7676, lng: 4.8800 },
|
||||
'Aix-en-Provence': { lat: 43.5297, lng: 5.4474 },
|
||||
'Boulogne-Billancourt': { lat: 48.8353, lng: 2.2400 },
|
||||
'Nîmes': { lat: 43.8367, lng: 4.3601 },
|
||||
'Argenteuil': { lat: 48.9478, lng: 2.2476 },
|
||||
'Montreuil': { lat: 48.8638, lng: 2.4440 },
|
||||
'Roubaix': { lat: 50.6942, lng: 3.1746 },
|
||||
'Tourcoing': { lat: 50.7238, lng: 3.1612 },
|
||||
'Dunkerque': { lat: 51.0343, lng: 2.3752 },
|
||||
'Calais': { lat: 50.9513, lng: 1.8587 },
|
||||
'Valenciennes': { lat: 50.3573, lng: 3.5239 },
|
||||
'Chartres': { lat: 48.4469, lng: 1.4877 },
|
||||
'Colmar': { lat: 48.0778, lng: 7.3585 },
|
||||
'Lorient': { lat: 47.7482, lng: -3.3714 },
|
||||
'Quimper': { lat: 47.9983, lng: -4.0975 },
|
||||
'Vannes': { lat: 47.6559, lng: -2.7602 },
|
||||
'Saint-Nazaire': { lat: 47.2736, lng: -2.2137 },
|
||||
'La Rochelle': { lat: 46.1603, lng: -1.1511 },
|
||||
'Angoulême': { lat: 45.6500, lng: 0.1561 },
|
||||
'Périgueux': { lat: 45.1866, lng: 0.7213 },
|
||||
'Tulle': { lat: 45.2672, lng: 1.7726 },
|
||||
'Guéret': { lat: 46.1714, lng: 1.8714 },
|
||||
'Moulins': { lat: 46.5647, lng: 3.3325 },
|
||||
'Brive-la-Gaillarde': { lat: 45.1597, lng: 1.5317 },
|
||||
'Saint-Étienne': { lat: 45.4397, lng: 4.3872 },
|
||||
'Grenoble': { lat: 45.1885, lng: 5.7245 },
|
||||
'Valence': { lat: 44.9334, lng: 4.8924 },
|
||||
'Chambéry': { lat: 45.5646, lng: 5.9178 },
|
||||
'Annecy': { lat: 45.8992, lng: 6.1294 },
|
||||
'Mâcon': { lat: 46.3066, lng: 4.8281 },
|
||||
'Chalon-sur-Saône': { lat: 46.7806, lng: 4.8534 },
|
||||
'Auxerre': { lat: 47.7977, lng: 3.5740 },
|
||||
'Troyes': { lat: 48.2973, lng: 4.0744 },
|
||||
'Châlons-en-Champagne': { lat: 48.9571, lng: 4.3665 },
|
||||
'Épinal': { lat: 48.1741, lng: 6.4490 },
|
||||
'Belfort': { lat: 47.6396, lng: 6.8633 },
|
||||
'Montbéliard': { lat: 47.5076, lng: 6.7987 },
|
||||
'Vilvorde': { lat: 50.9267, lng: 4.4145 },
|
||||
'Liège': { lat: 50.6326, lng: 5.5797 },
|
||||
'Louvain-la-Neuve': { lat: 50.6683, lng: 4.6118 },
|
||||
'Leuven': { lat: 50.8798, lng: 4.7005 },
|
||||
'Antwerp': { lat: 51.2194, lng: 4.4025 },
|
||||
'Anvers': { lat: 51.2194, lng: 4.4025 },
|
||||
'Rotterdam': { lat: 51.9244, lng: 4.4777 },
|
||||
'The Hague': { lat: 52.0705, lng: 4.3007 },
|
||||
'Utrecht': { lat: 52.0907, lng: 5.1214 },
|
||||
'Eindhoven': { lat: 51.4416, lng: 5.4697 },
|
||||
'Tilburg': { lat: 51.5555, lng: 5.0913 },
|
||||
'Hamburg': { lat: 53.5753, lng: 10.0153 },
|
||||
'Munich': { lat: 48.1351, lng: 11.5820 },
|
||||
'Cologne': { lat: 50.9333, lng: 6.9500 },
|
||||
'Frankfurt': { lat: 50.1109, lng: 8.6821 },
|
||||
'Stuttgart': { lat: 48.7758, lng: 9.1829 },
|
||||
'Dusseldorf': { lat: 51.2217, lng: 6.7762 },
|
||||
'Dortmund': { lat: 51.5136, lng: 7.4653 },
|
||||
'Essen': { lat: 51.4556, lng: 7.0116 },
|
||||
'Leipzig': { lat: 51.3397, lng: 12.3731 },
|
||||
'Dresden': { lat: 51.0504, lng: 13.7373 },
|
||||
'Hanover': { lat: 52.3759, lng: 9.7320 },
|
||||
'Nuremberg': { lat: 49.4521, lng: 11.0767 },
|
||||
'Freiburg': { lat: 47.9990, lng: 7.8421 },
|
||||
'Kassel': { lat: 51.3127, lng: 9.4797 },
|
||||
'Mannheim': { lat: 49.4875, lng: 8.4660 },
|
||||
'Heidelberg': { lat: 49.3988, lng: 8.6724 },
|
||||
'Tübingen': { lat: 48.5217, lng: 9.0576 },
|
||||
'Weimar': { lat: 50.9795, lng: 11.3235 },
|
||||
'Bristol': { lat: 51.4545, lng: -2.5879 },
|
||||
'Manchester': { lat: 53.4808, lng: -2.2426 },
|
||||
'Birmingham': { lat: 52.4862, lng: -1.8904 },
|
||||
'Edinburgh': { lat: 55.9533, lng: -3.1883 },
|
||||
'Glasgow': { lat: 55.8642, lng: -4.2518 },
|
||||
'Leeds': { lat: 53.7997, lng: -1.5492 },
|
||||
'Malmö': { lat: 55.6050, lng: 13.0038 },
|
||||
'Stockholm': { lat: 59.3293, lng: 18.0686 },
|
||||
'Göteborg': { lat: 57.7089, lng: 11.9746 },
|
||||
'Oslo': { lat: 59.9139, lng: 10.7522 },
|
||||
'Bergen': { lat: 60.3929, lng: 5.3241 },
|
||||
'Lausanne': { lat: 46.5197, lng: 6.6323 },
|
||||
'Basel': { lat: 47.5596, lng: 7.5886 },
|
||||
'Bern': { lat: 46.9480, lng: 7.4474 },
|
||||
'Milan': { lat: 45.4654, lng: 9.1859 },
|
||||
'Turin': { lat: 45.0703, lng: 7.6869 },
|
||||
'Florence': { lat: 43.7696, lng: 11.2558 },
|
||||
'Naples': { lat: 40.8518, lng: 14.2681 },
|
||||
'Bologna': { lat: 44.4949, lng: 11.3426 },
|
||||
'Venice': { lat: 45.4408, lng: 12.3155 },
|
||||
'Venise': { lat: 45.4408, lng: 12.3155 },
|
||||
'Séville': { lat: 37.3891, lng: -5.9845 },
|
||||
'Seville': { lat: 37.3891, lng: -5.9845 },
|
||||
'Valence': { lat: 39.4699, lng: -0.3763 },
|
||||
'Bilbao': { lat: 43.2630, lng: -2.9350 },
|
||||
'Casablanca': { lat: 33.5731, lng: -7.5898 },
|
||||
'Rabat': { lat: 34.0209, lng: -6.8417 },
|
||||
'Dakar': { lat: 14.7167, lng: -17.4677 },
|
||||
'Abidjan': { lat: 5.3600, lng: -4.0083 },
|
||||
'Nairobi': { lat: -1.2921, lng: 36.8219 },
|
||||
'Tunis': { lat: 36.8065, lng: 10.1815 },
|
||||
'Alger': { lat: 36.7372, lng: 3.0864 },
|
||||
'New York': { lat: 40.7128, lng: -74.0060 },
|
||||
'San Francisco': { lat: 37.7749, lng: -122.4194 },
|
||||
'Los Angeles': { lat: 34.0522, lng: -118.2437 },
|
||||
'Chicago': { lat: 41.8781, lng: -87.6298 },
|
||||
'Boston': { lat: 42.3601, lng: -71.0589 },
|
||||
'Seattle': { lat: 47.6062, lng: -122.3321 },
|
||||
'Montreal': { lat: 45.5017, lng: -73.5673 },
|
||||
'Toronto': { lat: 43.6532, lng: -79.3832 },
|
||||
'Vancouver': { lat: 49.2827, lng: -123.1207 },
|
||||
'Melbourne': { lat: -37.8136, lng: 144.9631 },
|
||||
'Sydney': { lat: -33.8688, lng: 151.2093 },
|
||||
'Tokyo': { lat: 35.6762, lng: 139.6503 },
|
||||
'Seoul': { lat: 37.5665, lng: 126.9780 },
|
||||
'Shanghai': { lat: 31.2304, lng: 121.4737 },
|
||||
'Beijing': { lat: 39.9042, lng: 116.4074 },
|
||||
'Mexico City': { lat: 19.4326, lng: -99.1332 },
|
||||
'Buenos Aires': { lat: -34.6118, lng: -58.3960 },
|
||||
'São Paulo': { lat: -23.5505, lng: -46.6333 },
|
||||
'Rio de Janeiro': { lat: -22.9068, lng: -43.1729 },
|
||||
}
|
||||
|
||||
// Fallback par pays si ville inconnue
|
||||
const COUNTRY_FALLBACK = {
|
||||
'FR': { lat: 46.6034, lng: 1.8883 },
|
||||
'BE': { lat: 50.5039, lng: 4.4699 },
|
||||
'NL': { lat: 52.3702, lng: 4.8952 },
|
||||
'DE': { lat: 51.1657, lng: 10.4515 },
|
||||
'GB': { lat: 55.3781, lng: -3.4360 },
|
||||
'UK': { lat: 55.3781, lng: -3.4360 },
|
||||
'IT': { lat: 41.8719, lng: 12.5674 },
|
||||
'ES': { lat: 40.4637, lng: -3.7492 },
|
||||
'CH': { lat: 46.8182, lng: 8.2275 },
|
||||
'PL': { lat: 51.9194, lng: 19.1451 },
|
||||
'DK': { lat: 56.2639, lng: 9.5018 },
|
||||
'AT': { lat: 47.5162, lng: 14.5501 },
|
||||
'PT': { lat: 39.3999, lng: -8.2245 },
|
||||
'FI': { lat: 61.9241, lng: 25.7482 },
|
||||
'SE': { lat: 60.1282, lng: 18.6435 },
|
||||
'NO': { lat: 60.4720, lng: 8.4689 },
|
||||
'US': { lat: 37.0902, lng: -95.7129 },
|
||||
'MA': { lat: 31.7917, lng: -7.0926 },
|
||||
'SN': { lat: 14.4974, lng: -14.4524 },
|
||||
'MG': { lat: -18.7669, lng: 46.8691 },
|
||||
'EE': { lat: 58.5953, lng: 25.0136 },
|
||||
'LT': { lat: 55.1694, lng: 23.8813 },
|
||||
'LV': { lat: 56.8796, lng: 24.6032 },
|
||||
'HU': { lat: 47.1625, lng: 19.5033 },
|
||||
'CZ': { lat: 49.8175, lng: 15.4730 },
|
||||
'SK': { lat: 48.6690, lng: 19.6990 },
|
||||
'RO': { lat: 45.9432, lng: 24.9668 },
|
||||
'GR': { lat: 39.0742, lng: 21.8243 },
|
||||
'HR': { lat: 45.1000, lng: 15.2000 },
|
||||
'SI': { lat: 46.1512, lng: 14.9955 },
|
||||
'RS': { lat: 44.0165, lng: 21.0059 },
|
||||
'CA': { lat: 56.1304, lng: -106.3468 },
|
||||
'AU': { lat: -25.2744, lng: 133.7751 },
|
||||
'NZ': { lat: -40.9006, lng: 174.8860 },
|
||||
'JP': { lat: 36.2048, lng: 138.2529 },
|
||||
'KR': { lat: 35.9078, lng: 127.7669 },
|
||||
'CN': { lat: 35.8617, lng: 104.1954 },
|
||||
'BR': { lat: -14.2350, lng: -51.9253 },
|
||||
'AR': { lat: -38.4161, lng: -63.6167 },
|
||||
'MX': { lat: 23.6345, lng: -102.5528 },
|
||||
'CL': { lat: -35.6751, lng: -71.5430 },
|
||||
'CO': { lat: 4.5709, lng: -74.2973 },
|
||||
'PE': { lat: -9.1900, lng: -75.0152 },
|
||||
'TN': { lat: 33.8869, lng: 9.5375 },
|
||||
'DZ': { lat: 28.0339, lng: 1.6596 },
|
||||
'CI': { lat: 7.5399, lng: -5.5471 },
|
||||
'KE': { lat: -0.0236, lng: 37.9062 },
|
||||
'ZA': { lat: -30.5595, lng: 22.9375 },
|
||||
'NG': { lat: 9.0820, lng: 8.6753 },
|
||||
'GH': { lat: 7.9465, lng: -1.0232 },
|
||||
'CM': { lat: 3.8480, lng: 11.5021 },
|
||||
'ET': { lat: 9.1450, lng: 40.4897 },
|
||||
'TZ': { lat: -6.3690, lng: 34.8888 },
|
||||
'UG': { lat: 1.3733, lng: 32.2903 },
|
||||
'RW': { lat: -1.9403, lng: 29.8739 },
|
||||
'IN': { lat: 20.5937, lng: 78.9629 },
|
||||
'BD': { lat: 23.6850, lng: 90.3563 },
|
||||
'PK': { lat: 30.3753, lng: 69.3451 },
|
||||
'ID': { lat: -0.7893, lng: 113.9213 },
|
||||
'TH': { lat: 15.8700, lng: 100.9925 },
|
||||
'VN': { lat: 14.0583, lng: 108.2772 },
|
||||
'MY': { lat: 4.2105, lng: 101.9758 },
|
||||
'PH': { lat: 12.8797, lng: 121.7740 },
|
||||
}
|
||||
|
||||
async function geocodeNominatim(ville, pays) {
|
||||
await new Promise(r => setTimeout(r, 1100)) // rate limit 1 req/sec
|
||||
try {
|
||||
const query = encodeURIComponent(`${ville}, ${pays}`)
|
||||
const url = `https://nominatim.openstreetmap.org/search?q=${query}&format=json&limit=1`
|
||||
const res = await fetch(url, { headers: { 'User-Agent': 'AEP-Bifurcation-Map/1.0' } })
|
||||
const result = await res.json()
|
||||
if (result.length > 0) {
|
||||
return { lat: parseFloat(result[0].lat), lng: parseFloat(result[0].lon) }
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn(`Geocoding failed for ${ville}, ${pays}: ${e.message}`)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
async function main() {
|
||||
let enriched = 0
|
||||
let fromCache = 0
|
||||
let fromNominatim = 0
|
||||
let fromCountryFallback = 0
|
||||
let failed = 0
|
||||
|
||||
console.log(`Starting geocoding of ${data.structures.length} structures...`)
|
||||
|
||||
for (const structure of data.structures) {
|
||||
// Déjà geocodé
|
||||
if (structure.latitude != null && structure.longitude != null) {
|
||||
enriched++
|
||||
continue
|
||||
}
|
||||
|
||||
const villeKey = structure.ville?.trim()
|
||||
|
||||
// 1. Lookup statique
|
||||
if (villeKey && CITY_COORDS[villeKey]) {
|
||||
structure.latitude = CITY_COORDS[villeKey].lat
|
||||
structure.longitude = CITY_COORDS[villeKey].lng
|
||||
enriched++
|
||||
fromCache++
|
||||
process.stdout.write('.')
|
||||
continue
|
||||
}
|
||||
|
||||
// 2. Nominatim
|
||||
if (villeKey && structure.pays) {
|
||||
const coords = await geocodeNominatim(villeKey, structure.pays)
|
||||
if (coords) {
|
||||
structure.latitude = coords.lat
|
||||
structure.longitude = coords.lng
|
||||
enriched++
|
||||
fromNominatim++
|
||||
console.log(`\n Geocoded: ${structure.nom} -> ${villeKey} (${coords.lat.toFixed(3)}, ${coords.lng.toFixed(3)})`)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Fallback pays
|
||||
if (structure.pays && COUNTRY_FALLBACK[structure.pays]) {
|
||||
structure.latitude = COUNTRY_FALLBACK[structure.pays].lat
|
||||
structure.longitude = COUNTRY_FALLBACK[structure.pays].lng
|
||||
enriched++
|
||||
fromCountryFallback++
|
||||
process.stdout.write('~')
|
||||
continue
|
||||
}
|
||||
|
||||
console.warn(`\n No coords for: ${structure.nom} (${structure.ville}, ${structure.pays})`)
|
||||
structure.latitude = null
|
||||
structure.longitude = null
|
||||
failed++
|
||||
}
|
||||
|
||||
console.log('\n')
|
||||
fs.writeFileSync(DATA_PATH, JSON.stringify(data, null, 2), 'utf-8')
|
||||
console.log(`Done: ${enriched}/${data.structures.length} structures geocoded`)
|
||||
console.log(` - Cache statique : ${fromCache}`)
|
||||
console.log(` - Nominatim API : ${fromNominatim}`)
|
||||
console.log(` - Fallback pays : ${fromCountryFallback}`)
|
||||
console.log(` - Echecs : ${failed}`)
|
||||
}
|
||||
|
||||
main().catch(console.error)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user