ExamClock is a desktop application for exam centers that simplifies exam time management by combining a countdown timer with a digital clock.
- Countdown from a preset duration
- Two configurable alarms at specified time intervals
- Visual progress bar
- Display current time in 12h or 24h mode
- Continuous operation during exam
- Ability to enter exam name and examination center number
- Automatic loading of data from JSON configuration file (if values are not entered manually)
- Customizable colors for the application
- Contrast and dark mode for enhanced accessibility
config.jsonconfiguration file for storing user data- Variable settings saved locally
- Node.js (version 14 or higher)
- npm or yarn
- Clone the repository
git clone https://github.com/bumbot-hub/ExamClock.git
cd ExamClock- Install dependencies
npm install- Run the application
npm startTo build the application for distribution:
npm run buildThe application will be compiled to .exe (Windows), .dmg (macOS), or .AppImage (Linux).
examclock/
├── assets/
│ ├── fontawesome/ # Icons files so the app works offline
│ │ ├── ...
│ ├── images/ # Images for the README and app UI
│ │ ├── ...
├── src/
│ └── data/
│ └── config.json # Configuration file
│ ├── js/
│ │ ├── app.js # Renderer logic and UI event wiring
│ │ ├── clock.js # Clock display and update logic
│ │ ├── settings_data.js # Loading and saving settings
│ │ ├── timer.js # Timer logic
│ │ ├── timerUI.js # Timer-related UI interactions
│ │ └── utils.js # Shared helper functions
│ ├── styles/
│ │ └── style.css
│ ├── index.html
│ └── main.js # Electron main process
├── .gitignore
├── package.json
└── README.md
The application uses the data/config.json file to store user settings.
Example file content:
{
"settings": {
"exam-name": "C1 Advanced",
"centre-number": "PL006",
"1st-reminder": "30",
"2nd-reminder": "10"
},
"accessibility": {
"hour-mode": false,
"dark-mode": false,
"accent-color": "#3691f2"
},
"timers": []
}-
Launch the application
-
Select a mode:
- Click Clock to display the current time
- Click Timer to set up a timer
-
For the timer:
- Enter the duration (format: HH:MM)
- Optionally enter the exam component name
- Click Start
- Use Play/Pause to resume/pause
- Click Reset to reset the timer
-
Adjust settings:
- Click the Settings icon to change color or contrast or exam data (center number, name)
- Use Dark mode for eye comfort
npm start # Runs the application in dev mode
npm run build # Builds the application for distribution- Nothing here ;)
- Improve UX by adding keyboard interactions with timer
- More settings remembered in file
- Code structure improvement
- Add reminders for timer
- Create history for timers
This project is licensed under the MIT License - see the LICENSE file for details.

