A local browser-based Gantt chart tool for project planning and schedule tracking built with Next.js, TypeScript, and Clean Architecture.
2025-11-29.23-23-00.mp4
- Create, edit, and delete events (tasks)
- Assign events to groups (Frontend, Backend, Design)
- Visual timeline with day-level granularity
- Sticky headers (dates stay at top, event names stay at left)
- Color-coded events by group
- Scrollable timeline view
- Keyword search across event names and descriptions
- Filter by group with checkboxes
- Debounced search (300ms) for performance
- Combined search and filter support
- Pan timeline left/right by 7 days
- "Show All" button to fit all events
- Corner cell sticky in both directions
- CSS containment for scroll optimization
- React.memo() on EventBar for performance
- Prominent "today" vertical line
- 5-day guide lines for easy time reference
- Automatic positioning based on visible range
- Set custom focus period with date pickers
- Visual highlighting of focus range
- All events remain visible (no filtering)
- Validation: end date >= start date
- Save version snapshots with notes
- Auto-incrementing version numbers (V1, V2, V3...)
- Compare any 2 versions
- Detailed diff showing:
- Added events
- Deleted events
- Modified events (field-level changes)
- Group changes
- Version deletion support
- Create custom groups with name and color
- Edit group properties
- Delete groups (with event check validation)
- Hex color picker
- Real-time color updates on event bars
- Loading states and spinners
- Comprehensive error handling
- Empty state messages
- localStorage quota detection (>80% warning)
- Keyboard shortcuts:
Esc: Close modalsCtrl+S/Cmd+S: Save version
- Data export to JSON
- Data import from JSON
- 100% offline capability with localStorage persistence
- Node.js 18+
- npm
# Install dependencies
npm install
# Run development server
npm run devOpen http://localhost:3000/gantt in your browser.
- Framework: Next.js 14+ (App Router)
- Language: TypeScript
- State Management: Zustand
- Styling: Tailwind CSS
- Date Utilities: date-fns
- Storage: localStorage (100% offline)
- Architecture: Clean Architecture
- Click "Add Event" button
- Fill in name, group, start/end dates, and optional description
- Click "Save"
- Use the search bar to find events by keyword
- Use group checkboxes to filter by category
- Combine both for precise filtering
- Use "Earlier" / "Later" buttons to pan timeline
- Click "Show All" to fit all events in view
- Scroll horizontally/vertically as needed
- Click "Save Version" (or press
Ctrl+S) - Enter a descriptive note
- Select 2 versions from history
- Click "Compare Versions" to see changes
- Click "Manage Groups"
- Add, edit, or delete custom groups
- Assign colors and names to organize your events
- Click "Export" to download current chart as JSON
- Click "Import" to restore from a JSON file backup
Clean Architecture with layer separation:
- UI Layer: React components (
lib/gantt-chart/ui/) - Presenter Layer: Zustand stores (
lib/gantt-chart/presenter/) - Use Case Layer: Business logic (
lib/gantt-chart/usecase/) - Repository Layer: Data access (
lib/gantt-chart/repository/) - External Layer: localStorage (
lib/gantt-chart/external/)
UI β Presenter β Use Case β Repository β External
See specs/001-gantt-chart/ for detailed documentation.
- Chart renders <1s for 200 events β
- Smooth scrolling at 30+ fps β
- Filter results <0.5s for 500 events β
- 100% offline operation
- localStorage persistence (~5-10MB limit)
- Automatic quota monitoring
- Version snapshots with full state
Refer to specs/001-gantt-chart/quickstart.md for comprehensive validation scenarios covering:
- First-time user experience
- Filtering and search
- Sticky headers and scrolling
- Visual time indicators
- Focus period highlighting
- Version history and comparison
- Group management
- Data persistence
- Performance testing
- Edge cases and error handling
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Start production server
npm start
# Lint code
npm run lintβ All Phases Complete (Phases 1-10)
- Phase 1: Setup
- Phase 2: Foundational (Core Infrastructure)
- Phase 3: User Story 1 - Create and View Basic Gantt Chart (P1 MVP)
- Phase 4: User Story 2 - Filter and Search Events (P2)
- Phase 5: User Story 3 - Navigate Timeline with Sticky Headers (P2)
- Phase 6: User Story 4 - Visual Time Indicators (P3)
- Phase 7: User Story 5 - Highlight Focus Time Period (P3)
- Phase 8: User Story 6 - Version History and Comparison (P2)
- Phase 9: User Story 7 - Manage Groups (P3)
- Phase 10: Polish & Cross-Cutting Concerns
Version: 1.0.0 (Production Ready)
Status: β
All Features Complete