Changelog
Ce qu'on livre,
version par version.
Le repo Kolombe est public — chaque release du site, du back-office et de la plateforme PoC est tracée ici. Transparence totale sur ce qui bouge.
v0.3.1
Identité expert + assets premium
Refresh complet de l'identité de marque post-v0.3.0 sur deux axes : lexique (« senior » → « expert(e/s) ») et assets premium (bannières LinkedIn, OG images, carrés sociaux, cartes de visite). Outillage screenshots via Chrome headless. Suppression du legacy.
Modifié
- Lexique « senior » → « expert(e/s) » partout (ADR-016) — sweep complet (site copy, OG images, identité, design system HTML, offre, docs, root, mémoires Claude non-archive). Le mot « senior » connote « poste de dev avec X années » plutôt que qualité d'agence — « expert(e) » qualifie la marque sans ambiguïté hiérarchique. Opposition à
junior cachépréservée. - INVARIANT 2 CLAUDE.md : reformulé « Toujours expert, jamais junior caché » + vocabulaire imposé pointant vers ADR-016.
- Sous-tagline : « Sur-mesure, expert, facturé au quart d'heure. » (était : « Sur-mesure, senior, … »).
- base.css :
h1-h4 { color: inherit }(était :var(--color-fg)) — permet aux contextes sombres (ink,forest) d'hériter decreamsans override individuel.
Ajouté
- Bannières LinkedIn refondues (
identite/design-system/social-assets.html) — deux variantes :- Éditoriale : ink + dot grid + filet vertical forest + eyebrow + tagline + sub + signature URL
- Mark watermark : silhouette K XL (
#8AC0A1opacity 13%) + tagline centrée + 4 canaux mono - Zone bas-gauche préservée pour photo de profil (152 px ⌀) + nom + headline
- Accents forest
#4A8A64(vif, identique site, ~4.9:1 sur ink WCAG AA) sur logo + wordmark + eyebrow + em + URL
- Cartes de visite — 3 variantes premium (
identite/design-system/business-card.html) :- A · Sobre éditorial : recto ivoire + watermark K forest discret · verso ink + watermark K forest clair
- B · Accent forêt : recto forest + watermark K ivoire · verso ivoire + filet vertical forest
- C · Ink premium (nouvelle) : recto ink avec mark + wordmark + accents forest clair + watermark K XL · verso forest avec eyebrow + tagline + watermark K ivoire
- Ratio mark/wordmark aligné sur le site (mark 5.5mm, gap 2mm)
- Marks colorables via SVG inline (
<symbol>+<use>) — permet une couleur viafill: currentColoroufill: var(--banner-accent)sans dépendre demask: url()(échouait en file:// par CORS). - OG images digitales (
identite/design-system/assets/og/og-ink.png+og-ivory.png) — 2400×1260 @2x retina, rendus directement depuis le HTML. - Carrés sociaux (
identite/design-system/assets/social/square-ink.png+square-ivory.png) — 2160×2160 @2x. outils/screenshot-assets.mjs— script Node + Puppeteer-core qui screenshot les frames HTML via le Chrome système (pas de download Chromium). Source de vérité = HTML, sortie = PNG. Fidélité 100% (Geist rendu nativement par le browser).- ADR-016 lexique expert vs senior — trace la décision lexicale, le rationale, et la convention (féminin « experte » pour agence, masculin « experts » pour profils).
Supprimé
- Scripts Python obsolètes :
outils/banner-linkedin.pyetoutils/business-card.py(réimplémentaient les designs en Python — divergeaient des HTML après chaque modif, lourd à maintenir). Remplacés par le screenshot HTML. - Anciens PNG/SVG LinkedIn :
kolombe-linkedin-entreprise{,-dark,-light}.{png,svg}+kolombe-linkedin-perso.{png,svg}(designs antérieurs au lexique expert, layouts obsolètes). - Anciens SVG cartes de visite :
card-{A,B,C}-{recto,verso}{,-print}.svg(générés par le script Python supprimé). - Serial top-left bannières : retiré pour épurer la composition.
Refonte complète du site sur la base d'un audit benchmark vs Linear / Vercel / Stripe / Plain. Le site bascule du registre « landing freelance soigné » à agence ultra premium. 14 items livrés (P0 × 7 + P1 × 5 + P2 × 7).
Ajouté
Pages
/poc— deep dive de la plateforme PoC : 4 piliers, process h+0 → h+48, 4 exemples de PoC, garanties, FAQ/missions-types— 4 cas anonymisés (MVP SaaS, refonte outil interne, agent IA triage support, audit + cadrage), avec fourchette d'heures et tarif estimatif/changelog— historique versionné public, parsé depuisCHANGELOG.mdau build via marked/notes— section écrits courts : 3 premiers posts (quart d'heure, livrer en 48 h, pair programming Claude). Parsing markdown custom + frontmatter- OG images dynamiques par page (template Next.js convention
opengraph-image.tsx, force-static) : home + 7 routes majeures
Composants & sections home
- Hero refondu : 2 colonnes desktop, mockup React/SVG d'un sous-domaine PoC
acme.kolombe.comavec auth Google/Microsoft, indicateur « Live · Déployé en 47 min » - 4 stats premium en font-mono sous le hero :
24h/48h/¼h/NDA - Bande social proof neutre (12 ans, Claude Opus, Cursor Pro, TS, CF, Scaleway)
- Section PoC différenciante centrale : 4 piliers + terminal mockup live
kolombe poc create acme --auth=google-workspace - Section Stack & outils : 8 logos clés (TS, Next.js, Tailwind, Postgres, Anthropic Claude, Cloudflare, Scaleway, GitHub), greyscale → couleur on hover
- Bloc « Garanties & cadre juridique » sur
/tarifs(6 items B2B : IP cédée, NDA, contrat-cadre, RGPD, paiement, pénalités)
Mode sombre
- Tokens dark complets (paper, ink, fg, forest, line, shadcn)
- Toggle clair/sombre dans le header (icone lune/soleil)
- Script anti-FOUC inline en
<head>(data-theme avant hydration) - Persistance
localStorage+ fallbackprefers-color-scheme - Multi-tab sync via storage events
Command-K palette
- Cmdk + dialog modale avec backdrop blur
- Raccourci ⌘K (Mac) / Ctrl+K (autres)
- Fuzzy search pages + actions (contact, email, GitHub, LinkedIn, toggle theme)
- Hint kbd dans le header desktop
Micro-interactions signature
- ScrambleText sur eyebrow hero (effet decryption Vercel / Defacto)
- HoverTilt 3D subtil sur cards services (pattern Linear / Stripe)
- ParallaxLayer sur dot-grid hero (depth subtle au scroll)
- Timeline scroll-fill sur
/methode: ligne forest scaleY animée via framer-motion useScroll
Footer
- Status badge « Opérationnel » (pastille verte pulsante, lien GitHub)
- Nav enrichie : Missions types, PoC, Notes, Changelog, GitHub
Modifié
- Étape « Cadrage » dans
/methoderenommée en « Cadrage + PoC » avec mention sous-domaine et auth adaptative (cohérence avec ADR-011) - Mentions légales : SIRET 789 201 910 00021 + siège 68 route de Genas, 69680 Chassieu (LCEN art. 6-III)
- Politique de confidentialité : ajout sous-traitant Resend, vouvoiement complet (« Tes droits » → « Vos droits »)
- Tone agence experte : retrait du wording « opérateur unique », vouvoiement strict partout
- Réseau d'experts partenaire : mention discrète sur
/a-propos(« jamais de junior caché ») - PricingCard : factorisée en composant partagé (home + tarifs)
- Header / footer : nav enrichie avec /poc, /missions-types, /changelog, /notes, /github
Corrigé
- Vouvoiement résiduel sur
/tarifs(« Je te renvoie » → « Nous vous renvoyons ») - Wording « opérateur » dans FAQ tarifs et hero proof points
Conformité audit benchmark
Gap audit Statut Zéro visuel hero ✅ Mockup React/SVG sous-domaine PoC Zéro preuve sociale ✅ Bande stack proof + missions types + stack logos Différenciant PoC absent ✅ Section centrale home + page dédiée /poc Pas de mémorabilité ✅ Scramble, hover-tilt, parallaxe, dark mode Pas de changelog public ✅ /changelog parsé au build Pas de réassurance B2B ✅ 6 garanties juridiques /tarifs + footer status Pas de mode sombre ✅ Toggle + tokens dark complets Pas de Command-K ✅ Cmdk ⌘+K palette OG statique unique ✅ OG dynamique par page (next/og) Stack
- Ajout déps :
marked(parser CHANGELOG + notes),cmdk(palette ⌘K)
- Lexique « senior » → « expert(e/s) » partout (ADR-016) — sweep complet (site copy, OG images, identité, design system HTML, offre, docs, root, mémoires Claude non-archive). Le mot « senior » connote « poste de dev avec X années » plutôt que qualité d'agence — « expert(e) » qualifie la marque sans ambiguïté hiérarchique. Opposition à
v0.2.1
Formulaire contact opérationnel
Premier endpoint serveur de Kolombe : le formulaire contact écrit dans une boîte mail réelle au lieu d'ouvrir un client mail.
Ajouté
- Pages Function
/api/contact(apps/site/functions/api/contact.js)- POST JSON validé (longueur, format email, sujet whitelisté)
- Honeypot anti-spam (champ caché, silently ok si rempli)
- Envoi via Resend API depuis
[email protected] - Vers
[email protected](alias de [email protected] dans GWS) - Reply-To = email du visiteur (réponse directe sans copy-paste)
- HTML escape XSS sur tous les champs
- HTML email premium (table layout, Geist-like style, branding vert forêt)
- Resend setup kolombe.com
- Domain vérifié (DKIM root + SPF MX/TXT sur send.kolombe.com)
- API key stockée hors-repo (
~/.config/jacquet-deploy/resend-kolombe.envchmod 600) RESEND_API_KEYsecret CF Pages env (production + preview)
- Alias [email protected] dans Google Workspace ([email protected] user alias)
Modifié
contact-form.tsx: fetch POST/api/contactau lieu demailto:- State machine idle / submitting / success / error
- Bouton disabled pendant l'envoi, copy spécifique pour chaque état
- Honeypot field hidden
copy/contact.ts: ajout submitting / errorTitle / errorDescription
- CI/CD CF Pages
workingDirectory: apps/sitedans wrangler-action (preview + prod)pages deploy outdétecte automatiquementfunctions/sibling- Artifact prod inclut
apps/site/outETapps/site/functions - Script
copy-functionssupprimé (plus nécessaire)
Corrigé
- Function
.ts→.js: CF Pages en mode Direct Upload ne transpile pas TypeScript, seul le mode Git-managed le fait. Réécriture en JS pur (types étaient compile-only). - From
send.kolombe.com→kolombe.com: DKIM signé sur root domain, lefromdoit utiliser root (send.kolombe.com = return-path SPF uniquement). - Routing bounce → alias : la première tentative routait vers [email protected] qui n'existait pas (groupe Google Workspace ensuite créé mais rejetait les posts externes). Résolu en passant à un alias utilisateur.
- Pages Function
v0.2.0
Premium site live, agence kolombe.com
Cette version consolide :
- l'architecture premium (CI/CD, tooling pnpm+turbo+biome, docs ADR/SPECS/OPS, scaffold apps/site Next.js 15) initialement actée le 2026-05-24
- la refonte design Linear-grade du site (vouvoiement, positionnement agence, fix contraste, refonte tokens)
- l'intégration du logo final (mark abstrait + horizontal généré via fontTools Geist) + favicons + OG image
- la mise en ligne sur kolombe.com via Cloudflare Pages (DNS migré OVH → CF, MX Google préservés, redirect kolombe.fr → kolombe.com)
- la refonte du brand book + templates (NDA, devis, facture, proposition, slide-deck) avec nouveau logo et vouvoiement
Highlights :
- Tagline actée G4 « Vos sujets IT, traités à la demande. » + sous-tagline « Sur-mesure, expert, facturé au quart d'heure. »
- Site UI/UX Linear-grade : utilities Tailwind 4 propres, animations framer-motion scroll-in, FAQ accordion natif, hover micro-interactions
- Logo final : plume géométrique abstraite (3 paths) + variants forest / ink / ivory + horizontal Geist SemiBold + favicon rounded + 33 PNG exports
- Positionnement agence experte (retrait « opérateur unique », autorisation sous-traitance freelances experts équivalents avec marge transparente)
- INVARIANT 2 CLAUDE.md assoupli en conséquence
- Custom domain kolombe.com + www.kolombe.com + redirect kolombe.fr
v0.2.0-archi-premium
Architecture premium (notes historiques)
Sprint long : élévation du repo au niveau « premium robuste scalable », inspiré flavie + lazare.
Ajouté
Design system Claude Design (
identite/design-system/)- 13 livrables HTML autonomes :
brand-book.html(10 sections : logo, couleurs, typo, voice/tone, etc.)email-signature.html(3 variantes copy-paste)devis.html,facture.html,proposition.html(PDF A4 portrait/paysage, marges@page)note-de-cadrage.html,nda.html,rapport-audit.htmlslide-deck.html(pitch 10 slides 1920×1080)business-card.html(85×55mm + specs impression)social-assets.html(LinkedIn 1584×396 + OG 1200×630 + carrés 1080)favicon.html(aperçus 16px → 512px)index.html(hub de navigation)
base.css(Geist CDN + reset + utilitaires pour HTML standalone, séparé de tokens.css pour permettre au futurapps/site/d'utilisergeist/fontà la place)components.css,doc-styles.css,deck-stage.js- 4 SVG logo V1 (placeholders Claude Design) dans
assets/logo/
Tooling racine (monorepo)
package.jsonracine (pnpm 10 + turbo + biome + lefthook + commitlint + markdownlint + cspell + typescript)pnpm-workspace.yaml(apps/* + packages/*)biome.json(lint + format unifié, ADR-008)tsconfig.base.json(strict mode complet)turbo.json(cache tasks build/dev/test/lint/typecheck)lefthook.yml(pre-commit biome+md+spell, commit-msg commitlint, pre-push gitleaks)commitlint.config.cjs(Conventional Commits + scopes Kolombe).editorconfig,.markdownlint-cli2.jsonc,cspell.jsonMakefile(entry points canoniques : install, dev, lint, fmt, typecheck, test, ci-local, deploy-landing, clean)
CI/CD GitHub Actions
.github/workflows/ci.yml(lint + typecheck + build + test + gitleaks).github/workflows/deploy-landing.yml(preview Cloudflare Pages, push main + paths).github/workflows/deploy-prod.yml(tagv*.*.*→ prod, avec pause-guard + changelog-guard + smoke test).github/workflows/stale.yml(cron daily, ferme issues/PRs inactives).github/dependabot.yml(npm + github-actions weekly, groupé).github/CODEOWNERS(zones sensibles marquées).github/PULL_REQUEST_TEMPLATE.md(checklist par domaine : identité, site, offre, ops, clients, mémoire Claude).github/ISSUE_TEMPLATE/{bug,feature,task}.md+config.ymlscripts/ci-local.sh(mirror CI en local)scripts/deploy-landing.sh(deploy manuel en cas de panne CI)
Documentation (
docs/)docs/README.md(index)docs/ARCHITECTURE.md(vue d'ensemble du repo, topologie, stack, principes)docs/GLOSSARY.md(termes Kolombe : régie, quart d'heure, mark, wordmark, ADR, preflight, …)docs/ADR/: pattern Michael Nygard FR + 10 ADRs formalisant les décisions actées- ADR-001 : pivot SaaS → Agence
- ADR-002 : iconographie abstraite (pas oiseau figuratif)
- ADR-003 : IA = enabler caché
- ADR-004 : tagline « Vos sujets IT, traités à la demande »
- ADR-005 : typographie Geist + Geist Mono
- ADR-006 : palette Encre & papier + vert forêt
- ADR-007 : monorepo pnpm + Turborepo
- ADR-008 : Biome au lieu de ESLint + Prettier
- ADR-009 : tag-driven deploy prod
- ADR-010 : Cloudflare Pages pour hosting
docs/SPECS/: template-mission, template-feature-site, site-web.md (spec V1 du site)docs/OPS/: 6 runbooks (deploy-site, dns-kolombe-com, onboarding-client, cloture-mission, incident-rgpd, cost-awareness)
Documents racine
ENGINEERING.md(référence technique : workflow Git, CI/CD, deploy, tests, qualité, sécurité, observabilité, coûts)CONTRIBUTING.md(workflow contribution + checklist PR par domaine + remèdes erreurs courantes)CHANGELOG.md(ce fichier)
Modifié
CLAUDE.md: raffinement (preflight design system, preflight site web avec geist via pkg, "Premier read" pointe BRAND-FINAL au lieu de BRAND)README.md: statut → Phase 2 (identité visuelle livrée), pointer le repo GitHubROADMAP.md: Phase 1 cochée (sprint 2026-05-24), Phase 2-3-4 en cours / à venir.gitignore: ajouts (.tsbuildinfo, .pnpm-store, lefthook-local.yml)identite/design-system/README.md: adapté après suppression doublon tokens.css (chemin../tokens.css)MEMORY.md(Claude memory index) : ajoutproject_kolombe_brand_phase1
Supprimé
identite/design-system/tokens.css(doublon) — remplacé par<link href="../tokens.css">dans les 13 HTMLops/process/(dossier vide) — runbooks process désormais dansdocs/OPS/
- 13 livrables HTML autonomes :
v0.1.0
Init agence Kolombe
Premier sprint long. Pivot acté, fondations posées, identité Phase 1 actée.
Ajouté
- Pivot : Kolombe devient une agence IT augmentée à l'IA. SaaS d'avril 2026 archivé (ADR-001).
- Repo GitHub : ancien
addock/kolombe(SaaS) renommé enaddock/kolombe-saas-archive+ archivé read-only. Nouveauaddock/kolombecréé pour l'agence (privé, page blanche). - Structure repo :
clients/,identite/,offre/,ops/,outils/,recherche/,site-web/(remplacé parapps/site/en v0.2),templates/. - Documents fondateurs :
offre/MANIFESTO.md(positioning, promesse, valeurs, anti-positioning)offre/PACKS.md(pricing 100€/h, packs 10/30/60h, engagements Light/Full, modalités, juridique)identite/BRAND.md(historique, options ouvertes — devient référence pré-Phase-1)identite/BRAND-FINAL.md(actée Phase 1 — concept, positioning, tagline, typo, palette, logo brief, règles d'application)identite/tokens.css(design tokens en variables CSS)identite/LOGO-BRIEF.md(brief Recraft/Midjourney avec prompts testables)ROADMAP.md(9 phases séquencées)CLAUDE.md(guide d'or pour les sessions Claude Code)
- Mission Okeenea :
clients/okeenea/pré-cadrage (Sylvain Rebotton, visio cadrage 27/05 9h) - Outil transcription :
outils/transcribe.py(Deepgram FR + diarisation) - Templates juridiques (drafts) :
ops/templates/NDA-bilateral.md(accord confidentialité 1 page, droit FR)ops/templates/devis.md(template régie quart d'heure, dispense TVA micro-entreprise)ops/templates/contrat-prestation.md(contrat-cadre régie >30h, relecture juriste recommandée)
Décisions actées (cf ADRs en [0.2.0])
- Pivot SaaS → Agence (Scénario A : pivot net)
- Iconographie abstraite (pas de colombe figurative)
- IA = enabler caché (pas claim principal)
- Tagline : « Vos sujets IT, traités à la demande. » / « Sur-mesure, expert, facturé au quart d'heure. »
- Typographie : Geist + Geist Mono (Mono réservée chiffres/code)
- Palette : Encre & papier (
#FAFAF7/#1A1A18) + accent vert forêt#2D5A40
Une question sur une release ? Un retour ? Un sujet IT en tête ?