Skip to content

This site

← Projects

2026This siteLIVE

devrupash.com

The site you are reading — prerendered Nuxt 4 on Cloudflare, built with a bundle budget, an accessibility guard and a content schema that refuses to publish invented copy.

The homepage of devrupash.com, showing the intro section with headline, portrait and the stat row
Stack
Nuxt 4, prerendered
JS budget
130KB, enforced
Tests
362, in CI
Hosting
Cloudflare Pages
Nuxt 4Vue 3Tailwind 4TypeScriptCloudflare Pages

02The story

Why it exists in this stack

I sell WordPress work, so the obvious move was to build this in WordPress. I built it in Nuxt instead, for one reason: the modern-stack half of what I do needed something public that could be inspected rather than described.

It is a small site with a lot of engineering underneath it, which is roughly the argument.

The decisions

Prerendered, not server-rendered. Every page is HTML on a CDN before anyone asks for it. One server route survives, for the contact form, because that is the only thing on the site that genuinely needs a server.

A budget that fails the build. The JavaScript budget is 130KB gzipped and it is checked as part of the production build, not admired in a readme. The homepage currently ships about 104KB.

Content as typed data, not as pages. Every project, post, capability and timeline entry is validated against a schema at build time — required alt text, required image dimensions, no capability listed under two headings. A file that does not validate stops the build rather than rendering an empty section.

An accessibility guard in the same place. Heading order, one h1 and one main per page, alt text, image dimensions, labels. It is cheaper to enforce than to audit.

Constraints I set myself

No animation library, no component library, no analytics with a consent banner attached. Two typefaces. One accent colour. Every interaction on the site is one of six named CSS moves, each with a keyboard-focus equivalent, and none of them animate a layout property.

The sound effects are synthesised in about forty lines of Web Audio rather than downloaded, so the site ships no audio files at all.

What it is not

It is not a demonstration that Nuxt is better than WordPress. Half the sites I build would be worse in this stack, because their owners need to edit them on a Tuesday afternoon without calling anybody.

It is a demonstration that I can hold a build to a standard when there is no client asking me to.

03Detail

The projects page, filtered to All, showing the four real case studies with their category counts
Filtered by type — application, plugin, client work — counted from the content files themselves, so a filter can never disagree with what's actually published.
A blog post page showing the title, summary, tags and the start of the article body
A post's heading structure comes from Nuxt Content's own parse, not a DOM scrape — so the "On this page" list beside it can never drift from the article.