A modern tour booking application built with React, Redux Toolkit, and Node.js. Features include tour listing, filtering, sorting, wishlist functionality, and booking management.
- Tour Listing Page: Display all available tours with filtering and sorting
- Tour Detail Page: Detailed tour information with wishlist functionality
- Booking Form: Multi-step booking form with localStorage persistence
- Responsive Design: Mobile-first approach with Tailwind CSS
- State Management: Redux Toolkit for global state management
- Loading & Error States: Proper handling of async operations
- Wishlist: Add/remove tours to wishlist with localStorage persistence
- RESTful API: Express server with TypeScript
- Tour Management: CRUD operations for tours
- Booking System: Handle tour bookings
- Mock Data Fallback: Graceful fallback when external APIs fail
- CORS Support: Cross-origin resource sharing enabled
- React 19
- TypeScript
- Redux Toolkit
- React Router DOM
- Tailwind CSS
- Lucide React (Icons)
- Axios
- Node.js
- Express
- TypeScript
- CORS
- Axios
- Node.js (v18 or higher)
- npm or yarn
-
Clone the repository
git clone <repository-url> cd project
-
Install backend dependencies
cd backend npm install -
Install frontend dependencies
cd ../frontend/map-my-tour npm install
-
Start the backend server
cd backend npm run devThe backend will run on
http://localhost:5000 -
Start the frontend development server
cd frontend/map-my-tour npm run devThe frontend will run on
http://localhost:5173 -
Build for production
# Backend cd backend npm run build npm start # Frontend cd frontend/map-my-tour npm run build
GET /api/tours- Get all toursGET /api/tours/:id- Get tour by IDPOST /api/tours/book- Create a booking
project/
├── backend/
│ ├── src/
│ │ ├── controllers/
│ │ │ └── toursController.ts
│ │ ├── routes/
│ │ │ └── tours.ts
│ │ └── index.ts
│ ├── package.json
│ └── tsconfig.json
└── frontend/
└── map-my-tour/
├── src/
│ ├── components/
│ │ ├── FilterBar.tsx
│ │ ├── Header.tsx
│ │ └── TourCard.tsx
│ ├── pages/
│ │ ├── BookingForm.tsx
│ │ ├── DetailsPage.tsx
│ │ ├── InclusionsPage.tsx
│ │ ├── ItineraryPage.tsx
│ │ └── ListPage.tsx
│ ├── store/
│ │ ├── slices/
│ │ │ ├── toursSlice.ts
│ │ │ └── wishlistSlice.ts
│ │ ├── hooks.ts
│ │ └── index.ts
│ ├── App.tsx
│ └── main.tsx
├── package.json
└── vite.config.ts
- Displays all available tours in a responsive grid
- Filter by price range and duration
- Sort by name, price (low to high/high to low), and duration
- Wishlist functionality with heart icons
- Loading and error states
- Responsive design for all screen sizes
- Comprehensive tour information display
- Tour highlights and description
- Pricing with discount calculations
- Wishlist toggle functionality
- Links to inclusions and itinerary pages
- Booking CTA button
- Multi-step form (Personal Info → Tour Details → Emergency Contact)
- Form data persistence in localStorage
- Real-time price calculation
- Form validation
- Success confirmation with auto-redirect
- Responsive design
- Add/remove tours from wishlist
- Persistent storage in localStorage
- Visual feedback with heart icons
- State management with Redux
The backend can be deployed to platforms like:
- Heroku
- Railway
- DigitalOcean
- AWS
The frontend can be deployed to:
- Vercel (recommended)
- Netlify
- GitHub Pages
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.
- Images from Pexels
- Icons from Lucide React
- UI components styled with Tailwind CSS