Tagline (one-liner):

ReBloom turns invisible physical healing — recovery, skin, hair — into a private garden you watch grow, from AI scans you fully control.

Inspiration

Physical healing is slow and easy to miss. Someone in substance recovery, clearing acne, or regrowing hair is genuinely improving — but day-to-day the change is invisible, so motivation collapses right before results show. Existing "skin scanner" apps make this worse: they're clinical, they push detection and diagnosis language, and many quietly surveil users. We wanted the opposite — something that makes healing visible, encouraging, and completely private — and that finally serves the recovery community, which no mainstream app treats with dignity.

What it does

ReBloom is a private, local-first mobile app that turns healing into a garden. You enroll in one or more healing journeys — Recovery, Acne Care, Redness & Sensitivity, Hydration, Dark Spots, Under-eye, or Hair Regrowth — and each grows its own bloom from periodic AI skin/hair scans.

  • One scan, many journeys: a single face scan is analyzed once via Perfect Corp's YouCam skin API and fans out to every enrolled skin journey, each computing its own 0–100 bloom score.
  • A garden home: one bloom per journey, growing from a seed to a full flower as your trend improves.
  • Encouragement, never diagnosis: every surface carries one honest line — not medical advice, not detection, not monitoring — and concern data is reframed into positive language (clear skin, balanced oil, calm skin).
  • Comfort layer: fabric suggestions tuned to how sensitive skin looks right now.
  • Radically private: local-first by default, encrypted at rest, opt-in sync only, images never stored server-side, full data export (scores, never photos), and one-tap delete-everything.

How we built it

  • Mobile: Expo (React Native, SDK 57), TypeScript strict, Expo Router, victory-native for trends.
  • AI: Perfect Corp YouCam Skin Analysis (14 HD concerns), called through Supabase Edge Functions (Deno) so the vendor key stays server-side and images are never persisted. All analysis sits behind one AnalysisProvider interface so the vendor can be swapped without touching features.
  • Local store: op-sqlite + SQLCipher, with the encryption key generated by a CSPRNG and held in the device Keychain via expo-secure-store.
  • Backend: Supabase Postgres with owner-only Row-Level Security for opt-in encrypted sync.
  • Monetization: freemium via a PurchasesProvider seam (RevenueCat adapter written, dependency-injected).
  • Design system — "Bloom Board": Fredoka + Nunito type, pastel per-track hues, and selectable garden styles (Blooms / Grove / Zen, plus a Pro custom-emoji skin) so the app isn't gender-locked.
  • The track model: a healing journey is config, not code — a TrackDefinition with its concerns, cadence, scoring, and copy — so a new journey is data, not a feature branch.

Challenges we ran into

  • Serving the recovery community without surveilling them. We designed against prior-art mistakes (surveillance-y sobriety apps), landing on local-first, opt-in-everything, and framing that is relentlessly non-clinical.
  • Vendor lock-in risk: our sole AI vendor announced a going-private merger mid-build, so we put all analysis behind one swappable provider interface.
  • Cost that scales with scans, not journeys: the single-scan fan-out plus client- and server-side cadence caps keep paid API units under control.
  • Making encryption robust: we hardened the encrypted store to recover gracefully from a key/DB mismatch (recreate a fresh encrypted store) instead of ever silently falling back to unencrypted storage.

Accomplishments that we're proud of

  • A genuinely private, encrypted, local-first health-adjacent app — not privacy as a marketing line, but as an architecture.
  • A config-driven multi-track engine: 7 healing journeys, each its own bloom, with zero bespoke per-track code.
  • A warm, distinctive design system with theming and accessibility (the bloom speaks as one VoiceOver element), that dignifies recovery instead of clinicalizing it.
  • End-to-end working loop verified on an iPhone 17 Pro: real scan → real scores → growing garden.

What we learned

Responsible framing is a feature, not a disclaimer. "Visible healing, never detection" reshaped every screen, the data model, and even the color language. We also learned how much leverage a single well-drawn abstraction (the TrackDefinition) gives you: it turned "add a whole new health vertical" into "add a config object."

What's next for ReBloom

  • Turn on the written-but-deferred integrations: RevenueCat billing, Sign in with Apple, hair-density and apparel virtual try-on once those endpoints are confirmed.
  • TestFlight beta and recovery-clinic pilots.
  • Skia-rendered trend charts and richer bloom animations.

Built with

Expo · React Native · TypeScript · Expo Router · Supabase (Edge Functions, Postgres, Auth, RLS) · Deno · Perfect Corp YouCam API · op-sqlite · SQLCipher · RevenueCat · victory-native · EAS

Built With

Share this project:

Updates