# bchanot.fr Personal landing page + CV for Bastien Chanot — developer, systems & backend. Static single-page site (no framework, no build step). Lives at https://bchanot.fr. ## Contents | File | Purpose | |------|---------| | `index.html` | Landing page (inline CSS + JS, single file) | | `CV_Bastien_Chanot.html` | CV — web version, linked from landing as "Voir le CV" | | `CV_Bastien_Chanot.pdf` | CV — printable, served via "Télécharger PDF" | | `CLAUDE.md` | Project rules for the Claude assistant | | `.claude/` | Memory registries, tasks, audits | | `Dockerfile` | Container image build — copies static assets into nginx | | `docker-compose.yml` | Service def — host port, hardening (read-only, cap_drop), tmpfs | | `nginx.conf` | In-container nginx — security headers, CSP, gzip, cache | | `.env.example` | Sample env — `PORT` for the host bind | | `favicon.*`, `apple-touch-icon.png` | Favicon set — SVG primary + ICO/PNG + 180×180 apple-touch | ## Local preview ```bash python3 -m http.server 8000 --bind 0.0.0.0 ``` Then open `http://localhost:8000/` (same machine) or `http://192.168.1.101:8000/` from any device on the LAN. If the LAN URL is unreachable, the firewall is likely blocking the port: ```bash sudo ufw allow 8000/tcp ``` ## Regenerate the CV PDF after editing the HTML ```bash weasyprint CV_Bastien_Chanot.html CV_Bastien_Chanot.pdf ``` Run this every time `CV_Bastien_Chanot.html` is modified so the served PDF stays in sync. ## Stack - HTML5 + CSS3 (inline `