Anxhelo Sako
All posts

How this site is built

· 1 min read

This site is intentionally small. One page, a blog, and nothing that moves unless it has to. This is what it runs on and why.

The stack

  • Next.js 16 with the App Router. Every route is statically prerendered at build time. There is no per-request server rendering, no client-side data fetching, and, outside of analytics, no client JavaScript at all.
  • Tailwind CSS v4 with the shadcn/ui token system. Colors are semantic (background, foreground, muted-foreground), which made a dark-only site trivial: the dark palette is hardcoded on the <html> element, so it renders dark even with JavaScript disabled.
  • Tailark Pro blocks as the starting point for sections, stripped down heavily to fit a typography-first personal page.

The blog

Posts are plain markdown files in content/blog/, parsed with gray-matter and rendered with react-markdown at build time:

content/blog/
  how-this-site-is-built.md
  some-future-post.md

Each file carries its metadata as frontmatter (title, description, date, tags) and the build turns that into static pages, Open Graph images, sitemap entries, an RSS feed, and JSON-LD structured data. Writing a post is creating a file and pushing.

Setting published: false in the frontmatter keeps a draft out of every surface while it lives in the repo.

Why this shape

A personal site should be cheap to change. No CMS, no database, no editor UI. The content lives next to the code, versioned in git, and the whole thing rebuilds in about a second. When something needs to be said, the distance between the thought and the published page is one markdown file.