← Blog

Building This Site: Express, EJS, and No Build Tools

A look at the deliberate choices behind this portfolio — why I picked a minimal Express stack over a framework, and what I learned building my first real frontend.

After 20 years of backend work, I finally sat down to build a proper personal site. The constraints I set were intentional: no bundler, no component framework, no database. Just Express, EJS, and a stylesheet I could own completely.

Why Not Next.js or Astro?

Both are excellent tools. But this site is a learning exercise as much as a product. I wanted to understand the browser, CSS layout, and server-rendered HTML on first principles before reaching for abstractions that hide them.

There is also something clarifying about a stack with no magic. When something breaks, there is nowhere to hide — the bug is mine.

The Stack

  • Runtime: Node.js with Express 5
  • Templates: EJS — logic in markup, no virtual DOM
  • Styles: Vanilla CSS with custom properties
  • Hosting: TBD (likely Fly.io or a plain VPS)

What Surprised Me

CSS clamp() for fluid type sizing. I had heard about it but never used it in production. A single rule like font-size: clamp(42px, 8vw, 68px) handles the entire responsive headline without a single media query breakpoint. That felt genuinely elegant.

The fixed nav backdrop blur was also easier than expected:

background: rgba(247, 245, 242, 0.88);
backdrop-filter: blur(10px);

Two lines, and it looks like a native macOS interface element.

Next Steps

The blog you are reading right now is the next feature. Markdown files, gray-matter for frontmatter, marked for rendering. No CMS, no database — just files in a directory and a route handler that reads them.


The full source will be on GitHub once I am happy with it.