demo_compressed.mp4
This is a Next.js 15 travel booking platform for Suvidha Escapes, containing 25+ fully functional components built with real UI interactions, animations, and comprehensive mock data to demonstrate complete booking flows for flights, hotels, holiday packages, and visa assistance.
These components serve as:
- β Design prototypes for client demos and stakeholder reviews
- β Development blueprints for actual implementation
- β Testing playground for UX flows and interactions
- β Reference implementation for UI patterns and behaviors
Note: Currently uses hardcoded mock data (
src/data.ts). In production, will connect to real backend APIs.
- Next.js 15.5 β React framework with Turbopack
- React 19 β Modern component architecture with hooks
- TypeScript 5 β Type safety and developer experience
- Tailwind CSS 4 β Utility-first styling
- Framer Motion 12 β Smooth animations and transitions
- Lucide React β Beautiful, consistent icon library
- date-fns 4 β Lightweight date formatting
- canvas-confetti β Celebration animations
βοΈ Flights β Search, filter, sort, and book with real-time pricing- π¨ Hotels β Browse properties, select rooms, complete booking
- ποΈ Holiday Packages β Explore curated trips with day-by-day itineraries
- π Visa Assistance β Country requirements and application process
- Interactive Search Forms β Multi-tab interface with smart inputs
- Advanced Filters β Price range, stops, airlines, time slots, amenities
- Loading Skeletons β Smooth skeleton screens during data fetch
- Step Indicators β Visual progress tracking for multi-step flows
- Responsive Carousels β Image galleries with smooth navigation
- Chat-based conversational interface
- Collects preferences (destination, budget, interests, travel style)
- Generates personalized day-by-day itineraries
- Recommends flights and hotels
- Export to PDF functionality
- Unified checkout for all booking types
- Multiple payment methods (Card, UPI, Net Banking, Wallets)
- Real-time fare calculation
- Booking confirmation with confetti animation
- Download tickets/vouchers, add to calendar
- Smooth page transitions with Framer Motion
- Optimistic UI updates
- Progressive disclosure (expandable details)
- Copy-to-clipboard functionality
- Mobile-friendly responsive design
Ensure you have these installed:
- Node.js 18+
- npm or pnpm
# Clone or navigate to the project
cd suvidha-escapes-portal
# Install dependencies
npm install
# Start the development server
npm run devThe application will be available at http://localhost:3000
npm run dev # Start development server with Turbopack
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLintsuvidha-escapes-portal/
βββ src/
β βββ app/
β β βββ page.tsx # Main app with navigation
β β βββ layout.tsx # Root layout
β β βββ globals.css # Global styles
β βββ primitives/ # Reusable UI components
β β βββ badge.tsx
β β βββ button.tsx
β β βββ input.tsx
β β βββ carousel.tsx
β βββ HomePage.tsx # Landing page
β βββ FlightsPage.tsx # Flight search
β βββ HotelsPage.tsx # Hotel search
β βββ HolidaysPage.tsx # Holiday packages
β βββ VisaPage.tsx # Visa assistance
β βββ Header.tsx # Navigation header
β βββ Footer.tsx # Site footer
β βββ types.ts # TypeScript definitions
β βββ data.ts # Mock data
β βββ [20+ more components]
βββ public/ # Static assets
βββ package.json
βββ next.config.ts
| Component | Description |
|---|---|
HomePage.tsx |
Landing page with multi-tab search |
FlightsPage.tsx |
Flight search results with filters |
HotelsPage.tsx |
Hotel listings with grid/list views |
HolidaysPage.tsx |
Holiday package browser |
VisaPage.tsx |
Visa requirements and applications |
HotelDetailPage.tsx |
Individual hotel details & booking |
PackageDetailPage.tsx |
Package details with itinerary |
VisaDetailPage.tsx |
Visa application form |
| Component | Description |
|---|---|
UnifiedBookingFlow.tsx |
Universal checkout (Details β Payment β Confirmation) |
HotelBookingFlow.tsx |
Hotel-specific booking process |
BookingConfirmation.tsx |
Success page with confetti & actions |
PaymentPage.tsx |
Payment method selection & processing |
| Component | Description |
|---|---|
AITripPlanner.tsx |
AI chatbot for trip planning (~1,000 LOC) |
FlightFilters.tsx |
Advanced filtering sidebar |
TravelerDetailsForm.tsx |
Passenger/guest information form |
| Component | Description |
|---|---|
Header.tsx |
Global navigation with currency/language selectors |
Footer.tsx |
Site-wide footer with links |
FlightResultCard.tsx |
Flight display card with expandable details |
StepIndicator.tsx |
Progress tracker for multi-step flows |
ReviewConfirm.tsx |
Final review before payment |
| Component | Description |
|---|---|
FlightCardSkeleton.tsx |
Animated loading placeholder for flights |
FiltersSkeleton.tsx |
Loading placeholder for filters |
| File | Description |
|---|---|
primitives/badge.tsx |
Styled badge component with variants |
primitives/button.tsx |
Reusable button with multiple styles |
primitives/input.tsx |
Form input with label and validation |
primitives/carousel.tsx |
Image carousel with navigation |
| File | Description |
|---|---|
types.ts |
TypeScript interfaces (15+ types) |
data.ts |
Mock data (flights, hotels, packages, visas) |
3 airlines Γ Various routes = 3 sample flights
- IndiGo (6E-2045) β DEL β BOM β’ βΉ5,499 β’ Direct
- Vistara (UK-911) β DEL β BOM β’ βΉ6,299 β’ Direct
- Air India (AI-804) β BLR β DEL β’ βΉ4,899 β’ 1 stop (HYD)6 luxury properties across India
- Taj Mahal Palace (Mumbai) β βΉ15,000/night β’ 5β
- Leela Palace (Bengaluru) β βΉ18,000/night β’ 5β
- Oberoi Udaivilas (Udaipur) β βΉ25,000/night β’ 5β
- Park Hyatt (Goa) β βΉ12,000/night β’ 5β
- ITC Grand Chola (Chennai) β βΉ14,000/night β’ 5β
- Trident (Jaipur) β βΉ8,000/night β’ 4β
6 curated holiday packages
- Goa Beach Escape β 5D/4N β’ βΉ35,000/person
- Rajasthan Heritage β 7D/6N β’ βΉ52,000/person
- Kerala Backwaters β 6D/5N β’ βΉ42,000/person
- Himachal Adventure β 8D/7N β’ βΉ48,000/person
- Andaman Paradise β 6D/5N β’ βΉ65,000/person
- Golden Triangle β 5D/4N β’ βΉ38,000/person8 countries with visa assistance
- United States (B-2) β βΉ18,500 β’ 7-10 days
- United Kingdom β βΉ14,200 β’ 15 days
- Canada β βΉ11,800 β’ 20 days
- Schengen (EU) β βΉ9,200 β’ 15 days
- Australia β βΉ16,500 β’ 10 days
- Dubai (UAE) β βΉ7,800 β’ 3-5 days
- Singapore β βΉ6,500 β’ 5-7 days
- Thailand β βΉ3,200 β’ On arrival// Before (Mock)
import { MOCK_FLIGHTS } from "./data";
const flights = MOCK_FLIGHTS;
// After (Production)
const response = await fetch("/api/flights/search", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(searchParams),
});
const flights = await response.json();// Before (Mock - Local State)
const [filters, setFilters] = useState<FilterState>({ ... });
// After (Production - Global State)
// Option 1: Using Zustand
import { useFlightStore } from '@/stores/search.store';
const { filters, setFilters } = useFlightStore();
// Option 2: Using React Context
import { useSearchContext } from '@/context/SearchContext';
const { filters, setFilters } = useSearchContext();// Replace mock payment with Razorpay
import { useRazorpay } from "@/hooks/useRazorpay";
const { initiatePayment } = useRazorpay();
await initiatePayment({
amount: totalPrice,
bookingId: booking.id,
onSuccess: handlePaymentSuccess,
onFailure: handlePaymentFailure,
});// Replace mock responses with OpenAI API
const response = await fetch("/api/ai/chat", {
method: "POST",
body: JSON.stringify({ message: userInput, context: conversation }),
});
const stream = response.body;
// Handle streaming response// Replace Unsplash with S3/CDN
- image: "https://images.unsplash.com/photo-..."
+ image: "https://cdn.suvidhaescapes.com/hotels/taj-mumbai.jpg"Primary: Purple Gradient (#667eea β #764ba2)
Accent: Orange (#f59e0b)
Success: Green (#10b981)
Error: Red (#ef4444)- Font Family: Geist Sans (Next.js default)
- Heading Scale: 2rem β 1.5rem β 1.25rem β 1rem
- Body: 1rem (16px) β’ Line Height: 1.5
- Grid System: 8px base unit
- Container Max Width: 1280px
- Section Padding: 4rem (64px)
- No real payment processing (simulated)
- No backend persistence (data lost on refresh)
- Limited mock data (3 flights, 6 hotels, 6 packages)
- Client-side filtering only (no API pagination)
- Pre-scripted AI responses (not real OpenAI)
- No email/SMS notifications
- No authentication/authorization
npm run build
npm run start