Privacy
This describes what this version of KnotdKids actually does. It is short because the site does very little with data.
Signing in is optional, and it changes where things are kept
Without an account, everything you do here stays in your own browser and is never sent anywhere. No sign up, no password, no database with your child in it. The flip side is worth knowing: clearing your browser data erases the reading and the badges, and none of it follows you to another device.
With an account, the same information is also kept for you on a server so it turns up on your other devices. That server is Supabase, running in Singapore, which is the nearest region to Hong Kong. What goes up is exactly the table below and nothing else: no keystrokes, no recordings, no browsing history, nothing about how long a child looked at anything.
The account belongs to the grown-up. A child does not have a login, and their name is only ever a first name you typed so the right work shows on the right screen. You never have to give us a child's school, class, birthday or photograph, because none of those exist anywhere in the product.
Each household can only reach its own rows. That is not a promise about our good intentions, it is a rule the database itself enforces on every single request, and it is tested: one account asking for another's reading gets nothing back.
What is stored on your device
| What | Why | Where |
|---|---|---|
| Who is signed in | Your email address and the name you typed, on the server. On this device: which child's work is showing, and whether editing is switched on. | knotdkids:learner:v1, knotdkids:editing:v1 |
| Reading progress | Which parts are finished, which questions were answered, and how sure you said you were. | knotdkids:progress:<book>, knotdkids:reader:decks:v2 |
| Worksheets done on screen | Which sheet, when, and how each item on it went. This is what the profile counts and what a printed sheet can never tell us. | knotdkids:worksheet-attempts:v1 |
| Practice | The words and questions waiting to come round again, and how often each has been seen and missed. | knotdkids:review:v1 |
| Days you read | One date per day you did something, which is what the streak counts. | knotdkids:days:v1 |
| Badges already seen | Which badges had been won by your last visit, so a new one is only celebrated once. | knotdkids:badges-seen:v1 |
| Year group | The last year group you looked at, so the site opens on it next time. | knotdkids:grade:v1 |
| Teacher uploads and edits | Titles, shelves and any wording a teacher has changed, plus the shelves they made themselves. The uploaded files go in IndexedDB, and in private file storage once signed in. | knotdkids:library:v1, knotdkids:topics:v1 |
| Syncing | Which child this device last showed, whether you have been asked about bringing existing reading onto the account, what you said to leave off it, and which of a teacher's material has reached the server. | knotdkids:sync:owner:v1, knotdkids:sync:offer:v1, knotdkids:sync:left-behind:v1, knotdkids:teacher-sync:v1 |
| Reading help | Whether you turned on bigger text or the dyslexia friendly font. | knotdkids:text-size, knotdkids:dyslexic |
Files a teacher uploads are held in this browser's IndexedDB, in a store called knotdkids. Signed in, a copy also goes to private file storage on the same server, so a teacher's own material survives a lost laptop. It is private: reaching a file needs a link we sign for that teacher, and nobody else's account can ask for one.
Signed out, clearing site data for this site deletes everything, and nothing is kept anywhere else. Signed in, clearing site data still empties this device, and deleting your account removes the rows on the server with it: every table above is tied to the account and goes when it goes.
What leaves your device
Signed out, only the first two. Signed in, the third as well, and that one is the reading itself. If you subscribe, Stripe is the fourth, and it is only the payment.
- Fonts. The three typefaces are fetched from Google Fonts, so Google can see the network request your browser makes for them, including your IP address. Nothing about your child is attached to it. We are moving to self hosted fonts to close this.
- Errors, in the editor only. If the site is opened inside the Lovable editor, a crash report can be sent to that editor. On the public site those hooks do not exist and nothing is sent.
- Your reading, if you have an account. The rows in the table above go to our Supabase project in Singapore, along with your email address, so they can come back on your next device. Nothing is sent while you are signed out.
- Payment, if you subscribe. Checkout sends you to Stripe. Your name, email and card details are entered on a page they serve, not on this one, so a card number never touches this origin. Stripe then tells us whether the subscription started, which term it is, and when the current period ends. We keep those facts on your account. We never see the card.
What we do not do
- No adverts, and nothing is sold to your child inside the app.
- No analytics and no tracking pixels. The font request and, if you subscribe, Stripe are the only third parties this site talks to.
- No chat, no comments, and no way for anyone to contact your child here.
- No selling of anything about you or your child. Stripe processes the payment; they do not get the reading.
- Nothing is sent while you are signed out, and no account is required to read.
Children
The site is meant for children of four to nine, used with a grown up. The account and the subscription belong to the grown up. A child does not have a login, and their name is only ever a first name you typed so the right work shows on the right screen.
This page describes the current build. If what the site sends or stores changes, this page changes with it, not after.
