Discover unique stays, list properties, manage bookings, process secure payments, and build unforgettable travel experiences through a modern Airbnb-inspired platform.
Airbnb Clone is a production-inspired full-stack accommodation marketplace that allows users to discover unique properties, list accommodations, manage bookings, maintain wishlists, leave reviews, and securely complete reservations through an integrated payment workflow.
Built using React, Express.js, Prisma ORM, PostgreSQL, and Stripe, the platform demonstrates how modern marketplace applications manage complex relationships between guests, hosts, listings, reservations, payments, notifications, and media assets.
The application combines a responsive user experience with a secure backend architecture, emphasizing authentication, relational database design, cloud-based image management, and production-ready API security.
Whether you're exploring destinations, hosting a property, or studying full-stack marketplace architecture, Airbnb Clone provides a realistic implementation of a modern accommodation booking platform.
The platform provides a secure authentication system for both guests and hosts.
Features include:
- Email & Password Registration
- Secure Login
- JWT Authentication
- Password Hashing using bcryptjs
- Protected Routes
- Persistent User Sessions
Hosts can create and manage accommodation listings.
Each listing includes:
- Property Title
- Description
- Property Type
- Location
- Guest Capacity
- Bedrooms
- Beds
- Bathrooms
- Pricing
- Cleaning Fee
- Discount Percentage
Each property supports a rich set of amenities, allowing guests to quickly compare accommodations.
Examples include:
- Wi-Fi
- Swimming Pool
- Kitchen
- Dedicated Workspace
- Air Conditioning
- Heating
- Gym
- And more...
Guests can reserve available properties through a streamlined booking workflow.
Booking features include:
- Check-in & Check-out Selection
- Booking Confirmation
- Reservation Status
- Total Price Calculation
- Trip Management
Users can save their favorite properties for future trips.
Highlights include:
- Add to Wishlist
- Remove from Wishlist
- Instant UI Updates
- Optimized State Synchronization
- No Page Refresh Required
Guests can share their experiences by submitting reviews.
Review functionality includes:
- Ratings
- Written Reviews
- Listing Feedback
- Community Trust
The platform integrates Stripe to securely process reservation payments.
Payment workflow includes:
- Secure Checkout
- Payment Processing
- Booking Confirmation
- Transaction Recording
Property images are uploaded and managed using Cloudinary.
Benefits include:
- Secure Media Storage
- Fast Image Delivery
- Optimized Image Management
- Cloud-Based Hosting
The platform automatically generates notifications throughout the booking lifecycle.
Notifications include:
- Reservation Updates
- Host Contact Information
- Property Details
- Booking Activity
The interface is optimized across devices to provide a consistent booking experience.
Supported layouts include:
- Desktop
- Laptop
- Tablet
- Mobile
This Airbnb Clone was built to explore how large-scale marketplace applications are architected using modern full-stack technologies.
Rather than recreating the visual appearance alone, the project focuses on implementing the underlying business logic that powers real-world accommodation platforms, including secure authentication, relational data modeling, bookings, payments, media uploads, notifications, and responsive user experiences.
Throughout development, the project explored practical concepts such as:
- Full-stack marketplace architecture
- Prisma ORM
- PostgreSQL relational modeling
- JWT authentication
- Stripe payment processing
- Cloudinary media management
- Secure Express APIs
- Responsive React applications
- Production-ready backend security
- Cloud deployment
The result is a scalable accommodation marketplace that demonstrates both frontend craftsmanship and backend engineering.
| Technology | Purpose |
|---|---|
| React 19 | User Interface |
| React Router DOM v7 | Client-Side Routing |
| Tailwind CSS v3 | Styling |
| Lucide React | Icons |
| Vite | Development & Build Tool |
| Technology | Purpose |
|---|---|
| Node.js | Runtime Environment |
| Express.js 5 | REST API |
| Prisma ORM | Database Access |
| PostgreSQL | Relational Database |
| JWT | Authentication |
| bcryptjs | Password Security |
| Helmet | Security Headers |
| CORS | Cross-Origin Requests |
| Express Rate Limit | API Protection |
| Technology | Purpose |
|---|---|
| Cloudinary | Property Image Storage |
| Stripe | Payment Processing |
| Neon | PostgreSQL Database |
- Git
- GitHub
- VS Code
- npm
The application follows a modern client-server architecture where the React frontend communicates with a secure Express.js API backed by Prisma ORM and PostgreSQL.
┌────────────────────┐
│ User │
└─────────┬──────────┘
│
▼
React + Vite Frontend
│
REST API Requests
│
▼
Express.js Server
│
┌───────────────────┼───────────────────┐
▼ ▼ ▼
JWT Authentication Prisma ORM Security Layer
│ │ │
└───────────────┬───┴───────────────────┘
▼
PostgreSQL (Neon)
│
┌───────────────┼────────────────┐
▼ ▼ ▼
Cloudinary Stripe API Notifications
User
│
▼
Authentication
(Login / Register)
│
▼
Browse Listings
│
▼
Listing Details
│
├──────────────┐
▼ ▼
Wishlist Reviews
│ │
└──────┬───────┘
▼
Book Property
│
▼
Stripe Payment
│
▼
Booking Confirmed
│
▼
Notification Created
airbnb-clone/
│
├── server/
│ ├── config/
│ ├── middleware/
│ ├── prisma/
│ │ ├── schema.prisma
│ │ └── migrations/
│ ├── routes/
│ ├── db.js
│ ├── index.js
│ └── package.json
│
└── client/
├── src/
│ ├── components/
│ ├── context/
│ ├── pages/
│ ├── App.jsx
│ ├── main.jsx
│ └── index.css
│
├── tailwind.config.js
├── package.json
└── index.html
| Sign In | Create Account |
|---|---|
![]() |
![]() |
| Home Page |
|---|
![]() |
| Property Details |
|---|
![]() |
| Wishlist | Trips |
|---|---|
![]() |
![]() |
| Become a Host |
|---|
![]() |
| Hosting Dashboard |
|---|
![]() |
| Profile Settings |
|---|
![]() |
Airbnb Clone
https://airbnb-clone-fullstack-web.vercel.app
https://airbnb-clone-backend-em8f.onrender.com
| Service | Platform |
|---|---|
| Frontend | Vercel |
| Backend | Render |
| Database | Neon PostgreSQL |
| Image Storage | Cloudinary |
| Payments | Stripe |
Next: Installation, environment variables, project setup, authentication flow, booking & payment workflow, API endpoints, deployment, and application lifecycle.
Follow the steps below to run Airbnb Clone on your local machine.
Before getting started, make sure the following tools are installed:
- Node.js (v20 or later recommended)
- npm
- PostgreSQL
- Git
- Cloudinary Account
- Stripe Account
Verify your installation:
node -v
npm -v
git --version
psql --versiongit clone https://github.com/<your-github-username>/airbnb-clone.gitNavigate to the project directory:
cd airbnb-cloneThe project consists of a React frontend and an Express backend.
cd server
npm installOpen another terminal.
cd client
npm installThe application uses environment variables to securely configure the database, authentication, cloud storage, payment gateway, and client-server communication.
Create a .env file inside the server directory.
server/
│
├── .env
├── index.js
└── ...
Example configuration:
PORT=5000
NODE_ENV=development
CLIENT_URL=http://localhost:5173
DATABASE_URL=postgresql://username:password@localhost:5432/airbnb_clone
JWT_SECRET=your_jwt_secret
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
STRIPE_SECRET_KEY=your_stripe_secret_key| Variable | Description |
|---|---|
| PORT | Express server port |
| NODE_ENV | Development or Production mode |
| CLIENT_URL | Allowed frontend origin(s) for CORS |
| DATABASE_URL | PostgreSQL database connection string |
| JWT_SECRET | Secret used to sign JWT tokens |
| CLOUDINARY_CLOUD_NAME | Cloudinary cloud name |
| CLOUDINARY_API_KEY | Cloudinary API key |
| CLOUDINARY_API_SECRET | Cloudinary API secret |
| STRIPE_SECRET_KEY | Stripe secret key |
Create a .env file inside the client directory.
client/
│
├── .env
└── src/
Local development:
VITE_API_URL=http://localhost:5000Production:
VITE_API_URL=https://airbnb-clone-backend-em8f.onrender.com| Variable | Description |
|---|---|
| VITE_API_URL | Backend API base URL |
Important: Never commit
.envfiles or secret credentials to version control.
Ensure your PostgreSQL database is running.
Inside the server directory:
npx prisma migrate devGenerate the Prisma Client:
npx prisma generatecd server
npm run devor
npm startBackend runs on:
http://localhost:5000
Open another terminal.
cd client
npm run devFrontend runs on:
http://localhost:5173
The following diagram illustrates the overall user journey.
Launch Application
│
▼
Authentication
(Login / Register)
│
▼
Browse Listings
│
▼
Listing Details
│
▼
Wishlist / Booking
│
▼
Stripe Checkout
│
▼
Booking Confirmation
│
▼
Notification Generated
Authentication is powered by JWT (JSON Web Tokens) together with bcryptjs password hashing.
- User creates an account.
- Password is hashed using bcryptjs.
- User record is stored in PostgreSQL.
- Registration completes successfully.
- User submits email and password.
- Credentials are validated.
- JWT token is generated.
- Token is returned to the client.
- Token is stored locally.
- Protected pages become accessible.
Authenticated requests include:
Authorization: Bearer <JWT_TOKEN>The authentication middleware verifies every incoming request before allowing access.
Protected functionality includes:
- Creating listings
- Editing listings
- Booking properties
- Wishlist management
- Reviews
- Notifications
- Profile management
Register
│
▼
Password Hashing
│
▼
PostgreSQL
│
▼
Login
│
▼
JWT Generated
│
▼
Local Storage
│
▼
Protected API Requests
The platform supports two primary user roles.
Guests can:
- Browse listings
- Search accommodations
- View listing details
- Save wishlists
- Book properties
- Complete Stripe payments
- Manage trips
- Leave reviews
Hosts can:
- Create listings
- Upload images
- Edit properties
- Manage accommodations
- Receive bookings
- View reservations
Booking follows a secure multi-step process.
Choose Listing
│
▼
Select Dates
│
▼
Calculate Total Cost
│
▼
Stripe Payment
│
▼
Booking Created
│
▼
Notification Generated
Stripe securely processes reservation payments.
Guest
│
▼
Booking Request
│
▼
Express API
│
▼
Stripe Payment Intent
│
▼
Payment Processing
│
▼
Booking Confirmation
│
▼
Database Update
Property images are managed through Cloudinary.
Host Uploads Images
│
▼
Cloudinary
│
▼
Secure Image URL
│
▼
Prisma Database
│
▼
Property Listing
Wishlist interactions are optimized for a smooth user experience.
Click Heart Icon
│
▼
PATCH Request
│
▼
Update Wishlist
│
▼
React Context Updated
│
▼
UI Refresh (No Reload)
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register |
Register a new account |
| POST | /api/auth/login |
Authenticate user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/users/profile |
Retrieve current user profile |
| PATCH | /api/users/:id/wishlist |
Update user wishlist |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/listings |
Retrieve listings |
| GET | /api/listings/:id |
Retrieve listing details |
| POST | /api/listings |
Create listing |
| PUT | /api/listings/:id |
Update listing |
| DELETE | /api/listings/:id |
Delete listing |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/bookings |
Create booking |
| GET | /api/bookings |
Retrieve bookings |
| DELETE | /api/bookings/:id |
Cancel booking |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/reviews |
Create review |
| GET | /api/reviews/:listingId |
Retrieve listing reviews |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/notifications |
Retrieve notifications |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/payments/create-payment-intent (or equivalent implementation) |
Initialize Stripe payment |
The payment endpoint name may differ depending on your implementation.
React Components
│
▼
REST API Requests
│
▼
Express Server
│
▼
Authentication Middleware
│
▼
Prisma ORM
│
▼
PostgreSQL (Neon)
│
▼
Updated Response
│
▼
React State
│
▼
UI Re-render
Airbnb Clone is fully deployed using a cloud-native architecture.
Platform
- Vercel
Live URL
https://airbnb-clone-fullstack-web.vercel.app
Platform
- Render
API URL
https://airbnb-clone-backend-em8f.onrender.com
Development
- Local PostgreSQL
Production
- Neon PostgreSQL
| Service | Purpose |
|---|---|
| Cloudinary | Property image storage |
| Stripe | Secure payment processing |
Users
│
▼
Vercel Frontend
│
▼
Render Express API
│
┌──────────────┼──────────────┐
▼ ▼ ▼
Prisma ORM Cloudinary Stripe
│
▼
Neon PostgreSQL
Several production-oriented security measures are incorporated throughout the application.
- JWT-secured authentication
- Password hashing using bcryptjs
- Helmet security headers
- Environment-aware rate limiting
- Protected API routes
- Configurable CORS policies
- Prisma parameterized queries
- Secure Cloudinary uploads
- Stripe-hosted payment processing
- Cascade deletion for relational integrity
- Environment variable isolation
The application supports all major modern browsers.
- ✅ Google Chrome
- ✅ Microsoft Edge
- ✅ Mozilla Firefox
- ✅ Brave
- ✅ Opera
- ✅ Safari
Airbnb Clone is fully responsive and optimized for:
- Desktop
- Laptop
- Tablet
- Mobile
Tailwind CSS enables adaptive layouts that provide a consistent experience across a wide range of devices.
Next: UI highlights, marketplace experience, security architecture, technical implementation, future roadmap, contributing, license, acknowledgements, and project footer.
Airbnb Clone is designed to provide a clean, modern, and intuitive booking experience inspired by contemporary accommodation marketplaces. The interface focuses on usability, responsive layouts, and seamless navigation while maintaining a lightweight and performant frontend.
The application provides a familiar browsing experience where users can quickly discover accommodations through organized listing cards and intuitive navigation.
Highlights include:
- Clean landing page
- Responsive property grid
- Modern navigation bar
- Attractive listing cards
- Consistent spacing and typography
- Optimized visual hierarchy
Finding accommodations is simple and intuitive.
Each property card presents essential information including:
- Property image
- Property title
- Location
- Price per night
- Property type
- Guest capacity
- Wishlist status
This enables users to compare listings without opening every property page.
Each listing includes a comprehensive overview designed to help guests make informed booking decisions.
Information includes:
- Image gallery
- Property description
- Amenities
- Pricing breakdown
- Host information
- Reviews
- Reservation details
The wishlist system is designed to feel fast and responsive.
Features include:
- One-click wishlist toggle
- Instant UI updates
- Persistent saved properties
- No page refresh required
The application updates local state immediately after successful requests, creating a smooth user experience.
Hosts can manage their accommodations through a dedicated listing management workflow.
Supported actions include:
- Create listings
- Edit listings
- Upload images
- Update pricing
- Manage amenities
- View bookings
The booking interface guides users through a straightforward reservation process.
Workflow includes:
- Selecting travel dates
- Viewing pricing
- Confirming reservation
- Secure payment
- Booking confirmation
The platform is fully responsive across multiple devices.
Supported layouts include:
- 💻 Desktop
- 🖥️ Laptop
- 📱 Mobile
- 📟 Tablet
Tailwind CSS enables adaptive layouts that provide a consistent experience across different screen sizes.
Several implementation decisions improve responsiveness and scalability.
Performance optimizations include:
- React component architecture
- Vite-powered development
- Optimized React Context updates
- Prisma query optimization
- Indexed PostgreSQL lookups
- Cloudinary image delivery
- Lazy route rendering
- Efficient REST API communication
Airbnb Clone simulates the lifecycle of a modern accommodation marketplace.
Register / Login
│
▼
Browse Listings
│
▼
Open Property
│
▼
Save Wishlist
│
▼
Book Property
│
▼
Stripe Payment
│
▼
Booking Confirmed
│
▼
View Upcoming Trips
Register
│
▼
Create Listing
│
▼
Upload Images
│
▼
Publish Listing
│
▼
Receive Bookings
│
▼
Manage Reservations
After every successful reservation:
Booking Created
│
▼
Notification Generated
│
▼
Guest Dashboard
│
▼
Host Contact Available
This allows guests to quickly access booking-related information and host contact details.
Security has been integrated throughout the application to reflect production-oriented backend practices.
Authentication is secured using:
- JWT Authentication
- bcryptjs password hashing
- Protected API routes
- Secure authorization middleware
The Express server includes multiple layers of protection.
Implemented measures include:
- Helmet security headers
- Removal of Express fingerprint (
x-powered-by) - Configurable CORS policies
- Trusted proxy configuration
Environment-aware rate limiting helps protect the application from abuse.
- Higher request threshold for local development
- Strict request limits
- Improved protection against automated abuse
- Reduced risk of denial-of-service attacks
Stripe handles all payment processing.
Benefits include:
- Secure checkout
- Trusted payment gateway
- PCI-compliant payment handling
- Transaction verification
Sensitive payment information is never processed directly by the application.
Prisma and PostgreSQL enforce strong relational consistency.
Highlights include:
- Foreign key relationships
- Cascade deletion
- Indexed queries
- Unique constraints
- Type-safe ORM operations
Property images are uploaded through Cloudinary.
Benefits include:
- Secure uploads
- Optimized image delivery
- Cloud-hosted storage
- Efficient media management
This project combines multiple modern web development technologies into a production-style marketplace.
- React 19
- React Router DOM v7
- Tailwind CSS
- Context API
- Responsive layouts
- Component-driven architecture
- Express.js 5
- Prisma ORM
- JWT Authentication
- bcryptjs
- Helmet
- Rate Limiting
- REST APIs
- PostgreSQL
- Prisma ORM
- Relational schema design
- Indexed queries
- Cascade deletion
- Strong data integrity
- Neon PostgreSQL
- Cloudinary
- Stripe
- Render
- Vercel
Airbnb Clone was developed as a practical project to explore the architecture behind modern accommodation marketplaces.
Key concepts explored include:
- Full-stack marketplace development
- REST API design
- JWT authentication
- Secure password storage
- Prisma ORM
- Relational database modeling
- Stripe payment integration
- Cloudinary image management
- Responsive UI development
- Production-ready backend security
- Cloud deployment workflows
This project demonstrates how multiple technologies work together to deliver a scalable and secure booking platform.
While the application already offers a complete booking experience, several enhancements are planned for future versions.
- Interactive maps
- Location-based search
- Advanced property filters
- Availability calendar
- Real-time messaging
- Booking cancellation workflow
- Refund management
- Host analytics dashboard
- Guest verification
- Multi-language support
- Dark mode
- Push notifications
- Email notifications
- Saved searches
- Property recommendations
- AI-powered search
- Recently viewed listings
- Admin dashboard
- Docker support
- Automated CI/CD pipeline
Contributions, ideas, and improvements are always welcome.
If you'd like to contribute:
Create your own copy of the project.
git clone https://github.com/your-username/airbnb-clone.gitgit checkout -b feature/amazing-featureImplement your feature or bug fix.
git commit -m "Add amazing feature"git push origin feature/amazing-featureSubmit a Pull Request describing your changes.
Bug reports and feature suggestions are always appreciated.
Helpful reports include:
- Steps to reproduce
- Expected behavior
- Actual behavior
- Browser information
- Screenshots (if applicable)
If you enjoyed exploring this project, consider giving it a ⭐ on GitHub.
Your support helps others discover the project and encourages future improvements.
This project is released under the MIT License.
You are free to:
- Use
- Modify
- Learn from
- Share
- Build upon
while preserving the original license.
Note: If you haven't added a
LICENSEfile to the repository yet, GitHub provides an MIT License template that you can add in just a few clicks.
A sincere thank you to the open-source community and the technologies that made this project possible.
Special thanks to:
- React
- Vite
- Express.js
- Prisma ORM
- PostgreSQL
- Neon
- Tailwind CSS
- Cloudinary
- Stripe
- JWT
- bcryptjs
- Helmet
- Render
- Vercel
- Git
- GitHub
Their tools, documentation, and communities made building this project possible.
Current Status: Active
Airbnb Clone is fully functional, deployed, and continuously maintained.
This project was built to better understand how production-grade marketplace platforms are designed and engineered—from authentication and secure APIs to relational databases, payments, media management, and scalable cloud deployments.
As I continue learning, I plan to extend the platform with additional marketplace features, improved user experiences, and more advanced search and booking capabilities.
Building Airbnb Clone has been an excellent opportunity to explore the complete lifecycle of a modern full-stack marketplace application.
From designing relational database models with Prisma to integrating Stripe payments, Cloudinary media uploads, and secure Express APIs, every feature contributed to a deeper understanding of scalable software architecture and real-world application development.
This project represents another important milestone in my journey toward building secure, production-ready web applications.
````









