Ekvi — endometriosis symptom-tracking app on iOS and Android


Constraint
The box they were trapped in
Endometriosis is a chronic condition where the data that matters — pain through the cycle, mood, sleep, what helped, what the period actually looked like — is exactly what generic period trackers don't capture well. It's also exactly what specialists ask about, and what the patient is asked to remember between appointments. The client wanted a tool women with the condition could open quickly, log honestly without friction, and bring to a doctor as a record — not a marketing wellness app, not another productivity tracker dressed up in pink.
Approach
How we attacked it
Flutter for both iOS and Android so one team can ship and maintain both stores. Firebase for auth, sync, and notifications, with a NestJS REST layer for the structured data the app needs to query. Provider/BLoC state on the app side. Daily logging covers the dimensions specialists actually ask about — pain location and intensity, mood, sleep, menstrual flow, activity — with the UI tuned for two-tap logging on a flare day. Weekly pattern surfacing turns the diary into a signal the user can act on; an export view packages the data for the next consultation.
Decisions
What we picked, and what we rejected
Endometriosis-specific scope, not a generic period tracker
Generic trackers cover the data they cover well. This app's job is the data shape specialists ask about — pain location and intensity through the cycle, flare timing, activity correlations. Narrowing the feature scope was the call: fertility tracking, generic wellness scoring, and adjacent features stayed out so the core logging is unmistakably right for the condition.
Flutter for one codebase across iOS and Android
A small team shipping to both app stores can't afford to maintain two native codebases of essentially the same app. Flutter gets us to parity on both platforms with one engineering effort, leaves enough customization at the platform layer for the bits that need it, and keeps the release cadence on both stores in sync.
Firebase + NestJS over a fully custom backend
Auth, sync, push notifications — Firebase already does all of these well at the team's size and scope. Rebuilding a JWT pipeline and a sync engine would have been weeks of work the user never sees. NestJS handles the structured queries Firebase isn't shaped for. The team's time goes into the logging UX where it actually matters.
Weekly pattern surfacing, not daily
Daily "here's what you logged yesterday" is noise — the user already knows. Weekly is the cadence at which a flare pattern, an activity correlation, or a sleep effect actually emerges from the data. Pattern surfacing on the right cadence is what makes the diary feel useful instead of feeling like one more thing to keep up with.
Trade-off
What we didn't build
We rejected building this as a generic women's-health tracker. Period trackers exist; this app's job is the specific data shape of endometriosis — pain through the cycle, flares that last hours not days, activity-correlation questions a specialist will ask. Narrowing scope meant saying no to obvious adjacent features (fertility tracking, generic wellness scoring) so the core logging stays unmistakably the right tool. We also chose Firebase over a bespoke auth/sync backend — team time goes into the logging UX, not into rebuilding what Firebase already does well.
Outcome
What changed after we shipped
Live on the Apple App Store and Google Play Store. Daily logging surfaces patterns over weeks of consistent entries instead of asking the user to compute them; the export view turns months of data into a record that's actually useful in a fifteen-minute consultation.
Talk to us
Have a similar project in mind?
Tell us what you're working on. We'll let you know whether it's a fit.