pueev
pueev
Devlog

How this site is built: server-rendered, markdown, no trackers

Jun 22, 2026 2 min
✦ TL;DRbetaAI-generated summary of this post

Since this is a studio site, it felt right to build it the way we build everything else: small, owned end to end, and without the usual pile of third party scripts. No page builder, no marketing platform, no tracking pixels. Just a server we control rendering plain HTML.

Here is what is actually under the hood, and why we made each call.

It renders on the server.

Every page is real HTML, generated server side by a small Express app before it reaches your browser. This is classic server-side rendering (SSR), and it buys a lot for very little:

  • It is fast. The first thing the browser receives is the finished page, not a loading spinner waiting on JavaScript.
  • It works without JavaScript. Turn JS off and the content is still there.
  • Search engines and link previews see exactly what you do, so SEO and social cards just work without a separate pre-rendering step.

React still does the work where interactivity matters, but it hydrates a page that was already complete, rather than building it from scratch in your browser.

The blog is just markdown files.

There is no database and no admin panel. A blog post is a .md file on disk. To publish, we drop the file in and it appears live, no restart and no deploy step for content.

Drafts, scheduled posts, categories, the RSS feed, and the sitemap all fall out of that same pile of files. It is the least amount of machinery we could get away with, which is exactly the point. Markdown outlives every CMS we have ever migrated off.

There is no analytics script, no ad tech, and no cookie banner, because there is nothing to consent to. We would rather not know exactly how long you hovered over a button if the cost is loading someone else's surveillance code onto your machine and slowing the page down to do it. A privacy-respecting site is also, conveniently, a faster and simpler one.

One foundation, more than one site.

The same codebase quietly serves more than one site already, including gyorgy.sh. Shared plumbing, separate branding and content, selected by a single environment variable. A fix in one place improves all of them, which is exactly the kind of leverage a small team needs.

Self-hosted, end to end.

The whole thing runs on our own server behind a Cloudflare tunnel, served over HTTPS, with a tiny health endpoint and a watchdog that pings us if anything falls over. We own the stack from the markdown file to the TLS handshake.

Goal was simple: the boring, owned, server-rendered approach is still the one we reach for, and this site is the proof.