← Work

Mobile app · product

Serenity

A mental wellbeing app whose agent knows the user's journal, the exercises they have finished and their moods over the past few weeks. Text or voice conversation, guided audio exercises, daily tracking and trend analysis.

01

The problem

A wellbeing assistant that forgets everything between sessions cannot support someone over time.

Most of these assistants are chat windows with no memory. The user describes their week, gets generic advice, and the next day the conversation starts again from nothing. That behaviour comes from the way the product is built: nothing written the week before is available when the next conversation begins.

What helps is continuity. Noticing that the bad days often land on a Sunday, remembering the exercise that worked, pointing out that the user has been doing better for three weeks. None of those observations is possible without a stored history and a way to hand it to the model.

02

What I built

An agent that has context

Before each conversation, the app assembles a context from the user's own data: recent mood ratings, journal entries, finished exercises, stated goals. The agent therefore starts out knowing who it is talking to. Conversations are kept and titled automatically.

Replies arrive as a stream, word by word, so the user watches the agent answer instead of waiting in front of a frozen screen.

The audio exercises

Six guided exercises: breathing, grounding, body scan, gratitude, letting go, energy. They are delivered as high-quality speech rather than text to read, because a breathing exercise asks you to close your eyes.

The journal and the insights

Daily mood rating, emotion tags, free-form notes, full history. On top of that: seven- and thirty-day trend charts, averages, and detection of the good and bad stretches. The same data feeds the agent's context, where it serves as memory.

One codebase, two platforms

iOS and Android from a single React Native project, with the whole product journey: navigation, notifications, charts, smooth animations, sharing, reactive dark mode and subscriptions handled through in-app purchase.

03

What was hard

Assembling the context without blowing it up

Sending everything to the model is impossible, because the journal keeps growing. You have to decide what to keep: trends rather than raw entries, recent rather than old, aggregates rather than detail. That selection happens in the app's own code, before the call to the model.

The limits of a mental health app

The app states its scope plainly: it does not diagnose and it does not replace a professional. The agent declines to play therapist and points to real help when a subject goes beyond what software can carry. These guardrails were defined before a single screen or agent instruction was written.

Staying smooth on mobile

The response stream, the animations and the charts compete for the same thread. Animations have to run on the native side, the screen must not rebuild on every incoming word, and the theme has to stay reactive without re-rendering the whole component tree on each change.

Selling a subscription without pushing

In-app purchase brings its own rules: purchase restore, entitlement syncing, free trial, changing devices. On a subject this personal, the limits of the free version also had to stay legible and never leave the user uncomfortable.

What I take from it

On this kind of product, the quality of the answers comes mostly from the data you give the model to read. Building the history, storing it and choosing what goes into each conversation is more work than the agent integration itself.

04

The stack

A mobile app to build?

I take the project from the idea through to publication on the App Store and the Play Store, subscriptions included. Tell me about the app you want to put in your users' hands.

contact@adelzemiti.com