Version 2 · 11 October 2026

Privacy policy

Nilvo collects only what is needed to play, save your progress and compete with the people you choose. This policy explains which data we process, why, on which legal basis, who is involved, how long we keep it and how to exercise your rights. It describes what the app, the website and the server do today, not what they might do some day. The Spanish version is the reference text; this translation is provided for convenience.

1. Who is the controller

The data controller is Cristóbal Garrido Valero, a natural person, a self-employed professional who develops and publishes Nilvo as an independent developer.

There is no legal obligation to appoint a data protection officer (Article 37 GDPR; Article 34 of the Spanish LOPDGDD) and none has been appointed. For any question about this policy, write to the address above.

2. In two minutes

3. Playing without an account

Without an account you can play the tutorial, the included Training levels and Time Trial, with no registration. The saved game, records, favourites, the device streak, the settings and the full-game status are stored only in the app's or the browser's storage. We do not send them to any server.

The app does make a few requests to the server without an account: it downloads the store catalogue and the public configuration. Those requests carry no identifier of yours. Like any internet connection, they expose your device's IP address to the server, which records it masked in its technical logs (section 12).

The daily reminders ("today's challenge is waiting") are scheduled by the app on the device itself, with the system's notification permission; they never pass through our server and send nothing to anybody.

4. Creating an account and signing in

An account is only needed for the profile, groups and leagues, friends and challenges, the cosmetics store and progress sync. You can create it in three ways:

From the identifier the provider gives us we compute a digest (SHA-256) which becomes your account's technical identifier in Nilvo. The provider's original identifier is not stored in any table. Google and Apple process your Google or Apple account under their own privacy policies; we receive and check the sign-in token and, for Apple, keep the refresh token described above.

When you finish creating the account you choose a username (3 to 16 characters; letters, digits and underscore). It is visible to other players and cannot be changed. An automatic filter rejects offensive names; if you think it got it wrong, write to us.

The app keeps your session open with a token of its own, stored encrypted on the device, so it does not ask for your e-mail or account every time. The server keeps only a digest of that token with its creation, last-use and expiry dates.

5. What we store in your account

6. What other players see

Nilvo is a social game only when you decide so. What others can see about you is always the same: your username, your avatar, your level and your results.

There is no chat, no free messaging and no way to publish text beyond the username. Nobody can see your e-mail, your solo progress or your purchases.

7. With an account, your progress goes to the server

While signed in, the app uploads your saved game so you can recover it on another device and so the campaign credits and experience can be granted. When you play the daily puzzle on the device, the app tells the server which day you played it so the streak counts in your account. The server only accepts today, yesterday and tomorrow (so a time zone counts without anybody filling in past days).

8. Daily challenges, leagues and challenges between players

Each group receives its own daily puzzle, derived on the server with a secret key. When you play a ranked challenge, the app sends your result (time, moves, mistakes) and the final placement of the board; the server checks that the board is solved, computes the score and stores one attempt per person and day. Challenges between players work the same way: the server generates the same boards for both players and computes both scores. These data form the tables described in section 6.

9. Notifications

Push notifications are optional. If you accept them, the app sends to your account the device's notification identifier, its platform and the app language. We only send notices that answer something another player did: a friend request or acceptance, a challenge to play or settled, and the end of a season. There are no marketing notices.

Delivery is done by Apple Push Notification service (iOS) and Firebase Cloud Messaging (Android). The text of the notice, which may include another player's username, passes through those services. If you refuse notifications or the registration fails, we keep a single diagnostic row with the platform and the reason ("denied", "unavailable" or "failed"), without any notification identifier, so that a silent failure does not go unnoticed. When you sign out, the app removes that device's identifier from your account; if Apple or Google tell us an identifier no longer exists, we delete it.

10. Purchases, credits and access codes

Credit packs are bought on the App Store or Google Play, which charge you and issue the receipt; the full game is paid with credits from the account. We never see your card or payment details. To credit what you bought, the app sends the server the proof of purchase the store provides (on iOS the signed StoreKit transaction, on Android the Google Play purchase token) and the server verifies it with Apple or Google. Of each verified purchase we keep the platform, the transaction identifier, the product and whether it was a real or a test purchase, so the same purchase is never credited twice. App Store and Google Play gift codes are redeemed by the store: we only receive the purchase they create, like any other.

The credits, cosmetics and boosts you earn or buy are recorded in a ledger of your account (movement, reason, date) and in your inventory.

Nilvo access codes, which were redeemed on the former web version until 30 October 2026 (for instance the ones that unlock the full game, or test codes), are checked on the server. The code table holds no personal data: it stores a SHA-256 digest of each code, what it grants, between which dates it is valid and how many times it has been used. Your redemption is recorded in your ledger. To prevent brute-force guessing we count the wrong codes an account tries each day (after ten, the server stops checking until the next day).

11. Reports and blocks

You can report another player for their name, their avatar, harassment, cheating or another reason, with an optional note of up to 280 characters, and you can block them. A report stores your identifier, the reported player's identifier, the reason, the note and the day; a person reads it later and decides. The reported player does not learn who reported them. A block stores both identifiers and the other person's username, undoes the friendship and cuts challenges, requests and profile in both directions.

12. Security and diagnostics

The service runs on Microsoft Azure, North Europe region (Dublin, Ireland): Azure Functions (the API), Table Storage (the data), Key Vault (the keys) and Application Insights with Log Analytics (errors and technical metrics). The technical logs record which request failed, when and with which code; they may include an account's technical identifier when the error carries it. IP addresses are masked on arrival. These logs are kept for 30 days and then deleted automatically.

All communications are encrypted (HTTPS). The server accesses the data with managed identities, without passwords or shared keys. Session tokens and provider identifiers are stored as cryptographic digests. We keep no backups of our own outside Azure.

13. The website (nilvo.app): cookies and local storage

The website uses no cookies and stores nothing in your browser: there is no game on it, only the guide and links to the stores. To know how many people visit it and which pages are read we use Cloudflare Web Analytics, by Cloudflare, Inc.: it counts visits in aggregate (page, country, browser, referring site) without cookies, without local storage and without identifying anyone, and does not combine that data with anything else. It is the only external resource the website loads; the content security policy prevents any other.

Until 30 October 2026 nilvo.app also served a web version of the game, which saved the game in the browser's local storage (keys capas-prototype-save-v1 and capas-wallet-v1). It no longer exists; if you used it, that data stays only in your browser, we cannot read it and you can clear it from its settings. Your account and your cloud progress remain intact in the app.

The portal pages are served by Azure Static Web Apps, a Microsoft service that records requests (IP address, page, date, browser) in its technical logs, with the guarantees of section 15.

14. Why we use the data and on which legal basis

PurposeDataLegal basis
Providing the game with an account: identifying you, keeping your profile and progress and restoring what you boughtTechnical identifier, username, avatar, progress, verified purchases, sessionPerformance of the contract (Art. 6(1)(b) GDPR)
Groups, leagues, standings, friends, challenges and public profileUsername, avatar, level, results, times, trophiesPerformance of the contract (Art. 6(1)(b))
Sending you notices about challenges, friendships and leaguesNotification identifier, platform, languageThe consent you give by allowing notifications on your device (Art. 6(1)(a)); you can withdraw it in the system settings or by signing out
Purchases, credits and codes: granting what you bought once and preventing fraudProof of purchase, transaction identifier, credit movements, redemptions, wrong codesPerformance of the contract (Art. 6(1)(b)) and legitimate interest in preventing fraud and duplicates (Art. 6(1)(f))
Moderation: name filter, reports and blocksUsername, reason, note, identifiersLegitimate interest in protecting the other players and meeting the stores' rules (Art. 6(1)(f))
Security, diagnostics and abuse preventionTechnical logs, sessions, attempt counters, verification of resultsLegitimate interest in the security of the service (Art. 6(1)(f) and Recital 49 GDPR)
Answering your questions and your rights requestsYour e-mail and the content of your messageLegitimate interest in assisting you (Art. 6(1)(f)) and legal obligation to answer your rights requests (Art. 6(1)(c))

We take no automated decisions with legal effects on you and build no profiles. Two automatic checks exist and you should know about them: the filter that rejects offensive usernames and the verification that a board sent to a ranking is really solved (a submission that does not close it is rejected). In both cases you can write to us if you believe the system got it wrong.

15. Who processes data with us

Nilvo does not sell data, shows no advertising and builds no advertising profiles. These providers take part because the service does not work without them:

ProviderWhat it doesWhereRole and safeguards
Microsoft (Azure)Hosts the API, the account data, the keys, the technical logs and the web portalNorth Europe region (Dublin, Ireland); the portal is distributed from Azure's global networkProcessor, under the Microsoft Products and Services Data Protection Addendum (DPA)
Microsoft Entra External IDSign-in with e-mail and code; keeps your e-mail in Nilvo's own directoryEuropean UnionProcessor (same Microsoft DPA)
GoogleSign in with Google; Firebase Cloud Messaging for Android notices (Nilvo's own project); Google Play for purchasesGoogle LLC (United States), Google Ireland Ltd and Google Commerce Ltd (Ireland)For sign-in, Google is an independent controller of your Google account. For notices, processor (Google Cloud Data Processing Addendum). For purchases, seller of the store
AppleSign in with Apple; Apple Push Notification service for iOS notices; App Store for purchasesApple Inc. (United States) and Apple Distribution International Ltd (Cork, Ireland)Apple is the controller of your Apple ID and of the store; notices are delivered under Apple's developer terms and its privacy policy

Other players also see what section 6 describes. We disclose data to nobody else, unless a law or an authority obliges us.

16. International transfers

Your account data are stored and processed in the European Union. The US providers (Google LLC and Apple Inc.) may process data outside the European Economic Area when providing their identity and notification services; Microsoft Corporation may do so to a limited extent as part of operating Azure. Those transfers rely on the EU–US Data Privacy Framework (Google LLC and Microsoft Corporation are certified) and on the standard contractual clauses approved by the European Commission, which Apple uses and which Microsoft and Google include in their terms. You can ask us for more detail at the contact address.

17. How long we keep the data

DataPeriod
Account data (profile, progress, inventory, credits, trophies, results, friends, reports and blocks)While the account exists. When you request deletion, a scheduled process that runs every ten minutes removes them: normally within an hour and never later than 30 days.
App session180 days from last use, renewed while you use it. Deleted when you sign out and, if expired, on the first attempt to use it. The access token lasts one hour.
Notification identifierUntil you sign out on that device, delete the account, or Apple or Google tell us it no longer exists.
League results and standingsThey live with the league and the group: they disappear when you delete your account or when the administrator deletes the group.
Removal from a leagueIf the administrator removes you, the league keeps for 30 days that you cannot rejoin with its code. It is deleted earlier if the administrator lifts it, if you delete your account or if the group is deleted.
Challenges between playersWhile either player keeps them in their list. When you delete your account, your side is replaced by a "deleted player" identifier and only the result remains.
Purchase records (platform, transaction, product)While the account exists. Deleting it removes everything that links the purchase to you; of the store's transaction identifier only a mark that it was already credited remains, with no data about your account, so the same purchase cannot be credited again. Apple and Google keep their own sales records under their policies.
Reward codesThe code keeps existing (it may already have been handed out), but when the account is deleted it no longer says who won or used it.
Apple refresh tokenWhile the account exists. When it is deleted we hand it back to Apple to revoke your sign-in, and it is erased.
E-mail in the sign-in directory (Microsoft Entra External ID)Until you ask us to delete it. Deleting the account in the app erases the game data but not the entry in that directory: to delete your e-mail as well, write to us from that address and we remove it within one month.
Technical logs (Application Insights and Log Analytics)30 days.
Support and rights-request e-mailsUntil the query is resolved and at most twelve months afterwards.

18. Deleting your account

It is done from the app: tap the person icon ("Your account") on the home screen, scroll to the end of your profile and tap Delete account; you must confirm a second time. The session closes by itself and the app first removes that device's notification identifier.

Deletion is carried out by a scheduled process every ten minutes. It removes your profile and the reservation of your name, your progress, your credits, inventory, trophies and movements, your purchase records, your sessions and devices, your membership of groups (the groups you administer are deleted whole, with their leagues and standings), your results and standings in every season, your friendships, blocks and reports in both directions. If you signed in with Apple, we revoke your Sign in with Apple before erasing the data. A challenge already played still exists in the other person's list, without your name or avatar: only a "deleted player" identifier and the result. Technical logs expire after 30 days.

Progress stored only on the device is not touched by this process: it is removed by uninstalling Nilvo or clearing the app's or the browser's data. If you cannot access the app, ask by e-mail from the address you created the account with; we will check that you are the holder before deleting it. More detail on the account deletion page (in Spanish).

19. Minors

To create an account you must be at least 16 years old. Nilvo does not ask for a date of birth, so we do not verify age: we rely on the statement you make when creating the account.

Without an account the whole game can be enjoyed and nothing leaves the device, so a minor can play without registering. If you are a parent or guardian and know that somebody under that age has created an account, write to us and we will delete it.

20. Your rights

You can ask us for access to your data, their rectification or erasure, the restriction of their processing, their portability, and you can object to processing based on legitimate interest. You can also withdraw the notification consent at any time, without affecting what came before.

21. Changes to this policy

When what Nilvo does with data changes, we will update this page, change the date above and, if the change matters to you, announce it inside the app before it applies. The version in force is always the one published at nilvo.app/legal/privacidad.html (Spanish) and this English translation.

22. Contact

cristobalgarrido@retroteca.es

Other pages: Legal notice · Terms of use and purchase · Delete your account · Support