What this site does and doesn't do with your data.
Short version: I don't track you. There's no analytics tag, no advertising pixel, and no sign-up. The only things stored on your device are your own UI preferences. The chatbot processes your messages but doesn't keep them.
What I store on your device
The site uses localStorage to remember three preferences,
each tied to a fixed allow-list:
- Theme —
darkorlight. - Accent colour — one of eight preset keys (e.g.
orange,cyan). - Font theme — one of seven preset keys (e.g.
editorial,terminal).
These preferences use browser storage. Clearing your browser storage resets the site to defaults.
What the chatbot does with your messages
When you chat with me here, your message is sent to a Cloudflare Worker that runs a small retrieval-augmented-generation pipeline over my portfolio content. The Worker:
- Does not log your messages.
- Does not retain them after the response is generated.
- Does not pass them to any third-party analytics or training pipeline.
- Sends your question, a short conversation history and relevant portfolio passages to Cloudflare Workers AI to generate a reply.
Conversation history is held in your browser tab and a short excerpt is sent with each question. Refreshing clears it. To enforce usage limits, the backend stores a daily hash of your IP address and request counts, which expire at midnight UTC. It does not store your messages or raw IP address in that counter.
Third parties the site requests from
The site loads a small number of public, cacheable assets from third-party CDNs. None of these involve your personal data:
- Google Fonts — for typography. Logged by Google per their privacy policy.
- shields.io — for the GitHub last-commit / stars badges on project cards.
- ghchart.rshah.org — for the GitHub contribution graph (lazy-loaded only when you scroll to the section).
- i.ytimg.com / youtube-nocookie.com — for video thumbnails and embedded players. Case-study video players are lazy-loaded as you browse the page.
- storage.googleapis.com — for the in-browser TensorFlow.js sentiment model, fetched only when the Live Lab section enters your viewport.
What's not on this site
- No Google Analytics. No Facebook pixel. No tracking pixels of any kind.
- No advertising.
- No social-network embed scripts.
- No sign-up form, account creation, or persistent identity.
Your rights
Under UK GDPR you have the right to access, rectification, and erasure
of any personal data I hold. The chatbot’s temporary usage counters are described above. If you’ve sent me an
email at paulmcneill1989@hotmail.co.uk, that email is
retained in my mailbox until I prune it. Email me to request its
deletion.
Contact
Privacy questions: paulmcneill1989@hotmail.co.uk.