# How I rebuilt this site — the stack, the decisions, and building for AI search

> AI · 6 min read · 2026-07-05 · Harald Palma
> Source: https://haraldpalma.com/writing/how-this-site-is-built

---

This site was rebuilt from scratch in a single working session. Everything you're looking at — the type, the dark and light themes, this blog — is a static site generated at build time, and it's built to be found twice over: by Google, and by the AI assistants people increasingly ask instead. Here's exactly what's under it, and the decisions that actually mattered.

## What's actually running this site?

A static [Astro](https://astro.build) site on Netlify, with a [Keystatic](https://keystatic.com) blog and no database. Every page is plain HTML, produced at build time — no spinner, no content fetched by JavaScript after the page loads. Fonts are self-hosted and subset, so there are no third-party font calls. The contact form runs on Netlify Forms, so there's no backend to maintain.

It's a deliberately boring stack. Boring is a feature: fewer moving parts, nothing to patch at 2am, and it's fast because there's almost nothing to load.

## Why does "static" matter more than it used to?

Because the audience changed. For years the only non-human reader that mattered was Googlebot. Now GPTBot, ClaudeBot and PerplexityBot crawl the web to answer questions directly — and they generally don't run your JavaScript. If your content only appears after a script executes, those readers see an empty page and move on.

Put the content in the HTML and everyone sees it: search engines, AI assistants, and the person on a slow phone. That single decision — pre-render everything — is the most important one on this whole list.

## What's the layer most sites skip?

The LLM layer: a small set of things that make a site quotable by an AI assistant, instead of paraphrased or ignored. This site ships all of it.

- A clean **markdown twin** of every article — this page is served both at its normal URL and at the same URL with `.md`, as plain text with no navigation or clutter.
- An **`llms.txt`** index that hands assistants a plain-language map of the site.
- **Structured data** (JSON-LD) that states, in machine-readable terms, who I am and what each page is.
- **Question-shaped headings** with the answer in the first sentence — like the ones in this post.

None of that is visible to a human. All of it raises the odds that when someone asks an assistant "who advises on AI in Vienna," the model quotes you accurately rather than guessing.

## How do I actually publish?

I write in a browser editor and press save. Behind that, the post commits to GitHub, the host rebuilds the site, and it's live in about a minute — with its meta tags, its markdown twin, and its sitemap and RSS entries all generated automatically. One tool to touch; everything else is downstream of the save button.

This post went out exactly that way.

## What did it take to build?

A focused session with an AI coding agent, directed the way you'd direct any good collaborator: I made the calls, it did the typing. That's the honest version of "AI-built." The agent didn't choose the stack, design the type system, or decide which corners not to cut. It executed decisions — quickly, and without complaint.

That's the same method I bring to client work, and it's the whole thesis of what I do. The interesting question was never *can a model write the code*. It was knowing what to build, what to leave out, and which invisible layers actually earn their place.

## The point

Most companies don't need more AI. They need better decisions about where it belongs. A site like this is a small, concrete proof of that: the technology is ordinary and widely available — the value was in the judgment about how to assemble it.

If you're weighing where AI fits in your own product or team, that's the conversation I have every day. [Book a call](/contact).