Privacy notice

Who is responsible

The operator details on this page are placeholders until the company is registered.

Legal name
PLACEHOLDER-OPERATOR-BV
Trading name
PLACEHOLDER
Address
PLACEHOLDER street 1, PLACEHOLDER, Belgium
Company number
PLACEHOLDER-KBO
VAT number
PLACEHOLDER-VAT

Contact: legal@PLACEHOLDER.example

What is processed

The description of the gap you type is sent to Cloudflare Workers AI to build the sheet. The product does not store it and does not log it.

The product stores the following in its database, one table at a time.

sheets

Each generated sheet or story: its text, questions and answers, the skill it practises, the age you chose, whether it is a worksheet or a story, which model made it, how many attempts it took and how much model capacity it used. The text you typed to describe the gap is not part of it.

Why: To show a sheet again in My sheets, to let a sheet be reported by its number and to measure how well the generator works.

Linked to a person: Only when you were signed in: then the row carries your account number, so the sheet appears in My sheets. Sheets made without an account carry no name, no account and no IP address.

Columns: id, created_at, family, skill_tag, age, sheet_json, model, attempts, input_tokens, output_tokens, neurons, kind, user_id

model_calls

One row of usage figures for each call to the model: the day, the step, whether it worked and the amount of capacity used. No text is kept.

Why: To keep the daily capacity within its limit and to find faults.

Linked to a person: No. A row holds no identifier of a person and no text you typed.

Columns: id, created_at, day, sheet_id, step, model, ok, input_tokens, output_tokens, neurons

anon_daily

One count of sheets made for each UTC day.

Why: To apply the free daily allowance across all visitors.

Linked to a person: No. It is one number for each day, with no identifiers at all.

Columns: day, count

reports

A report you send about a sheet: its kind (a mistake or a notice), the sheet number, the question number and the free-text note the adult typed.

Why: To read the report, correct the problem and answer you where needed.

Linked to a person: Not by itself, since no name or contact detail is stored with it. If you type a name or contact detail into the note, it is kept with the report, so please leave such details out.

Columns: id, created_at, day, kind, sheet_id, item_index, note

users

Your account: the email address you signed up with, a salted hash of your password (never the password itself), when you joined and when you confirmed you are an adult, and a count of recent wrong passwords.

Why: To let you sign in, keep your sheets, reset a forgotten password and lock the account after repeated wrong passwords.

Linked to a person: Yes. The email address identifies you.

Columns: id, email, password_hash, created_at, attested_adult_at, failed_attempts, locked_until

sessions

One row for each device you are signed in on: a hash of the sign-in cookie and when it expires.

Why: To keep you signed in, and to sign other devices out when you change your password.

Linked to a person: Yes, through your account. A session ends after 30 days without use or when you sign out.

Columns: id, user_id, created_at, expires_at

reset_tokens

A hash of a password reset link while it is valid, and when it was used.

Why: So that a reset link works once and for 30 minutes only.

Linked to a person: Yes, through your account.

Columns: id, user_id, created_at, expires_at, used_at

account_usage

How many sheets your account made in each calendar month.

Why: To apply the monthly free allowance, which does not come back when you delete a saved sheet.

Linked to a person: Yes, through your account.

Columns: user_id, month, count

entitlements

Whether an account has unlimited sheets, and until when. No account has one today, because nothing is for sale yet.

Why: To lift the monthly allowance for an account that has unlimited sheets.

Linked to a person: Yes, through your account.

Columns: user_id, status, current_period_end

mail_daily

One count of emails sent for each UTC day.

Why: To stay under the daily sending limit.

Linked to a person: No. It is one number for each day.

Columns: day, count

Failure log

When a sheet cannot be generated, one log line records the stage that failed, the skill tag and some counts. It never contains the gap description you typed.

Why: To find and fix generation faults.

Who processes it

Cloudflare hosts the product, the database, the model and the logs. To deliver the pages, Cloudflare also processes request data such as IP addresses. Password reset emails are sent through Migadu, which receives your email address and the message.

Cookies, device storage and tracking

When you sign in, the product sets one cookie that keeps you signed in. Without an account, your browser keeps one number: how many of the 3 free sheets it has used. Both are needed for the service you asked for. The product runs no analytics and shows no ads.

Legal basis

For an account and its sheets, the basis is the contract you enter by signing up (Article 6(1)(b) of the GDPR). For everything else, we rely on legitimate interests under Article 6(1)(f): running the service, keeping it secure and handling reports.

How long it is kept

Account data and saved sheets are kept until you delete them or the account. Sessions end after 30 days without use, and reset links after 30 minutes. Sheets made without an account and the usage counts are kept until they are deleted.

Your rights

You have the right of access, correction, erasure, restriction, portability and objection. On your account page you can download all your data as one file and delete the account and its sheets yourself. For anything else, write to the address above.

You may also complain to the supervisory authority in Belgium: Gegevensbeschermingsautoriteit / Autorité de protection des données.