The trainee app is the Expo project in mobile/. Trainees sign in with a phone number and a WhatsApp code, then follow workouts, log meals, fill forms, read studio content and track their body metrics. The app talks only to the core API under /v1/trainee/* with a bearer token. The same source also builds for the web. That export is embedded in the coach dashboard as a read-only live preview of a trainee’s app.

Stack and versions

Versions come from mobile/package.json on the dev branch. Expo experiments enabled in app.json: typedRoutes and reactCompiler.

Folder map

ios/ and android/ are generated by prebuild and are in .gitignore. Native configuration is only durable when it lives in app.json, a config plugin, a patch or modules/.

Features

Where to start reading

Route tree

Every route file and the gates in the layouts.

Feature modules

The folder convention with a worked example.

API client

Headers, retries, errors and the bearer token.

State management

Zustand stores, React Query, and what is persisted where.

Environment variables

.env and .env.production are ignored by Git. .env.example is the committed template.

Run it locally

In development the API base URL is detected from the Metro host, so a phone on the same network reaches the backend on port 3031 without any env file. See API client.

What the old notes get wrong

mobile/README.md and mobile/docs/*.md were written for an early scaffold. The code has moved on in these places.