{"id":23633707,"url":"https://github.com/andorsk/web5-tabata-timer","last_synced_at":"2025-11-08T20:30:30.043Z","repository":{"id":236976944,"uuid":"792983676","full_name":"andorsk/web5-tabata-timer","owner":"andorsk","description":"no ads. open source. personal use. super private. no tracking. free. no paywall. own your workout data with a web5 based tabata timer. ","archived":false,"fork":false,"pushed_at":"2024-05-13T16:06:52.000Z","size":15811,"stargazers_count":2,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-28T04:53:04.960Z","etag":null,"topics":["dapp","decentralized-identity","decentralized-web-node","did","dwn","pds","tabata","tabata-timer","web5"],"latest_commit_sha":null,"homepage":"https://tabata.andor.us","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andorsk.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":"2024-04-28T05:14:11.000Z","updated_at":"2024-07-29T22:04:43.000Z","dependencies_parsed_at":"2024-05-13T17:29:46.500Z","dependency_job_id":null,"html_url":"https://github.com/andorsk/web5-tabata-timer","commit_stats":null,"previous_names":["andorsk/web5-tabata-timer"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andorsk%2Fweb5-tabata-timer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andorsk%2Fweb5-tabata-timer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andorsk%2Fweb5-tabata-timer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andorsk%2Fweb5-tabata-timer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andorsk","download_url":"https://codeload.github.com/andorsk/web5-tabata-timer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239561059,"owners_count":19659375,"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","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":["dapp","decentralized-identity","decentralized-web-node","did","dwn","pds","tabata","tabata-timer","web5"],"created_at":"2024-12-28T04:53:14.435Z","updated_at":"2025-11-08T20:30:29.982Z","avatar_url":"https://github.com/andorsk.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Web5 Tabata Timer\n\nNo ads. Open source. Personal use. No tracking. Free. No paywall. Own and share your workout data with a web5 based tabata timer.\n\nTabata timers are used for HIT excrcises. They give you short increments of\nexercies and rest. I use it quite a bit, but the one I use has a paywall after 2\nroutines and has a ton of ads. I don't want any of that. \n\nThis is a web5 based tabata timer.\n\nWhat does web5 mean? Well, you'll own your data. Entirely. This means that you\ndon't need to worry about us looking at it ever. This was mostly a fun project\nfor myself, but I'll try to release it out the play store in the near future.\n\n## Status\n\n**In Progress. Early Version Works**\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n# or\nbun dev\n```\n\n## Screenshots\n\n\u003ctable\u003e\n\u003ctr\u003e\n  \u003ctd valign=\"top\"\u003e\n    \u003cp\u003e\u003cstrong\u003eEncrypt your data with your own DWN\u003c/strong\u003e\u003c/p\u003e\n    \u003cimg src=\"./docs/screenshots/01.png\" alt=\"Encrypt your data\" width=\"300\"\u003e\n  \u003c/td\u003e\n  \u003ctd valign=\"top\"\u003e\n    \u003cp\u003e\u003cstrong\u003eCreate a Routine\u003c/strong\u003e\u003c/p\u003e\n    \u003cimg src=\"./docs/screenshots/02.png\" alt=\"Create a Routine\" width=\"300\"\u003e\n  \u003c/td\u003e\n  \u003ctd valign=\"top\"\u003e\n    \u003cp\u003e\u003cstrong\u003eChoose your routine\u003c/strong\u003e\u003c/p\u003e\n    \u003cimg src=\"./docs/screenshots/07.png\" alt=\"Choose your routine\" width=\"300\"\u003e\n  \u003c/td\u003e\n  \u003ctd valign=\"top\"\u003e\n    \u003cp\u003e\u003cstrong\u003ePlay Screen. See your cycles.\u003c/strong\u003e\u003c/p\u003e\n    \u003cimg src=\"./docs/screenshots/04.png\" alt=\"Play Screen\" width=\"300\"\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd valign=\"top\"\u003e\n    \u003cp\u003e\u003cstrong\u003eToolbar to see your workout on the home page\u003c/strong\u003e\u003c/p\u003e\n    \u003cimg src=\"./docs/screenshots/05.png\" alt=\"Toolbar\" width=\"300\"\u003e\n  \u003c/td\u003e\n  \u003ctd valign=\"top\"\u003e\n    \u003cp\u003e\u003cstrong\u003eSee your work history\u003c/strong\u003e\u003c/p\u003e\n    \u003cimg src=\"./docs/screenshots/06.png\" alt=\"Work History\" width=\"300\"\u003e\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Demo\n\n[See demo in Web5 Tabata Timer Demo v0.0.2](./docs/Web5%20Tabata%20Timer%20Demo%20v0.0.2.mp4)\n\n\u003cvideo width=\"320\" height=\"240\" controls\u003e\n  \u003csource src=\"./docs/Web5 Tabata Timer Demo v0.0.2.mp4\" type=\"video/mp4\"\u003e\n  Your browser does not support the video tag.\n\u003c/video\u003e\n\n## Work in Progress\n\n* Features\n\n- [x] Play View\n- [x] Workout Selection View\n- [x] Configure Routine View\n- [x] Sound\n- [x] PWA\n- [x] Run in background \n- [x] Header for current workout\n- [x] Edit Routines\n- [x] Delete Routines\n- [x] Settings\n- [x] Save Sessions\n- [x] Done Screen\n- [x] Vibrate on 3 seconds\n- [x] Activity Screen\n  - [x] Delete Session\n  - [ ] Edit Session\n  - [ ] Search\n  - [ ] Overview / Heatmap\n- [ ] Launch on Google Play store \u003c- Internal Testing\n- [ ] Service Workers\n  - [x] Wake Lock\n  - [ ] Background Workout\n  - [ ] Notifications\n- [ ] Lock Screen Preview\n- [ ] Sync \n- [ ] Share sessions\n - [ ] Add friends\n- [ ] Better password management\n\n* Bug Fixes\n\n- [x] Fix Build \n- [x] Fix Pause/Play\n- [x] Fix Inputs For Form\n- [x] Fix component size for steps on Play View\n- [x] Maskable Logo\n- [x] Multiple sessions for a single workout\n- [ ] Timer stops on sleep \n  \n* Code\n\n- [x] Change state mangaement to redux\n- [x] First Major Refactor.\n- [ ] Too many ts-ignores. Cleanup\n- [ ] Remove old files\n- [ ] Second Major Refactor\n\n* Integrations\n\n- [ ] Google Fit\n- [ ] Strava\n\n## Disclosures\n\nThis was also a project for me to get to learn more about how front end works. The way react manages state, redux, etc, required me to come up the learning curve. \n\nI'm sure that those more comfortable with front end might gouge out their eyes at some of the patterns. I will try to fix them.\n\n## Limitations \n\nIf you check out existing solutions, some of them have some toolbar that sits on the lockscreen. Unfortunately, due to the limits of a pwa, that's not possible for this app. We might be using the MediaSession API or I can toss notifications/push events, but that's where it falls short. I could make this react-native, but maybe another time.\n\n## Alternatives\n\n- [Tabata Timer: Interval Timer ](https://play.google.com/store/apps/details?id=com.evgeniysharafan.tabatatimer\u0026hl=en\u0026gl=US\u0026google_abuse=GOOGLE_ABUSE_EXEMPTION%3DID%3Db350816d64fae8f3:TM%3D1714433385:C%3D%3E:IP%3D49.37.163.25-:S%3DnDI4qYnhbHEdeM3q0kSbaw%3B+path%3D/%3B+domain%3Dgoogle.com%3B+expires%3DTue,+30-Apr-2024+02:29:45+GMT) -- The main app on the app store. 5M+ downloads. This is hidden behind a paywall, has ads, is not open source. We can do better. It's farther along, and has been worked on longer, but I hope that in time this app is going to clearly be better than that app. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandorsk%2Fweb5-tabata-timer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandorsk%2Fweb5-tabata-timer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandorsk%2Fweb5-tabata-timer/lists"}