How this site is built

The how and the why. The short version: no Node, no framework runtime, just static HTML on a budget measured in bytes and dollars.

Performance — Mobile

  • 0 Performance
  • 0 Accessibility
  • 0 Best Practices
  • 0 SEO
  • First Contentful Paint 1.2s
    Poor > 3.0 s Web average ≈ 1.8 s

    How soon the first text or image shows up.

  • Largest Contentful Paint 2.4s
    Poor > 4.0 s Web average ≈ 2.5 s

    When the biggest element finishes loading.

  • Total Blocking Time 0ms
    Poor > 600 ms Web average ≈ 200 ms

    Time the page is frozen and won't react to taps.

  • Cumulative Layout Shift 0
    Poor > 0.25 Web average ≈ 0.10

    How much the layout jumps around while loading.

  • Speed Index 2.6s
    Poor > 5.8 s Web average ≈ 3.4 s

    How fast the page looks visually finished.

  • Transferred Assets 401KB
    Heavy > 4 MB Web average ≈ 2.2 MB

    Total bytes sent over the wire to load the page.

View the full Mobile report

Decisions

Node-free by design

The whole build is two binaries — Hugo and the Tailwind standalone CLI — plus Hugo's built-in esbuild for the TypeScript. No npm, no node_modules, no framework runtime shipped to the page. With AI-assisted supply-chain attacks climbing through early 2026, the cheapest dependency to secure is the one you never install. Fewer moving parts, smaller attack surface.

Static on purpose

Every page is static HTML rendered at build time. Client interactivity is a small hand-written TypeScript bundle; Alpine.js loads on the single page that actually needs reactive state. Knowing exactly which constraints keep a site static is what keeps it fast, cheap, and hard to break.

~$12 a year to run

Hosted on Cloudflare Pages. The only recurring cost is the domain itself — hosting, global CDN, and TLS are free at this scale. Infrastructure should be sized to the problem, not to the résumé.

Bytes are a budget

Fonts are self-hosted and subset down to the glyphs the site actually uses — roughly half the original weight cut from what users download. The matte background is a 128×128 noise tile. Images are lazy-loaded and width/height-stamped so nothing reflows (Cumulative Layout Shift: 0).

Readable by humans and machines

A single Person / WebSite JSON-LD entity graph that every page references by stable @id, plus a build-time /llms.txt. The site is structured so the models that increasingly summarize a developer get an accurate read, not a guess.

The stack, composed

Hugo · Tailwind · Go · HTMX · Alpine · TypeScript — the "OX Stack." The individual tools are off-the-shelf; the Node-free composition is the part that's mine. The whole site is open source, so anyone can run the same setup.

Stack