What It Is
GainsLedger is a SaaS client portal built specifically for independent personal trainers, the kind of solo operators who are great at their job but often stuck cobbling together spreadsheets, DMs, and random apps just to manage their clients. The idea is simple: give trainers one place to handle the business side of what they do, so they can spend less time on admin and more time actually training people.
Why I Built It
Independent trainers are a interesting niche. They’re not big enough for enterprise software, and generic tools like Google Sheets or even fitness apps aren’t really built around the trainer-client relationship. There’s a real gap between “I have a few clients” and “I need a full gym management platform.” GainsLedger is meant to live in that gap, purpose-built, without the bloat.
What It Does
Without getting too deep into specifics I haven’t fully documented yet, the core of GainsLedger is a client portal, meaning both trainers and their clients have access to a shared, structured space. Based on what a tool like this needs to do, that likely includes things like:
- Tracking client progress and workout history
- Managing training programs and session notes
- Giving clients visibility into their own data
- Handling the basic operational stuff that makes a solo training business run
It’s an active project, so the feature set is still evolving, but the direction is clear.
How It’s Built
The stack is a mix of Python on the backend with Mako templates handling server-side rendering, paired with TypeScript on the front end for the interactive pieces. HTML and CSS round out the UI layer. It’s a pragmatic, relatively lean stack, which fits the project well. A SaaS portal for independent trainers doesn’t need to be a React monolith; it needs to be reliable, fast, and maintainable by one person.
Mako is an interesting choice that you don’t see a ton these days, it’s a Python templating engine that’s been around a long time and keeps things straightforward when you don’t need a full frontend framework. Combined with TypeScript where interactivity actually matters, it’s a solid balance.
Current Status
GainsLedger is actively in development. It’s a real project I’m building out, not just a proof of concept. If you’re curious about the source or want to follow along, I should probably have a working demo soon.
Currently the repository on Forgejo is private →

























