Commit Graph

15 Commits

Author SHA1 Message Date
Bastien Chanot
1ae73e0534 cv definitif 2026-05-17 04:26:29 +02:00
Bastien Chanot
aa52153b2c docs(memory): BLK-001 favicon 404 in prod — Dockerfile COPY whitelist
Root cause + fix logged. New repo assets must be added to Dockerfile
COPY whitelist explicitly; future option = glob pattern if asset count
grows. Journal updated.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 04:08:18 +02:00
Bastien Chanot
f1e4392c65 fix(docker): COPY favicon assets into image + cache header
Dockerfile selectively COPYs files into /usr/share/nginx/html. Favicon
assets (favicon.svg, favicon-32.png, favicon.ico, apple-touch-icon.png)
were added to the repo in ef31fb3 but never wired into the Dockerfile,
so a rebuilt container served 404 for /favicon.svg and friends — broken
favicon in prod even after `docker compose up -d --build`.

nginx.conf gets a matching long-cache rule for icon/image assets
(30 days, immutable, access_log off) — they rarely change and the file
name is the cache key anyway.

Deploy: on the VPS, `docker compose up -d --build`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 04:07:32 +02:00
Bastien Chanot
1f9416edf0 added pdf and html cv version 2026-05-17 03:54:39 +02:00
Bastien Chanot
86d4c729ed docs(memory): capitalize BDR-005 favicon strategy + LRN-002 PIL icon recipe
- 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>
2026-05-17 03:53:42 +02:00
Bastien Chanot
ef31fb3059 feat(landing): add favicon set — SVG primary + PNG/ICO fallback
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>
2026-05-17 03:51:14 +02:00
Bastien Chanot
1369d27b5b feat(landing): extended-vitrine refactor — CV-aligned, +Projets, +Méthode
Landing now says more than the CV instead of duplicating it.

- meta/title: synced with new positioning (kernel, AOSP, cloud gaming, GPU)
- nav: added #projets and #methode anchors
- hero: subtitle "Développeur Systèmes · Embarqué · Backend",
  tech banner Backend·Cloud
- about: senior wording + 3 new paragraphs (philosophy, target context,
  what I'm not chasing)
- stack: 6 → 8 cards
  - dropped VMware, Gitflow, Agile
  - added cgroups, namespaces, SELinux, GitHub Actions
  - new Cloud/Infra card (AWS EC2, g4dn bare-metal, IAM, S3, CloudWatch,
    Scaleway VPS, OVH/Hetzner, Nginx, Apache, Let's Encrypt)
  - new IA/Outils card (Claude Code agents/skills, N8N, automation)
  - Familier avec: C++ sub-row in Langages
- parcours: removed lone-wolf wording (seul / responsable unique);
  CareGame / ZenQuality / Deewee rewritten as intro + technical bullets +
  per-experience stack pills; Deewee dates corrected to fév.-nov. 2017
  with Stage 42 + CDD contract line
- new Projets section between Parcours and Formation: Git auto-hébergé
  (git.bchanot.fr) and Homelab
- new Méthode section between Formation and Contact: 5 habits
- contact email: chanot.bastien@gmail.combastien@bchanot.fr
- CSS: extensions only (.timeline-bullets, .timeline-stack,
  .timeline-intro, .timeline-contract, .projects-grid, .project-card*,
  .methode-list, .methode-item, .methode-num, .stack-note, .pill-context),
  all reusing existing design tokens

TODO.md tracks the refactor milestone.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 03:50:41 +02:00
bastien
54e9145bd7 mirror test 2026-05-15 22:19:04 +02:00
bastien
08220bd024 docs(memory): journal entry for formation copy fix
Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-15 20:48:37 +02:00
bastien
e1d75d8b1e fix(formation): correct copy and remove inaccurate CareGame line
- 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>
2026-05-15 20:48:12 +02:00
bastien
c2e1dd30a8 docs(memory): backfill registries for docker, certbot, formation
decisions.md  — log BDR-004 (containerize site with nginx:alpine behind reverse
                proxy): rationale, hardening flags (read_only, cap_drop,
                no-new-privileges, tmpfs), alternatives rejected (bare nginx,
                Caddy/Traefik). Reference commits: 7957b04.

learnings.md  — log LRN-001 (certbot --nginx matches `server_name`, not
                filename): root cause was leftover `server_name autreprojet.fr`
                in `sites-available/bchanot.fr`. Future check:
                `grep -n "server_name" /etc/nginx/sites-enabled/*` before any
                certbot install on a multi-site VPS.

journal.md    — 5 lines covering docker setup, git init + remote + push,
                certbot diagnose + fix, prior commit batch, and today's
                feat(formation) section work (commit 1d5fbfa).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-15 20:37:28 +02:00
bastien
1d5fbfa148 feat(formation): add dedicated Formation section + nav link, remove Formation aside from Contact
- 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>
2026-05-15 20:20:04 +02:00
bastien
414bce1ce9 final version of cv html and pdf 2026-05-15 20:08:50 +02:00
bastien
7957b04de0 feat(docker): containerize site with configurable host port
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>
2026-05-15 16:53:20 +02:00
bastien
54e830016c 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>
2026-05-15 16:53:06 +02:00