brentgann.io
This site, rebuilt in September 2026. Astro on a Cloudflare Worker, sixty work entries, a career rail that shows concurrent work as lanes, and the design system underneath it.

Résumé, project record, and writing index in one place. It runs on Astro, builds to static files, and serves from a Cloudflare Worker. The content is sixty work entries in a content collection, each with a real artifact for its image, plus the blog merged with my Substack feed so everything I’ve written is in one list.
The September 2026 rebuild replaced a hero-and-cards home page with one organized around the career. Eight sequential roles read left to right as a rail, with employer marks trimmed to their ink and scaled by density so a narrow ellipse and a dense square carry the same weight. Anything that ran at the same time (teaching, the consultancy) drops into a lane beneath the rail on the same column grid. On a phone the whole thing rotates instead of scrolling.
Everything is styled from the Five-Phase Design System. The site is where the system gets tested, and the failures became rules: phase hue for fills and its -text variant for type, light logo chips in both themes, no kicker above any heading. Those live in a DESIGN.md that any future work on the site, by me or by a model, reads first.
The BG mark in the header is built from the site’s display face, Space Grotesk, with the B drawn in front so it keeps both bowls. One SVG produces the header, the favicon set, the touch icon, and the share card.
The résumé exists twice, as a page and as an ATS-parseable PDF generated from the same source, and a publishOn gate keeps embargoed work out of the build until its date. It replaced a Hugo build on an off-the-shelf theme.

Dark mode is the same tokens flipped. Employer marks stay on light chips in both themes, because most of them are dark-on-transparent.

Below 820px the rail turns 90 degrees instead of scrolling sideways. The lanes become bars whose height is their share of the span.

The consulting page says what the work looks like and how it starts.