Performance — Mobile
- Performance
- Accessibility
- Best Practices
- SEO
- First Contentful Paint 1.2sPoor > 3.0 s Web average ≈ 1.8 s
How soon the first text or image shows up.
- Largest Contentful Paint 2.4sPoor > 4.0 s Web average ≈ 2.5 s
When the biggest element finishes loading.
- Total Blocking Time 0msPoor > 600 ms Web average ≈ 200 ms
Time the page is frozen and won't react to taps.
- Cumulative Layout Shift 0Poor > 0.25 Web average ≈ 0.10
How much the layout jumps around while loading.
- Speed Index 2.6sPoor > 5.8 s Web average ≈ 3.4 s
How fast the page looks visually finished.
- Transferred Assets 401KBHeavy > 4 MB Web average ≈ 2.2 MB
Total bytes sent over the wire to load the page.
- Performance
- Accessibility
- Best Practices
- SEO
- First Contentful Paint 0.3sPoor > 3.0 s Web average ≈ 1.8 s
How soon the first text or image shows up.
- Largest Contentful Paint 0.8sPoor > 4.0 s Web average ≈ 2.5 s
When the biggest element finishes loading.
- Total Blocking Time 0msPoor > 600 ms Web average ≈ 200 ms
Time the page is frozen and won't react to taps.
- Cumulative Layout Shift 0Poor > 0.25 Web average ≈ 0.10
How much the layout jumps around while loading.
- Speed Index 0.5sPoor > 5.8 s Web average ≈ 3.4 s
How fast the page looks visually finished.
- Transferred Assets 401KBHeavy > 4 MB Web average ≈ 2.2 MB
Total bytes sent over the wire to load the page.
- US West
- US East
- Finland
- Germany
- Japan
- Australia
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
- Hugostatic site generator (Go)
- Tailwind CSSstandalone CLI, no Node
- HTMXhx-boost SPA-style navigation
- Alpine.jsreactive state on /network only
- TypeScriptcompiled via Hugo esbuild + tsgo
- Cloudflare Pageshosting, CDN, TLS