Project Info
Inspiration
As kids, our rooms have never just felt perfect. We take every opportunity to remodel our room, striving to make it that much better. This extends to adulthood, where people spend so much time picking furniture and decorations. This process is often time-consuming and labor-intensive, as it requires actually moving around heavy furniture and even returning new items. We decided to build SuperSpace, a way of being able to visualize your room online and quickly edit it to finally get the perfect room you always wanted!
What it does
The process begins with taking a full scan of a room. iOS apps (as iPhones often have Lidar sensors) can instruct users on taking scans and guide them through scanning all parts of a room. The 3D files from an app can be uploaded to the Superspace platform, where users can explore a virtual version of the room, add new objects generated from text descriptions, and experiment with moving existing items around.
How we built it
We use a Three.js-based frontend to render PLY files, with keyboard controls designed to emulate games like Minecraft. The segmentation of those 3D objects is done by a custom, heuristic-based Python algorithm to separate objects from floors, walls, and ceilings. The generation of new 3D objects is done by ML models deployed to Modal, and the frontend directly loads PLY files generated by the backend.
Challenges we ran into
Many of the technical components of our project were difficult to iron out: we experimented with designing our own 3D mesh generation from video files, tried multiple formats for storing and modifying 3D objects (such as Gaussian splats and point clouds), and focused on the speed of various components to support a user-facing app.
Accomplishments we're proud of
Learning so much about 3D object representations and the computational and ML techniques to visualize and modify them. Creating a user friendly and fun app with a technical focus but also an intuitive interface
SuperSpace
The Ultimate Floor Plan BOOM TreeHacks 2026
Youtube Demo: https://youtu.be/1rtGnGzZgrw
Setup
uv venv
source .venv/bin/activate
uv sync
Connect Modal and create the shared volume once:
modal token new
modal volume create floorplan-volume
Generate 3D assets
Shap-E:
uv run modal run scripts/generate_3d_asset/modal_shape_e_generate.py \
--prompt "Green Office Chair" \
--guidance-scale 18 \
--karras-steps 96 \
--output-path "generated_assets/green_office_chair.ply"
Point-E:
uv run modal run scripts/generate_3d_asset/modal_point_e_generate.py \
--prompt "Green Office Chair" \
--karras-steps 96 \
--grid-size 96 \
--output-path "generated_assets/green_office_chair_point_e.ply"
Generate and place asset into a scene
One command (generate with Shap-E + place in scene):
uv run python scripts/generate_and_place_shap_e_asset.py \
examples/Bathroom_Mesh.ply \
"Green Office Chair" \
--output examples/Bathroom_With_Green_Office_Chair.ply
Higher quality generation:
uv run python scripts/generate_and_place_shap_e_asset.py \
examples/Bathroom_Mesh.ply \
"Green Office Chair" \
--guidance-scale 20 \
--karras-steps 128 \
--output examples/Bathroom_With_Green_Office_Chair_hq.ply
Optional placement tuning:
uv run python scripts/generate_and_place_shap_e_asset.py \
examples/Bathroom_Mesh.ply \
"Green Office Chair" \
--target-footprint-ratio 0.08 \
--offset-x 0.1 \
--offset-z -0.1 \
--y-lift 0.0 \
--output examples/Bathroom_With_Green_Office_Chair_tuned.ply
If you already have an asset PLY and only want placement:
uv run python scripts/place_asset_in_scene.py \
examples/Bathroom_Mesh.ply \
generated_assets/green_office_chair.ply \
--output examples/Bathroom_With_Green_Office_Chair.ply
Render and interact with the world
Start the viewer:
cd viewer
npm install
npm run dev:world -- --file ../examples/Bathroom_With_Green_Office_Chair.ply
Render other files the same way:
npm run dev:world -- --file ../examples/Bathroom_Mesh.ply
npm run dev:world -- --file ../examples/Living_Room_Mesh.glb
Viewer controls:
- Click
Click to enter: pointer lock + FPS mode. W/A/S/D: moveE/C: up / downShift: sprintF: pick up asset at screen centerG: place held asset in free 3D space (in front of camera)+: open scale dialog for held asset- Scaling now accepts decimals (for example,
0.5scales to half size). - Scale dialog: enter a positive multiplier (
0.5= half size,2= 2x), thenEnter/Apply - Scale dialog:
Esc/Cancelcloses without changing scale Esc: unlock cursor- Top-right gizmo: world
X/Y/Z+ plane orientation (XY/XZ/YZ)
New backend (backend/)
Simple FastAPI service that wraps the existing Modal Shap-E generator script:
POST /generate-plywith JSON body:prompt(string, required)guidance_scale(float, optional, default18)karras_steps(int, optional, default96)
GET /health
Run locally:
cd backend
uv pip install -r requirements.txt
uvicorn app:app --reload --port 8000
Deploy on Modal:
cd backend
modal serve modal_app.py
New frontend (frontend/)
Vite web app that reuses the existing viewer/main.js engine and adds:
- startup-style side panel UI
- local browser persistence of uploaded room
.plyfiles (IndexedDB) - prompt input that calls backend
POST /generate-ply - generated mesh insertion into the live viewer as movable assets
Run:
cd frontend
npm install
npm run dev
Analysis
View
Metric
- 12
- 10
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- FastAPIIn code
- HTMLIn code
- JavaScriptIn code
- PythonIn code
5 of 5 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
133 KB
Source files
23
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
Dude346/The_Ultimate_FloorPlan
41 files · 171.1 MB · @ 154a91f
Structure
Interface
4 files · 10%Screens, components and styles rendered to the user.
Application logic
19 files · 46%Domain rules, services and shared utilities.
+1 more
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- JavaScript50%
- Python30%
- CSS10%
- HTML5%
- Markdown3%
- Shell2%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
backend/requirements.txt
pypi · 4- fastapi
- modal
- pydantic
- uvicorn
pyproject.toml
pypi · 3- modal
- open3d
- opencv-python
frontend/package.json
npm · 2- three
- +1 more
viewer/package.json
npm · 2- three
- +1 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.