Trainer software
you can read.
ScopeStrength is open source personal trainer software. Trainers manage clients, build programmes and track progress. Clients log their own workouts, weight and photos, and message their trainer. One Phoenix application, one PostgreSQL database, the whole thing in the repository.
No account needed for the demo. No feature flags. No phone-home.
Weekly Volume
Direct and effective sets per muscle group
- Chest5 direct, 2 effective
- Triceps2 direct, 4 effective
- Front Delts3 direct, 3 effective
- Biceps2 direct, 2 effective
- Lats4 direct, 2 effective
Why open source
Your data stays yours
Self-host and client names, weights, notes and photos live in your own database and your own file storage. Nothing leaves your machine.
Nothing is held back
The hosted version and the repository are the same code. There is no enterprise edition, and you can check.
Read the whole thing
One Phoenix app, not a service mesh. The progression rules, the volume maths and the access checks are each a single readable module.
Everything a coaching practice needs
Manage clients, write programmes, judge every set and watch the numbers move, all from one place. Nothing here is gated.
Clients
Add clients, record age, height, sex and notes, and keep dated session notes per client. Invite by email and they link to you at registration.
Programmes
Build programmes from templates, each holding exercises with sets, reps or a rep range, and RIR. Duplicate a programme in one click.
Assignment
Assign a programme to a client. One active programme at a time, enforced in the database, and the client is notified either way.
Progression
Pick a method per programme and a rep range per exercise. Every logged set is judged: progress, hold or reduce.
Client progress
Per-exercise strength history, personal records, session by session comparisons, body weight charts and progress photos.
Volume tracking
Weekly or monthly set counts per muscle group, split into direct and effective volume using contributions you can tune.
Exercise library
97 seeded exercises across 20 muscle groups and 6 equipment types. Add your own, mark them unilateral, edit their muscle contributions.
Chat
Real-time messaging with each client, with file and image attachments, over a websocket with no page reloads.
Reports
Export a client's weight history and full workout log as a spreadsheet.
Standing Calf Raise
Strength progress
The part worth reading first
A programme carries a progression method. Each exercise carries a rep range. On assignment the app creates one progression row per set, and after every logged set it decides what the client sees. The method implemented today is dynamic double progression.
The rules live in a pure module with no database access. Adding a method means adding one clause and one list entry.
Load a day, log the sets
Clients get their own account, their own log and their own view of progress. The programme their trainer assigned is one tap away.
Talk it through, break the plateau
Built on Phoenix LiveView. Chat, notifications and the unread badge update over a websocket with no page reloads, and attachments go along with the message.
Notifications
4 todayAssigning or removing a programme notifies the client. Every finished workout notifies the trainer. Nothing is polled.
Two ways to run it
Use the hosted version at scopestrength.com, or clone the repository and run it on your own machine. Both are the same application.
One button on the login page creates a trainer, three clients, two programmes and a set of logged workouts, so you can see the app with data in it before creating an account.
git clone https://github.com/Ebrahimgreat/scopestrength
cd scopestrength
mix setup
mix phx.serverSet these, then pick your email and storage adapters below. Everything is documented in .env.example.
DATABASE_URLrequiredSECRET_KEY_BASErequiredPHX_HOSTrequiredPORToptional, defaults to 4000POOL_SIZEoptional, defaults to 2Swap the parts you care about
Email and file storage sit behind adapters, chosen with environment variables. Point them at your own infrastructure, or change your mind later without a migration.
smtpAny SMTP serverresendMAILER_API_KEYsendgridMAILER_API_KEYpostmarkMAILER_API_KEYmailgunAPI key + domainLeave it unset in development and mail is kept in memory for you to read at /dev/mailbox.
File storage
S3_BUCKETFiles land in priv/static/uploads by default. Nothing to configure until you want more.
Keys in the database, never URLs
What gets stored is a key. Switching from local disk to object storage, or between providers, does not rewrite a single existing row.
Private buckets, presigned URLs
Progress photos and chat attachments are served through URLs that expire. The bucket stays private.
Uploads skip the server
Large files go straight from the browser to the bucket rather than through your application.
No provider account required
Any SMTP server works, so you are never forced into a relationship with a particular vendor to send a password reset.
Adding your own backend
Implementing three functions of the Scopestrength.Storage behaviour is the whole job. No fork, no patched vendor directory.
Hello.

I am Ebrahim, I write software, and ScopeStrength is the project I keep coming back to. It started because personal trainer software kept hiding the two things that matter most, the volume maths and the progression rules, behind a subscription. So I wrote my own and put the whole thing under a licence that keeps it open.
If you want to connect, I would genuinely like to hear from you. Trainers telling me what is missing, engineers who want to work on it, or anyone who has it running on their own server and hit something odd. Email me directly, or open an issue if it belongs in the code.
How it is built
I love working in Elixir, and this is the stack I reach for. Everything below is a deliberate choice rather than a default.
Free software. Read the whole thing.
ScopeStrength is licensed under the GNU Affero General Public License v3.0 or later. Run it, study it, modify it, share it. If you run a modified version as a service, offer your users the source.
Pull requests welcome. Run mix test first, add a test alongside any fix. Read the licence.