Turn distressed rooms into listing-ready interiors using AI-powered virtual staging.
AI Room Renovator is an MVP web application designed for US realtors who need to virtually stage empty or outdated rooms for property listings. Upload a room photo, choose a design style, and receive a photorealistic renovation — all while preserving the original wall geometry via ControlNet.
- Before / After Slider — interactive comparison using
img-comparison-slider - Multiple Interior Styles — Modern, Industrial, Minimalist (admin-managed)
- AI Generation — Replicate + ControlNet (geometry-preserving)
- Admin Panel — full CMS via AdminJS (users, styles, content, analytics)
- No Signup Required — instant upload-and-generate workflow
- Responsive — mobile-first layout with Tailwind CSS
prop2ai/
├── server.js # Express server, API routes, boot sequence
├── models/index.js # Sequelize models (SQLite) — User, Style, etc.
├── admin/index.js # AdminJS configuration & resources
├── services/v0Client.js # v0 API integration for design assistance
├── public/
│ ├── index.html # Single-page frontend (Tailwind CDN)
│ └── script.js # Client-side logic & API interactions
├── .env # Environment variables (not committed)
└── data.db # SQLite database (auto-created, not committed)
| Layer | Technology |
|---|---|
| Backend | Node.js 20+, Express 4, ESM |
| Database | SQLite via Sequelize 6 |
| Admin | AdminJS 7 + @adminjs/sequelize |
| AI Engine | Replicate API (ControlNet models) |
| Frontend | Vanilla JS, Tailwind CSS (CDN) |
| Slider | img-comparison-slider 8 |
| Design | v0 Model API (design assistance) |
- Node.js ≥ 20
- A Replicate API token
git clone https://github.com/offflinerpsy/prop2ai.git
cd prop2ai
npm installCreate a .env file in the project root:
REPLICATE_API_TOKEN=r8_your_token_here
V0_API_KEY=v0_your_key_here # optional — for design-assist endpoint
PORT=3000 # optional — defaults to 3000
SESSION_SECRET=change-me
ADMIN_COOKIE_SECRET=change-menode server.js- App: http://localhost:3000
- Admin Panel: http://localhost:3000/admin
Default login:
admin@prop2ai.com/admin123
| Method | Path | Description |
|---|---|---|
| GET | /health |
Health check |
| GET | /api/styles |
List active interior styles |
| GET | /api/blocks |
List visible content blocks |
| GET | /api/menu |
Navigation menu links |
| GET | /api/settings/public |
Non-secret site settings |
| GET | /api/stats |
Dashboard statistics |
| POST | /api/restage |
Generate renovated room image |
| POST | /api/design-assist |
Get v0 design suggestions |
curl -X POST http://localhost:3000/api/restage \
-F "image=@room.jpg" \
-F "user_style=Modern" \
-F "structure=hough"Response: { "outputUrl": "https://replicate.delivery/..." }
AdminJS provides a full CRUD interface at /admin:
| Section | Description |
|---|---|
| Users & Access | Admin & client accounts, role management |
| AI Styles | Prompts, negative prompts, preview images, ordering |
| Content Blocks | Hero, trust cards, CTA blocks with icons & config |
| Navigation | Header menu links with visibility control |
| Settings | API keys, branding, site configuration |
| Generations | Full AI generation log (status, timing, errors) |
- Navigate to
/admin→ AI Styles → Create new - Fill in: name, slug, prompt, negative prompt, preview image URL
- Set
isActive: trueand order - The style card appears on the frontend automatically
SQLite stored at data.db (auto-created on first run). No external DB required.
Models: User, Style, SiteBlock, Setting, Generation, MenuLink, ReplicateModel.
- Never commit
.envordata.db - Change the default admin password after first login
- API tokens can be managed from Admin → Settings → API Keys
- Session secrets should be changed in production
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit with conventional messages:
feat: add style preview - Push and open a Pull Request
MIT