Files: - STACK.md - SvelteKit + SQLite + TypeScript stack recommendation - FEATURES.md - Feature landscape with MVP definition - ARCHITECTURE.md - Modular monolith architecture with repository pattern - PITFALLS.md - Critical pitfalls and prevention strategies - SUMMARY.md - Executive synthesis with roadmap implications Key findings: - Stack: SvelteKit 2.50.x + Svelte 5.49.x with SQLite and better-sqlite3 for single-user simplicity - Architecture: Modular monolith with content-addressable image storage, FTS5 for search - Critical pitfall: Store images on filesystem (not DB) from Phase 1 to avoid painful migration Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
215 lines
10 KiB
Markdown
215 lines
10 KiB
Markdown
# Feature Research
|
|
|
|
**Domain:** Personal Task/Notes Web App (self-hosted, single-user)
|
|
**Researched:** 2026-01-29
|
|
**Confidence:** MEDIUM (based on competitor analysis via WebFetch + domain knowledge)
|
|
|
|
## Feature Landscape
|
|
|
|
### Table Stakes (Users Expect These)
|
|
|
|
Features users assume exist. Missing these = product feels incomplete.
|
|
|
|
| Feature | Why Expected | Complexity | Notes |
|
|
|---------|--------------|------------|-------|
|
|
| Create/Edit/Delete items | Basic CRUD is fundamental | LOW | Text input with persistence |
|
|
| Distinguish tasks vs thoughts | Project requirement; users expect to filter by type | LOW | Boolean or enum field |
|
|
| Mark tasks complete | Core task management; every competitor has this | LOW | Status toggle |
|
|
| Cross-device access | Project requirement; web app enables this inherently | LOW | Responsive design |
|
|
| Search | Users expect to find content quickly; all competitors offer this | MEDIUM | Full-text search on title + content |
|
|
| Tags/labels | Standard organization pattern (Todoist, Bear, Simplenote all have) | MEDIUM | Many-to-many relationship |
|
|
| Image attachments | Project requirement for digitizing paper notes | MEDIUM | File upload, storage, display |
|
|
| Mobile-friendly UI | "Any device" access means mobile must work | MEDIUM | Responsive design, touch targets |
|
|
| Data persistence | Notes must survive restart | LOW | Database storage |
|
|
| Quick capture | Fast entry is table stakes (Todoist: "Capture...the moment they come to you") | LOW | Minimal friction input |
|
|
|
|
### Differentiators (Competitive Advantage)
|
|
|
|
Features that set the product apart. Not required, but valuable.
|
|
|
|
| Feature | Value Proposition | Complexity | Notes |
|
|
|---------|-------------------|------------|-------|
|
|
| OCR on images | Search text within uploaded images (Evernote, Bear Pro have this) | HIGH | Requires OCR library/service |
|
|
| Image annotation | Mark up photos of paper notes | HIGH | Canvas drawing, save state |
|
|
| Natural language dates | "tomorrow", "next Monday" (Todoist signature feature) | MEDIUM | Date parsing library |
|
|
| Recurring tasks | Habits and repeated items (Todoist core feature) | MEDIUM | RRULE or simple patterns |
|
|
| Offline support | Work without internet, sync later | HIGH | Service worker, conflict resolution |
|
|
| Keyboard shortcuts | Power user efficiency | LOW | Event handlers |
|
|
| Dark mode | User preference, reduces eye strain | LOW | CSS variables, theme toggle |
|
|
| Markdown support | Rich formatting without WYSIWYG complexity (Simplenote, Bear, Obsidian) | MEDIUM | Markdown parser + preview |
|
|
| Note linking | Connect related items (Obsidian's core feature) | MEDIUM | Internal link syntax, backlinks |
|
|
| Document scanning | Camera capture with perspective correction (Evernote) | HIGH | Camera API, image processing |
|
|
| Export/backup | Data portability, user owns data (Obsidian philosophy) | LOW | JSON/Markdown export |
|
|
| Drag-and-drop reorder | Intuitive organization (Todoist Upcoming view) | MEDIUM | Sortable library, persist order |
|
|
| Pin/favorite items | Quick access to important items (Bear) | LOW | Boolean field, UI section |
|
|
| Due dates with reminders | Time-sensitive tasks (all task apps have this) | MEDIUM | Date field + notification system |
|
|
|
|
### Anti-Features (Commonly Requested, Often Problematic)
|
|
|
|
Features that seem good but create problems for a personal, single-user app.
|
|
|
|
| Feature | Why Requested | Why Problematic | Alternative |
|
|
|---------|---------------|-----------------|-------------|
|
|
| Real-time collaboration | "Maybe I'll share with family" | Massive complexity (OT/CRDT), scope creep, conflicts with "personal" app | Export/share single notes manually |
|
|
| AI-powered categorization | Trendy, seems smart | Over-engineering for personal use; manual tags are clearer | Good tag UX + search |
|
|
| Complex folder hierarchies | "I want to organize everything" | Deep nesting causes friction; flat + tags is more flexible | Tags with hierarchy (nested tags) |
|
|
| Kanban boards | Looks nice, seems productive | Overhead for personal tasks; simple list often better | Optional board view later |
|
|
| Multiple note types | "Journals, wikis, tasks, etc." | Complicates data model, UI; blur the simple task/thought distinction | Two types (task/thought) with tags |
|
|
| Social features | Share achievements, collaborate | Out of scope for self-hosted personal app | None |
|
|
| Heavy WYSIWYG editor | "I want formatting" | Bloated, complex, mobile-unfriendly | Markdown with preview |
|
|
| Notifications/alerts on web | Keep me on track | Browser notifications are annoying, unreliable | Focus on capture, not nagging |
|
|
| Version history | "I might want to undo" | Storage overhead, complexity for personal use | Simple edit; consider soft-delete |
|
|
| Multi-user/auth | "Maybe I'll share the server" | Security complexity, out of scope | Single-user by design |
|
|
|
|
## Feature Dependencies
|
|
|
|
```
|
|
[Search]
|
|
└──requires──> [Data persistence]
|
|
|
|
[Tags]
|
|
└──requires──> [Data persistence]
|
|
└──enhances──> [Search] (filter by tag)
|
|
|
|
[Image attachments]
|
|
└──requires──> [Data persistence]
|
|
└──requires──> [File storage]
|
|
|
|
[OCR on images]
|
|
└──requires──> [Image attachments]
|
|
|
|
[Image annotation]
|
|
└──requires──> [Image attachments]
|
|
|
|
[Markdown support]
|
|
└──enhances──> [Create/Edit items]
|
|
|
|
[Note linking]
|
|
└──requires──> [Data persistence]
|
|
└──enhances──> [Search] (backlink discovery)
|
|
|
|
[Recurring tasks]
|
|
└──requires──> [Mark tasks complete]
|
|
|
|
[Due dates with reminders]
|
|
└──requires──> [Distinguish tasks vs thoughts]
|
|
|
|
[Offline support]
|
|
└──conflicts──> [Real-time collaboration] (sync conflicts)
|
|
└──requires──> [Data persistence]
|
|
|
|
[Export/backup]
|
|
└──requires──> [Data persistence]
|
|
```
|
|
|
|
### Dependency Notes
|
|
|
|
- **OCR requires Image attachments:** Cannot search images if they don't exist
|
|
- **Tags enhance Search:** Tag filtering is a search feature
|
|
- **Offline conflicts with Real-time collab:** Sync conflict resolution is hard; single-user sidesteps this
|
|
- **Recurring tasks require completion status:** Need to know when to regenerate
|
|
|
|
## MVP Definition
|
|
|
|
### Launch With (v1)
|
|
|
|
Minimum viable product based on project requirements:
|
|
|
|
- [x] Create/Edit/Delete items (task or thought) -- core CRUD
|
|
- [x] Distinguish tasks vs thoughts -- project requirement
|
|
- [x] Mark tasks complete -- essential task management
|
|
- [x] Image attachments -- project requirement for digitizing paper notes
|
|
- [x] Tags for organization -- project requirement
|
|
- [x] Search -- project requirement
|
|
- [x] Mobile-responsive UI -- "any device" requirement
|
|
- [x] Containerized deployment -- project requirement
|
|
|
|
### Add After Validation (v1.x)
|
|
|
|
Features to add once core is working:
|
|
|
|
- [ ] Dark mode -- low complexity, high user satisfaction
|
|
- [ ] Keyboard shortcuts -- power user efficiency
|
|
- [ ] Pin/favorite items -- quick access to important items
|
|
- [ ] Export to JSON/Markdown -- data portability
|
|
- [ ] Due dates on tasks -- natural extension of task type
|
|
- [ ] Drag-and-drop reorder -- better organization UX
|
|
|
|
### Future Consideration (v2+)
|
|
|
|
Features to defer until product-market fit is established:
|
|
|
|
- [ ] Markdown support -- adds complexity to editing
|
|
- [ ] Natural language dates -- requires parsing library
|
|
- [ ] Recurring tasks -- adds state machine complexity
|
|
- [ ] OCR on images -- requires external service/library
|
|
- [ ] Note linking -- changes how users think about the app
|
|
- [ ] Offline support -- significant complexity (service worker, sync)
|
|
|
|
## Feature Prioritization Matrix
|
|
|
|
| Feature | User Value | Implementation Cost | Priority |
|
|
|---------|------------|---------------------|----------|
|
|
| Create/Edit/Delete | HIGH | LOW | P1 |
|
|
| Task vs Thought distinction | HIGH | LOW | P1 |
|
|
| Mark complete | HIGH | LOW | P1 |
|
|
| Image attachments | HIGH | MEDIUM | P1 |
|
|
| Tags | HIGH | MEDIUM | P1 |
|
|
| Search | HIGH | MEDIUM | P1 |
|
|
| Mobile-responsive | HIGH | MEDIUM | P1 |
|
|
| Dark mode | MEDIUM | LOW | P2 |
|
|
| Keyboard shortcuts | MEDIUM | LOW | P2 |
|
|
| Pin/favorite | MEDIUM | LOW | P2 |
|
|
| Export | MEDIUM | LOW | P2 |
|
|
| Due dates | MEDIUM | MEDIUM | P2 |
|
|
| Drag-and-drop | MEDIUM | MEDIUM | P2 |
|
|
| Markdown | MEDIUM | MEDIUM | P3 |
|
|
| Natural language dates | LOW | MEDIUM | P3 |
|
|
| Recurring tasks | MEDIUM | HIGH | P3 |
|
|
| OCR | LOW | HIGH | P3 |
|
|
| Note linking | LOW | MEDIUM | P3 |
|
|
| Offline support | LOW | HIGH | P3 |
|
|
|
|
**Priority key:**
|
|
- P1: Must have for launch (MVP)
|
|
- P2: Should have, add when possible (v1.x)
|
|
- P3: Nice to have, future consideration (v2+)
|
|
|
|
## Competitor Feature Analysis
|
|
|
|
| Feature | Todoist | Bear | Simplenote | Obsidian | Our Approach |
|
|
|---------|---------|------|------------|----------|--------------|
|
|
| Task management | Core focus | Checkbox in notes | Basic lists | Plugin | First-class task type |
|
|
| Notes/thoughts | Via descriptions | Core focus | Core focus | Core focus | First-class thought type |
|
|
| Image attachments | Yes | Yes (with sketching) | No | Yes | Yes, for paper note capture |
|
|
| Tags | Yes (labels) | Yes (with icons) | Yes | Yes | Yes, simple tags |
|
|
| Search | Advanced filters | OCR search (Pro) | Instant search | Full-text | Full-text + tag filter |
|
|
| Sync | Cloud (their servers) | iCloud | Cloud (their servers) | Local-first, optional sync | Self-hosted, cross-device via web |
|
|
| Markdown | Limited | Yes | Yes | Yes (core) | Defer to v2 |
|
|
| Offline | Yes | Yes | Yes | Yes (local-first) | Defer to v2 |
|
|
| Mobile | Native apps | Native (Apple only) | Native apps | Native apps | Responsive web |
|
|
|
|
**Our differentiation:** Self-hosted, single-user simplicity with explicit task/thought distinction and image attachment for digitizing paper notes. No account required, no cloud dependency, you own your data.
|
|
|
|
## Confidence Notes
|
|
|
|
| Section | Confidence | Rationale |
|
|
|---------|------------|-----------|
|
|
| Table Stakes | HIGH | Verified against Todoist, Bear, Simplenote, Evernote via WebFetch |
|
|
| Differentiators | MEDIUM | Based on competitor features; value proposition is hypothesis |
|
|
| Anti-Features | MEDIUM | Based on domain experience; specific to single-user context |
|
|
| Dependencies | HIGH | Logical dependencies from requirements |
|
|
| MVP Definition | HIGH | Derived directly from project requirements |
|
|
|
|
## Sources
|
|
|
|
- Todoist features page (verified via WebFetch)
|
|
- Obsidian home page (verified via WebFetch)
|
|
- Bear app home page (verified via WebFetch)
|
|
- Simplenote home page (verified via WebFetch)
|
|
- Evernote features page (verified via WebFetch)
|
|
|
|
---
|
|
*Feature research for: Personal Task/Notes Web App*
|
|
*Researched: 2026-01-29*
|