Files
2025-12-26 13:38:04 +01:00

39 lines
2.0 KiB
Markdown

# 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