Plain-English summary
Your child's first name and birth date stay on your device. We do not upload them to our servers.
To generate a story, we send the minimum context needed: an anonymous device identifier, the scenario and story world you picked, your child's age band (not exact birth date), favorite animal type, narrator voice/tone choices when selected, your subscription receipt status, and anonymous usage events.
We don't use advertising identifiers. We don't track you across other apps or websites.
You can delete everything by opening Settings → Data & Privacy → Reset App Data. To also remove the server-side record, email us with the device ID shown in Settings → About.
sub value Apple returns — not their email or nameIf you tap "Sign in with Apple" in Settings (required only to claim invite rewards):
sub claim)sub + your device ID, linked togetherWe use PostHog to understand which scenarios are picked, where users drop off, and whether new features help. These events are never linked to your child's data. Typical events:
ftu_completed, first_story_generated, story_play_completedhelpful_tapped, share_card_savedpurchase_started, purchase_succeededPostHog is configured with autocapture: false — we only send events we explicitly code. No IDFA, no cross-app tracking.
We use Apple's built-in crash reporting. You can opt out in iOS Settings → Privacy & Security → Analytics & Improvements → Share With App Developers.
| Service | Purpose | Data sent |
|---|---|---|
| Alibaba Cloud DashScope | AI text + text-to-speech generation | Story generation context (scenario, world, age band, favorite animal type, optional tone/voice). No child first name or birth date. |
| Cloudflare Workers + R2 | API hosting, audio file storage | Everything in §1.2 passes through here |
| Supabase | Story metadata, bonus ledger, referral tracking | Everything in §1.2 and §1.3 |
| RevenueCat | Subscription management | Your Apple Transaction ID, subscription status |
| Apple (App Store, SIWA) | Payments, optional auth | Apple handles payment data directly — we never see your card |
| PostHog | Product analytics | Events in §1.5 |
We have a data-processing agreement with each vendor where applicable. None of them receive your child's first name or birth date. Story-generation vendors receive only the selected story context needed to produce the audio.
HabitStories is a tool for parents, not a product for children. The account holder is always an adult. Your child should not use the device unsupervised while HabitStories is open.
Because of this, we do not target children under 13 for data collection. The child's first name and birth date stay local to your device. Story generation uses only the selected story context needed to produce the audio, such as age band, scenario, world, and favorite animal type.
If you discover a child has somehow created an account directly (which our UX doesn't support), email [email protected] and we'll delete the associated device record immediately.
Email [email protected]. We return a JSON dump of every row linked to your device ID within 14 days.
iOS Settings → Privacy & Security → Tracking: HabitStories — toggle off. We also honor the system-level ATT prompt.
| Data | Retention |
|---|---|
| Story metadata on server | 180 days, then purged |
| Audio files on R2 | 30 days after last access |
| Bonus / referral records | 24 months, then anonymized |
| Crash logs | 90 days |
| PostHog events | 365 days |
| Device → Apple ID binding | Until you delete, or anonymized after 24 months inactivity |
If you're in the EU/UK and this matters to you, email us and we'll clarify or suspend your record.
All data in transit is encrypted via HTTPS/TLS. On-device data is protected by iOS device encryption. We apply standard security practices to our server-side infrastructure.
We'll update this document when things change. Material changes will be flagged in the app on next launch with a short summary. The "Effective date" at the top always reflects the current version.
We're a small team. A real person reads every message, usually within 24 hours.