Baby Bloom

1. At-a-glance summary

2. Device permissions and why we use them

These are the permissions declared in the Android manifest. Some are auto-granted (e.g. internet); others trigger a runtime prompt the first time the relevant feature is used.

Notifications (POST_NOTIFICATIONS)

Why: to show local notifications — the persistent "tracking in progress" notification while you have a feeding/sleep/pumping/activity session running, scheduled reminders you choose to enable, and prediction nudges (Pro only).
Where processing happens: entirely on your device.
What is stored: notification scheduling metadata in shared_preferences. We do not run Firebase Cloud Messaging or any push-notification server — every notification you see is scheduled by the app, on the device.

Boot completed & exact alarms (RECEIVE_BOOT_COMPLETED, SCHEDULE_EXACT_ALARM, WAKE_LOCK)

Why: to re-arm previously scheduled reminder notifications after the device reboots, and to deliver time-sensitive notifications on Android 12+ at the scheduled minute rather than batched.
Where processing happens: on-device.
What is stored: the scheduled-notification table maintained by flutter_local_notifications.

Foreground service (FOREGROUND_SERVICE, FOREGROUND_SERVICE_SPECIAL_USE)

Why: Android requires a foreground service for the persistent "tracking in progress" notification so the OS doesn't kill the timer mid-session. The declared subtype is "Baby tracking timer and quick actions".
Where processing happens: on-device.
What is stored: nothing extra — the foreground service hosts the notification only.

Vibration (VIBRATE)

Why: tactile feedback on certain quick actions and notifications.
Where processing happens: on-device.
What is stored: nothing.

Internet and network state (INTERNET, ACCESS_NETWORK_STATE)

Why: to reach the network destinations listed in section 3 — cloud sync (only with an account), Sentry crash reporting, Firebase Analytics, weather. The connectivity check is used to skip sync attempts when you are offline.
Where processing happens: on-device decision; outbound calls go to the destinations in section 3.
What is stored: nothing additional.

Billing (com.android.vending.BILLING)

Why: to sell the Baby Bloom Pro subscription / lifetime through Google Play Billing.
Where processing happens: the purchase flow itself runs in Google Play; we never see your card details. After a purchase, the Play purchase receipt (purchase token, product ID, order ID) is sent to our backend at POST babybloom-api.vargary.com/purchases/verify so we can validate the receipt with Google and grant the entitlement to your account.
What is stored: validated entitlement state (the fact that you are a Pro subscriber, the product ID, and trial-eligibility flags) is stored on our backend keyed to your account and locally in shared_preferences.

Play Integrity (com.google.android.gms.permission.INTEGRITY_SERVICE)

Why: Firebase App Check uses Google's Play Integrity API to attest that a request to our backend really comes from a genuine, unmodified Baby Bloom binary running on a real Android device. This protects accounts and the backend from automated abuse.
Where processing happens: attestation is performed by Google on-device, the attestation token travels to Firebase App Check and then to our backend.
What is stored: nothing on our side beyond short-lived attestation tokens; Google's handling is governed by Google's own privacy policy.

Location (ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION)

Why: only for the optional weather widget on the home screen, which displays the current temperature, conditions and UV index so the dressing-suggestion card can suggest baby outfits appropriate for today's weather. If you do not grant location, the weather widget simply does not run.
Where processing happens: the latitude and longitude are sent to the free public Open-Meteo API (api.open-meteo.com) and the response is cached on your device. We do not log, store or transmit your location anywhere else.
What is stored: the latest cached weather result on the device. The raw coordinates are not persisted.

Other capabilities the app uses without a runtime permission: photo selection via the system photo picker (image_picker) — you grant access only to the specific images you pick; file pickers for data export/import (file_picker, flutter_file_dialog); the system share sheet (share_plus); device battery state (battery_plus, used to suppress notifications when the device is in a critical battery state); device timezone (flutter_timezone); device locale (easy_localization); package info (package_info_plus); high-level device model/OS info (device_info_plus, used only to derive a hashed local device fingerprint for trial-abuse prevention — not transmitted).

3. Every network connection the app makes

This table is the complete and exhaustive list of every host the Baby Bloom app contacts on its own. (Hosts opened in your browser when you tap a hyperlink, e.g. a Play Store URL or an affiliate product page, are listed at the end.) If a destination is not on this list, the app does not contact it.

Destination When What is sent Why
babybloom-api.vargary.com
(Vargary's own backend)
Only when you are signed in. Triggered on app start, on resume, after edits, and periodically. Email + password (only during sign-up / sign-in / password reset); session token thereafter. Your baby tracking records — feedings, sleeps, diapers, growth measurements, milestones, mood entries, activities, diary text and photos (photos are stored as base64-encoded JPEG, max ~128 KB each), care-team invitations and shared-access permissions, Google Play purchase receipts, referral codes. Cloud backup, multi-device sync, care-team sharing, subscription validation, referral rewards.
o4507925203845120.ingest.de.sentry.io
(Sentry, EU region — Functional Software Inc. via Sentry GmbH)
On every uncaught exception, ANR, and a sample of performance traces (the app currently uses 100% sampling). Stack traces, breadcrumbs (recent in-app events such as "opened sleep screen"), device model, OS version, app version, locale, and a Sentry-generated install ID. No baby tracking content, no email, no password. Crash and performance monitoring so we can fix bugs. EU region chosen to keep data inside the EEA. Sentry's privacy notice: sentry.io/privacy.
Firebase Analytics (Google) — endpoints under app-measurement.com / firebaseinstallations.googleapis.com On every app open and at every custom event in release builds. Debug builds do not send analytics. The standard Firebase Analytics payload: a Firebase Installation ID, device model, OS version, app version, country, language, and the event name + parameters (e.g. article_read_start, subscription_purchase_attempted, app_backgrounded). The Android Advertising ID is not collected — the app does not declare the AD_ID permission. No baby content, no email, no password. To understand which features are used and where users drop off, so we can prioritise improvements. Google's Firebase data-handling: firebase.google.com/support/privacy.
Firebase App Check (Google) — endpoints under firebaseappcheck.googleapis.com via the Play Integrity API Before talking to our backend. A Play Integrity attestation generated on-device by Google Play Services. No content of yours. Anti-abuse — to give our backend confidence that requests come from a genuine app on a genuine device.
api.open-meteo.com (Open-Meteo, free public weather API) Only when the home-screen weather widget is enabled and you have granted location permission. Roughly once per hour while in the foreground. Latitude and longitude, with no API key and no identifier. Fetch current temperature, weather code, wind speed, humidity and UV index for the dressing-suggestion card. Open-Meteo privacy: open-meteo.com/en/terms.
Google Play Billing & Play Services (Google) — endpoints inside the Play Services framework When you start, complete or restore a purchase; when the app prompts an in-app review (in_app_review) or checks for an in-app update (in_app_update); when Wear OS is paired (Data Layer API). The data that the Google Play SDK on your device exchanges with Google — purchase tokens, order IDs, product IDs, review API hand-off, update-availability check. Sell subscriptions, ask for a Play Store rating, prompt for app updates, and sync the watch face data to a paired Wear OS device peer-to-peer via Google Play Services.

User-initiated browser hand-offs. When you explicitly tap one of these, your default browser opens that URL. The Baby Bloom app itself does not exchange data with these hosts:

If a diary entry or article references an external image URL, that image is loaded over the network from the URL itself — Baby Bloom does not proxy it.

4. Third-party services and SDKs

Vargary backend (babybloom-api.vargary.com)

Operated by Vargary. Hosts the optional cloud sync, account system, care-team invitations, referral rewards, and Google Play purchase verification. The backend is the only place — besides your own device — where a copy of your baby tracking data exists, and only if you signed in. Without an account, no baby tracking data is sent to this server.

Google Firebase — Analytics & App Check

We use Firebase Analytics for product-usage metrics in release builds. We do not use Firebase Crashlytics, Firebase Cloud Messaging (FCM), Firebase Authentication, Firestore, Firebase Storage or Firebase Remote Config. Firebase App Check (Play Integrity provider) is used to attest requests to our own backend. Firebase's role and data handling are described at firebase.google.com/support/privacy.

Sentry (Functional Software Inc., served from Sentry GmbH's EU region)

We use Sentry for crash and performance reporting. Sentry receives stack traces, breadcrumbs, device and OS metadata and the app version. It does not receive your baby tracking content, email or password. We selected Sentry's EU ingest endpoint so the data stays inside the EEA. Sentry's privacy notice: sentry.io/privacy.

Open-Meteo

A free public weather API. Receives only the latitude and longitude when the optional weather feature is active. No API key, no account, no identifier. open-meteo.com/en/terms.

Google Play (Billing, In-app Review, In-app Update, Play Integrity, Wear OS Data Layer)

Standard Google Play Services components on Android. The Play SDK handles the purchase flow directly with Google — Baby Bloom never sees your payment instrument. policies.google.com/privacy.

Amazon Associates and Shein

External affiliate partners. Baby Bloom does not exchange any data with them itself; tapping an Essentials / Articles product card opens your default browser to a search URL. The Amazon URL carries our affiliate tag babybloom01-20; the Shein URL does not. Once you are on their site, their privacy policies apply.

What we do NOT use

For transparency, the following are commonly bundled by similar apps but are not present in Baby Bloom: Firebase Crashlytics, Firebase Cloud Messaging (FCM) / OneSignal / any other push-notification server, Mixpanel, Amplitude, Segment, PostHog, AppsFlyer, Adjust, Branch, RevenueCat, Google ML Kit, speech-to-text / text-to-speech, OAuth sign-in (Google/Apple/Facebook), Facebook App Events / Meta SDK, Google AdMob / Google Mobile Ads / any advertising SDK, Firestore, any AI / LLM provider. Baby Bloom does not declare the Android Advertising ID permission, so neither Firebase Analytics nor any other component receives the Android Advertising ID. The google_fonts package is included but is configured with allowRuntimeFetching = false, so no fonts are downloaded from fonts.gstatic.com at runtime.

5. Where your data lives and how it is protected

On your device

All baby tracking data is stored in a local SQLite database at <app documents>/databases/babybloom.db, created and accessed via the sqflite plugin. App settings, onboarding state, notification preferences, cached weather, the streak counter, last-export timestamp, hashed device-trial fingerprint and the authentication token (if signed in) are stored in Android's shared_preferences.

Photos you attach to diary entries, milestones or growth measurements are downscaled (max 1920 px) and re-encoded as JPEG at ~128 KB or less, then stored as base64 strings inside the same SQLite database. Original photo files are not retained by the app.

OS-level protections

Both the database and the preferences files live inside the app's private storage area. Android's app-sandbox model prevents other installed apps from reading them. On modern Android devices, the user-data partition is encrypted at rest by the OS while the device is locked. We rely on these OS-level protections; the app does not add its own database encryption layer, and authentication tokens are stored in the same shared_preferences store rather than in a dedicated encrypted keystore — so a device that is unlocked and rooted could expose those values. Keep your device's lock-screen passcode / biometric enabled.

On our backend (only if you sign in)

If you create an account and sign in, the tracking data described above is uploaded to babybloom-api.vargary.com over HTTPS (TLS) and stored server-side under your account so it can be restored on another device, shared with people you explicitly invite, and recovered after an uninstall. Passwords are never stored in plaintext.

If you uninstall

Uninstalling the app removes the entire local database, the preferences file and any cached files — Android deletes the app's sandboxed storage as part of uninstall. If you were signed in and want the server-side copy removed too, see Section 7.

6. Data sharing

We do not sell, rent, trade or otherwise transfer your data, your baby's data or any data we hold about you to any third party for their own marketing or commercial purposes.

The only outbound data flows are the ones listed in Section 3: our own backend (only if you sign in), Sentry (crash/perf), Firebase Analytics (events), Firebase App Check (attestation), Open-Meteo (lat/lon when weather is on), Google Play (billing/review/update/integrity), and Wear OS Data Layer (peer-to-peer to your paired watch).

If you explicitly invite a co-parent or caregiver to your baby via the in-app care-team feature, and they accept, then the tracking records you've chosen to share are visible to that person inside their own Baby Bloom app. You can revoke their access at any time from the Care Team screen — once revoked, their app no longer syncs your baby's data on the next sync cycle.

7. Data retention

8. Children

Baby Bloom is a tool that adult parents and caregivers use to track information about their baby. The baby is the data subject; the account-holder using the app is an adult user (typically a parent or other legal guardian). The app is not designed for, and is not intended to be used by, children themselves.

If you choose to use Baby Bloom without an account, no information about your baby ever leaves your device through Baby Bloom. The cloud sync, care-team sharing and backup features only become active when an adult account-holder creates an account and signs in, which constitutes that adult's consent (and, as applicable, their consent as the baby's legal guardian) for the baby tracking records to be sent to our backend so those features can work.

The diagnostic and behavioural signals collected by Firebase Analytics and Sentry (see Sections 3 and 4) describe how the adult user interacts with the app — they do not include the baby's identity, the baby's name, photographs of the baby, or any tracked-event content.

If you believe a child has used Baby Bloom directly without an adult's involvement, please contact us at vargarytech@gmail.com and we will delete the associated account on request.

9. Your rights (incl. GDPR / EEA users)

If you are located in the European Economic Area, the United Kingdom or Switzerland, you have the following rights under the EU General Data Protection Regulation (GDPR) and the equivalent UK and Swiss laws:

To exercise any of these rights, email vargarytech@gmail.com from the address associated with your account. We aim to respond within 30 days.

Data controller

The data controller for the purposes of GDPR is Vargary. Contact: vargarytech@gmail.com.

Legal bases for processing

International transfers

The Vargary backend operates inside the EU. Sentry data goes to Sentry's EU region. Google (Firebase Analytics, Firebase App Check, Google Play) is US-headquartered and may transfer personal data outside the EEA; in those cases Google relies on the European Commission's Standard Contractual Clauses and / or the EU–US Data Privacy Framework. Links to Google's notices are in Sections 3 and 4.

Supervisory authority (Hungary)

If you are unhappy with how we handle your data, you have the right to lodge a complaint with the Hungarian data-protection supervisory authority:

Nemzeti Adatvédelmi és Információszabadság Hatóság (NAIH)
Address: 1055 Budapest, Falk Miksa utca 9-11., Hungary
Web: https://naih.hu/

EEA residents outside Hungary may also contact their local supervisory authority.

10. California residents (CCPA / CPRA)

If you are a California resident, the California Consumer Privacy Act, as amended by the California Privacy Rights Act, gives you the right to know, the right to delete, the right to correct, and the right to opt out of the "sale" or "sharing" of your personal information.

We do not sell your personal information in the meaning of CCPA / CPRA. We do not "share" your personal information for cross-context behavioural advertising in the meaning of CPRA. The third-party SDKs we use (Section 4) act as service providers in the meaning of the law; they receive only the data described in Section 3 and are contractually bound by their own terms not to use it for their own marketing purposes.

To exercise any CCPA / CPRA right, contact vargarytech@gmail.com. We do not discriminate against users who exercise their privacy rights.

11. Changes to this policy

We will update this page when our data-handling practices change. The "Last updated" date at the top of the page reflects the most recent revision. Material changes (a new third-party SDK, a new data flow, a change to retention) will be summarised at the top of the page for at least 30 days. Trivial editorial fixes are simply applied.

12. Contact

Questions, data-rights requests, deletion requests, security reports — please email:

vargarytech@gmail.com

Postal correspondence can be requested via the same address.