chore: initial commit — landing page + CV + Claude config
Single-page static site at bchanot.fr: landing (index.html) and CV (HTML + PDF), pure HTML/CSS/JS, no build step. Includes project conventions (CLAUDE.md), README, and .claude/ memory/tasks/audits scaffolding. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
---
|
||||
type: blockers_registry
|
||||
entry_prefix: BLK
|
||||
schema:
|
||||
id: BLK-XXX
|
||||
date: YYYY-MM-DD
|
||||
friction: string (what was blocked)
|
||||
real_cause: string (root cause, not symptom)
|
||||
solution: string (workaround or fix)
|
||||
status: [open | resolved | upstream]
|
||||
rules:
|
||||
- Open a blocker as soon as friction > 15 min wasted. Close it with a real cause, not "moved on".
|
||||
- Link to upstream issue / PR / commit when applicable.
|
||||
- If cause is a bug in a dependency, set status upstream with a pointer to the tracker.
|
||||
---
|
||||
|
||||
# Blockers registry (BLK)
|
||||
|
||||
## Index
|
||||
|
||||
| ID | Date | Friction | Status |
|
||||
|----|------|---------|--------|
|
||||
|
||||
<!-- Append entries below. Template:
|
||||
|
||||
## BLK-XXX - <friction>
|
||||
|
||||
- **Date** : YYYY-MM-DD
|
||||
- **Friction** : <ce qui était bloqué>
|
||||
- **Cause réelle** : <cause racine>
|
||||
- **Solution** : <workaround ou fix>
|
||||
- **Statut** : open | resolved | upstream
|
||||
|
||||
-->
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
type: decisions_registry
|
||||
entry_prefix: BDR
|
||||
schema:
|
||||
id: BDR-XXX
|
||||
date: YYYY-MM-DD
|
||||
title: string (<= 80 chars)
|
||||
decision: string (what was chosen)
|
||||
why: string (motivation, context)
|
||||
alternatives: list of strings (what was rejected + why)
|
||||
status: [proposed | accepted | deprecated | superseded]
|
||||
supersedes: BDR-XXX (optional)
|
||||
rules:
|
||||
- Append-only. Never rewrite past entries - add a new one with status superseded if needed.
|
||||
- One entry per non-trivial choice. Trivial = reversible in under 10 min with no cross-file impact.
|
||||
- Capture why more carefully than what - the what rots, the why lasts.
|
||||
---
|
||||
|
||||
# Decisions registry (BDR)
|
||||
|
||||
## Index
|
||||
|
||||
| ID | Date | Title | Status |
|
||||
|----|------|-------|--------|
|
||||
| BDR-001 | 2026-05-15 | Static single-file site, no framework | accepted |
|
||||
| BDR-002 | 2026-05-15 | weasyprint pour PDF CV depuis HTML | accepted |
|
||||
| BDR-003 | 2026-05-15 | Position pro: CDI prioritaire, freelance parallèle | accepted |
|
||||
|
||||
---
|
||||
|
||||
## BDR-001 — Static single-file site, no framework
|
||||
|
||||
- **Date**: 2026-05-15
|
||||
- **Statut**: accepted
|
||||
- **Décision**: `index.html` unique, CSS inline `<style>`, JS vanilla inline `<script>`. Aucun bundler, aucun build step.
|
||||
- **Pourquoi**: Landing perso 1 page. Audience recruteurs/CTO. Critère "click Contacter <10s". Zéro dep, zéro maintenance, zéro tracking. Indexable par défaut.
|
||||
- **Alternatives rejetées**:
|
||||
- Astro — overkill, ajoute build step pour 1 page.
|
||||
- React SPA — interdit pour site public indexable (cf `~/.claude/CLAUDE.md`).
|
||||
- HTML + CSS externes — éclate 1 livrable en 3 fichiers sans bénéfice.
|
||||
- **Référence**: `index.html`, section Stack de `CLAUDE.md`.
|
||||
|
||||
---
|
||||
|
||||
## BDR-002 — `weasyprint` pour génération PDF CV
|
||||
|
||||
- **Date**: 2026-05-15
|
||||
- **Statut**: accepted
|
||||
- **Décision**: `weasyprint CV_Bastien_Chanot.html CV_Bastien_Chanot.pdf` à chaque modif HTML CV.
|
||||
- **Pourquoi**: weasyprint déjà installé (`~/.local/bin/weasyprint`). Chromium absent. wkhtmltopdf déprécié.
|
||||
- **Alternatives rejetées**:
|
||||
- Chromium `--print-to-pdf` — pas installé.
|
||||
- wkhtmltopdf — déprécié + WebKit ancien, rendu moins fidèle.
|
||||
- Print manuel via navigateur — pas reproductible, dérive entre HTML et PDF.
|
||||
- **Warnings connus**: `box-shadow: none` ignoré par weasyprint, sans impact visuel.
|
||||
- **Référence**: `CV_Bastien_Chanot.pdf`.
|
||||
|
||||
---
|
||||
|
||||
## BDR-003 — Position pro: CDI prioritaire, missions freelance en parallèle
|
||||
|
||||
- **Date**: 2026-05-15
|
||||
- **Statut**: accepted
|
||||
- **Décision**: Site annonce **CDI systèmes/embarqué prioritaire**, ZenQuality (freelance) en parallèle. Géo: full remote idéal, hybride 1-2 j/mois si Paris, mobilité Pays de la Loire.
|
||||
- **Pourquoi**: Recadrage user. Première version annonçait "Missions long terme & expertise" — pas représentatif. Hiérarchie CDI > freelance maintenant explicite (hero eyebrow + about para + callout + CV header).
|
||||
- **Référence**: `index.html` (hero-eyebrow, about-text para 3, about-callout) + `CV_Bastien_Chanot.html` (header).
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
type: evals_registry
|
||||
entry_prefix: EVAL
|
||||
schema:
|
||||
id: EVAL-XXX
|
||||
date: YYYY-MM-DD
|
||||
output: string (what was produced)
|
||||
method: string (how it was evaluated - manual read, test, benchmark, user feedback)
|
||||
anomalies: list of strings (what was wrong, missing, surprising)
|
||||
action: [keep | correct | deprecate]
|
||||
rules:
|
||||
- Log an eval whenever you validate the quality of something Claude produced (report, audit, plan, generated code).
|
||||
- Action keep - the output is fit for purpose as-is.
|
||||
- Action correct - needs revision; capture what.
|
||||
- Action deprecate - the approach itself is flawed; link to the decision that replaces it.
|
||||
---
|
||||
|
||||
# Evals registry (EVAL)
|
||||
|
||||
## Index
|
||||
|
||||
| ID | Date | Output | Action |
|
||||
|----|------|--------|--------|
|
||||
|
||||
<!-- Append entries below. Template:
|
||||
|
||||
## EVAL-XXX - <output>
|
||||
|
||||
- **Date** : YYYY-MM-DD
|
||||
- **Output** : <ce qui a été produit>
|
||||
- **Méthode** : <comment cela a été évalué>
|
||||
- **Anomalies** : <ce qui est faux, manquant, surprenant>
|
||||
- **Action** : keep | correct | deprecate
|
||||
|
||||
-->
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
type: journal
|
||||
schema:
|
||||
entry: one date heading per working session
|
||||
body: 3-5 lines max - what was done, decided, blocked
|
||||
rules:
|
||||
- One heading per date (YYYY-MM-DD), not per session.
|
||||
- Append at the end. Never edit past entries.
|
||||
- Keep it terse. Details belong in decisions/learnings/blockers - this is a timeline only.
|
||||
---
|
||||
|
||||
# Journal
|
||||
|
||||
## 2026-05-15
|
||||
|
||||
- Bootstrap `index.html`: hero stagger, sticky nav, stack cards 6 cat, timeline parcours, contact dark, footer.
|
||||
- Palette + 3 polices câblées via `:root`. CSS inline + JS vanilla. Aucune dep sauf Google Fonts.
|
||||
- CV HTML mis à jour: header suffix "· mobilité Pays de la Loire" à côté Yerres.
|
||||
- PDF CV regen via `weasyprint`. Warning `box-shadow: none` ignoré.
|
||||
- Serveur dev: `python3 -m http.server 8000 --bind 0.0.0.0` → LAN sur `192.168.1.101:8000`.
|
||||
- Position pro précisée: CDI embarqué/logiciel prioritaire, freelance ZenQuality parallèle, remote ou Paris 1-2 j/mois, mobilité Pays de la Loire.
|
||||
- Squelette `.claude/` + `CLAUDE.md` + `README.md` créés a posteriori (init-project skippé init pour single-file livrable).
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
type: learnings_registry
|
||||
entry_prefix: LRN
|
||||
schema:
|
||||
id: LRN-XXX
|
||||
date: YYYY-MM-DD
|
||||
pattern: string (what was observed, abstracted)
|
||||
context: string (where/when it happened - concrete)
|
||||
future_application: string (when to recall this)
|
||||
rules:
|
||||
- Capture learnings that apply beyond the current task.
|
||||
- Abstract from the incident - the pattern is what is reusable, not the one-shot fact.
|
||||
- Link to source (commit, file, PR) when possible.
|
||||
---
|
||||
|
||||
# Learnings registry (LRN)
|
||||
|
||||
## Index
|
||||
|
||||
| ID | Date | Pattern | Applies to |
|
||||
|----|------|---------|------------|
|
||||
|
||||
<!-- Append entries below. Template:
|
||||
|
||||
## LRN-XXX - <pattern abstrait>
|
||||
|
||||
- **Date** : YYYY-MM-DD
|
||||
- **Pattern** : <ce qui a été observé, formulé de manière réutilisable>
|
||||
- **Contexte** : <où et quand, concret>
|
||||
- **Application future** : <quand se rappeler de ceci>
|
||||
|
||||
-->
|
||||
@@ -0,0 +1,29 @@
|
||||
# TODO — bchanot.fr
|
||||
|
||||
State of the landing page + CV project. Append-only: keep history readable.
|
||||
|
||||
---
|
||||
|
||||
## Current
|
||||
|
||||
- Landing page `index.html` shipped (single file, inline CSS + JS).
|
||||
- CV `CV_Bastien_Chanot.html` + matching PDF regenerated via weasyprint.
|
||||
- Local serve verified at `http://192.168.1.101:8000/`.
|
||||
|
||||
## Known follow-ups
|
||||
|
||||
- Visual QA on real mobile device (375 px) — not just emulator.
|
||||
- Verify WCAG AA contrast on all green-on-parchment text.
|
||||
- Hosting decision: GitHub Pages vs Netlify vs Vercel vs nginx VPS — pending.
|
||||
- DNS / domain config for `bchanot.fr` — pending.
|
||||
- Consider OG image + favicon — not yet present.
|
||||
|
||||
## Open ideas (not committed)
|
||||
|
||||
- Light "what I'm working on right now" section (single line under hero).
|
||||
- Add a Gogs / GitHub link if a clean public repo is curated first.
|
||||
- Print-stylesheet polish for `CV_Bastien_Chanot.html` if weasyprint output drifts.
|
||||
|
||||
---
|
||||
|
||||
> Mark items done by moving them to `.claude/memory/journal.md` with a date heading.
|
||||
Reference in New Issue
Block a user