Bloom — Period Companion
A warm, private period companion for adults — cycle tracking, daily check-ins, a cycle-aware AI friend, partner pairing, and calming mini-games. Private. Local. Yours.
Inspiration
Period trackers exist, but most of them treat half the experience as an afterthought: they hoard your most intimate health data in the cloud, talk at you with generic tips, and leave partners completely out of the picture. We wanted to build the opposite — Bloom, a period companion that is private by design, genuinely understands your cycle, and brings your support system along without oversharing.
What it does
Bloom is a complete cycle companion for Android:
- Today tab — your home base: current phase (e.g. follicular, day 8 of ~28), a daily insight, next-period countdown, one-tap mood logging, and a full check-in (flow, pain, symptoms, PMDD awareness, notes).
- Calendar — past cycles plus predicted period, fertile, and ovulation windows, color-coded by phase.
- Bloom Chat — a cycle-aware AI companion. It answers using your actual logged data ("since you're on day 8…"), with an offline rule-based fallback so it never goes dumb without internet. Free tier includes 10 AI chats/day.
- Connect — pair with a partner via a short code. They see your phase and only what you choose to share — never private health data. Includes partner messaging, pings, and even online Tic-Tac-Toe.
- Sooth — calming mini-games matched to your cycle phase: affirmation petals, guided breathing, color-the-calm orbs, worry release, body-scan pauses.
- You — patterns, cycle history, symptom/mood trends, doctor-ready reports, and premium (Google Play + Razorpay billing).
All data lives in on-device SQLite (encrypted secrets in Secure Store); cloud sync via Supabase is strictly opt-in.
How we built it
Stack: Expo SDK 57 + expo-router (TypeScript), expo-sqlite +
expo-secure-store for local-first data, an Express + PostgreSQL (Supabase)
backend, NVIDIA NIM (stepfun-ai/step-3.7-flash) for the AI companion,
Socket.IO for realtime partner features, and EAS Build for the production APK.
Prediction is deliberately transparent math, not a black box. For a user with average cycle length (\bar{L}) and last period start (P_{last}):
$$P_{next} = P_{last} + \bar{L} \qquad O \approx \bar{L} - 14$$
where (O) is the estimated ovulation day and the fertile window is ([O-5,\, O+1]). For irregular cycles we widen this into a gentle likely-range instead of pretending to know one exact day — honesty over false precision.
The AI layer grounds every reply in logged context (phase, day, recent symptoms) and degrades gracefully: cloud AI → cached guidance → fully offline rules. The whole onboarding (role, birthday with 18+ gating, last period, typical lengths, symptoms) seeds the model so day-one answers already feel personal.
Challenges we ran into
- Offline-first + optional cloud meant designing every feature to work with zero network, then layering sync without conflicts.
- Privacy-preserving partner sharing — building a pairing model where supporters get useful phase context but raw health data never leaves the device.
- Making predictions honest for irregular cycles instead of confidently-wrong dates.
- Shipping a real APK: EAS production builds, Play vs. side-loaded (Razorpay) billing flavors, and wrangling the Android emulator for our demo video.
Accomplishments that we're proud of
A complete, installable app — not a mockup: real auth, real predictions, a genuinely cycle-aware AI chat, partner pairing with an actual generated code, and a 2-minute demo video recorded end-to-end on an emulator with AI voiceover.
What we learned
Local-first architecture forces better product thinking (every screen must work offline), small transparent models beat black boxes for health trust, and privacy isn't a feature — it's the foundation the whole app stands on.
What's next for Bloom
iOS release, deeper pattern insights (PMS/PMDD trend detection), clinician-reviewed content, more Sooth exercises, and community language packs via the existing i18n setup.
Built With
- ai
- android
- eas
- expo-router
- expo.io
- express.js
- femtech
- google-play
- health
- node.js
- nvidia-nim
- postgresql
- privacy
- razorpay
- react-native
- socket.io
- sqlite
- supabase
- typescript
Log in or sign up for Devpost to join the conversation.