A few years ago I wanted to write a 20-minute AMRAP with a 20-second front rack hold in the middle, and the app I was using couldn't do it. It had no way to put a timed exercise inside a timed block. That stayed in the back of my mind for a long time, until one day I decided to do something about it.
I'm a software developer in Barcelona, and I write most of my own training. Even when a coach writes my program, I end up typing it into an app myself, so I spend a lot of time in workout builders.
How I train #
I train a bit of everything, half of it at a gym and half of it in my garage. I use barbells and kettlebells, and I mix strength work, conditioning and some weightlifting. And I get bored fast. I usually run one cyclic program for a mesocycle, with progressive overload and a deload at the end, and then I decide whether to carry on or go find something else.
The workout builders couldn't put a block inside a block.
So I'm writing programs all the time, and every app I tried was built around single workouts, not programs. Programs were either missing or barely there, with no way to say that this is week three of six and the weight goes up on Tuesday. The workout builders couldn't put a block inside a block, there was no undo, and you had to build the whole thing on a phone screen, which is the worst place to write a plan. If the app had a follow-along mode at all, it flattened the session into a list of exercises and threw the structure away.
That's why the front rack hold never made it into any of them. That kind of structure comes up all the time in a circuit, and I couldn't write it down anywhere.
2020, a text editor #
In 2020 I built a proof of concept for myself. It had a text editor on the left and a preview on the right. You typed the workout as an indented list, blocks inside blocks as far down as you wanted, and the preview rendered it as cards. That was the whole thing. But it took the front rack hold, and I kept building on it. Soon after, I had a rudimentary player that ran that same structure.
2021 to 2025, the first app #
A year later it was an app. The text editor became a workout builder you could use on a phone, with the same nested blocks, folding sections and buttons to add or move an element in place. It had a player that kept the structure, and a program was a named group of workouts.
Then I kept adding to it for four more years. I added a program list, exercise videos, equipment tags, and a player that walked through the session and timed each exercise.
Its domain went from workout.town to workout.land to onemorerep.app, and I never liked any of them. The way it described a workout never changed, and by 2025 I was training with it every week.
I also program for my two daughters and a friend or two. And the way I got their programs into the app was to log into their accounts and type the programs in for them, which was not ideal.
Tools that could hand a program to somebody did exist. They were built for personal trainers with thirty or forty clients, priced for that, and full of features I'd never use, like client billing. I only wanted to send a program to a few people I know. So I kept using mine and kept improving it.
Late 2024 #
Toward the end of 2024, while I was still training with the old app, the AI models got good enough to be worth a try, so I started messing with workout generation on the side, not expecting much. The results weren't great, but for simple sessions they worked, and that was enough to send me back to the old app to look at how much of it I'd want to throw away.
One thing led to another, and I got more excited with every piece that worked. What I had was a web page you installed from the browser. What I wanted was a real app on the phone that shared its code with the web version, and there was no way to turn one into the other.
So at some point I stopped patching it and wrote a backlog instead. It listed everything I wanted from a training app, as the athlete typing in my own program and as the parent, brother, partner or friend writing one for somebody else. If it didn't make sense for one of those two, it didn't go on the list.
I've been building what's on that list ever since, and a lot of the old app came with it. A good part of the code could be reused, and so could five years of finding out what didn't work.
Now #
LogBeetle is what came out of that list. The name came from an evening of typing domains into a search box, and logbeetle.com was free, which never happens. I like the pun on log, and a beetle is about the strongest thing alive for its size.
LogBeetle starts with the program, linear or cyclic and with formulas, and works down from there. A workout is made of blocks, and a block can hold other blocks, so a timed exercise inside a timed block is just a normal thing to write. You build it at a desk, in a browser, with undo and redo, and the player runs it on your phone with the structure intact. The Android app is on Google Play. The iPhone app is waiting for Apple's review, so on an iPhone the player runs in the browser for now.
I write a program once now and send it. Nobody on the receiving end has to open a workout builder. And because not everyone reads English comfortably, especially when you're young, the app is in five languages.
The AI stayed in. It drafts a single session from a sentence or a photo, and on Friends & Family a whole program from a short brief, and whatever comes out lands in the workout builder as a draft you can edit.
I only ever need to program for a handful of people, and I doubt I'm unusual there, so the Friends & Family plan stops at five.
Following a program is free, and so are your history and being coached by somebody. The paid part is writing structured programs, and writing them for other people. The pricing page has the rest. Every release has to get through over two thousand automated tests before it goes out, and the changelog shows how often that happens.
One person reads the inbox, and I'd like to keep being the person who answers it. I still type most of my own programs in myself, and the front rack hold is in the AMRAP where it belongs.