Image 1 β€” πŸ“£  Liftoeditor improvements
Image 2 β€” πŸ“£  Liftoeditor improvements
Image 3 β€” πŸ“£  Liftoeditor improvements
Image 4 β€” πŸ“£  Liftoeditor improvements
β–² 37 r/liftosaur

πŸ“£ 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 β€” 4 days ago
β–² 30 r/liftosaur

πŸ“£ 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 β€” 8 days ago
β–² 22 r/liftosaur

πŸ“£ 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 β€” 10 days ago
β–² 38 r/liftosaur

πŸ“£ 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 β€” 12 days ago
β–² 58 r/liftosaur

πŸ“„ 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 β€” 17 days ago
β–² 27 r/liftosaur

πŸ“£ 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 β€” 27 days 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 β€” 1 month ago
β–² 46 r/liftosaur

πŸ“£ 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 β€” 1 month ago
β–² 21 r/liftosaur

πŸ“£ RFC: Adding the evidence-based program design guide for AI agents

I want to add MCP command, that would provide instructions how to build quality weightlifting programs in Liftosaur. Kinda using the latest/greatest from all those Helms / Nuckols books and research, watered down specifically for LLM consumption.

Would love your feedback! It's a PR on Github, so feel free to leave your opinion and comments!

https://github.com/astashov/liftosaur/pull/594

u/astashov β€” 1 month ago

Device Hub is hideous!

Trying new XCode 27 Beta and the new Device Hub. Any way to remove those ugly white frames around the phone/watch simulators? Couldn't find an option anywhere. This is really bad, why did they do it? Apple, where's your design sense?!!

u/astashov β€” 1 month ago
β–² 30 r/liftosaur

πŸ“£ More accurate volume for two-dumbbell exercises

Volume and total weight now count both dumbbells for exercises you load with a pair - like dumbbell shoulder press, bench press, rows, lunges, and split squats. The weight you enter for these is per-dumbbell, so previously we only counted one and undercounted the volume by half. Now it's doubled to reflect the real weight.

This changes how numbers look in your volume graphs - your dumbbell volume will double compared to before. So, it's a somewhat breaking change.

If a particular exercise doesn't fit (say you do a single-dumbbell variation), you can turn this off per-exercise: go to Exercise Stats, and toggle "Two weights (count both)".

u/astashov β€” 1 month ago
β–² 20 r/liftosaur

πŸ“£ "Where did you hear about us?" survey

I added the survey that you probably will see next time you start the app. Please please please answer that, it's just one or two questions, and it'd be so helpful for me! I currently have no idea where people come from and how they find the app, which is essential to understand where to spend marketing dollars :)

Thank you so much!

u/astashov β€” 1 month ago
β–² 58 r/liftosaur

πŸ“£ Added exercise variations

A single program exercise can now hold multiple movements, and you can switch between them - either automatically as you progress, or by hand. Great for calisthenics progressions, where you graduate from an easier movement to a harder one once you can do enough reps.

List the movements separated by | in the exercise name. The current one is marked with ! (the first is current by default):

Split Squat | ! Bulgarian Split Squat | Pistol Squat / 3x8 0lb

To advance automatically, use the new exerciseVariationIndex variable in a progress script - it moves to the next movement when your condition is met:

Squat | Pistol Squat | Front Squat / 3x8 0lb / progress: custom() {~
  if (completedReps >= reps) {
    exerciseVariationIndex += 1
  }
~}

You can also add, remove, reorder, and switch variations right from the Edit Program Exercise screen - enable "Exercise Variations" from the 3-dot menu. The sets, reps, and progress logic are shared across all movements; only the movement itself changes.

Note that if you had a custom exercise with | or ! in the name, it will be replaced to - character. If you program used ! or | in the exercise names - you may need to tweak it, there's a migration that tries to fix it automatically, but it may miss some cases.

This finally allows to implement Recommended Routine from r/bodyweightfitness - added it to the builtin programs!

u/astashov β€” 1 month ago
β–² 30 r/liftosaur

πŸ“„ RFC: Rethinking UI for editing programs

P.S.: Video is just a rough prototype to illustrate the idea, not a real UI :)

Current UI for editing programs doesn't work very reliably, and frankly quite confusing. Especially if it edits the programs with reusing logic, and repeating over several weeks. Then, just adding or deleting a day or an exercise may make the program invalid - for example if that exercise was reused by other exercises. And then it gets into plain text mode with a scary syntax error.

That can scare away users, especially the new ones, who's just trying the app. And generally, the current UI doesn't give a great visibility into a program.

I realized that the current UI just doesn't mirror the data model well. In Liftoscript - weeks and days are just containers for exercises. And exercises span the days when repeating - so reordering a day often doesn't make sense - a day is ephemeral, a repeated exercise shows up in a day if the day is there. But if not - it's not added.

What would be the right UI though? I thought - maybe it should be actually a calendar-like. Something similar to Google Calendar or Cal.app. You have weeks as columns. Days as cells within those columns. And exercises are like "events" you add to days. Which can span multiple days.

You cannot move weeks or days around, they're just there as containers. Instead - you move exercises. If an exercise is repeated across weeks - it spans multiple weeks. If it's a reusing one - it highlights the template it reuses if you tap it. You can drag the right edge to change repeating, and you can just drag the exercise around to move it between days and weeks.

You can multiselect few exercises by tapping on them and move them together to some week/day. Tapping on an exercise shows info at the bottom, and ability to edit it there.

Tapping on a template highlights all the exercises that use that template.

You can zoom in/out by pinching, and also use landscape mode for better visibility for many-week programs.

That should solve the whole class of issues of the current program editing UI, and it's easier to ensure the program is always structurally correct. It also maps waaay better to the Liftoscript structure, with all its Bicep Curl[1-12].

BTW, the program on the video is this 5/3/1 BBB - this is the Liftoscript - https://www.liftosaur.com/programs/the531bbb

Basically, I'm trying to find a replacement for these 2 tabs on the Program screen

What do you think? Yay or nay? Is it even more confusing? :) Would love to hear your thoughts!

u/astashov β€” 2 months ago
β–² 69 r/liftosaur

πŸ“£ Added time-based exercises support and intervals/circuits

You can now time the set itself, not just the rest after it. Great for planks, timed cardio, or any "hold for X seconds" exercise. Use the setTimer|restTimer syntax:

Plank / 3x1 0lb 60s|30s

That's 3 sets of plank, holding each for 60s, then resting 30s. Add + to count up past the target instead of stopping automatically (like 30s+|60s). Add auto to auto-advance to the next set when the rest ends - which is how you build circuits like EMOM or Tabata:

// EMOM - 5 rounds, 5 reps, 1-minute window
Power Clean / 5x5 135lb 60s|0s auto
// Tabata - 8 rounds of 20s work / 10s rest
Squat, Bodyweight / 8x1+ 0lb 20s|10s auto

In the UI (in the app, in Live Activity / Live Update, and in Apple Watch as well), you'll get a set timer modal if the current set has time.

Read more in the docs - section "Set timers (active timers) and circuits".

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

u/astashov β€” 2 months ago
β–² 26 r/liftosaur

πŸ“„ RFC: Time-based exercises and circuits support

I'm trying to think through how to add support for the time-based exercises, and also support the circuits better. So, I'm proposing the following changes to the Liftoscript and the app, and would love your opinion on them!

Active (set) and rest timers in Liftoscript

You can now optionally specify both the active timer and the rest timer, separating by |. I.e. setTimer|restTimer. Would look like this:

Plank / 3x1 60s|30s

That'd be 3 sets of planks, you do them for 60s, and then rest for 30s.

If you want to keep the default rest timer, and only use set timer, it'd be 60s|? - question mark for the rest timer falls back to global default one.

The + modifier on the set timer would make the timer go over the threshold, so you'd need to stop it manually to record the time. E.g. Plank / 3x1 60s+|30s doesn't stop automatically, you'd need to stop it and that would record the time.

The target and completed set timer would be available in progress and update blocks as setTime and completedSetTime.

Auto

There's also a new keyword auto - if presented, it'll automatically goes to next set after the rest timer. This lets you to do circuits, e.g. EMOM or Tabata:

// EMOM - 5 rounds, 5 reps, 1-min window
emom: Power Clean / 5x5 135lb 60s|0s auto

// Tabata - 8 times do 20s work / 10s rest, record reps
tabata: Squat, Bodyweight / 8x1+ 20s|10s auto

Active set timer during workout

During workout, while the set timer is active, it'll show the timer in a modal with big numbers, going up, and will show a threshold. It would have 2 buttons:

  • record time and continue (so it'd switch to the rest timer when it hits the threshold)
  • and record time and stop (so it'd switch to rest timer immediately).

Set time in the set row

Probably will show it where the RPE is right now. If it's both RPE and time - it'd be 2 lines - RPE on top, and time underneath. Tapping on time would let you to edit it.

So, what do you think? Some use case I'm missing here that is important for you? Let me know in the comments!

reddit.com
u/astashov β€” 2 months ago
β–² 14 r/liftosaur

πŸ“£ Added API / MCP for the equipment and exercise data

Now you can manage your gyms and equipment through API and MCP, as well as managing the exercise data:

  • 1RM value
  • Muscle overrides
  • Equipment assigned to exercises
  • Default rounding
  • Whether the exercise is unilateral
  • Exercise persistent notes
reddit.com
u/astashov β€” 2 months ago