En webbaserad interaktiv whiteboard byggd med React + TypeScript och Canvas API.
Tech Stack:
- Frontend: React 18 + TypeScript
- Styling: Tailwind CSS
- State: Zustand
- Build: Vite
- Canvas: HTML5 Canvas API
Verktyg som ska implementeras:
- Penna (olika storlekar/färger)
- Raderare
- Former (rektangel, cirkel, linje, pil)
- Text
- Sticky notes
- Bilduppladdning
- Layers/lager
npm install # Installera dependencies
npm run dev # Starta utvecklingsserver (localhost:5173)
npm run build # Bygg för produktion
npm run typecheck # Kör TypeScript-kontroll
npm run lint # Kör lintersrc/
├── components/
│ ├── Canvas/ # Huvudcanvas och rendering
│ ├── Toolbar/ # Verktygspaletten
│ ├── LayerPanel/ # Lagerhantering
│ └── PropertyPanel/ # Egenskaper för valt objekt
├── hooks/
│ ├── useCanvas.ts # Canvas-logik
│ ├── useTool.ts # Verktygshantering
│ └── useHistory.ts # Undo/redo
├── stores/
│ └── whiteboard.ts # Zustand store för state
├── types/
│ └── whiteboard.ts # TypeScript-typer
└── utils/
├── canvas.ts # Canvas-hjälpfunktioner
└── geometry.ts # Geometriberäkningar
- Använd en offscreen canvas för bättre prestanda
- Rendera endast vid ändringar (dirty flag pattern)
- Separera objekt i lager för flexibilitet
- Zustand för global state (verktyg, objekt, lager)
- Immutable updates för undo/redo-funktionalitet
- Debounce för historia-sparning
Varje element på whiteboarden är ett objekt med:
interface WhiteboardObject {
id: string;
type: 'path' | 'shape' | 'text' | 'sticky' | 'image';
position: { x: number; y: number };
size?: { width: number; height: number };
style: ObjectStyle;
layerId: string;
locked: boolean;
}- Planera först - Använd
/planeller beskriv vad du ska göra - En feature i taget - Håll PRs små och fokuserade
- Testa lokalt - Kör
npm run devoch verifiera i webbläsaren - Typecheck - Kör alltid
npm run typecheckinnan commit
Teamet har tillgång till specialiserade agenter:
- canvas-specialist - För canvas-rendering och prestanda
- ux-designer - För UI/UX-beslut och användbarhet
- state-architect - För state management och dataflöden
Projektet är förberett för:
- Realtidssamarbete (WebSocket/Socket.io)
- Export till PNG/SVG/PDF
- Mallar och komponenter
- Touch/pen-stöd för tablets
- Canvas-koordinater: (0,0) är övre vänstra hörnet
- Använd
requestAnimationFrameför smooth rendering - Testa med stora antal objekt för prestandakontroll