Privacy Policy

Ingenium — last updated 27 August 2026 · applies to app version 1.1.0 and later, and to this website

1. Introduction & scope

Ingenium is a brain-training and speed-reading app made up of short exercise games across several categories, plus a reading-speed test. This policy explains what information the app and the website handle, where it is stored, what leaves your device, and who receives it.

The short summary of the design: your training data stays on your device. Every exercise result, your reading-speed-test history, your streaks, favorites, levels and settings are written to a local database on your phone and are never uploaded to us or to any account. There are no accounts and no login.

That is not the same as "the app never goes online". Ingenium uses a small number of third-party services to function — Wikipedia and a Firebase-hosted text library for reading content, Firebase App Check to protect that backend from abuse, and Apple's App Store for subscriptions on iOS. Two further services, crash reporting and usage analytics, are optional and switched off until you turn them on. Section 6 lists every one of them, what it sends, why, and what control you have.

This policy covers the Ingenium mobile app as distributed on the Apple App Store and Google Play, and the Ingenium website. It does not cover the third-party services themselves, which have their own privacy policies (Section 17).

2. Who we are / how to contact us

Ingenium is provided by Bohdan Varchenko (the "developer", "we", "us"), an individual developer, who is the data controller for the processing described in this policy.

3. The short version

4. What the app stores on your device

The following is written to your device only: a local SQLite database file (ingenium.sqlite, created by the app in its private documents area) and the operating system's standard app-settings storage (SharedPreferences on Android / user defaults on iOS). The app does not upload any of it.

Exercise and progress data (local SQLite database):

Settings and preferences (local app-settings storage):

Persistence across updates. An app update migrates the local database, so your history and preferences carry forward rather than being wiped.

5. Device backups — please read this

Ingenium does not upload your training data. Your phone's own backup system may still copy it, because the app's local database lives in the app's private storage, which both platforms include in their standard backups:

This means two things you should know:

You control this in your system settings: iOS → Settings → your name → iCloud → Manage Account Storage → Backups; Android → Settings → Google → Backup. To remove the data everywhere, delete the app and remove it from (or delete) the relevant backup.

Note also that Ingenium currently has no in-app "reset my progress" button. On Android you can clear everything through Settings → Apps → Ingenium → Storage → Clear data; on iOS, delete the app.

6. Services the app connects to — overview

ServiceWhenWhat it receivesPurposeLegal basis (GDPR)Control
Firebase App Check (Google, with Apple App Attest / Google Play Integrity)Activated every launch; contacts the attestation provider when it needs a new or refreshed tokenDevice/app attestation, a Firebase installation identifier, IP address, app & OS versionProve the request comes from a genuine copy of the app; protect our backend from botsLegitimate interest (security of our services)Not switchable in-app
Cloud Firestore — reading texts (Google)When you open the Reading Speed TestIP address, App Check token, the language catalog and text id requestedServe and refresh reading-test textsLegitimate interest (providing the feature you opened)Use the app offline; bundled texts are used as fallback
Wikipedia API (Wikimedia Foundation)When you pick a Wikipedia topic for a reading exerciseIP address, a fixed app user-agent, the article title and language editionFetch article text for reading exercisesLegitimate interest (providing the feature you requested)Choose the built-in texts instead
Apple App Store / StoreKit (Apple, iOS only)At launch (entitlement check), and when you open the paywall or buyYour Apple ID purchase context, handled entirely by AppleSell and validate the optional subscriptionLegitimate interest (checking entitlement at launch); performance of a contract (purchases and active subscriptions)The entitlement check is automatic; purchasing is optional
Cloud Firestore — feature suggestions (Google)Only when you tap send in Suggest a featureYour idea text, optional title/category/importance/email, app version, platform, language, timestampReceive and act on your suggestionConsent (you choose to send it)Don't send; ask us to delete
Firebase Crashlytics (Google)Only after you opt in, on a crashStack trace, device/OS/app state, a Crashlytics installation idDiagnose and fix crashesConsentSettings → Privacy
Firebase Analytics (Google)Only after you opt inPseudonymous usage events, app-instance id, device model, OS, app version, approximate region, content languageUnderstand which features are usedConsentSettings → Privacy

Display fonts are bundled inside the app, so no font is downloaded and no request reaches fonts.gstatic.com. There is no push-notification service: all reminders are generated locally on your device (no Firebase Cloud Messaging, no APNs token).

7. Each service in detail

7.1 Firebase App Check — always on

Google's Firebase App Check library is activated every time the app starts. When it needs a token — because it has none yet, or the cached one is expiring — it asks the platform's attestation service (Apple App Attest on iOS, Google Play Integrity on Android) to confirm that this is a genuine, unmodified copy of Ingenium running on a genuine device, and exchanges that attestation for a short-lived token from Google. The token is attached to the app's requests to our Firebase backend. While a cached token is still valid it is reused, so attestation does not necessarily happen on every single launch.

This runs before and independently of the crash/analytics consent prompt, and cannot be turned off in the app, because it is what keeps bots from flooding our database with junk. It exists to protect the service, not to identify you.

What is involved: the attestation produced by Apple/Google on your device, an installation identifier created by the Firebase libraries, your IP address, and your app and OS version. It does not include your name, your training data, or anything you have typed. The attestation itself is processed by Apple/Google under their own privacy policies.

Retention. We use Google's default token lifetime of one hour (it is configurable, up to seven days). The library caches the token on your device for that period and refreshes it automatically. Google states that App Check does not retain the attestation material itself, and that ordinary tokens are not kept by Firebase services once a request has been processed.

Google performs this processing on our behalf, as our processor — so it is our responsibility, and we describe it here. But the raw attestation and the tokens are handled inside Google's and Apple's systems and we cannot inspect them: all our backend ever learns is that a request came from a genuine app instance.

7.2 Reading Speed Test texts — Cloud Firestore

The Reading Speed Test uses a rotating library of texts. When you open the test, the app requests the catalog of texts for your content language from our Cloud Firestore database, then the body of the specific text you are given. The catalog is cached in memory for 24 hours; if the request fails or times out, the app falls back to the texts bundled inside the app, so the feature also works offline.

Google receives your IP address, the App Check token, and which language catalog and which text id was requested. Nothing about you, your results, or your history is sent, and these reads are one-way: the app never writes to this part of the database.

7.3 Reading content — Wikipedia (Wikimedia Foundation)

If you choose a Wikipedia topic as the source for a reading exercise, the app makes one-way GET requests to the public Wikipedia API to download article text. It sends only what any web request includes — your device's IP address, a fixed app identifier in the request ("Ingenium/1.0 (reading exercise)"), and the title and language edition of the article. It does not send your name, progress, or an account identifier. As with any web request, the article you requested and your IP address are visible to Wikimedia.

You can also tap the attribution links on a Wikipedia-sourced exercise; these open the Wikipedia article page and the Creative Commons license page in your device's external browser, which then handles the request, including your IP address and any browser cookies.

7.4 Subscriptions — Apple App Store (iOS only)

On iOS, Ingenium offers an optional monthly or yearly subscription, each with a 7-day free trial for eligible accounts. The purchase is made entirely through Apple's In-App Purchase / StoreKit system: Apple takes the payment and manages the subscription. The app never sees or asks for your payment details, your Apple ID, or your name, and we never receive them.

What the app does is ask StoreKit on your device — once at launch and again when you open the paywall — whether you currently hold a valid entitlement, and cache that yes/no answer locally. This check is automatic on iOS and cannot be switched off in the app; buying a subscription is entirely optional. Apple processes your purchase as an independent controller under Apple's privacy policy, and provides us only with the aggregated sales and subscriber reports available in App Store Connect. The Android build is free and never contacts a billing service.

The subscription screen also carries three links — Apple's standard subscription terms, this privacy policy, and your Apple subscription-management page. The first and third open apple.com in your device's external browser, which then handles the request under Apple's privacy policy.

7.5 Feature suggestions — Cloud Firestore

If you open Suggest a feature (Settings) and tap send, the app writes your submission to our Cloud Firestore database, where we can read it. What is sent:

It does not include your name, your training progress, or your session history, and nothing is sent unless you deliberately tap send. Writes are gated by Firebase App Check (Section 7.1) to block automated spam, and the database rules forbid anyone but us from reading submissions back.

Because we can read these submissions, we are a recipient of this data — Google (Firebase) acts as our processor and hosts it. Please do not include personal details you would rather not share; the email field is optional and exists only so we can reply.

Retention. The criterion is simple: a submission is kept only while the idea is still open. Once it has been implemented, rejected, or answered, it is deleted. We review the collection for closed and expired submissions at least every six months, and in no case do we keep a submission longer than 24 months from the date you sent it.

Deletion on request: email bohdan.varchenko.dev@gmail.com and we will delete your submission. Since there is no account, we need enough to locate it — the approximate date you sent it and either the email address you supplied or a short quote from the text.

7.6 Crash reporting — Firebase Crashlytics (opt-in)

Crash reporting is off by default and strictly opt-in. On first run the app shows a single prompt covering both crash reporting and usage analytics: choosing Allow turns both on, choosing Not now leaves both off. After that they are independent — Settings → Privacy has a separate toggle for each, so you can enable or disable either one on its own at any time.

When — and only when — crash reporting is enabled, a crash or fatal error sends the following to Google:

Crash reports do not include your name, email, your training progress, your session history, or the texts you read. Because of the installation identifier, we describe them as pseudonymous, not anonymous.

If you disable crash reporting, collection stops and any reports captured but not yet uploaded are deleted from your device. Crash data already sent is retained by Google under Firebase's own terms; Google documents a retention period of 90 days for Crashlytics crash data.

7.7 Usage analytics — Firebase Analytics (opt-in)

Usage analytics is also off by default and strictly opt-in. It is covered by the same single first-run prompt as crash reporting (Section 7.6), and has its own independent Settings → Privacy toggle afterwards. When — and only when — you enable it, the app sends product-usage events to Google:

Google's library additionally records its own standard automatic events and parameters, such as first open, session start, app update, screen views, and store purchase events (product identifier, price, currency).

Our own events are sent as counts, feature identifiers, difficulty ratings and durations. They never contain free text, and never your scores, results, or the content you read.

Firebase Analytics also attaches the standard data its SDK collects: an app-instance identifier (generated by the library), the app version, the device model and OS version, an approximate region derived from your IP address at collection time, and your content language.

This is pseudonymous personal data, not anonymous data. The app-instance identifier is an online identifier, and under the GDPR such identifiers can remain personal data even without a name attached. We do not link it to any Ingenium account, because there is none. Ad personalization is disabled and no advertising identifier (IDFA/AAID) or Android SSAID is collected — this is product analytics only, never advertising and never cross-app tracking.

If you disable analytics, collection stops and the app resets the analytics state — dropping the app-instance identifier and any locally cached events.

Retention. We have not changed Google's defaults for our Analytics property, and three different clocks apply — they are worth separating, because they do not behave the same way:

8. Device permissions

The app does not request location, camera, microphone, photos or contacts permissions, and does not use exact-alarm scheduling on Android.

9. What the app does not do

10. Our website

The Ingenium website (ingenium-brain-training.web.app), including this policy page and the support pages, is served by Firebase Hosting (Google).

11. Contacting support

If you email bohdan.varchenko.dev@gmail.com, your email address, the contents of your message and any attachments reach a Gmail mailbox operated by the developer, with Google as the email provider. We use it only to answer you and keep correspondence no longer than needed for that (normally up to 24 months). Legal basis: legitimate interest in responding to your request, or the steps needed to handle a rights request under Section 13.

12. Data retention

DataWhereHow long
Training results, settings, remindersYour device (and possibly your own OS backup — Section 5)Until you delete the app or clear its data; you control it
Feature suggestion (text, optional email, app metadata)Our Firebase projectUntil the idea is closed; reviewed at least every 6 months; 24 months maximum, or sooner if you ask
Crash reports (opt-in)Google / Firebase Crashlytics90 days, per Google's documented Crashlytics retention
Analytics — individual events (opt-in)Google / Firebase Analytics2 months from each event
Analytics — app-instance identifier and user properties (opt-in)Google / Firebase Analytics2 months, but Google's "reset on new activity" default restarts it with every event, so it persists while the device keeps playing; the identifier is reset on your device when you switch analytics off
Analytics — aggregated reportsGoogle / Firebase AnalyticsNot governed by the retention setting; no identifier, not traceable to a device
App Check tokens / attestationYour device; Google and AppleToken cached ~1 hour, then refreshed; Google states the attestation material is not retained and tokens are not kept after a request is processed — we cannot inspect either
Website request logsGoogle / Firebase HostingHeld and deleted by Google as hosting provider; we never access them
Support emailGmail mailboxNormally up to 24 months
Reading-text and Wikipedia requestsNot stored by usNot applicable — we keep no record of individual requests

13. Your rights

Under the EU/UK GDPR you have the right to access your data, to rectification, to erasure, to restriction of processing, to portability, to object to processing based on legitimate interests, and to withdraw consent at any time without affecting the lawfulness of processing before withdrawal. Under the California CCPA/CPRA you have the rights to know, delete, correct, and opt out of sale/sharing (we do neither), and the right not to be discriminated against for exercising them.

How to exercise them in practice:

You also have the right to lodge a complaint with your local data protection supervisory authority if you believe your data has been handled unlawfully.

14. Legal bases (GDPR), summarized

15. Children's privacy

Ingenium contains no objectionable content and is rated for general audiences, but it is designed for adults and older teenagers and is not directed to children under 13. We do not knowingly collect personal information from children. The app requires no account and, by default, sends no analytics, no crash reports and no content you have written.

The optional features that do send data — crash reporting, usage analytics, and Suggest a feature — all require an affirmative choice. Where the person using the app is below the age of digital consent in their country (13 to 16 depending on the member state), that choice should be made by a parent or guardian. If you believe a child has submitted personal information through the app, contact bohdan.varchenko.dev@gmail.com and we will delete it.

16. International transfers

Ingenium does not transmit your training data anywhere. Note, though, that your device's own backup can move it to your Apple or Google account, possibly in another country, as explained in Section 5 — that transfer is performed by the operating system under your control and under Apple's or Google's terms, not by us.

The services in Section 6 do involve international transfer. Google (Firebase) — App Check, Firestore, Crashlytics, Analytics and Hosting — and Apple may process data on servers in the United States and other countries; Wikimedia likewise. These transfers rely on the providers' own transfer mechanisms, including the EU Standard Contractual Clauses and the EU-U.S. Data Privacy Framework where applicable, as described in their privacy documentation (Section 17).

17. Third parties and their privacy policies

We do not sell your personal information, and we do not share it for advertising or cross-context behavioural advertising.

The providers listed above receive data only in the circumstances described in this policy, and process it according to their respective privacy policies. Not all of them act for us in the same way: Google hosts and processes the data in our Firebase project on our behalf, while support correspondence is processed separately through Gmail according to Google's applicable terms. Apple, the Wikimedia Foundation and the platform attestation services are independent controllers for what they receive, and may also process it for their own security, legal-compliance and service-operation purposes under their own terms.

18. Reading content attribution

Some reading passages come from Wikipedia and are used under the Creative Commons Attribution-ShareAlike 4.0 (CC BY-SA 4.0) license, with attribution to the article and its authors. Each Wikipedia-sourced exercise shows a link to the source article and to the license text.

19. Changes to this policy

We may update this policy as the app evolves. When we make a material change we will update the "Last updated" date above and publish the new version at the policy's canonical URL: https://ingenium-brain-training.web.app/en/privacy (localized versions are linked from that page).

For a material change we will make the update visible in the app or its store listing, not only on this page. If a change introduces a new purpose that relies on your consent, we will ask for that consent before the new processing begins — an opt-in you gave for one purpose never carries over to a new one, and declining leaves everything else working as before. Other changes take effect when they are published.