Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

Interval Timer icon

Interval Timer

A work/break timer that wakes you up with your own music.
Set work and break lengths and a number of loops, then pick the alarm: a local audio file, a YouTube video or a Spotify track.
A small always-on-top window keeps the countdown in view while you work.

Latest release Downloads Platform: Windows 10 and 11 Also an installable PWA English and Turkish Built with Electron and vanilla JavaScript License: ISC

Download the Windows installer   Try the live demo   Open the web app

Download · Features · Alarm sources · Current limits · Build from source · Discussions

An interval runs from Work into Break in the main window while the small always-on-top window mirrors the same countdown

Work, break, repeat
Set work and break lengths down to the second and how many loops to run. The phase, loop count and status are always on screen; Pause and Continue pick up exactly where they stopped.
Your own alarm
Wake up to a local audio file, a YouTube video or a Spotify track, and choose how many seconds it plays. If a YouTube or Spotify link fails to load, the local alarm plays instead, so a phase change is not silent.
Always in view
The pin button shrinks the timer into a small always-on-top window that mirrors and controls the countdown, and stays above other apps even when they go full screen.
Presets
Pomodoro, Short Focus and Deep Work come built in. Save up to 20 of your own, each with its own alarm; the last session you tweaked is kept automatically.

Download

Get Interval.Timer.Setup.<version>.exe from the latest release and run it. It installs for the current user, with no admin rights and no Node.js needed. The app checks GitHub for newer versions and shows a banner when one is out; install the new version over the old one.

Warning

The installer is not code-signed, so Windows SmartScreen may warn before running it. Choose More info → Run anyway to continue.

Not on Windows, or on a phone? The web app runs in any modern browser and can be added to the home screen. It works offline once loaded. It has no always-on-top window and no Spotify alarms; see Current limits.

Features

The Interval Timer tab running the Pomodoro preset, 24:56 left in the Work phase   The Alarm dialog: current sound, Local file, YouTube and Spotify sections, and the alarm length for work and break

  • Interval Timer: work and break lengths in minutes and seconds, a loop count, and a live phase/loop/status display.
  • Timer: a plain one-shot countdown, separate from the interval loop, with its own alarm length.
  • Alarm dialog: the alarm sound and how long it plays live in one place, behind the alarm-clock button. Changes apply immediately.
  • Presets: three built-in presets, up to 20 of your own, each remembering its alarm; a badge marks a saved YouTube or Spotify link that no longer works.
  • Mini window: a small always-on-top window with the countdown, phase and Play/Pause/Reset; drag it anywhere and resize it from the edges.
  • Keeps running in the background: the app sits in the system tray, and timer throttling and system sleep are held off while it runs, so a countdown does not drift when the window is hidden.
  • English and Turkish: switch with the globe button; every label and tooltip follows.
More screenshots

The preset picker open, listing Pomodoro, Short Focus and Deep Work with their lengths, loops and alarm   The web app on a phone: the title and the alarm and language buttons on one row, tabs underneath   The always-on-top mini window showing 00:03, Work, loop 1 of 2

Alarm sources

flowchart LR
    P["Phase ends"] --> S{"Selected alarm"}
    S -- "Local file" --> L["Plays the file"]
    S -- "YouTube link" --> Y["Plays the video's audio"]
    S -- "Spotify track" --> SP["Opens the track<br/>in the Spotify app"]
    Y -. "fails to load" .-> D["Local alarm<br/>(alarm.mp3 by default)"]
    SP -. "fails to load" .-> D
Loading
Source How to pick it Notes
Local file Drag an MP3, WAV or OGG onto the dialog, or Choose file… Recent files are listed for one-click reuse. In the web app the file is stored in the browser.
YouTube Paste a video URL and press Load Saved links are kept per preset and checked for availability.
Spotify Connect Spotify, then paste a track URL Plays the full track in the Spotify desktop app. Pausing it from the timer needs Spotify Premium. Desktop app only.

Current limits

  • Windows only for the desktop app. There is no macOS or Linux build; the web app covers other platforms without the always-on-top window.
  • No automatic install of updates. The app tells you a new version is out; you run the new installer yourself.
  • Unsigned installer, so SmartScreen may warn on first run.
  • Spotify needs the Spotify desktop app, and pausing the alarm from the timer needs Premium; on a free account the track plays until you stop it in Spotify.
  • The web app cannot pin a window on top or play Spotify alarms, and a phone may pause timers when the browser is in the background.

Building from source

Needs a current Node.js LTS release on Windows.

git clone https://github.com/ege-ozel/interval-timer.git
cd interval-timer
npm install
npm start          # run the desktop app
npm run dist       # build the Windows installer into packages/electron/dist/

Electron downloads its own binary the first time npm start runs. There is no test suite or lint script.

Spotify credentials

Release builds ship with the project's own Spotify app credentials, so Spotify alarms work without setup; each user still signs in to their own Spotify account. The credentials only identify the app to Spotify's API. See RELEASE_VALIDATION_REPORT.md for the trade-offs.

A source checkout has no credentials. To use your own Spotify app, copy packages/electron/spotify-credentials.example.json to packages/electron/spotify-credentials.json and fill in the client ID and secret from the Spotify Developer Dashboard. The file is gitignored, and the secret never reaches the renderer.

Project structure

An npm-workspaces monorepo, vanilla JavaScript ES modules throughout: no framework, no bundler, no TypeScript.

Package What it is
packages/core The platform-agnostic renderer (HTML, CSS, JS). Runs unchanged in the desktop app, the landing-page demo and the web app.
packages/electron The Electron main process: windows, tray, the local HTTP server, Spotify sign-in, presets and update checks.
packages/pwa The installable web app: manifest, service worker and browser stand-ins for the desktop-only APIs.
docs/ The GitHub Pages site: landing page, live demo (docs/app) and web app (docs/pwa), copied from packages/core by npm run sync:demo and npm run sync:pwa.

Each subsystem has a short design note in docs/architecture.

Feedback

Bug reports and feature requests are welcome in Discussions or as an issue. You can also comment at the bottom of the landing page.

License

Interval Timer is released under the ISC License, as declared in package.json.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages