Manoj Yadav

Why I built my site without CMS

Every time I see someone build a personal portfolio today, it’s a Next.js or Astro app with 300 MB of dependencies just to display three project links and a couple of paragraphs.

I didn’t want that. I wanted something that loads instantly, costs $0 to run, and most importantly won’t break when I ignore it for two years.

So I kept it simple:

  • Portfolio (ekmanoj.info): Plain HTML, one CSS file, and a tiny bit of vanilla JS. No build step at all.
  • Blog (ekmanoj.online): A few Markdown files compiled with Jekyll.
  • Hosting: Cloudflare Pages / Workers static assets.

The whole thing weighs around 25 KB.


Why skip the modern stacks?

1. I hate maintenance debt on personal projects

At work, dealing with dependency upgrades, deprecation warnings, and framework migrations is part of the job. In my free time, it’s the last thing I want to do.

If I don’t touch this repo until 2030, standard HTML, CSS, and Markdown will still work. I won’t have to spend an evening debugging npm audit or figuring out why a bundler broke after a Node update.

2. It’s text on a screen

Most of the web has forgotten how fast HTML actually is when you don’t load 400 KB of JavaScript first.

Because there’s no runtime bundle or hydration step:

  • The site renders almost the millisecond you tap a link.
  • It doesn’t drain phone battery.
  • Cloudflare’s CDN caches the raw static files right next to wherever the reader is.

What about the “cons”?

When people argue against this approach, they usually bring up a few things:

  • “You don’t have reactive components.”
    For what? It’s a blog. If I need a dark mode switch or a copy to clipboard button on code blocks, 10 lines of vanilla JavaScript does it without pulling in React.
  • “Writing without a visual CMS is annoying.”
    I already live in VS Code. Creating a .md file, typing what I want, and doing git push is ten times faster than logging into some CMS dashboard.
  • “Jekyll doesn’t scale to huge enterprise sites.”
    I don’t have 50,000 pages. For a personal blog, Jekyll builds in about one second.

Showing work from private repos

A lot of my actual work lives in private repositories or Homelab repos that I can’t just link to on GitHub.

Instead of leaving an empty GitHub link or a generic list of tech logos, I use simple case studies on the portfolio: the actual problem, the architecture I chose, and what it solved.


Permanence and Content Ownership

At the end of the day, my content lives as clean, readable text files in a Git repository.

If I ever want to switch static site generators, move away from Cloudflare, or self-host on a Raspberry Pi in my homelab, I can do it in under an hour without database dumps or migrations.