Brand pulse-dot translated to favicon: dark rounded square (#0d1b12) +
inner green dot (#6ab98a) + faint outer ring (#2d7a4f @60%). Identical
visual language to .brand::before in the nav.
Assets:
- favicon.svg — vector primary (modern browsers, scales)
- favicon-32.png — PNG hint
- favicon.ico — legacy multi-size (16/24/32/48)
- apple-touch-icon.png — iOS home-screen 180x180
PIL-generated PNG/ICO at 8x supersample + Lanczos downscale for clean
antialiasing. No external dependency added (PIL already on system).
index.html: 4 <link> tags wired in <head> (SVG, PNG 32, ICO alternate,
apple-touch). CV HTML left untouched; browser auto-fetches /favicon.ico
from root as fallback — TODO logged to mirror the link block when the
user finalizes CV edits.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Section title now anchors the "bas niveau" thread across both schools.
- Section intro: drop <em> for consistency with other section-intro blocks.
- École 42 description rewritten to surface kernel/memory/shell/security focus.
- TSRIT: remove false claim about stage transformed into CDI at CareGame
(CareGame internship dates from 2018-2019 during 42, not 2015 TSRIT).
Co-Authored-By: Claude <noreply@anthropic.com>
- New <section id="formation"> between Parcours and Contact, reusing timeline
+ card visual components from the existing system (palette, typos, animations).
- École 42 (2015–2019): 3 theme cards (Systèmes & Kernel · Bas niveau & Outils
système · Sécurité & Algorithmie) with project list + concise technical proof
for each entry (no scolarisms).
- TSRIT — Next Formation (2013–2015): BTS + "Félicitations du jury" badge,
réseau/TCP-IP/admin Linux fundamentals, stage transformed into CareGame CDI.
- Nav: "Formation" link inserted between Parcours and Contact.
- Contact: removed the old <aside class="contact-side"> Formation block and
the now-unused .contact-side / .education / 2-col contact-grid CSS;
.contact-list becomes 2-col on >=768px to fill the freed space.
Co-Authored-By: Claude <noreply@anthropic.com>
Add Dockerfile (nginx:1.27-alpine), nginx.conf (gzip, cache, CSP and
security headers, no HSTS — left to outer proxy), and docker-compose
service `bchanot-web`. Host port is configurable via PORT env var
(default 8080) and bound to 127.0.0.1 so the container sits behind a
reverse proxy. Container hardened with read_only fs, cap_drop ALL,
no-new-privileges, and tmpfs for nginx runtime dirs. Healthcheck via
wget on /. Also adds .dockerignore and .env.example, and ignores .env.
Usage:
cp .env.example .env
docker compose up -d --build
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>