Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

49 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Roomify

GitHub License GitHub Stars GitHub Forks Node Version React Version Docker Support

AI-Powered Architectural Visualization Platform - Transform 2D floor plans into photorealistic 3D renders in seconds

App Screenshot

πŸš€ Live Demo β€’ πŸ“– Features β€’ πŸ› οΈ Tech Stack β€’ πŸš€ Getting Started β€’ πŸ—οΈ Architecture


What is Roomify?

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.

The Problem:

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

The Solution:

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

Upload Floor Plan

AI Visualization


Key Features

πŸ€– AI-Powered Rendering

  • 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)

🎨 User Experience

  • 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

Before/After Comparison

☁️ Cloud Integration

  • 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

πŸ’Ύ Data Management

  • 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 Stack

Frontend

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

Backend & External Services

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

Development Tools

Technology Purpose
TypeScript Language
ESLint Code Linting
Git Version Control
GitHub Actions CI/CD Pipeline

Project Structure

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

Architecture

High-Level Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                   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     β”‚ β”‚       β”‚
          β”‚     β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚       β”‚
          β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β”‚
          β”‚                                     β”‚
          └────────────────────────────────  β”€β”€β”€β”˜

Data Flow Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   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        β”‚
                                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Component Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        React Router v7                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚      / (Home)      β”‚         β”‚   /visualizer/:id           β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚         β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚  β”‚
β”‚  β”‚  β”‚   Navbar     β”‚  β”‚         β”‚  β”‚     VisualizerPage    β”‚ β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚         β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚         β”‚  β”‚  β”‚  RenderArea     β”‚  β”‚ β”‚  β”‚
β”‚  β”‚  β”‚   Upload     │──┼────────▢│  β”‚  β”‚  (AI Output)    β”‚ β”‚ β”‚  β”‚
β”‚  β”‚  β”‚  Component   β”‚  β”‚         β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚         β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚ β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚         β”‚  β”‚  β”‚  CompareSlider  β”‚  β”‚ β”‚  β”‚
β”‚  β”‚  β”‚   Projects   β”‚  β”‚         β”‚  β”‚  β”‚  (Before/After) β”‚  β”‚ β”‚  β”‚
β”‚  β”‚  β”‚    Grid      β”‚  β”‚         β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚         β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Installation & Getting Started

Prerequisites

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  # Optional

Clone the Repository

git clone https://github.com/aridepai17/ROOMIFY.git
cd roomify

Install Dependencies

npm install

Environment Configuration

Create 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_URL is required for project persistence. Without it, projects will not be saved to the cloud.

Start Development Server

npm run dev

The application will be available at: http://localhost:5173

Build for Production

# Create production build
npm run build

# Start production server
npm start

Docker Deployment

# Build the Docker image
docker build -t roomify:latest .

# Run the container
docker run -p 3000:3000 roomify:latest

The containerized application can be deployed to:

  • AWS ECS / Elastic Beanstalk
  • Google Cloud Run
  • Azure Container Apps
  • Digital Ocean App Platform
  • Fly.io
  • Railway
  • Render

Usage Guide

For End Users

  1. Navigate to the home page - Visit http://localhost:5173
  2. Upload a floor plan - Drag and drop or click to select a floor plan image (JPG/PNG, max 10MB)
  3. Wait for AI processing - Watch the live progress indicator
  4. View your render - See the photorealistic 3D visualization
  5. Compare results - Use the before/after slider to see the transformation
  6. Export or share - Download your render or share the link with clients

For Developers

// 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)

API Reference

Authentication Actions

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

Project Actions

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

AI Actions

Action Parameters Description
generate3DView { sourceImage: string } Converts floor plan to 3D render using Gemini AI

Hosting Utilities

Function Parameters Description
getOrCreateHostingConfig None Gets or creates a Puter hosting subdomain
uploadImageToHosting { hosting, url, projectId, label } Uploads an image to Puter hosting

Security Features

  • 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

Contributing

We welcome contributions! Please follow these steps:

1. Fork the Repository

Click the "Fork" button on GitHub or run:

git clone https://github.com/aridepai17/ROOMIFY.git
cd roomify

2. Create a Feature Branch

git checkout -b feature/your-feature-name
# or
git checkout -b fix/bug-description

3. Make Your Changes

  • Follow the existing code style and conventions
  • Add tests for new functionality
  • Update documentation as needed

4. Commit Your Changes

git add .
git commit -m 'Add: Describe your feature or fix'

5. Push to GitHub

git push origin feature/your-feature-name

6. Open a Pull Request

  1. Navigate to the original repository
  2. Click "New Pull Request"
  3. Fill in the template with details about your changes
  4. Submit and wait for review

πŸ’‘ Pro Tip: Please ensure all tests pass and the code lints cleanly before submitting.


License

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.

Acknowledgments

  • 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

🌐 Website β€’ πŸ› Report Issues β€’ ⭐ Star on GitHub

About

Transform 2D floor plans into photorealistic 3D renders in seconds

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages