Skip to main content
PORTFOLIO
All projects

Case study · 2024 — Present

Ohga — AI Fitness & Wellness Platform

Independent consumer product — adaptive, privacy-aware wellness

Independent builder · Independent

Personal product
FlutterDartRiverpodDriftGoFiberPostgresNext.jsTerraform

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