66 Commits

Author SHA1 Message Date
m
6e498818a7 Add floor plan import design doc and project documentation 2026-02-07 16:39:40 +01:00
m
d53686ed65 Add floor plan image import via LLM vision APIs
New FloorplanImporter module that accepts floor plan images (architect
drawings, realtor photos, hand sketches) and uses Claude or OpenAI vision
APIs to convert them into the project's house JSON format for immediate
3D viewing.

Features:
- Drag-and-drop image upload with preview
- Multi-provider support (Claude Sonnet, GPT-4o)
- Canvas preprocessing (resize to 2048px max)
- Structured prompt engineering for accurate room extraction
- JSON validation and auto-repair of common LLM output issues
- Result preview showing rooms, doors, windows counts
- Inline JSON editor for manual corrections
- API key persistence in localStorage
- Integrated into sidebar File section as "Import Floor Plan" button
2026-02-07 16:38:14 +01:00
m
53999728c4 Add 3 example houses: small apartment, modern loft, large villa
- Small apartment (60sqm): 5 rooms, single floor compact city layout
- Modern loft (80sqm): 6 rooms, open-plan living with high ceilings
- Large villa (300sqm): 15 rooms across 2 floors with luxury finishes

Each house includes both structure definition and furnished design
with realistic furniture placement using the existing catalog.
2026-02-07 16:38:01 +01:00
m
8ac5b3f1f9 Add test suite with 132 unit tests across all modules
Covers DesignState (40 tests), HouseRenderer (19), InteractionManager (24),
ThemeManager (8), ExportManager (11), and CatalogPanel (30). Uses vitest
with THREE.js mocks for browser-free testing.
2026-02-07 16:34:36 +01:00
m
bc94d41f2b Add house customization UI with create/edit houses and room management
Adds HouseEditor panel to the right sidebar with:
- Edit house name and description
- Adjust building footprint dimensions
- Add/remove floors with ceiling height control
- Add/remove rooms with name, type, and dimensions
- Edit selected room: name, type, dimensions, position, flooring
- Save house as JSON template
- Create new empty house from scratch
2026-02-07 16:31:55 +01:00
m
4ca495209d Add screenshot showing IKEA catalog and custom furniture features 2026-02-07 12:59:53 +01:00
m
ceea42ac1d Add IKEA furniture catalog with 41 items and tabbed browse UI
- Create data/ikea-catalog.json with 41 curated IKEA items across 23 series
  (KALLAX, BILLY, MALM, PAX, HEMNES, LACK, etc.) with verified dimensions
- Add source tabs (All/Standard/IKEA) to catalog panel for filtering
- Add IKEA series filter bar when viewing IKEA items
- Add IKEA badge and series label on item cards
- Add mergeCatalog() to renderer for loading additional catalog files
- Add scripts/import-ikea-hf.js for importing from HuggingFace dataset
2026-02-07 12:58:52 +01:00
m
cf0fe586eb Add IKEA furniture data research report 2026-02-07 12:50:33 +01:00
m
53ee0fc1ec Add custom furniture creator form to catalog panel
Adds a "Create Custom Furniture" button at the bottom of the catalog
sidebar that expands into a form with fields for name, dimensions
(W/D/H in meters), color picker, and category selector. Submitting
creates a simple box-geometry catalog item and adds it to the
in-memory catalog for immediate placement into rooms.
2026-02-07 12:45:09 +01:00
m
d35b61648e Add screenshot of 3D house viewer with furniture 2026-02-07 12:40:43 +01:00
m
ab3e8fd03c Add research and interactive features design docs
- RESEARCH.md: Tech stack analysis (Three.js, SVG, hybrid approaches)
- DESIGN-interactive-features.md: Phase 2 design with 5 sprints, 14 tasks
2026-02-07 12:31:08 +01:00
m
32eaf70635 Add catalog sidebar panel with categories, search, and click-to-place 2026-02-07 12:27:11 +01:00
m
e10abf4cf3 Add preserveDrawingBuffer for reliable PNG screenshot export
Without this flag, toDataURL() on the WebGL canvas can return blank
in some browsers because the drawing buffer gets cleared.
2026-02-07 12:26:30 +01:00
m
4d4d5f947b Add JSON save/load and PNG screenshot export
- ExportManager with JSON export (toJSON + timestamp), import with
  file picker and validation, and high-res PNG screenshot capture
- Save/Load/Screenshot buttons in sidebar
- Ctrl+S keyboard shortcut for quick save
- Design load event updates info bar
2026-02-07 12:26:05 +01:00
m
08248c6cad Add theme system with 5 presets and selector UI
- 5 themes: Standard, Modern, Warm, Dark, Scandinavian
- ThemeManager mutates shared COLORS, clears cache, re-renders
- Updates scene background and light intensities per theme
- Theme selector buttons with color swatch in sidebar
- Exported COLORS from renderer.js for theme access
2026-02-07 12:24:58 +01:00
m
c0368f9f01 Add drag-to-move furniture with grid snapping and room bounds
- Pointer down on selected furniture starts drag mode
- OrbitControls disabled during drag
- Floor plane (Y=0) raycasting for cursor projection
- Drag offset preserves grab point (no cursor jump)
- Grid snapping at 0.25m intervals (configurable)
- Room bounds constraint keeps furniture inside walls
- On pointer up, commits new position to DesignState
- Wall-mounted items excluded from drag
2026-02-07 12:23:27 +01:00
m
d0d9deb03a Add InteractionManager with mode system, selection outline, keyboard shortcuts
- Mode system: view | select | move | rotate | place
- Click furniture to select with cyan wireframe outline
- Keyboard: R/Shift+R rotate, Delete remove, Escape deselect,
  Ctrl+Z undo, Ctrl+Shift+Z/Ctrl+Y redo
- Listens to DesignState changes to sync scene on undo/redo
- Wired into index.html with DesignState integration
- Added furnitureIndex to mesh userData for state lookups
2026-02-07 12:22:06 +01:00
m
36bc0aedd7 Add DesignState class with observable state and undo/redo
Lightweight state management for furniture editing. All mutations go
through named methods that snapshot state for undo, then notify
listeners. Supports move, rotate, add, remove, full design load,
and serialization via toJSON().
2026-02-07 12:20:03 +01:00
m
35300aa57a Add furniture click events, OrbitControls toggle, and floor change event
- Export COLORS for external module access (themes)
- Extend _onClick to detect furniture clicks before room clicks,
  dispatching 'furnitureclick' with catalog/room/mesh details
- Add setControlsEnabled(enabled) to toggle OrbitControls
- Dispatch 'floorchange' event from showFloor()
- Wire up furnitureclick in index.html to show item info
2026-02-07 12:19:19 +01:00
m
bf4eee8595 Improve 3D renderer: shadow camera, caching, error handling, labels
Renderer improvements:
- Configure shadow camera frustum to cover full house (was default -5..5)
- Add geometry and material caching to reduce GPU allocations
- Add proper disposal of Three.js objects on floor switch (fix memory leak)
- Add error handling for fetch failures with custom event dispatch
- Add room labels as sprites floating in each room
- Support wall-mounted furniture Y positioning via position.y
- Use cached highlight materials instead of mutating shared materials
2026-02-07 12:02:04 +01:00
m
a2b5211d30 Fix QA bugs: room overlap, door placement, wall-mounted furniture
Data fixes:
- Fix critical room overlap on upper floor: og-kinderzimmer1 and
  og-elternbad were overlapping by 2.5x2.0m. Adjusted room positions:
  kz1 length 4->3m, elternbad y 2->3, schlafzimmer y 5->6/length 5->4
- Extend upper hallway to full building depth (y=0..10) for proper
  door connectivity to all rooms
- Fix all upper hallway door positions for new layout
- Move eg-esszimmer door from south wall to west wall (correct shared
  boundary with hallway)
- Remove kitchen-to-living-room door (rooms not adjacent, 1m gap)
- Fix og-flur-d5 partial misalignment with gaestezimmer
- Add Y positions for wall-mounted furniture (mirror, wall cabinets,
  bathroom cabinets) so they render on walls instead of floor
- Adjust furniture positions in resized rooms (kz1, schlafzimmer)
2026-02-07 12:01:47 +01:00
m
68f6229ff8 Update todo t-5f3ed: completed 2026-02-07 11:43:03 +01:00
m
4d76d9525f Add furniture placement to 3D renderer
- loadCatalog() and loadDesign() methods on HouseRenderer
- Builds Three.js meshes from catalog part definitions (box/cylinder)
- Places furniture in room-local coordinates with rotation
- Furniture clears and re-renders on floor switch
- index.html loads catalog and design after house data
2026-02-07 11:42:58 +01:00
m
03c6eeb534 Update todo t-d75df: completed 2026-02-07 11:42:02 +01:00
m
cf6a7c84eb Update todo t-d75df: completed 2026-02-07 11:41:57 +01:00
m
4c4d398894 Update todo t-5f3ed: started 2026-02-07 11:41:40 +01:00
m
0e626b60f9 Update todo t-3c284: completed 2026-02-07 11:41:36 +01:00
m
c557148cbf Add room design specs with furniture layout for all 14 rooms
Covers both floors of the sample house with 71 furniture placements.
Each item has room-local position and rotation, referencing the
furniture catalog IDs. Layouts respect door/window clearances.
2026-02-07 11:41:31 +01:00
m
7afb2d5dfd Update todo t-d75df: started 2026-02-07 11:35:40 +01:00
m
a5cf7d45c0 Update todo t-d75df: assigned 2026-02-07 11:35:40 +01:00
m
1bbbd39a0b Update todo t-3c284: started 2026-02-07 11:35:36 +01:00
m
6007ad37ed Update todo t-3c284: assigned 2026-02-07 11:35:36 +01:00
m
0dc4fe97c5 Update todo t-5f3ed: pending 2026-02-07 11:35:28 +01:00
m
b9ca452382 Add todo: Test and verify 3D viewer works in browser - fix any rendering issues 2026-02-07 11:35:25 +01:00
m
d21788743c Add todo: Create room design specs - furniture layout per room with positions and rotations 2026-02-07 11:35:24 +01:00
m
a946b690a0 Add todo: Add furniture placement to 3D renderer - load catalog items, place in rooms per design specs 2026-02-07 11:35:23 +01:00
m
a09346b607 Update todo t-a5d22: completed 2026-02-07 11:32:26 +01:00
m
2b2cd0dcbd Update todo t-a5d22: started 2026-02-07 11:32:17 +01:00
m
91d9ae573a Update todo t-d8511: completed 2026-02-07 11:32:13 +01:00
m
0d3a4dddf5 Add Three.js 3D room renderer with interactive viewer
renderer.js: HouseRenderer class that loads house JSON and renders
rooms as 3D geometry - walls with door/window cutouts, floors with
material colors, translucent ceilings, orbit camera controls, room
click selection and highlighting.

index.html: Viewer page with sidebar showing floor switcher and
room list with areas. Click rooms in 3D or sidebar to focus camera.
Uses Three.js via CDN importmap (no build step needed).
2026-02-07 11:32:08 +01:00
m
46ed91307b Update todo t-fb166: completed 2026-02-07 11:30:02 +01:00
m
3fb125ae4c Update todo t-d8511: started 2026-02-07 11:29:53 +01:00
m
e44fc88859 Update todo t-acaa1: completed 2026-02-07 11:29:49 +01:00
m
94ff4f453e Add sample German house data JSON (~200sqm, 2 floors)
Einfamilienhaus with 14 rooms across ground floor and upper floor:
- EG: Flur, Wohnzimmer, Küche, Esszimmer, Arbeitszimmer, Gäste-WC, HWR
- OG: Flur, Schlafzimmer, Elternbad, 2x Kinderzimmer, Badezimmer, Gästezimmer

Each room includes position, dimensions, wall types, doors with
connections, and windows with sill heights. ~205sqm total.
2026-02-07 11:29:45 +01:00
m
a28ba0738f Update todo t-48589: completed 2026-02-07 11:29:17 +01:00
m
3eacd7fdd8 Update todo t-48589: completed 2026-02-07 11:28:30 +01:00
m
663da2b8c1 Add furniture catalog JSON with 38 items for German house interior
Covers all rooms (Wohnzimmer, Kueche, Schlafzimmer, Kinderzimmer,
Badezimmer, Arbeitszimmer, Flur, Gaeste-WC) with realistic metric
dimensions and Three.js-compatible 3D mesh definitions using box
and cylinder primitives.
2026-02-07 11:28:23 +01:00
m
ce4e8f99e7 Update todo t-48589: started 2026-02-07 11:25:13 +01:00
m
8192330e84 Update todo t-48589: assigned 2026-02-07 11:25:13 +01:00
m
b4b4990126 Update todo t-acaa1: started 2026-02-07 11:25:09 +01:00