This document tracks all identified issues and enhancements needed to finalize the project.
- File:
script.js(lines 779-840) - Problem: Touch handlers call
e.preventDefault()unconditionally, blocking scrolling - Problem:
document.elementFromPoint()returns child elements, not table cells - Problem: No distinction between tap (to edit) and drag (to create)
- Solution:
- Implement touch detection that differentiates tap vs drag
- Only prevent default when actually dragging to create a block
- Use
closest('td')to ensure we get the table cell - Add
touch-action: manipulationCSS to relevant elements
- Status: [ ] Not Started
- File:
script.js(various button handlers) - Problem: Both
clickandtouchendcan fire on mobile, causing double actions - Solution: Use a unified approach - either pointer events or debounce touch/click
- Status: [ ] Not Started
- File:
script.js - Problem:
btnStatistics(line 146) andbtnSearch(line 210) lacktouchendhandlers - Solution: Add consistent touch handlers or switch to pointer events
- Status: [ ] Not Started
- File:
script.js(line 1122) - Problem:
titleDivtouchend conflicts with parent cell touch handlers - Solution: Properly stop propagation and handle touch hierarchy
- Status: [ ] Not Started
- File:
styles.css - Problem: No
touch-actionCSS properties defined - Solution: Add
touch-action: manipulationto buttons,touch-action: pan-yto scrollable areas - Status: [ ] Not Started
- File:
script.js(around line 1022) - Problem: Users can create overlapping time blocks with no warning
- Solution:
- Add
checkForOverlap(startTime, endTime, excludeBlockId)function - Warn user when creating/editing blocks that overlap
- Offer option to proceed anyway or cancel
- Add
- Status: [ ] Not Started
- File:
script.js(line 1547) - Problem: UUID template has 7 x's instead of 8:
xxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx - Solution: Fix to standard UUID v4 format:
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx - Status: [ ] Not Started
- File:
script.js(lines 1477-1497) - Problem: No try/catch around localStorage operations
- Solution: Wrap all localStorage calls in try/catch, show user-friendly error if storage fails
- Status: [ ] Not Started
- File:
script.js(line 994) - Problem: String comparison for times could have edge cases
- Solution: Parse times to minutes-since-midnight for reliable comparison
- Status: [ ] Not Started
- File:
script.js - Problem: "Carry Over Tasks & Notes" checkbox exists but does nothing
- Current State:
carryOverproperty is saved but never used - Solution:
- When displaying a recurring block, check if
carryOveris true - If true, look for the most recent archived instance of this recurring block
- Copy tasks (preserving completion state) and notes from that instance
- Store the "carried over" state so it persists correctly
- When displaying a recurring block, check if
- Status: [ ] Not Started
- File:
styles.css - Problem: No visual feedback when touching elements on mobile
- Solution: Add
:activestates and touch feedback styles - Status: [ ] Not Started
- File:
script.js - Problem: View-switching logic is duplicated across 5+ button handlers
- Solution: Create
switchToView(viewName)helper function - Status: [ ] Not Started
- Problem: When dragging to create a block, feedback could be clearer
- Solution: Show time range preview while dragging
- Status: [ ] Not Started
- File:
index.html - Problem: No ARIA labels for screen readers
- Solution: Add
aria-label,role, and other accessibility attributes - Status: [ ] Not Started
- File:
script.js - Problem: Limited keyboard support beyond arrow keys and escape
- Solution:
- Add tab navigation through blocks
- Add keyboard shortcut to create new block
- Add keyboard shortcut for search (Ctrl/Cmd+F)
- Status: [ ] Not Started
- Problem: Focus not managed properly when opening/closing modals
- Solution: Trap focus in modals, return focus when closing
- Status: [ ] Not Started
- Files:
styles.css,script.js,index.html - Solution:
- Add CSS custom properties (variables) for colors
- Add dark mode styles using
prefers-color-schememedia query - Add manual toggle in settings
- Persist preference in localStorage
- Status: [ ] Not Started
- File:
manifest.json(new) - Solution: Create manifest with app name, icons, theme colors, display mode
- Status: [ ] Not Started
- File:
sw.js(new) - Solution: Cache static assets for offline use
- Status: [ ] Not Started
- File:
script.js - Solution: Handle
beforeinstallpromptevent, show install button - Status: [ ] Not Started
| Phase | Description | Status |
|---|---|---|
| 1 | Critical Mobile Touch Fixes | [x] Completed |
| 2 | Data Integrity & Validation | [x] Completed |
| 3 | Implement Unfinished Features | [x] Completed |
| 4 | UI/UX Improvements | [x] Completed |
| 5 | Accessibility & Polish | [x] Completed |
| 6 | Dark Mode & Theming | [x] Completed |
| 7 | PWA Support | [x] Completed |
- All changes should maintain backward compatibility with existing localStorage data
- Test on both iOS Safari and Android Chrome for mobile fixes
- Keep the no-build-step philosophy - no bundlers or transpilers