Interval Training Timer: a free, offline app for personal workouts

· 2 min read

For my personal workouts I wanted a simple interval timer: no account, no ads, no subscription, just exercise and rest periods with clear audio cues. So I built one as a Progressive Web App (PWA). It runs in the browser, installs on the phone like a native app and keeps working offline.

Open the Interval Training Timer (the interface is in Portuguese).

What it does

  • Configurable workouts: number of exercises, exercise duration and rest between exercises. The default is 10 exercises of 70 seconds with 10 seconds of rest.
  • Saved presets: create, edit and delete several named workouts; the last one used is selected when you come back.
  • Start, pause and resume, with the current phase, a large countdown and the exercise counter on screen.
  • Voice cues in Portuguese: it announces each phase and counts down at 60, 50, 40, 30, 20 and 10 seconds, and then 3, 2, 1.
  • Beep cues that work even when the phone has no text-to-speech voice: two beeps on each phase change, one on the countdown and three when the workout ends.
  • Keeps the screen on while the workout is running, so the phone does not lock in the middle of a set.

Install it on your phone

  1. Open fbnsantos.com/treino once with an internet connection and wait for the message saying it is ready for offline use.
  2. On Android (Chrome), choose Install app or Add to Home screen. On iPhone, open the Share menu in Safari and choose Add to Home Screen.
  3. Before training, tap the buttons to test the beeps and the voice, and turn up the media volume (or check your Bluetooth headphones).

Your data stays on your device

Workouts are stored only in the browser (localStorage). Nothing is sent to a server and there is no sign-in. The downside is that presets are not synced between devices, and clearing the site data deletes them.

Under the hood

It is plain HTML, CSS and JavaScript, with no framework and no build step. A few browser APIs do the heavy lifting:

  • A service worker caches the app so it opens without a connection.
  • The Web Speech API (speech synthesis) speaks the cues, preferring a European Portuguese voice when one is installed.
  • The Web Audio API generates the beeps, so there is always an audible signal even when the phone's speech engine fails, which is surprisingly common on Android.
  • The Screen Wake Lock API keeps the screen on during exercise and rest, and releases it when you pause, reset or finish.
  • The countdown is calculated from timestamps rather than by counting ticks, so it stays accurate if the browser slows down or you briefly switch apps.

Limitations

  • Keep the app open and the screen unlocked: phones can suspend audio and timers in the background.
  • The voice depends on the text-to-speech voices installed on the device. If the voice test fails on Android, check Text-to-speech output in the system settings and install a Portuguese voice. The beeps work without it.
  • Keeping the screen on needs HTTPS and a compatible browser, and battery saver modes may refuse it.

It is a small tool, but it is exactly what I needed for training at home or at the gym. Feel free to use it.