A modern, responsive web application for booking resort getaways built with Next.js 16, React, TypeScript, and Tailwind CSS.
Scaper is a comprehensive resort booking platform that allows users to discover, book, and manage resort stays. The application features user authentication, role-based access control, and an admin dashboard for managing bookings.
- Attractive hero section with call-to-action
- Featured resorts carousel
- Why choose Scaper section highlighting key benefits
- Browse all available resorts with detailed information
- Advanced filter and search functionality (location, amenities, price range)
- Resort details including amenities, pricing, and images
- Quick booking dialog for instant reservations
- Secure user registration and login
- JWT token-based authentication
- Role-based access control (User, Admin, SuperAdmin)
- Persistent login sessions
- Create new bookings with date selection
- View all personal bookings with status tracking
- Cancel bookings (subject to policies)
- Booking history and management
- View and manage profile information
- Display user role and account details
- Secure logout functionality
- View all bookings across the platform (Admin/SuperAdmin only)
- Update booking statuses
- Manage resort availability and bookings
- User management capabilities
- Framework: Next.js 16 with App Router
- UI Framework: Tailwind CSS v4
- Language: TypeScript
- HTTP Client: Axios
- State Management: React Hooks
- Authentication: JWT tokens
- Styling: Utility-first CSS with Tailwind
src/
├── app/
│ ├── globals.css # Global styles with Tailwind directives
│ ├── layout.tsx # Root layout component
│ ├── page.tsx # Home page
│ ├── admin/
│ │ └── page.tsx # Admin dashboard
│ ├── booking/
│ │ └── [_id]/
│ │ └── page.tsx # Individual booking page
│ ├── login/
│ │ └── page.tsx # Login page
│ ├── register/
│ │ └── page.tsx # Registration page
│ └── resorts/
│ └── page.tsx # Resorts listing page
├── components/
│ ├── AdvancedFilters.tsx # Advanced search filters
│ ├── Layout.tsx # Main layout wrapper
│ ├── LoginDialog.tsx # Login modal component
│ ├── MuiProvider.tsx # Theme provider (deprecated)
│ ├── Navbar.tsx # Navigation bar
│ ├── RegisterDialog.tsx # Registration modal
│ ├── ResortCard.tsx # Resort card component
│ ├── SearchBar.tsx # Search bar component
│ └── UserMenu.tsx # User dropdown menu
├── lib/
│ ├── api.ts # Axios API client configuration
│ └── auth.ts # Authentication utilities
└── types/
└── index.ts # TypeScript type definitions
- Clone the repository:
git clone <repository-url>
cd scaper- Install dependencies:
npm installCreate a .env.local file in the root directory:
NEXT_PUBLIC_API_URL=http://localhost:5000/apiReplace http://localhost:5000/api with your backend API URL.
Start the development server:
npm run devOpen http://localhost:3000 in your browser.
Build the application:
npm run buildStart the production server:
npm startThe application expects a REST API backend with the following endpoints:
POST /auth/login- User loginPOST /auth/register- User registration
GET /resorts- Get all resortsGET /resorts/:id- Get resort details
GET /bookings- Get user bookingsPOST /bookings- Create new bookingPUT /bookings/:id- Update bookingDELETE /bookings/:id- Cancel booking
GET /admin/bookings- Get all bookings (admin only)PUT /admin/bookings/:id/status- Update booking status
- User: Can browse resorts, make bookings, view own bookings
- Admin: All user permissions + view all bookings, update booking statuses
- SuperAdmin: All admin permissions + additional administrative controls
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the MIT License.