🎨 RFC: Equipment redesign

I'm rethinking the equipment setup in Liftosaur. How could I make it more flexible, easy to use, and cover all the wide variety of gym machines.

Basically, the idea is to have 4 types of equipment:

  • Weight stack - cables, pin-loaded stack machines, etc
  • Plates - barbells, loaded dumbbells, plate-loaded leverage machines, belts, multi-horn machines
  • Fixed Weights - Dumbbells, kettlebells, fixed barbells
  • Electric - Voltra, Tonal, etc

Each type has slightly different configurations:

  1. Weight Stack

There you define the weights like 10lb -> 200lb goes by 10lb, 200lb -> 300lb goes by 20lb. It has the support for additional micro weights, like lever/dial/knob, or plates you can add - like magnets, small blocks, etc. You can ignore the micro weights for the warmups though.

There's a toggle to convert it to 'assisted' equipment, where it'd decrease the weight from the bodyweight, or from 0 (if you prefer negative weights).

  1. Plates

Same as now - you specify the base (bar) weight + plates, you specify sides. But can also add horns (for leverage machines) - and the weight ratio for horns. Also, there's ability to use only specific plates for warmups, enable assisted mode - with bodyweight or from 0.

  1. Fixed weights

You enter the range of weights, and increment. Can also add outside of range weights if necessary.

  1. Eletric

Just specify weights - min, max and step. That's really it.

Each equipment supports notes, ability to override unit, change rounding - nearest or down.

Check out the designs - those are not final, it's just explorations what it may look like. But should give you an idea.

My main question - would this cover your usecase? The variety of machines is very broad, I'm curious if it covers your case?

u/astashov — 10 days ago

📣 Show heart rate on the workout screen

On iOS, it now shows the heart rate (if available) on the workout screen. It takes it from the Apple Watch - if you have them. Alternatively, it can also get the heart rate from AirPods 3 Pro as well.

u/astashov — 16 days ago

📣 Added 'Features' section in docs

This: https://www.liftosaur.com/features

Just a bunch of pages with screenshots, explaining what the app can do. Hopefully will be useful when people google some question, or ask AI how to do something in the app.

u/astashov — 16 days ago

📣 Workout screen redesign

Redesigned the workout screen. Main goal was to declutter it, make it easier to use with shaking hands after heavy weight, and also ability to see things in distance (e.g. when your phone is laying down on a bench).

So, did the following changes. For the next set:

  • The next set is expanded now, gets a large reps/weight fields, plates, and large checkmark button.
  • It also shows the best/last/same day reps/weights underneath.
  • Swiping of a set is gone, there's ::icon-edit2:: icon to edit/delete it now
  • You can expand / collapse sets by tapping on them

Also:

  • Workout/exercise notes are toggleable now, in the kebab or cog menus
  • Delete, help, etc also moved to the kebab menu
  • You reorder exercises now by long-tapping and dragging them
  • AMRAP modal got bigger inputs and buttons

And there're also some other minor tweaks here and there.

⚠️ Need an iOS/Android native app update!

u/astashov — 23 days ago

🎨 RFC: Workout Screen Redesign

I’m thinking to do redesign of the workout screen. The main goal is to declutter the workout screen, make it easier to see what you need to do (reps/weight and plates) from distance, easier to tap a complete set button with your shaking hands after heavy set. Also, make it easier to swipe between exercises (because now swipe is often intercepted by set rows).

This is what I’m going to do (from top to bottom):

  • Finish button moves to the navbar. Trash, help, and all the rest of “workout”-scoped actions are moved to the kebab menu.
  • Instead of “Reorder exercises”, you do reordering by long-press on the exercise thumbnail and then dragging it
  • Notes fields could be hidden now - through kebab (workout) or cog icon (exercise) menus
  • The selected thumbnail exercise now has orange border instead of purple - hopefully will be more visible in dark mode.
  • There’ll be also exercise name under the thumbnail exercises showing up once the thumbnail strip becomes sticky and you scroll down.
  • The duplicate image near the exercise name is gone (it was duplicated by the strip anyway)
  • Biggest change: the next set will be “expanded”. You can expand and collapse them to regular size by tapping on them. When expanded:
    • Target moves to the top
    • Middle row is HUGE reps and weights fields and BIG checkmark icon to complete a set
    • BIG plates calculator on the next line
    • Previous best sets, best AMRAPs and on what date - underneath.
  • No more set row swiping. There’s just edit icon at expanded set. Swiping anywhere just swipes to the next exercise.
  • The AMRAP modal got bigger buttons and bigger input fields and +/- buttons.
  • There will be hints here and there, which will disappear once you do that action for a couple times.

Kinda controversial change, but hopefully will make it easier to use the app in gym conditions (you’re tired, need to see what needs to be done easily, etc).

Would love your feedback!

u/astashov — 25 days ago

📣 Editable preview in bottom sheet Liftoscript editor

There's a preview icon in the bottom sheet Liftoscript editor on the right of the pills. It shows how the exercise liftoscript looks with all resolved reuses. E.g. if it shows:

Squat / ...t1

and t1 is defined like

t1 / used: none / 3x8 100lb

it will show

Squat / 3x8 100lb

Now that preview is editable. You can tap e.g. on that 100lb in t1 and change it to e.g. 105lb, and the original exercise text will have that override - becomes:

Squat / ...t1 / 105lb

It's useful when you need to tweak some values of the reusing exercise, but they only exist in the reused exercise.

u/astashov — 28 days ago

📣 Time-based exercises: Countdown and unilateral exercises support

There's now a countdown timer for the time-based exercises. It starts when you approach the end of rest time. You can set it in Me -> Timers.

Also, now the unilateral exercises will present 2 set timers one after another - for the left, and the for right side. With the countdown in-between as well.

Countdown is extracted from the rest time:

  • With 30s|60s, and countdown == 5s, your rest time would be 55s, and then 5s countdown would start. If you want to disable countdown completely on specific exercise.
  • With 30s|0s there will be no countdown (and if it's unilateral - no countdown between sides)

⚠️ Requires an update of the iOS / Android app version

u/astashov — 1 month ago

📣 Autocompletion suggestions in the freeform mode in Liftoscript editor

Now if in the freeform mode in Liftoscript editor you have autocompletion. It'll suggest the exercise names, variable names in progress/update blocks, the template names when you add reusing, etc etc.

u/astashov — 1 month ago

📣 New calendar-like grid view for structuring the program

Some time ago, I posted about the idea of doing this grid/calendar based program editor: https://www.reddit.com/r/liftosaur/comments/1ulm4rr/rfc_rethinking_ui_for_editing_programs/ Got mixed feedback, but decided to do it anyway! It just feels this is a good birds-eye view for doing structural changes in the program.

So, added it instead of the previous week-reordering mode. Now, that mode shows a calendar-like view grid view of your program. If your exercises span multiple weeks with repeat ranges, you'll see them as a single strip crossing multiple weeks. You can drag the end of that strip to extend it to more weeks - and it'll adjust the repeat ranges.

When you select an exercise, it now highlights the template it reuses.

Everything is draggable there, you can long-tap and then drag exercises to reorder within the same day, and across days. You can also drag weeks to reorder them. When you select a day and drag - it drags across all weeks though - because the program layout is usually the same across all weeks, and dragging a single day in a multiweek program likely would break the program.

You can pinch-zoom the grid to scale the weeks. All that stuff hopefully gives you a good birds-eye view of your entire program (especially useful if it's multiweek), and you can easily restructure across all of the weeks.

You can also add multiple exercises from the same picker now there.

I'm thinking to eventually remove per-day mode as well (the [][] mode), that new view should do pretty much all the same things. But let me know what you think!

And yeah, it was a massive and very complex change, so let me know if you find any bugs!

If you're on Android - you need to update the app version from the Google Play

u/astashov — 2 months ago

📣 Liftoeditor improvements

  1. If you tap the edit icon on the workout screen, it now opens the liftoeditor in a bottomsheet with the current program day, that you can edit.

  2. You can reorder exercises in the editor by long-press and dragging them.

  3. On the "Edit Program Exercise" sheet, there's the preview icon that shows the preview of the exercise with all the reuses filled in.

  4. On the "Edit Program Exercise" it also will tell you if the progress is defined on some other week/day, and you jump there, or show it right for this week/day, editable.

u/astashov — 2 months ago

📣 Improve "Swap Exercise" during a workout

When you swap an exercise during a workout, it now remembers the last exercises you swapped, and offers them in a "Recent" section at the top of the exercise picker. That should make doing repeated swaps faster.

Also, it used to keep the same weight when you swap to an adhoc exercise. Which only makes sense if you used 1RM percentage weights. But for absolute weights it almost never makes sense.

So, now it'll try to adjust the weight. It'll try to find the latest weights you did for the same reps in history, and use that weight. If it couldn't - it'll try to find the closest and infer from it. If it couldn't - it'll infer the weights from 1RM.

And for warmups - it'll check if you have specific warmup config in your current program for that exercise, and will use that if it's there. Otherwise - just fallback to the default warmups.

u/astashov — 2 months ago

📣 Embracing Liftoscript: Part 2 - replaced the code editors on the Program screen with the new native editor.

And also fixed some bugs along the way in the new "Edit Program Exercise" too after last release.

You need to update iOS or Android app version for this again...

reddit.com
u/astashov — 2 months ago

📣 Embracing Liftoscript: Redesigned the Edit Program Exercise screen

One of the main sources of confusion and frustration in Liftosaur are the "Program" and "Edit Program Exercise" screens. They provide the UI to edit the program, but the problem is that the UI maps pretty poorly to Liftoscript. And Liftoscript is still source of truth. Also, when you edit UI - you have little idea what Liftoscript it'd result to. Users get weird errors they have no idea how to resolve - because errors come from Liftoscript syntax, not UI.

Historically, I tried to hide the complexity of Liftoscript, trying to lower the learning curve. But IMHO it doesn't work - I just need to be honest and upfront that knowing at least some Liftoscript basics is required to use Liftosaur effectively. So, I'm pivoting to the new approach - embracing Liftoscript!

As a first step - now "Edit Program Exercise" is not a screen anymore, it's a bottom sheet, where you can edit Liftoscript. For that, I created a new native code editor from ground up. Typing code generally is not convenient on a phone, so it solves that by having 'structured' editing mode, where you can tap values, elements, and use the action pills to do actions with them. So, kinda a mix of UI and code. You can swipe between elements, and you can double-tap on text to switch to freeform editing. Each element also shows a hint what it means, so hopefully it helps to learn Liftoscript basics easier.

For now, it's only "Edit Program Exercise" screen, but I will work on replacing all the editors in the app with this new native editor.

I understand it's a quite controversial change, so please let me know your thoughts here.

You need to update iOS or Android version of the app to get it.

u/astashov — 2 months ago

📄 RFC: Embracing Liftoscript: Redesigning Edit Program Exercise screen

The confusing UI of the Program and Edit Program Exercise screens stay the main reason why the app ever gets bad reviews. People are like - Liftoscript is cool, but the UI is shit, so here's your 1 star.

I first tried to hide the complexity of Liftoscript with more-or-less familiar UI - where you can customize the program via UI elements. But maybe that probably was a wrong decision - it's very hard to map UI to Liftoscript syntax. And it's not always clear how the UI changes transform to Liftoscript - which is important, because Liftoscript is still the source of truth. So, people were (and are) still often frustrated with it.

Now, I want to try to go to the opposite direction - embrace Liftoscript instead! Just accept the fact that you HAVE to know Liftoscript to some extent to use the app. And if it deters some people - that's probably ok, I don't want to compete with Hevy, Strong, etc for the same users who need a simple logger. But focus on people who intentionally seeks customizability.

So, as a first step - I could redesign the Edit Program Exercise screen - and let users edit the exercise directly through Liftoscript.

There's an issue though - currently we use CodeMirror, which is a web code editor. So, we need to show it in the webview. Like, we load the whole browser, and inside we load the code editor. And if we show multiple days, each with the Liftoscript editor - we load separate browser for each of them. That's very inefficient, and also it feels non-native, and editing sometimes is buggy.

So, we need a native code editor on iOS and Android, with syntax highlighting, autocompletion and ability to show errors.

Also, editing text on a phone generally sucks. Cursor pixelhunting and screen keyboard don't make it easy to type code, especially all those curly braces, special characters, etc. Need to find a way how to make it convenient on a phone.

I was prototyping and trying different approaches, and I think I found a pretty neat way to do so. Basically, it'll look like this:

  • When you tap "Edit Program Exercise", the bottomsheet will show up with the Liftoscript editor
  • You can tap the tokens there (like, weights, 'warmup', exercise name, etc), and there will be:
    • action pills (e.g. add warmup, add progress, change exercise, etc)
    • sometimes also the keyboard - if you focus weight, reps, or any other number
  • You can jump between prev/next token with buttons
  • Info section will explain what this token means (e.g. what 'progress: lp' means, or what 'superset' means, etc)
  • If you double-tap anywhere, it switches to 'freeform' text mode, where you can just edit Liftoscript's text

I played around with it, and IMHO it's way nicer that what current UI. It'll be a massive change though, so gonna take a while. Check out the video! What do you think? :)

u/astashov — 2 months ago

📣 Added fetching and exposing sleep and nutrition data from Apple/Google Health

Liftosaur can now import your sleep and nutrition (calories and protein) from Apple Health or Google Health Connect. To turn it on, go to Me -> "Apple Health" (or "Google Health Connect" on Android), and there enable "Sync Sleep & Nutrition".

Then, you can find it in ME -> Sleep & Nutrition screen. The data is also available through the REST API and the MCP server. So you can e.g. ask an AI assistant to correlate your sleep or protein intake with your training performance.

⚠️ You need an iOS/Android native app update (from App Store / Google Play) to get this feature.

u/astashov — 3 months ago
▲ 19 r/SaaS

If you don't have MCP for your SaaS - you're missing out.

Everyone and their cat is trying to add AI to their apps, SaaS and businesses. Usually it's some sort of chat or sparkly "AI" button that's placed at the most visible spot on your site or app. It often looks very annoying, works poorly, users hate it - but the companies still push it, because if they aren't "AI-native" in 2026, they're pretty much doomed.

And it makes sense it works poorly. If the company uses a powerful model, it will cost A LOT. So, either the price for the service goes significantly up to justify increased costs, or the company has to use cheaper models to keep the price down.

But users likely already pay for a ChatGPT or Claude subscription. And have access to the most powerful models. And got used to the chat interface there, and have all the context and memory. They feel way more comfy being there. So, IMHO the right way is not to integrate AI into your app/site, but to let users connect to your service and use it from their ChatGPT - i.e. good old API!

There's a standard for that - Model Context Protocol (MCP), which frankly is a bit ugly and overcomplicated, but all the major AI-providers (Claude/ChatGPT/Gemini) support it, and it handles auth. It basically gives the agent the commands (like API endpoints), and instructions on how to use them.

If you don't have MCP for your SaaS, app, website, business - you're missing out. That's IMHO the right way of adding "AI" to your business. Not adding another AI chat client to your app, or adding this sparkles button that will apply "AI" to whatever your app's output is. But letting Claude/ChatGPT/Gemini/etc do the things that users had to do previously through your UI. Because before users couldn't use API directly. Now they kinda can.

As developers, we already use that heavily. For example, I have MCPs connected to the iOS simulator, devtools, Google Ads, analytics, error aggregators - and I'm sitting like a spider in the center of my web, getting data from all those things, and telling the agents to do stuff with it.

And non-software-eng-people are also catching up. They want to delegate booking their flight tickets, hotels and museums. They want to search for homes to buy or rent, book tables in restaurants, update their credit card on insurance or utility sites, etc etc. Because all that work is annoying and takes time to do. So, provide an API/MCP for that! Otherwise, your competitors will.

I've got a small business - a weightlifting app. Almost every single thing there could be configured through MCP. You can make the agent set up available equipment, enter all the plates, create workouts, create lifting programs, validate them, write the logic for them. And it's amazing what people do with it.

Agents write the lifting programs for users, help to visualize the progress, and recommend the next steps. The app has graphs, but Claude can build way richer personalized visualization, HTML/CSS/JS right on the spot.

My favorite example is when a user told me they just went around the gym, took pictures of all the equipment pieces - machines, plates, dumbbells - uploaded the pics to ChatGPT, and told it to update the equipment settings in the app according to the pics. And it worked perfectly.

There's a concern though that if the AI agent can do anything the app can do - why do we need the apps then? Will they die eventually? Your business survives because it owns the data and does things LLMs can't do on their own (available houses, tickets, venues, etc). Your UI survives wherever it's faster than chat - like tapping a button on a watch to log a set vs typing in the chat what you just lifted. The parts of the UI that are just forms over an API though - those may die. But that's ok.

The funny thing is - the "AI-native or doomed" panic is justified. If you don't integrate into the AI wave somehow in 2026, you may be doomed. It's just not about having an AI button on your site - it's about giving the AI ecosystem convenient access to your site, app and data. Not the sparkles button.

reddit.com
u/astashov — 3 months ago

📣 See why weights are crossed out

When a set's target shows a crossed-out weight next to another one - that's the app rounding the program's exact weight to what you can actually load with your equipment. It's been a common source of confusion: why is my working weight different from the target? Why is it suddenly 0?

Now the rounded weight is underlined, and you can tap it to get the full explanation: how the target was calculated (e.g. as a percentage of your 1RM), how it was converted between kg and lb, and how it was matched to your equipment - the bar weight, the plates per side, or the closest fixed dumbbell.

If the equipment is marked as "Is Assisting" (like an assisted pull-up machine, where added weight makes the exercise easier), the explanation will call that out too - accidentally enabling it is the usual reason weights unexpectedly drop to 0.

Hopefully that'll help to understand why it crosses out the weights!

u/astashov — 3 months ago