System
The command center watching itself — scheduler pulse, per-site snapshots, the live monitor log, instruments, and operational memory.
- Sites
- 3
- Reporting
- 1/3
- Last run
- 3h ago
- Snapshot
- Jun 26, 12:48
Per-site telemetry
Cron monitor stream
Skills inventory
.claude/skills/seo-auditLance l'audit technique SEO d'un site géré par le projet /root/apps/seo (robots.txt, sitemap, title/meta, canonical, headings, JSON-LD, Open Graph, indexabilité) et résume les findings par sévérité. À DÉCLENCHER sur "audit seo", "audite <site>", "check technique SEO", "scanne le SEO de <site>".
.claude/skills/seo-cwvMesure les Core Web Vitals (performance, LCP, CLS, TBT/INP) des sites du projet /root/apps/seo via l'API Google PageSpeed Insights — données LAB Lighthouse + champs RÉELS CrUX, findings par sévérité, snapshots versionnés. À DÉCLENCHER sur "core web vitals", "performance <site>", "vitesse <site>", "lighthouse", "pagespeed".
.claude/skills/seo-keywordsRecherche de mots-clés, volumes de recherche réels, SERP/positions et idées de mots-clés via l'API DataForSEO (pay-per-call). Prérequis — identifiants dans /root/.secrets/seo-apis.env. À DÉCLENCHER sur "volume de recherche", "mots-clés <sujet>", "position de <site> sur <requête>", "idées de mots-clés", "rank tracking", "combien cherchent <requête>".
.claude/skills/seo-monitorSuivi Google Search Console des sites du projet /root/apps/seo (clics, impressions, CTR, position, top requêtes/pages), snapshots versionnés, détection de régressions et alerte Signal. À DÉCLENCHER sur "monitoring SEO", "données GSC", "positions <site>", "régressions SEO", "rapport Search Console".
.claude/skills/seo-onboardOnboarde un nouveau site/client dans le SEO command center (/root/apps/seo) — ajoute l'entrée dans config/sites.json, crée l'arborescence sites/<key>/, génère la fiche client memory/clients/<key>.md et affiche les prochaines étapes. Idempotent. À DÉCLENCHER sur "onboard un site", "ajoute un client SEO", "nouveau site <nom>", "brancher <client>".
.claude/skills/seo-opportunitiesTransforme la data Google Search Console déjà collectée (snapshots GSC du projet /root/apps/seo) en backlog SEO priorisé, SANS aucune API externe — striking distance (pos 5-20), requêtes/pages à fortes impressions mais faible CTR (title/meta à revoir), estimation de clics potentiels. À DÉCLENCHER sur "opportunités SEO", "striking distance", "quick wins <site>", "où gagner du trafic", "backlog SEO", "pages à optimiser".
.claude/skills/seo-reportGénère le rapport mensuel CLIENT en PDF brandé (KPIs GSC + tendance 7j vs 7j, top requêtes/pages, santé technique, ce qui a été fait, prochaines priorités) pour un site du projet /root/apps/seo. À DÉCLENCHER sur "rapport mensuel <client>", "rapport SEO", "PDF client", "reporting".
Knowledge ledger
Decisions
Décisions verrouillées
| Date | Décision | Rationale |
|---|---|---|
| 2026-06-25 | Stockage de l'état = PocketBase dédié (pocketbase-seo) |
Pattern VPS, requêtable, alimente le dashboard |
| 2026-06-25 | Trafic & conversions via GA4 (Google), PAS Wizytics | Choix utilisateur explicite |
| 2026-06-25 | Alertes via Signal CLI | Déjà en place sur le VPS |
| 2026-06-25 | Build dashboard + skills en parallèle | Choix utilisateur |
| 2026-06-25 | GSC geniusprep = réutiliser OAuth wizytics ; GSC emet = service account /root/.secrets/emet-gsc-service-account.json |
Déjà fonctionnels, testés |
| 2026-06-25 | Skills projet dans .claude/skills/, créés progressivement |
Scope au projet, pas de pollution globale |
| 2026-06-26 | Dashboard déployé comme app VPS : conteneur seo (réseau proxy) + NPM seo.vpsdashboard.space (SSL LE #335). Lit les fichiers plats via volume /root/apps/seo:/data/seo:ro (SEO_ROOT env). PocketBase différé |
Visuel live tout de suite, zéro dépendance ; PB viendra pour les vues transversales |
| 2026-06-26 | API procurées sans effort user : clé Google PSI (gratuite, gcloud) + GSC + kie.ai (LLM gpt-5.x + images, crédits en main). PSI dans /root/.secrets/seo-apis.env + config/psi.json (gitignored) |
Tout le gratuit Google + kie.ai couvre audit/monitoring/CWV/opportunités/GEO |
| 2026-06-26 | Payant (DataForSEO mots-clés, BrightLocal local) : pas de compte existant sur le VPS. Inscription+carte non automatisable de façon fiable → l'user crée le compte 1× et me file la clé, OU on reste gratuit | Limite honnête ; le gratuit suffit pour livrer maintenant |
Repetitive → skills
Manips répétitives → candidats skills/scripts
| Repéré | Manip | Statut |
|---|---|---|
| 2026-06-25 | Auditer techniquement un site + lire les findings | ✅ scripts/audit.mjs → skill seo-audit |
| 2026-06-25 | Écrire au journal en fin de session | ✅ scripts/journal.mjs |
| 2026-06-25 | Vérifier si un autre Claude bosse sur un projet (avant d'agir/s'alarmer) | ✅ scripts/claude-sessions.sh [projet] |
| 2026-06-25 | Générer de vraies images (articles/OG) via kie.ai GPT Image 2 | ✅ scripts/kie-image.mjs (clé /root/.secrets/kie.env) — candidat skill seo-image |
| 2026-06-25 | Pull GSC (geniusprep via wizytics, emet via SA) — 2 méthodes à unifier | ✅ scripts/gsc.mjs (unifié, JWT en node pur) + gsc-diff.mjs + signal-send.mjs + monitor.sh → skill seo-monitor |
| 2026-06-25 | Poser robots.txt + sitemap sur un site qui n'en a pas | ⏸️ pas nécessaire (emet a déjà tout) — dé-priorisé |
| 2026-06-25 | Auditer un site via plusieurs agents (recon/contenu) puis synthétiser | 🔜 candidat workflow seo-deep-audit (fan-out + vérif adverse) |
Frictions & fixes
Frictions rencontrées (+ solutions)
| Date | Friction | Solution |
|---|---|---|
| 2026-06-25 | TaskCreate échoue (schéma non chargé — tool déféré) |
Charger via ToolSearch "select:TaskCreate" avant usage, OU utiliser le journal/memory du projet (préféré ici) |
| 2026-06-25 | cd /root/.secrets → "Shell cwd was reset" après la commande |
Toujours chemins absolus, ne pas cd (rappelé dans CLAUDE.md) |
| 2026-06-25 | keyPath /contact présumé → 404 côté geniusprep |
Ne pas présumer les chemins ; les dériver du sitemap ou vérifier en live |
| 2026-06-25 | Fausse alerte « emet 502 / site down » : c'était un état transitoire pendant le déploiement du mailer par un autre Claude | Avant d'annoncer un incident : bash scripts/claude-sessions.sh <site> + uptime conteneur + git/mtimes récents. Doctrine gravée dans CLAUDE.md |
| 2026-06-25 | Bug moteur audit : sitemap_missing faux positif (testait /sitemap.xml en dur ; Astro émet sitemap-index.xml) → m'a fait croire au 404 d'emet |
audit.mjs corrigé : résout le sitemap via la directive Sitemap: de robots.txt + chemins usuels (sitemap-index.xml…). Re-test emet = 100/100 |
| 2026-06-26 | Doublon introduit : monitor.sh (7h) est le 4e système GSC sur geniusprep (6h/8h/9h existaient déjà). Mon grep -i seo ratait les scripts gsc-* |
Grep large `gsc |
| 2026-06-26 | Auto-critique workflow : la détection de régression gsc-diff est "décorative" (fenêtre glissante 28j → snapshots chevauchants à 27/28) |
Refondre en fenêtres 7j non chevauchantes (dimension date) + diff par requête/page. Voir reports/2026-06-26-system-review.md P1-A. |
| 2026-06-26 | ✅ RÉSOLU (commit c6ea795) : les 6 points de la revue corrigés | régression → 7j non chevauchant (timeseries) + diff requête ; doublon → monitor:false geniusprep ; audit → audit-diff.mjs + cron audit-weekly.sh ; GEO → geo.mjs ; parser robots par groupe UA ; secret Signal → config/notify.json ; git init (filet de sécurité, pas de backup-server.sh sur le VPS → backup off-site à prévoir). |
2026-06-26 — Doublon de fiche client (ruben)
- Friction : deux fiches pour le même client dans
memory/clients/—ruben-toledano.md(rich, créée à la main au stade prospect) etruben.md(générée parnew-site.mjs, = clé attendue par les scripts report/audit). Risque de divergence. - Solution appliquée :
ruben.mddevient la fiche canonique (clé-matchée + baseline) ;ruben-toledano.mdréduit à un pointeur en tête. Convention à retenir : la fiche SEO vit toujours sousmemory/clients/<key>.md(iciruben.md), pas sous le nom complet. - Note : ne pas confondre avec
/root/apps/chat/whatsapp/contacts/ruben-toledano.md(miroir WhatsApp, autre repo) qui, lui, garde son nom complet par mapping.
INDEXMémoire — INDEX (à lire en premier)
Mémoire — INDEX (à lire en premier)
Source de vérité du projet SEO. Chaque fichier = une facette. Mets à jour après tout travail structurant.
- decisions.md — décisions verrouillées + rationale
- credentials.md — carte des accès Google (chemins, méthodes par site, sans secrets)
- sites.md — état SEO par site (stack, GSC, GA4, findings récurrents)
- clients/ — profil par client : qui ils sont, ce qu'ils aiment, ton, à éviter, retours datés (à LIRE avant de produire du contenu pour eux)
- frictions.md — frictions rencontrées + solutions
- repetitive.md — manips répétitives → candidats skills/scripts
- references.md — où trouver quoi ; infos sur Ichai → app
/root/apps/chat/(lecture seule) - objectives.md — cap du projet (migration sites → notre stack + Cloudflare via clé API ultime)
État au 2026-06-26
- Audit technique ✅
scripts/audit.mjs(skill seo-audit). Monitoring GSC ✅gsc.mjs/gsc-diff.mjs/gsc-digest.mjs(skill seo-monitor). - Cron actif : quotidien 7h (
monitor.sh= pull+diff+alerte Signal) + lundi 7h30 (digest.sh). Préserve le cron geniusprep 6h. - GSC : geniusprep ✅ (wizytics, ~170 clics/28j) · emet ✅ (service account JWT, 0 donnée car neuf).
- Alertes Signal ✅ (
signal-send.mjs, host→172.18.0.4:8080, n° +33766002889, testé). - GA4 : ⛔ aucun tag posé → prérequis. Infra PocketBase + dashboard : pas encore montée (option suivante).
- Coexistence : Claude actifs sur geniusprep (sprints SEO) + emet (contact/Brevo) → lecture seule / coordination.
sitesÉtat SEO par site
État SEO par site
⚠️ Coexistence : d'autres Claude tournent en parallèle sur ces projets (vérifié 2026-06-25 : sessions actives sur
/root/apps/geniusprepET/root/apps/emetexpertise). Avant d'agir sur un site :bash scripts/claude-sessions.sh <site>. Par défaut lecture seule / coordination, jamais de déploiement sous un autre Claude.
Genius Prep — https://geniusprep.com (Next.js + PocketBase, ~3 mois)
- Audit vérifié 2026-06-25 (2 agents) → technique 90/100, schema complet (Course/FAQ/Breadcrumb/Service/Org/Article tous présents), maillage interne fort, robots/sitemap OK (51 URLs). Détails + backlog priorisé :
sites/geniusprep/reports/2026-06-25-gaps.md. - Vrais gaps : cannibalisation ISEE/SSAT (6 doublons), E-E-A-T (aucun auteur nommé), money pages absentes du header, money pages manquantes (Regents, SSAT dédiée, G&T, AP, college counseling), 15 pages écoles sans og:image, titles/metas longs.
- Déploiement : manuel,
docker compose up -d --build. Blog = ISR depuis PocketBase (articles publiés sans rebuild). 3 dossiers existent — canonique = geniusprep.com (genius-prep/geniusprep-dashboard= wizycode.fr).
Emet Expertise — https://emetexpertise.fr (Astro statique, neuf ~10j)
- Audit vérifié 2026-06-25 (2 agents) → on-page excellent (100/100 après fix moteur). JSON-LD AccountingService top, CWV AVIF/WebP, NAP strict, E-E-A-T solide. Détails :
sites/emetexpertise/reports/2026-06-25-gaps.md. - ❌ Corrections de mes affirmations initiales : robots.txt = 200 (pas 404), sitemap via
sitemap-index.xml(20 URLs) — mon premier audit a tapé/sitemap.xmlen dur (faux positif, corrigé dans audit.mjs). Meta description « 9c » = résolue (commitddbd331). - Vrais gaps : hors-site (Google Business Profile + avis absents = plus gros levier), GPS
[A CONFIRMER], couverture de pages (BTP supprimé mais opportunité locale n°1, paie & création sans page, pas de pages villes), blog non surfacé sur la home. - Déploiement : build dans l'image Docker,
docker compose up -d --build. WIP par un autre Claude : migration contact → Brevo/mailer.
referencesRéférences externes (où trouver quoi)
Références externes (où trouver quoi)
Infos sur l'utilisateur (Ichai) → app chat
Pour TOUT ce qui concerne Ichai (qui il est, objectifs, contexte perso/business, finances, façon de
fonctionner), aller voir /root/apps/chat/ — son CRM/assistant perso, géré par un autre Claude.
⚠️ Lecture seule : ne JAMAIS écrire dans /root/apps/chat/ (coexistence, un Claude y tourne souvent).
Fichiers utiles :
profile.md— qui est Ichai (contexte, objectifs)psychologie.md— comment il fonctionne / le coacherjournal.md— historiqueleads.md— pipeline commercial (dont les clients SEO : Avi Cohen / Emet, Ruben Toledano)finances.md— situation & objectifs de CAplaybook.md— sa méthode de venteCLAUDE.md— instructions de ce projet
Règle : le commercial vit là-bas ; ici (/root/apps/seo) on gère la delivery SEO. On référence, on ne duplique pas.
⚠️ Stack GSC/SEO PRÉEXISTANTE sur geniusprep (NE PAS dupliquer)
Vérifié 2026-06-26 — plusieurs systèmes GSC tournent déjà (crons matin) :
6h/root/apps/geniusprep/scripts/seo-snapshot.sh(snapshot CSVdocs/seo-log.csv)8h/root/scripts/gsc-daily-briefing.sh(briefing — fait DÉJÀ le 7j-vs-7j correct + striking-distance)9h/root/scripts/gsc-monitor.sh(health) · +/root/scripts/gsc-indexing-monitor.sh7hmonitor.sh= le mien, ajouté le 25/06 → DOUBLON à dédupliquer (faire skipper geniusprep, ne garder que l'agrégation cross-site/emet, ou adoptergsc-daily-briefing.sh). Leçon : pour trouver ces crons, grepgsc|seo|brief|snapshot(pas seulementseo).
Rapports d'analyse (workflow 18 agents, 2026-06-26)
reports/2026-06-26-system-review.md— revue système (où faire mieux)reports/2026-06-26-management-plan.md— modèle cible gestion multi-sitesreports/2026-06-26-dashboard-contract.md— design system du dashboard
Field log
Jun 26
Journal — 2026-06-26
- 07:57 — Mise en place mémoire CLIENTS: memory/clients/
.md (qui ils sont, ce qu'ils aiment, ton, à éviter, retours datés). Pré-rempli emet (déonto Ordre) + geniusprep (YMYL). Contrat CLAUDE.md: lire le fichier client AVANT de produire du contenu, y logger chaque retour. En attente des infos client de l'utilisateur. - 08:06 — Infos clients (via session du Claude 'chat'/leads): Emet = Avi Cohen (copain, retainer SEO 500€/mois, accès OVH reçu, assoc. Nathan Metral). NOUVEAU prospect SEO: Ruben Toledano, expert-comptable référé par Avi, site Wix + GBP déjà faits, veut SEO/GEO/LLM. Angle clé: différenciation par NICHE = restauration haut de gamme (son mémoire EC) → résout le conflit Avi sans cannibalisation. Flag: il parle de 'mots-clés cachés' → à recadrer (pratique pénalisée). Fiches créées dans memory/clients/. Pipeline commercial reste dans /root/apps/chat/leads.md.
- 08:11 — Pointeur enregistré: infos sur Ichai -> /root/apps/chat/ (profile, psychologie, leads, finances...) en LECTURE SEULE. references.md + mémoire harness. Rédigé la réponse WhatsApp à Ruben (rassure sur conflit Avi via niche resto HDG, recadre 'tout vert Wix', demande créneaux call + URL site/GBP).
- 08:28
[decision]— Socle MONITORING GSC livré: gsc.mjs (geniusprep via wizytics + emet via service account JWT node), snapshots versionnés sites/*/gsc/, gsc-diff.mjs (régressions: pos+2/clics-30%/impr-30%), signal-send.mjs (host->172.18.0.4:8080, n° +33766002889 testé OK), monitor.sh (cible cron). Baselines: GeniusPrep 170 clics/15330 impr/pos15.1 (28j), Emet 0 (neuf). Skill seo-monitor créé. NEXT: planifier le cron. - 08:33
[decision]— Cron monitoring installé: quotidien 7h (monitor.sh = pull+diff+alerte) + lundi 7h30 (digest.sh). Préserve le cron geniusprep 6h. monitor.sh testé bout-en-bout OK. Digest hebdo créé (gsc-digest.mjs) + envoyé en démo. - 08:42
[decision]— Workflow lancé (wf_e3d9438f-3de, ~18 agents, 3 vagues parallèles): (1) Dashboard Next.js 'Mission Control' frontend-design dans dashboard/ (architecte fige le design system -> 4 builders pages -> intégrateur build), (2) Revue système 5 axes -> synthèse, (3) Solutions gestion multi-sites 5 axes -> synthèse. Lit les fichiers plats. En attente de complétion. - 09:16
[decision]— Workflow 18 agents terminé. (1) DASHBOARD 'Mission Control' livré dans dashboard/ — Next.js 16, thème observatoire/ambre, fonts Fraunces+Hanken+JetBrains Mono, 4 pages, build VERT, smoke-test perso OK (routes 200, 404 propre), tourne sur :4123. Pas déployé. (2) REVUE SYSTÈME (reports/2026-06-26-system-review.md): findings clés = pas de git init, régression decorative (28j chevauchant), 4e doublon GSC geniusprep, audit jamais diffé/croné, GEO non mesuré, parser robots buggé. (3) PLAN GESTION (reports/2026-06-26-management-plan.md): 'achète les data-moats, construis le cerveau'; unifier GSC sur service-account, dédupliquer crons, report.mjs PDF=justifie retainer, BrightLocal pour local, geo.mjs pour Ruben, ~70-150$/mo. Vérifié moi-même le doublon GSC (réel). - 09:31
[decision]— Revue système CORRIGÉE (commit c6ea795). 🔴 git init fait (filet sécurité; pas de backup-server.sh sur le VPS). 🔴 régression refondue: gsc.mjs capture timeseries, gsc-diff = 7j vs 7j non chevauchant (testé geniusprep: clics +9% pos -1) + diff par requête. 🔴 dédup: monitor:false sur geniusprep (plus d'alerte doublon). 🟠 audit-diff.mjs + audit-weekly.sh (cron lundi 6h45). 🟠 geo.mjs (crawlers IA/llms.txt/X-Robots-Tag — testé, rien bloqué). 🟡 parser robots par groupe UA, secret Signal->config/notify.json, snapshots idempotents/jour, garde-fous volume, claude-sessions auto-exclusion, flock+self-health monitor.sh. Tous testés OK. - 09:49
[decision]— Dashboard DÉPLOYÉ live: https://seo.vpsdashboard.space (conteneur seo + NPM #340 + cert LE #335, 5/5 routes 200, lit fichiers plats via volume ro). 4 agents: opportunities.mjs (geniusprep ~839 clics/mois potentiels), cwv.mjs (emet 100/100, geniusprep home 97 /blog 47 CLS 0.434), new-site.mjs+seo-onboard (testé dry-run Ruben), report.mjs (en cours). Clé Google PSI créée via gcloud (gratuit). Skills: seo-cwv, seo-opportunities, seo-onboard (+report à venir). Ruben site=globalfi-expert.fr (Wix, via WhatsApp). Payant: aucun abo existant, besoin carte user pour DataForSEO/BrightLocal. - 09:55
[decision]— report.mjs livré (PDF brandé, démo geniusprep 100Ko valide, filtrage déontologie/confidentialité strict emet — fuite cross-client attrapée). Skill seo-report. + keywords.mjs (DataForSEO) prêt-à-brancher + skill seo-keywords. /root/.secrets/seo-apis.env: placeholders DATAFORSEO_LOGIN/PASSWORD + BRIGHTLOCAL_API_KEY à remplir par Ichai. User choisit BrightLocal+DataForSEO. BrightLocal: gbp.mjs à finaliser à réception de la clé. - 11:25
[decision]— Décision: services payants (DataForSEO/BrightLocal) à brancher SEULEMENT quand un client a payé au moins une fois. DataForSEO API vérifiée (401=live, 12 familles dont local/GBP/reviews/backlinks). BrightLocal API confirmée (apidocs.brightlocal.com). Reco: DataForSEO seul couvre ~tout (data-moat), BrightLocal optionnel (citations+UI). Différé jusqu'au 1er paiement. - 11:27
[decision]— Lu la discussion WhatsApp d'Avi (emet). Il a fait tester le site à ~20 personnes: verdict 'dans l'ensemble top', police adorée. Demandes (UX surtout): trop impersonnel/IA, page trop longue/trop de texte -> MULTI-PAGES courtes, page 'Qui sommes-nous' (Nathan+Avi hors home), page Avis séparée, espace vide en haut à corriger, réchauffer couleurs (garder police), enlever ton 'je'/CV. Refs aimées: rydge.fr + cogesten-sfec.com. INSIGHT: son instinct '20 pages courtes' converge avec le plan SEO (pages services/villes manquantes). Nathan enverra un vocal complémentaire. Préférences -> memory/clients/emetexpertise.md ; plan -> sites/emetexpertise/reports/2026-06-26-redesign-plan.md. Pas de Claude sur emet actuellement. - 11:59
[audit]— Onboard Ruben (GlobalFi Expert, clé=ruben, Wix, GSC=none) dans le command center + baseline. Audit 68/100 (2 medium: home sans meta desc, /nouvelle-page sans h1, /nouvelle-page = page Wix par défaut résiduelle à noindex; JSON-LD quasi absent = pas de LocalBusiness/AccountingService ni Article; 10 titles >60c). CWV mobile home: perf 54, LCP lab 10.2s 🔴, CLS 0.19, pas de CrUX (trafic faible). GEO ok: llms.txt présent, aucun crawler IA bloqué. Niche restauration HDG DEJA mentionnee (home + /nosprofessions) mais pas construite en cluster -> levier #1. GBP non localisable via recherche publique (Google consent gate) -> demander lien Maps/acces. Fiche canonique consolidee dans ruben.md, doublon ruben-toledano.md reduit a un pointeur (friction loggee). Next: brancher GSC + construire le cluster resto + schema LocalBusiness. - 12:02
[audit]— Stratégie mots-clés Ruben (axe niche resto HDG) — recherche SANS API payante (Google Suggest FR ~409 requêtes + logique métier). Construit 3 clusters: NICHE restauration HDG (levier #1: expert comptable restaurant/restauration/CHR/brasserie/gastronomique + cluster info rentabilité/ratios/food cost/coefficient multiplicateur/TVA resto/pourboire/plan comptable), LOCAL Levallois-Perret/Paris, généraliste services. Proposé architecture en silo: hub /expert-comptable-restauration + sous-landings + landings locales + pages services (le site n'a AUCUNE page service auj.) + 12 sujets blog resto (mémoire=pilier). Anti-cannibalisation Avi CONFIRMÉE (Emet=Sarcelles 95 généraliste, niche resto 100% disjointe; seul chevauchement=Paris générique que ni l'un ni l'autre ne classe vite). Constats: niche déjà mentionnée (home CHR x4, haut de gamme x1, hotellerie-restauration noyé dans liste /nosprofessions) mais JAMAIS construite; 0 article resto sur 10. Stratégie écrite dans memory/clients/ruben.md. - 12:05
[decision]— Synthèse Ruben/GlobalFi: 2 livrables produits (Stratégie SEO interne + 'Ce qu'on dit à Ruben' + version WhatsApp). Corrections baseline intégrées: home A une meta desc (faux positif crawler, coquille 'ete Paris'); blog A déjà JSON-LD riche (Article/FAQPage/LocalBusiness/Person) -> vrai gap schéma = home + pages statiques. Constat critique local: NAP incohérent = 3 numéros tél sur le site. Décision: optimiser Wix maintenant, différer rebuild (phase 2 après 3-6 mois GSC/GA4). Angle = niche resto HDG (mémoire DEC), zéro cannibalisation Avi (niche/92 vs généraliste/95). Next: accès GBP + branchement GSC/GA4. - 12:07
[audit]— GeniusPrep quick-wins SEO techniques déployés (commit geniusprep 0da5f0f). FIXES: (1) og:image+twitter:image ajoutés dans src/lib/school-metadata.ts → couvre les 13 pages écoles (carte sociale vide réparée); (2) lien interne périmé sat-prep/page.tsx /blog/nyc-digital-sat-2026-prep-guide (308) repointé vers /blog/nyc-digital-sat-reading-writing-strategies (200, article DISTINCT — read-method était déjà la carte voisine, repointer dessus aurait dupliqué); (3) titres /sat-prep /act-prep /isee-prep raccourcis <=65c rendu; (4) meta desc home/sat-prep/act-prep/isee-prep/faq raccourcies <=160c. DÉCOUVERTE IMPORTANTE: l'audit (attr() sans décodage HTML) compte chaque & comme & (+4c) → il faut viser source_len+4*nb(&)<=160. Audit 69→91/100, robots/sitemap intacts (200, 52 URLs), 0 critique/haute/moyenne. Build OK, déployé docker compose, vérifié live (og:image présent sur /sat-prep/dalton, lien 200, home 200). RESTE (non fait volontairement, scope): 8 meta desc d'écoles bespoke 161-182c + titre /blog 67c — non réécrits pour éviter réécriture marketing subjective. - 12:08
[decision]— DEUX completions: (1) Genius Prep quick-wins DÉPLOYÉ (commit geniusprep 0da5f0f): og:image sur 13 pages écoles, lien périmé repointé, titres/meta raccourcis -> audit 69->91/100, live OK. (2) Ruben stratégie complète: baseline (audit 68, CWV perf 54 LCP 10.2s Wix lourd, GEO bon llms.txt+aucun crawler IA bloqué). Findings: 3 NUMÉROS de tél différents (NAP à unifier), niche resto HDG mentionnée mais jamais construite = LE gisement, home sans JSON-LD LocalBusiness, /nouvelle-page parasite, coquille 'ete Paris'. Décision: optimiser Wix maintenant, rebuild différé 3-6 mois. Message client prêt (sites/ruben/reports/2026-06-26-strategie.md). Besoin de Ruben: accès GBP + numéro canonique. Dashboard white-mode validé par Ichai. - 12:12
[audit]— Déploiement refonte UX/SEO emetexpertise.fr (retours Avi) : rebuild image Astro->nginx OK (28 pages, commit 20 fichiers). Live vérifié 200 sur / + nouvelles pages /qui-sommes-nous, /avis, /services/paie-social, /services/creation-entreprise + /sitemap-index.xml + /robots.txt. Conteneurs emetexpertise + emetexpertise-mailer (healthy) UP. Site UP. - 12:18
[decision]— Objectif noté: migrer les sites SEO vers notre stack + Cloudflare (clé API ultime à venir d'Ichai → DNS/zones/SSL/cache programmables). Ichai ne veut pas bosser sur Wix. Wix n'exporte pas le code -> migration = rebuild à l'identique + bascule DNS + 301. Pilote = Ruben (neuf, risque faible). Reco mise à jour: vu qu'Ichai refuse Wix + site neuf, rebuild-NOW devient le bon choix (vs 'différer' initial). memory/objectives.md créé. - 12:36
[decision]— Retour Ichai: refonte emet v1 a raté le VISUEL (4 petites images/page, pas de grand hero). Standard gravé dans CLAUDE.md: pour un client = gros workflow Opus À FOND, surtout le visuel (bcp de grandes images kie.ai, exemple = refs du client rydge.fr/cogesten). Lancé workflow emet-refonte-v2-visuel (image-first): recon visuel -> ~15 grandes images kie.ai (3 lots parallèles) -> design v2 (BigHero/ImageTextSplit/PhotoServiceCard/AmbianceBand/StatStrip) -> 5 pages -> vérif (build+SEO+déonto+VISUEL riche obligatoire) -> déploiement gardé. Garde-fou: ne déploie QUE si la home a >=8 images + grand hero. - 12:38
[decision]— Ruben a répondu: CHAUD. Ichai a annoncé 690/mois refonte incluse. Ruben OK pour lâcher Wix (190€/2ans), demande devis clair: HT/TTC? durée? scope? Préparé le périmètre de presta (sites/ruben/reports/2026-06-26-scope-devis.md): mise en place one-time incluse (refonte/migration Wix, fondations SEO, tracking, GBP) + mensuel 690 (niche resto ~2 art/mois, technique, local/avis, GEO, reporting). Reco: 690 HT, engagement 12 mois. Devis FORMEL = côté chat (Ichai le monte). Besoin de Ruben: accès GBP + numéro + registrar domaine. - 12:47
[audit]— Refonte v2 emetexpertise — lot IMAGES SECTION/bloc (4:3): généré via kie-image.mjs (GPT Image 2) 4 visuels image-texte premium dans public/assets/refonte-v2/ : section-detail-comptable, section-conseil-client, section-proximite-local, section-confiance-expertise. PNG sources (2048x1536) déplacés hors de public/ vers assets-src/refonte-v2/ pour ne pas alourdir le build nginx. Convertis en webp optimisé (PIL q78/q48 pour le plan archi, ImageMagick q82 sinon ; NB: le delegate webp d'ImageMagick6 ignore -quality, PIL utilisé pour le contrôle fin). Tous vérifiés visuellement : navy+terracotta, lumière chaude, visages naturels/hors-champ, aucun texte/logo/chiffre, pas de cliché. Coexistent avec le lot hero/banner (home-hero, hero-alt-1/2/3, bureau-lumineux-banner, qui-sommes-nous-banner) déjà présent. Next: les builders branchent ces visuels EN GRAND dans les VisualBlock/sections.
Jun 25
Journal — 2026-06-25
- 20:40
[decision]— Démarrage projet SEO. Phase 0 ✅ moteur d'audit (geniusprep 66/100, emet 72/100 — robots+sitemap 404). Vérif credentials Google: emet GSC via service account OK (0 donnée, neuf), geniusprep GSC via wizytics OK. GA4 = prérequis (aucun tag). Mémoire+journal+CLAUDE.md contrat montés. Skill seo-audit créé. Next: go infra Phase 1 + décision GA4. - 20:40
[friction]— Friction notée: TaskCreate (schéma déféré) + cwd reset après cd → chemins absolus. - 20:58
[audit]— Audit multi-agents (4 agents) des 2 sites: emet on-page EXCELLENT (100/100 après fix), geniusprep 90/100. CORRECTIONS: emet robots/sitemap OK (mon 404 = bug audit.mjs sur /sitemap.xml hardcodé, corrigé) + meta desc résolue. Détecté Claude actifs sur geniusprep ET emet → doctrine 'coexistence' gravée + helper claude-sessions.sh. Clé kie.ai câblée (kie-image.mjs, GPT Image 2). Plans d'amélioration écrits dans sites/*/reports/.