The thesis: the body is a system
Most training apps only count sets and reps. Berin starts from a different premise: strength is just one signal, sitting next to your sleep, your rest, your stress and your recovery. Before deciding how to train today, you should understand the context of your body. That idea, train with context, is the whole product.
It began as a tool for one very demanding user: me. It runs on my own iPhone, reads my Apple Health data, and knows my training history, my routines and my medical reports.

Berin Guide: an agent that knows your full context
The star of the app is Berin Guide, an AI agent that has read everything Berin knows about you: your injuries, your sleep, your HRV, your training and your recovery. Ask it for a routine and it builds a complete one — frequency, volume and progression grounded in evidence, and filtered through your constraints. Every morning it also gives you a recommendation for the day based on how you actually slept and how the week is going.
The rule that makes it trustworthy: the AI proposes, you approve. Nothing agentic is applied without an explicit yes. Each change arrives as a readable card you accept or reject.


Berin Guide proposing a routine · the daily plan on Home. Real app, demo data.
Inside the app
Berin is organised around the training process, not just a list of workouts: a Home that frames your day, editable Routines with real methodology, a live Session timer, and a Sleep view that turns Apple Health into something you can read and act on.


Routines with criteria · understanding last night’s recovery.
Safety is a first-class citizen
This is the part I care about most. My own medical profile — lumbar disc protrusions and cervical findings — lives in the data model, not in a note somewhere. The app surfaces per-exercise warnings, and the AI never proposes anything that contradicts those limits: the constraints travel inside every prompt. A training agent that can hurt you is worse than no agent at all.
How I built it
Native Swift + SwiftUI + SwiftData, iOS 17+, with no external SDKs. The AI is called straight
over URLSession — raw HTTP to the model, key stored in the device Keychain. Health integration
is read-only: Berin never writes to Apple Health. The design system is a single source of
truth (a dark, “obsidian + aurora” palette) so the whole app stays coherent.
Fun bit of history: it shipped its name three times in one day, Gymbro → Vorin → Berin.
What I learned
Building an agent that touches something as personal as your body taught me that trust is a feature you design, not a disclaimer you add. The approval step, the visible reasoning, and the hard medical guardrails are what make the AI usable at all — the model was the easy part.
There’s a promotional landing that goes deeper into the thesis and the modules — you can explore Berin here.