Privacy Policy
Application Privacy Statement · Last updated 15 May 2026
This privacy statement ("Privacy Statement") applies to the treatment of personally identifiable information submitted by, or otherwise obtained from, you in connection with the associated application ("Application"). The Application is provided by LifeWheel. By using or otherwise accessing the Application, you acknowledge that you accept the practices and policies outlined in this Privacy Statement.
What Personal Information Does LifeWheel Collect?
We collect three categories of information.
1. Account information. When you sign in we receive your Firebase Authentication user id (a random string) and, depending on the sign-in method you choose, your email address (Apple, Google, email/password) or a stable Apple-issued private-relay identifier. Users who skip sign-in get an anonymous Firebase uid that lives only on their device until they sign in. You may also fill in a display name and select an avatar.
2. Self-reported wellness and goal data. Everything you enter inside LifeWheel — life-sphere scores and history, goals, tasks, habits and habit check-ins, journal entries, mood logs, decisions, Vision Space tiles, onboarding answers (including the optional 5-question WHO-5 Wellbeing Index used to personalize the app), reminder times, focus areas, language, and notification preferences. If you grant access, LifeWheel reads menstrual-cycle dates from Apple HealthKit (only the dates and the cycle-tracking categories you explicitly allow). HealthKit data stays on your device and is not transmitted to our servers; the calendar uses it locally.
3. Usage and device information collected automatically. When you interact with the app we receive: a device identifier (advertising id where you've allowed App Tracking, otherwise a random per-install id), iOS version and device model, app version and language, app-event timestamps (screens viewed, taps on key features, paywall views, purchases, errors), crash diagnostics, push-notification token, IP address, and approximate region. We use this for product analytics, crash reporting, and install attribution — not advertising profiles.
We do not knowingly collect data from children under 13. We do not collect biometrics, audio recordings, video, contacts, photos, location more granular than country/region, or financial-account details. App Store purchases are processed by Apple; we receive only the resulting subscription status (active/expired) via Adapty.
How Does LifeWheel Use the Information It Collects?
We use the information above only for the following purposes:
- Operate the app. Store and surface the records you create (goals, journal, mood, etc.), keep them in sync across your devices, send the reminders you schedule.
- Personalize content. Tailor onboarding, the wheel template, daily prompts, journal templates, and paywall messaging based on the answers you give in onboarding (focus area, WHO-5 score, age band, language).
- Authenticate and secure your account. Verify sign-in via Firebase Authentication and Apple/Google as applicable, enforce App Check on backend calls, throttle abusive traffic.
- Process subscriptions. Read your App Store subscription state via Adapty so we can unlock paid features, restore purchases, and apply promo codes.
- Improve the product. Understand which features are used, which onboarding paths convert, where users get stuck, what causes crashes. Analytics are aggregated; they are not used to build advertising profiles.
- Attribute installs. Determine which marketing channel referred you so we can measure campaign effectiveness. This uses limited device identifiers and IP, never the contents of your journal/goals/habits.
- Send notifications. Deliver the local and remote push notifications you opted into (habit reminders, weekly review, comeback nudges).
- Power optional integrations you turn on. The ChatGPT connector (see dedicated section below) and the Apple Watch / Home Screen widgets read your existing LifeWheel data so they can surface it inside ChatGPT or your Home Screen.
- Comply with the law and protect users. Respond to lawful requests, enforce our Terms, and detect abuse.
We do not use the contents of your goals, tasks, habits, journal, mood logs, decisions, or Vision Space tiles to train AI models, to build advertising profiles, or to share with advertising networks.
Will LifeWheel Share Any of the Personal Information It Receives?
We do not rent or sell your personal information. We share data only with the processors listed below, only for the stated purpose, and only the minimum needed to deliver the service. Each provider acts on our written instructions.
- Google Firebase (Authentication, Realtime Database, Storage, Cloud Functions, Cloud Messaging, Remote Config, In-App Messaging, Crashlytics, App Check). Hosts your account, stores all in-app records, runs server-side functions, delivers push notifications, and collects crash diagnostics. Data resides in Google Cloud regions selected for the Firebase project.
- Apple (App Store, Sign in with Apple, HealthKit, APNs, StoreKit). Processes subscription transactions, supports Apple sign-in, gates HealthKit access on-device, and delivers push notifications.
- Adapty. Manages subscription state and paywall configuration. Receives the user id, App Store transaction identifiers, subscription state, the campaign metadata associated with a purchase, device language and country.
- Amplitude. Product analytics for both the iOS app and the marketing website lifewheel.us. From the iOS app: receives the user id, anonymized device identifiers, IP, app-event names and metadata, language, country. From the website: receives a randomly generated browser device id (stored in localStorage), IP, page-view and click events, language, country, referrer. Does not receive the contents of journal, goals, habits, mood, or decisions.
- Microsoft Clarity. Marketing website only — heatmaps, session replays, and rage-/dead-click detection on lifewheel.us. Receives a per-visit identifier, IP, page interactions (clicks, scrolls, form fields with values masked by default), and recorded session video. Does not run inside the iOS app and never sees in-app records. We use Clarity to understand where new visitors get stuck before installing.
- Google Analytics 4. Marketing website only — traffic measurement and integration with Google Search Console / Google Ads. Receives a randomly generated client id (stored in a first-party cookie), IP (anonymized by Google), page-view events, referrer, language, country, device. Does not receive in-app content from the iOS app. Used to understand where website traffic comes from and which pages convert to App Store visits.
- AppsFlyer. Install attribution — receives a device identifier (advertising id where allowed), IP, and the install/launch events needed to attribute a campaign. Does not receive in-app content.
- Meta (Facebook SDK). Install attribution and conversion measurement, plus optional Facebook sign-in. Receives a device identifier, IP, app-install/open events, purchase events. Does not receive in-app content.
- OneSignal. Outbound push delivery (the comeback / weekly-review pushes). Receives the push token, the message payload we send, language, and a small set of segmentation tags (such as activation state). Does not receive in-app content.
- Google (Sign-In). If you choose Google sign-in, Google verifies your identity and returns a token to us; we receive your email and Google id.
- OpenAI. Only if you enable the optional ChatGPT connector — see the dedicated section below for the full disclosure.
- Service providers (legal, hosting, payment). May receive personal data strictly to perform tasks on our behalf, under written terms that prohibit any other use.
- Business transfers. If LifeWheel is acquired or merged, your information may transfer to the acquirer subject to this Privacy Statement (or a successor with materially equivalent protections).
- Legal obligations. We may disclose information if required to comply with law, court order, or to protect the rights, property, or safety of LifeWheel, our users, or others.
- With your consent. For any sharing not described above, we will ask first.
How Long Do We Keep Your Information?
We retain account data for as long as your account is active. When you delete your account in-app (Settings → "Delete account") or by emailing alex@lifewheel.us, we permanently remove your records from Firebase Realtime Database within 30 days, including life-sphere data, goals, tasks, habits, journal, mood, decisions, Vision Space tiles, history, OAuth grants, and the connector audit log. Crash diagnostics are kept for up to 90 days. Aggregated analytics that no longer identify you may be retained longer to track product trends. Backup copies are purged on rolling cycles defined by each processor.
ChatGPT Integration (OpenAI Apps SDK)
LifeWheel offers an optional integration that lets you access and modify your LifeWheel data through ChatGPT using the OpenAI Apps SDK (Model Context Protocol). The integration is opt-in and inactive until you add LifeWheel as a Connector inside ChatGPT and complete sign-in. The disclosures below describe, end-to-end, what data the integration handles, why, who receives it, how long it is retained, and the controls you have. They take precedence over the more general statements earlier in this policy when describing the ChatGPT connector specifically.
1. Data the integration handles. When you authorize the connector, our server receives a Firebase user id (the same id used by the iOS app) and issues OAuth 2.1 tokens to ChatGPT. While connected, ChatGPT sends tool requests that include free-text input you type (search queries, goal titles, journal entries, mood values, dates, ids previously returned by the connector) and our server returns records from your account: life spheres and wheel values, goals and tasks, habits and habit check-ins, journal entries, mood logs, Decide Mode decisions, Vision Space tiles, and recent activity history. No data belonging to other users is ever returned. Three "demo" tools (start_wheel_demo, render_demo_wheel, explain_sphere) work without sign-in, accept only a locale or sphere key, return generic content, and do not read or write any user data.
2. Tools the connector exposes — per-tool inputs and outputs. The table below itemizes every tool the connector currently exposes, exactly what data ChatGPT sends to our server when it invokes the tool, exactly what data our server returns to ChatGPT, and whether the tool reads or writes records in your LifeWheel account. ChatGPT can never call a tool that is not in this list. We update this table whenever a tool is added, removed, or its input/output shape changes.
Demo tools — no sign-in, no account data accessed.
start_wheel_demo— Input: optional two-letter locale. Output: an interactive 8-slider widget rendered inside ChatGPT with default life-sphere labels. Reads/writes: none.render_demo_wheel— Input: an array of 8 sphere scores (title, value 1–10, optional color and icon) the user just entered in the demo widget. Output: a rendered life-wheel image widget. Reads/writes: none (nothing is persisted server-side; the scores stay in the ChatGPT widget).explain_sphere— Input: a sphere key and optional locale. Output: a short static text explanation of that sphere with a reflection question. Reads/writes: none.
Read tools — sign-in required; return your own data only.
whoami— Input: none. Output: your Firebase uid and integer counts of your top-level records (wheels, spheres, goals). Reads: account metadata. Writes: none.search— Input: a free-text query string (optionally containing filters likesphere:health,since:2026-01-01,status:active,domain:journal). Output: a list of matching record summaries (id, title, snippet) drawn from your goals, tasks, journal entries, mood logs, decisions, Vision Space tiles, life spheres, and wheel history. Reads: any of those record types under your uid. Writes: none.fetch— Input: a record id previously returned bysearch, or the synthetic idswheel:currentorvision:board. Output: the full contents of that single record. Reads: the one record. Writes: none.show_wheel— Input: optional wheel name or wheel id. Output: an interactive wheel widget plus the wheel's sphere values. Reads: one wheel and its spheres. Writes: none.show_goal— Input: a goal id. Output: the goal's title, sphere, progress, deadline, and tasks rendered as markdown plus structured data. Reads: one goal and its tasks. Writes: none.list_habits— Input: none. Output: every active habit with today's completion status and target count. Reads: your habit records and today's check-ins. Writes: none.analyze_wheel— Input: optional wheel name or id. Output: the strongest and weakest spheres, gaps between current and potential values, active goals on the weakest sphere, and recent wheel-evaluation activity. Reads: the named wheel, its spheres, your goals, and recent evaluations. Writes: none.weekly_review— Input: none. Output: tasks completed, journal entries, mood logs, and wheel evaluations from the last 7 days. Reads: those record types under your uid, scoped to the last 7 days. Writes: none.
Write tools — sign-in required; act only on records under your own uid.
create_goal— Input: title, optional sphere key, optional target description, optional image reference, optional deadline (unix seconds), optional importance flag, optional per-sphere impact map. Output: the new goal's id. Writes: appends a new goal record under your uid.create_habit— Input: title, optional sphere/sphere key, optional target description, optional due time, optional reminder time, optional repeat schedule and weekday array, optional count per day, optional image reference, optional impact map, optional importance flag. Output: the new habit's id. Writes: appends a new habit record under your uid.update_goal— Input: goal id and a patch object containing allowlisted fields (title, description, image reference, impact map, deadline, progress values, habit fields). Output: confirmation. Writes: overwrites those fields on the named goal.complete_goal— Input: goal id. Output: confirmation. Writes: setsisAchievedto true on the named goal. Reversible viaupdate_goal.pause_goal— Input: goal id, optionalpausedboolean (defaults to true). Output: confirmation. Writes: flipsisPausedon the named goal.delete_goal— Input: goal id. Output: confirmation. Writes: permanently removes the named goal and all of its tasks from your account. This is the only destructive write tool.create_todo— Input: goal id, task name, optional description, optional deadline (unix seconds), optional weekday-repeat array, optional area string. Output: the new task's id. Writes: appends a new task record under the named goal.toggle_todo— Input: task id,completedboolean. Output: confirmation. Writes: sets the task'sisAchievedflag to the given value. Reversible by calling again with the opposite value.create_journal— Input: body text, optional title, optional mood emoji, optional tag array, optional wheel id. Output: the new entry's id. Writes: appends a new journal entry under your uid.log_mood— Input: mood label, optional emotions array, optional reasons array. Output: confirmation. Writes: appends a new mood log under your uid.create_vision_item— Input: sphere key, optional image reference, optional linked-goal key, optional affirmation, optional if-then trigger, optional if-then action, optional values note. Output: the new tile's id. Writes: appends a new Vision Space tile under your uid.update_vision_item— Input: tile id and a patch object containing allowlisted fields. Output: confirmation. Writes: overwrites those fields on the named tile.set_wheel_slider— Input: sphere key, new value (1–10), optional potential value. Output: confirmation. Writes: overwrites the sphere's current value (and optional potential) and appends a new history row preserving the prior value.commit_decision— Input: decision id, chosen option string, optional outcome note. Output: confirmation. Writes: flips the decision's status to committed and records the chosen option on the named decision.
Inputs are strictly limited to the JSON schema declared per tool — no free-form arbitrary data is accepted. Each write tool acts only on records under your own Firebase uid and cannot reach any other user's account. Every write tool call is logged to a per-user audit log (see section 5 below).
3. Purposes. We process the data above only to (i) authenticate ChatGPT on your behalf via OAuth 2.1; (ii) read the records you ask the assistant to surface and return them to ChatGPT; (iii) create, update, or delete records you ask the assistant to modify; (iv) maintain a per-user audit trail of write actions so you can review what the assistant did under your account; and (v) enforce a daily rate limit (500 tool calls per user per day) to prevent abuse. We do not use connector data for advertising, profiling, or training any AI models.
4. Recipients. Four parties receive data through the integration; no other third parties do.
- OpenAI — operates the ChatGPT interface from which you invoked the connector, and receives both the prompts you send and the tool responses we return. OpenAI's handling of this data is governed by its own policies at openai.com/policies; LifeWheel does not control it.
- Google Firebase Authentication — verifies your sign-in during the OAuth flow.
- Google Firebase Realtime Database — stores your LifeWheel account data, the OAuth grants issued to ChatGPT, and the connector audit log.
- Google Cloud Functions — hosts the MCP server that fulfills tool calls.
The connector does not invoke any of LifeWheel's marketing-analytics processors (Amplitude, AppsFlyer, Meta), advertising networks, or attribution providers. We do not sell, rent, or share connector data with any party for advertising or profiling purposes.
5. Retention.
- OAuth authorization codes — 10 minutes, then deleted.
- OAuth access tokens — 30 days. Refresh tokens — 180 days. Both are invalidated immediately when you disconnect the connector or delete your account.
- Audit log entries at
users/<uid>/mcp/audit/— tool name, truncated parameters (max 2 KB), and timestamp. Kept for the lifetime of your account and removed when your account is deleted. - Daily rate-limit counters at
users/<uid>/mcpRateLimit/<date>— a date and an integer; kept for the lifetime of your account. - Tool inputs and outputs — not stored on our servers beyond the in-flight HTTP request. The records returned to ChatGPT are your existing LifeWheel data and remain in your account only as long as you keep them.
- Demo-tool data — never persisted server-side. Sliders the user moves in
start_wheel_demostay in the ChatGPT widget until rendered. - Chat history on the ChatGPT side — retained according to OpenAI's policies, not LifeWheel's. Tool outputs already returned to ChatGPT remain visible in your ChatGPT conversation until you delete those messages or your ChatGPT account.
6. Your controls.
- Disconnect at any time from ChatGPT → Settings → Apps & Connectors. The access and refresh tokens are invalidated server-side immediately.
- Delete tool outputs from ChatGPT by deleting the relevant ChatGPT conversations on OpenAI's side.
- Delete your LifeWheel account in-app. Open the iOS app → Settings → "Delete account". This permanently removes everything stored under your Firebase user id — life spheres, goals, tasks, habits, journal, mood, decisions, Vision Space tiles, history, OAuth grants, and the connector audit log — and is not reversible.
- Request an export or human-reviewed deletion by emailing alex@lifewheel.us. We will respond within 30 days.
- Refuse the connector entirely — the iOS app works fully without it and has no dependency on the ChatGPT integration.
For specific questions about the ChatGPT integration, email alex@lifewheel.us.
Conditions of Use
If you decide to use or otherwise access the Application, your use/access and any possible dispute over privacy is subject to this Privacy Statement and our Terms of Use, including limitations on damages, arbitration of disputes, and application of California state law.
Third Party Applications / Websites
The Application may permit you to link to other applications or websites. Such third party applications/websites are not under LifeWheel's control, and such links do not constitute an endorsement by LifeWheel of those other applications/websites or the services offered through them. The privacy and security practices of such third party application/websites linked to the Application are not covered by this Privacy Statement.
Your Rights and Controls
You have control over the data LifeWheel holds about you.
- Access and edit. Every record you create — life-sphere scores, goals, tasks, habits, journal entries, mood logs, decisions, Vision Space tiles — is shown inside the iOS app and can be edited or deleted there at any time. Account settings live under Settings.
- Export. Email alex@lifewheel.us to request a JSON export of the data we hold under your Firebase user id. We will respond within 30 days.
- Delete your account. Open the iOS app → Settings → "Delete account". This permanently removes your records from Firebase Realtime Database, invalidates any OAuth grants issued to ChatGPT, and is not reversible. You can also email the address above to request deletion.
- Withdraw consent for optional integrations. Disconnect the ChatGPT connector inside ChatGPT → Settings → Apps & Connectors. Revoke HealthKit access in iOS Settings → Health → Data Access & Devices → LifeWheel. Disable push notifications in iOS Settings → LifeWheel.
- App Tracking. The iOS App Tracking Transparency prompt lets you decline access to the advertising identifier; declining limits attribution but does not affect any in-app feature.
- Marketing communications. You can disable in-app messaging and push notifications at any time from Settings or from iOS Settings.
- Regional rights. Depending on where you live (EEA/UK GDPR, California CCPA/CPRA, Brazil LGPD, and similar regimes), you may have additional rights including access, rectification, erasure, restriction, portability, and the right to lodge a complaint with a supervisory authority. Email alex@lifewheel.us to exercise any of these rights and we will respond within 30 days.
Changes to This Privacy Statement
LifeWheel may amend this Privacy Statement from time to time. Use of information we collect is subject to the Privacy Statement in effect at the time such information is collected.
Questions or Concerns
If you have any questions or concerns regarding privacy, please send us a detailed message at alex@lifewheel.us. We will make every effort to resolve your concerns.