A professional, full-screen countdown timer for Toastmasters meetings — built as a Progressive Web App (PWA) with no backend required. It can be installed on your device for quick access and offline use.
- Pre-populated agenda — ships with a complete default Toastmasters meeting agenda (Toastmaster introduction, speakers, table topics, evaluators, reports, etc.) so you can start timing immediately.
- Fully editable slots — each slot has fields for Role, Name, Min time, and Max time.
- Add & remove slots — add new speaker slots with one click; new slots are inserted after the currently selected row for convenient reordering.
- Delete any slot — remove slots you don't need with the trash button.
- Full-screen colour transitions — the background smoothly changes colour as time elapses:
- Green — minimum time reached (speaker has spoken long enough).
- Amber — halfway between minimum and maximum time.
- Red — maximum time reached (speaker should wrap up).
- Flashing red — bell time (30 seconds past maximum), with a pulsing red/dark flash to grab attention.
- Large countdown display — timer text is sized at
15vwso it's readable from across the room. - Screen Wake Lock — automatically requests a wake lock so the device screen stays on during timing.
- Progressive Web App (PWA) — can be installed on mobile (iOS/Android) and desktop (Chrome/Edge/Safari) for a native-like experience.
- Offline support — once visited or installed, the app works entirely offline without an internet connection.
- Time used indicator — after each timed segment, a colour-coded progress bar appears on the setup screen showing what percentage of the bell time the speaker used.
- Save session — export the entire session (roles, names, times, recorded durations) to a YAML file.
- Load session — import a previously saved YAML file to restore a session.
- Responsive layout — works on desktop and mobile with dedicated breakpoints at 850 px and 600 px.
- Dark glassmorphism UI — modern dark theme with translucent glass panels, subtle borders, and smooth transitions.
- No build step — pure HTML, CSS, and vanilla JavaScript; just open
index.htmlor deploy to any static host.
You can install this timer as a Progressive Web App (PWA) to use it offline and launch it directly from your home screen or desktop.
There are three ways of installing this app on Android.
This app is currently undergoing testing on Google Play store. If you want to join the testing, do the followings:
- Important - Join this group first: https://groups.google.com/g/fufu-test-action-group
- Join using Google Play on Android: https://play.google.com/store/apps/details?id=com.fufufang86.toastmastertimer
- Join on the Web: https://play.google.com/apps/testing/com.fufufang86.toastmastertimer
You can download the latest APK here: https://github.com/fangfufu/toastmaster-timer/releases/
- Open the live demo in Chrome.
- Tap the three-dot menu (⋮) in the top-right corner.
- Tap Add to Home screen or Install app.
- Follow the on-screen prompt to install.
- Open the live demo in Safari.
- Tap the Share button at the bottom of the screen.
- Scroll down and tap Add to Home Screen.
- Confirm by tapping Add in the top-right corner.
- Open the live demo in Chrome or Edge.
- Look for the install icon (a screen with a down arrow) in the right side of the address bar.
- Click it and select Install.
- The app will now be available in your applications list and works entirely offline.
- Open the live demo or serve the files locally.
- Edit the agenda — fill in speaker names and adjust min/max times as needed. Use the Add and Delete buttons to manage roles.
- Click on a row to select a slot, then click Start.
- The timer runs full-screen. Press the Stop button (square icon) when the speaker finishes.
- Review the summary, then click Back to Setup to time the next speaker.
- Use Save and Load to persist your work between meetings.
| Threshold | Definition |
|---|---|
| Green | Speaker has reached the minimum time |
| Amber | Halfway between minimum and maximum time |
| Red | Speaker has reached the maximum time |
| Bell | 30 seconds past maximum — background flashes |
| Component | Technology |
|---|---|
| Markup | HTML5 |
| Styling | Vanilla CSS (glassmorphism, CSS variables, keyframe animations) |
| Logic | Vanilla JavaScript (ES6+), Service Workers |
| PWA | Web App Manifest, Service Worker caching |
| Icons | Lucide |
| Fonts | Inter via Google Fonts |
| Session files | js-yaml (loaded from CDN) |
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.

