{"id":50544046,"url":"https://github.com/blordeus/pomodoro-app","last_synced_at":"2026-06-03T22:30:33.266Z","repository":{"id":356828753,"uuid":"1234229571","full_name":"blordeus/pomodoro-app","owner":"blordeus","description":"A Pomodoro timer app with customizable fonts, accent colors, and adjustable session times. Built with React and Vite.","archived":false,"fork":false,"pushed_at":"2026-05-09T23:09:09.000Z","size":41,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-10T01:19:25.862Z","etag":null,"topics":["css","frontend-mentor","javascript","pomodoro","productivity","react","responsive","timer","vite"],"latest_commit_sha":null,"homepage":"https://pomodoro-app-one-phi.vercel.app","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blordeus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-09T23:03:29.000Z","updated_at":"2026-05-10T00:04:41.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/blordeus/pomodoro-app","commit_stats":null,"previous_names":["blordeus/pomodoro-app"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/blordeus/pomodoro-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blordeus%2Fpomodoro-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blordeus%2Fpomodoro-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blordeus%2Fpomodoro-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blordeus%2Fpomodoro-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blordeus","download_url":"https://codeload.github.com/blordeus/pomodoro-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blordeus%2Fpomodoro-app/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33883102,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"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":["css","frontend-mentor","javascript","pomodoro","productivity","react","responsive","timer","vite"],"created_at":"2026-06-03T22:30:32.496Z","updated_at":"2026-06-03T22:30:33.257Z","avatar_url":"https://github.com/blordeus.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Frontend Mentor — Pomodoro App\n\n![Challenge Difficulty](https://img.shields.io/badge/Difficulty-Advanced-red?style=flat-square)\n![Status](https://img.shields.io/badge/Status-Completed-4F8EF7?style=flat-square)\n![React](https://img.shields.io/badge/React-20232A?style=flat-square\u0026logo=react\u0026logoColor=61DAFB)\n![Vite](https://img.shields.io/badge/Vite-646CFF?style=flat-square\u0026logo=vite\u0026logoColor=white)\n![CSS3](https://img.shields.io/badge/CSS3-1572B6?style=flat-square\u0026logo=css3\u0026logoColor=white)\n\nThis is my solution to the [Pomodoro App challenge on Frontend Mentor](https://www.frontendmentor.io/challenges/pomodoro-app-KBFnycJ6G).\n\n## 📸 Preview\n\n![App Preview](./preview.jpg)\n\n## ✅ Features\n\n- Three timer modes — Pomodoro (25 min), Short Break (5 min), Long Break (15 min)\n- Animated SVG circular progress ring that drains as time counts down\n- START / PAUSE / RESUME / RESTART timer controls\n- Settings modal with:\n  - Adjustable times for each mode via custom +/− inputs\n  - Three font options (Kumbh Sans, Roboto Slab, Space Mono)\n  - Three accent color options (Red, Cyan, Purple)\n- Settings persist across sessions via localStorage\n- Font and color apply globally on the fly without page reload\n- Fully responsive — mobile, tablet, and desktop layouts\n\n## 🛠️ Built With\n\n- React 18 (functional components, custom hooks)\n- Vite\n- CSS3 (custom properties, flexbox)\n- SVG `stroke-dashoffset` for the circular progress ring\n\n## 💡 What I Learned\n\n- **SVG circular progress** — calculating `stroke-dasharray` and `stroke-dashoffset` to animate a ring that drains clockwise from 12 o'clock\n- **Custom hooks** — separating timer logic (`useTimer`) and settings persistence (`useSettings`) into reusable hooks keeps `App.jsx` clean\n- **CSS custom properties at runtime** — applying font and color changes globally by setting `--accent` and `--font-app` on `:root` via `document.documentElement.style.setProperty`\n- **Timer state machine** — managing idle → running → paused → complete states cleanly with `useEffect` and `useRef` for the interval\n\n## 🚀 Getting Started\n\n```bash\ngit clone https://github.com/blordeus/pomodoro-app.git\ncd pomodoro-app\nnpm install\nnpm run dev\n```\n\nOpen `http://localhost:5173` in your browser.\n\n## 🔗 Links\n\n- [Live Demo](https://pomodoro-app-one-phi.vercel.app/)\n- [Frontend Mentor Challenge](https://www.frontendmentor.io/challenges/pomodoro-app-KBFnycJ6G)\n\n## 👤 Author\n\n**Bryan Lordeus**\n[Portfolio](https://bryanlordeus.com) · [Frontend Mentor](https://www.frontendmentor.io/profile/blordeus) · [GitHub](https://github.com/blordeus)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblordeus%2Fpomodoro-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblordeus%2Fpomodoro-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblordeus%2Fpomodoro-app/lists"}