/privacy
What this site stores
This site captures a tiny amount of aggregate information about who visits, so I can answer whether projects land and where people come from. There is no cookie banner because this site does not set any tracking cookies, store IP addresses, or use a cross-visit identifier.
What is stored
- City, country, region, and time-zone (e.g.
Europe/Berlin) - derived from your IP at the edge. The IP itself is never written to storage. - Device class (mobile / tablet / desktop), browser family (Chrome / Safari / Firefox / Edge / other), and operating-system family (macOS / Windows / iOS / Android / Linux / other). The raw user-agent is parsed once for these classifications and then discarded.
- Top-level language code from your
Accept-Languageheader (e.g.en,de) - region and quality weights are dropped. - Your color-scheme preference (light / dark), read once from
prefers-color-scheme. - Where you came from, as a friendly label (LinkedIn, Google, Hacker News, …) - only the hostname is examined; full URLs are never stored.
- Which page you landed on, with all query strings removed.
- Which sections of the page you read, and for how long.
- On
/learnings/[slug]permalinks: whether you opened the Q&A reveal and whether you clicked the "See it on LinkedIn" link. Both are counted per permalink with no per-visitor association beyond your in-tab visit id. - On
/search: an anonymous per-day count of how many searches ran - never the words you typed. Search runs entirely in your browser. If you press "explain with AI", the permalink slug of the top matching post is counted, the same bounded way as a reveal. - The time of your visit.
What is not stored
- Your IP address is not written to long-term storage. It is used briefly (≤15 minutes) as a counter key for rate limiting and automatically expires.
- Your raw user-agent string.
- Any persistent identifier. A short-lived visit id lives in
sessionStoragefor the duration of a single tab; it expires when you close the tab and is never re-used. - Full referrer URLs.
- The words you type into search - the index runs on your device and the query never leaves it. The optional "explain with AI" button is the single exception: pressing it sends your question once to the model provider named below to compose an answer, and even then it is never written to storage or analytics.
- Form input, mouse positions, scroll heatmaps, or any other behavioral capture.
Third parties
The site loads Vercel Analytics, which receives anonymized pageviews. No cookies are set; no persistent identifier crosses requests.
The optional "explain with AI" button on /search, only when you press it, sends your typed question and short excerpts of already-public posts to Groq, a hosted model provider, to compose a short answer. Only public post text and your question are sent - never your identity, IP, or any of the analytics above. If no model key is configured, the button does not appear.
Live presence on the homepage
The homepage ambient ticker shows a coarse, public live signal: city, country, device class, and which section is being read in the last few minutes. No per-visit identifier, no browser or OS family, and no language is exposed to the public feed. The full per-visit detail is only visible to the owner behind authentication.
How to opt out
Set your browser's Do Not Track header to 1. The capture script reads navigator.doNotTrack on load and short-circuits if it is set. Nothing is sent to the server.
Where it lives
Data is stored in Vercel KV (Upstash Redis), retained for 30 days as raw events. After 30 days only daily aggregate counts remain, with no per-visit detail.