this blog — the site you're looking at
What it is
The site you're reading right now. Everything on it — the experience timeline, the project cards, this very page — is generated from plain markdown files and one Python config.
The stack
- Pelican — Python static site generator. Blog
posts and project writeups are markdown files; the folder they live in
(
content/blog/orcontent/projects/) decides which section they land in. - Tailwind CSS v4 + daisyUI 5
— all styling config lives in a single CSS file, no
tailwind.config.js. The theme is one custom daisyUI theme: charcoal base, cream ink, hard green and loud yellow, zero border radius. - GitHub Actions → GitHub Pages — every push to
mainbuilds the CSS and the site, then deploys. No servers, nothing to maintain. - Formspree — the contact form on a static site, without publishing an email address anywhere.
- ghchart — the contribution graph, flipped
to dark mode with a CSS
invert+hue-rotatetrick.
Design notes
The look is deliberate neubrutalism: 2px borders, hard offset shadows with no blur, cards that physically press down on hover, Archivo Black shouting the headlines while IBM Plex Mono handles the labels. One theme, executed hard — no light/dark toggle to hedge with.
Why a static site in 2026
Because a portfolio is mostly text that changes a few times a year. Markdown in git, a build that takes half a second, free hosting, and nothing to patch on a Tuesday night. Boring technology, chosen on purpose.