Health

System

The command center watching itself — scheduler pulse, per-site snapshots, the live monitor log, instruments, and operational memory.

nominal
Sites
3
Reporting
1/3
Last run
3h ago
Snapshot
Jun 26, 12:48
Scheduler
3h ago
no regression
Coverage
1/3
sites reporting
Instruments
7
installed skills
Memory
6
11.8KB on disk
Journal
Jun 26
2 entries
Runtime
v22.23.0
node · flat-file store
Ground stations

Per-site telemetry

3 tracked
91/ 100
Technical
Genius Prep
geniusprep.com
Clicks · 28d170
Snapshot3h ago
GSC methodwizytics
Statusreporting
99/ 100
Technical
Emet Expertise
emetexpertise.fr
Clicks · 28d0
Snapshot3h ago
GSC methodservice account
Statusno data
68/ 100
Technical
GlobalFi Expert (Ruben Toledano)
globalfi-expert.fr
Clicks · 28d
Snapshot
GSC methodnone
Statusno data
Monitoring

Cron monitor stream

Jun 26, 09:30
sites/monitor.log
clean
1=== 2026-06-26T08:33:38Z monitor run ===
2
3━━━ Genius Prep · GSC 28j (2026-05-26 → 2026-06-23) ━━━
4Clics 170 · Impressions 15330 · CTR 1.1% · Position moy. 15.1
5Top requêtes :
6 genius prep clics= 14 impr= 59 pos=2.1
7 nyc g&t results clics= 2 impr= 15 pos=3.8
8 brearley school new york clics= 1 impr= 2 pos=4
9 gifted and talented results 2026 clics= 1 impr= 47 pos=3.7
10 independent school test preparation clics= 1 impr= 1 pos=1
11 nyc gifted and talented results clics= 1 impr= 15 pos=6.3
12 sat prep brooklyn clics= 1 impr= 1 pos=42
13 shsat tests clics= 1 impr= 1 pos=14
14
15━━━ Emet Expertise · GSC 28j (2026-05-29 → 2026-06-26) ━━━
16Clics 0 · Impressions 0 · CTR 0% · Position moy. 0
17 (aucune donnée — propriété récente)
18
19━━━ Genius Prep (2026-06-26 → 2026-06-26) ━━━
20Clics 170→170 (+0%) · Impr 15330→15330 (+0%) · Pos 15.1→15.1 (+0)
21 ✅ pas de régression
22
23━━━ Emet Expertise (2026-06-26 → 2026-06-26) ━━━
24Clics 0→0 (—) · Impr 0→0 (—) · Pos 0→0 (+0)
25 ✅ pas de régression
26
27(aucune régression → pas d'alerte)
28
29=== 2026-06-26T09:30:36Z monitor run ===
30
31━━━ Genius Prep · GSC 28j (2026-05-26 → 2026-06-23) ━━━
32Clics 170 · Impressions 15330 · CTR 1.1% · Position moy. 15.1 · 29 jours de série
33Top requêtes :
34 genius prep clics= 14 impr= 59 pos=2.1
35 nyc g&t results clics= 2 impr= 15 pos=3.8
36 brearley school new york clics= 1 impr= 2 pos=4
37 gifted and talented results 2026 clics= 1 impr= 47 pos=3.7
38 independent school test preparation clics= 1 impr= 1 pos=1
39 nyc gifted and talented results clics= 1 impr= 15 pos=6.3
40 sat prep brooklyn clics= 1 impr= 1 pos=42
41 shsat tests clics= 1 impr= 1 pos=14
42
43━━━ Emet Expertise · GSC 28j (2026-05-29 → 2026-06-26) ━━━
44Clics 0 · Impressions 0 · CTR 0% · Position moy. 0 · 1 jours de série
45 (aucune donnée — propriété récente)
46
47━━━ Genius Prep ━━━
487j vs 7j : clics 46→50 (+9%) · impr 4134→4916 (+19%) · pos 15.9→14.9 (-1)
49 ✅ pas de régression
50
51━━━ Emet Expertise ━━━
52 (timeseries < 14j → 7j-vs-7j indisponible ; 1 jours)
53 ✅ pas de régression
54
55(aucune régression à alerter)
Instruments

Skills inventory

7 loaded
seo-audit
.claude/skills/seo-audit
skill

Lance 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>".

seo-cwv
.claude/skills/seo-cwv
skill

Mesure 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".

seo-keywords
.claude/skills/seo-keywords
skill

Recherche 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>".

seo-monitor
.claude/skills/seo-monitor
skill

Suivi 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".

seo-onboard
.claude/skills/seo-onboard
skill

Onboarde 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>".

seo-opportunities
.claude/skills/seo-opportunities
skill

Transforme 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".

seo-report
.claude/skills/seo-report
skill

Gé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".

Operational memory

Knowledge ledger

6 docs
locked

Decisions

Jun 26

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
candidates

Repetitive → skills

Jun 26

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)
incidents

Frictions & fixes

Jun 26

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) et ruben.md (générée par new-site.mjs, = clé attendue par les scripts report/audit). Risque de divergence.
  • Solution appliquée : ruben.md devient la fiche canonique (clé-matchée + baseline) ; ruben-toledano.md réduit à un pointeur en tête. Convention à retenir : la fiche SEO vit toujours sous memory/clients/<key>.md (ici ruben.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.
Reference shelf
INDEX
Mé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 techniquescripts/audit.mjs (skill seo-audit). Monitoring GSCgsc.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/geniusprep ET /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.xml en dur (faux positif, corrigé dans audit.mjs). Meta description « 9c » = résolue (commit ddbd331).
  • 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.
references
Ré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 coacher
  • journal.md — historique
  • leads.mdpipeline commercial (dont les clients SEO : Avi Cohen / Emet, Ruben Toledano)
  • finances.md — situation & objectifs de CA
  • playbook.md — sa méthode de vente
  • CLAUDE.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 CSV docs/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.sh
  • 7h monitor.sh = le mien, ajouté le 25/06 → DOUBLON à dédupliquer (faire skipper geniusprep, ne garder que l'agrégation cross-site/emet, ou adopter gsc-daily-briefing.sh). Leçon : pour trouver ces crons, grep gsc|seo|brief|snapshot (pas seulement seo).

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-sites
  • reports/2026-06-26-dashboard-contract.md — design system du dashboard
Operations journal

Field log

latest Jun 26
13h ago

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.
2d ago

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/.