Skip to content

Repository files navigation

OpenReal

An open-source real estate marketplace. List properties, search and filter listings, and browse rich detail pages with photo galleries.

Built with Ruby on Rails 8 (API) and React + Vite + TypeScript (SPA), backed by PostgreSQL.

🌐 Live demo: https://openreal.getprixite.com

Features

  • 🔎 Search & filter listings by location, price range, bedrooms, bathrooms, property type and listing type (sale/rent)
  • 🏡 Property detail pages with an image gallery and full specs
  • 📝 List a property — authenticated users create, edit and delete their own listings
  • 🖼️ Multi-image uploads per listing (Active Storage)
  • ❤️ Favorites — save listings to your account
  • 👤 Accounts — JWT-based signup / login
  • 📊 My listings dashboard

Tech stack

Layer Technology
Backend Ruby on Rails 8 (API-only), Puma, Active Storage
Frontend React 18, Vite, TypeScript, Tailwind CSS, React Router, TanStack Query
Database PostgreSQL 16
Auth JWT (bcrypt has_secure_password)
Tests RSpec (request specs)
Linting RuboCop + Brakeman (Ruby), ESLint + Prettier (TS)
CI/CD GitHub Actions → Docker Compose on server
Deploy Docker Compose, nginx, systemd, Let's Encrypt

Repository layout

openreal/
├── backend/                 # Rails 8 API-only app
├── frontend/                # React + Vite + TS SPA
├── deploy/                  # nginx + systemd templates for the server
├── docker-compose.yml       # local development
├── docker-compose.prod.yml  # production (db + backend + web)
└── .github/workflows/       # CI (lint+test) and CD (deploy)

Local development

Requires Docker + Docker Compose.

git clone https://github.com/umairwaheed/openreal.git
cd openreal
cp .env.example .env          # adjust secrets if you like
docker compose up --build

Seed sample data:

docker compose exec backend bin/rails db:seed

Running without Docker

Backend:

cd backend && bundle install && bin/rails db:setup && bin/rails s

Frontend:

cd frontend && npm install && npm run dev

API overview

Method Path Auth Description
POST /api/auth/signup Create account
POST /api/auth/login Log in, returns JWT
GET /api/auth/me Current user
GET /api/properties Search / filter listings
GET /api/properties/:id Listing detail
POST /api/properties Create listing
PATCH /api/properties/:id Update own listing
DELETE /api/properties/:id Delete own listing
POST /api/properties/:id/images Attach images
GET /api/me/properties My listings
GET /api/favorites My favorites
POST /api/properties/:id/favorite Save to favorites
DELETE /api/properties/:id/favorite Remove from favorites

Linting & tests

# Backend
cd backend && bundle exec rubocop && bundle exec brakeman && bundle exec rspec

# Frontend
cd frontend && npm run lint && npm run format:check && npm run build

License

MIT

About

Open-source real estate marketplace built with Ruby on Rails (API) and React (Vite + TypeScript).

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages