Bloom
PrivateA mobile-first PWA for couples combining cycle prediction, encrypted partner collaboration, real-time mini-games, and personalized wellness recommendations.
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.