# larsdanau.dev

> This site. Zero JavaScript unless it earns its spot, plus a command palette, live stats and a contact form I built myself.

- Role: Design & development
- Context: Personal · solo
- Year: 2026
- Status: Live
- Stack: Astro, TypeScript, Tailwind CSS, React, Bun, Turborepo, Biome
- Visit site: https://larsdanau.dev
- URL: https://larsdanau.dev/en/projects/larsdanau-dev

## Highlights

- Static HTML, islands only where needed
- Strict CSP, Turnstile + honeypot
- Bilingual, structured data, llms.txt

## The problem

A portfolio has two audiences who want opposite things. People skim it in thirty seconds. Crawlers and language models read every single byte. The old version managed to disappoint both: plenty of words about *what* I do, very little proof of *how*.

## Approach

- **HTML first.** Every page is pre-rendered. JavaScript only shows up for the command palette, the ASCII hero and the live stats (small, framework-free modules), plus one React island for the contact form. Each one loads only where it's needed. Your battery says thanks.
- **One accent, one rule.** A near-black canvas, a mono and sans font pairing, and a single accent colour reserved for things you can actually click.
- **A server only where it pulls its weight.** The contact form and live stats run as serverless functions. Secrets stay on the server, responses get cached at the edge, and if an API goes down the widget just quietly says "offline" instead of throwing a tantrum.
- **Built to be read by machines.** Structured data on every page, hreflang for both languages, an RSS feed per locale and an `llms.txt` that explains the site to AI assistants. Hi there, by the way.

## Outcome

A site that loads like a static page because, well, it *is* one. It still has enough personality to feel like mine though. Press <kbd>⌘</kbd> <kbd>K</kbd> and poke around a bit.
