PIANO HERO
Política de Privacidade Privacy Policy
Aplicativo móvel — jogo de ritmo musical Mobile application — music rhythm game
VIGÊNCIA: 2026-07-19 EFFECTIVE DATE: 2026-07-19
1. Sobre o aplicativo
Piano Hero é um jogo de ritmo musical para dispositivos móveis. Você toca e segura notas que caem em sincronia com músicas. Não há rede de publicidade e não há SDK de analytics de terceiros rastreando você entre apps. O jogo inclui um placar global opcional: qualquer pessoa pode jogar sem criar conta, mas aparecer no ranking exige login com Google ou Apple (veja Seção 3). Registramos um pequeno conjunto de eventos anônimos de gameplay (qual música você jogou, se completou, quão longe chegou se não terminou) para decidir quais músicas produzir em seguida — a lista completa está na Seção 3. Este documento explica exatamente quais dados o jogo coleta, para onde vão, e o que deliberadamente não coletamos.
2. Vigência
Esta política tem vigência a partir de 2026-07-19. Atualizamos a data de vigência sempre que mudamos o que coletamos — não para correções de digitação. Quando a data muda, também atualizamos o versionName do app para que a mudança esteja visível no momento da instalação.
Histórico de mudanças:
- 2026-07-19 — Corrigida a informação sobre relatórios de crash: eles são vinculados ao ID pseudônimo de instalação/anônimo (via
setUser+ tagauth_uid), não a uma identidade real. Público-alvo definido como 13+. A permissão de microfone passou a ser removida do app no build. Esta versão não exibe anúncios. - 2026-06-29 — Adicionados login opcional via Google/Apple e placar global. Novos dados divulgados: e-mail e nome de exibição do provedor (coletados apenas se o usuário optar pelo login), apelido público, código de país opcional e pontuações do ranking (score, accuracy, max combo). Corrigida a seção "O que NÃO coletamos" para refletir que e-mail e nome de exibição são coletados quando o usuário faz login voluntariamente. Adicionada Apple como subprocessadora de autenticação; Google agora também atua como provedor de login. Adicionada nuance sobre leitura da configuração de região do dispositivo para pré-preenchimento de bandeira no placar.
- 2026-05-04 — Adicionados eventos anônimos de gameplay (id da música, dificuldade, score, drop-off de progresso) e eventos de funil de paywall (qual tela acionou o paywall e o resultado). Ambos vinculados apenas ao ID anônimo do Supabase. Nenhum SDK de analytics de terceiros foi adicionado.
- 2026-04-19 — Política inicial.
3. O que coletamos e por quê
A tabela abaixo lista cada dado que o Piano Hero acessa. Foi auditada contra o código-fonte em 2026-07-19.
| Tipo | Onde | Por quê | Para onde vai | Identificado? |
|---|---|---|---|---|
| ID anônimo do Supabase | Início do app, automático | Manter estado de assinatura entre reinstalações | Supabase Auth | Anônimo — sem e-mail/PII |
| E-mail e nome de exibição do provedor (Google ou Apple) | Ao fazer login com Google ou Apple — opcional; não é coletado para quem joga anonimamente | Criar conta recuperável que preserve compras e progresso entre reinstalações e troca de aparelho | Supabase Auth (identidade vinculada ao ID anônimo existente). Apple pode fornecer e-mail relay privado; nome retornado apenas no primeiro login. | Vinculado ao usuário identificado — somente quando o usuário opta pelo login |
| Apelido (nickname) | Ao configurar perfil do placar pela primeira vez — exige login | Exibição no placar global para outros jogadores | Tabela user_profiles no Supabase | PÚBLICO — visível para todos os jogadores no placar global. Definido uma vez; não pode ser alterado. |
| Código de país (ISO 3166-1 alpha-2) | Ao configurar perfil do placar (opcional) — pré-preenchido pela configuração de região do dispositivo ou escolhido manualmente | Exibir bandeira no placar global | Tabela user_profiles no Supabase | PÚBLICO — visível como bandeira no placar. Pode ser omitido. |
| Pontuação no placar (score, accuracy, max combo, por música + dificuldade) | Ao finalizar uma música estando logado | Classificação competitiva global | Tabela leaderboard_entries no Supabase | PÚBLICO — visível para todos os jogadores no placar global |
| ID de assinante RevenueCat | Primeira visualização do paywall | Identificar cliente para restauração de compra | Backend RevenueCat (vinculado ao token de compra Google Play) | Pseudônimo — só conta Play |
| Tokens de compra (Weekly / Monthly / Lifetime) | No momento da compra | Validar direito de uso | Google Play Billing → RevenueCat → linha entitlements no Supabase | Vinculado à conta Google Play, não armazenado como PII |
| Dados de crash + diagnóstico (stack trace, modelo do device, versão do OS, versão do app; replay de sessão totalmente mascarado apenas em erro) | Em exceção não tratada; amostragem de performance | Diagnosticar falhas em produção | Projeto Sentry piano-hero | Vinculado ao ID pseudônimo de instalação/anônimo (via setUser + tag auth_uid) — não a identidade real |
| Offset de calibração de áudio (inteiro em ms) | Após calibração de 8 toques | Preservar offset entre reinícios | AsyncStorage (apenas no dispositivo) | Local apenas, nunca transmitido |
| Lista de músicas pinadas | Após pinar música | Preservar pin entre reinstalações | Linha pinned_songs no Supabase, chaveada pelo ID anônimo | Vinculado ao ID anônimo do Supabase |
| JSON do chart + áudio (músicas baixadas) | Ao selecionar música remota | Cache para jogar offline | documentDirectory local | Local apenas |
| Eventos de sessão de jogo (id da música, dificuldade, score, accuracy, max combo, contagem de pausas, completou vs. abandonou, progresso até onde chegou, duração total do chart, tema ativo, ID estável de instalação) | Ao iniciar e finalizar (ou abandonar) uma música | Decidir quais músicas manter, quais merecem v2, e quais dificuldades estão duras demais | Linha play_sessions no Supabase, chaveada pelo ID anônimo | Vinculado ao ID anônimo do Supabase. O ID de instalação é um UUID gerado na primeira abertura, não vinculado a hardware do aparelho. |
| Eventos do app (paywall exibido/fechado/comprado/restaurado/erro; música pré-escutada; música baixada; pacote visualizado/pinado; dificuldade alterada; tema alterado; com contexto da tela) | Quando as ações acima ocorrem | Entender quais telas convertem, quais conteúdos são consumidos e como o app é usado | Linha app_events no Supabase, chaveada pelo ID anônimo | Vinculado ao ID anônimo do Supabase |
Em linguagem comum: geramos um ID anônimo para que sua atividade sobreviva a uma reinstalação; se você optar pelo login, vinculamos uma conta Google ou Apple ao mesmo ID; usamos Google Play e RevenueCat para processar o pagamento; coletamos relatórios de crash para corrigir bugs; registramos quais músicas você joga (e quão longe chega) para escolher o que produzir em seguida; e guardamos sua calibração no aparelho. Não há SDK de analytics de terceiros; os eventos de gameplay ficam dentro do nosso projeto Supabase.
4. Para onde os dados vão (subprocessadores)
Piano Hero usa um pequeno número de serviços terceirizados. Cada um tem sua própria política de privacidade:
- Supabase — banco de dados + autenticação (anônima e vinculada ao Google/Apple). supabase.com/privacy
- Apple (Sign in with Apple) — autenticação opcional via Apple ID (apenas iOS). O e-mail e o nome de exibição fornecidos pela Apple são processados por ela antes de chegarem ao Supabase. apple.com/legal/privacy
- Google — processa transações via Google Play Billing e, opcionalmente, serve como provedor de login (Sign in with Google) em iOS e Android. Nunca vemos os dados do seu cartão. policies.google.com/privacy
- RevenueCat — processamento de compra e estado de assinatura. revenuecat.com/privacy
- Sentry — relatório de crashes e diagnóstico de performance. sentry.io/privacy
Não compartilhamos dados com ninguém fora dessa lista. Não vendemos dados para ninguém, em hipótese alguma.
5. O que NÃO coletamos
Para ficar inequívoco, os itens abaixo nunca são coletados pelo Piano Hero:
- Seu número de telefone — nunca coletado.
- Seu nome real ou endereço de e-mail quando você joga anonimamente — sem formulário de cadastro obrigatório, sem PII exigido. O login com Google ou Apple é opcional e necessário apenas para entrar no placar global ou realizar compras; se você optar por fazer login, recebemos e-mail e nome de exibição do provedor (a Apple pode fornecer um e-mail relay privado se você escolher "Ocultar E-mail"). Esses dados ficam no Supabase Auth. Fotos de perfil do provedor não são coletadas nem usadas.
- Sua localização precisa — sem GPS, sem geolocalização por IP. Para o placar global, lemos a configuração de região/idioma do seu dispositivo para pré-preencher o campo de país ao criar o perfil; você pode alterar ou omitir o país manualmente, e nunca acessamos o GPS nem inferimos localização por endereço IP.
- Áudio do microfone. O app toca música mas nunca grava; a permissão de microfone é removida do app no momento do build.
- Fotos, contatos, calendário ou arquivos do seu dispositivo.
- SDKs de analytics de terceiros (Mixpanel, Amplitude, PostHog, Segment, Firebase Analytics, etc.). Os eventos de sessão descritos na Seção 3 ficam dentro do nosso próprio Supabase e nunca são encaminhados para uma quarta parte.
- Gravação de tela não mascarada. Registramos eventos discretos (iniciou, terminou, abandonou em X%); o replay de sessão do Sentry só ocorre em erro e é totalmente mascarado (sem texto, imagens ou vetores legíveis) — nunca um vídeo legível da sua tela.
- Identificadores de publicidade. Esta versão do Piano Hero não exibe anúncios e não coleta o Advertising ID (o SDK de anúncios não está incluído no app).
- IDs persistentes de hardware do dispositivo. O ID de instalação referenciado na Seção 3 é um UUID gerado por software no primeiro lançamento e armazenado localmente — não está vinculado ao IMEI, IDFA, Android ID ou qualquer identificador de hardware; é resetado ao desinstalar o app.
6. Crianças
Piano Hero é destinado a usuários com 13 anos ou mais. Não é direcionado a crianças menores de 13 anos e não coletamos intencionalmente informação pessoal de crianças menores de 13. Se um perfil de placar for criado (apelido + país opcional), esses dados ficam visíveis publicamente para todos os jogadores, e o login com Google ou Apple é exigido para isso — por isso recomendamos supervisão de um responsável para menores. Se você acredita que uma criança menor de 13 anos usou o app, contate-nos (Seção 10) e apagaremos os dados associados.
7. Retenção de dados
IDs anônimos, direitos de uso e dados do placar ficam no Supabase indefinidamente para que compras e conquistas sobrevivam a reinstalações. Desinstalar o app interrompe a coleta de novos dados, mas os registros permanecem até que você nos solicite remoção (veja Seção 8).
Para usuários com login (conta Google ou Apple vinculada): o e-mail e o nome de exibição do provedor são mantidos como parte da identidade do Supabase Auth enquanto a conta existir. Apelido, código de país e pontuações do placar seguem a mesma retenção indefinida. Você pode solicitar a exclusão completa enviando e-mail com seu endereço cadastrado (veja Seção 8).
Relatórios de crash no Sentry seguem a retenção padrão do Sentry (90 dias). Offset de calibração e dados de chart baixados ficam apenas no seu aparelho e são removidos quando você desinstala o app.
8. Seus direitos
Você pode solicitar uma cópia de qualquer dado vinculado ao seu ID, ou pedir que apaguemos esses dados, enviando e-mail para o endereço na Seção 10. Honramos solicitações verificadas em até 30 dias.
- Usuários com login (Google ou Apple vinculado): inclua o endereço de e-mail cadastrado na conta para que possamos localizar e excluir a conta corretamente.
- Usuários anônimos: inclua a data e hora aproximada da sua última sessão de jogo e seu país para que possamos localizar o registro correto.
9. Mudanças nesta política
Se mudarmos materialmente o que coletamos ou para onde os dados vão, vamos atualizar a data de vigência no topo deste documento e bumpar o versionName do app para que a mudança esteja visível na instalação. Este documento é versionado em controle de fonte, então o histórico completo é auditável.
10. Contato
Para dúvidas de privacidade, exportação de dados ou solicitações de exclusão, contate:
E-mail: carlosga@demerzelstudio.com
Somos uma equipe pequena de desenvolvimento. Por favor, permita até 30 dias para resposta.
1. What this app is
Piano Hero is a mobile rhythm game. You tap and hold falling notes in time with music. There is no advertising network and no third-party analytics SDK following you between apps. The game includes an optional global leaderboard: anyone can play without an account, but appearing on the ranking requires signing in with Google or Apple (see Section 3). We do record a small set of anonymous gameplay events (which song you played, whether you finished it, how far you got if you didn't) so we can decide which songs to make next — see Section 3 for the full list. This document explains exactly what data the game collects, where it goes, and what we deliberately do not collect.
2. Effective date
This policy is effective 2026-07-19. We update the effective date whenever the substance of what we collect changes — not for typo fixes. When the effective date changes, we also bump the app's versionName so it is visible at install time.
Change history:
- 2026-07-19 — Corrected the crash-report disclosure: reports are linked to the pseudonymous install/anonymous ID (via
setUser+ anauth_uidtag), not to a real identity. Target audience set to 13+. The microphone permission is now stripped from the app at build time. This version shows no ads. - 2026-06-29 — Added optional Google/Apple login and global leaderboard. New data disclosed: provider email and display name (collected only when the user chooses to sign in), public nickname, optional country code, and ranking scores (score, accuracy, max combo). Corrected "What we DON'T collect" to reflect that email and display name are collected when a user voluntarily signs in. Added Apple as an authentication sub-processor; Google now also serves as a login provider. Added nuance about reading device region setting for leaderboard flag prefill.
- 2026-05-04 — Added anonymous gameplay events (song id, difficulty, score, drop-off progress) and paywall funnel events (which surface triggered the paywall and the outcome). Both are linked only to the anonymous Supabase user ID. No third-party analytics SDK was added.
- 2026-04-19 — Initial policy.
3. What we collect and why
The table below lists every piece of data Piano Hero touches. It was audited against the source code on 2026-07-19.
| Type | Where | Purpose | Where it goes | Linked to identity? |
|---|---|---|---|---|
| Anonymous Supabase user ID | App startup, automatic | Track entitlement state across reinstalls | Supabase Auth | Anonymous — no email/PII |
| Provider email and display name (Google or Apple) | When you sign in with Google or Apple — optional; not collected for anonymous players | Create a recoverable account that preserves purchases and progress across reinstalls and device changes | Supabase Auth (identity linked to the existing anonymous ID). Apple may supply a private-relay email; display name is returned only on first sign-in. | Linked to identified user — only when the user chooses to sign in |
| Nickname | When you first set up your leaderboard profile — requires sign-in | Display on the global ranking for other players to see | Supabase user_profiles table | PUBLIC — visible to all players on the global leaderboard. Set once; cannot be changed. |
| Country code (ISO 3166-1 alpha-2) | When you set up your leaderboard profile (optional) — pre-filled from device region setting or chosen manually | Display a flag on the global leaderboard | Supabase user_profiles table | PUBLIC — visible as a flag on the leaderboard. Can be omitted. |
| Leaderboard score (score, accuracy, max combo, per song + difficulty) | When you finish a song while signed in | Global competitive ranking | Supabase leaderboard_entries table | PUBLIC — visible to all players on the global leaderboard |
| RevenueCat subscriber ID | First paywall view | Identify customer for purchase restoration | RevenueCat backend (linked to Google Play purchase token) | Pseudonymous — Play account only |
| Purchase tokens (Weekly / Monthly / Lifetime) | At purchase | Validate entitlement | Google Play Billing → RevenueCat → Supabase entitlements row | Linked to Google Play account, not stored as PII |
| Crash + diagnostics data (stack trace, device model, OS version, app version; fully-masked on-error session replay) | On uncaught exception; sampled performance | Diagnose crashes in production | Sentry piano-hero project | Linked to the pseudonymous install/anonymous ID (via setUser + an auth_uid tag) — not to real identity |
| Calibration audio offset (integer ms) | After 8-tap calibration | Persist offset across app restarts | AsyncStorage (device only) | Local only, never transmitted |
| Pinned songs list | After song pin | Persist pin grant across reinstalls | Supabase pinned_songs row keyed by anonymous user ID | Linked to anonymous Supabase user ID |
| Chart JSON + audio (downloaded songs) | When user selects a remote song | Cache for offline play | Local documentDirectory | Local only |
| Play session events (song id, difficulty, score, accuracy, max combo, pause count, completed vs. abandoned, how far you got, chart full duration, active theme, stable install ID) | When you start and finish (or quit) a song | Decide which songs to keep, which to make a v2 of, and which difficulties are too hard | Supabase play_sessions row keyed by anonymous user ID | Linked to anonymous Supabase user ID. The install ID is a software-generated UUID, not linked to device hardware. |
| App events (paywall shown/dismissed/purchased/restored/errored; song previewed; song downloaded; pack viewed/pinned; difficulty changed; theme changed; with screen context) | When the above actions occur | Understand which screens convert, which content is consumed, and how the app is used | Supabase app_events row keyed by anonymous user ID | Linked to anonymous Supabase user ID |
Plain-English summary: we generate an anonymous ID so your activity survives a reinstall; if you choose to sign in, we link a Google or Apple account to the same ID; we use Google Play and RevenueCat to handle billing; we collect crash reports to fix bugs; we record which songs you play (and how far you get) so we can pick what to make next; and we store your calibration setting on the device. There is no third-party analytics SDK; the gameplay events stay inside our Supabase project.
4. Where data goes (sub-processors)
Piano Hero relies on a small number of third-party services. Each one has its own privacy policy:
- Supabase — database + auth (anonymous and linked to Google/Apple). supabase.com/privacy
- Apple (Sign in with Apple) — optional authentication via Apple ID (iOS only). The email and display name provided by Apple are processed by Apple before reaching Supabase. apple.com/legal/privacy
- Google — handles transactions via Google Play Billing and optionally serves as a login provider (Sign in with Google) on iOS and Android. We never see your card details. policies.google.com/privacy
- RevenueCat — purchase processing and entitlement state. revenuecat.com/privacy
- Sentry — crash reporting and performance diagnostics. sentry.io/privacy
We do not share data with anyone outside this list. We do not sell data to anyone, ever.
5. What we DON'T collect
To be unambiguous, the following are never collected by Piano Hero:
- Your phone number — never collected.
- Your real name or email address when you play anonymously — no mandatory sign-up form, no required PII. Signing in with Google or Apple is optional and required only to join the global leaderboard or make purchases; if you choose to sign in, we receive an email address and display name from the provider (Apple may supply a private-relay email if you select "Hide My Email"). That data lives in Supabase Auth. Profile photos from the provider are not collected or used.
- Your precise location — no GPS, no IP geolocation. For the global leaderboard, we read your device's region/language setting to pre-fill the country field when you create your profile; you can change or skip it manually, and we never access GPS or infer location from your IP address.
- Microphone audio. The app plays music but never records; the microphone permission is stripped from the app at build time.
- Photos, contacts, calendar, or files from your device.
- Third-party analytics SDKs (Mixpanel, Amplitude, PostHog, Segment, Firebase Analytics, etc.). The play-session events described in Section 3 stay inside our own Supabase project and are never forwarded to a fourth party.
- Unmasked screen recording. We record discrete events (started, finished, abandoned at X%); Sentry session replay happens only on an error and is fully masked (no readable text, images, or vectors) — never a readable video of your screen.
- Advertising identifiers. This version of Piano Hero does not show ads and does not collect the advertising ID (the ads SDK is not bundled in the app).
- Persistent hardware device IDs. The install ID referenced in Section 3 is a software-generated UUID created at first launch and stored locally — it is not linked to IMEI, IDFA, Android ID, or any hardware identifier; it is reset when you uninstall the app.
6. Children
Piano Hero is intended for users aged 13 and older. It is not directed to children under 13, and we do not knowingly collect personal information from children under 13. If a leaderboard profile is created (a nickname and optionally a country), that data is publicly visible to all players, and signing in with Google or Apple is required to create one — so we recommend parental supervision for minors. If you believe a child under 13 has used the app, contact us (Section 10) and we will delete the associated data.
7. Data retention
Anonymous IDs, entitlements, and leaderboard data live on Supabase indefinitely so that purchases and achievements survive a reinstall. Uninstalling the app stops new data from being collected, but the records stay unless you ask us to remove them (see Section 8).
For signed-in users (Google or Apple account linked): the provider email and display name are retained as part of the Supabase Auth identity for as long as the account exists. Nickname, country code, and leaderboard scores follow the same indefinite retention. You can request full deletion by emailing us with your registered email address (see Section 8).
Crash reports in Sentry follow Sentry's default retention (90 days). Calibration offset and downloaded chart data live only on your device and are removed when you uninstall.
8. Your rights
You can request a copy of any data linked to your ID, or request that we delete it, by emailing the address in Section 10. We honor verified requests within 30 days.
- Signed-in users (Google or Apple account linked): please include the registered email address so we can locate and delete the account correctly.
- Anonymous users: please include the date and approximate time of your last play session and your country so we can locate the right record.
9. Changes to this policy
If we materially change what we collect or where it goes, we will update the effective date at the top of this document and bump the app's versionName so the change is visible at install time. We commit this document to source control, so the full history is auditable.
10. Contact
For privacy questions, data export, or deletion requests, contact:
Email: carlosga@demerzelstudio.com
We are a small developer team. Please allow up to 30 days for a response.