It is a simple, full-stack AirBnb clone where users can list their own place for renting out to other users. Other users can also book a particular place and pay using Stripe.
-
Title & thumbnail image
-
Overview (number of beds, bedrooms, rent per night)
-
A short description
-
A list of amenities
-
Location
-
Owner information
-
Google Maps overlay
-
Users can view other places and also book them for a given date interval. Users can also pay for the places using Stripe Checkout.
-
Users can also view their recent bookings in a table format.
- an email
- a secure password &
- a profile photo
- Find places on the map from the dropped red pins!
- Re-usable, DRY functional Portal React components used throughout the application used to action confirmations and error messages
- 🌆 Preview for uploaded image. This component is used many times in the application.
- 🗺 Automatically converting address to coordinates using Google Geocoding API.
- ➕ CRUD (Create - Read - Update - Delete) functionality for all places: any user can create a new place, owner can delete or update his/her place.
- 🔐 Authentication & Authorization: This app uses client's browser local storage for storing JWT tokens which expire after 1 hour. This means that application can auto-login & auto-logout the user, depending on when the token was issued.
- 💰 Integration with Stripe to accept payments, listen to payment confirmations on the back-end using a webhook and fulfilling orders upon confirmations.
- ⛔️ Error handling throughout the application, on the front-end as well as back-end to deal with corner cases.
- 🌎 Working with many API’s like Google Maps API, Geocoding API and SendGrid API to provide best user experience.
- 🎨 App has a responsive design, which looks good on any screen size. This is how it looks on an iPhone X.
- ✉️ Integration with SendGrid to send welcome emails to users when they sign up.
- React (Create-React-App) for state management & making API requests to the backend.
- CSS, Bootstrap 5 & Chakra UI for styling.
- NodeJS as a Javascript runtime
- Express as a framework to easily handle routes & middlewares.
- JWT tokens for authentication & authorization.
- MongoDB as a database.
- Google Maps API for map overlays.
- Google Geocoding API for generating coordinates from address input.
- Stripe checkout for handling payments.
- SendGrid for sending emails to customers.
- Firebase hosting for the front-end React application
- Heroku deployment for the back-end app.
If these images are not found, they are automatically replaced by the a black placeholder image
- Clone/download this repo.
- Make a
.env
file in./frontend
to store environmental variables for React app.REACT_APP_BACKEND_URL
: URL of the backendREACT_APP_GOOGLE_API_KEY
: Google Maps API key.
- Make a
config.env
file in./backend
to store environmental variables for backend app.MONGO_URI
: MongoDB URI connection.GOOGLE_API
: Google Maps API keyJWT_SECRET
STRIPE_SECRET_KEY
STRIPE_WEBHOOK_SECRET
FRONTEND_URL
: URL of the domain where frontend is being hosted.SENDGRID_API_KEY
- Run
npm i
in./backend
. - Run
npm i
in./frontend
. - Run
node app.js
in./backend
. - Run
npm start
in./frontend
folder.