# House/Apartment Plan Maker — Architecture & Project Plan ## Context Greenfield client-server application for creating and editing apartment/house floor plans. The repo is empty: `house-plan-maker/`. ## Core Requirements 1. **Apartment management** — CRUD apartments with metadata (name, address, total area). 2. **Room editor** — Each apartment contains rooms. Rooms have names, dimensions, and shapes (rectangular default, arbitrary polygon supported). 3. **Visual editor per room:** - Top-down 2D view (primary editing surface) — place walls, doors, windows, electrical, furniture - 4 side projection views (north/south/east/west walls) — show wall elevation with outlets, switches, furniture against that wall - 3D perspective view (read-only visualization) 4. **Electrical plan** — Place switches, outlets, junction boxes, light fixtures, cable routes on both top-down and projection views. Use standard IEC electrical symbols. 5. **Furniture placement** — Drag-and-drop furniture items (bed, desk, wardrobe, sofa, table, chair, shelf, etc.) with approximate dimensions. Visual must be recognizable silhouettes, not photorealistic. 6. **Persistence** — Save/load apartment data to server (REST API + database). 7. **Export** — Export full apartment plan or individual room views as PDF or PNG images. ## Assumed Tech Stack (confirm or override) - **Frontend:** React 19 + TypeScript + Vite - **2D Canvas:** Konva.js via react-konva (layered 2D shapes, drag-and-drop, zoom/pan) - **3D View:** Three.js via @react-three/fiber + @react-three/drei - **Backend:** Node.js + Fastify + Prisma ORM - **Database:** SQLite (dev), PostgreSQL (prod) - **PDF Export:** Client-side via jsPDF + html2canvas, or server-side Puppeteer - **Monorepo:** Turborepo with `apps/client`, `apps/server`, `packages/shared` ## Target Users - **End users:** Plan room layout and furniture placement visually. - **Electricians:** Use exported plans to wire the apartment — precise outlet/switch positions matter. - **Furniture makers:** Use exported dimensions to build custom furniture. ## Workflow 1. User creates an apartment → defines rooms (name, shape, dimensions) 2. User opens a room → edits in 2D top-down view (walls, electrical, furniture) 3. User switches to projection views to fine-tune wall-mounted items 4. User previews in 3D 5. User exports to PDF/PNG ## Deliverable Create a phased implementation plan covering: - Data model design (apartment → rooms → elements → electrical/furniture) - API endpoints - Frontend component architecture - 2D editor architecture (layers, tools, snapping, grid) - Projection view rendering strategy - 3D view approach - Export pipeline - Testing strategy Break into 4 implementation phases with clear milestones. ## Additional Ideas to Evaluate - Snap-to-grid and snap-to-wall for precise placement - Measurement annotations (auto-display distances between elements) - Room templates (bedroom, kitchen, bathroom presets) - Undo/redo stack - Layer toggling (show/hide electrical, furniture, dimensions independently) - Copy room layout between apartments - Cable length calculator based on placed electrical elements - Light coverage visualization (radius circles around light fixtures) - Collision detection for furniture overlap - Scale ruler always visible on canvas --- ## Quick Version Greenfield app: `house-plan-maker/`. Client-server for creating apartment floor plans. Stack: React 19 + TS + Vite | react-konva (2D) | react-three-fiber (3D) | Fastify + Prisma + SQLite | Turborepo monorepo. Features: Apartment → Rooms (rectangular or polygon). Per-room visual editor: 2D top-down + 4 wall projections + 3D preview. Place electrical (IEC symbols: outlets, switches, lights, cables) and furniture (recognizable silhouettes). Save/load via REST API. Export PDF/PNG. Create a phased implementation plan (4 phases) with data model, API, component architecture, 2D editor design, and export pipeline. --- ## Implementation Phases ### Phase 0 — Architecture & Planning - **Model:** Opus - **ECC:** `/plan`, `architect` agent - Finalize tech stack, data model, API design, component tree, editor architecture ### Phase 1 — Project Scaffold + Data Model + API - **Model:** Sonnet - **ECC:** `feature-dev`, `api-design`, `tdd-guide` - Monorepo setup, Prisma schema, REST endpoints, basic CRUD UI ### Phase 2 — 2D Visual Editor (Top-Down + Projections) - **Model:** Sonnet - **ECC:** `feature-dev`, `frontend-design`, `code-reviewer` - Canvas editor with layers, tools, grid, snapping, drag-and-drop - Wall projection views ### Phase 3 — 3D View + Electrical & Furniture Libraries - **Model:** Sonnet - **ECC:** `feature-dev`, `frontend-patterns` - Three.js scene from room data, electrical symbol library, furniture silhouette library ### Phase 4 — Export + Polish - **Model:** Sonnet - **ECC:** `feature-dev`, `e2e-runner` - PDF/PNG export, undo/redo, measurement annotations, layer toggling, final QA