Source
This app’s code and revision history are public. Download a copy or explore the files below.
Public
The app’s code and revision history are public.
Run it yourself
Take the whole tree and run it on your own machine. The download needs no account. Cloning needs a sign-in.
Download .zip
bounded clone 23e397d8a5d5bf7756362640
A copy you download is not bounded. The guarantees this app runs under - declared egress, proven invariants, writes that fail closed - live in the runtime serving this page, not in the files. What you get is auditable source you can read and run, with no runtime guarantees attached.
public/openapi.json
{
"openapi": "3.1.0",
"info": {
"title": "Lift links and guides",
"version": "1.0.0",
"description": "Lift is a free workout log. It has no API for workout data, on purpose: a person's log is private to them. This file lists the only public addresses meant for assistants and crawlers: the guides, and links that open a routine or the plate calculator for a person to check. Opening a link saves nothing. Lift is a log, not a coach, and gives no medical or training advice."
},
"servers": [{ "url": "https://lift-free.openapps.xyz" }],
"paths": {
"/llms.txt": {
"get": {
"summary": "Guide for assistants",
"description": "Plain text: what Lift does, the routine link format, the ready-made templates and every exercise id.",
"responses": { "200": { "description": "The guide.", "content": { "text/plain": { "schema": { "type": "string" } } } } }
}
},
"/index.md": {
"get": {
"summary": "Landing page as markdown",
"responses": { "200": { "description": "The landing page.", "content": { "text/markdown": { "schema": { "type": "string" } } } } }
}
},
"/r": {
"get": {
"summary": "Open a routine for a person to check",
"description": "Returns the Lift app, which shows the routine read-only. The person taps Start workout or Save to my routines; nothing is saved until they do. Routine links carry no weights or history.",
"parameters": [
{
"name": "name",
"in": "query",
"required": true,
"description": "Routine name, up to 60 characters, URL-encoded.",
"schema": { "type": "string", "maxLength": 60 }
},
{
"name": "e",
"in": "query",
"required": true,
"description": "Exercises in order, separated by commas, up to 40. Each is an exercise id from llms.txt followed by colon-separated parts: 4x6-8 (sets and reps), 3x30s (timed sets), w2 (warm-up sets), r150 (rest in seconds), s1 (superset group). Example: bench-press:w2:4x6-8:r150,overhead-press:3x8-10:r120",
"schema": { "type": "string" }
},
{
"name": "note",
"in": "query",
"required": false,
"description": "Optional note shown above the exercises, up to 300 characters.",
"schema": { "type": "string", "maxLength": 300 }
}
],
"responses": { "200": { "description": "The Lift app, showing the routine.", "content": { "text/html": { "schema": { "type": "string" } } } } }
}
},
"/plates": {
"get": {
"summary": "Open the plate calculator",
"parameters": [
{ "name": "w", "in": "query", "required": false, "description": "Target bar weight.", "schema": { "type": "number" } },
{ "name": "unit", "in": "query", "required": false, "schema": { "type": "string", "enum": ["kg", "lb"] } }
],
"responses": { "200": { "description": "The Lift app, showing the plates to load.", "content": { "text/html": { "schema": { "type": "string" } } } } }
}
}
}
}
Change history
Point OpenApps store links to openapps.free
Add favicon.ico, local share image and openapi.json for links and guides
Bind agent address in policy constants
Add OpenApp contribution strip and OpenApps source links
Bounded source sync
Bounded source sync
Bounded source sync