Workstr on Nostr: #Workstr programs are plain NIP-101e workout templates — kind:33402, addressable ...
#Workstr programs are plain NIP-101e workout templates — kind:33402, addressable via d = workstr:program:<slug>.
The prescription is one exercise tag per set, referencing a kind:33401 exercise by coordinate:
["exercise", "33401:<pubkey>:<d>", "<relay>", weight, reps, rpe, set_type] (timed work swaps that for duration + set_type).
Plus t tags for discovery and an imeta muscle map. Workstr-only fields — rest, notes, order — sit in a namespaced workstr_meta tag everyone else ignores, so the event stays readable to any NIP-101e client while my re-import stays lossless.
Publishing a program publishes its exercises first. No dangling references.
It is good to note that importing a Program will automatically import the exercises in it.
#nostr #fitness #workout #bitcoin
Published at
2026-07-30 20:50:12 UTCEvent JSON
{
"id": "aebbd92f67f997ed598426e48d8d99818d771670df102bd94148dc10ed9bc231",
"pubkey": "ef24246321e47dd16cec960d4d374703af78505d0e59c532b054b5060e372bd6",
"created_at": 1785444612,
"kind": 1,
"tags": [],
"content": "#Workstr programs are plain NIP-101e workout templates — kind:33402, addressable via d = workstr:program:\u003cslug\u003e.\n \nThe prescription is one exercise tag per set, referencing a kind:33401 exercise by coordinate:\n[\"exercise\", \"33401:\u003cpubkey\u003e:\u003cd\u003e\", \"\u003crelay\u003e\", weight, reps, rpe, set_type] (timed work swaps that for duration + set_type). \n\nPlus t tags for discovery and an imeta muscle map. Workstr-only fields — rest, notes, order — sit in a namespaced workstr_meta tag everyone else ignores, so the event stays readable to any NIP-101e client while my re-import stays lossless.\n\nPublishing a program publishes its exercises first. No dangling references. \n\nIt is good to note that importing a Program will automatically import the exercises in it.\n\n#nostr #fitness #workout #bitcoin\n\nhttps://i.nostr.build/Olhd8J4qopBjoOvL.png",
"sig": "756986b48e83e9640a2c434b87e8b93c9f0e7e9a9904354b5e5d3eadc238def32064761d632986b38337247c41f349e4e1e6a8f559295fcd57ce34685fe506c7"
}