upScale - Privacy Policy

Last updated: July 31, 2026

upScale ("we", "our", or "the app") is a music theory, fretboard and chord drone application developed by Christophe Novalet. This policy explains what data the app handles, why, who else is involved, and what you can ask us to do about it.

The data controller is Christophe Novalet. You can reach us at any time at privacy@upscale.li.

The short version: upScale runs almost entirely on your device and works offline. We do create an account for you in the background so your settings and patterns can follow you between devices, we record pseudonymous usage analytics to understand how the app is used, and we work with a small number of named service providers listed below. We do not sell your data, we do not run ads, and we do not track you across other apps or websites.

What the app does locally

Scales, modes, chords, the fretboard, the audio engine and the metronome all run on your device. Sound is synthesised locally. Backing tracks are streamed or cached from our content servers. Once the content is downloaded, the app keeps working without a network connection.

upScale does not use your microphone, camera, location, contacts, photos, health data, or the advertising identifier of your device. It does not record or transmit any audio from your device.

Accounts and identifiers

Anonymous account

The first time you open the app, we create an anonymous account for you with our authentication provider, Supabase. This account has no name and no email attached. It is identified by a random user ID (a UUID). It exists so that your settings, saved patterns and unlock status can be stored and restored, and so that requests to our servers can be authenticated.

Signing up with an email address

If you choose to create a real account, you give us your email address. We send a six digit code to that address to confirm it. Your email address is then stored by Supabase Auth, attached to the same user ID you already had, so nothing you created as a guest is lost. We use your email address to sign you in and, when necessary, to contact you about your account. We do not send marketing email from this address unless you separately sign up for it.

Signing in with Google

If you choose "Continue with Google", Google authenticates you and returns your Google account identifier and email address to Supabase, which links that identity to your upScale account. We never see your Google password. Google's handling of the sign in is governed by Google's own privacy policy.

Sign in with Apple

Sign in with Apple is planned for a future release of the iOS app. When it ships, it will work the same way as Google sign in, and Apple's private email relay option will be supported. This policy will be updated at that point.

Device identifier

The app generates a random device identifier the first time it runs and stores it on the device. It is not derived from any hardware identifier and is not linked to your name. It is used to attach an invitation code to the installation it was redeemed on, and to count how many devices an invitation code is used on.

Data stored on your device

The following is kept locally, in your browser storage or in the app's storage on your device:

Data synchronised with our servers

So that your work follows you from one device to another, the app synchronises a limited set of data to our database, keyed to your user ID:

This happens for anonymous accounts as well as for accounts with an email address. Deletions are synchronised as deletion markers, so a pattern deleted on one device disappears on the others. When you sign in to a different account on the same device, the local copy of the previous account's data is wiped from that device.

We do not synchronise your audio, your microphone, or anything you have not created inside the app.

Purchases

Purchases are processed by Apple (App Store), Google (Play Store) or Stripe (web checkout), and are managed on our side through RevenueCat.

We never receive or store your payment card details, your billing address, or your store account credentials. Those stay with Apple, Google or Stripe.

Analytics

We use PostHog to understand how the app is used and what to improve. Our PostHog project is hosted in the European Union. Analytics starts when the app launches.

What is collected:

What is not collected: we do not send your email address, your name, your Google or Apple identity, or the content of your patterns beyond their titles to PostHog. We do not use PostHog autocapture, so your taps and text input are not recorded wholesale. We do not use analytics for advertising and we do not share analytics data with advertisers or data brokers.

Because analytics events carry an identifier that is stable on your device and can be joined to your account activity, we treat this data as personal data, not as anonymous data.

The app does not yet have an in app switch to turn analytics off. Until it does, email us at privacy@upscale.li and we will stop collecting analytics for you and delete the analytics profile we already hold. Using "Reset User Data" in the app's settings also resets your analytics identifier, which breaks the link with your past events on that device, though it does not delete events already recorded.

Invitation codes

During the beta, the full app can be unlocked with an invitation code. When you enter a code, the app sends the code and your device identifier to our server, along with your account token if you have a session, which you normally do. We store the code, the device identifier, your user ID, the first activation time and the time of the last check. The app re checks in the background, at most once a day, that the code is still valid, so that a code withdrawn by us stops working.

We use this to enforce the number of activations per code and to see, in our admin tool, how many devices a code is circulating on. Invitation codes are being retired as the app moves to normal purchases, and the associated records will be deleted once the beta is closed.

Patreon

The Patreon connection is currently disabled in the published builds of the app. When it is enabled, and only if you choose to use it:

We re check your membership periodically so that access follows your membership. You can unlink Patreon at any time from the app's settings, which deletes the link and the stored tokens.

Server logs and abuse prevention

Our API server writes technical request logs, which include IP addresses, request paths and timestamps. Some public endpoints, such as invitation code redemption, are rate limited by IP address, held only in memory for the length of the rate limit window. This is used for security, debugging and abuse prevention, not for profiling.

Who else processes your data

We work with the following providers. They act as our processors, or as independent controllers where indicated, and each has its own privacy policy.

We do not sell personal data, and we do not share it with third parties for advertising or marketing purposes.

International transfers

Our analytics data is held in the European Union. Some of our other providers, in particular RevenueCat, Patreon and Google, are based in the United States or process data there. Where data leaves the European Economic Area, it is transferred under the European Commission's Standard Contractual Clauses or another lawful transfer mechanism provided by that supplier.

Why we are allowed to process this data

Under the GDPR, our legal bases are:

Where you have given consent, you can withdraw it at any time. Withdrawing consent does not affect processing carried out before you withdrew it.

How long we keep things

Deleting your data

Inside the app, "Reset User Data" in the settings clears your local settings and unlock records on that device and resets your analytics identifier. It does not delete your account.

To delete your account, open the app's settings and use "Delete account". You confirm by typing the word asked for, and the deletion happens immediately: your synchronised settings, patterns, presets and progressions are erased from our database, along with your unlock records, your Patreon link and its encrypted tokens, and any admin rights attached to the account. Your authentication record is deleted from Supabase Auth in the same operation, so the account itself stops existing, and the app signs you out and wipes its local copy of your data. If any step fails, nothing is deleted and you keep your data.

Two things survive on purpose. If you redeemed an invitation code, the record of that redemption is kept but detached from you: your user ID is removed from it and it falls back to the device identifier, so that deleting and recreating an account cannot be used to redeem the same code again. And your analytics profile at PostHog is not deleted by the in app button; email us at privacy@upscale.li and we will delete it separately, within 30 days. You can also write to us at that address to have your account deleted for you, from the address on the account, or, for an anonymous account, by telling us your user ID or device identifier.

Purchase records held by Apple, Google, Stripe or RevenueCat may be retained by them for legal and accounting reasons even after your upScale account is deleted. Uninstalling the app removes the local data from your device but does not by itself delete anything held on our servers.

Your rights

If you are in the European Economic Area or the United Kingdom, you have the right to:

Write to privacy@upscale.li and we will answer within one month. If you are not satisfied with our answer, you can lodge a complaint with your national data protection authority. In Belgium, where we are established, that is the Autorité de protection des données / Gegevensbeschermingsautoriteit.

Residents of California and other jurisdictions with comparable laws have similar rights of access and deletion, and can exercise them at the same address. We do not sell or share personal information as those terms are defined by the CCPA.

Children's privacy

upScale is a general purpose music education tool and is not directed at children. We do not knowingly collect personal data from children under 13, or under the minimum age of digital consent in their country where it is higher. If you believe a child has given us personal data, contact us and we will delete it.

Security

Traffic between the app and our servers is encrypted in transit. Access to our database is restricted to our backend, Patreon tokens are encrypted at rest, and sign in uses one time codes rather than passwords we would have to store. No system is perfectly secure, but we keep the amount of personal data we hold deliberately small.

Changes to this policy

We may update this policy as the app changes, in particular when Sign in with Apple ships and when the analytics control arrives in the app. Changes are published on this page with a new "Last updated" date. If a change is significant, we will tell you inside the app.

Contact

Questions, requests, or anything else about your data:

privacy@upscale.li