SMERESKI
  1. PROJECTS
  2. RESUME
  3. BLOG
  4. CONTACT

POST · 2026-06-15

2026-06-15 · 3 MIN READ

Theming as a product

Most sites have a theme. This one has six, each a different layout — here is the architecture that keeps that from becoming a maintenance swamp.

designprocess

This site ships six visual identities, and each one is a genuinely different layout, not a recolor with the hue dial turned. The default holographic transmission, a warm-black command center, a green-on-black terminal, a stark brutalist register, a neon grid, an editorial glitch magazine. The interesting question is not how any one of them looks. It is how you run six without paying six times the maintenance.

The answer is two layers that never touch. The first is a CSS token swap: a data attribute on the document remaps the OKLCH color tokens, and the default surfaces restyle themselves for free. That alone carries the lighter themes. The second layer is for the richer ones — each ships a full set of bespoke components, one per surface: home, project page, blog index, blog post, resume, and the 404. They take the exact same typed data and render a completely different structure.

What holds it together is a thin contract. There is one source of typed content — projects and posts as plain objects — and a single map that says, for a given surface and a given theme, which component renders it. A registry wires each theme's components in. When a theme has no entry for a surface, it falls back to the default instead of breaking. So a half-built theme degrades gracefully, and a finished one slots in without touching anything that already works.

That separation is what makes both axes cheap. Add a project by appending to an array, and all six themes render it the next build, each in its own register. Add a theme by writing its components and registering them, and the content does not move an inch. The command-center theme — the warm-black one ported from a dashboard that runs on my wall — went in exactly this way, without changing a single line of any existing theme.

A theme switcher is a toy until the architecture makes the seventh one free. At that point it stops being a gimmick and becomes a system: content on one side, presentation on the other, and a contract in the middle thin enough that neither side can rot the other.

REFERENCES4 LINKS