# Build Checklist (Canva-like Editor) ## Milestone 1 — Core model + renderer - [ ] PRD & V1 gates approved (social/flyer, text/image/shape/bg/groups, PNG/PDF, no realtime) - [ ] Doc schema + TS types + validator + migrate(doc) - [ ] Pinia stores split (doc/ui/history/assets) + command dispatcher - [ ] Stage: zoom/pan, fit-to-screen, zoom-to-selection (retina-safe) - [ ] Render Text/Image/Shape/Group with lock/visible + z-order - [ ] Selection/transform: click/shift, marquee, move/resize/rotate, keyboard nudge; drag = single history entry - [ ] Snapping + guides (page center, edges, other elements) ## Milestone 2 — Tools + history - [ ] Text tool: create/edit (textarea overlay), font load, style panel (size/weight/color/align) - [ ] Image tool: upload/place, drag-drop, fit/fill crop toggle - [ ] Shapes: rect/circle/line, stroke/fill, corner radius - [ ] Undo/redo via command pattern (Ctrl/Cmd+Z, Shift+Z) with tests ## Milestone 3 — Persistence & export - [ ] Autosave + debounced patch API (create/fetch/update doc) - [ ] Version table entries; basic conflict strategy (last-write wins) - [ ] Client PNG export (respects devicePixelRatio) - [ ] Server PDF export job (queue + downloadable result, font embedding handled) ## Milestone 4 — Layers, arrange, templates - [ ] Layers panel (list/z-order, lock/eye, rename, drag reorder) - [ ] Arrange tools (bring fwd/back, align, distribute) - [ ] Group/ungroup with proper transform propagation - [ ] Template ingestion (validated doc JSON + metadata) + gallery UI (category/search, create-from-template) ## Milestone 5 — Assets + perf/reliability - [ ] Upload pipeline (signed URL, metadata, thumbs) - [ ] Library UI (recent uploads, drag to canvas) - [ ] Perf: virtualized layers, bbox cache, throttled snapping, offscreen previews - [ ] Crash recovery: local draft restore - [ ] Tests: commands/migrations unit, golden render, Playwright E2E for core flows ## Milestone 6 — (Optional) Collaboration prep - [ ] Decision doc: CRDT vs OT vs locking; presence stub behind a flag