{"id":29452650,"url":"https://github.com/michaelphillips4/meditationintervaltimer","last_synced_at":"2026-04-12T09:42:24.371Z","repository":{"id":295674724,"uuid":"990817216","full_name":"michaelphillips4/MeditationIntervalTimer","owner":"michaelphillips4","description":"An interval timer for meditation. This is in react with typescript and uses vite. It is a PWA and once downloaded will run offline.","archived":false,"fork":false,"pushed_at":"2025-06-24T21:13:15.000Z","size":3619,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-24T22:22:26.208Z","etag":null,"topics":["javascript","pwa","react","typescript","typescript-react","vite","vite-react-typescript","vitejs","vitejs-react"],"latest_commit_sha":null,"homepage":"https://www.meditationintervaltimer.co.uk/","language":"TypeScript","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/michaelphillips4.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,"zenodo":null}},"created_at":"2025-05-26T17:23:25.000Z","updated_at":"2025-06-24T21:13:18.000Z","dependencies_parsed_at":"2025-05-26T20:26:44.731Z","dependency_job_id":"9be3cccd-518c-46dd-bd77-91fe12513b06","html_url":"https://github.com/michaelphillips4/MeditationIntervalTimer","commit_stats":null,"previous_names":["michaelphillips4/meditationintervaltimer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/michaelphillips4/MeditationIntervalTimer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelphillips4%2FMeditationIntervalTimer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelphillips4%2FMeditationIntervalTimer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelphillips4%2FMeditationIntervalTimer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelphillips4%2FMeditationIntervalTimer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michaelphillips4","download_url":"https://codeload.github.com/michaelphillips4/MeditationIntervalTimer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michaelphillips4%2FMeditationIntervalTimer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265213204,"owners_count":23728681,"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":["javascript","pwa","react","typescript","typescript-react","vite","vite-react-typescript","vitejs","vitejs-react"],"created_at":"2025-07-13T22:10:07.255Z","updated_at":"2026-04-12T09:42:24.333Z","avatar_url":"https://github.com/michaelphillips4.png","language":"TypeScript","readme":"# Meditation Timer\n\nhttps://www.meditationintervaltimer.co.uk/\n\nhttps://meditationtimer.orca-tools.com/\n\nThis is a simple timer that allows a number of sections to a meditation.\nIt plays a sound at the end of each section of meditation.\n\n## Saving meditations\n\nYou can save a mediation and its sections. They are simply saved in the browsers local storage,\n\n\n## PWA \n\nThis is a PWA and will work once downloaded offline. This is achieved using the `vite-pwa-plugin`\nhttps://www.npmjs.com/package/vite-plugin-pwa . Note it seemed to work much better if the a images and sounds were stored in the public folder.\n\n## Oddities and Gotchas\n\n### Playing sounds \n\nOn apple devices there is a restriction where sounds can only be played if the user directly interact with the app. This is a problem for playing sounds at the end of intervals. I have been able to get round this by loading all the sounds into a map and then starting then pausing them immediately.\nBe aware of this and always call the `preloadSounds()` method `sounds.ts` before using sounds that are played programmatically.\n\n### Screen lock request\n\nThere is a request in the code to stop the device going into sleep mode. This is released once the meditation completes or is manually stopped. \n\n\n## Deployment \n\nThe git hub branch main will deploy the code to AWS Amplify\n\n\n# React + TypeScript + Vite\n\nThis template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.\n\nCurrently, two official plugins are available:\n\n- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh\n- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh\n\n## Expanding the ESLint configuration\n\nIf you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:\n\n```js\nexport default tseslint.config({\n  extends: [\n    // Remove ...tseslint.configs.recommended and replace with this\n    ...tseslint.configs.recommendedTypeChecked,\n    // Alternatively, use this for stricter rules\n    ...tseslint.configs.strictTypeChecked,\n    // Optionally, add this for stylistic rules\n    ...tseslint.configs.stylisticTypeChecked,\n  ],\n  languageOptions: {\n    // other options...\n    parserOptions: {\n      project: ['./tsconfig.node.json', './tsconfig.app.json'],\n      tsconfigRootDir: import.meta.dirname,\n    },\n  },\n})\n```\n\nYou can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:\n\n```js\n// eslint.config.js\nimport reactX from 'eslint-plugin-react-x'\nimport reactDom from 'eslint-plugin-react-dom'\n\nexport default tseslint.config({\n  plugins: {\n    // Add the react-x and react-dom plugins\n    'react-x': reactX,\n    'react-dom': reactDom,\n  },\n  rules: {\n    // other rules...\n    // Enable its recommended typescript rules\n    ...reactX.configs['recommended-typescript'].rules,\n    ...reactDom.configs.recommended.rules,\n  },\n})\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelphillips4%2Fmeditationintervaltimer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaelphillips4%2Fmeditationintervaltimer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelphillips4%2Fmeditationintervaltimer/lists"}