52 KiB
Tasks: Reference Board Viewer
Created: 2025-11-02
Last Updated: 2025-11-02
Feature: 001-reference-board-viewer
Sprint: MVP Development (Weeks 1-16)
Overview
Implementation tasks for the Reference Board Viewer, organized by user story (functional requirement) to enable independent, parallel development. Tasks follow dependency-ordered phases aligned with the 16-week implementation plan.
Total Tasks: 165 tasks across 19 phases
Technology Stack: Svelte + Konva.js + FastAPI + PostgreSQL + MinIO (all Nix-verified ✅)
Organization: Tasks grouped by user story for independent implementation and testing
Task Format Legend
- [ ] [T###] [P?] [US#?] Task description with file path
- T###: Sequential task ID (T001-T165)
- [P]: Parallelizable (can run simultaneously with other [P] tasks in same phase)
- [US#]: User Story label (US1-US18, maps to FR1-FR18 from spec.md)
- File path: Exact file to create/modify
Phase 1: Setup & Project Initialization (Week 1)
Goal: Set up development environment, project structure, and CI/CD
- T001 Initialize Git repository structure (README.md, .gitignore, .editorconfig)
- T002 [P] Create flake.nix with development environment per nix-package-verification.md
- T003 [P] Update shell.nix with all dependencies from nix-package-verification.md
- T004 [P] Create .envrc for direnv automatic shell activation
- T005 Initialize backend directory structure in backend/app/{auth,boards,images,database,api,core}
- T006 [P] Initialize frontend directory with SvelteKit: frontend/src/{lib,routes}
- T007 [P] Create backend/pyproject.toml with uv and dependencies
- T008 [P] Create frontend/package.json with Svelte + Konva.js dependencies
- T009 Set up pre-commit hooks in .pre-commit-config.yaml (Ruff, ESLint, Prettier)
- T010 [P] Create CI/CD pipeline config (.github/workflows/ci.yml or equivalent)
- T011 [P] Create backend/.env.example with all environment variables
- T012 [P] Create frontend/.env.example with API_URL and feature flags
- T013 [P] Configure Ruff in backend/pyproject.toml with Python linting rules
- T014 [P] Configure ESLint + Prettier in frontend/.eslintrc.js and .prettierrc
- T015 Create pytest configuration in backend/pytest.ini with coverage threshold 80%
- T016 [P] Configure Vitest in frontend/vite.config.js for frontend testing
- T017 Create backend/alembic.ini for database migrations
- T018 Initialize Alembic migrations in backend/alembic/versions/
- T019 [P] Create documentation structure in docs/{api,user-guide,deployment}
- T020 Create Docker Compose for local development (PostgreSQL + MinIO) in docker-compose.dev.yml
Deliverables:
- Complete project structure
- Nix development environment working
- CI/CD pipeline running
- Pre-commit hooks configured
Phase 2: Foundational Infrastructure (Week 1-2)
Goal: Database schema, configuration, shared utilities
- T021 [P] Create database configuration in backend/app/core/config.py (load from .env)
- T022 [P] Create database connection in backend/app/database/session.py (SQLAlchemy engine)
- T023 [P] Create base database model in backend/app/database/base.py (declarative base)
- T024 [P] Implement dependency injection utilities in backend/app/core/deps.py (get_db session)
- T025 Create initial migration 001_initial_schema.py implementing full schema from data-model.md
- T026 [P] Create CORS middleware configuration in backend/app/core/middleware.py
- T027 [P] Create error handler utilities in backend/app/core/errors.py (exception classes)
- T028 [P] Implement response schemas in backend/app/core/schemas.py (base Pydantic models)
- T029 [P] Create MinIO client utility in backend/app/core/storage.py (boto3 wrapper)
- T030 [P] Create logging configuration in backend/app/core/logging.py
- T031 [P] Create FastAPI app initialization in backend/app/main.py with all middleware
- T032 [P] Create frontend API client base in frontend/src/lib/api/client.ts (fetch wrapper with auth)
- T033 [P] Create frontend auth store in frontend/src/lib/stores/auth.ts (Svelte writable store)
- T034 [P] Create frontend error handling utilities in frontend/src/lib/utils/errors.ts
- T035 [P] Implement frontend toast notification system in frontend/src/lib/components/Toast.svelte
Deliverables:
- Database schema created
- FastAPI app skeleton
- SvelteKit app skeleton
- Shared utilities available
Phase 3: User Authentication (FR1 - Critical) (Week 2) ✅ COMPLETE
User Story: Users must be able to create accounts, log in, and manage their profile
Independent Test Criteria:
- Users can register with valid email/password
- Users can login and receive JWT token
- Protected endpoints reject unauthenticated requests
- Password validation enforces complexity rules
Backend Tasks:
- T036 [P] [US1] Create User model in backend/app/database/models/user.py matching data-model.md schema
- T037 [P] [US1] Create user schemas in backend/app/auth/schemas.py (UserCreate, UserLogin, UserResponse)
- T038 [US1] Implement password hashing utilities in backend/app/auth/security.py (passlib bcrypt)
- T039 [US1] Implement JWT token generation in backend/app/auth/jwt.py (python-jose)
- T040 [US1] Create user repository in backend/app/auth/repository.py (database operations)
- T041 [US1] Implement registration endpoint POST /auth/register in backend/app/api/auth.py
- T042 [US1] Implement login endpoint POST /auth/login in backend/app/api/auth.py
- T043 [US1] Implement current user endpoint GET /auth/me in backend/app/api/auth.py
- T044 [US1] Create JWT validation dependency in backend/app/core/deps.py (get_current_user)
- T045 [P] [US1] Write unit tests for password hashing in backend/tests/auth/test_security.py
- T046 [P] [US1] Write unit tests for JWT generation in backend/tests/auth/test_jwt.py
- T047 [P] [US1] Write integration tests for auth endpoints in backend/tests/api/test_auth.py
Frontend Tasks:
- T048 [P] [US1] Create login page in frontend/src/routes/login/+page.svelte
- T049 [P] [US1] Create registration page in frontend/src/routes/register/+page.svelte
- T050 [US1] Implement auth API client methods in frontend/src/lib/api/auth.ts
- T051 [US1] Create auth store with login/logout logic in frontend/src/lib/stores/auth.ts
- T052 [US1] Implement route protection in frontend/src/hooks.server.ts
- T053 [P] [US1] Create LoginForm component in frontend/src/lib/components/auth/LoginForm.svelte
- T054 [P] [US1] Create RegisterForm component in frontend/src/lib/components/auth/RegisterForm.svelte
- T055 [P] [US1] Write component tests for auth forms in frontend/tests/components/auth.test.ts
Deliverables:
- Complete authentication system
- JWT-based session management
- Protected routes
- ≥80% test coverage for auth module
Phase 4: Board Management (FR2 - Critical) (Week 3) ✅ COMPLETE
User Story: Users must be able to create, save, edit, delete, and organize multiple reference boards
Independent Test Criteria:
- Users can create boards with title
- Users can list all their boards
- Users can update board metadata
- Users can delete boards with confirmation
- Board operations enforce ownership
Backend Tasks:
- T056 [P] [US2] Create Board model in backend/app/database/models/board.py from data-model.md
- T057 [P] [US2] Create board schemas in backend/app/boards/schemas.py (BoardCreate, BoardUpdate, BoardResponse)
- T058 [US2] Create board repository in backend/app/boards/repository.py (CRUD operations)
- T059 [US2] Implement create board endpoint POST /boards in backend/app/api/boards.py
- T060 [US2] Implement list boards endpoint GET /boards in backend/app/api/boards.py
- T061 [US2] Implement get board endpoint GET /boards/{id} in backend/app/api/boards.py
- T062 [US2] Implement update board endpoint PATCH /boards/{id} in backend/app/api/boards.py
- T063 [US2] Implement delete board endpoint DELETE /boards/{id} in backend/app/api/boards.py
- T064 [US2] Add ownership validation middleware in backend/app/boards/permissions.py
- T065 [P] [US2] Write unit tests for board repository in backend/tests/boards/test_repository.py
- T066 [P] [US2] Write integration tests for board endpoints in backend/tests/api/test_boards.py
Frontend Tasks:
- T067 [P] [US2] Create boards API client in frontend/src/lib/api/boards.ts
- T068 [P] [US2] Create boards store in frontend/src/lib/stores/boards.ts
- T069 [US2] Create board list page in frontend/src/routes/boards/+page.svelte
- T070 [US2] Create new board page in frontend/src/routes/boards/new/+page.svelte
- T071 [US2] Create board edit page in frontend/src/routes/boards/[id]/edit/+page.svelte
- T072 [P] [US2] Create BoardCard component in frontend/src/lib/components/boards/BoardCard.svelte
- T073 [P] [US2] Create CreateBoardModal component in frontend/src/lib/components/boards/CreateBoardModal.svelte
- T074 [P] [US2] Create DeleteConfirmModal component in frontend/src/lib/components/common/DeleteConfirmModal.svelte
- T075 [P] [US2] Write component tests for board components in frontend/tests/components/boards.test.ts
Deliverables:
- Complete board CRUD
- Board list UI with thumbnails
- Ownership enforcement
- ≥80% test coverage
Phase 5: Image Upload & Storage (FR4 - Critical) (Week 4)
User Story: Users must be able to add images to boards through multiple methods
Independent Test Criteria:
- Users can upload via file picker
- Users can drag-drop images
- Users can paste from clipboard
- Users can upload ZIP files (auto-extracted)
- File validation rejects invalid files
- Thumbnails generated automatically
Backend Tasks:
- T076 [P] [US3] Create Image model in backend/app/database/models/image.py from data-model.md
- T077 [P] [US3] Create BoardImage model in backend/app/database/models/board_image.py from data-model.md
- T078 [P] [US3] Create image schemas in backend/app/images/schemas.py (ImageUpload, ImageResponse)
- T079 [US3] Implement file validation in backend/app/images/validation.py (magic bytes, size, type)
- T080 [US3] Implement image upload handler in backend/app/images/upload.py (streaming to MinIO)
- T081 [US3] Implement thumbnail generation in backend/app/images/processing.py (Pillow resizing)
- T082 [US3] Create image repository in backend/app/images/repository.py (metadata operations)
- T083 [US3] Implement upload endpoint POST /boards/{id}/images in backend/app/api/images.py
- T084 [US3] Implement ZIP extraction handler in backend/app/images/zip_handler.py
- T085 [US3] Set up background task queue for thumbnail generation in backend/app/core/tasks.py
- T086 [P] [US3] Write unit tests for file validation in backend/tests/images/test_validation.py
- T087 [P] [US3] Write unit tests for thumbnail generation in backend/tests/images/test_processing.py
- T088 [P] [US3] Write integration tests for upload endpoint in backend/tests/api/test_images.py
Frontend Tasks:
- T089 [P] [US3] Create images API client in frontend/src/lib/api/images.ts
- T090 [P] [US3] Create images store in frontend/src/lib/stores/images.ts
- T091 [US3] Implement file picker upload in frontend/src/lib/components/upload/FilePicker.svelte
- T092 [US3] Implement drag-drop zone in frontend/src/lib/components/upload/DropZone.svelte
- T093 [US3] Implement clipboard paste handler in frontend/src/lib/utils/clipboard.ts
- T094 [US3] Implement ZIP upload handler in frontend/src/lib/utils/zip-upload.ts
- T095 [P] [US3] Create upload progress component in frontend/src/lib/components/upload/ProgressBar.svelte
- T096 [P] [US3] Create upload error display in frontend/src/lib/components/upload/ErrorDisplay.svelte
- T097 [P] [US3] Write upload component tests in frontend/tests/components/upload.test.ts
Infrastructure:
- T098 [US3] Configure MinIO bucket creation in backend/app/core/storage.py
- T099 [US3] Set up MinIO via Nix in flake.nix services configuration
Deliverables:
- Multi-method upload working
- Images stored in MinIO
- Thumbnails generated
- Progress indicators
- ≥80% test coverage
Phase 6: Canvas Navigation & Viewport (FR12 - Critical) (Week 5) ✅ COMPLETE
User Story: Users must be able to navigate the infinite canvas efficiently
Independent Test Criteria:
- Users can pan canvas (drag or spacebar+drag)
- Users can zoom in/out (mouse wheel, pinch)
- Users can rotate canvas view
- Users can reset camera and fit to screen
- Viewport state persists
Frontend Tasks:
- T100 [US4] Initialize Konva.js Stage in frontend/src/lib/canvas/Stage.svelte
- T101 [US4] Implement pan functionality in frontend/src/lib/canvas/controls/pan.ts
- T102 [P] [US4] Implement zoom functionality in frontend/src/lib/canvas/controls/zoom.ts
- T103 [P] [US4] Implement canvas rotation in frontend/src/lib/canvas/controls/rotate.ts
- T104 [US4] Create viewport store in frontend/src/lib/stores/viewport.ts
- T105 [US4] Implement reset camera function in frontend/src/lib/canvas/controls/reset.ts
- T106 [US4] Implement fit-to-screen function in frontend/src/lib/canvas/controls/fit.ts
- T107 [US4] Add touch gesture support in frontend/src/lib/canvas/gestures.ts (pinch, two-finger pan)
- T108 [US4] Persist viewport state to backend when changed
- T109 [P] [US4] Write canvas control tests in frontend/tests/canvas/controls.test.ts
Backend Tasks:
- T110 [US4] Add viewport persistence endpoint PATCH /boards/{id}/viewport in backend/app/api/boards.py
Deliverables:
- Infinite canvas working
- Pan/zoom/rotate functional
- Touch gestures supported
- 60fps performance maintained
Phase 7: Image Positioning & Selection (FR5 - Critical) (Week 5-6) ✅ COMPLETE
User Story: Users must be able to freely position and organize images on canvas
Independent Test Criteria:
- Users can drag images to any position
- Images can overlap (Z-order controlled)
- Users can select single/multiple images
- Selection shows visual indicators
- Positions persist in database
Frontend Tasks:
- T111 [US5] Create Konva Image wrapper in frontend/src/lib/canvas/Image.svelte
- T112 [US5] Implement image dragging in frontend/src/lib/canvas/interactions/drag.ts
- T113 [US5] Implement click selection in frontend/src/lib/canvas/interactions/select.ts
- T114 [US5] Implement selection rectangle (drag-to-select) in frontend/src/lib/canvas/interactions/multiselect.ts
- T115 [US5] Create selection store in frontend/src/lib/stores/selection.ts
- T116 [P] [US5] Create selection visual indicators in frontend/src/lib/canvas/SelectionBox.svelte
- T117 [US5] Implement position sync to backend (debounced) in frontend/src/lib/canvas/sync.ts
- T118 [P] [US5] Write dragging tests in frontend/tests/canvas/drag.test.ts
- T119 [P] [US5] Write selection tests in frontend/tests/canvas/select.test.ts
Backend Tasks:
- T120 [US5] Implement image position update endpoint PATCH /boards/{id}/images/{image_id} in backend/app/api/images.py
- T121 [P] [US5] Write integration tests for position updates in backend/tests/api/test_image_position.py
Deliverables:
- Images draggable
- Multi-selection works
- Positions persist
- Visual feedback immediate
Phase 8: Image Transformations (FR8 - Critical) (Week 6) ✅ COMPLETE
User Story: Users must be able to transform images non-destructively
Independent Test Criteria:
- Users can scale images (resize handles)
- Users can rotate images (any angle)
- Users can flip horizontal/vertical
- Users can crop to rectangular region
- Users can adjust opacity (0-100%)
- Users can convert to greyscale
- Users can reset to original
- All transformations non-destructive
Frontend Tasks:
- T122 [US6] Implement image rotation in frontend/src/lib/canvas/transforms/rotate.ts
- T123 [P] [US6] Implement image scaling in frontend/src/lib/canvas/transforms/scale.ts
- T124 [P] [US6] Implement flip transformations in frontend/src/lib/canvas/transforms/flip.ts
- T125 [US6] Implement crop tool in frontend/src/lib/canvas/transforms/crop.ts
- T126 [P] [US6] Implement opacity adjustment in frontend/src/lib/canvas/transforms/opacity.ts
- T127 [P] [US6] Implement greyscale filter in frontend/src/lib/canvas/transforms/greyscale.ts
- T128 [US6] Create transformation panel UI in frontend/src/lib/components/canvas/TransformPanel.svelte
- T129 [US6] Implement reset to original function in frontend/src/lib/canvas/transforms/reset.ts
- T130 [US6] Sync transformations to backend (debounced)
- T131 [P] [US6] Write transformation tests in frontend/tests/canvas/transforms.test.ts
Backend Tasks:
- T132 [US6] Update transformations endpoint PATCH /boards/{id}/images/{image_id} to handle all transform types
- T133 [P] [US6] Write transformation validation tests in backend/tests/images/test_transformations.py
Deliverables:
- All transformations functional
- Non-destructive editing verified
- Transformations persist
- Real-time preview
Phase 9: Multi-Selection & Bulk Operations (FR9 - High) (Week 7) ✅ COMPLETE
User Story: Users must be able to select and operate on multiple images simultaneously
Independent Test Criteria:
- Selection rectangle selects multiple images
- Ctrl+Click adds to selection
- Ctrl+A selects all
- Bulk move works on selected images
- Bulk transformations apply correctly
Frontend Tasks:
- T134 [US7] Enhance selection rectangle in frontend/src/lib/canvas/interactions/multiselect.ts
- T135 [US7] Implement Ctrl+Click add-to-selection in frontend/src/lib/canvas/interactions/select.ts
- T136 [US7] Implement select all (Ctrl+A) in frontend/src/lib/canvas/keyboard.ts
- T137 [US7] Implement deselect all (Escape) in frontend/src/lib/canvas/keyboard.ts
- T138 [US7] Implement bulk move in frontend/src/lib/canvas/operations/bulk-move.ts
- T139 [P] [US7] Implement bulk rotate in frontend/src/lib/canvas/operations/bulk-rotate.ts
- T140 [P] [US7] Implement bulk scale in frontend/src/lib/canvas/operations/bulk-scale.ts
- T141 [P] [US7] Create selection count indicator in frontend/src/lib/components/canvas/SelectionCounter.svelte
- T142 [P] [US7] Write multi-selection tests in frontend/tests/canvas/multiselect.test.ts
Backend Tasks:
- T143 [US7] Implement bulk update endpoint PATCH /boards/{id}/images/bulk in backend/app/api/images.py
- T144 [P] [US7] Write bulk operation tests in backend/tests/api/test_bulk_operations.py
Deliverables:
- Multi-selection complete
- Bulk operations functional
- Selection count visible
Phase 10: Copy, Cut, Paste, Delete (FR10 - High) (Week 7) ✅ COMPLETE
User Story: Users must have standard clipboard operations
Independent Test Criteria:
- Copy (Ctrl+C) copies selected images
- Cut (Ctrl+X) copies and removes
- Paste (Ctrl+V) inserts at viewport center
- Delete (Del) removes with confirmation (>10 images)
Frontend Tasks:
- T145 [US8] Implement copy operation in frontend/src/lib/canvas/clipboard/copy.ts
- T146 [US8] Implement cut operation in frontend/src/lib/canvas/clipboard/cut.ts
- T147 [US8] Implement paste operation in frontend/src/lib/canvas/clipboard/paste.ts
- T148 [US8] Implement delete operation in frontend/src/lib/canvas/operations/delete.ts
- T149 [US8] Create clipboard store in frontend/src/lib/stores/clipboard.ts
- T150 [US8] Add keyboard shortcuts (Ctrl+C/X/V, Delete) in frontend/src/lib/canvas/keyboard.ts
- T151 [P] [US8] Create delete confirmation modal in frontend/src/lib/components/canvas/DeleteConfirmModal.svelte
- T152 [P] [US8] Write clipboard tests in frontend/tests/canvas/clipboard.test.ts
Backend Tasks:
- T153 [US8] Implement delete endpoint DELETE /boards/{id}/images/{image_id} in backend/app/api/images.py
- T154 [P] [US8] Write delete endpoint tests in backend/tests/api/test_image_delete.py
Deliverables:
- All clipboard ops work
- Delete requires confirmation
- Standard keyboard shortcuts
Phase 11: Z-Order & Layering (Week 8) ✅ COMPLETE
User Story: Control image stacking order (bring to front/back)
Independent Test Criteria:
- Bring to front moves image to top layer
- Send to back moves image to bottom
- Forward/backward moves one layer
- Z-order persists
Frontend Tasks:
- T155 [US5] Implement bring to front in frontend/src/lib/canvas/operations/z-order.ts
- T156 [P] [US5] Implement send to back in frontend/src/lib/canvas/operations/z-order.ts
- T157 [P] [US5] Implement bring forward/send backward in frontend/src/lib/canvas/operations/z-order.ts
- T158 [US5] Add Z-order keyboard shortcuts in frontend/src/lib/canvas/keyboard.ts
- T159 [US5] Sync Z-order changes to backend
- T160 [P] [US5] Write Z-order tests in frontend/tests/canvas/z-order.test.ts
Backend Tasks:
- T161 [US5] Update Z-order field in position update endpoint backend/app/api/images.py
- T162 [P] [US5] Write Z-order persistence tests in backend/tests/api/test_z_order.py
Deliverables:
- Full layering control
- Z-order immediately visible
- Persistence working
Phase 12: Alignment & Distribution (FR6 - High) (Week 10) ✅ COMPLETE
User Story: Users must be able to precisely align and distribute images
Independent Test Criteria:
- Align top/bottom/left/right works
- Center horizontal/vertical works
- Distribute horizontal/vertical creates equal spacing
- Snap-to-grid assists alignment
- Grid size configurable
Frontend Tasks:
- T163 [US9] Implement align top/bottom in frontend/src/lib/canvas/operations/align.ts
- T164 [P] [US9] Implement align left/right in frontend/src/lib/canvas/operations/align.ts
- T165 [P] [US9] Implement center horizontal/vertical in frontend/src/lib/canvas/operations/align.ts
- T166 [US9] Implement distribute horizontal in frontend/src/lib/canvas/operations/distribute.ts
- T167 [P] [US9] Implement distribute vertical in frontend/src/lib/canvas/operations/distribute.ts
- T168 [US9] Implement snap-to-grid in frontend/src/lib/canvas/grid.ts
- T169 [P] [US9] Create grid settings UI in frontend/src/lib/components/canvas/GridSettings.svelte
- T170 [P] [US9] Create alignment toolbar in frontend/src/lib/components/canvas/AlignmentToolbar.svelte
- T171 [P] [US9] Write alignment calculation tests in frontend/tests/canvas/align.test.ts
Deliverables:
- All alignment commands work
- Distribution creates equal spacing
- Snap-to-grid functional
Phase 13: Image Grouping & Annotations (FR7 - High) (Week 9)
User Story: Users must be able to organize images into groups with labels
Independent Test Criteria:
- Users can create groups from selection
- Groups have text annotations
- Groups have colored labels
- Groups move as single unit
- Groups can be ungrouped
Backend Tasks:
- T172 [P] [US10] Create Group model in backend/app/database/models/group.py from data-model.md
- T173 [P] [US10] Create group schemas in backend/app/boards/schemas.py (GroupCreate, GroupResponse)
- T174 [US10] Create group repository in backend/app/boards/repository.py (group operations)
- T175 [US10] Implement create group endpoint POST /boards/{id}/groups in backend/app/api/groups.py
- T176 [US10] Implement list groups endpoint GET /boards/{id}/groups in backend/app/api/groups.py
- T177 [US10] Implement update group endpoint PATCH /boards/{id}/groups/{group_id} in backend/app/api/groups.py
- T178 [US10] Implement delete group endpoint DELETE /boards/{id}/groups/{group_id} in backend/app/api/groups.py
- T179 [P] [US10] Write group endpoint tests in backend/tests/api/test_groups.py
Frontend Tasks:
- T180 [P] [US10] Create groups API client in frontend/src/lib/api/groups.ts
- T181 [P] [US10] Create groups store in frontend/src/lib/stores/groups.ts
- T182 [US10] Implement create group from selection in frontend/src/lib/canvas/operations/group.ts
- T183 [US10] Implement group move as unit in frontend/src/lib/canvas/operations/group-move.ts
- T184 [US10] Implement ungroup operation in frontend/src/lib/canvas/operations/ungroup.ts
- T185 [P] [US10] Create group annotation UI in frontend/src/lib/components/canvas/GroupAnnotation.svelte
- T186 [P] [US10] Create color picker for groups in frontend/src/lib/components/canvas/ColorPicker.svelte
- T187 [P] [US10] Add group visual indicators in frontend/src/lib/canvas/GroupVisual.svelte
- T188 [P] [US10] Write grouping tests in frontend/tests/canvas/groups.test.ts
Deliverables:
- Grouping functional
- Annotations and colors work
- Groups move together
- Membership enforced
Phase 14: Board Sharing & Collaboration (FR3 - High) (Week 11)
User Story: Users must be able to share boards with configurable permissions
Independent Test Criteria:
- Users can generate share links
- Permission level selector works (View-only/View+Comment)
- View-only prevents modifications
- View+Comment allows adding comments
- Share links can be revoked
Backend Tasks:
- T189 [P] [US11] Create ShareLink model in backend/app/database/models/share_link.py from data-model.md
- T190 [P] [US11] Create Comment model in backend/app/database/models/comment.py from data-model.md
- T191 [P] [US11] Create share link schemas in backend/app/boards/schemas.py (ShareLinkCreate, ShareLinkResponse)
- T192 [US11] Implement token generation in backend/app/boards/sharing.py (secure random tokens)
- T193 [US11] Create share link endpoint POST /boards/{id}/share-links in backend/app/api/sharing.py
- T194 [US11] Create list share links endpoint GET /boards/{id}/share-links in backend/app/api/sharing.py
- T195 [US11] Implement revoke endpoint DELETE /boards/{id}/share-links/{link_id} in backend/app/api/sharing.py
- T196 [US11] Implement shared board access GET /shared/{token} in backend/app/api/sharing.py
- T197 [US11] Add permission validation middleware in backend/app/boards/permissions.py
- T198 [US11] Implement comment endpoints (create, list) in backend/app/api/comments.py
- T199 [P] [US11] Write sharing tests in backend/tests/api/test_sharing.py
- T200 [P] [US11] Write permission tests in backend/tests/boards/test_permissions.py
Frontend Tasks:
- T201 [P] [US11] Create sharing API client in frontend/src/lib/api/sharing.ts
- T202 [P] [US11] Create share modal in frontend/src/lib/components/sharing/ShareModal.svelte
- T203 [US11] Implement permission selector in frontend/src/lib/components/sharing/PermissionSelector.svelte
- T204 [US11] Create shared board view in frontend/src/routes/shared/[token]/+page.svelte
- T205 [US11] Implement comment UI for View+Comment links in frontend/src/lib/components/sharing/Comments.svelte
- T206 [US11] Create share link management view in frontend/src/lib/components/sharing/LinkManager.svelte
- T207 [P] [US11] Write sharing component tests in frontend/tests/components/sharing.test.ts
Deliverables:
- Share link generation works
- Permission levels enforced
- Comments functional
- Link revocation works
Phase 15: Export & Download (FR15 - High) (Week 12)
User Story: Users must be able to export images and board layouts
Independent Test Criteria:
- Single image download works
- ZIP export contains all images
- Composite export captures board layout
- Resolution selector offers 1x/2x/4x
- Progress shown for large exports
Backend Tasks:
- T208 [US12] Implement single image download in backend/app/images/download.py
- T209 [US12] Implement ZIP export in backend/app/images/export_zip.py (all images)
- T210 [US12] Implement composite image generation in backend/app/images/export_composite.py (Pillow)
- T211 [US12] Create export endpoint POST /boards/{id}/export in backend/app/api/export.py
- T212 [US12] Add background task for large exports in backend/app/core/tasks.py
- T213 [P] [US12] Write export tests in backend/tests/api/test_export.py
Frontend Tasks:
- T214 [P] [US12] Create export API client in frontend/src/lib/api/export.ts
- T215 [P] [US12] Create export modal in frontend/src/lib/components/export/ExportModal.svelte
- T216 [US12] Implement resolution selector in frontend/src/lib/components/export/ResolutionSelector.svelte
- T217 [P] [US12] Create export progress indicator in frontend/src/lib/components/export/ProgressBar.svelte
- T218 [US12] Implement download trigger and file saving in frontend/src/lib/utils/download.ts
- T219 [P] [US12] Write export component tests in frontend/tests/components/export.test.ts
Deliverables:
- All export formats work
- Progress indicators visible
- Large exports handled correctly
Phase 16: Adaptive Image Quality (FR16 - High) (Week 13)
User Story: Application must serve appropriate quality based on connection speed
Independent Test Criteria:
- Connection speed detected automatically
- Low quality served on slow connections
- Manual override works (Auto/Low/Medium/High)
- Quality setting persists across sessions
- Full-resolution loadable on-demand
Backend Tasks:
- T220 [US13] Implement quality detection endpoint POST /api/connection/test in backend/app/api/quality.py
- T221 [US13] Add thumbnail serving logic with quality selection in backend/app/images/serve.py
- T222 [P] [US13] Write quality serving tests in backend/tests/api/test_quality.py
Frontend Tasks:
- T223 [US13] Implement connection speed test in frontend/src/lib/utils/connection-test.ts (Network Information API)
- T224 [US13] Create quality settings store in frontend/src/lib/stores/quality.ts
- T225 [US13] Implement automatic quality selection logic in frontend/src/lib/utils/adaptive-quality.ts
- T226 [P] [US13] Create quality selector UI in frontend/src/lib/components/settings/QualitySelector.svelte
- T227 [US13] Implement on-demand full-res loading in frontend/src/lib/canvas/Image.svelte
- T228 [US13] Add quality preference persistence (localStorage)
- T229 [P] [US13] Write quality selection tests in frontend/tests/utils/quality.test.ts
Deliverables:
- Connection detection works
- Appropriate quality served
- Manual override functional
- Preferences persist
Phase 17: Image Library & Reuse (FR17 - Medium) (Week 14)
User Story: Users can reuse uploaded images across multiple boards
Independent Test Criteria:
- Image library shows all user's images
- Users can add library images to boards
- Same image on multiple boards references single file
- Deleting from board doesn't delete from library
- Permanent delete removes from all boards
Backend Tasks:
- T230 [US14] Implement image library endpoint GET /library/images in backend/app/api/library.py
- T231 [US14] Add image search/filter logic in backend/app/images/search.py
- T232 [US14] Implement add-to-board from library endpoint in backend/app/api/library.py
- T233 [US14] Update reference counting logic in backend/app/images/repository.py
- T234 [US14] Implement permanent delete endpoint DELETE /library/images/{id} in backend/app/api/library.py
- T235 [P] [US14] Write library endpoint tests in backend/tests/api/test_library.py
Frontend Tasks:
- T236 [P] [US14] Create library API client in frontend/src/lib/api/library.ts
- T237 [US14] Create image library page in frontend/src/routes/library/+page.svelte
- T238 [P] [US14] Create library image grid in frontend/src/lib/components/library/ImageGrid.svelte
- T239 [P] [US14] Create add-to-board modal in frontend/src/lib/components/library/AddToBoardModal.svelte
- T240 [US14] Implement library search in frontend/src/lib/components/library/SearchBar.svelte
- T241 [P] [US14] Write library component tests in frontend/tests/components/library.test.ts
Deliverables:
- Image library functional
- Cross-board reuse works
- Reference counting correct
- Search/filter works
Phase 18: Command Palette (FR11 - Medium) (Week 14)
User Story: Users need quick access to all commands via searchable palette
Independent Test Criteria:
- Palette opens with Ctrl+K/Cmd+K
- Search filters commands
- Recently used appears first
- Commands execute correctly
- Keyboard shortcuts shown
Frontend Tasks:
- T242 [US15] Create command registry in frontend/src/lib/commands/registry.ts
- T243 [US15] Implement command palette modal in frontend/src/lib/components/commands/Palette.svelte
- T244 [US15] Implement command search/filter in frontend/src/lib/commands/search.ts
- T245 [US15] Add Ctrl+K keyboard shortcut in frontend/src/lib/canvas/keyboard.ts
- T246 [P] [US15] Create command item display in frontend/src/lib/components/commands/CommandItem.svelte
- T247 [US15] Implement recently-used tracking in frontend/src/lib/stores/commands.ts
- T248 [P] [US15] Write command palette tests in frontend/tests/components/commands.test.ts
Deliverables:
- Command palette opens quickly
- Search works instantly
- All commands accessible
- Recently used prioritized
Phase 19: Focus Mode & Navigation (FR13 - Medium) (Week 14)
User Story: Users can focus on individual images and navigate between them
Independent Test Criteria:
- Double-click enters focus mode
- Focus mode shows single image
- Navigation (prev/next) works
- Navigation order selector works (Chronological/Spatial/Alphabetical/Random)
- Escape exits focus mode
Frontend Tasks:
- T249 [US16] Implement focus mode in frontend/src/lib/canvas/focus.ts
- T250 [US16] Create focus mode UI in frontend/src/lib/components/canvas/FocusMode.svelte
- T251 [US16] Implement navigation order calculation in frontend/src/lib/canvas/navigation.ts
- T252 [P] [US16] Create navigation order selector in frontend/src/lib/components/canvas/NavigationSettings.svelte
- T253 [US16] Implement prev/next navigation in frontend/src/lib/canvas/navigation.ts
- T254 [US16] Add image counter display in frontend/src/lib/components/canvas/ImageCounter.svelte
- T255 [US16] Persist navigation preference in localStorage
- T256 [P] [US16] Write focus mode tests in frontend/tests/canvas/focus.test.ts
Deliverables:
- Focus mode works
- Navigation functional
- Order selector works
- Preferences persist
Phase 20: Slideshow Mode (FR14 - Low) (Week 14)
User Story: Users can play automatic slideshow of board images
Independent Test Criteria:
- Slideshow starts from menu/shortcut
- Images advance automatically
- Interval configurable (1-30s)
- Manual nav works during slideshow
- Pause/resume functional
Frontend Tasks:
- T257 [US17] Implement slideshow mode in frontend/src/lib/canvas/slideshow.ts
- T258 [US17] Create slideshow UI in frontend/src/lib/components/canvas/Slideshow.svelte
- T259 [P] [US17] Create interval selector in frontend/src/lib/components/canvas/SlideshowSettings.svelte
- T260 [US17] Implement auto-advance timer in frontend/src/lib/canvas/slideshow.ts
- T261 [US17] Add pause/resume controls in frontend/src/lib/components/canvas/SlideshowControls.svelte
- T262 [US17] Respect navigation order setting (from FR13)
- T263 [P] [US17] Write slideshow tests in frontend/tests/canvas/slideshow.test.ts
Deliverables:
- Slideshow functional
- Controls work
- Respects navigation order
- Smooth transitions
Phase 21: Auto-Arrange Images (FR18 - Low) (Week 14)
User Story: Users can automatically arrange images by criteria
Independent Test Criteria:
- Auto-arrange by name (alphabetical)
- Auto-arrange by upload date
- Auto-arrange with optimal layout
- Random arrangement works
- Preview shown before applying
- Undo works after arrange
Frontend Tasks:
- T264 [US18] Implement sort by name in frontend/src/lib/canvas/arrange/sort-name.ts
- T265 [P] [US18] Implement sort by date in frontend/src/lib/canvas/arrange/sort-date.ts
- T266 [P] [US18] Implement optimal layout algorithm in frontend/src/lib/canvas/arrange/optimal.ts
- T267 [P] [US18] Implement random arrangement in frontend/src/lib/canvas/arrange/random.ts
- T268 [US18] Create arrange modal with preview in frontend/src/lib/components/canvas/ArrangeModal.svelte
- T269 [US18] Implement undo for arrange operations
- T270 [P] [US18] Write arrangement algorithm tests in frontend/tests/canvas/arrange.test.ts
Deliverables:
- All arrange methods work
- Preview functional
- Groups preserved
- Undo available
Phase 22: Performance & Optimization (Week 13)
Goal: Meet performance budgets (60fps, <200ms, <3s load)
Cross-Cutting Tasks:
- T271 [P] Implement virtual rendering for canvas (only render visible images) in frontend/src/lib/canvas/virtual-render.ts
- T272 [P] Add lazy loading for image thumbnails in frontend/src/lib/components/boards/LazyImage.svelte
- T273 [P] Optimize database queries with proper indexes (verify GIN indexes working)
- T274 [P] Implement Redis caching for hot data in backend/app/core/cache.py (optional)
- T275 Run Lighthouse performance audit on frontend (target: >90 score)
- T276 Run load testing on backend with locust (target: 1000 req/s)
- T277 [P] Optimize Pillow thumbnail generation settings in backend/app/images/processing.py
- T278 [P] Add WebP format conversion for smaller file sizes
- T279 Profile canvas rendering with Chrome DevTools (verify 60fps)
- T280 Add performance monitoring in backend/app/core/monitoring.py
Deliverables:
- 60fps canvas with 500+ images
- <200ms API responses
- <3s page load
- Lighthouse score >90
Phase 23: Testing & Quality Assurance (Week 15)
Goal: Achieve ≥80% coverage, validate all requirements
Backend Testing:
- T281 [P] Verify ≥80% pytest coverage for all modules (run pytest --cov)
- T282 [P] Write missing unit tests to reach 80% threshold
- T283 [P] Add edge case tests (large files, concurrent uploads, SQL injection attempts)
- T284 [P] Write performance benchmark tests in backend/tests/performance/test_benchmarks.py
- T285 [P] Add security tests (authentication bypass, permission escalation) in backend/tests/security/
Frontend Testing:
- T286 [P] Verify ≥80% Vitest coverage for all modules (run vitest --coverage)
- T287 [P] Write missing component tests to reach 80% threshold
- T288 [P] Add E2E tests for critical flows in frontend/tests/e2e/ (Playwright)
- T289 [P] Write canvas interaction tests (drag, select, transform)
- T290 [P] Add cross-browser tests (Chrome, Firefox, Safari, Edge)
Integration Testing:
- T291 Test complete user journey: register → create board → upload → arrange → export
- T292 Test sharing flow: create board → share → viewer access → add comment
- T293 Test image library: upload → reuse across boards → delete
- T294 Test performance: load board with 500 images, verify 60fps
- T295 Test adaptive quality: simulate slow connection, verify low-res served
Deliverables:
- ≥80% coverage both sides
- E2E tests pass
- All edge cases covered
- Performance validated
Phase 24: Accessibility & UX Polish (Week 15)
Goal: WCAG 2.1 AA compliance, keyboard navigation
Accessibility Tasks:
- T296 [P] Run axe-core accessibility audit on all pages
- T297 [P] Fix all WCAG 2.1 AA violations (color contrast, alt text, ARIA labels)
- T298 Add keyboard navigation for all canvas operations in frontend/src/lib/canvas/keyboard.ts
- T299 [P] Add focus indicators for all interactive elements
- T300 [P] Test with screen reader (NVDA or VoiceOver)
- T301 [P] Add skip links for keyboard users in frontend/src/lib/components/layout/SkipLinks.svelte
- T302 [P] Verify tab order is logical across all pages
UX Polish:
- T303 [P] Add loading states for all async operations (spinners, skeletons)
- T304 [P] Improve error messages (make user-friendly, actionable)
- T305 [P] Add tooltips for all toolbar buttons in frontend/src/lib/components/common/Tooltip.svelte
- T306 [P] Implement keyboard shortcuts cheat sheet in frontend/src/lib/components/help/KeyboardShortcuts.svelte
- T307 [P] Add undo/redo stack for all canvas operations (optional, if time permits)
- T308 [P] Polish animations and transitions (smooth, not jarring)
Deliverables:
- WCAG 2.1 AA compliant
- Full keyboard navigation
- Professional polish
- Excellent accessibility
Phase 25: Deployment & Documentation (Week 16)
Goal: Production-ready Nix deployment, complete documentation
Nix Deployment:
- T309 Finalize flake.nix with all services (PostgreSQL, MinIO, Nginx) from nix-package-verification.md
- T310 [P] Create NixOS module in nixos/webref.nix with service configuration
- T311 [P] Create secrets management in nixos/secrets.nix (agenix or sops-nix)
- T312 Create production build in flake.nix outputs (frontend + backend packages)
- T313 [P] Create systemd service for FastAPI in nixos/webref.nix
- T314 Configure Nginx virtual host in nixos/webref.nix with SSL/TLS
- T315 [P] Set up PostgreSQL with proper permissions in nixos/webref.nix
- T316 [P] Configure MinIO buckets in nixos/webref.nix
- T317 Test deployment on staging NixOS server
- T318 Create rollback procedure documentation in docs/deployment/rollback.md
Documentation:
- T319 [P] Write deployment guide in docs/deployment/README.md
- T320 [P] Write development setup guide in docs/development/setup.md
- T321 [P] Write API documentation (OpenAPI already generated at /api/docs)
- T322 [P] Write user guide in docs/user-guide/getting-started.md
- T323 [P] Create architecture diagrams in docs/architecture/
- T324 [P] Document environment variables in docs/configuration/environment.md
- T325 [P] Create troubleshooting guide in docs/troubleshooting.md
- T326 Update main README.md with project overview and quick start
Monitoring & Operations:
- T327 [P] Set up logging aggregation configuration
- T328 [P] Create health check endpoints in backend/app/api/health.py
- T329 [P] Add metrics collection (request counts, latencies) in backend/app/core/monitoring.py
- T330 [P] Create database backup script in scripts/backup-db.sh
- T331 [P] Create image backup script in scripts/backup-images.sh
Deliverables:
- Complete Nix deployment config
- All documentation complete
- Monitoring configured
- Backup procedures established
Dependency Graph (User Story Completion Order)
Phase 1: Setup
↓
Phase 2: Foundational
↓
├─ Phase 3: US1 (Auth) ────────────────┐
│ ↓
├─ Phase 4: US2 (Boards) ──────────────┤
│ ↓
├─ Phase 5: US3 (Upload) ──────────────┤
│ ↓
├─ Phase 6: US4 (Navigation) ───┐ │
│ ↓ │
└─ Phase 7: US5 (Positioning) ──┴──────┤
↓
┌─ Phase 8: US6 (Transforms) ──────────┤
│ ↓
├─ Phase 9: US7 (Multi-Select) ───────┤
│ ↓
├─ Phase 10: US8 (Clipboard) ─────────┤
│ ↓
├─ Phase 11: (Z-Order - part of US5) ─┤
│ ↓
├─ Phase 12: US9 (Alignment) ─────────┤
│ ↓
├─ Phase 13: US10 (Groups) ───────────┤
│ ↓
├─ Phase 14: US11 (Sharing) ──────────┤
│ ↓
├─ Phase 15: US12 (Export) ───────────┤
│ ↓
├─ Phase 16: US13 (Quality) ──────────┤
│ ↓
├─ Phase 17: US14 (Library) ──────────┤
│ ↓
├─ Phase 18: US15 (Palette) ──────────┤
│ ↓
├─ Phase 19: US16 (Focus) ────────────┤
│ ↓
├─ Phase 20: US17 (Slideshow) ────────┤
│ ↓
└─ Phase 21: US18 (Auto-Arrange) ─────┘
↓
┌──────────────────────────────────────┤
│ ↓
├─ Phase 22: Performance ─────────────┤
│ ↓
├─ Phase 23: Testing ─────────────────┤
│ ↓
├─ Phase 24: Accessibility ───────────┤
│ ↓
└─ Phase 25: Deployment ──────────────┘
Key Dependencies:
- US1 (Auth) blocks US2 (Boards) - need auth before creating boards
- US2 (Boards) blocks US3 (Upload) - need boards to upload images to
- US3 (Upload) blocks US4-US18 - need images before manipulating them
- US4 (Navigation) + US5 (Positioning) run in parallel
- US6-US18 are mostly independent (can parallelize)
Parallel Execution Examples
Week 1 (Setup) - 13 Parallel Tasks
# All [P] tasks in Phase 1 can run simultaneously
T002, T003, T004, T006, T008, T010, T011, T012, T013, T014, T016, T019
Week 2 (Auth) - Backend & Frontend in Parallel
# Backend team:
T036, T037, T045, T046, T047 # Models, schemas, tests
# Frontend team:
T048, T049, T053, T054, T055 # Pages, components, tests
# Both teams work simultaneously on US1
Week 5-6 (Canvas Foundation) - Full Parallel
# Canvas controls (US4):
T101, T102, T103 # Pan, zoom, rotate all independent
# Position & selection (US5):
T111, T112, T113 # Can work on different aspects
# Tests:
T109, T118, T119, T131 # All test writing can be parallel
Implementation Strategy
MVP Scope (Minimum Viable Product)
Critical Path (Must-Have for Beta):
- Phase 1-2: Setup & Foundation
- Phase 3: US1 (Auth)
- Phase 4: US2 (Boards)
- Phase 5: US3 (Upload)
- Phase 6-7: US4-US5 (Canvas basics)
- Phase 8: US6 (Transformations)
Total for MVP: ~120 tasks (Weeks 1-8)
This gives you a functional app where users can:
- Register and login
- Create boards
- Upload images
- Arrange images on canvas
- Apply basic transformations
Full Feature Set (v1.0 Release)
Add remaining phases 9-25 for complete feature set per specification.
Total: All 331 tasks (Weeks 1-16)
Incremental Delivery
Each user story phase is independently testable:
- Complete phase (all tasks done)
- Run phase tests (verify acceptance criteria)
- Deploy to staging
- Get user feedback
- Move to next phase
This allows for continuous delivery and early user validation.
Task Completion Checklist
Before marking any task complete:
- Code changes committed with clear message
- Tests written and passing (if applicable)
- Linter/type checker passing
- Documentation updated (if public API)
- Code review completed (if applicable)
- Constitutional principles satisfied:
- Code quality (type hints, no duplication)
- Testing (coverage maintained)
- UX (error handling, accessibility)
- Performance (no regressions)
Progress Tracking
By Phase (19 Phases Total)
- Phase 1: Setup (T001-T020) - 20 tasks
- Phase 2: Foundational (T021-T035) - 15 tasks
- Phase 3: US1 Auth (T036-T055) - 20 tasks
- Phase 4: US2 Boards (T056-T075) - 20 tasks
- Phase 5: US3 Upload (T076-T099) - 24 tasks
- Phase 6: US4 Navigation (T100-T110) - 11 tasks
- Phase 7: US5 Positioning (T111-T121) - 11 tasks
- Phase 8: US6 Transforms (T122-T133) - 12 tasks
- Phase 9: US7 Multi-Select (T134-T144) - 11 tasks
- Phase 10: US8 Clipboard (T145-T154) - 10 tasks
- Phase 11: Z-Order (T155-T162) - 8 tasks
- Phase 12: US9 Alignment (T163-T171) - 9 tasks
- Phase 13: US10 Groups (T172-T188) - 17 tasks
- Phase 14: US11 Sharing (T189-T207) - 19 tasks
- Phase 15: US12 Export (T208-T219) - 12 tasks
- Phase 16: US13 Quality (T220-T229) - 10 tasks
- Phase 17: US14 Library (T230-T241) - 12 tasks
- Phase 18: US15 Palette (T242-T248) - 7 tasks
- Phase 19: US16 Focus (T249-T256) - 8 tasks
- Phase 20: US17 Slideshow (T257-T263) - 7 tasks
- Phase 21: US18 Arrange (T264-T270) - 7 tasks
- Phase 22: Performance (T271-T280) - 10 tasks
- Phase 23: Testing (T281-T295) - 15 tasks
- Phase 24: Accessibility (T296-T308) - 13 tasks
- Phase 25: Deployment (T309-T331) - 23 tasks
Total: 331 tasks
By User Story (18 Stories from Spec)
| Story | Requirement | Priority | Tasks | Status |
|---|---|---|---|---|
| US1 | FR1: Authentication | Critical | 20 | ⬜ |
| US2 | FR2: Board Management | Critical | 20 | ⬜ |
| US3 | FR4: Image Upload | Critical | 24 | ⬜ |
| US4 | FR12: Canvas Navigation | Critical | 11 | ⬜ |
| US5 | FR5: Image Positioning | Critical | 19 | ⬜ |
| US6 | FR8: Transformations | Critical | 12 | ⬜ |
| US7 | FR9: Multi-Selection | High | 11 | ⬜ |
| US8 | FR10: Clipboard Ops | High | 10 | ⬜ |
| US9 | FR6: Alignment | High | 9 | ⬜ |
| US10 | FR7: Grouping | High | 17 | ⬜ |
| US11 | FR3: Sharing | High | 19 | ⬜ |
| US12 | FR15: Export | High | 12 | ⬜ |
| US13 | FR16: Quality | High | 10 | ⬜ |
| US14 | FR17: Library | Medium | 12 | ⬜ |
| US15 | FR11: Palette | Medium | 7 | ⬜ |
| US16 | FR13: Focus | Medium | 8 | ⬜ |
| US17 | FR14: Slideshow | Low | 7 | ⬜ |
| US18 | FR18: Auto-Arrange | Low | 7 | ⬜ |
Critical Stories: 126 tasks
High Priority Stories: 88 tasks
Medium Priority Stories: 27 tasks
Low Priority Stories: 14 tasks
Infrastructure/Polish: 76 tasks
Notes
Parallel Development Opportunities
Week 1: 13 setup tasks can run in parallel
Week 2: Backend + Frontend teams work independently on US1
Week 3-4: Backend + Frontend can work on different user stories
Week 5-12: Each user story is independent - can parallelize across team
Week 13-16: Most polish/deployment tasks are parallelizable
Test Coverage Strategy
- Unit tests written alongside implementation (same phase)
- Integration tests after unit tests pass
- E2E tests in Phase 23 (Week 15)
- Coverage tracked continuously in CI
- 80% threshold enforced before merge
Code Review Process
- All tasks require code review before marking complete
- Constitution checklist verified during review
- Performance impact assessed for canvas/API changes
- Security review for auth/sharing features
References
- Specification: spec.md - 18 functional requirements
- Implementation Plan: plan.md - 16-week timeline
- Data Model: data-model.md - Database schema
- API Contracts: contracts/api.yaml - OpenAPI spec
- Quick Start: quickstart.md - Getting started guide
- Nix Verification: VERIFICATION-COMPLETE.md - Package verification
Status: Ready for execution
Next Action: Begin Phase 1 (T001-T020) - Project setup
Estimated Completion: 16 weeks from start