Legal

Privacy Policy

Last updated: 2026-09-08

This is written in plain language on purpose. Where a term matters legally, we've tried to also say what it means in practice. This policy describes AnimeLife version 1.0 as actually built. Every claim below was checked against the app's source code and the narration service's source code before publishing, not written from a template.

The short version

AnimeLife stores your life, your choices, and your Life Ledger only on your device. No server holds a copy of your save. App Store build 16 and Google Play version 17 have no account or login. Recovery-item account protection is unavailable in these builds, and your save is never uploaded.

Native release builds connect to RevenueCat, our purchase-management provider, to load products and verify permanent purchases. Free play may request contextual story-break ads and optional rewarded ads through Google Mobile Ads. Story Polish is optional and off by default. In build 16 and version 17, AnimeLife's writing service is not configured, so Story Polish always falls back to the bundled story text and sends no story content.

What we collect

Your gameplay data stays local by default. Your life, stats, choices, relationships, family tree, Life Ledger entries, and save slots are stored in a local SQLite database inside the app's own sandbox on your device (expo-sqlite). We do not have access to it, and it is never uploaded anywhere unless you personally export or share a card image using the app's own Share sheet.

Build 16 and version 17 do not enable recovery accounts or collect an email address. A later build may offer optional email-code account protection for unused paid recovery items. If that feature is enabled, this policy and the store privacy disclosures will be updated before release. It will not upload your life, choices, relationships, family tree, Life Ledger, save slots, character name, or payment details.

Native release builds initialize RevenueCat so the app can load products, verify purchases, restore access, and react to refunds or revocations. RevenueCat normally generates a random anonymous app-user id and may receive device and platform technical details, the last time the app was seen, and, when a purchase exists, the Apple receipt or Google purchase token and transaction status. AnimeLife does not attach your name, email address, advertising id, or gameplay history to that id. If you turn on recovery account protection, the random Supabase user id replaces the anonymous install id. RevenueCat still does not receive your email address. RevenueCat uses this information for purchase validation, entitlements, fraud prevention, and its customer-history and purchase dashboards. See the Purchases section below.

Build 16 and version 17 include Google Mobile Ads and Google's consent SDK. When an ad request is eligible, Google may process an approximate location derived from an IP address, device or app identifiers, ad impressions, clicks, rewarded completions, advertising delivery data, and crash or performance diagnostics needed to operate the ad service. AnimeLife requests non-personalized ads, does not request Apple's tracking permission, and removes Android advertising-id access. We do not send life choices or general gameplay events to Google. We do not use a separate gameplay analytics or session-recording SDK. RevenueCat's purchase dashboards are the limited purchase analytics described in this policy.

Ads

Free play may show contextual interstitial ads only after several resolved story outcomes. After the first ad, another requires at least five more outcomes and an eight-minute cooldown. The app caps interstitials at two per session. It does not use launch ads, app-open ads, banners, onboarding ads, choice-screen ads, dice-screen ads, or death-screen ads. After a failed skill check, the app may offer an optional rewarded ad for one Lucky Break. Ad availability depends on consent, network access, Google account and app eligibility, and inventory.

The permanent Remove Ads purchase suppresses both story-break ads and optional rewarded prompts. Google may show a consent or privacy-choices form where required. See Google's privacy policy for Google's practices.

Optional Story Polish

AnimeLife's entire story engine, including every event, choice, and outcome, is built from hand-written templates and runs completely offline. That's the whole game, and it's on by default.

Settings → Story Polish is an opt-in feature, off by default, that can lightly rephrase a template so repeated play feels less familiar. It never invents new choices, stats, or consequences. Every effect on your life still comes from the game's own rules, validated before anything changes.

Build 16 and version 17 have no writing-service URL configured. Story Polish therefore remains inactive in these builds and the bundled template appears immediately. No story content is sent. If a later release enables the service, this policy and the store privacy disclosures will be updated before that release.

How an enabled service would work

The code supports two testable transports, but neither is available through the build 16 or version 17 consumer experience:

  1. AnimeLife's narration service (the normal path). Your device sends the request to a small server we operate (a Cloudflare Worker), which forwards it to Anthropic's API using our key and streams the answer straight back. This is a server in the middle, and we run it. It exists because asking every player to paste an API key isn't a real product.
  2. A developer test key. Internal development tooling can call the writing provider directly. The consumer Story Polish screen does not expose this control.

What is sent for one beat

For a single story beat, and only for that beat, the request contains:

What is not sent: your save file, your full Life Ledger, your family tree, your stats, your other lives, your saves list, your settings, or anything from any beat other than the one being rendered and the single Ledger line it calls back to.

Nor is the app's own rendering machinery. The number that keeps a beat looking the same each time you see it, the internal event id, and the art/text pack the beat renders from are used to draw the screen on your device and are stripped before the request is built, because nothing on the other end reads them. The list of fields that may cross the network is a fixed allowlist in code, our own service rejects any request carrying anything else, and a test walks real lives and fails if the payload ever grows a field this section does not describe.

What our narration service sees, and what it keeps

When the request goes through our service (path 1 above), it receives:

The service does not store your story text. It keeps exactly one thing: a counter, so it knows how many requests that install has made today. That counter expires automatically after two days. Its operational logs record only whether a request was forwarded or blocked and the HTTP status, never the beat content.

Requests are capped at a modest number per day. Past that, AnimeLife quietly reverts to the offline template for the rest of the day.

Your own key, if you use one

Developer test keys are stored in the device's secure keychain or keystore-backed encrypted storage, never in ordinary save data and never transmitted to AnimeLife's service.

External writing provider

If Story Polish is enabled in a later release, the beat content described above may reach Anthropic as the external writing provider, and its privacy policy will govern that processing. See Anthropic's privacy policy.

Reporting a beat

If you use the in-app "Report" flag on a story beat, we write a small log entry with the beat and the reason you selected to the same local SQLite database as everything else. This log never leaves your device automatically. It exists so a future version of the app can let you, or our small team if you choose to send it, see what got flagged for improving the templates. We do not currently collect these reports remotely in v1.0. If a future version adds an optional "send this report to us" action, that will be a separate, explicit choice with its own disclosure.

Purchases

If you buy an AnimeLife mode, Director Mode, a recovery item, or the Mode Collection, the transaction is handled by Apple's App Store or Google Play's standard in-app purchase system, and by RevenueCat (our purchase-management provider) to determine what you're entitled to. We do not process or store your payment details ourselves. RevenueCat receives the anonymous app-user id or protected account's random user id, technical details, and purchase records described above. It uses them to validate purchases, restore access, prevent fraud, react to refunds or revocations, and provide customer-history and purchase dashboards to us. RevenueCat acts as our service provider for this data. See RevenueCat's privacy policy for details.

Crisis resources

Settings → Crisis Resources shows a fixed, hard-coded list of hotline numbers and links (988, Crisis Text Line, SAMHSA, IASP). Tapping one of these opens your device's own Phone, Messages, or browser app. We don't see whether you tapped it, and no data is sent to us as a result.

Children

AnimeLife is rated for adults and is not directed at children. It does not ask, estimate, or verify the real player's age in the app. Storefront ratings and device parental controls govern availability. The data practices in this policy apply the same way regardless of age.

Data deletion

Deleting the app deletes your locally stored lives, choices, settings, reports, and saved API key. It does not delete transaction records held by Apple, Google, or RevenueCat. Those records are used to restore purchases, handle refunds, prevent fraud, and meet legal and accounting obligations.

If you created a recovery account, Settings → Recovery Account → Delete Account deletes the Supabase user, email, authentication data, recovery-operation journal, and RevenueCat customer. Your local lives remain on your device. Apple and Google control their own transaction and payment records, which are not deleted by removing an AnimeLife recovery account.

To ask about access to or deletion of purchase-service data, email miwoju.business@gmail.com. If you did not create a recovery account, we may need your store, product, purchase date, and RevenueCat anonymous app-user id to locate the correct record. Apple and Google also control their own transaction records under their policies.

If Story Polish is enabled in a later release, its request counter will use an opaque device id that we cannot connect to your name or email and will delete itself within two days. Deleting the app removes any developer test key stored on the device.

Changes to this policy

If we add a feature that changes what leaves your device, such as analytics, a real "send my report to you" action, or cloud saves, this policy will be updated before that feature ships. The change will be described plainly, the same way this version is.

Contact

Questions about this policy: miwoju.business@gmail.com.