{"id":18008574,"url":"https://github.com/mgree/stretchintime","last_synced_at":"2026-07-28T03:31:21.461Z","repository":{"id":142094030,"uuid":"441770586","full_name":"mgree/stretchintime","owner":"mgree","description":null,"archived":false,"fork":false,"pushed_at":"2021-12-27T02:41:03.000Z","size":32,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-07T15:44:51.059Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Elm","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mgree.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-12-25T22:44:51.000Z","updated_at":"2021-12-27T02:41:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"8b76276b-6095-42d3-8376-d570dcf727c2","html_url":"https://github.com/mgree/stretchintime","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mgree/stretchintime","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgree%2Fstretchintime","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgree%2Fstretchintime/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgree%2Fstretchintime/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgree%2Fstretchintime/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mgree","download_url":"https://codeload.github.com/mgree/stretchintime/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mgree%2Fstretchintime/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279003192,"owners_count":26083533,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-30T01:19:10.339Z","updated_at":"2025-10-10T07:34:09.808Z","avatar_url":"https://github.com/mgree.png","language":"Elm","funding_links":[],"categories":[],"sub_categories":[],"readme":"A timer specially built for repetitive, timed routines---like stretching. Specify a list of stretches and their variations concisely, then hit play and you'll run through each of them.\n\n# Syntax\n\nRoutines can be given in two languages: a high-level specification called the _program format_ and a lower-level, explicit specification called the _plan format_.\n\nAt its core, a routine is just a list of _actions_, i.e., things to do: a stretch (or some other activity with som properties), a pause to rest or get ready for the next stretch, or an announcement of some kind (e.g., what the next stretch is). A _plan_ is just a list of these _entries_. Each _entry_ is either a named thing with some properties to be done for some duration, a pause for some duration, or an announcement.\n\nAn _expression_ in the program format compiles down to a _plan_, which is a series of _entries_. The plan format is a subset of the program format.\n\n## Program format\n\nThe line-oriented, indentation-sensitive _program format_ offers concise specifications: you can \"scope\" a variation over a large set of entries.\n\n```\nkeywords:\n  pause, vary, in, repeat, shuffle, intersperse, before, after, and, between\n\nBLOCK    ::= vary NAME: VALUE(, VALUE)*\n               BLOCK\n           | repeat N\n               BLOCK\n           | ENTRY\n             [BLOCK]\n           | SHUFFLE\n               BLOCK\n           | intersperse \n               BLOCK1\n             [in|before and in|after and in|before and after and in|around] \n               BLOCK2\n\nENTRY    ::= NAME DURATION (NAME: VALUE(, VALUE)*)*\n               [NAME: VALUE(, VALUE)*]\n               [repeat N]\n           | pause DURATION\n           | announce MESSAGE\n\nNAME     ::= [^0-9]*\nVALUE    ::= [^,]*\nDURATION ::= [[H:]M:]S\nMESSAGE  ::= [^\\n]*\n```\n\n## Plan format\n\nThe compiled _plan format_ is just a list of entries.\n\n```\nPLAN  ::= ENTRY \n        | ENTRY\n          PLAN\n\nENTRY ::= NAME DURATION (NAME: VALUE)*\n        | pause DURATION\n        | announce MESSAGE\n        \nNAME     ::= [^0-9]*\nVALUE    ::= [^,]*\nDURATION ::= [[H:]M:]S\nMESSAGE  ::= [^\\n]*\n```\n\n# Semantics\n\nKey/value pairs are additive--we just tack them on.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgree%2Fstretchintime","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmgree%2Fstretchintime","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmgree%2Fstretchintime/lists"}