Work · Expo · React Native

Hey Rosalie — privacy-first baby tracker for parents

A Polish, privacy-first baby tracker for parents: feeding, sleep, medicines, vaccinations, and growth. Built as a native mobile app after an earlier web prototype on Firebase was abandoned.

My role Product owner and builder: native app architecture, domain logic tests, local storage model, optional encrypted sync, and the local translation CLI.

Stack Expo · React Native · TypeScript · Jest (domain logic) · local device storage · optional E2E encrypted sync · Ollama (local LLM CLI for PL→EN UI)

Status Coming soon to the App Store

Site heyrosalie.app

Context
Parents needed a calm way to log feeding, sleep, medicines, vaccinations, and growth without turning care into a surveillance product. An earlier web prototype on Firebase proved the concept but not the trust model. Constraint: keep the primary store on the device; any sync between parents must be optional and end-to-end encrypted; the app is a log, not advice.
Intervention

Rebuilt as a native Expo / React Native + TypeScript app with Jest covering domain logic, then added tooling that keeps translation offline.

Phase 1 — Native app, local store

Shipped the tracker as a native mobile app. Core events (feeding, sleep, medicines, vaccinations, growth) live in local device storage so the day-to-day log works without depending on a cloud UI.

Phase 2 — Optional E2E sync between parents

Added an optional end-to-end encrypted sync path so two parents can share the same log when they choose to — without making sync the default store.

Phase 3 — Local PL→EN UI translation CLI

A separate CLI walks the UI strings and translates PL→EN with a local LLM via Ollama. Translation never goes through a cloud model.

Risks & how they were handled
  • Trust / privacy drift → local-first store; sync is optional and end-to-end encrypted.
  • Domain bugs in care logs → Jest on domain logic before UI polish.
  • Cloud lock-in for i18n → Ollama CLI keeps PL→EN translation on a local model.
What I'd do differently
  • Freeze the event schema earlier so sync payloads stay boring.
  • Keep the translation CLI in the same monorepo CI path as the app from day one.
Outcome
Before: a Firebase web prototype that proved the feature set but not the privacy posture parents expect. After: a native Expo / React Native + TypeScript app with local storage, optional end-to-end encrypted sync between parents, Jest on domain logic, and a local Ollama CLI for PL→EN UI strings. Status: Coming soon to the App Store.

System map

Parent logs feeding or sleep

Saved locally on the phone

device storage

App

Encrypted sync (optional)

E2E

What it does

Keeps a day-to-day care log on the phone

Shares a private child history when parents opt in

UI in Polish and English

Local-first care logs, with optional end-to-end encrypted sync between parents.

What shipped

  • Native iPhone app Tracker for feeding, sleep, medicines, vaccinations, and growth — Expo / React Native + TypeScript.
  • Parent-to-parent sync Optional end-to-end encrypted sync so two parents can share the same log.
  • PL and EN interface UI strings translated with a local Ollama model — no cloud LLM for i18n.

Stack Expo React Native TypeScript Jest local storage E2E sync Ollama CLI

Coming soon to the App Store ↗

← Kids apps Next: Warehouse →