- BDR-005: SVG primary + PIL-generated PNG/ICO fallback for favicon set; alternatives (rsvg-convert/inkscape, SVG-only, online generator) rejected with reasons; CV mirror deferred to user finalization. - LRN-002: PIL supersample x8 + Lanczos downscale produces clean small-format icon antialiasing without rsvg-convert/inkscape/ImageMagick. - journal: 2026-05-17 entry — extended-vitrine refactor (1369d27) + favicon set (ef31fb3); CV files left untouched (user WIP). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.4 KiB
5.4 KiB
| type | entry_prefix | schema | rules | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| decisions_registry | BDR |
|
|
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-004 | 2026-05-15 | Containerize site with nginx:alpine behind reverse proxy | accepted |
| BDR-005 | 2026-05-17 | Favicon: SVG primary + PIL raster fallback | accepted |
BDR-001 — Static single-file site, no framework
- Date: 2026-05-15
- Statut: accepted
- Décision:
index.htmlunique, 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 deCLAUDE.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.
- Chromium
- Warnings connus:
box-shadow: noneignoré 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).
BDR-004 — Containerize site with nginx:alpine behind reverse proxy
- Date: 2026-05-15
- Status: accepted
- Decision: Ship site as
bchanot-webDocker container (nginx:1.27-alpine). Container listens on port 80 internally; host port configurable viaPORTenv (default 8080), bound to127.0.0.1. Host nginx terminates TLS +proxy_passto container. - Why: VPS hosts multiple sites (
zenquality.fr,nuit-folle.zenquality.fr,bchanot.fr). Container isolates static assets + nginx config, easier rollback, reproducible build. Loopback bind blocks direct external hits, forces traffic through host nginx (TLS, rate limit, logs). - Hardening:
read_only: true,cap_drop: ALL+ minimalcap_add,no-new-privileges, tmpfs for/var/cache/nginx+/var/run+/tmp. CSP allows inline CSS/JS (project convention) + Google Fonts. HSTS deliberately omitted at container level — set by outer proxy after TLS termination. - Alternatives rejected:
- Bare static files served by host nginx — no isolation, config drift between sites, harder rollback.
- Caddy / Traefik container — overkill for 1 static site, host nginx already handles TLS for other domains.
- Reference:
Dockerfile,nginx.conf,docker-compose.yml,.env.example.
BDR-005 — Favicon: SVG primary + PIL raster fallback
- Date: 2026-05-17
- Status: accepted
- Decision: Ship
favicon.svg(vector primary) + PIL-generatedfavicon-32.png,favicon.ico(16/24/32/48),apple-touch-icon.png(180×180). 4<link>tags in<head>ofindex.html. - Why: Modern browsers fetch SVG (sharp any DPI). Legacy + iOS fall back ICO/PNG. PIL preinstalled on host → zero new dep. Mark replicates
.brand::beforepulse-dot (visual continuity with nav). - Alternatives rejected:
rsvg-convert/inkscapefor SVG→PNG — not installed on host, setup friction.- SVG-only — drops Safari <14 + iOS home-screen.
- Online favicon generator — external dep, opaque rendering, no source control.
- CV HTML: not modified (user's WIP M state). Browser auto-fetches
/favicon.icofrom root → CV tab still shows icon. Link block mirror logged in.claude/tasks/TODO.mdfor later. - Reference:
favicon.svg,favicon-32.png,favicon.ico,apple-touch-icon.png,index.htmlhead, commitef31fb3.