Rajdeep Singh

← Back to work

This Website

Node.jsCloudflarestatic

Static HTML, a Node.js build script, and Cloudflare Workers. Project and writing pages render from markdown with frontmatter; the homepage is hand-edited; everything else is generated. Every post is a markdown file in git, without a CMS or app server in the middle.

Pipeline

markdown  ──►  node build.js  ──►  public/  ──►  git push  ──►  Cloudflare

public/index.html is hand-edited. Everything else under public/ is generated by build.js and overwritten on every build: project pages, writing pages, books, colophon, 404, sitemap, feed, robots, and the Cloudflare _headers/_redirects. A push to main triggers Cloudflare Workers Builds, which runs the build and publishes the output. No manual deploy step.

Stack

  • Node: marked for markdown, gray-matter for frontmatter, katex for math, crypto for the build hash
  • Cloudflare Workers: static assets from the global edge; clean URLs, HSTS preload, strict CSP, and immutable caching for fonts and images, all driven by generated _headers/_redirects
  • IBM Plex Sans: self-hosted woff2, Latin subset only, preloaded with fetchpriority="high"
  • Google Analytics: loaded via requestIdleCallback so it never blocks paint

Show the work

Every page footer carries a live paint-time readout and the host. The full set of internals lives on the colophon: type, color, build hash, page count, word count, and dependency list.

The visual language follows a Show the Work doctrine: clean complexity over hidden polish, internals as the surface, signal-lime for live state.

It was a static site on Firebase Hosting before. The build stayed the same; the host changed, and deploy became a git push.