TimeSnap is a polished, timer application designed for desktop (NW.js), mobile (Apache Cordova), and web browsers. This version includes comprehensive bug fixes and a completely redesigned, modern interface.
- Fixed: Timer pause/resume logic now properly tracks remaining time
- Fixed: Timer state is properly managed across start/pause/resume cycles
- Fixed:
remainingTimeis correctly calculated when pausing - Added:
isPausedflag to prevent state conflicts
- Fixed: Preset and custom sound selection now works correctly
- Added: Visual feedback when sounds are selected (active state)
- Added:
setSelectedSound()andgetSelectedSound()helper functions - Added: Sound validation (file type, size limits)
- Added: Duplicate name detection with replace confirmation
- Fixed: Pause/Resume buttons now show/hide correctly
- Fixed: All timer buttons are properly disabled during countdown
- Fixed: Reset button re-enables all controls correctly
- Added: Dynamic button display logic
- Added: Try-catch blocks for audio playback
- Added: File validation for uploads (type, size)
- Added: User-friendly error messages
- Added: Graceful degradation for missing elements
- Fixed: Max 50 sounds limit (previously documented as 5)
- Added: File size limit (5MB)
- Added: File type validation (MP3, WAV, OGG)
- Added: Better file name truncation for long names
- Added: Input clearing after upload/error
- Fixed: Display updates consistently every second
- Fixed: Display properly clears on finish/reset
- Added: "Ready to start" status message
- Modern card-based design with clean sections
- Horizontal quick timer grid (3-4 columns on desktop)
- Proper spacing and visual hierarchy
- Large, readable timer display with gradient background
- Icon-based buttons for intuitive controls
- Hover effects and animations for better feedback
- 3-column grid for quick timers on tablets
- 2-column grid on small phones
- Stacked time inputs with proper labels
- Full-width control buttons for easy tapping
- Touch-friendly button sizes (min 44x44px)
- Optimized spacing for mobile viewports
- Custom CSS variables for consistent theming
- Beautiful typography using Outfit and JetBrains Mono
- Smooth transitions on all interactive elements
- Professional color palette with primary/secondary variants
- Proper focus states for accessibility
- Shadow system for depth perception
- Automatic color switching with CSS variables
- Persistent preference saved to localStorage
- Smooth transitions between modes
- Optimized contrast for readability
- Icon toggle (moon/sun)
-
Visual Selection Feedback
- Active state on selected preset sounds
- Highlighted selected custom sounds
- Select, play, and remove buttons with icons
-
Better Upload Experience
- Clear file requirements displayed
- Progress feedback during upload
- Duplicate handling with confirmation
- File validation before processing
-
Sound Library
- Up to 10 custom sounds (local storage)
- Preset sounds with descriptive icons
- Preview sounds before selecting
- Easy removal of custom sounds
-
Express Timer Dials
- 12 preset durations (1min - 6hrs)
- Large, tappable buttons
- Clear time display on each button
- Single-click/tap to start
-
Custom Timer
- Separate hours, minutes, seconds inputs
- Visual time separator (:)
- Number input validation
- Clear labeling for each field
-
Timer Controls
- Start/Pause/Resume/Reset buttons
- Smart button visibility (show only relevant actions)
- Disabled state during countdown
- Clear visual feedback
- Back to Top Button - Appears after scrolling 200px
- Sticky Header - Always accessible navigation
- Smooth Scrolling - Better user experience
- Loading States - Proper feedback during operations
- Modern browsers (Chrome, Firefox, Safari, Edge)
- Responsive design for all screen sizes
- Windows, macOS, Linux support
- Native-like experience
- Local file system access for sounds
- iOS and Android support
- Touch-optimized interface
- Mobile audio playback
- File picker integration
- Click any quick timer button (1min, 2min, etc.)
- Select an alert sound (optional)
- Timer starts immediately
- Enter hours, minutes, and seconds
- Select an alert sound (optional)
- Click "Start" button
- Click "Upload Sound" button
- Select an audio file (MP3, WAV, OGG, max 5MB)
- Click the select icon (β) to use it as your alert sound
- Preview with play button (βΆ)
- Remove with trash icon (π)
- Click "Pause" during countdown
- Click "Resume" to continue from where you left off
- Click "Reset" to clear the timer
/
βββ index.html # Main HTML structure
βββ styles.css # Complete styling (light/dark mode)
βββ index.js # Application logic and event handlers
βββ utils.js # Timer and sound utilities
βββ assets/
βββ audio/ # Preset sound files
βββ bell.mp3
βββ chime.mp3
βββ alarm.mp3
βββ notification.mp3
all other assets...
- Background:
#FAFBFC - Surface:
#FFFFFF - Primary:
#2563EB - Text:
#1E293B
- Background:
#0F172A - Surface:
#1E293B - Primary:
#3B82F6 - Text:
#F1F5F9
darkMode: User's theme preferenceuploadedSounds: Array of custom sound objects (base64)- Max 10 sounds
- Max 1MB per file
- Stores:
{name: string, url: base64}
- Preset sounds from
/assets/audio/ - Custom sounds stored as base64 in localStorage
- Automatic error handling for playback issues
- Supported formats: MP3, WAV, OGG
- Updates every second (1000ms)
- Uses
Date.now()for accurate elapsed time calculation - Prevents drift with elapsed time tracking
- Properly handles pause/resume states
- Chrome/Edge: Full support
- Firefox: Full support
- Safari: Full support (iOS 12+)
- Opera: Full support
-
Background Execution: Timers only run when app is active (foreground)
- Not a system-level timer like iOS or Android Clock app
- Closing the app stops the timer
- This is a browser/PWA limitation
-
Sound Storage: Limited by browser localStorage (~5-10MB)
- Maximum 10 custom sounds
- Maximum 1MB per sound file
-
Audio Autoplay: Some browsers require user interaction before playing audio
- Handled gracefully with error messages
Web Browser
- Use HTTPS (required for Service Workers)
- localStorage is origin-isolated (secure)
- No additional concerns
Desktop (NW.js)
- App runs in isolated context
- No Node.js integration needed for this app
Mobile (Apache Cordova)
- App runs in WebView (sandboxed)
- No special permissions needed
- localStorage is app-private
- Bundle fonts/icons in app assets
MIT LICENSE
Copyright Β© 2026 TimeSnap. All rights reserved.
- Fonts: (Google Fonts)
- Icons: Bootstrap Icons
- Design: Pretty Modern UI
- Mobile: Add to home screen for app-like experience
- Dark Mode: Automatically saves your preference
- Custom Sounds: Keep files under 1MB for best performance
- Quick Access: Use keyboard shortcuts where available
- Reset: Always available to start fresh
Enjoy using TimeSnap!