# 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
