├── .gitignore ├── README.md ├── package.json └── public ├── .eslintrc.json ├── .gitignore ├── README.md ├── next.config.js ├── package.json ├── postcss.config.js ├── public ├── empty-profile.png ├── home.mp4 ├── home2.mp4 ├── home3.mp4 ├── overview1.webp ├── overview2.webp └── overview3.webp ├── src ├── app │ ├── favicon.ico │ ├── globals.css │ ├── layout.jsx │ ├── listing │ │ └── [listing] │ │ │ ├── components │ │ │ ├── ListingAmenties.jsx │ │ │ ├── ListingMap.jsx │ │ │ ├── ListingPhotos.jsx │ │ │ └── TripScheduler.jsx │ │ │ ├── loading.jsx │ │ │ └── page.jsx │ ├── loading.jsx │ ├── my-listings │ │ ├── loading.jsx │ │ └── page.jsx │ ├── new-listing │ │ ├── loading.jsx │ │ └── page.jsx │ ├── page.jsx │ ├── search │ │ ├── components │ │ │ └── SearchMap.jsx │ │ ├── loading.jsx │ │ └── page.jsx │ ├── trips │ │ └── page.jsx │ └── wishlist │ │ └── page.jsx ├── components │ ├── SearchScheduler │ │ ├── SearchAddress.jsx │ │ ├── SearchBeds.jsx │ │ └── SearchDates.jsx │ ├── auth │ │ └── AuthModal.jsx │ ├── common │ │ ├── Calender.jsx │ │ ├── ContextMenu.jsx │ │ ├── FormInput.jsx │ │ ├── ImageUpload.jsx │ │ ├── NavigationEvents.jsx │ │ ├── Pin.jsx │ │ ├── Schedule.jsx │ │ ├── ScheduleBar.jsx │ │ └── Spinner.jsx │ ├── footer │ │ ├── CompactFooter.jsx │ │ └── Footer.jsx │ ├── listingCard.jsx │ ├── navbar │ │ └── Navbar.jsx │ ├── process │ │ ├── Description.jsx │ │ ├── FinishSetup.jsx │ │ ├── FloorPlan.jsx │ │ ├── ListingCreated.jsx │ │ ├── ListingPlaceType.jsx │ │ ├── ListingTypeSelector.jsx │ │ ├── Overview.jsx │ │ ├── Photos.jsx │ │ ├── PlaceDetails.jsx │ │ ├── PlaceLocation.jsx │ │ ├── Price.jsx │ │ ├── ProcessAmeneties.jsx │ │ ├── Review.jsx │ │ ├── StepOneStarter.jsx │ │ ├── StepThreeStarter.jsx │ │ ├── StepTwoStarter.jsx │ │ ├── Title.jsx │ │ └── geocoder-control.jsx │ └── views │ │ ├── ListView.jsx │ │ ├── MapView.jsx │ │ └── ViewSwitchBadge.jsx ├── data │ ├── Amenities.jsx │ └── listingTypes.jsx ├── hooks │ └── useClickOutside.jsx ├── lib │ ├── auth.js │ ├── http.js │ └── lisitng.js ├── store │ ├── slices │ │ ├── AuthSlice.js │ │ ├── ListingsSlice.js │ │ ├── ProcessSlice.js │ │ └── SearchSlice.js │ └── store.js └── svg │ ├── airbnb-logo-short.jsx │ ├── airbnb-logo.jsx │ ├── ameneties │ ├── ac.jsx │ ├── bbq.jsx │ ├── beach.jsx │ ├── carbon-monoxide-alarm.jsx │ ├── fire-ext.jsx │ ├── fire-pit.jsx │ ├── first-aid.jsx │ ├── gym.jsx │ ├── hot-tub.jsx │ ├── indoor-firplace.jsx │ ├── kitchen.jsx │ ├── lake.jsx │ ├── outdoor-dining.jsx │ ├── outdoor-shower.jsx │ ├── paid-parking.jsx │ ├── parking.jsx │ ├── patio.jsx │ ├── piano.jsx │ ├── pool-table.jsx │ ├── pool.jsx │ ├── ski.jsx │ ├── smoke-alarm.jsx │ ├── tv.jsx │ ├── washing-machine.jsx │ ├── wifi.jsx │ └── workplace.jsx │ ├── daimond.jsx │ └── lisitngTypes │ ├── barn.jsx │ ├── bed-breakfast.jsx │ ├── boat.jsx │ ├── cabin.jsx │ ├── campervan.jsx │ ├── casa-particular.jsx │ ├── castle.jsx │ ├── cave.jsx │ ├── container.jsx │ ├── cycladic-home.jsx │ ├── dammuso.jsx │ ├── dome.jsx │ ├── earth-home.jsx │ ├── farm.jsx │ ├── flat.jsx │ ├── guest-house.jsx │ ├── hotel.jsx │ ├── house.jsx │ ├── houseboat.jsx │ ├── kezhan.jsx │ ├── minsu.jsx │ ├── riad.jsx │ ├── room.jsx │ ├── ryokan.jsx │ ├── shared-room.jsx │ ├── shepherd-hut.jsx │ ├── tent.jsx │ ├── tiny-home.jsx │ ├── tower.jsx │ ├── tree-house.jsx │ ├── trullo.jsx │ ├── windmill.jsx │ └── yurt.jsx ├── tailwind.config.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | package-lock.json -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # nextjs-airbnb-clone 3 | 4 | # App Screenshots 5 | 6 | ## Home Page List View 7 | 8 | ![Airbnb-Clone](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/fbbaf229-c068-40c4-a65f-6cf5d32fc32a) 9 | 10 | ## Home Page Map View 11 | 12 | ![uisearc](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/1c2feba3-52b5-4554-86cb-9719c104f09a) 13 | 14 | ## Login Modal 15 | 16 | ![login](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/ec3d0747-806e-4bb0-91dd-6b4e36594119) 17 | 18 | ## Scheduler UI 19 | 20 | ![Scheduler](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/1be02fc9-43e3-4236-b28d-263032857e4f) 21 | 22 | ## Search Listings 23 | 24 | ![search](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/b1d22787-df9a-4012-b5f6-5d5e09124eb4) 25 | 26 | ## Add New Listings 27 | 28 | ![process1](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/42b32543-5675-4572-8af8-a09aa87adca5) 29 | 30 | ![process2](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/6f261118-c03e-4203-b4ba-7b3b2ae7ccd3) 31 | 32 | ![process3](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/547b7a96-95de-43e0-bd79-19ce6d11eb44) 33 | 34 | ![process4](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/16b79d34-2f1b-484b-bd2d-ac46604c21a6) 35 | 36 | ![process5](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/47bade4d-7372-4ccd-9bb5-31525db15780) 37 | 38 | ![process6](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/675ca549-fbe0-498b-bc4d-5b1f113bd15c) 39 | 40 | ![process7](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/7db9384e-d3dd-4a2a-9100-a3e0d0d1c38f) 41 | 42 | ![process8](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/2f8cc2ad-161e-4095-9dd0-a64c9bd27d88) 43 | 44 | ## My Listings 45 | 46 | ![mylistings](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/e69a8034-cc5a-4dd3-be54-982acd21313c) 47 | 48 | ## Wishlists 49 | 50 | ![wishlists](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/6ac53b38-3587-4755-8c5a-a84aee15e613) 51 | 52 | ## Listing Info Page 53 | 54 | ![listing](https://github.com/koolkishan/nextjs-airbnb-clone/assets/30298996/d1f3b96b-55d2-4ebb-8944-bf35238c3f0c) 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "airbnb-clone", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "npm-run-all -p start:frontend start:backend", 8 | "start:frontend": "cross-env PORT=5000 npm --prefix public run dev", 9 | "start:admin": "npm --prefix admin-ui start", 10 | "start:backend": "npm --prefix server start", 11 | "postinstall": "npm i --prefix public && npm i --prefix admin-ui && npm i --prefix server" 12 | }, 13 | "devDependencies": { 14 | "cross-env": "^7.0.3", 15 | "npm-run-all": "^4.1.5" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/koolkishan/nextjs-airbnb-clone.git" 20 | }, 21 | "author": "", 22 | "license": "ISC", 23 | "bugs": { 24 | "url": "https://github.com/koolkishan/nextjs-airbnb-clone/issues" 25 | }, 26 | "homepage": "https://github.com/koolkishan/nextjs-airbnb-clone#readme", 27 | "dependencies": { 28 | "qs": "^6.11.2" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /public/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /public/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | -------------------------------------------------------------------------------- /public/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | # or 12 | pnpm dev 13 | ``` 14 | 15 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 16 | 17 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. 18 | 19 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. 20 | 21 | ## Learn More 22 | 23 | To learn more about Next.js, take a look at the following resources: 24 | 25 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 26 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 27 | 28 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 29 | 30 | ## Deploy on Vercel 31 | 32 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 33 | 34 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 35 | -------------------------------------------------------------------------------- /public/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: false, 4 | env: { 5 | NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME: "dctahvizk", 6 | }, 7 | images: { 8 | domains: ["res.cloudinary.com"], 9 | }, 10 | }; 11 | 12 | module.exports = nextConfig; 13 | -------------------------------------------------------------------------------- /public/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "public", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@mapbox/mapbox-gl-geocoder": "^5.0.1", 13 | "@types/mapbox__mapbox-gl-geocoder": "^4.7.3", 14 | "@types/node": "20.3.1", 15 | "@types/react": "18.2.12", 16 | "@types/react-date-range": "^1.4.4", 17 | "@types/react-dom": "18.2.5", 18 | "ag-grid-community": "^30.0.3", 19 | "ag-grid-react": "^30.0.4", 20 | "autoprefixer": "10.4.14", 21 | "axios": "^1.4.0", 22 | "eslint": "8.43.0", 23 | "eslint-config-next": "13.4.6", 24 | "mapbox-gl": "^2.15.0", 25 | "next": "13.4.6", 26 | "next-cloudinary": "^4.13.0", 27 | "postcss": "8.4.24", 28 | "react": "18.2.0", 29 | "react-confetti": "^6.1.0", 30 | "react-date-range": "^1.4.0", 31 | "react-datepicker": "^4.15.0", 32 | "react-dom": "18.2.0", 33 | "react-icons": "^4.10.1", 34 | "react-map-gl": "^7.1.0", 35 | "tailwindcss": "3.3.2", 36 | "typescript": "5.1.3", 37 | "zustand": "^4.3.8" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /public/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/public/empty-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/empty-profile.png -------------------------------------------------------------------------------- /public/public/home.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/home.mp4 -------------------------------------------------------------------------------- /public/public/home2.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/home2.mp4 -------------------------------------------------------------------------------- /public/public/home3.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/home3.mp4 -------------------------------------------------------------------------------- /public/public/overview1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/overview1.webp -------------------------------------------------------------------------------- /public/public/overview2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/overview2.webp -------------------------------------------------------------------------------- /public/public/overview3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/public/overview3.webp -------------------------------------------------------------------------------- /public/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/app/favicon.ico -------------------------------------------------------------------------------- /public/src/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | /* Hide scrollbar for Chrome, Safari and Opera */ 6 | .no-scrollbar::-webkit-scrollbar { 7 | display: none; 8 | } 9 | 10 | /* Hide scrollbar for IE, Edge and Firefox */ 11 | .no-scrollbar { 12 | -ms-overflow-style: none; /* IE and Edge */ 13 | scrollbar-width: none; /* Firefox */ 14 | } 15 | 16 | .control-panel { 17 | position: absolute; 18 | top: 0; 19 | right: 0; 20 | max-width: 320px; 21 | background: #fff; 22 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); 23 | padding: 12px 24px; 24 | margin: 20px; 25 | font-size: 13px; 26 | line-height: 2; 27 | color: #6b6b76; 28 | text-transform: uppercase; 29 | outline: none; 30 | } 31 | 32 | .mapboxgl-popup-content { 33 | width: 18rem !important; 34 | } 35 | 36 | .mapboxgl-popup-close-button { 37 | font-size: 1rem !important; 38 | margin-right: 0.2rem; 39 | } 40 | 41 | .mapboxgl-popup { 42 | width: 18rem !important; 43 | } 44 | 45 | div.mapboxgl-popup.mapboxgl-popup-anchor-top { 46 | width: 18rem !important; 47 | max-width: 18rem !important; 48 | font-size: 1rem; 49 | } 50 | -------------------------------------------------------------------------------- /public/src/app/layout.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const layout = () => { 4 | return
layout
; 5 | }; 6 | 7 | export default layout; 8 | -------------------------------------------------------------------------------- /public/src/app/listing/[listing]/components/ListingAmenties.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ListingAmenties = () => { 4 | return
ListingAmenties
; 5 | }; 6 | 7 | export default ListingAmenties; 8 | -------------------------------------------------------------------------------- /public/src/app/listing/[listing]/components/ListingMap.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ListingMap = () => { 4 | return
ListingMap
; 5 | }; 6 | 7 | export default ListingMap; 8 | -------------------------------------------------------------------------------- /public/src/app/listing/[listing]/components/ListingPhotos.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ListingPhotos = () => { 4 | return
ListingPhotos
; 5 | }; 6 | 7 | export default ListingPhotos; 8 | -------------------------------------------------------------------------------- /public/src/app/listing/[listing]/components/TripScheduler.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const TripScheduler = () => { 4 | return
TripScheduler
; 5 | }; 6 | 7 | export default TripScheduler; 8 | -------------------------------------------------------------------------------- /public/src/app/listing/[listing]/loading.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const loading = () => { 4 | return
loading
; 5 | }; 6 | 7 | export default loading; 8 | -------------------------------------------------------------------------------- /public/src/app/listing/[listing]/page.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const page = () => { 4 | return
page
; 5 | }; 6 | 7 | export default page; 8 | -------------------------------------------------------------------------------- /public/src/app/loading.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const loading = () => { 4 | return
loading
; 5 | }; 6 | 7 | export default loading; 8 | -------------------------------------------------------------------------------- /public/src/app/my-listings/loading.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const loading = () => { 4 | return
loading
; 5 | }; 6 | 7 | export default loading; 8 | -------------------------------------------------------------------------------- /public/src/app/my-listings/page.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const page = () => { 4 | return
page
; 5 | }; 6 | 7 | export default page; 8 | -------------------------------------------------------------------------------- /public/src/app/new-listing/loading.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const loading = () => { 4 | return
loading
; 5 | }; 6 | 7 | export default loading; 8 | -------------------------------------------------------------------------------- /public/src/app/new-listing/page.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const page = () => { 4 | return
page
; 5 | }; 6 | 7 | export default page; 8 | -------------------------------------------------------------------------------- /public/src/app/page.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const page = () => { 4 | return
page
; 5 | }; 6 | 7 | export default page; 8 | -------------------------------------------------------------------------------- /public/src/app/search/components/SearchMap.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const SearchMap = () => { 4 | return
SearchMap
; 5 | }; 6 | 7 | export default SearchMap; 8 | -------------------------------------------------------------------------------- /public/src/app/search/loading.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const loading = () => { 4 | return
loading
; 5 | }; 6 | 7 | export default loading; 8 | -------------------------------------------------------------------------------- /public/src/app/search/page.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const page = () => { 4 | return
page
; 5 | }; 6 | 7 | export default page; 8 | -------------------------------------------------------------------------------- /public/src/app/trips/page.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const page = () => { 4 | return
page
; 5 | }; 6 | 7 | export default page; 8 | -------------------------------------------------------------------------------- /public/src/app/wishlist/page.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const page = () => { 4 | return
page
; 5 | }; 6 | 7 | export default page; 8 | -------------------------------------------------------------------------------- /public/src/components/SearchScheduler/SearchAddress.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const SearchAddress = () => { 4 | return
SearchAddress
; 5 | }; 6 | 7 | export default SearchAddress; 8 | -------------------------------------------------------------------------------- /public/src/components/SearchScheduler/SearchBeds.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const SearchBeds = () => { 4 | return
SearchBeds
; 5 | }; 6 | 7 | export default SearchBeds; 8 | -------------------------------------------------------------------------------- /public/src/components/SearchScheduler/SearchDates.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const SearchDates = () => { 4 | return
SearchDates
; 5 | }; 6 | 7 | export default SearchDates; 8 | -------------------------------------------------------------------------------- /public/src/components/auth/AuthModal.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const AuthModal = () => { 4 | return
AuthModal
; 5 | }; 6 | 7 | export default AuthModal; 8 | -------------------------------------------------------------------------------- /public/src/components/common/Calender.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Calender = () => { 4 | return
Calender
; 5 | }; 6 | 7 | export default Calender; 8 | -------------------------------------------------------------------------------- /public/src/components/common/ContextMenu.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ContextMenu = () => { 4 | return
ContextMenu
; 5 | }; 6 | 7 | export default ContextMenu; 8 | -------------------------------------------------------------------------------- /public/src/components/common/FormInput.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const FormInput = () => { 4 | return
FormInput
; 5 | }; 6 | 7 | export default FormInput; 8 | -------------------------------------------------------------------------------- /public/src/components/common/ImageUpload.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ImageUpload = () => { 4 | return
ImageUpload
; 5 | }; 6 | 7 | export default ImageUpload; 8 | -------------------------------------------------------------------------------- /public/src/components/common/NavigationEvents.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const NavigationEvents = () => { 4 | return
NavigationEvents
; 5 | }; 6 | 7 | export default NavigationEvents; 8 | -------------------------------------------------------------------------------- /public/src/components/common/Pin.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Pin = () => { 4 | return
Pin
; 5 | }; 6 | 7 | export default Pin; 8 | -------------------------------------------------------------------------------- /public/src/components/common/Schedule.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Schedule = () => { 4 | return
Schedule
; 5 | }; 6 | 7 | export default Schedule; 8 | -------------------------------------------------------------------------------- /public/src/components/common/ScheduleBar.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ScheduleBar = () => { 4 | return
ScheduleBar
; 5 | }; 6 | 7 | export default ScheduleBar; 8 | -------------------------------------------------------------------------------- /public/src/components/common/Spinner.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Spinner = () => { 4 | return
Spinner
; 5 | }; 6 | 7 | export default Spinner; 8 | -------------------------------------------------------------------------------- /public/src/components/footer/CompactFooter.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const CompactFooter = () => { 4 | return
CompactFooter
; 5 | }; 6 | 7 | export default CompactFooter; 8 | -------------------------------------------------------------------------------- /public/src/components/footer/Footer.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Footer() { 4 | return
Footer
; 5 | } 6 | -------------------------------------------------------------------------------- /public/src/components/listingCard.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const listingCard = () => { 4 | return
listingCard
; 5 | }; 6 | 7 | export default listingCard; 8 | -------------------------------------------------------------------------------- /public/src/components/navbar/Navbar.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Navbar = () => { 4 | return
Navbar
; 5 | }; 6 | 7 | export default Navbar; 8 | -------------------------------------------------------------------------------- /public/src/components/process/Description.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Description = () => { 4 | return
Description
; 5 | }; 6 | 7 | export default Description; 8 | -------------------------------------------------------------------------------- /public/src/components/process/FinishSetup.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const FinishSetup = () => { 4 | return
FinishSetup
; 5 | }; 6 | 7 | export default FinishSetup; 8 | -------------------------------------------------------------------------------- /public/src/components/process/FloorPlan.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const FloorPlan = () => { 4 | return
FloorPlan
; 5 | }; 6 | 7 | export default FloorPlan; 8 | -------------------------------------------------------------------------------- /public/src/components/process/ListingCreated.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ListingCreated = () => { 4 | return
ListingCreated
; 5 | }; 6 | 7 | export default ListingCreated; 8 | -------------------------------------------------------------------------------- /public/src/components/process/ListingPlaceType.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ListingPlaceType = () => { 4 | return
ListingPlaceType
; 5 | }; 6 | 7 | export default ListingPlaceType; 8 | -------------------------------------------------------------------------------- /public/src/components/process/ListingTypeSelector.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ListingTypeSelector = () => { 4 | return
ListingTypeSelector
; 5 | }; 6 | 7 | export default ListingTypeSelector; 8 | -------------------------------------------------------------------------------- /public/src/components/process/Overview.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Overview = () => { 4 | return
Overview
; 5 | }; 6 | 7 | export default Overview; 8 | -------------------------------------------------------------------------------- /public/src/components/process/Photos.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Photos = () => { 4 | return
Photos
; 5 | }; 6 | 7 | export default Photos; 8 | -------------------------------------------------------------------------------- /public/src/components/process/PlaceDetails.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const PlaceDetails = () => { 4 | return
PlaceDetails
; 5 | }; 6 | 7 | export default PlaceDetails; 8 | -------------------------------------------------------------------------------- /public/src/components/process/PlaceLocation.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const PlaceLocation = () => { 4 | return
PlaceLocation
; 5 | }; 6 | 7 | export default PlaceLocation; 8 | -------------------------------------------------------------------------------- /public/src/components/process/Price.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Price = () => { 4 | return
Price
; 5 | }; 6 | 7 | export default Price; 8 | -------------------------------------------------------------------------------- /public/src/components/process/ProcessAmeneties.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ProcessAmeneties = () => { 4 | return
ProcessAmeneties
; 5 | }; 6 | 7 | export default ProcessAmeneties; 8 | -------------------------------------------------------------------------------- /public/src/components/process/Review.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Review() { 4 | return
Review
; 5 | } 6 | -------------------------------------------------------------------------------- /public/src/components/process/StepOneStarter.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const StepOneStarter = () => { 4 | return
StepOneStarter
; 5 | }; 6 | 7 | export default StepOneStarter; 8 | -------------------------------------------------------------------------------- /public/src/components/process/StepThreeStarter.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const StepThreeStarter = () => { 4 | return
StepThreeStarter
; 5 | }; 6 | 7 | export default StepThreeStarter; 8 | -------------------------------------------------------------------------------- /public/src/components/process/StepTwoStarter.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const StepTwoStarter = () => { 4 | return
StepTwoStarter
; 5 | }; 6 | 7 | export default StepTwoStarter; 8 | -------------------------------------------------------------------------------- /public/src/components/process/Title.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Title = () => { 4 | return
Title
; 5 | }; 6 | 7 | export default Title; 8 | -------------------------------------------------------------------------------- /public/src/components/process/geocoder-control.jsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import * as React from "react"; 3 | import { useState } from "react"; 4 | 5 | import { useControl, Marker, MarkerProps, ControlPosition } from "react-map-gl"; 6 | import MapboxGeocoder, { GeocoderOptions } from "@mapbox/mapbox-gl-geocoder"; 7 | 8 | /* eslint-disable complexity,max-statements */ 9 | export default function GeocoderControl(props) { 10 | const [marker, setMarker] = useState(null); 11 | 12 | const geocoder = 13 | useControl < 14 | MapboxGeocoder > 15 | (() => { 16 | const ctrl = new MapboxGeocoder({ 17 | ...props, 18 | marker: false, 19 | accessToken: props.mapboxAccessToken, 20 | }); 21 | ctrl.on("loading", props.onLoading); 22 | ctrl.on("results", props.onResults); 23 | ctrl.on("result", (evt) => { 24 | props.onResult(evt); 25 | 26 | const { result } = evt; 27 | const location = 28 | result && 29 | (result.center || 30 | (result.geometry?.type === "Point" && result.geometry.coordinates)); 31 | if (location && props.marker) { 32 | setMarker( 33 | 38 | ); 39 | } else { 40 | setMarker(null); 41 | } 42 | }); 43 | ctrl.on("error", props.onError); 44 | return ctrl; 45 | }, 46 | { 47 | position: props.position, 48 | }); 49 | 50 | // @ts-ignore (TS2339) private member 51 | if (geocoder._map) { 52 | if ( 53 | geocoder.getProximity() !== props.proximity && 54 | props.proximity !== undefined 55 | ) { 56 | geocoder.setProximity(props.proximity); 57 | } 58 | if ( 59 | geocoder.getRenderFunction() !== props.render && 60 | props.render !== undefined 61 | ) { 62 | geocoder.setRenderFunction(props.render); 63 | } 64 | if ( 65 | geocoder.getLanguage() !== props.language && 66 | props.language !== undefined 67 | ) { 68 | geocoder.setLanguage(props.language); 69 | } 70 | if (geocoder.getZoom() !== props.zoom && props.zoom !== undefined) { 71 | geocoder.setZoom(props.zoom); 72 | } 73 | if (geocoder.getFlyTo() !== props.flyTo && props.flyTo !== undefined) { 74 | geocoder.setFlyTo(props.flyTo); 75 | } 76 | if ( 77 | geocoder.getPlaceholder() !== props.placeholder && 78 | props.placeholder !== undefined 79 | ) { 80 | geocoder.setPlaceholder(props.placeholder); 81 | } 82 | if ( 83 | geocoder.getCountries() !== props.countries && 84 | props.countries !== undefined 85 | ) { 86 | geocoder.setCountries(props.countries); 87 | } 88 | if (geocoder.getTypes() !== props.types && props.types !== undefined) { 89 | geocoder.setTypes(props.types); 90 | } 91 | if ( 92 | geocoder.getMinLength() !== props.minLength && 93 | props.minLength !== undefined 94 | ) { 95 | geocoder.setMinLength(props.minLength); 96 | } 97 | if (geocoder.getLimit() !== props.limit && props.limit !== undefined) { 98 | geocoder.setLimit(props.limit); 99 | } 100 | if (geocoder.getFilter() !== props.filter && props.filter !== undefined) { 101 | geocoder.setFilter(props.filter); 102 | } 103 | if (geocoder.getOrigin() !== props.origin && props.origin !== undefined) { 104 | geocoder.setOrigin(props.origin); 105 | } 106 | // Types missing from @types/mapbox__mapbox-gl-geocoder 107 | // if (geocoder.getAutocomplete() !== props.autocomplete && props.autocomplete !== undefined) { 108 | // geocoder.setAutocomplete(props.autocomplete); 109 | // } 110 | // if (geocoder.getFuzzyMatch() !== props.fuzzyMatch && props.fuzzyMatch !== undefined) { 111 | // geocoder.setFuzzyMatch(props.fuzzyMatch); 112 | // } 113 | // if (geocoder.getRouting() !== props.routing && props.routing !== undefined) { 114 | // geocoder.setRouting(props.routing); 115 | // } 116 | // if (geocoder.getWorldview() !== props.worldview && props.worldview !== undefined) { 117 | // geocoder.setWorldview(props.worldview); 118 | // } 119 | } 120 | return marker; 121 | } 122 | 123 | const noop = () => {}; 124 | 125 | // GeocoderControl.defaultProps = { 126 | // marker: true, 127 | // onLoading: noop, 128 | // onResults: noop, 129 | // onResult: noop, 130 | // onError: noop, 131 | // }; 132 | -------------------------------------------------------------------------------- /public/src/components/views/ListView.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ListView = () => { 4 | return
ListView
; 5 | }; 6 | 7 | export default ListView; 8 | -------------------------------------------------------------------------------- /public/src/components/views/MapView.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const MapView = () => { 4 | return
MapView
; 5 | }; 6 | 7 | export default MapView; 8 | -------------------------------------------------------------------------------- /public/src/components/views/ViewSwitchBadge.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const ViewSwitchBadge = () => { 4 | return
ViewSwitchBadge
; 5 | }; 6 | 7 | export default ViewSwitchBadge; 8 | -------------------------------------------------------------------------------- /public/src/data/Amenities.jsx: -------------------------------------------------------------------------------- 1 | import Ac from "airbnb/svg/ameneties/ac"; 2 | import Bbq from "airbnb/svg/ameneties/bbq"; 3 | import Beach from "airbnb/svg/ameneties/beach"; 4 | import CarbonMonoxideAlarm from "airbnb/svg/ameneties/carbon-monoxide-alarm"; 5 | import FireExt from "airbnb/svg/ameneties/fire-ext"; 6 | import FirePit from "airbnb/svg/ameneties/fire-pit"; 7 | import FirstAid from "airbnb/svg/ameneties/first-aid"; 8 | import Gym from "airbnb/svg/ameneties/gym"; 9 | import HotTub from "airbnb/svg/ameneties/hot-tub"; 10 | import IndoorFirplace from "airbnb/svg/ameneties/indoor-firplace"; 11 | import Kitchen from "airbnb/svg/ameneties/kitchen"; 12 | import Lake from "airbnb/svg/ameneties/lake"; 13 | import OutdoorDining from "airbnb/svg/ameneties/outdoor-dining"; 14 | import OutdoorShower from "airbnb/svg/ameneties/outdoor-shower"; 15 | import PaidParking from "airbnb/svg/ameneties/paid-parking"; 16 | import Parking from "airbnb/svg/ameneties/parking"; 17 | import Patio from "airbnb/svg/ameneties/patio"; 18 | import Piano from "airbnb/svg/ameneties/piano"; 19 | import Pool from "airbnb/svg/ameneties/pool"; 20 | import PoolTable from "airbnb/svg/ameneties/pool-table"; 21 | import Ski from "airbnb/svg/ameneties/ski"; 22 | import SmokeAlarm from "airbnb/svg/ameneties/smoke-alarm"; 23 | import Tv from "airbnb/svg/ameneties/tv"; 24 | import WashingMachine from "airbnb/svg/ameneties/washing-machine"; 25 | import Wifi from "airbnb/svg/ameneties/wifi"; 26 | import Workplace from "airbnb/svg/ameneties/workplace"; 27 | 28 | export const AmenetiesType = [ 29 | { 30 | type: "basic", 31 | data: [ 32 | { name: "Wifi", svgPath: }, 33 | { name: "TV", svgPath: }, 34 | { name: "Kitchen", svgPath: }, 35 | { name: "Washing Machine", svgPath: }, 36 | { name: "Free parking on premises", svgPath: }, 37 | { name: "Paid parking on premises", svgPath: }, 38 | { name: "Air conditioning", svgPath: }, 39 | { name: "Dedicated workplace", svgPath: }, 40 | ], 41 | }, 42 | { 43 | type: "advanced", 44 | data: [ 45 | { name: "Pool", svgPath: }, 46 | { name: "Hot tub", svgPath: }, 47 | { name: "Patio", svgPath: }, 48 | { name: "BBQ grill", svgPath: }, 49 | { name: "Outdoor dining area", svgPath: }, 50 | { name: "Fire pit", svgPath: }, 51 | { name: "Pool table", svgPath: }, 52 | { name: "Indoor fireplace", svgPath: }, 53 | { name: "Piano", svgPath: }, 54 | { name: "Exercise equipment", svgPath: }, 55 | { name: "Lake access", svgPath: }, 56 | { name: "Beach access", svgPath: }, 57 | { name: "Ski-in/Ski-out", svgPath: }, 58 | { name: "Outdoor shower", svgPath: }, 59 | ], 60 | }, 61 | { 62 | type: "safety", 63 | data: [ 64 | { name: "Smoke alarm", svgPath: }, 65 | { name: "First aid kit", svgPath: }, 66 | { name: "Fire extinguisher", svgPath: }, 67 | { name: "Carbon monoxide alarm", svgPath: }, 68 | ], 69 | }, 70 | ]; 71 | -------------------------------------------------------------------------------- /public/src/data/listingTypes.jsx: -------------------------------------------------------------------------------- 1 | import Barn from "airbnb/svg/lisitngTypes/barn"; 2 | import BedBreakfast from "airbnb/svg/lisitngTypes/bed-breakfast"; 3 | import Boat from "airbnb/svg/lisitngTypes/boat"; 4 | import Cabin from "airbnb/svg/lisitngTypes/cabin"; 5 | import Campervan from "airbnb/svg/lisitngTypes/campervan"; 6 | import CasaParticular from "airbnb/svg/lisitngTypes/casa-particular"; 7 | import Castle from "airbnb/svg/lisitngTypes/castle"; 8 | import Cave from "airbnb/svg/lisitngTypes/cave"; 9 | import Container from "airbnb/svg/lisitngTypes/container"; 10 | import CycladicHome from "airbnb/svg/lisitngTypes/cycladic-home"; 11 | import Dammuso from "airbnb/svg/lisitngTypes/dammuso"; 12 | import Dome from "airbnb/svg/lisitngTypes/dome"; 13 | import EarthHome from "airbnb/svg/lisitngTypes/earth-home"; 14 | import Farm from "airbnb/svg/lisitngTypes/farm"; 15 | import Flat from "airbnb/svg/lisitngTypes/flat"; 16 | import GuestHouse from "airbnb/svg/lisitngTypes/guest-house"; 17 | import Hotel from "airbnb/svg/lisitngTypes/hotel"; 18 | import House from "airbnb/svg/lisitngTypes/house"; 19 | import Houseboat from "airbnb/svg/lisitngTypes/houseboat"; 20 | import Kezhan from "airbnb/svg/lisitngTypes/kezhan"; 21 | import Minsu from "airbnb/svg/lisitngTypes/minsu"; 22 | import Riad from "airbnb/svg/lisitngTypes/riad"; 23 | import Ryokan from "airbnb/svg/lisitngTypes/ryokan"; 24 | import ShepherdHut from "airbnb/svg/lisitngTypes/shepherd-hut"; 25 | import Tent from "airbnb/svg/lisitngTypes/tent"; 26 | import TinyHome from "airbnb/svg/lisitngTypes/tiny-home"; 27 | import Tower from "airbnb/svg/lisitngTypes/tower"; 28 | import TreeHouse from "airbnb/svg/lisitngTypes/tree-house"; 29 | import Trullo from "airbnb/svg/lisitngTypes/trullo"; 30 | import Windmill from "airbnb/svg/lisitngTypes/windmill"; 31 | import Yurt from "airbnb/svg/lisitngTypes/yurt"; 32 | 33 | export const listingTypes = [ 34 | { name: "House", svgPath: }, 35 | { name: "Flat/apartment", svgPath: }, 36 | { name: "Barn", svgPath: }, 37 | { name: "Bed & breakfast", svgPath: }, 38 | { name: "Boat", svgPath: }, 39 | { name: "Cabin", svgPath: }, 40 | { name: "Campervan/motorhouse", svgPath: }, 41 | { name: "Casa particular", svgPath: }, 42 | { name: "Castle", svgPath: }, 43 | { name: "Cave", svgPath: }, 44 | { name: "Container", svgPath: }, 45 | { name: "Cycladic home", svgPath: }, 46 | { name: "Dammuso", svgPath: }, 47 | { name: "Dome", svgPath: }, 48 | { name: "Earth home", svgPath: }, 49 | { name: "Farm", svgPath: }, 50 | { name: "Guest house", svgPath: }, 51 | { name: "Hotel", svgPath: }, 52 | { name: "Houseboat", svgPath: }, 53 | { name: "Kezhan", svgPath: }, 54 | { name: "Minsu", svgPath: }, 55 | { name: "Riad", svgPath: }, 56 | { name: "Ryokan", svgPath: }, 57 | { name: "Shepherd's hut", svgPath: }, 58 | { name: "Tent", svgPath: }, 59 | { name: "Tiny home", svgPath: }, 60 | { name: "Tower", svgPath: }, 61 | { name: "Tree house", svgPath: }, 62 | { name: "Trullo", svgPath: }, 63 | { name: "Windmill", svgPath: }, 64 | { name: "Yurt", svgPath: }, 65 | ]; 66 | -------------------------------------------------------------------------------- /public/src/hooks/useClickOutside.jsx: -------------------------------------------------------------------------------- 1 | import { userAppStore } from "airbnb/store/store"; 2 | import { useEffect, RefObject, useRef } from "react"; 3 | 4 | function useClickOutside(isScheduleBar = false) { 5 | const { setSelectionType, setShowScheduleBar } = userAppStore(); 6 | const containerRef = useRef(null); 7 | useEffect(() => { 8 | function handleClickOutside(event) { 9 | if ( 10 | containerRef.current && 11 | !containerRef.current.contains(event.target) 12 | ) { 13 | if (!isScheduleBar) { 14 | setSelectionType(undefined); 15 | } else { 16 | setShowScheduleBar(); 17 | } 18 | } 19 | } 20 | 21 | document.addEventListener("mousedown", handleClickOutside); 22 | 23 | return () => { 24 | document.removeEventListener("mousedown", handleClickOutside); 25 | }; 26 | }, [containerRef, setSelectionType]); 27 | return [containerRef]; 28 | } 29 | 30 | export default useClickOutside; 31 | -------------------------------------------------------------------------------- /public/src/lib/auth.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/lib/auth.js -------------------------------------------------------------------------------- /public/src/lib/http.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/lib/http.js -------------------------------------------------------------------------------- /public/src/lib/lisitng.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/lib/lisitng.js -------------------------------------------------------------------------------- /public/src/store/slices/AuthSlice.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/slices/AuthSlice.js -------------------------------------------------------------------------------- /public/src/store/slices/ListingsSlice.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/slices/ListingsSlice.js -------------------------------------------------------------------------------- /public/src/store/slices/ProcessSlice.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/slices/ProcessSlice.js -------------------------------------------------------------------------------- /public/src/store/slices/SearchSlice.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/slices/SearchSlice.js -------------------------------------------------------------------------------- /public/src/store/store.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/koolkishan/nextjs-airbnb-clone-starter/bdbead7a44224c6c1b2d0b6bf504aa8b1cfa1e78/public/src/store/store.js -------------------------------------------------------------------------------- /public/src/svg/airbnb-logo-short.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | function AirBnbLogoShort() { 4 | return ( 5 | 6 | 10 | 11 | ); 12 | } 13 | 14 | export default AirBnbLogoShort; 15 | -------------------------------------------------------------------------------- /public/src/svg/airbnb-logo.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | function AirBnbLogo() { 4 | return ( 5 | 6 | 10 | 11 | ); 12 | } 13 | 14 | export default AirBnbLogo; 15 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/ac.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Ac() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | ); 44 | } 45 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/carbon-monoxide-alarm.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function CarbonMonoxideAlarm() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 34 | 45 | 46 | 47 | 48 | 53 | 59 | 60 | 65 | 71 | 72 | 77 | 83 | 84 | 89 | 95 | 96 | 97 | 98 | 109 | 110 | 111 | 117 | 118 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | ); 132 | } 133 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/fire-ext.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function FireExt() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 44 | 45 | 46 | 57 | 58 | 59 | 70 | 71 | 72 | 83 | 84 | 85 | 96 | 97 | 98 | 104 | 115 | 116 | 117 | 118 | 119 | 126 | 127 | 128 | 129 | 130 | 137 | 138 | 139 | 140 | 141 | 148 | 149 | 150 | 151 | 152 | ); 153 | } 154 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/first-aid.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function FirstAid() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 51 | 52 | 53 | 60 | 61 | 62 | 63 | 69 | 70 | 81 | 82 | 83 | 89 | 90 | 101 | 102 | 103 | 104 | 105 | 112 | 113 | 114 | 119 | 120 | 121 | 122 | 128 | 129 | 130 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | ); 146 | } 147 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/gym.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Gym() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 44 | 45 | 46 | 57 | 58 | 59 | 70 | 71 | 72 | 83 | 84 | 85 | 96 | 97 | 98 | 109 | 110 | 111 | 122 | 123 | 124 | 125 | 126 | ); 127 | } 128 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/indoor-firplace.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function IndoorFirplace() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 34 | 45 | 46 | 47 | 57 | 58 | 59 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 94 | 95 | 101 | 102 | 107 | 118 | 119 | 120 | 121 | 131 | 132 | 133 | 134 | 135 | ); 136 | } 137 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/outdoor-dining.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function OutdoorDining() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 43 | 44 | 45 | 51 | 52 | 63 | 64 | 65 | 71 | 72 | 83 | 84 | 85 | 96 | 97 | 98 | 109 | 110 | 111 | 122 | 123 | 124 | 135 | 136 | 137 | 138 | 139 | ); 140 | } 141 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/paid-parking.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function PaidParking() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 76 | 77 | 78 | 89 | 90 | 91 | 102 | 103 | 104 | 114 | 115 | 116 | 127 | 128 | 129 | 134 | 139 | 140 | 151 | 152 | 153 | 154 | 155 | 156 | ); 157 | } 158 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/patio.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Patio() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 39 | 45 | 46 | 47 | 58 | 59 | 60 | 61 | 62 | 69 | 75 | 76 | 77 | 88 | 89 | 90 | 91 | 92 | 98 | 99 | 100 | 111 | 112 | 113 | 124 | 125 | 126 | 137 | 138 | 139 | 150 | 151 | 152 | 163 | 164 | 165 | 176 | 177 | 178 | 189 | 190 | 191 | 202 | 203 | 204 | 205 | 206 | 207 | ); 208 | } 209 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/pool-table.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function PoolTable() { 4 | return
PoolTable
; 5 | } 6 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/smoke-alarm.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function SmokeAlarm() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 39 | 40 | 41 | 47 | 48 | 59 | 60 | 61 | 62 | 67 | 73 | 74 | 79 | 85 | 86 | 91 | 97 | 98 | 103 | 109 | 110 | 111 | 112 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | ); 131 | } 132 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/tv.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Tv() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 57 | 58 | 64 | 65 | 66 | 67 | 68 | ); 69 | } 70 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/washing-machine.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function WashingMachine() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 32 | 33 | 34 | 35 | 42 | 47 | 58 | 59 | 60 | 66 | 67 | 78 | 79 | 80 | 91 | 92 | 93 | 99 | 100 | 101 | 102 | 103 | ); 104 | } 105 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/wifi.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Wifi() { 4 | return ( 5 |
6 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 33 | 34 | 40 | 41 | 42 | 48 | 49 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 78 | 79 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 |
105 | ); 106 | } 107 | -------------------------------------------------------------------------------- /public/src/svg/ameneties/workplace.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Workplace() { 4 | return ( 5 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 33 | 34 | 44 | 45 | 46 | 56 | 57 | 58 | 68 | 69 | 70 | 71 | 81 | 82 | 83 | 93 | 94 | 95 | 105 | 106 | 107 | 117 | 118 | 123 | 133 | 134 | 135 | 136 | 137 | ); 138 | } 139 | -------------------------------------------------------------------------------- /public/src/svg/daimond.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Daimond() { 4 | return ( 5 | 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/casa-particular.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function CasaParticular() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/cave.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Cave() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/container.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Container() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/cycladic-home.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function CycladicHome() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/dome.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Dome() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/guest-house.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function GuestHouse() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/hotel.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Hotel() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/house.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function House() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/kezhan.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Kezhan() { 4 | return ( 5 |
6 | 48 |
49 | ); 50 | } 51 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/minsu.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Minsu() { 4 | return ( 5 |
6 | 55 |
56 | ); 57 | } 58 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/ryokan.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Ryokan() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/shepherd-hut.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function ShepherdHut() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/tiny-home.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function TinyHome() { 4 | return ( 5 |
6 | 55 |
56 | ); 57 | } 58 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/tower.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function Tower() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/src/svg/lisitngTypes/tree-house.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export default function TreeHouse() { 4 | return ( 5 |
6 | 51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /public/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", 5 | "./src/components/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./src/app/**/*.{js,ts,jsx,tsx,mdx}", 7 | ], 8 | theme: { 9 | extend: { 10 | backgroundImage: { 11 | "airbnb-gradient": 12 | "linear-gradient(to right,#E61E4D 0%,#E31C5F 50%,#D70466 100%)", 13 | }, 14 | colors: { 15 | "airbnb-theme-color": "#FF385C", 16 | "airbnb-light-black": "#222222", 17 | "airbnb-light-gray": "#717171", 18 | }, 19 | gridTemplateRows: { 20 | "new-listing": "10vh 80vh 10vh", 21 | }, 22 | }, 23 | }, 24 | plugins: [], 25 | }; 26 | --------------------------------------------------------------------------------