codemonkeywtf /
dinodoro
A flexible, modern, command-line Pomodoro-style focus timer for macOS, built with Deno and TypeScript.
37/100 healthLoading repository data…
hadiyaazeem / repository
A modern Pomodoro-style focus timer built with React, TypeScript, and Tailwind CSS featuring session tracking, progress visualization, dark mode, and a responsive user experience.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
A pixel-perfect, accessible, responsive focus-session timer built in React 18 + TypeScript. Recreates the provided Figma/mock reference exactly: a split-flap departure-board timer, an 8px spacing system, and a full light/dark token system.
Study Sprint lets a student run a 25-minute Sprint, a 50-minute Deep Work block, or a 5-minute Short Break, track daily focus stats, and review a running log of today's sessions — complete with a simulated save flow (loading + occasional retryable failure) to demonstrate real async UI states.
role="alert" banner.[data-theme]), persisted to localStorage, respects prefers-color-scheme on first load.aria-live timer region, aria-pressed toggles, skip link, visible focus rings, prefers-reduced-motion support.any)npm install
npm run dev # start local dev server at http://localhost:5173
npm run build # type-check and produce a production build in dist/
npm run preview # preview the production build locally
npm run lint # ESLint, including jsx-a11y rules
Requires Node 18+.
src/
components/
Button.tsx Shared pill button (variants, sizes, loading, disabled)
TimerBoard.tsx Composes FlapDigit tiles into the MM:SS display
FlapDigit.tsx Single animated split-flap tile
ThemeToggle.tsx Light/dark switch
ProgressBar.tsx Animated session-completion bar
StatsCard.tsx Stat tile (label + value + tone)
LogEntry.tsx Single row in Today's Log, with insertion animation
StatusBadge.tsx Status pill (Completed / Skipped / Failed)
DurationSelector.tsx Sprint / Deep work / Short break chooser
ErrorBanner.tsx Retryable save-failure alert
hooks/
useTimer.ts Countdown state machine: start/pause/reset/select
useSessionLog.ts Log + derived stats + simulated save/retry flow
useTheme.ts Theme state, persistence, prefers-color-scheme
utils/
time.ts pad / formatMMSS / formatClockTime / formatDuration
constants.ts DURATIONS presets, save-delay/failure-rate, getDuration()
types/
index.ts TimerSession, LogEntry, Stats, Theme, ButtonProps, etc.
styles/
tokens.css Light/dark CSS custom properties
App.tsx
main.tsx
index.css
Logic (hooks), presentation (components), and utilities are kept in separate folders with no duplicated JSX — every card, badge, and button is a single reusable component.
<header>, <main>, <section> with aria-labelledby on the log section.role="timer" aria-live="polite" region with a full-word label ("04:32 remaining, 4 minutes 32 seconds") instead of forcing screen readers to parse each flap tile.aria-pressed rather than custom roles.:focus-visible gets a 2px offset outline app-wide (not just on a few components), using a token (--focus-ring) that meets contrast in both themes.role="alert" so it's announced immediately, and always pairs the error message with a Retry action rather than a dead end.prefers-reduced-motion: reduce disables/shortens all transitions and animations, including the flap-digit flip and log insertion.Built and tested at 375px (mobile), 768px (tablet), and 1440px (desktop):
1.3fr / 1fr two-column grid at the lg breakpoint — a real reflow, not a scaled-down layout.sm (matching the mock) since the timer digits and duration chips already communicate status at narrow widths.clamp() so digits scale fluidly between breakpoints instead of jumping.flex-wrap) rather than overflowing on narrow viewports.Any static host works since this is a standard Vite build:
npm run build
Vercel: vercel --prod (framework preset: Vite) or connect the repo in the dashboard — build command npm run build, output directory dist.
Netlify: connect the repo — build command npm run build, publish directory dist. Or drag-and-drop the dist/ folder in the Netlify dashboard.
Button computed hover styles via inline onMouseEnter/onMouseLeave handlers; this build moves that to Tailwind's hover: classes for the same visual effect with less code and no risk of interfering with framer-motion's own transforms.failed status to SessionStatus (only done/skipped existed in the mock) since the log's stated purpose includes completion status, and "Failed" is implied by the save-error flow.syncError banner had no dismiss/retry action beyond copy; this build adds an explicit Retry button so the error state is actually recoverable, per the task's error-state requirement.Selected from shared topics, language and repository description—not editorial ratings.
codemonkeywtf /
A flexible, modern, command-line Pomodoro-style focus timer for macOS, built with Deno and TypeScript.
37/100 healthnasreti /
ControlFlow is a simple, modern Pomodoro-style productivity timer built with TypeScript, React, and TailwindCSS. Helps students stay focused with clean visuals, smooth session flow paired with a Weekly Analytics stat to track growth. Control your time with control flow!
34/100 health