Case study · 2024 — Present
Ohga — AI Fitness & Wellness Platform
Independent consumer product — adaptive, privacy-aware wellness
Independent builder · Independent
The problem
The problem
Wellness apps drown users in generic advice and dashboards. People need one clear action that adapts as their biology changes, backed by a real backend and observability — not a demo app with a Firebase toy backend.
Outcomes
- Flutter client (31 feature modules) on a Go/Fiber API with Postgres, Redis, and NATS
- 470+ form-guided exercises, AI food-photo analysis, and adaptive multi-week programs
- Next.js/React admin console for ops; Terraform-provisioned AWS infra behind a CodeQL/secret-scan CI gate
Product
Five pillars: nutrition (photo/barcode/voice logging), movement (adaptive AI-built workouts from a 470+ exercise library), recovery/focus (guided breathing), goals/habits (streaks, quests), and social wellness (challenges).
AI copilot coach with tool-calling agents and voice input; wearable sync across Apple Health, Health Connect, WHOOP, Oura, Garmin, and Fitbit.
Architecture
Go 1.26 / Fiber backend with 60+ domain packages (auth, workout, nutrition, ai, agent, gamification, wearable, subscription), Postgres via pgx, Redis-compatible cache, NATS for events, WorkOS for auth, OpenTelemetry + Prometheus for observability.
Next.js 16 / React 19 admin console (Radix/shadcn, Tailwind v4) over the same API; Terraform modules for App Runner, Aurora Serverless v2, ElastiCache, and CloudFront; GitHub Actions gate on lint, test, security, CodeQL, and secret scanning before deploy.
Key tradeoffs
Backend
Chose: Purpose-built Go/Fiber API on Postgres + Redis + NATS
Rejected: Firebase/BaaS for speed
Domain logic (workouts, nutrition scoring, gamification) outgrows a BaaS quickly; owning the API pays off in SLA control and cost at scale.
Data residency
Chose: On-device processing bias where feasible
Rejected: Cloud-only personalization
Trust is the product in wellness; leakage kills the brand.
What was hard
- Personalization without invasive telemetry
- Keeping a 31-module Flutter client and a 60+ package Go backend in sync as the product grew
What I would change
- Public metrics once beta cohort is large enough
Artifacts