A responsive, feature-rich exam timer application built with React and Vite. Track exam duration with multiple timing modes, dark mode support, and a modern UI.
- Two Timing Modes
- Start + Duration: Set exam start time and duration to calculate remaining time
- Countdown: Simple countdown timer with minute precision
- Dark Mode: Toggle between light and dark themes
- Display Options: Show/hide seconds in timer display
- Real-time Updates: Live clock showing current time in start+duration mode
- Responsive Design: Works seamlessly on desktop and mobile devices
- No Backend Required: Runs entirely in the browser
- React 18 - UI library
- Vite - Build tool with HMR (Hot Module Replacement)
- CSS3 - Modern styling with CSS variables for theming
- ESLint - Code quality
- Node.js 16+
- npm or yarn
# Install dependencies
npm install
# Start development server (runs on http://localhost:3001)
npm run dev
# Build for production
npm run build
# Preview production build
npm run preview
# Deploy to GitHub Pages
npm run deploysrc/
├── App.jsx # Main timer component and logic
├── App.css # App-level styles (minimal)
├── index.css # Global styles, theme variables, and component styles
├── main.jsx # React entry point
└── assets/ # Images and other assets
- Set the exam start time using the time picker
- Enter the exam duration in minutes
- The app calculates and displays the end time and remaining time
- Uses your device's current time for calculations
- Enter the desired countdown duration in minutes
- Click "Start" to begin the countdown
- Click "Stop" to pause
- The timer automatically stops at 00:00
- Dark Mode: Toggle in the settings menu (⚙️ button)
- Show Seconds: Display seconds in the timer (useful for final minute)
- Timer Mode: Switch between Start+Duration and Countdown modes
# Run linter
npm run lintThe project uses ESLint with React and React Hooks rules.
The app uses CSS variables for theming. Modify colors in src/index.css:
- Light mode:
:rootselector - Dark mode:
body.dark-modeselector
Key variables:
--main-bg: Background color--card-bg: Card background--text-color: Text color--accent: Primary accent color--danger: Warning/danger color
The project is configured for GitHub Pages deployment:
npm run deployMake sure your repository has GitHub Pages enabled.
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (latest)
- Mobile browsers (iOS Safari, Chrome Mobile)
MIT