build
Meadow
Everything Flo puts behind a subscription, without the ads or the data sharing. Private cycle tracking for one person, or for two.
what it is
A private cycle tracker built around two roles rather than one user. One person logs (the tracker), and can optionally link a partner, who follows along with supportive context instead of a data dashboard. No ads, no upsells, no premium tier, no third-party analytics or tracking SDKs of any kind. The only external service the app talks to is the database, and that database is locked down with row-level security, so a person's data is only ever readable by that person and the partner they have explicitly linked to.
what is unique
A separate language layer for the partner view is the detail I am proudest of. The tracker's data is not shown to the partner raw, it gets translated: a dedicated copy module maps each cycle phase to plain-language, hedged guidance ("she is on her period, this can bring cramps, fatigue, or just wanting to slow down") paired with concrete, low-effort support prompts, rather than "period day 3 of 5, 60% confidence." Every line is deliberately hedged, because a probabilistic prediction stated with false certainty is worse than no prediction at all. The same forecast has to become two different products depending on who is reading it and what they will do with it. The prediction engine underneath is real, not a lookup table: rolling average cycle length, predicted next period, ovulation calculated backward from the next period rather than forward from the last one (the luteal phase is the clinically consistent part of the cycle, so the next period is the sounder anchor), fertile window, and current phase.
how it was built
React 19, TypeScript, Vite, Tailwind CSS v4, Supabase (Postgres, auth, row-level security, realtime), vite-plugin-pwa. The prediction module is pure, dependency-free, isolated from the database layer, and independently unit tested, so the logic can be reasoned about separately from how the data gets fetched. Privacy is enforced at the database rather than the UI: every table sits behind row-level security, and getting that right meant fixing real bugs, an RLS policy that recursed by querying the table it was protecting, a schema exposed at the API gateway but missing the schema-level grant Postgres also requires, a helper function that was public when it should have been internal-only. Linking is a share-code handshake, no email lookups and no contact syncing. Built as an installable PWA with an offline app shell, with API calls deliberately excluded from offline caching so the app never shows stale cycle data just to look fast. A library of roughly 20 articles across menstruation, contraception, diet, fitness, mood, relationships and general health each cites a real organisation (Mayo Clinic, ACOG, NHS, Cleveland Clinic, Planned Parenthood) and closes with a plain "general information, not medical advice" line.
gtm angle
In 2019 Flo was caught sending cycle and pregnancy data to Facebook and Google for ad targeting, and the FTC settled with them in 2021. People kept using it anyway, because the alternatives were not meaningfully better: same ad load, same upsell funnel, same paywall on features that should not be gated. I did not write a memo about that gap, I built the replacement. Before I would call this an AI product I would call it a personalization product, and those live or die on questions that have nothing to do with model quality: what information is worth asking for, why someone should hand it over, how a prediction gets communicated without overstating what is known, and what makes a person open the app again tomorrow. Meadow forced me to answer all four in a category where getting them wrong has a documented cost. That is the muscle I am building toward AI GTM work: trust, context collection, explainability, and a feedback loop worth returning to, applied before I ever touch a model.
live site
Visit the live site↗