powerlift.ing Purpose - powerlift.ing is a static, client-only web app for creating a powerlifting program and sharing it as a single URL. - There are no accounts and no backend API. The entire program state is encoded into the URL. Creator / source - Creator: James L. Cowan (@jameslcowan) - Site: https://jameslcowan.com/ - Source code: https://github.com/jameslcowan/powerlift.ing How sharing works (routing + state-in-URL) - Default route format (hash): /#/p/ - Optional “pretty” path format: /p/ - The app uses history.replaceState() to keep the URL updated as the user edits. Important: Do NOT change the URL/state contract - Existing shared links depend on the exact encoding contract described below. Encoding contract (v1) - Program state is JSON, compressed using lz-string (compressToUint8Array), then base64url encoded. - Decoding reverses this: base64url decode -> bytes -> lz-string decompressFromUint8Array -> JSON.parse. Base64url details - Replace '+' with '-', '/' with '_', and remove '=' padding. - When decoding, restore padding to a multiple of 4. Program state schema (v1) { "v": 1, "u": "lb" | "kg", "c": [{ "n": "Meso 1" }, { "n": "Meso 2" }, ...], "weeks": [ { "c": 0, "days": [ { "label": "DAY 1 - MON", "rows": [ { "ex": "Squat", "mode": "Paused", "sets": "3", "reps": "5", "load": "315", "pct": "80", "rpe": "8", "rest": "03:00" } ] } ] } ] } Example program JSON (minimal, 3 days/week, 1 week, kg) { "v": 1, "u": "kg", "c": [{ "n": "Meso 1" }], "weeks": [ { "c": 0, "days": [ { "label": "DAY 1 - MON", "rows": [ { "ex": "Squat", "mode": "", "sets": "4", "reps": "5", "load": "", "pct": "", "rpe": "7.5", "rest": "03:00" }, { "ex": "Bench Press", "mode": "", "sets": "4", "reps": "6", "load": "", "pct": "", "rpe": "7.5", "rest": "02:30" } ] }, { "label": "DAY 2 - WED", "rows": [ { "ex": "Deadlift", "mode": "", "sets": "3", "reps": "5", "load": "", "pct": "", "rpe": "7.5", "rest": "03:30" }, { "ex": "Overhead Press", "mode": "", "sets": "3", "reps": "8", "load": "", "pct": "", "rpe": "8", "rest": "02:00" } ] }, { "label": "DAY 3 - FRI", "rows": [ { "ex": "Squat", "mode": "Paused (2s)", "sets": "3", "reps": "4", "load": "", "pct": "", "rpe": "8", "rest": "03:00" }, { "ex": "Bench Press", "mode": "Paused (1s)", "sets": "3", "reps": "5", "load": "", "pct": "", "rpe": "8", "rest": "02:30" } ] } ] } ] } Full example (multi-mesocycle, 4 weeks each, 4 days/week) - See: https://powerlift.ing/ai.txt - Or use: https://powerlift.ing/ai.html (click “Insert full example JSON” then “Generate link”) Notes - Keys are intentionally short for URL size. - Numeric values are stored as strings in the state. What AI agents can do with this - Generate a program by producing valid JSON in the schema above. - Encode/decode using the algorithm above (lz-string + base64url) to create a shareable /p/ link. - Prefer generating “gym-friendly” plans (clear exercise names, reasonable sets/reps, rest times). Indexing guidance - The homepage should be indexable. - Shared program links (/p/) should not be indexed (they are user-generated and effectively infinite).