Privacy Policy — Focus4Life

Effective date: 10 June 2026 · Last updated: 23 June 2026
Data controller: ZinZinTech (KVK 42059149), Netherlands · phan.business.nl@gmail.com

The short version: Focus4Life collects no personal data. There are no accounts, no analytics, no crash reporting, no ads and no tracking SDKs. Everything you do in the app stays on your device. The only time the app contacts a server we operate is when you actively redeem a discount code on Android (see section 3); its other network activity is downloading garden artwork (see section 2). Neither carries data that identifies you.

1. Data stored on your device

Everything you create or configure in Focus4Life is stored only in the app's local storage on your device (a local SQLite database, preferences and app files). This includes:

  • tasks, projects and recurring-task settings,
  • pomodoro/focus session history and statistics,
  • app settings and timer presets,
  • Zen Garden and puzzle progress,
  • photos you choose for garden mosaics,
  • focus-interruption logs (see section 4).

The app never transmits any of this to us or to anyone else. We never see it — none of it is ever sent off your device. (The one feature that does contact a server of ours, redeeming a discount code on Android, is described in section 3 and sends none of the data listed above.)

2. Network activity: garden artwork

Focus4Life makes outbound network requests for exactly one purpose: fetching Zen Garden artwork. When you open the Garden screen, the app automatically — at most once every 7 days — downloads a small artwork catalog from GitHub (raw.githubusercontent.com/ZinZinTech/focus4life-garden-assets) and then the images it lists, which are served from the same place by default (catalog entries may point to another content-delivery host operated for this catalog; every image is verified against a checksum before use).

These requests carry no personal data, no account information and no device identifiers. As with any web request, the server (GitHub) sees your device's IP address — see GitHub's privacy statement. The fetch only happens when you open the Garden screen, and if you are offline or the download fails the app simply keeps working with its bundled artwork. The only other time the app makes a network request is when you actively redeem a discount code on Android — see section 3.

3. Redeeming a discount code

Focus4Life sometimes offers Pro at a promotional price through a discount code. How a code is redeemed — and whether the app contacts us at all — depends entirely on your platform.

On iOS and macOS, codes are Apple Offer Codes. When you choose to redeem one, the app simply opens Apple's own redemption sheet (iOS) or the App Store redeem page (macOS); Apple handles the entire exchange against your Apple account. We operate no server in this path and receive no data from it — the redemption is between you and Apple, under Apple's privacy policy. Firebase and our backend are never even started on Apple platforms.

On Android only, and only when you actively type a code and tap redeem, the app contacts a server we operate. On that first redeem it lazily starts Firebase and reaches our Firebase Cloud Functions backend (Google Cloud, region asia-southeast1) to:

  • validate the code — it sends the code you typed so the backend can check that it is real, active and not used up, and return the discount percentage. This step writes nothing, and the code value is deliberately never logged; and
  • record the purchase — after you complete the discounted purchase through Google Play, the app sends the code together with the Google Play purchaseToken and orderId so the backend can verify the purchase with Google and mark the code used.

Each request is protected by Firebase App Check (Play Integrity), which sends Google a one-time attestation that the request comes from a genuine, untampered install of the app. This attestation is an app- and device-integrity signal, not an identifier of you; the App Check app identifier is the same for every install, so it cannot single you out. As with any web request, Google Cloud also processes your device's IP address transiently to route the request, and a Firebase installation identifier may be sent — see Google's Firebase privacy and security terms.

We keep one small redemption-ledger record — the Play orderId and purchaseToken, the (non-identifying) App Check app identifier, and the time the code was used — for a single purpose: so that the same code cannot be redeemed twice. The ledger is keyed on the Play order, not on any account or identity: no account or profile is ever created, the record is not linked to you, and it is never used for advertising or analytics. There is no Firebase Analytics, Crashlytics or Auth in the app, and the app never reads our database directly.

If you never redeem a code, or you are on iOS, macOS, Windows, Linux or the web, the app makes none of these requests and never starts Firebase at all. Your Pro unlock itself is stored only on your device.

4. Focus Lock — Usage Access (Android) & Screen Time (iOS)

Focus Lock can help you stay off distracting apps during a focus session. Its "block distractions" feature is off by default and requires a double opt-in from you: you must turn the switch on in the app's settings, and you must grant Android's Usage Access permission (PACKAGE_USAGE_STATS) on the system settings screen — the app can never acquire it silently.

When enabled, Focus4Life uses Usage Access only to detect which app is in the foreground while a focus session is actively running, so it can remind you to return to your task and record the interruption in your local statistics. Interruption events are stored only on your device (briefly in a private app file, then in the app's local database), are never transmitted anywhere, and are used for no other purpose. You can revoke Usage Access at any time in Android's system settings; the app keeps working without it.

On iOS, the same "block distractions" feature is built on Apple's Screen Time framework (Family Controls). It is off by default and needs the same double opt-in: you turn it on in the app's settings, and you grant Screen Time access once through Apple's own system prompt — the app can never acquire it silently. You then choose which apps to shield in Apple's built-in app picker, which hands the app only opaque tokens: the app can shield and count the apps you picked, but cannot see which apps they actually are. During a focus session the app asks iOS to shield those apps and lifts the shield when the session ends. Your selection is stored, and the shield enforced, entirely on your device by iOS — none of it is transmitted anywhere.

5. Photos

You can pick photos from your library to turn into garden mosaics. Selected images are copied into the app's private storage on your device and tracked only in the app's local database — the app never uploads your photos anywhere. On iOS, photo-library access is the only system permission the app requests a usage description for, and it is used solely for this picking step.

6. Device backups

Like other apps' data, Focus4Life's local data (including photos you added and your local statistics) may be included in your device's operating-system backup — for example iCloud backup on iOS or Google backup on Android — if you have backups enabled. Those backups are performed and controlled by your device and your Apple/Google account, not by this app, and they are covered by Apple's and Google's privacy policies. The app itself never transmits your local data.

7. Permissions the app declares

Android (you may see these on the Play Store listing):

Notifications Timer alerts and session reminders.
Exact alarms Ring exactly when a focus or break interval ends.
Run at startup Restore scheduled reminders after the device reboots.
Foreground service & wake lock Keep the timer running reliably while the screen is off.
Vibration Haptic feedback for timer events.
Do Not Disturb access Optionally silence notifications during focus sessions.
Usage access Optional Focus Lock distraction detection — see section 4.
Display over other apps Show the gentle "return to focus" overlay when Focus Lock is on.
Internet / network state Used for the garden-artwork download (section 2) and, on Android, the discount-code redemption (section 3).

Some additional entries appear in the app's technical manifest because of third-party components it is built with, not because the app uses them: QUERY_ALL_PACKAGES and REQUEST_DELETE_PACKAGES are declared by the app-list plugin that powers Focus Lock's "choose apps to block" picker, and Google push-notification (FCM/c2dm) receivers and services are bundled by the iOS Live Activities plugin. These push-notification components are present but never configured or used: the app sets up no Firebase Cloud Messaging, no analytics and no crash reporting, so they can neither send nor receive anything. (The one Google/Firebase service the app does use — only on Android, only when you redeem a discount code — is described in section 3; it has nothing to do with these push receivers.)

8. Deleting your data

Inside the app you can delete individual items: tasks can be deleted, projects can be archived or permanently deleted once empty, and photos you added can be removed (which also deletes the image files from the app's storage). The app currently offers no one-tap "erase everything" button, no data export, and no way to delete completed focus-session history from within the app.

To remove all of your data, uninstall Focus4Life (or clear its storage in your device settings). This permanently deletes the local database and all stored files — and because none of your local data is ever uploaded, no copy of it exists on any server. (The only thing we ever store on a server is the discount-redemption record in section 3, which contains no personal data and is not linked to you.) If you use OS backups (section 6), manage those through your Apple/Google account.

9. Children

Focus4Life is a general-audience productivity tool and is not directed at children under 13. The app collects no personal data from anyone, including children.

10. Your rights (GDPR)

ZinZinTech (KVK 42059149, Netherlands) is the data controller for this policy. Almost nothing you do leaves your device for our systems; the one exception is the Android discount-code redemption in section 3, where the data we process is limited to a discount code, a Google Play purchase token and order ID, a device-integrity attestation, and — as with any web request — your device's IP address transiently. None of this identifies you and none of it is used for ads or analytics. You can always contact us at phan.business.nl@gmail.com with any privacy question, and you have the right to lodge a complaint with the Dutch data protection authority, the Autoriteit Persoonsgegevens.

11. Changes to this policy

If a future version of the app changes what data is handled (for example, an optional cloud-backup feature), we will update this policy before that version ships and adjust the dates at the top of this page.

12. Contact

ZinZinTech · KVK 42059149 · Netherlands
phan.business.nl@gmail.com