···141. Milestone A: Repo skeleton + dev loop *wb-A*
15================================================================================
1617-Goal: a monorepo that can run a blank canvas in web + desktop.
18-19-[ ] Create workspace:
20- - /apps/web (SvelteKit)
21- - /apps/desktop (Tauri wrapper)
22- - /packages/core (pure TS engine)
23- - /packages/renderer (Canvas2D renderer)
24-25-[ ] Add TypeScript config(s):
26- - one shared tsconfig.base.json
27- - package-level tsconfig.json extends base
28-29-[ ] Add lint/format:
30- - eslint + prettier
31- - one command: pnpm lint / pnpm fmt
32-33-[ ] Add test runner for core:
34- - vitest in /packages/core
35- - one command: pnpm test
36-37-[ ] Add CI:
38- - install, lint, test (core only)
39-40-(DoD):
41-- `pnpm dev:web` shows an empty page with a <canvas>.
42-- `pnpm dev:desktop` launches a Tauri window that shows the same canvas.
43-- `pnpm test` runs at least 1 passing core test.
4445================================================================================
462. Milestone B: Math + coordinate systems *wb-B*
···14215. Milestone O: Export (PNG/SVG) *wb-O*
143================================================================================
144145-Goal: export drawings as shareable artifacts.
146-147-[x] Implement exportViewportToPNG(canvas) (screen export)
148-[x] Implement exportSelectionToPNG (render selection bounds)
149-[x] Implement SVG export for basic shapes:
150- - rect/ellipse/line/arrow/text
151- - camera transform NOT included (exports in world coordinates)
152-[x] Export controls are in Toolbar (between zoom & history)
153-154-Tests:
155-[x] exported SVG parses and contains expected elements
156-157-(DoD):
158-- One-click export works in both web and desktop. ✓
159160================================================================================
16116. Milestone P: Desktop packaging (Tauri) *wb-P*
···29119. Milestone S: Quality polish (what makes it feel "real") *wb-S*
292================================================================================
293294-Goal: the UX crosses the "this is legit" threshold.
295-296-[x] BEM-ify CSS classes
297- - Dialog, Sheet, Toolbar, and StatusBar now use BEM naming
298- - Fixed hardcoded white backgrounds in Dialog/Sheet (now use CSS vars)
299- - All text colors use proper CSS variables for dark mode support
300-[x] Panning viewport
301- - Hold space + drag to pan the canvas
302- - Camera.pan integration in Canvas.svelte
303-[x] Keyboard affordances:
304- - Arrow keys nudge selected shapes (1px, 10px with Shift)
305- - Ctrl/Cmd+D duplicates selected shapes
306- - Ctrl/Cmd+] brings shapes forward
307- - Ctrl/Cmd+[ sends shapes backward
308-[x] Accessibility:
309- - Tool buttons have ARIA labels and aria-pressed states
310- - Zoom and Export menus have proper ARIA attributes (haspopup, expanded, role=menu)
311- - Visible focus states on all interactive elements
312- - Checkboxes in StatusBar have ARIA labels
313- - All controls keyboard-navigable with Tab
314-315-[ ] Editable Text
316-[ ] Snapping refinement
317- - Guideline positioning
318-[ ] Handles:
319- - resize handles for rect/ellipse
320- - rotate handle
321- - cursor affordances
322-323-(DoD):
324-- A user can comfortably draw and edit without surprises.
325326================================================================================
327References (URLs) *wb-refs*
···141. Milestone A: Repo skeleton + dev loop *wb-A*
15================================================================================
1617+Created a project monorepo/workspace.
000000000000000000000000001819================================================================================
202. Milestone B: Math + coordinate systems *wb-B*
···11615. Milestone O: Export (PNG/SVG) *wb-O*
117================================================================================
118119+PNG/SVG export flows now deliver one-click viewport or selection exports from
120+the Toolbar across web and desktop builds.
000000000000121122================================================================================
12316. Milestone P: Desktop packaging (Tauri) *wb-P*
···25319. Milestone S: Quality polish (what makes it feel "real") *wb-S*
254================================================================================
255256+Comprehensive UX polish adds BEM CSS, space-drag panning, richer keyboard
257+affordances, improved accessibility and styling, refined snapping, and handles
258+so drawing feels production-ready.
0000000000000000000000000000259260================================================================================
261References (URLs) *wb-refs*