A collaborative 3D room designer with AI assistance and spatial intelligence.
Imagine a room, explore it in 3D, test furniture layouts, and make design decisions with more confidence.
- About ORBIS
- The challenge
- Application preview
- What you can do
- Design workflow
- Technology
- AWS architecture
- Project structure
- Getting started
- Deployment
- Impact and future potential
- Roadmap
- Team Mac And Code
Planning a room is easier when you can see your ideas, try different layouts, and check how furniture fits before moving anything. ORBIS is a browser-based interior design application that brings room modeling, AI-assisted edits, spatial analysis, collaboration, and product discovery into one workspace.
Design a room floor by floor, furnish it in an interactive 3D editor, and inspect it from perspective, isometric, floor-plan, or eye-level walkthrough views. ORBIS helps surface spatial problems such as collisions, blocked paths, and insufficient clearances. When you want a second opinion, request an AI-assisted change and review the proposal before it becomes an undoable, shareable scene edit.
ORBIS is designed for people exploring a room before they rearrange it: homeowners, renters, design students, and interior-design collaborators. It aims to make spatial planning more approachable; it is not a substitute for professional architectural plans or construction advice.
| Room-planning challenge | ORBIS approach |
|---|---|
| It is difficult to picture a layout before changing a room. | Explore a furnished room in 3D, floor-plan, and walkthrough views. |
| Furniture may not fit as expected. | Edit dimension-aware objects and validate room boundaries, collisions, and clearances. |
| A room can look good but be hard to move through. | Check door swings, access zones, walkable paths, and routes from entrances. |
| Iterating on a layout can take time. | Review layout insights and preview validated recovery suggestions before applying them. |
| Remote collaborators need to stay in sync. | Share projects live, see presence, and resolve stale edits without silent overwrites. |
| Shopping and planning often happen separately. | Build a retailer-grouped room list from linked products and continue to retailer sites. |
These are screenshots of the supplied ORBIS app. Personal email and name text visible in the original sign-in, dashboard, and collaboration screenshots has been redacted.
- Build multi-floor scenes with adjustable room dimensions, walls, doors, windows, and surface finishes.
- Place, move, rotate, resize, duplicate, recolour, and remove furniture using direct manipulation, snapping, gizmos, and the inspector.
- Browse room templates and a categorized asset library; import GLB/GLTF objects and edit supported meshes.
- Switch between perspective, isometric, orthographic, floor-plan, and first-person walkthrough views.
- Preview day, evening, and night lighting, including editable light fixtures.
- Describe a design change in natural language, such as adding furniture or adjusting an object's placement.
- Review the proposed change; ORBIS converts it to a normal scene action and checks it with the spatial engine before applying.
- Create an approximate editable room from a photo, sketch, or floor plan. Measured dimensions and inferred furniture may need correction.
- Use optional Gemini-backed features by providing a server-side
GEMINI_API_KEY. AI is not required for the rest of the editor.
- Detect furniture collisions, room-boundary issues, clearance constraints, blocked door swings, and inaccessible furniture.
- Analyze routes from room entrances with a walkability grid and A* pathfinding.
- See a layout score with explained components, then explore an optimizer's possible improvements.
- Preview layout-recovery candidates that are checked again before they are offered.
- Explore approximate sunlight analysis and a floor heat map. Vastu guidance is optional and advisory.
- Share a project link; guests can join a shared room without creating an account.
- Synchronize edits over WebSockets and show collaborator presence and selections.
- Guard edits with object versions. If another person changes an object first, ORBIS surfaces a conflict instead of silently overwriting their work.
- Reconnect after interruptions and explicitly reconcile offline edits.
- Let project owners choose whether link visitors can edit or view.
- Use dimension-aware 3D furniture and inspect product references where available.
- Build a room-based shopping list grouped by retailer; sample prices are estimates, not live offers.
- Follow product or search links to supported retailers. ORBIS does not process payments or provide a unified checkout.
- Export a multi-view landscape PDF with room views and a furniture schedule; share a project or report link where supported.
From the first room sketch to a shareable plan, the editor combines hands-on design with optional AI and spatial checks.
flowchart LR
A[Create room or import a plan] --> B[Arrange dimensioned furniture]
B --> C{How would you like to edit?}
C -->|Hands-on| D[Move, resize, customize]
C -->|AI-assisted| E[Describe a change]
E --> F[Review proposed edit]
D --> G[Run spatial checks]
F --> G
G --> H{Layout issues?}
H -->|Yes| I[Review insights and preview fixes]
I --> D
H -->|No| J[Collaborate, export PDF, or explore products]
| Layer | Key technologies | What they do |
|---|---|---|
| Web application | React 19, TypeScript, Vite | Interface, client-side editing, and build tooling |
| 3D editor | Three.js, React Three Fiber, Drei | Room rendering, model loading, camera controls, and interactions |
| Client state | Zustand | Workspace and scene state |
| API and collaboration | Node.js 22, Express, ws |
HTTP API, authentication, persistence access, and real-time sessions |
| Shared contracts | TypeScript, Zod | Validated scene schemas, typed actions, and protocol contracts |
| Spatial computation | RBush, SAT, A*, SunCalc | Collision checks, clearances, routes, recovery, scoring, and sunlight study |
| AI | Gemini API | Optional language-based editing and image/plan extraction |
| Reports | jsPDF | Browser-generated design reports |
| Cloud option | EC2, S3, DynamoDB, SQS, Lambda, CloudFront | Hosting, durable data, cleanup jobs, and edge delivery |
The AWS infrastructure is described in the CloudFormation template and AWS-backed persistence and cleanup have been tested with LocalStack. A deployment to a real AWS account has not yet been verified. In particular, real-account CloudFront WebSocket pass-through, SSM rollout, and CloudWatch log delivery still need validation.
The default deployment is free mode: one EC2 t3.micro instance in a public subnet, with Caddy HTTPS and an Auto Scaling group configured to replace a failed instance. CloudFront is optional in that mode. Standard mode uses CloudFront and an Application Load Balancer in front of one EC2 t4g.small in private subnets, with an optional NAT gateway. Durable content is stored in S3 and records in DynamoDB. The collaboration server is intentionally a single instance because live scene sessions are authoritative in its memory.
flowchart LR
User[User browser]
Edge[Amazon CloudFront<br/>standard / optional free mode]
TLS[Caddy HTTPS<br/>default free mode]
ALB[Application Load Balancer<br/>standard mode]
App[ORBIS Node.js app<br/>EC2 Auto Scaling group of one]
Bucket[Amazon S3<br/>scenes, assets, reports, releases]
Tables[Amazon DynamoDB<br/>projects, users, reset tokens]
Queue[Amazon SQS<br/>cleanup jobs + dead-letter queue]
Worker[AWS Lambda<br/>project-file cleanup]
Logs[Amazon CloudWatch Logs]
Ops[AWS Systems Manager<br/>access, parameters, rollout]
Network[VPC + gateway endpoints]
Nat[NAT gateway<br/>optional standard mode]
External[Gemini API / Google services]
User -->|HTTPS / WSS| Edge
User -->|HTTPS / WSS, default free mode| TLS
Edge -->|standard mode| ALB
Edge -->|optional free mode| App
TLS --> App
ALB --> App
App --> Bucket
App --> Tables
App --> Queue
Queue --> Worker
Worker -->|delete remaining project files| Bucket
App --> Logs
Worker --> Logs
Ops -.-> App
App --- Network
Network -->|S3 gateway endpoint| Bucket
Network -->|DynamoDB gateway endpoint| Tables
App -. outbound requests .-> Nat
Nat -.-> External
| Service | Role in the configured design |
|---|---|
| EC2 + Auto Scaling | Runs the bundled Node.js application and collaboration server. The group is configured for one instance and health-based replacement. |
| S3 | Stores scene files, thumbnails, uploads, generated reports, and deployment bundles. The template configures encryption, versioning, and public-access blocking. |
| DynamoDB | Stores project metadata, user records, and password-reset tokens in three on-demand tables. |
| SQS + Lambda | Handles asynchronous cleanup of leftover project files after project deletion; a dead-letter queue is configured. |
| CloudWatch Logs | Receives application and worker logs through configured log groups. Actual delivery in AWS is not yet verified. |
| CloudFront + ALB | Provides edge delivery and TLS in the standard layout; the ALB is only used in standard mode. |
| VPC + IAM + Systems Manager | Provides network isolation, scoped instance/worker permissions, secret parameters, and management/deployment access. |
Deployment note: Amazon ECS and ECR are not used. ORBIS runs on EC2. Standard mode includes a NAT option; without NAT, outbound Gemini, Google, and SSM access may be unavailable.
.
├── README.md
├── package.json
├── docs/
│ └── screenshots/
│ ├── orbis-logo.png
│ ├── login-redacted.png
│ ├── dashboard.png
│ ├── room-editor.png
│ ├── ai-assistant.png
│ ├── collaboration-conflict.png
│ └── photo-to-3d.png
└── apps/
├── .env.example
├── .gitignore
├── CLAUDE.md
├── README.md
├── package.json
├── package-lock.json
├── railway.json
├── vitest.config.ts
├── docs/
│ ├── architecture.md
│ ├── aws-deployment.md
│ ├── collaboration-demo.md
│ └── ux-research-planner5d.md
├── fixtures/
│ ├── README.md
│ ├── apartment-scene.json
│ ├── bedroom-scene.json
│ ├── studio-scene.json
│ ├── vastu-guidelines.json
│ └── templates/
│ ├── dining.json
│ ├── kitchen.json
│ ├── living.json
│ └── office.json
├── infra/
│ └── aws/
│ └── orbis.yaml
├── packages/
│ ├── shared/
│ │ ├── package.json
│ │ ├── tsconfig.json
│ │ └── src/
│ │ ├── actions.ts (+ tests)
│ │ ├── ai.ts
│ │ ├── commerce.ts (+ tests)
│ │ ├── contracts.test.ts
│ │ ├── guidelines.ts
│ │ ├── index.ts
│ │ ├── mesh.ts (+ tests)
│ │ ├── protocol.ts
│ │ ├── schemas.ts
│ │ └── underlay.test.ts
│ └── spatial-engine/
│ ├── package.json
│ ├── tsconfig.json
│ └── src/
│ ├── engine.test.ts
│ ├── geometry.ts
│ ├── guidelines.ts
│ ├── index.ts
│ ├── insights.test.ts
│ ├── pathways.ts
│ ├── recovery.ts
│ ├── score.ts
│ ├── sunlight.ts
│ └── validate.ts
├── scripts/
│ ├── collab-smoke.mjs
│ ├── dev.mjs
│ ├── share.mjs
│ ├── start.mjs
│ ├── tunnel.mjs
│ ├── aws/
│ │ ├── build-release.mjs
│ │ ├── deploy.mjs
│ │ ├── secret.mjs
│ │ └── test-local.mjs
│ └── products/
│ └── fetch-ikea.mts
├── server/
│ ├── package.json
│ ├── tsconfig.json
│ ├── scripts/
│ │ ├── generate-apartment.mts
│ │ ├── generate-templates.mts
│ │ ├── migrate-to-aws.ts
│ │ └── warm-bedroom.mts
│ └── src/
│ ├── ai.ts (+ tests)
│ ├── auth.ts (+ tests)
│ ├── index.ts
│ ├── sessions.ts (+ tests)
│ └── storage.ts
└── web/
├── index.html
├── package.json
├── postcss.config.js
├── tailwind.config.js
├── tsconfig.json
├── vite.config.ts
├── public/
│ ├── favicon.svg
│ ├── orbis-logo.png
│ └── models/
│ ├── LICENSE.md
│ └── 13 CC0 glTF model folders:
│ ArmChair_01, ClassicNightstand_01, GothicBed_01,
│ desk_lamp_arm_01, dining_chair_02, dining_table,
│ drawer_cabinet, metal_office_desk,
│ modern_coffee_table_01, modern_wooden_cabinet,
│ painted_wooden_cabinet, sofa_02,
│ wooden_bookshelf_worn
└── src/
├── App.tsx
├── index.css
├── main.tsx
├── components/
│ ├── FloorPlan.tsx
│ ├── SceneViewport.tsx
│ ├── ai/AskAi.tsx
│ ├── auth/AuthScreen.tsx
│ ├── brand/Logo.tsx
│ ├── home/
│ │ ├── Home.tsx
│ │ ├── Illustrations.tsx
│ │ └── UploadPlan.tsx
│ ├── panels/
│ │ ├── ExportPdfDialog.tsx
│ │ ├── InsightsPanel.tsx
│ │ ├── Inspector.tsx
│ │ ├── IssuesPanel.tsx
│ │ ├── LeftPanel.tsx
│ │ ├── Library.tsx
│ │ ├── Overlays.tsx
│ │ ├── PhotoTo3D.tsx
│ │ ├── RulesPanel.tsx
│ │ ├── SettingsDialog.tsx
│ │ ├── Shop.tsx
│ │ ├── Shortcuts.tsx
│ │ ├── TopBar.tsx
│ │ ├── WhatsAppIcon.tsx
│ │ └── fields.tsx
│ └── viewport/
│ ├── Annotations.tsx
│ ├── CutoutModel.tsx
│ ├── Environment.tsx
│ ├── FurnitureModel.tsx
│ ├── ImportedModel.tsx
│ ├── Interaction.tsx
│ ├── MeshEditor.tsx
│ ├── Placement.tsx
│ ├── RealisticModel.tsx
│ ├── Room.tsx
│ ├── Underlay.tsx
│ └── ViewportChrome.tsx
├── data/
│ ├── catalog.ts
│ ├── model-manifest.json
│ ├── products.ts
│ ├── real-products.json
│ └── scene.ts
├── lib/
│ ├── assets.ts
│ ├── auth.ts
│ ├── collab.ts
│ ├── cutout.ts
│ ├── designPdf.ts
│ ├── doors.ts
│ ├── floors.ts
│ ├── glb.ts
│ ├── openings.ts
│ ├── perf.ts
│ ├── placement.ts
│ ├── planGeometry.ts
│ ├── project.ts
│ ├── share.ts
│ ├── stress.ts
│ ├── thumbnails.tsx
│ ├── tools.ts
│ └── ui.ts
├── store/
│ └── workspace.ts
└── workers/
└── spatial.worker.ts
The tree lists every application source, package, configuration, test, script, fixture, and documentation file. Binary and paired glTF model assets are grouped by model folder to keep the map readable.
- Node.js 22.12+
- npm 10+
- A modern browser with WebGL enabled
From the repository root:
cd apps
npm ci
cp .env.example .env
npm run devOpen http://127.0.0.1:5173. The development script starts the web app and API/collaboration server. The API listens on port 3001 by default; local project data is kept in apps/server/data.
Gemini features are optional. Add your own GEMINI_API_KEY to apps/.env to enable them. Keep credentials private, server-side, and out of source control.
Run these commands from apps/:
npm test
npm run typecheck
npm run buildAWS deployment requires AWS CLI v2 credentials with permissions for the resources in the CloudFormation template. From apps/:
npm run aws:deployThe default is free mode in ap-south-1; standard mode can incur ongoing costs:
npm run aws:deploy -- --standardStore secrets with the provided helper (for example, npm run aws:secret -- GEMINI_API_KEY), not in the repository. Review the AWS deployment guide for costs, modes, migration, and limitations. AWS infrastructure is LocalStack-tested, but confirm the deployment and service behavior in your own AWS account.
The repository includes a Railway configuration. Set the service root to apps, configure a persistent volume mounted at /data, and set RB_DATA_DIR=/data. Add GEMINI_API_KEY only when enabling AI features.
ORBIS helps people explore room dimensions, layout options, and furniture fit before making changes or following a product link.
It connects to SDG 9 through digital design tools, SDG 11 through thoughtful space planning, and SDG 12 by encouraging informed furniture decisions. These are potential contributions, not measured impact claims.
Future opportunities include verified retailer integrations, affiliate commerce, premium AI tools, designer/client collaboration, and expanded professional report workflows. These are potential directions, not current checkout or revenue features.
- Multi-floor 3D room editing, furniture customization, and model import.
- Spatial validation, layout insights, sunlight analysis, and recovery suggestions.
- Gemini-assisted edits and approximate image/floor-plan reconstruction.
- Shareable rooms, WebSocket collaboration, conflict handling, and PDF export.
- Local storage and AWS storage/cleanup implementation tested with LocalStack.
- Real-account AWS deployment and end-to-end verification of CloudFront, SSM rollouts, and CloudWatch log delivery.
- Direct retailer inventory and checkout integrations.
- Expanded professional collaboration and reporting.
- Production deployment evaluation and operational monitoring.
| Name | Role |
|---|---|
| Meet Mangaonkar | Team Lead |
| Jeet Chavan | Team Member |
| Sanika Lobo | Team Member |
| Yash Masaye | Team Member |






