Ealthiness: Building an AI Health App in React Native
Mood, sleep, meals and movement in one app, an AI trainer you can talk to, and coaches, doctors and psychologists behind it. How Ealthiness is built.
Ealthiness started as a fitness companion and grew into an AI-powered health app. People log the signals of an ordinary day — mood, sleep, meals, fasting, steps, runs and workouts — and get guidance back from an AI trainer and from a care team of coaches, doctors and psychologists. Companies and hospitals can bring it to their people as a programme.
We built the whole product: the mobile app, the API, the AI layer and the admin portal the care team works in. This post covers how it fits together and the decisions that mattered.
The stack
- Mobile: React Native with Expo and Expo Router, Stripe for in-app payments, Mapbox for routes and push notifications.
- API: NestJS on MongoDB through Mongoose, with Redis-backed job queues for anything slow, S3 for files and SendGrid for email. Sign-in uses JWT with Google and Facebook login.
- AI: Gemini as the primary model with fallback providers, a Weaviate vector store for context, and speech-to-text and text-to-speech for voice conversations.
- Admin portal: React Router with TanStack Query and shadcn/ui, with role-based permissions.
- Hosting: Docker images deployed on Railway.
We chose React Native for the usual reasons — one team, one codebase, both stores — and Expo because nothing in the app needed us to leave it. Our general approach is in building great React Native apps.
Logging that people keep doing
The app tracks many things: mood history, a sleep tracker, a meal and food log with diet plans, fasting windows, steps, runs and guided exercises. Each is only useful if people keep logging, so every check-in is designed to take seconds, and the app shows the signals side by side over time so a user can see for themselves how a week of better sleep lines up with how they felt.
MongoDB suits this data well. Each log type has its own shape and changes as the product learns, and documents let us add a field to a meal entry or a therapy session without a migration across the whole system.
An AI trainer you can talk to
The AI trainer is the centre of the app. Users ask it questions by text or by voice, and it answers with the user's own history in view: recent logs, plans and goals are retrieved from a Weaviate vector store and passed to the model as context, so advice is about this person rather than people in general.
Two decisions shaped it. First, no single provider is a dependency: Gemini handles conversations, and the service can fall back to other providers if a call fails. Second, voice is first-class. Speech is transcribed, answered and read back, which matters for an app people use mid-workout or while cooking.
The trainer guides; it does not diagnose. Anything that needs a professional belongs to the care team, which is the other half of the product.
A care team behind the app
Coaches, doctors and psychologists work in the admin portal. They manage patients and coach groups, set up diet, fitness and therapy plans, run sessions and follow progress. Companies and hospitals sit above them, so an employer or clinic can run Ealthiness for its own people.
With that many roles, permissions have to be explicit. Each role sees only what it needs — a coach sees their own clients, a psychologist their own sessions — and the rules live on the server, not in the UI. Health data is sensitive, and the safest design is one where the API refuses what the screen should never have asked for.
Work that happens in the background
Transcription, AI calls, embeddings and notifications are all slower than a normal API request. They run as jobs on Redis-backed queues, so the app stays responsive and a slow model call never blocks a user saving their dinner.
What we would repeat
- Make logging take seconds, or it stops happening.
- Give the AI the user's own context through retrieval instead of hoping a general model guesses well.
- Never depend on a single AI provider for a core feature.
- Put a human care team next to the AI, and keep the AI on the guidance side of the line.
- Enforce role-based access on the server from day one.
Building a health product?
Our AI in healthcare and mobile app development teams build products like Ealthiness, from the first prototype to store release and the backend behind it. See the Ealthiness project or contact us.
