About

Privacy

Short version: reading the module pages stores nothing about you on a server, apart from an anonymous visit count. Page visits are counted in aggregate by GoatCounter without cookies (see "Visit counts"), and a browser that sends Do Not Track is not counted. Two optional features do send what you type to the project's database: voting on a CDC Assistant answer (one small record), and the Change Feed Playground (rows you edit and scenarios you save). This page says what is stored, who can see it, and when it is deleted.

The newsletter signup is a third optional feature: if you use it, the email address you type is sent to Buttondown.

Last updated:

What the CDC Assistant stores

The CDC Assistant is optional. The whole site works without it, and nothing below happens unless you open the assistant, ask it something, and then click ๐Ÿ‘ or ๐Ÿ‘Ž on an answer. Typing a question alone sends nothing: the assistant answers from a data file your browser has already downloaded.

When you do click ๐Ÿ‘ or ๐Ÿ‘Ž, your browser sends one record to the project's database (a Supabase Postgres table named assistant_feedback). It contains exactly these fields:

The site's own code does not collect a name, an email address, an account, a cookie value or an IP address. The purpose is narrow: to see which questions the assistant answers badly so the answers can be improved.

If sending fails, the vote (including the question text) waits in your browser and is retried on a later visit, for up to 14 days or 8 tries, then dropped.

The Change Feed Playground

The Change Feed Playground is a separate, optional tool that works differently from the rest of the site. It talks to the same Supabase project as the assistant, so please read this section before you type anything real into it. Use made-up data.

The newsletter signup

The newsletter has a signup form on its page and in the footer, with one field: your email address. The newsletter is run by Buttondown, a separate company.

Buttondown handles the address under its own privacy policy. As the newsletter's sender, the maintainer, Christopher Ennis, can see the subscriber list in Buttondown.

To unsubscribe, use the unsubscribe link Buttondown normally includes in its emails. You can also write to the maintainer on LinkedIn to ask about your address. The "Asking about or deleting your entry" section below is for anonymous assistant and playground entries, not for newsletter subscribers.

What stays on your device

Your browser's local storage holds a few things that are never sent anywhere:

Clearing the site's data in your browser settings removes all of it.

Cookies and analytics

The site's own code does not set cookies. It does count visits with GoatCounter, which sets no cookies either; see "Visit counts" below.

Separately, if you use the newsletter signup, the Buttondown page you continue to may set its own cookies.

Some features load things from other companies, which can behave differently. If you click play on an embedded YouTube video, YouTube's player loads and may set its own cookies. The Change Feed Playground loads its Supabase library from jsDelivr, which can see your IP address, and contacts Supabase when it opens. Details are under "Third-party requests".

Visit counts

The site counts visits with GoatCounter, a privacy-friendly analytics service. It sets no cookies and shows no consent banner, because it stores nothing in your browser and keeps no personal profile of you.

Third-party requests

The pages are hosted on GitHub Pages, so GitHub receives each page request as any web host does. Fonts, styles and the site's own scripts are served from the site itself, except the visit-count script described below. A few features load something from another company, and any request to another host necessarily shows that host your IP address and browser details:

These companies handle those requests under their own privacy policies, and Supabase may keep its own technical logs of the requests it receives. Links on the site to other websites are ordinary links: nothing is sent until you follow one.

How long we keep it

Assistant feedback records are kept for 12 months. A scheduled database job runs every day and deletes records older than that, so no one has to remember to do it. This policy took effect on 2026-10-09.

This applies only to assistant feedback. Change Feed Playground events and saved scenarios are kept for a much shorter time: 30 days. A separate scheduled job runs every day and deletes playground events and saved scenarios older than that, so a record can last up to about 31 days before it is removed, and a playground share link stops working once its scenario is deleted. The 30 days start from the database server's time when the record is stored; a visitor's device clock cannot change that. The playground also asks you, on the page, to use made-up data only. This policy took effect on 2026-10-09.

Newsletter subscribers are a separate case: Buttondown, not this site, keeps your address for as long as you are subscribed. What it keeps after you unsubscribe is set by its privacy policy and its own clean-up schedule.

Who can see it

Assistant feedback: the site's maintainer, Christopher Ennis, reads the records in the Supabase dashboard. Your browser is only allowed to add records: it cannot read any back, and visitors cannot see each other's questions. Supabase, as the database host, also has technical access to the service it runs.

Change Feed Playground: events are readable by anyone, and other playground visitors see new events live while they are stored. A saved scenario is readable by anyone who has its link (see above) until it is deleted after 30 days. Visitors' browsers can only add playground records, and read events; they cannot change or delete any record.

Asking about or deleting your entry

You can ask what is stored or ask for an entry to be deleted. The private route is a message to the maintainer on LinkedIn, or an email to the address on the contact page. You can also open a GitHub issue, but issues are public: say only that you want to be contacted about a deletion, and send the details privately.

Never paste your question, a playground share link or any other private text into a public issue. A share link is a key: anyone who holds it can open that saved scenario.

Because nothing identifies you, an entry can only be found if you can tell us the exact question you asked and roughly when you asked it. Without that we cannot tell which record is yours, and it will be deleted automatically within 12 months anyway (playground records within about 31 days). For a saved playground scenario, send the share link privately (LinkedIn message); for playground events, tell us roughly when you used it and what you entered.

Changes to this page

If what the site stores changes, this page is updated in the same change and the "Last updated" date at the top of this page moves. The full history is in the public Git log.