rudraanshpatel.in work-in-progress

May 2026 — ongoing

HTML · CSS · vanilla JS · GitHub Pages

The site you're reading right now. Hand-written HTML and CSS, no framework, no build step. Hosted on GitHub Pages with a custom domain. The whole thing is small enough to fit on a floppy disk — assuming anyone still owned one.

I started this site three times. The first two attempts were framework-heavy and I lost interest in writing anything on them within a week. This is the third attempt, and the one I've actually been adding to.

write .html / .css push git commit + git push serve github pages + custom domain no build step. no node_modules. ~30 seconds end-to-end.
The whole pipeline.
Built

A document-first personal website. The homepage is a dense GCC-style directory — intro paragraph, two content columns (projects, achievements, now, skills), and a narrow right sidebar with blue heading bars. Deeper pages (projects, blog, now) live in their own folders so the URLs stay clean: no .html extensions anywhere.

The aesthetic is borrowed from gcc.gnu.org and pre-2010 personal sites: warm grey paper, Georgia serif body, classic blue underlined links with a yellow highlighter on hover. The signature visual touch is a chunky Mac OS 8 scrollbar on bounded scroll widgets — like the post list on the blog index.

Constraints

I gave myself a few rules going in. Most of them held.

  • System fonts only (Georgia & Courier New). No web font loads.
  • No JavaScript on the homepage. The site works fully without it.
  • One stylesheet for the whole site. No CSS-in-JS, no preprocessors, no Tailwind.
  • Every page printable. @media print rules from day one.
  • No .html in any URL.
How it works

Every page is a static index.html in its own folder, which gives clean URLs without any server-side routing. The stylesheet lives at the root and is shared across every page, so a visitor downloads it once and the browser caches it for every subsequent page they visit.

The only piece of JavaScript on the whole site is the LeetCode redirect at /<number> — documented as its own project. Everything else is plain HTML.

Tradeoffs

Hand-writing every page means I can't reuse the header or sidebar via a component — if I change one, I change all of them. For a small site this is fine; for a larger one I'd reach for a static-site generator like Eleventy. The break-even point, I'd guess, is somewhere around twenty pages.

The choice of system fonts gives me zero font-loading flash but means visitors on Linux without Georgia installed see a different serif. I think that's a fair price for the speed.

What I learned

You can do a lot with very little. The hardest part wasn't writing the code — it was committing to one aesthetic and resisting the urge to add a fifth font, a sixth colour, a seventh widget. Every framework I tried earlier had given me too many primitives, and the result felt like everyone else's site.

The deeper lesson: the medium of a personal site is the act of maintaining it. A site I can edit in any text editor and push with one command is a site I'll actually keep updating. A site that needs npm install to render is one I'll eventually abandon.

What's next

A proper /now page. RSS feed for the blog. A few easter eggs that aren't visible from the homepage. And eventually, a writeup of every visual decision in a single page that links to the relevant CSS lines — partly as a design doc for me, partly as a guide for anyone who wants to fork the repo.


← back to projects