Skip to content
← Back to projects

Bloom

Private

A mobile-first PWA for couples combining cycle prediction, encrypted partner collaboration, real-time mini-games, and personalized wellness recommendations.

Bloom cycle prediction engine visualization

What I built

Bloom is a privacy-first couple's cycle tracker built as a mobile-first PWA. The core feature is a 3-phase prediction engine: Phase 1 bootstraps from population averages (28-day cycle), Phase 2 switches to weighted rolling averages of the user's own data after 4 cycles, and Phase 3 incorporates basal body temperature shift detection to confirm ovulation timing — reaching up to 0.95 confidence. Predictions regenerate daily via Vercel cron.

Sensitive fields (notes, shared notes) are encrypted at the application layer with AES-256-GCM using random IVs and authentication tags before hitting the database. Row-level security enforces user boundaries at the database level on top of that.

The partner system uses invite codes (8-char, 24-hour expiry) for linking, with encrypted shared notes and 5 real-time multiplayer mini-games synced via Supabase Realtime broadcast channels. A modular recommendation engine uses a provider + strategy pattern — contextual scoring (cycle phase, mood, weather, time of day) weighted at 0.45, content-based matching at 0.30, and collaborative filtering at 0.25 — with graceful provider degradation.

The business logic is fully framework-agnostic (zero React imports in src/lib/) and covered by a unit + E2E test suite. The architecture uses Prisma v7's direct PG adapter to eliminate binary overhead.

Tech stack

Next.js 16 (App Router, React 19, Server Components)Supabase (PostgreSQL, Auth, Realtime, Storage, RLS)Prisma v7 (direct PG adapter, no binary overhead)Zustand (4 domain stores)AES-256-GCM (field-level encryption for sensitive data)Recharts (cycle history + mood visualizations)Framer Motion (animations)shadcn/ui + Tailwind CSSVitest + Playwright (unit + E2E tests)Vercel (hosting + daily cron)

Key stats

3-phase prediction engine (up to 0.95 confidence)
AES-256-GCM field-level encryption
5 real-time multiplayer mini-games
Modular recommendation engine (3 scoring strategies)
30+ beta testers