No tracking
No analytics, no ad networks, no third-party tracking scripts of any kind.
Site security & privacy
Given the direction I'm heading in, it felt right to be straightforward about how this site actually works — not a legal disclaimer nobody reads, just the honest technical picture.
The short version
This site is plain HTML, CSS and JavaScript — no database, no server-side code, no CMS or plugins. That's not a compromise, it's deliberate: fewer moving parts means a far smaller attack surface. There's no login system to brute-force, no database to inject into, no outdated plugin to exploit, because none of those things exist here.
What's actually collected
No analytics, no ad networks, no third-party tracking scripts of any kind.
The dark/light theme preference is saved with localStorage — it never leaves your device and isn't sent anywhere.
The contact form doesn't send data to this site or any third-party service — see below.
The contact form
Submitting the contact form opens a pre-filled email in your own email client, addressed to me directly. Nothing is transmitted to or stored by this website — the message goes straight from your inbox to mine, the same as if you'd emailed me yourself.
The one external request
The only external dependency on this site is the stylesheet for Space Grotesk, Inter and IBM Plex Mono, loaded from Google's font CDN. That request goes to Google's servers like any web font would — it's the one place this site talks to anything outside itself.
GDPR, in practice
Since the site doesn't collect, store or process personal data itself, most of what GDPR governs simply doesn't apply here. The site is served over HTTPS, and the only "data" that persists at all is the theme preference sitting in your own browser's storage — not mine.
Why this page exists
This isn't a compliance checkbox — it's part of a growing focus on cyber security, and this site is a small, honest example of building with that in mind from the start rather than bolting it on afterward. More on that on the Skills page.