The whole platform, in detail
Not a workout app with a coach bolted on, and not a directory that hands you a phone number. Clients search every coach across 196 countries and apply in the app. Coaches get a public profile that brings those clients in, with no listing fee and no commission. Everything after that — programmes, logging, measurements, scheduling, messaging — happens on the same account.
Two halves that normally live in different products
This is the whole idea, and the reason the feature list looks the way it does.
There are two people with a problem here, and they are looking for each other. One wants a coach and cannot tell which of them is any good. The other is a coach who needs clients and is advertising into a social feed. Both halves of that are on this platform — and so is everything that happens after they meet.
Coaching software
Assumes the client already exists. Good at programmes, no answer at all to which coach? — so winning the client is left to you.
Directories
Answer that one question and stop. A profile, a price, an email address — and the training happens in a spreadsheet somewhere else.
MyFitsy
Both. Get found, get hired, and coach them without anything changing hands.
For a coach, the profile is how you get clients
Not a settings screen you fill in for completeness. A real page at your own web address — bio, certifications, specialities, gyms, rates, before/after portfolio — plus reviews only people who actually trained with you can leave. It is listed in the search clients use to pick someone.
For a client, finding and training are one account
Search every public coach, filter by speciality and country, read the profiles, apply in the app. The moment a coach accepts, they are building programmes against your real measurements and reading back the weights you actually lifted.
Two consequences worth naming. Country stops mattering — search covers 196 of them, and the metric/imperial switch means a coach in Tallinn and a client in Toronto read the same session in their own units. A coach's market is no longer the people who walk past their gym. And the client is not a guest in the coach's software: they can track measurements, set goals and write their own programmes with no coach at all.
Which app does what
Two apps with deliberately different jobs, on one platform and one set of records.
| Capability | MyFitsy (client) | MyFitsy Coach |
|---|---|---|
| Search every coach on the platform | ✓ | — |
| Apply to a coach | ✓ | — |
| Appear in coach search | — | ✓ |
| Public profile with reviews | — | ✓ |
| Public web page at myfitsy.com/@handle | — | ✓ |
| Invite a client | — | ✓ |
| Accept or decline a connection | ✓ | ✓ |
| Build a programme for others | — | ✓ |
| Build a programme for yourself | ✓ up to 10 | — |
| See today's workout | ✓ | — |
| Log weights, reps, time or distance | ✓ | — |
| Skip a day | ✓ | — |
| Open past sessions by date | ✓ | ✓ per client |
| Record body measurements | ✓ | — |
| View a client's measurements and trends | — | ✓ |
| Set and share goals | ✓ | — |
| Book a session | — | ✓ |
| See booked sessions | ✓ read-only | ✓ |
| Create groups | — | ✓ |
| Message, with photos and video | ✓ | ✓ |
| Switch metric / imperial | ✓ | ✓ |
| Report an account | ✓ | ✓ |
| Delete your own account | ✓ | ✓ |
The features in detail
Each one is a summary you can skim, with the specifics one click down.
Coach search — finding, and being found
Search every public coach by speciality and country, and apply from inside the app.
The client chooses who they want to train with. The coach is put in front of people already looking to hire someone.
- Every public coach on the platform, filterable by any of 196 countries and 32 specialities
- Apply in the app — the coach accepts or declines
- Ordered by rating, not by who paid: no listing fee, no promoted placement for sale
- Remote coaching is an ordinary connection, not a workaround
Specifics and edge cases
The same search read from the coach's side is a stream of people actively looking to hire, which is why the profile is worth filling in properly: a client arrives having already read your bio, specialities, rates and reviews, so the first message is usually about starting rather than about what you charge. Results are ordered by average rating, so a new coach starts lower — deliberately, because the alternative is ranking by whoever paid. Suspended accounts drop out of search entirely. A coach appears publicly only once they have written a bio, which stops half-finished profiles being the first thing a client sees. Reviews can only be left by someone who actually trained with that coach.
| Coaches searchable | Every public coach on the platform |
| Countries | 196 |
| Specialisations to filter by | 32 |
| Results per search | Up to 50, ordered by average rating |
| Applying | From inside the app; the coach accepts or declines |
| Requirement to appear | A written bio, a public profile, no active suspension |
| Cost to the coach | None — no listing fee, no ranking boost for sale |
Coach profiles — how new clients find you
Bio, certifications, specialities, gyms, rates, before/after portfolio and reviews — listed in search and reachable at its own web address.
This is the client-acquisition side of the platform. The profile is what appears when someone is choosing a coach, and the link you send anyone who asks what you charge.
- A real web page at
myfitsy.com/@yourhandle, shareable anywhere - Reviews only people who actually trained with you can leave
- Your own rates, in whichever unit you sell — session, hour, course, week, month, programme or one-off
- No commission on anything you charge
Specifics and edge cases
Every account, coach or client, is given a unique handle automatically at sign-up, and it is what in-app search matches on. For a coach it also resolves to a public web page; a client's handle stays an identity rather than a page. The handle is derived from the display name, lowercased and stripped of anything that is not a letter or digit, with a number appended if it is taken, so no two accounts can collide — and a set of reserved words such as admin and support cannot be claimed at all. Changing it is allowed; the old address stops working, which the app warns about. A coach cannot delete a review, and there is one review per coach–client pair.
| Handle | Every account gets one, automatically |
| Public web page | Coaches only, at myfitsy.com/@handle |
| Handle format | 3–30 characters: letters, digits and underscores, starting with a letter |
| Specialisations | 32 to choose from |
| Countries | 196 |
| Price units | Per session, hour, course, week, month, programme, or one-time |
| Portfolio images | Up to 3 before and 3 after, per entry |
| Reviews | 1–5 stars, one per client, cannot be deleted by the coach |
| Listing fee | None |
| Promoted placement | Not for sale — search is ordered by rating |
| Commission on your fees | None |
Coaching connections
A mutual-consent relationship between one coach and one client.
Nobody is added to anybody. Both sides agree, and either side can end it at any point.
- A client applies, or a coach invites — the other side accepts or declines
- The connection is what decides who can see whose data
- A client can work with several coaches at once
- Ending it keeps every completed workout
Specifics and edge cases
Health data should never be shared on one party's decision alone, so consent is the foundation the rest of the platform sits on. There is exactly one relationship record per coach–client pair, so reconnecting with a past coach reactivates it rather than creating duplicate history. Ending a relationship deactivates that coach's programmes for the client but keeps the training record intact.
| Consent | Required from both sides, always |
| Coaches per client | No limit |
| Clients per coach | No limit |
| Relationship states | Pending, active, ended, declined |
| Records per pair | One, reused on reconnection |
| Ending it | Either side, at any time |
Workout programmes
A named plan made of ordered days, each an ordered list of exercises.
Build a plan once and give it to any number of clients, then see what each of them actually did against it.
- Three kinds of exercise: weights, bodyweight and cardio — a pull-up and a 5 km run are both first-class
- Reps as free text, so 8–10 and AMRAP both work
- Type the first letters and previously-used exercises are offered, video link included
- Assign to a client or a whole group, starting on any day of the plan
Specifics and edge cases
Each kind carries only the fields it has any use for: weights take sets, reps and a load; bodyweight takes sets and reps, since the load is the person; cardio takes time and distance. Suggestions keep the newest video link for a name, so correcting a mistyped URL replaces it everywhere it is offered, and a suggestion you no longer want can be hidden and later restored. Assigning a second programme does not cancel the first. Assigning the same programme twice to one client is blocked in the database, because that would only duplicate their plan. Someone joining mid-cycle can be started on the day that suits them rather than forced back to day one.
| Days per programme | No limit |
| Exercises per day | No limit |
| Exercise kinds | Weights, bodyweight, cardio |
| Weights exercise | Sets, reps, target weight, rest, note, video URL |
| Bodyweight exercise | Sets, reps, rest, note, video URL |
| Cardio exercise | Target time up to 24 hours, target distance up to 1,000 km |
| Autocomplete suggestions | 8 shown by default, up to 25 |
| Programmes per coach | No limit |
| Same programme twice to one client | Blocked (unique index) |
Programmes clients build themselves
A client can write up to ten of their own and run one at a time.
Training does not only happen under a coach. Someone between coaches, or training alone before they find one, uses the same builder and the same logging.
- Up to 10 programmes, one active at a time
- Private — a coach cannot see, edit or assign them
- Appears on Today exactly like a coach's programme
- Deactivating keeps the plan and every logged workout
Specifics and edge cases
Most people arrive without a coach, and making the app useless until they have one is both a bad first experience and a bad argument for the platform. It also means the history they bring to their first coach is real data rather than a conversation. The ten-programme cap and the single active programme are a database trigger and a unique index rather than interface behaviour, so Today never has to guess which plan you meant. Deleting removes the plan; the workouts logged against it stay.
| Programmes per client | 10, enforced in the database |
| Active at once | 1 |
| Visible to a coach | No — never |
| Structure | Identical to a coach's: days, exercises, all three kinds |
| Shows on Today | Yes, the same as an assigned programme |
| Deactivating | Keeps the programme and every logged workout |
Workout logging and history
Open the session, see each target, record what actually happened.
The target is the plan; the log is what happened. Every coaching decision needs the second one, and asking for it over chat does not scale.
- Pre-filled with what you did last time that day came round
- Logs weight, reps, time or distance — whichever that exercise has
- Skip a day deliberately, and the plan moves on rather than sticking
- History is a list of dates: tap one and see the session exactly as logged
- Finish and start the next one straight away, if you train two days back to back
Specifics and edge cases
A skip advances the rotation exactly like a completed session, so a missed Monday does not leave the plan stuck, and it is recorded as a skip everywhere it is read rather than quietly hidden — the coach sees the difference between a skipped day and a light one. An exercise can be marked not completed rather than silently dropped, which is the difference between "did not do it" and "did it lighter". Nothing is thrown away when a programme ends.
| Recorded per exercise | Weight, reps, time or distance — whichever that kind has |
| Pre-filled from | Your last completion of that same programme day |
| Skipping a day | Recorded as skipped; advances the rotation |
| After finishing | Day marked complete; the next one can be started at once |
| History | Every session by date, opened in full |
| Retained | All of it, including after a programme ends |
Measurements and trends
Fifteen tracked metrics, charted over time with a rate of change.
Scale weight alone is a poor progress signal. Circumferences show the recomposition it hides — which is the difference between a client quitting in week six and staying.
- Body weight, an estimated body-fat percentage and 13 circumference sites
- Charts answer how fast, not just how much: “0.4 kg per week”
- Ranges from one week to all time
- A body diagram with the current figures laid on it
Specifics and edge cases
Charts report a rate rather than an average, because an average tells you nothing you cannot already see — a rate answers the question people actually have, which is how long this will take. It is a least-squares trend across the range, quoted per week early on and per month once there is enough history to justify it, and withheld entirely under a week: a straight line through two readings three days apart is not a trend. Blanks are fine; record what you have. The body-fat figure is an estimate from measurements, not a clinical measurement, and the app says so on screen.
| Metrics | Weight, body-fat estimate, and 13 sites: neck, shoulders, chest, waist, hips, both arms, both forearms, both thighs, both calves |
| Chart ranges | 1 week, 1 month, 3 months, 6 months, 1 year, all time |
| Rate of change | Per week under three weeks of data, per month beyond |
| Minimum for a rate | Two readings at least a week apart |
| Entries per metric | No limit |
| Who can see them | The client, and any coach with an active relationship |
Goals
A metric, a start, a target and an optional deadline.
“Lose weight” is not trackable. “Waist from 92 cm to 84 cm by 1 October” is — and it gives both sides something concrete to review.
- Reads from logged measurements, so it updates itself
- Shareable as a card, in your own units
- Figures can be left off the card entirely
- Marked complete on the day the target is reached
Specifics and edge cases
A shared goal card carries a written summary alongside the image, and the numbers on it follow the unit system the person actually uses — a client working in pounds does not share a card in kilograms. Anyone who wants the public commitment without the figures can hide them.
| Metrics available | Any of the 15 tracked measurements |
| Deadline | Optional |
| Goals at once | No limit |
| Progress source | Your own logged measurements |
| Sharing | Image plus text, in your own units, figures optional |
Calendar and scheduling
An hour-by-hour day grid for coaches; a month view for clients.
Session times were the last part of coaching still living in a chat thread, where they get buried and nobody has a record of what was agreed.
- Tap a gap in the grid to book that time
- Repeat weekly — presets, or any number of weeks you choose
- Clashes are caught, with an explicit override for genuine double sessions
- Editing a series asks whether you mean this session or all later ones
Specifics and edge cases
Overlapping bookings are detected server-side and refused with a distinct error the app catches, rather than being silently allowed. Moving a group session moves every attendee together. Switching days auto-scrolls to that day's first booking, so a day with sessions never looks empty. Clients see their sessions read-only.
| Grid hours | 05:00–23:00 |
| Start times | Quarter-hour steps |
| Duration presets | 30, 45, 60 and 90 minutes |
| Custom duration | 5 to 600 minutes |
| Weekly repeat presets | 4, 8, 12 or 24 weeks |
| Custom repeat length | Any number of weeks up to 52 |
| Note per session | Up to 500 characters |
| Who can book | Coaches only — clients see sessions read-only |
Groups and group sessions
A named set of a coach's clients, for booking and bulk assignment.
Bootcamps and small-group training were otherwise repetitive: the same booking typed out once per person, the same programme assigned five times.
- One booking for everyone in the group
- One action to push a programme to every member
- Members never see each other
- Collapses to a single block on the coach's calendar
Specifics and edge cases
A client sees the group's name on their session and never the attendee list. Members who already have the assigned programme are skipped rather than duplicated, and the result reports how many were skipped. Clients whose relationship has ended are not booked. Deleting a group leaves sessions already booked from it in place.
| Groups per coach | No limit |
| Members per group | No limit |
| Group name | 1 to 60 characters |
| A client in several groups | Allowed |
| Deleting a group | Sessions already booked from it remain |
| Attendee visibility | Members never see each other |
Messaging, with photos and video
Realtime chat between a coach and a connected client.
Coaching conversation belongs next to the training record, not mixed into a personal chat app where it competes with everything else in someone's life.
- Photos and video, because form checking is visual
- Attachments are private — not published, not public
- Links in messages are tappable
- Unread counts on the tab bar; read state tracked
Specifics and edge cases
Attachments live in a private bucket, unlike profile and portfolio images. Someone filming their own body for a coach is not publishing it, so the files are reachable only through signed URLs issued to the two people in the conversation — a leaked path is not a leaked video. Upload types are restricted by storage itself, not just by the app. You can only message someone you have a coaching relationship with, current or past. Deleting your account removes your messages from the conversation on both sides.
| Delivery | Realtime |
| Message text | Up to 2,000 characters |
| Attachments | Images and video, one per message |
| Maximum file size | 50 MB, enforced by storage |
| Accepted types | JPEG, PNG, HEIC, HEIF, WebP; MP4, QuickTime, M4V |
| Storage | Private bucket, reachable by signed URL only |
| Who you can message | Your active or past coaching connections only |
| Encryption | In transit, not end-to-end |
Metric or imperial
One switch changes every number in both apps.
A platform whose premise is that a coach in one country can train a client in another cannot be metric-only.
- Kilograms or pounds, centimetres or inches, kilometres or miles
- Applies to measurements, goals, targets, logs, charts and shared cards
- Coach and client can each use their own — on the same session
- Height reads as feet and inches, because nobody says they are 70 inches tall
Specifics and edge cases
Everything is stored in metric and converted only where it is shown or typed. That is why the two sides can hold different settings on the same data without either of them being wrong, and why switching back and forth never degrades a stored figure. It takes effect immediately and needs nothing re-entered.
| Systems | Metric and imperial |
| Weight | kg or lb |
| Circumference | cm or in |
| Height | cm, or feet and inches |
| Distance | km or miles |
| Scope | Per account, both apps, every screen |
| Stored as | Always metric; converted at the edges only |
| Coach and client differing | Fine — each sees their own |
Reporting and moderation
Any account can be reported from its profile, with a written reason.
A platform where strangers meet to discuss their bodies needs this to exist before it is needed. A reporting flow added under pressure is always worse than one designed calmly.
- Report a coach or a client from their profile
- A written reason is required — a bare flag cannot be acted on fairly
- Outcomes run from a warning to a permanent suspension
- A suspended account is locked out in the database, not by hiding buttons
- Profile pictures and portfolio photos are screened by Google Cloud Vision before anyone can see them
- Block anyone, instantly — no moderator, no waiting, and they are never told
Specifics and edge cases
Because enforcement sits in the database, a suspended account cannot write anything through the API either, and it disappears from coach search. Suspensions carry an expiry and lift themselves. The affected person is notified, including when a suspension is lifted, and every warning and ban is kept as an audit trail. You cannot report yourself, and a report is visible only to the person who filed it and to the moderator.
| Who can be reported | Any coach or client, from their profile |
| Categories | Harassment, inappropriate content, spam, impersonation, safety, other |
| Reason | Required, 10 to 2,000 characters |
| Actions available | Warning, 7-day, 30-day or permanent suspension |
| Enforcement | In the database — a suspended account cannot write at all |
| Blocking | Instant and silent; ends the relationship and cancels future sessions |
| Undoing a block | Settings → Blocked accounts |
| Image screening | Automatic, on upload, before delivery |
| Report visibility | The reporter and the moderator only |
Activity and notifications
A feed of everything that happened, with unread state.
Changes made by the other person need to surface without them having to send a message about it.
- Sessions booked, moved and cancelled; applications and responses; programmes assigned; workouts completed; reviews; reminders
- Written by the database when the event happens — so it cannot be forged
- Pushed to your phone, with a per-account switch if you would rather they were not
- A weekly series is one notification, not one per week
- Unread counts as badges in both apps
Specifics and edge cases
Notifications are generated by the same database operation that made the change, not by the app. That means they cannot be missed because a device was offline when the change was made, and clients have no permission to insert them at all — so the feed is a genuine audit trail rather than something the app hopes to keep in sync. A group booking produces one notification per member rather than one per row.
| Event types | 19 |
| Written by | Database triggers and functions, never the client |
| Series booking | One notification, not one per week |
| Group booking | One per member |
| Phone push delivery | Yes, with a preference toggle in Settings |
| In-app feed | Always kept, whether or not push is on |
Your account and your data
Password changes, self-service recovery, and deletion with a grace period.
Both matter at exactly the moment someone is least willing to email support about it.
- Sign in with Apple, with Google, or with an email address and password
- Locked out? Reset your password from the sign-in screen
- Delete your account yourself, from Settings
- 30 days to change your mind — sign in and tap keep, and nothing is lost
- After that it is erased automatically, not when somebody remembers
Specifics and edge cases
Deletion is a two-stage process on purpose: people delete things in a bad week and regret it in a better one. Once the grace period passes, a scheduled database job erases the account permanently, including the messages you sent, which go from the other person's conversation too. Reviews you wrote stay but are stripped of your name, so a coach's rating is not rewritten every time a client leaves.
| Ways to sign in | Apple, Google, or email and password |
| Password recovery | Self-service, from the sign-in screen |
| Grace period | 30 days |
| Cancelling deletion | Sign in during the grace period and confirm you want to keep it |
| Erasure | Automatic, by a scheduled database job |
| Cascade | Profile, measurements, goals, workouts, sessions, connections, programmes |
| Retained | Reviews you wrote, anonymised; and what the law requires |
| Data export | By email request |
Who can see what
Enforced by row-level security in the database, not by the app hiding buttons — so it holds even if someone uses the API directly.
| Data | You | Your connected coach | Other coaches | Other clients |
|---|---|---|---|---|
| Display name, photo and @handle | ✓ | ✓ | ✓ | ✓ |
| A coach's public profile | ✓ | ✓ | ✓ | ✓ |
| Body measurements and body-fat estimate | ✓ | ✓ | — | — |
| Logged workouts and skipped days | ✓ | ✓ | — | — |
| Goals | ✓ | ✓ | — | — |
| Programmes you wrote for yourself | ✓ | — | — | — |
| Your messages | ✓ | ✓ (only yours with them) | — | — |
| Chat photos and video | ✓ | ✓ | — | — |
| Booked sessions | ✓ | ✓ | — | — |
| Group attendee list | — | ✓ | — | — |
| Date of birth, height, gender | ✓ | ✓ | — | — |
| A report you filed | ✓ | — | — | — |
How the data model backs this up
Worth knowing if you care where your health data goes.
Security in the database, not the app
All 28 tables have row-level security enabled. A query for someone else's measurements returns nothing, whatever the app asks for. The apps are not the security boundary — the database is.
Sensitive writes are checked first
Booking, responding to an application, cancelling a series, applying a suspension: these run as database functions that verify the rules before acting, so the checks cannot be skipped by talking to the API directly.
Limits are constraints, not interface behaviour
The ten-programme cap, one active own-programme, one review per pair, no duplicate assignment. A limit that exists only in the app is not a limit — it is a suggestion to anyone holding an API key.
Hosted in the EU
Supabase in Stockholm. No advertising networks and no third-party analytics SDKs in either app. Measurements are special-category health data under Article 9 and processed only with explicit consent — see the privacy policy.
Every limit in one table
Collected here so you do not have to hunt for them.
| Coaches searchable | Every public coach; 196 countries, 32 specialisations |
| Search results | Up to 50, ordered by average rating |
| Clients per coach / coaches per client | No limit |
| Handle | 3–30 characters |
| Coach programmes, days, exercises | No limit |
| Client's own programmes | 10 max, 1 active |
| Exercise kinds | Weights, bodyweight, cardio |
| Cardio targets | Up to 24 hours, up to 1,000 km |
| Exercise suggestions | 8 by default, up to 25 |
| Groups, and members per group | No limit |
| Session note | Up to 500 characters |
| Calendar grid | 05:00–23:00, quarter-hour steps |
| Session duration | 30/45/60/90 min presets, or 5–600 custom |
| Weekly repeat | 4/8/12/24 presets or custom, up to 52 weeks |
| Tracked measurements | 15 (weight, body-fat estimate, 13 sites) |
| Chart ranges | 1W, 1M, 3M, 6M, 1Y, all |
| Rate of change | Per week under 3 weeks of data, per month beyond |
| Message text | Up to 2,000 characters |
| Chat attachment | 50 MB; images and video only |
| Portfolio images | 3 before + 3 after per entry |
| Reviews | 1–5 stars, one per coach–client pair |
| Report reason | Required, 10–2,000 characters |
| Suspensions | Warning, 7 days, 30 days, permanent |
| Notification event types | 19 |
| Unit systems | Metric and imperial, per account |
| Account deletion grace | 30 days |

