ivory
Privacy Policy
Ivory teaches piano in your browser. It is free, and it is built to need as little of your data as possible. Here is exactly what that means.
The short version
- Learn works fully without an account. Nothing leaves your device.
- An account stores your email, a display name, and your game progress.
- No ads, no trackers, no analytics. We do not sell anything about you.
- You can export everything and delete your account whenever you want.
Playing without an account
Learn works fully as a guest. Your lessons, streak, scores and coins are saved in your browser's localStorage on the device you are using. That is browser storage, not a cookie. It is first party, readable only by Ivory, and it is not sent anywhere.
Because it lives in your browser, it is tied to that browser. Clearing your browsing data deletes it, and it will not follow you to another device.
What an account is for
You only need an account for Compete: leaderboards, duels, and cloud save so your progress follows you between devices.
When you create one, we store:
- your email address, used to sign you in and to send account email,
- a display name you pick, shown to other players on leaderboards and in duels,
- your game progress and scores, including lessons finished, XP, streak, coins and duel results,
- the age you type once at sign-up. We ask it to apply the 13+ rule below. It is self-declared, we do not verify it, and it is saved alongside your progress.
That is the whole list. We do not ask for your real name, your address or your phone number. We never ask for payment details, because there is nothing to pay for.
Your display name and your XP are held in a profiles row so leaderboards can rank them. Everything else is held as a single block of saved progress in a user_progress row. Your ranked rating is written only by Ivory's own server code, never by the app in your browser.
Exactly what syncs to the cloud
Cloud save uploads your Ivory browser storage as a whole, minus a short exclusion list, so it is worth being specific about what that covers:
- lessons, reading practice and track progress,
- path progress, chests, reviews and awards,
- ranked state, league, quests and daily state,
- spaced-repetition scheduling data,
- your personal best for each game mode,
- XP, coins, streak and profile counters,
- the age you typed at sign-up,
- your settings: reminders, timbre, prompt mode, and whether you have finished onboarding.
Anything Ivory saves later under the same naming scheme syncs too, unless it is added to the exclusion list. That is written down here so the list can be checked rather than taken on trust.
Four things are deliberately excluded and stay on your device only:
- The error log. Ivory keeps up to 50 recent error records in your browser to help diagnose faults. Each one includes a 120-character slice of your browser's user-agent string. That is diagnostic data with a device fingerprint in it, so it is never uploaded. It is still included in your own data export, because it is yours.
- Your session record, which holds your display name, account id and email locally so the app knows you are signed in, and any account details stored locally for accounts that never touch the cloud.
- A short-lived sign-up identifier, used only while you confirm an email address.
- The device marker that records whose progress is on this device.
Coins
Keys are earned by playing. They cannot be bought with real money, cannot be cashed out, and have no value outside Ivory. Your balance is simply part of your game progress, so no payment data is involved anywhere in Ivory.
Cookies, and why there is no banner
Ivory sets no advertising cookies and no tracking cookies, and it loads no third-party trackers. There is nothing to consent to, so there is deliberately no cookie banner.
If you sign in, Supabase keeps a login token in your browser so you stay signed in. That is what makes signing in work. Signing out removes it.
Analytics
There are none. Ivory runs no analytics or product-measurement tool, first party or third party, and no advertising network. If that ever changes, this page will say so first, and it will be something cookieless that does not identify individual people.
Your MIDI keyboard
If you connect a MIDI instrument, Ivory asks your browser for permission to read it through the Web MIDI API. It reads note messages only: which key you pressed and how hard. It never uses your microphone and it never records audio. Notes are checked in your browser and are not sent to a server or stored.
Who else handles your data
Ivory is run by one person with the help of a few services. Each sees only what it needs.
- Supabase handles sign-in and the database holding your display name, progress and scores.
- Supabase also sends account email, such as confirming your address or resetting your password. It sees the address the message goes to.
- Cloudflare Pages hosts the site. Like any web host, its logs record requests, including IP addresses, for security and abuse prevention.
- Google Fonts serves the typeface. Your browser fetches the font files straight from Google, so Google sees your IP address and browser details for those requests. Nothing about your practice or your account is sent, and no cookie is set.
Apart from those, we do not send your data anywhere else. We do not share it with advertisers or data brokers, and none of them may use it for their own purposes.
Where your data is kept
Ivory is operated from British Columbia, Canada, and your data is handled under PIPEDA, Canada's federal privacy law. The services above run on servers in other countries, mostly the United States, so account data is stored and processed outside Canada and is subject to the laws there. Creating an account means you are fine with that.
How long we keep it
Account data is kept while your account exists. Delete the account and it goes. Guest data stays in your browser until you clear it. Host logs are short-lived and are handled under Cloudflare's own retention rules.
Getting your data out, and deleting it
Open Settings, then "Your data". There are two buttons, and both work today.
Export my data downloads a JSON file holding everything Ivory has about you:
- this device's saved progress,
- your account identity: display name, account id, whether you are a guest, and how you signed in,
- from Supabase: your email address, when the account was created, and when you last signed in,
- your
profilesrow and youruser_progressrow, in full, - the local error log described above.
Delete my account permanently erases your profile, XP, ranked history and saved progress, then clears every trace in your browser. It asks twice and makes you type DELETE, because it cannot be undone. If the deletion service cannot be reached, Ivory says so plainly rather than wiping the local copy and letting you think the cloud is gone.
If a deletion fails, or you cannot sign in to run one, email hello@ivory.academy and we will erase it by hand. You can also ask what is held about you, ask for it to be corrected, and complain to the Office of the Privacy Commissioner of Canada.
Children
Ivory is not directed to children under 13, and you must be at least 13 to create an account. We do not knowingly collect personal information from anyone under 13. Under-13s can still practise as guests, because guest play collects nothing and sends nothing anywhere.
If you believe a child under 13 has created an account, email hello@ivory.academy and we will delete it.
Security
Passwords are handled by Supabase and are never stored by us in readable form. Traffic to and from Ivory is encrypted in transit. Your progress row is readable only by your own account. No service is perfectly secure, so please use a password you do not reuse elsewhere.
Changes to this policy
If this policy changes, the date at the top changes with it. If we ever start collecting something new, we will say so plainly rather than quietly editing this page.
Contact
Questions about privacy, or a request about your data: hello@ivory.academy.