Files
web-hosts/chuckie.coppertone.tech/app/TASKS.md
2025-12-26 13:38:04 +01:00

2.0 KiB

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