Otonia app icon

Consumer wellbeing

iOS & Android · React Native

A quiet place to go
when your head is loud.

Otonia is a cozy interactive world for everyday stress, overthinking, racing thoughts and trouble winding down. A living Zen Garden, breathing and sound studios, a journal, a companion and twelve original mini games, tied together by a system that learns what actually helps a given person.

Otonia is not a therapist, a doctor, a diagnostic tool or a replacement for professional mental health care, and it makes no medical claims. That boundary is written into the product, not just the marketing.

StatusBuilt and running on both platforms
PlatformsiOS and Android from one codebase
RenderingSkia and Reanimated on the UI thread
DataPostgres with row level security per user
The Otonia Zen Garden: a hand drawn koi pond with a bridge, waterfall, bamboo and lanterns under a bright afternoon sky

The Zen Garden is drawn on the GPU with Skia, so the water, the koi and the light keep moving at sixty frames per second while the rest of the app carries on.

The Otonia welcome screen
WelcomeThe tone is set before you tap anything
The Otonia home screen
HomeWhere you are, and what might help right now
The Otonia companion screen
CompanionSomeone to talk to at the hour it gets loud
The problem

Wellbeing apps ask a lot
of someone who has nothing left.

The moment you actually need one of these apps is the moment you have the least patience for it. Most of them open with an account wall, a survey, a subscription prompt and a list of tasks. That is a lot to ask of someone who opened their phone because they could not sleep.

The idea

Make the first thirty seconds
feel like relief.

Build a place rather than a program. Somewhere that looks calm before it asks anything, where the interaction itself is the intervention, and where the app quietly learns which of its rooms actually work for you instead of asking you to rate your mood on a scale of one to ten.

What we built

Rooms, not features.

01

The world

  • Zen Garden, a persistent scene that responds to time of day
  • Atmosphere and Zen mode
  • Twelve original mini games
  • Explore, for finding a room that fits the moment
02

The quiet tools

  • Calm Studio for breathing and grounding
  • Soundscape mixing
  • Journal with private entries
  • Reflection and reading
03

The loop

  • Companion conversations
  • Daily check in
  • Personalisation from what you actually return to
  • A clear path to real help when it is needed

The gallery

More of the world.

The Calm Studio screen offering three breaths, one minute and unclench exercises
Calm StudioPick a length. Nothing here needs finishing.
The Otonia soundscape mixer
SoundscapeLayered audio you mix yourself
The Otonia reflection screen
ReflectionShort reads for when talking is too much

The engineering

Calm is a performance problem.

An app that stutters does not feel calm, it feels broken. Every animated surface in Otonia is drawn with Skia and driven by Reanimated on the UI thread, so the world keeps moving even while JavaScript is busy doing something else.

Mobile client Expo Router for file based navigation, Zustand for app state, Skia and Reanimated for every game and animated scene
session tokens in the Keychain and Android Keystore
Supabase Auth with Sign in with Apple and Google, Postgres with row level security so one person's journal is unreachable from another person's session
verified on every commit
The gate Typecheck, lint, unit and component tests, plus a suite that applies every migration to a throwaway Postgres and proves the row level security isolation actually holds
Privacy

Isolation is tested, not assumed

A journal entry is about as private as data gets. Row level security policies are applied to a real Postgres instance in the test suite and checked from another user's session, so isolation is a passing test rather than a promise.

Reliability

It fails fast on purpose

The app refuses to start if required configuration is missing. A loud failure at launch is better than a quiet one later, in front of someone who came here to feel better.

Craft

Twelve games, no engine

Each mini game is hand built on Skia rather than dropped in from a game framework, which keeps the bundle small, the look consistent and the frame rate on the UI thread where it belongs.

The stack

What it is made of.

App
  • React Native
  • Expo and Expo Router
  • TypeScript
  • Zustand
Graphics & audio
  • React Native Skia
  • Reanimated
  • Expo Audio
  • Expo Blur
Backend
  • Supabase Postgres
  • Row level security
  • Supabase Auth
  • Secure Store
Quality
  • Jest
  • Migration and RLS suite
  • ESLint flat config
  • Typed database models

Next project

GuardLink

View case study

Consumer apps that feel considered.

If you have an idea that lives or dies on how it feels, we should talk.