# Milestone v1.0: MVP

**Status:** ✅ SHIPPED 2026-02-01
**Phases:** 1-6
**Total Plans:** 18

## Overview

TaskPlanner delivers personal task and notes management with image attachments, accessible from any device via web browser. The roadmap progresses from data foundation through core features (entries, images, tags, search) to containerized deployment, with each phase delivering complete, verifiable functionality that enables the next.

## Phases

### Phase 1: Foundation
**Goal**: Data persistence and project structure are ready for feature development
**Depends on**: Nothing (first phase)
**Requirements**: None (foundational — enables all other requirements)
**Success Criteria** (what must be TRUE):
  1. SQLite database initializes with schema on first run
  2. Unified entries table supports both tasks and thoughts via type field
  3. Repository layer provides typed CRUD operations for entries
  4. Filesystem storage directory structure exists for future images
  5. Development server starts and serves a basic page
**Plans**: 2 plans

Plans:
- [x] 01-01-PLAN.md — SvelteKit project setup with Drizzle schema and unified entries table
- [x] 01-02-PLAN.md — Repository layer with typed CRUD and verification page

### Phase 2: Core CRUD
**Goal**: Users can create, manage, and view entries with a responsive, accessible UI
**Depends on**: Phase 1
**Requirements**: CORE-01, CORE-02, CORE-03, CORE-04, CORE-05, CORE-06, CAPT-01, CAPT-02, CAPT-03, UX-01, UX-02, UX-03
**Success Criteria** (what must be TRUE):
  1. User can create a new entry specifying task or thought type
  2. User can edit entry title, content, and type
  3. User can delete an entry with confirmation
  4. User can mark a task as complete and see visual indicator
  5. User can add notes to an existing entry
  6. Quick capture input is visible on main view with one-click submission
  7. UI is usable on mobile devices with adequate touch targets
  8. Text is readable for older eyes (minimum 16px base font)
**Plans**: 4 plans

Plans:
- [x] 02-01-PLAN.md — Form actions for CRUD operations and accessible base styling
- [x] 02-02-PLAN.md — Entry list, entry cards, and quick capture components
- [x] 02-03-PLAN.md — Inline editing with expand/collapse, auto-save, and completed toggle
- [x] 02-04-PLAN.md — Swipe-to-delete gesture and mobile UX verification

### Phase 3: Images
**Goal**: Users can attach, view, and manage images on entries from any device
**Depends on**: Phase 2
**Requirements**: IMG-01, IMG-02, IMG-03, IMG-04
**Success Criteria** (what must be TRUE):
  1. User can attach images via file upload on desktop
  2. User can attach images via camera capture on mobile
  3. User can view attached images inline with entry
  4. User can remove image attachments from an entry
  5. Images are stored on filesystem (not in database)
**Plans**: 4 plans

Plans:
- [x] 03-01-PLAN.md — Database schema, file storage, thumbnail generation, and API endpoints
- [x] 03-02-PLAN.md — File upload form action and ImageUpload component with drag-drop
- [x] 03-03-PLAN.md — CameraCapture component with getUserMedia and preview/confirm flow
- [x] 03-04-PLAN.md — EntryCard integration with gallery, lightbox, and delete functionality

### Phase 4: Tags & Organization
**Goal**: Users can organize entries with tags and quick access features
**Depends on**: Phase 2
**Requirements**: TAG-01, TAG-02, TAG-03, TAG-04, ORG-01, ORG-02, ORG-03
**Success Criteria** (what must be TRUE):
  1. User can add multiple tags to an entry
  2. User can remove tags from an entry
  3. Tag input shows autocomplete suggestions from existing tags
  4. Tags are case-insensitive ("work" matches "Work" and "WORK")
  5. User can pin/favorite an entry for quick access
  6. User can set a due date on a task
  7. Pinned entries appear in a dedicated section at top of list
**Plans**: 3 plans

Plans:
- [x] 04-01-PLAN.md — Tags schema with case-insensitive index and tagRepository
- [x] 04-02-PLAN.md — Pin/favorite and due date UI (uses existing schema columns)
- [x] 04-03-PLAN.md — Tag input component with Svelecte autocomplete

### Phase 5: Search
**Goal**: Users can find entries through search and filtering
**Depends on**: Phase 2, Phase 4 (tags for filtering)
**Requirements**: SRCH-01, SRCH-02, SRCH-03, SRCH-04
**Success Criteria** (what must be TRUE):
  1. User can search entries by text in title and content
  2. User can filter entries by tag (single or multiple)
  3. User can filter entries by date range
  4. User can filter to show only tasks or only thoughts
  5. Search results show relevant matches with highlighting
**Plans**: 3 plans

Plans:
- [x] 05-01-PLAN.md — SearchBar and FilterBar components with type definitions
- [x] 05-02-PLAN.md — Filtering logic and text highlighting utilities
- [x] 05-03-PLAN.md — Integration with recent searches and "/" keyboard shortcut

### Phase 6: Deployment
**Goal**: Application runs in Docker with persistent data and easy configuration
**Depends on**: Phase 1-5 (all features complete)
**Requirements**: DEPLOY-01, DEPLOY-02, DEPLOY-03, DEPLOY-04
**Success Criteria** (what must be TRUE):
  1. Application runs in a Docker container
  2. Configuration is provided via environment variables
  3. Data persists across container restarts via named volumes
  4. Single docker-compose.yml starts the entire application
  5. Backup of data directory preserves all entries and images
**Plans**: 2 plans

Plans:
- [x] 06-01-PLAN.md — Docker configuration with adapter-node, Dockerfile, and docker-compose.yml
- [x] 06-02-PLAN.md — Health endpoint, environment documentation, and backup script

## Progress

**Execution Order:**
Phases execute in numeric order: 1 -> 2 -> 3 -> 4 -> 5 -> 6

| Phase | Plans Complete | Status | Completed |
|-------|----------------|--------|-----------|
| 1. Foundation | 2/2 | Complete ✓ | 2026-01-29 |
| 2. Core CRUD | 4/4 | Complete ✓ | 2026-01-29 |
| 3. Images | 4/4 | Complete ✓ | 2026-01-31 |
| 4. Tags & Organization | 3/3 | Complete ✓ | 2026-01-31 |
| 5. Search | 3/3 | Complete ✓ | 2026-01-31 |
| 6. Deployment | 2/2 | Complete ✓ | 2026-02-01 |

---

## Milestone Summary

**Key Decisions:**
- Tailwind CSS v4 with @tailwindcss/vite plugin
- Unified entries table with type discriminator (task/thought)
- SQLite with WAL mode for concurrent reads
- Repository pattern with singleton instances
- Native touch handlers for swipe-to-delete
- File input with capture="environment" for mobile camera (replaced getUserMedia)
- Svelecte for tag autocomplete
- TASKPLANER_ prefix for environment variables

**Issues Resolved:**
- Docker container restart loop (DATA_DIR env var conflict with adapter-node)
- 403 CSRF errors (missing TASKPLANER_ORIGIN)
- Database schema not initializing (added auto-init)

**Technical Debt Incurred:**
- CameraCapture.svelte orphaned (313 lines unused, replaced with file input)
- 15 TypeScript warnings (state initialization, non-blocking)

---

*For current project status, see .planning/MILESTONES.md*
*Archived: 2026-02-01 as part of v1.0 milestone completion*
