1 min read

Keeping this site (mostly) JavaScript-free

Static HTML and modern CSS carry almost every page here. A note on where the budget for scripts actually goes, and what replaced the rest.

Astro

This portfolio ships almost no client-side JavaScript. That is a budget, not an accident.

What CSS covers now

The timeline rail is a repeating-linear-gradient. Filters, accordions, and hover reveals lean on native elements and selectors. Dark mode is prefers-color-scheme — resolved before first paint, no flash, no toggle script.

Where scripts still earn their place

The carousel (Embla), the physics scene on the skills page, and menu interactions that genuinely need state. Each one is an island that hydrates only when its media query matches.

Everything else — navigation, the blog you are reading, the whole timeline page — is plain HTML that happens to be designed.

The result: less to download, less to break, and pages that work exactly the same with scripts disabled.