A minimalist Bullet Journal web app built with React, TypeScript, and IndexedDB. Features a Reeder-inspired aesthetic with full offline support.
- Daily Log - Track tasks, events, and notes by date
- Monthly Log - Calendar view with entry indicators
- Future Log - Plan ahead with 6-month overview
- Collections - Create custom lists and projects
- Index - Search all entries and navigate collections
- Tasks (•) - With states: incomplete, complete (×), migrated (>), scheduled (<)
- Events (○) - Date-specific occurrences
- Notes (-) - General information
- Priority (*) - Important items
- Inspiration (!) - Ideas to explore
-
Keyboard Shortcuts
1/2/3- Navigate to Daily / Monthly / Future LogCtrl+N- Focus new entry inputCtrl+E- Edit first entryEscape- Close modals / cancel edit
-
Drag & Drop - Reorder entries within a day or collection
-
Migration - Move incomplete tasks to future dates
-
Undo Delete - 5-second window to restore deleted entries
-
Mobile Swipe - Swipe left/right to change days
-
Toast Notifications - Feedback for user actions
- PWA - Installable with offline support
- IndexedDB - Local-first data storage via Dexie
- Dark Mode - System preference detection with manual toggle
- Responsive - Works on desktop and mobile
- React 19
- TypeScript
- Vite
- Dexie (IndexedDB)
- CSS Modules
- @dnd-kit (drag and drop)
- Vitest (testing)
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Run tests
npm testsrc/
├── components/
│ ├── entry/ # Entry components (EntryItem, EntryInput, etc.)
│ ├── layout/ # Layout, Sidebar, BottomNav
│ └── ui/ # Toast notifications, PWA prompt
├── context/ # React Context (Theme, Toast)
├── db/ # Database schema and models
├── hooks/ # Custom hooks (useEntries, useKeyboardShortcuts, etc.)
├── pages/ # Page components
└── styles/ # Global styles and design tokens
MIT