Effective date: 5 July 2026
This policy explains what data the Clearance mobile game collects, why, and how to delete it. It covers two separate data flows: anonymous gameplay analytics (always running unless you opt out) and premium-purchase records (only created if you buy the optional premium upgrade).
The data controller is MB Studio 36, a Lithuanian small partnership (mažoji bendrija). Contact: privacy@studio36.lt.
This policy covers data collected by the Clearance mobile game and processed at https://clearance.studio36.lt.
The game sends a small set of gameplay events to our analytics endpoint. Each event is one JSON object that always contains a unique event id, a type, an ISO-8601 timestamp, and an installId (see below). Per-type fields:
SESSION_START — total sessions so far, last session timestamp.SESSION_END — duration in seconds, levels started and completed in this session.LEVEL_START — level number, grid size, elapsed seconds, progress percent, camera zoom and grid position.LEVEL_COMPLETE — level number, time taken, errors made, plus your previous best time and error count.SET_COMPLETE — which curated set you finished, how many levels it contained, the summed errors and seconds across your best run of each level in the set.MISTAKE — level, the cell you marked incorrectly (column and row), zoom, elapsed seconds.UNDO_TAP — level, current mistake count, and a flag indicating whether you currently have the premium upgrade, when the undo button was tapped.UNDO_PERFORMED — level and the grid cell (column and row) whose mark was reverted, the kind of mark (correct or incorrect), and how many marks were available to undo at that moment. Emitted only when an undo actually reverts a mark.PALETTE_CHANGED — which CRT colour palette you selected.ZOOM_SAMPLE — periodic camera zoom and grid position (rate-limited to keep the data small).PAYWALL_SHOWN, PURCHASE_INITIATED, PURCHASE_COMPLETED, PURCHASE_FAILED, RESTORE_TAPPED, RESTORE_COMPLETED — paywall and purchase-flow events. These carry no purchase token, no card data, and no email — only the source that triggered the paywall and (for completed purchases) the price and currency from the store.ANALYTICS_OPT_OUT — a breadcrumb sent just before the analytics opt-out flag flips off. After this event, the game stops sending anything from your install unless you opt back in.ANALYTICS_OPT_IN — sent when you re-enable analytics after having previously opted out.CRASH — sent on the next launch after the game crashed. Carries the crash kind (native signal vs. Java exception), the signal number or exception class name, the app version and CPU architecture, a UTC timestamp of the crash, and the tail of the in-process log buffer (the last ~64 lines of the same logger output already retained in log.txt). No memory dumps, no stack frames from your code's data, no on-disk file contents.PHOTO_PICKER_OPENED — a premium player opened the system photo picker to create a personal level. No photo data is read at this point.PHOTO_CONVERTED — the chosen photo was converted to ASCII art on your device: the width and height of the resulting grid (in cells) and how many milliseconds the conversion took. The source photo is not sent; only these aggregate measurements are.PERSONAL_LEVEL_SAVED — a personal level was saved on your device. We record the level slot identifier (e.g. personal:3) so we can tell how many personal levels players keep. The ASCII art itself stays on your device.GLOBAL_OVERRIDE_TOGGLED — a developer-mode user flipped the Developer Settings → OVERRIDES toggle on or off. Carries only the new toggle state.DEVELOPER_MODE_TOGGLED — the developer-mode kill switch was flipped on (via a 7-tap unlock on the install-ID row in Settings) or off (via the Developer Settings disable button). Carries the new state and which path triggered the flip.HIT_SLOP_CHANGED — a developer changed the global hit-slop pad on Developer Settings. Carries the new horizontal and vertical pad sizes (in pixels) and whether the slop is enabled. Used to inform the eventual baked-in default.STARTUP_ERROR — the game hit a blocking error during start-up or while loading a level (e.g. a missing asset file or a graphics driver problem). Carries a short label naming the subsystem that failed (e.g. shader_compile, font_load), the underlying error message produced by that subsystem (truncated to 200 characters), the app version, and — when the failure is tied to a specific level — that level's identifier. The error message text is generated by the game itself; it does not include filenames or paths from outside the game's own bundled assets and the game's private save directory.Clearance offers a single one-time premium upgrade. Buying it is optional; the free game continues to work without it. If you buy the upgrade, the following extra data is created:
The installId used for analytics and the accountId used for purchases are deliberately kept in separate tables that are not linked to each other, so that your gameplay events cannot be tied to your purchase records server-side.
Premium is tied to your purchase, not to a login. We do not run a user-account system: there is no email, no password, no display name. When you reinstall the game, the platform's purchase-restore flow returns the same purchase token; our server hashes it, finds the matching accountId, and re-grants the entitlement automatically. Because the token is bound to your platform account (Google on Android, Apple on iOS later), premium does not currently transfer between Android and iOS — that limitation is documented and may change in a future update.
The installId is a randomly generated identifier (a UUID v4) created on your device the first time the game launches. It exists only on your device and on our server — it is not linked to any account, email address, or device identifier. If you reinstall the game, a new installId is generated and we have no way to connect it to events from the previous install.
Analytics events are processed on the basis of our legitimate interests under Article 6(1)(f) of the GDPR — specifically, understanding how players progress through the game, where they get stuck, and which sessions are too short or too long, so we can improve level design and fix usability problems. The data is non-identifying, retained for 90 days, not shared with any third party, and processed only to improve the game itself.
Purchase data is processed on the basis of performance of a contract under Article 6(1)(b) — we need the hashed token and accountId to deliver the premium product you paid for, including across reinstalls. RevenueCat is engaged as our processor under Article 28 to receive and verify purchase events from Google Play.
Analytics events and the raw request logs we keep for replay are deleted automatically 90 days after they arrive.
Purchase data (hashed token, accountId, entitlement record, encrypted personal-levels blob) is kept for as long as you remain a premium customer, so that reinstalls can restore your premium without re-purchase. If a refund or expiry revokes your entitlement, we mark the record revoked but keep the hashed token to prevent the same purchase being credited twice. You can request full deletion at any time — see "How to delete your data" below.
For analytics, we do not share, sell, rent, or transfer your data to any third party. The analytics endpoint runs on a server operated by MB Studio 36; the database sits on a private network reachable only by our ingest service.
For purchases, two third parties are unavoidable:
Beyond these two, we do not share, sell, rent, or transfer your data.
Under the GDPR you have the right to:
installId or accountId (right of access);installId and/or accountId (right to erasure);Refunds for the premium upgrade go through Google Play and are not within our control. Use Google Play's "Order history" page to request a refund.
Send an email to privacy@studio36.lt. Tell us which deletion you want:
installId (shown in the game's settings screen). We will delete every event tied to that installId from our database, strip it from the raw request logs, and reply to confirm.GPA.xxxx-xxxx-xxxx-xxxxx). We will look up the matching accountId, delete the hashed token, the entitlement record, and any cloud-synced personal-levels blob, and reply to confirm. After this, the next time you launch the game it will appear as a free install.You do not need to give a reason.
All requests between the game and our endpoint are encrypted with HTTPS (TLS), using certificates issued by Let's Encrypt. The database is on a private network that is not reachable from the public internet. Purchase tokens are stored only as SHA-256 hashes — the raw tokens never reach our database. The cloud-synced personal-levels blob is encrypted on your device before it is uploaded; our server holds only the ciphertext. We do not store passwords because we do not have user accounts.
The Clearance game is rated for ages 14 and above and is not directed at children under that age. We do not knowingly collect information from children under 14. If you believe a child under 14 has data with us, write to privacy@studio36.lt and we will delete it.
If we change what we collect, why, or how long we keep it, we will update this page and revise the effective date above. The current version is always at https://clearance.studio36.lt/privacy-policy.
For any privacy-related question, write to privacy@studio36.lt.