AI-Powered Architectural Visualization Platform - Transform 2D floor plans into photorealistic 3D renders in seconds
π Live Demo β’ π Features β’ π οΈ Tech Stack β’ π Getting Started β’ ποΈ Architecture
Roomify is an AI-first design environment that helps architects, interior designers, and homeowners visualize, render, and transform their 2D floor plans into photorealistic 3D visualizations at the speed of thought.
Traditional architectural visualization suffers from significant bottlenecks:
- β±οΈ Time-Consuming - Manual 3D modeling takes days or weeks
- π° Expensive - Professional rendering software costs thousands annually
- π§ Technical Barrier - Requires expertise in Blender, SketchUp, or AutoCAD
- π Iterative Pain - Making design changes means starting over
Roomify leverages cutting-edge AI powered by Google Gemini 2.5 Flash to:
- β‘ Instant Rendering - Convert floor plans to 3D in seconds, not days
- π΅ Cost-Effective - No expensive software licenses required
- π― Accessible - Anyone can upload a floor plan and get professional results
- π Iterative-Friendly - Make changes instantly with zero overhead
- Instant 2D-to-3D Conversion - Upload a floor plan and receive a photorealistic render in seconds
- Smart Geometry Detection - AI accurately interprets walls, doors, windows, and architectural elements
- Furniture Mapping - Automatically transforms furniture icons into realistic 3D representations (beds, sofas, tables, kitchen fixtures)
- Before/After Comparison - Interactive slider to compare original floor plans with rendered visualizations
- Real-Time Processing - Live progress indicators during AI rendering
- Project Gallery - Browse and manage all your saved projects
- Secure Cloud Storage - Projects saved and synced via Puter.js cloud infrastructure
- User Authentication - Sign in to access personal projects across devices
- Public Sharing - Share renders with clients via public links
- Image Export - Download high-resolution renders (1024Γ1024 PNG)
- Project Persistence - All projects saved with source and rendered images
- Multi-Format Support - Supports JPG, PNG formats up to 10MB
| Technology | Purpose |
|---|---|
| React 19 | UI Framework |
| React Router 7 | Routing & Data Loading |
| TypeScript | Type Safety |
| Tailwind CSS 4 | Styling |
| Vite 7 | Build Tool |
| Lucide React | Icon Library |
| React Compare Slider | Before/After UI Component |
| Technology | Purpose |
|---|---|
| Puter.js | Cloud Backend (Auth, Storage, KV, Workers) |
| Google Gemini 2.5 Flash | AI Image Generation |
| Docker | Containerization |
| Puter Workers | Serverless API Handlers |
| Technology | Purpose |
|---|---|
| TypeScript | Language |
| ESLint | Code Linting |
| Git | Version Control |
| GitHub Actions | CI/CD Pipeline |
roomify/
βββ .dockerignore # Docker build exclusions
βββ .gitignore # Git ignore patterns
βββ Dockerfile # Docker container definition
βββ package.json # Dependencies & scripts
βββ package-lock.json # Locked dependency versions
βββ tsconfig.json # TypeScript configuration
βββ vite.config.ts # Vite bundler configuration
βββ react-router.config.ts # React Router configuration
βββ type.d.ts # Global TypeScript type definitions
β
βββ app/ # Main application directory
β βββ app.css # Global styles (Tailwind imports)
β βββ root.tsx # Root component & routing setup
β βββ routes.ts # Route definitions
β β
β βββ routes/ # Page components
β β βββ home.tsx # Landing/home page
β β βββ visualizer.$id.tsx # Project visualizer page
β β
β βββ components/ # Reusable UI components
β βββ Navbar.tsx # Navigation bar
β βββ Upload.tsx # File upload component
β βββ ui/ # Base UI components
β βββ Button.tsx # Button component
β
βββ lib/ # Business logic & utilities
β βββ ai.action.ts # AI generation logic (Gemini)
β βββ constants.ts # App constants & prompts
β βββ puter.action.ts # Puter.js auth & project actions
β βββ puter.hosting.ts # Image hosting utilities
β βββ puter.worker.js # Worker script for Puter
β βββ utils.ts # Helper functions
β
βββ public/ # Static assets
β βββ favicon.ico # Site favicon
β
βββ .vite/ # Vite cache directory
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β Home β β Visualizer β β Upload β β
β β Page β β Page β β Component β β
β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β
β β β β β
β ββββββββββββββββββββΌβββββββββββββββββββ β
β β β
β βββββββββΌββββββββ β
β β React Router β β
β β (v7) β β
β βββββββββ¬ββββββββ β
β β β
β ββββββββββββββββββββΌβββββββββββββββββββ β
β β β β β
β ββββββββΌβββββββ ββββββββΌβββββββ ββββββββΌβββββββ β
β β Puter.js β β AI Action β β Storage β β
β β Auth β β (Gemini) β β (Puter FS) β β
β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β
β β β β β
βββββββββββΌβββββββββββββββββ βΌββββββββββββββββ βΌβββββββββββββββββββββββββββββ
β β β
β βββββββββββββ΄ββββββββββββ β
β β Puter Cloud β β
β β βββββββββββββββββββ β β
β β β Authentication β β β
β β β (JWT/OAuth) β β β
β β ββββββββββ¬βββββββββ β β
β β β β β
β β ββββββββββΌβββββββββ β β
β β β Key-Value β β β
β β β Store (KV) β β β
β β ββββββββββ¬βββββββββ β β
β β β β β
β β ββββββββββΌβββββββββ β β
β β β File System β β β
β β β (Projects) β β β
β β ββββββββββ¬βββββββββ β β
β β β β β
β β ββββββββββΌβββββββββ β β
β β β Hosting β β β
β β β (Subdomains) β β β
β β βββββββββββββββββββ β β
β βββββββββββββββββββββββββ β
β β
β βββββββββββββββββββββββββ β
β β Google Gemini β β
β β 2.5 Flash (AI) β β
β β βββββββββββββββββββ β β
β β β Image-to-Image β β β
β β β Generation β β β
β β ββββββββββββββββββ β β
β βββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββ ββββ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β User β β Upload β β AI β
β uploads ββββββΆβ Floor ββββββΆβ Processingβ
β floor plan β β Plan β β (Gemini) β
ββββββββββββββββ ββββββββββββββββ ββββββββ¬ββββββββ
β
βΌ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Display β β Save β β Receive β
β Rendered βββββββ Project βββββββ Rendered β
β Image β β (Puter FS) β β Image β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
STEP-BY-STEP FLOW:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1. UPLOAD 2. PROCESS 3. GENERATE 4. SAVE
βββββββββββ βββββββββββββββ βββββββββββββ βββββββββββ
β Floor β β Convert to β β AI Model β β Store β
β Plan ββββββββΆβ Base64 βββββββΆβ Processes ββββββΆβ Images β
β (PNG/JPG) β β β Prompt β β to FS β
βββββββββββ βββββββββββββββ βββββββββββββ βββββββββββ
β
βΌ
5. DISPLAY
βββββββββββββ
β Rendered β
β Image β
β Shown in β
β UI β
βββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β React Router v7 β
β ββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
β β / (Home) β β /visualizer/:id β β
β β ββββββββββββββββ β β βββββββββββββββββββββββββ β β
β β β Navbar β β β β VisualizerPage β β β
β β ββββββββββββββββ β β β βββββββββββββββββββ β β β
β β ββββββββββββββββ β β β β RenderArea β β β β
β β β Upload ββββΌβββββββββΆβ β β (AI Output) β β β β
β β β Component β β β β βββββββββββββββββββ β β β
β β ββββββββββββββββ β β β βββββββββββββββββββ β β β
β β ββββββββββββββββ β β β β CompareSlider β β β β
β β β Projects β β β β β (Before/After) β β β β
β β β Grid β β β β βββββββββββββββββββ β β β
β β ββββββββββββββββ β β βββββββββββββββββββββββββ β β
β ββββββββββββββββββββββ βββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Ensure you have the following installed on your system:
| Requirement | Version | Notes |
|---|---|---|
| Node.js | 18.x or higher | LTS recommended |
| npm | 9.x or higher | Comes with Node.js |
| Docker | 20.x or higher | Optional (for containerized deployment) |
# Verify installations
node --version # v18.x.x or higher
npm --version # 9.x.x or higher
docker --version # Optionalgit clone https://github.com/aridepai17/ROOMIFY.git
cd roomifynpm installCreate a .env file in the project root with the following variables:
# Puter.js Configuration
# Get your worker URL from Puter dashboard or self-host a worker
VITE_PUTER_WORKER_URL=https://your-worker-domain.puter.dev
# Optional: Override default Puter.js origin (rarely needed)
# VITE_PUTER_ORIGIN=https://puter.devπ Note: The
VITE_PUTER_WORKER_URLis required for project persistence. Without it, projects will not be saved to the cloud.
npm run devThe application will be available at: http://localhost:5173
# Create production build
npm run build
# Start production server
npm start# Build the Docker image
docker build -t roomify:latest .
# Run the container
docker run -p 3000:3000 roomify:latestThe containerized application can be deployed to:
- AWS ECS / Elastic Beanstalk
- Google Cloud Run
- Azure Container Apps
- Digital Ocean App Platform
- Fly.io
- Railway
- Render
- Navigate to the home page - Visit
http://localhost:5173 - Upload a floor plan - Drag and drop or click to select a floor plan image (JPG/PNG, max 10MB)
- Wait for AI processing - Watch the live progress indicator
- View your render - See the photorealistic 3D visualization
- Compare results - Use the before/after slider to see the transformation
- Export or share - Download your render or share the link with clients
// Authentication
import { signIn, signOut, getCurrentUser } from './lib/puter.action';
// Sign in with Puter
await signIn();
const user = await getCurrentUser();
// Project Management
import { createProject, getProjects, getProjectById } from './lib/puter.action';
// Create a new project
const project = await createProject({
item: {
id: 'project-123',
name: 'My Residence',
sourceImage: 'data:image/png;base64,...',
renderedImage: 'data:image/png;base64,...',
timestamp: Date.now()
},
visibility: 'private' // or 'public'
});
// List all projects
const allProjects = await getProjects();
// Get a specific project
const singleProject = await getProjectById({ id: 'project-123' });
// AI Generation
import { generate3DView } from './lib/ai.action';
// Generate 3D render from floor plan
const result = await generate3DView({
sourceImage: 'data:image/png;base64,...'
});
// Result contains:
// result.renderedImage - The generated 3D render (base64)
// result.renderedPath - Path to stored render (if hosted)| Action | Parameters | Description |
|---|---|---|
signIn |
None | Initiates Puter.js OAuth sign-in flow |
signOut |
None | Signs out the current user |
getCurrentUser |
None | Returns current user object or null |
| Action | Parameters | Description |
|---|---|---|
createProject |
{ item: DesignItem, visibility: 'private' | 'public' } |
Saves a new project with source and rendered images |
getProjects |
None | Retrieves all projects for the authenticated user |
getProjectById |
{ id: string } |
Retrieves a specific project by ID |
| Action | Parameters | Description |
|---|---|---|
generate3DView |
{ sourceImage: string } |
Converts floor plan to 3D render using Gemini AI |
| Function | Parameters | Description |
|---|---|---|
getOrCreateHostingConfig |
None | Gets or creates a Puter hosting subdomain |
uploadImageToHosting |
{ hosting, url, projectId, label } |
Uploads an image to Puter hosting |
- OAuth Authentication - User identity managed via Puter.js secure OAuth flow
- JWT Token Management - Authentication tokens handled securely by Puter.js
- Client-Side Processing - Floor plan images processed locally before upload
- KV Store Encryption - Project metadata stored in Puter's encrypted key-value store
- File System Isolation - Each user's files isolated in their private directory
We welcome contributions! Please follow these steps:
Click the "Fork" button on GitHub or run:
git clone https://github.com/aridepai17/ROOMIFY.git
cd roomifygit checkout -b feature/your-feature-name
# or
git checkout -b fix/bug-description- Follow the existing code style and conventions
- Add tests for new functionality
- Update documentation as needed
git add .
git commit -m 'Add: Describe your feature or fix'git push origin feature/your-feature-name- Navigate to the original repository
- Click "New Pull Request"
- Fill in the template with details about your changes
- Submit and wait for review
π‘ Pro Tip: Please ensure all tests pass and the code lints cleanly before submitting.
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2024 Advaith R Pai
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- React Router - For the excellent routing and data loading framework
- Puter.js - For providing the amazing cloud backend infrastructure
- Google Gemini - For the powerful AI image generation
- Tailwind CSS - For the beautiful styling system
- Lucide - For the stunning icon library
Made with β€οΈ by aridepai17



