Privacy Policy

Last updated: October 26, 2026 · Applies to the Nivolo iOS app and nivolo.app

Nivolo is a habit and goal app built to be private by default. It has no cloud account system, analytics, advertising, or trackers. Almost everything you create lives only on your iPhone. This policy explains the exceptions in detail — what leaves your device, when, who processes it, how long it is kept, and what you can ask us to do about it.

The short version

Your goals, actions, streaks, Krill, gems, name, birthday and any email you enter inside the app are stored on your device. Goal text and your reason are sent only if you tap to draft an AI plan; your name, birthday and in-app email are not sent to us.

The AI goal plan sends what you enter when you request a draft. For Plus members with at least five logged actions, the AI weekly insight can send summary counts automatically when the app opens or the language changes, if it has no saved result for that week and language. Requests use a random app ID rather than your name or email. Section 3 explains exactly how this works.

If you voluntarily join the website launch list, we keep the email address you submit only long enough to send the one launch message. We do not run analytics, ads, or trackers, and we do not sell personal information.

The limited Early Supporter icon and numbered painting are for our first 20 verified paying supporters. Our server verifies Apple-signed purchase records and keeps a hash of each winning subscription identifier; the public count contains no personal information.

1. Who we are

Nivolo is an independent iOS app made by Jack Dai. For the purposes of the GDPR, the developer is the data controller for the limited data described in this policy. There is no developer-hosted account system. A name, username, or email shown in your local app profile remains on your device and is not registered with us. An email submitted separately through the website launch form is kept only for that launch notice. You can reach us at support@nivolo.app.

This policy covers the Nivolo iOS app and the website at nivolo.app. It does not cover Apple's own services (the App Store, iCloud Backup, Apple ID), which are governed by Apple's privacy policy.

2. Data that stays on your device

Nivolo does not create a cloud account. Its onboarding and profile screens create a local identity on your iPhone only. The information below is stored in the app sandbox or an App Group container shared with the Nivolo home-screen widget. The AI exceptions are described in section 3: goal text and your reason leave the device only when you request a plan, and Plus weekly summary counts can be sent automatically.

WhatWhy the app has it
Profile details — the name and birthday you enter during onboarding, and an email or handle if you choose to add one at the "save your journey" promptTo greet you by name and to show a birthday theme on your birthday. The email field is a local reminder for your own records — it is not an account, it is not verified, and nothing is ever sent to it or to us.
Goals and actions — goal titles, your reasons, steps, milestones, logged actions, notes and datesThe core of the app.
Progress — streaks, streak freezes, rest days, Krill, gems, achievements, trophy shelf, season historyStreaks, rewards and the season review.
Collection and cosmetics — owned items, equipped outfits, worlds, chosen app iconNivo's look and your unlocks.
Settings — language (English or 中文), reminder times, notification preferences, sound and hapticsTo keep the app the way you set it.
Purchase state — which membership tier is active, as reported by AppleTo unlock that tier’s features offline.
A random app ID — a UUID generated on your deviceUsed to apply AI fair-use limits and authenticate requests, including paid Early Supporter checks. It is generated randomly and is not derived from your Apple ID, email, name, phone number, or a hardware identifier.

Because this data lives on your device, it is included in your normal iPhone backup (iCloud or a computer), where it is handled under Apple's backup and encryption terms. Deleting the app deletes this data from your device; a backup you have already made may still contain a copy until that backup is deleted or overwritten.

3. Data sent for AI features

Nivolo has two AI features. They are part of the Nivolo Plus membership, and anyone can try the plan drafter a couple of times for free. The plan drafter sends data only when you tap to request it. For eligible Plus members, the weekly insight can run automatically as described below. Requests go over an encrypted HTTPS connection to our own server at api.nivolo.app (a Cloudflare Worker), carrying a short-lived token derived from the random app ID described above.

AI goal plan

When you ask Nivolo to draft a plan for a goal, the following is sent:

This text is used once, to generate that plan, and is returned to your device. Please avoid typing anything you would not want processed by a third-party AI provider — health details, financial details, or other people's personal information — into a goal you send to the AI. Writing goals by hand instead sends nothing at all.

AI weekly insight

For Plus members with at least five logged actions, Nivolo automatically requests a weekly "Nivo's take" insight when the app opens or the language changes, if it has not already saved an insight for that week and language. This sends summary counts only — never your goal text or your name. Specifically: your current streak length, how many actions you logged this week and last week, your most active weekday, how many goals are active, how many goals you completed this week, your total Krill earned, and your language setting, together with the signed subscription record described above. The result is saved on your device.

What our server keeps

Our server does not store your goal text, does not log request bodies, and does not build a profile. It keeps only the small counters needed to stop abuse and to apply the free and Plus allowances (see retention):

Early Supporter icon

The Early Supporter icon and one numbered painting are awarded to the first 20 qualifying payments verified by our Cloudflare server, in the order they are received. Any paid membership tier qualifies; free trials, test purchases, Family Sharing access and launch-list signups do not reserve a place. The app sends an Apple-signed purchase record, authenticated with its random installation ID. Apple App Store Server Notifications can also report a payment directly, including when a free trial becomes paid while the app is closed. We verify Apple's signature, the app and product, production environment, purchaser ownership, positive payment amount and absence of a revocation. We keep only a SHA-256 hash of the winning subscription's original transaction identifier and its number from 1 to 20; the same number selects its painting. We do not store your Apple ID, name, email, goals or signed receipt in the award record. Renewals and repeat requests return the same award. The app saves a local copy for offline access; restoring an active winning subscription on another device recovers its number and painting. The keepsake remains after membership expires, and places are never reissued.

If a future version of the app adds a feature that transmits anything else, this policy will be updated before that version ships.

4. Third parties we rely on

These are the only companies that can come into contact with data related to your use of Nivolo. We have no advertising, attribution, analytics or crash-reporting SDKs in the app.

ProviderRoleWhat it receives
Apple App distribution, in-app purchases, notifications framework, backups Your purchase and subscription details. We never see your name or payment details: Apple gives us aggregated sales reports, the signed subscription record described in section 3 when you use an AI feature as a Plus member, and — if you have opted in to sharing with developers — aggregated crash and performance diagnostics.
Cloudflare Hosts nivolo.app, our AI server, the Early Supporter record, and the launch list (Workers, Durable Objects, and KV); provides DNS and email routing The AI request contents in transit, your IP address as an ordinary part of making a network connection (and as the key of short-lived rate limits), the fair-use counters described above, Apple-signed purchase records used to verify Early Supporter eligibility and the stored hashes of winning subscription identifiers, and the email address you voluntarily submit to the launch list.
Anthropic (Claude API) Generates the plan text and the weekly insight text Only the AI request contents described in section 3, forwarded by our server. Under Anthropic's commercial API terms, inputs and outputs are not used to train their models, and they are deleted from Anthropic's systems within their published retention window. Anthropic does not receive your IP address, your name, or any identifier from your device.
Google (Gmail) Receives our launch-list and support notifications The email address you submit to the launch list is included in a notification delivered to the developer's existing inbox, so the list has a recoverable human-readable record.

We do not sell, rent or trade personal information. We share it only with the service providers above as needed to run the feature you chose, or if legally compelled to do so.

5. What we never do

6. Permissions the app requests

Notifications. If you allow them, Nivolo schedules local notifications — reminders, streak warnings, and encouragement — directly on your device using iOS. They are composed on your phone and never pass through any server, so no one but you can see them. Turn them off any time in the app's settings or in iOS Settings.

Motion. Nivolo reads device motion so that falling pebbles and other on-screen elements react when you tilt your phone. Motion data is used only to animate the current screen; it is never recorded, stored, or transmitted. Declining this permission simply makes those animations static.

Home-screen widget. The Nivolo widget reads your streak and progress from a shared container on your device. Widget data stays on the device.

Rating prompt. The app may occasionally ask you to rate it using Apple's standard review prompt. Apple handles that entirely; we receive no information about whether or how you responded.

7. Purchases and memberships

All in-app purchases and subscriptions are processed by Apple through your Apple ID. We never see or handle your name, card number or billing address. The app receives subscription details from Apple to unlock Plus features. When a Plus member uses an AI plan or receives a weekly AI insight, the app sends Apple's signed subscription record to our server for verification, as described in section 3; the server does not keep the record.

Restoring purchases uses your Apple ID through Apple's servers. Managing or cancelling a subscription happens in your Apple ID settings, not with us. Refunds are handled by Apple.

8. How long data is kept

DataRetention
Everything stored on your device (section 2)Until you delete it in the app, reset the app, or delete the app. We cannot delete it for you, and we cannot see it.
AI prompt text and weekly statsNot stored by us. Processed in memory to produce a response, then discarded. Anthropic holds it only for the short period described in their API retention policy.
Per-minute request limitsHeld in Cloudflare's rate limiter for about a minute; not stored by us.
Per-network daily count of new free drafts (keyed by IP address)Expires automatically after 2 days.
Plus daily plan count and weekly insight count (keyed by the subscription's transaction identifier)Expire automatically after 2 and 14 days.
Free-draft record against your random app IDKept while it is needed to apply the free limit. It holds a count and the last couple of session identifiers, nothing else.
Early Supporter awardThe hash of each of the 20 winning subscription identifiers and its award number is retained for the lifetime of the reward, so places are never reissued. No personal profile or email is included.
Your signed subscription recordChecked in memory on each request and then discarded; only the transaction identifier is used as a counter key, as above.
Launch-list email addressKept until the launch message is sent, then deleted after any necessary delivery follow-up. You can ask us to remove it at any time.
Emails you send us for supportKept in the developer's mailbox for as long as needed to help you and to keep a record of the conversation; you can ask us to delete the thread.

9. Legal bases (GDPR)

If you are in the EEA, the UK or Switzerland, we process the limited data described above on these bases:

10. International transfers

Cloudflare Workers run at edge locations worldwide, so an AI request or launch-list signup is typically handled near you; Anthropic processes AI request text on infrastructure in the United States, and launch-list notifications are delivered to a Google-hosted inbox. If you are in the EEA or the UK, this data may be transferred outside your region. These transfers rely on the providers' Standard Contractual Clauses and equivalent safeguards. App data described in section 2 never leaves your device.

11. Your privacy rights

Depending on where you live, you may have the right to access, correct, delete, restrict or object to the processing of your personal data, to withdraw consent, and to data portability. Here is how each one works in practice for an app with no cloud account system:

Email support@nivolo.app to exercise any of these rights and we will respond within 30 days. For a launch-list request, write from the address you submitted so we can locate it safely.

12. California / US state rights

For California residents under the CCPA/CPRA, and residents of other US states with comparable laws: in the last twelve months we have collected the categories of identifiers (a voluntarily submitted launch-list email, a randomly generated app identifier, and an IP address held for short-lived rate limits), user content (the goal text you choose to submit to an AI feature), and commercial information (whether an Apple purchase is active, and — for Plus members using AI — Apple's signed subscription record, checked and then discarded). These are collected for the business purposes described in this policy and are not retained beyond the periods in section 8.

13. Children

Nivolo is a general-audience app and is not directed to children under 13 (or under 16 in the EEA and UK). We do not knowingly collect personal information from children. The birthday entered during onboarding is stored on the device solely to show a birthday theme and is never transmitted. If you believe a child submitted an email to the launch list or entered something into an AI feature that should be removed, email us and we will do what we can.

14. Security

No method of transmission or storage is completely secure, and we cannot guarantee absolute security. If a breach ever affected data covered by this policy, we would post a notice on this page.

15. App Store privacy labels

Nivolo's App Store privacy label reports that data is not collected, or in the case of the optional AI features, that user content, identifiers and purchase information are not linked to your identity and are not used for tracking. This policy describes the same practices in full; if you ever spot a discrepancy between the two, please tell us and we will correct it.

16. This website

nivolo.app is hosted on Cloudflare. It sets no cookies and runs no analytics. The only form that stores personal information is the optional launch list: when you submit it, we keep the email address, submission time and the fact that it came from nivolo.app so we can send the one launch message.

Every file the site needs — fonts, scripts, images — is served from nivolo.app itself. There are no third-party CDNs, no externally hosted web fonts, and no embedded widgets, so visiting this site makes no request to any company other than our host.

As with any website, Cloudflare automatically processes technical connection data — your IP address, browser type and requested page — to serve the page and defend against abuse. The launch endpoint also uses a short per-IP rate limit to prevent automated spam; it does not add that IP address to the launch-list record.

17. Changes to this policy

We will update this page whenever our practices change, and always before shipping an app version that handles data differently. The "last updated" date at the top always reflects the current version. For material changes — anything that would newly send data off your device — we will also note the change inside the app.

18. Contact

Questions about privacy, a rights request, or something in this policy that reads wrong to you?

support@nivolo.app

We aim to reply within a couple of days, and within 30 days for formal requests.