How this site is built.
This site runs on the same kind of infrastructure I deploy for clients. Self-hosted, documented, no vendor lock-in.
The application is a Python/Flask app served by Gunicorn behind an Nginx reverse proxy. TLS is handled by Let's Encrypt with automatic renewal via certbot.
The contact form uses Flask-WTF for CSRF protection and validation, with a honeypot field to silently discard bot submissions. Outbound mail routes through Gmail SMTP with an app password.
The site runs in a containerd container managed via nerdctl on a Debian VPS. Deployment is fully automated with Ansible: rsync the source, build the image, restart the container, reload Nginx. One command from a local terminal.
This is the same deployment model I use for client applications. The playbook, container definition, and Nginx config are all in the same repository as the application code. No CI/CD service required.
Styled with Bootstrap 5 in dark mode, extended by a small custom design system called kbit. The kbit tokens define the color palette, surface hierarchy, and typographic scale as CSS custom properties. Bootstrap provides the grid and utilities; kbit handles everything that makes it look like this site specifically.
Icons are from Bootstrap Icons. All JavaScript is vanilla: an IntersectionObserver for scroll-reveal animations, and a scroll listener for the floating table of contents on longer pages. No framework, no build step.
Body text is set in DM Sans, a geometric sans-serif with a wide optical size range that stays readable at small sizes. Labels, nav items, code references, and numeric values use JetBrains Mono, which earns its place outside of code editors by giving technical strings visual clarity without resorting to all-caps spacing tricks. Both fonts are served by Google Fonts.
No analytics. No tracking pixels. No cookies beyond the session cookie used for CSRF protection
on the contact form. The only third-party request this page makes is to Google Fonts for the
typefaces. If you block that, the fallback fonts are system-ui and
monospace.