The problem
Pregnancy apps are ad-heavy, paywall-resentful and demographically generic. This one is built around a named, practising NMC-registered midwife, and takes seriously that the questions other apps miss are not evenly distributed.
What it does
A week-by-week journey for weeks 1–41 across mobile and web: clinically reviewed weekly content, an interactive 3D fetal model for every week that can be rotated, zoomed and recoloured across a ten-tone skin palette, urgent-symptom guidance that routes to NHS 111 or 999, and a moderated community.
How it's built
A release gate that fails until a human has actually reviewed
A midwife byline is a claim, so it is enforced in CI rather than trusted. A read-only query over the live dataset exits non-zero when a published week is not explicitly approved, or is missing a named reviewer, credentials, a review date or a structured primary source — and it also fails when content changed after review. The preflight failing is the expected default until review happens.
A durable push queue with compare-and-swap leases
Notifications commit a pending row in the same transaction as the notification itself, then fire a best-effort kick the worker acknowledges immediately. Claiming uses a compare-and-swap guarded on status, so two workers cannot claim the same job and a crashed worker’s lease expires rather than stranding it.
Realtime carries IDs only; Postgres stays canonical
HTTP remains the only write path. A mutation commits first, then publishes a best-effort, versioned, ID-only invalidation event — no bodies, no names, no health data on the realtime channel. That avoids a split-brain data model, and means a dropped event costs a stale cache rather than a lost write.
Forty-one 3D models, byte-identical across platforms
Each week ships its own model, rendered through React Three Fiber against a native WebGPU backend on mobile — replacing an earlier GL approach that only presented a frame once the gesture ended, which made it feel like an image rather than an object.
Safety routing that refuses to guess
A dial action is only ever created when the authored instruction names a public number. "Call your maternity unit" does not become a tel: link to a number the app inferred — because guessing which number that is, for this user, is exactly the failure a pregnancy app cannot have.
The hard part
Almost every hard decision here is a safety or truthfulness constraint expressed as engineering rather than copy. The clinical-claims problem is the clearest: the product’s entire differentiator is a named midwife’s byline, so "reviewed" is made machine-checkable — approval, named reviewer, credentials, review date, structured primary sources, and a changed-after-review check — and the build is expected to fail until that is genuinely true.
Stack
- Next.js
- React Native
- Expo
- react-three-fiber
- TanStack Query
- Sanity
- RevenueCat
Built, shipped and maintained by me. Try Bump Circle, or see the rest of the work.
