| Operation | Target | Implementation |
|---|---|---|
| Startup | < 1s | Lazy view loading, WAL SQLite, minimal main bundle |
| Task create | < 10ms | Synchronous SQLite insert, no network |
| Search | < 20ms | Indexed title column, debounced 150ms |
| DB query | < 5ms | Prepared statements, covering indexes |
PRAGMA journal_mode = WAL;
PRAGMA cache_size = -64000; -- 64MB cache
PRAGMA synchronous = NORMAL;
PRAGMA temp_store = MEMORY;Indexes on: completed, archived, category_id, project_id, due_date, sort_order, title, starred, pinned
- Framer Motion:
layoutanimations use GPU transforms - List rendering: AnimatePresence with stagger capped at 50ms
- Search: 150ms debounce prevents query storms
- Zustand: Selective subscriptions — components read only needed slices
- No unbounded caches
- Activity log limited to recent queries
- Backup rotation keeps 10 files max
# Electron dev tools
npm run dev
# Performance tab → record startup
# SQLite explain
EXPLAIN QUERY PLAN SELECT * FROM tasks WHERE title LIKE '%foo%';Electron adds ~150MB base. Future Tauri migration target: < 15MB.