$ cd ../projects

ben.brenkman.net

2026active
This Website

The site you're on. Terminal/TUI aesthetic, interactive shell hero, animated canvas background.

Next.jsReactTypeScriptTailwindDockerk3s
RENDERstatic
HOSTk3s
ARCHmulti-arch
VIBETUI

Overview

This site. Built for the feel of an embedded engineer's workbench — phosphor green on near-black, monospace throughout, terminal-style panels, and a README-as-detail-page for every project. The hero is an interactive shell with a small virtual filesystem, so cat about.md and open projects do what you'd expect.

It is fully static. Every page is prerendered at build time; there is no database, no API, and nothing to run at request time beyond serving files.

Built with

Next.js on the App Router, React, TypeScript, and Tailwind.

The long-form write-ups are plain markdown, rendered through a remark/rehype pipeline with syntax highlighting applied during the build rather than in the browser. A couple of small custom plugins handle cross-project links and images, failing loudly at build time instead of shipping a dead link or a broken image.

Everything is data

The projects list is a single typed array. Cards, filter chips, the terminal's virtual filesystem, related-project links, and the generated routes all derive from it, so adding a project is a data edit and nothing else — the type system rejects one that's missing a piece.

Deploy

Tagging a release kicks off a CI build that produces a multi-architecture container image, because the cluster it lands on is a mix of x86 boxes and Raspberry Pis. The image is deliberately small: the build traces only the files actually reached and copies them onto a slim base, running as a non-root user.

From there it's ordinary GitOps. ArgoCD notices the new manifests on its own and reconciles the cluster toward them; Traefik handles routing and cert-manager issues the certificates. Nothing about the deployment is specific to this site — it goes out the same way every other service on the cluster does.

Which is the point. A static site is boring to operate, and boring is the goal. Operationally, at least — nothing else here was.