const { useState, useEffect, useRef } = React; // ═══════════════════════════════════════════════════════════ // DESIGN SYSTEM & ICONS // ═══════════════════════════════════════════════════════════ const Icon = ({ name, size = 24, color = "currentColor" }) => { const icons = { logo: , home: , briefcase: , arrow_right: , search: , menu: , x: , bell: , user: , settings: , download: , check: , plus: , trash: , edit: , eye: , shield: , trendingUp: , users: , info: , calendar: , mapPin: , phone: , mail: , logOut: , chartBar: , checkCircle: , alertCircle: , }; return icons[name] || null; }; // ═══════════════════════════════════════════════════════════ // HEADER COMPONENT // ═══════════════════════════════════════════════════════════ const Header = ({ page, setPage, isLoggedIn, setIsLoggedIn, userType, userName }) => { const [mobileMenuOpen, setMobileMenuOpen] = useState(false); const handleLogout = () => { setIsLoggedIn(false); setPage('home'); setMobileMenuOpen(false); }; return (
setPage('home')}>

Premier Hospitality

{!isLoggedIn && (
)} {isLoggedIn && (
{userName?.charAt(0)}
{userName}
{userType === 'admin' ? 'Admin' : 'Travel Company'}
)}
); }; // ═══════════════════════════════════════════════════════════ // HOME PAGE // ═══════════════════════════════════════════════════════════ const HomePage = ({ setPage }) => (
{/* Hero Section */}

Simplify Your Travel & MICE Operations

Connect with verified suppliers. Get competitive bids. Manage everything in one platform. Reduce costs by 30% while saving time.

{/* Features Section */}

Why Choose Premier Hospitality

The most efficient platform for travel companies and MICE professionals

{[ { icon: 'briefcase', title: 'Easy RFP Management', desc: 'Post requirements and receive competitive bids in minutes' }, { icon: 'users', title: 'Verified Suppliers', desc: 'Connect with quality hotels, transporters, and service providers' }, { icon: 'trendingUp', title: 'Cost Savings', desc: 'Reduce operational costs through competitive bidding' }, { icon: 'shield', title: 'Transparent Pricing', desc: 'Clear quotes with no hidden charges or surprises' }, { icon: 'calendar', title: 'Real-time Tracking', desc: 'Monitor all your bookings and suppliers from one dashboard' }, { icon: 'download', title: 'Instant Reports', desc: 'Export data and generate comprehensive reports instantly' }, ].map((item, i) => (

{item.title}

{item.desc}

))}
{/* How It Works */}

How It Works

Simple steps to connect suppliers and close deals

{[ { step: '1', title: 'Post RFP', desc: 'Share your requirements and budget' }, { step: '2', title: 'Get Quotes', desc: 'Suppliers submit competitive bids' }, { step: '3', title: 'Compare', desc: 'Review and compare all proposals' }, { step: '4', title: 'Book Now', desc: 'Confirm and manage your booking' }, ].map((item, i) => (
{item.step}

{item.title}

{item.desc}

))}
{/* Testimonials */}

What Our Users Say

{[ { name: 'Rajesh Kumar', company: 'Global Travels Inc.', quote: 'Saved 40% on supplier costs within first month.' }, { name: 'Priya Sharma', company: 'Elite MICE Events', quote: 'Best platform for managing group travel logistics.' }, { name: 'Amit Patel', company: 'Business Travel Solutions', quote: 'Transparent pricing and reliable partners.' }, ].map((item, i) => (
{'★★★★★'.split('').map((s, i) => )}

"{item.quote}"

{item.name}
{item.company}
))}
); // ═══════════════════════════════════════════════════════════ // AUTH PAGE (Login/Register) // ═══════════════════════════════════════════════════════════ const AuthPage = ({ mode, setPage, setIsLoggedIn, setUserType, setUserName }) => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [fullName, setFullName] = useState(''); const [company, setCompany] = useState(''); const [type, setType] = useState('client'); const [error, setError] = useState(''); const handleSubmit = (e) => { e.preventDefault(); if (mode === 'login') { if (!email || !password) { setError('Please fill in all fields'); return; } setIsLoggedIn(true); setUserType(type === 'supplier' ? 'supplier' : 'client'); setUserName(email.split('@')[0]); setPage(type === 'supplier' ? 'supplier-dashboard' : 'client-dashboard'); } else { if (!email || !password || !fullName || !company) { setError('Please fill in all fields'); return; } setIsLoggedIn(true); setUserType(type); setUserName(fullName); setPage(type === 'supplier' ? 'supplier-dashboard' : 'client-dashboard'); } setError(''); }; return (

{mode === 'login' ? 'Welcome Back' : 'Create Account'}

{mode === 'login' ? 'Sign in to your account' : 'Join Premier Hospitality'}

{error &&
{error}
}
{mode === 'register' && ( <>
{[ { value: 'client', label: 'Travel Company' }, { value: 'supplier', label: 'Supplier' }, ].map(opt => ( ))}
setFullName(e.target.value)} />
setCompany(e.target.value)} />
)}
setEmail(e.target.value)} />
setPassword(e.target.value)} />
{mode === 'login' ? ( <> Don't have an account? setPage('register')}>Sign up ) : ( <> Already have an account? setPage('login')}>Sign in )}
); }; // ═══════════════════════════════════════════════════════════ // CLIENT DASHBOARD // ═══════════════════════════════════════════════════════════ const ClientDashboard = ({ setPage, setIsLoggedIn, userName }) => { const [activeTab, setActiveTab] = useState('overview'); const [rfps, setRfps] = useState([ { id: 1, title: 'Delhi to Goa Corporate Trip', destination: 'Goa', status: 'active', quotes: 8, budget: '₹50,000 - ₹75,000' }, { id: 2, title: 'Mumbai Conference Setup', destination: 'Mumbai', status: 'active', quotes: 5, budget: '₹100,000 - ₹150,000' }, { id: 3, title: 'Bangalore Team Outing', destination: 'Bangalore', status: 'completed', quotes: 12, budget: '₹75,000 - ₹100,000' }, ]); const [quotes, setQuotes] = useState([ { id: 1, rfp: 'Delhi to Goa Corporate Trip', supplier: 'Hotel Paradise Goa', amount: '₹65,000', status: 'pending' }, { id: 2, rfp: 'Delhi to Goa Corporate Trip', supplier: 'Sunset Resorts', amount: '₹58,000', status: 'pending' }, { id: 3, rfp: 'Delhi to Goa Corporate Trip', supplier: 'Beachfront Hotels', amount: '₹72,000', status: 'accepted' }, ]); const [bookings, setBookings] = useState([ { id: 1, ref: 'BK001', supplier: 'Beachfront Hotels', amount: '₹72,000', status: 'confirmed', date: '15 May - 18 May 2026' }, { id: 2, ref: 'BK002', supplier: 'Business Hotels India', amount: '₹125,000', status: 'in-progress', date: '20 May - 22 May 2026' }, ]); const [showNewRfpForm, setShowNewRfpForm] = useState(false); const [newRfpData, setNewRfpData] = useState({ title: '', destination: '', pax: '', budget: '', requirements: '' }); const renderTab = () => { switch (activeTab) { case 'overview': return (

Dashboard Overview

{[ { label: 'Total RFPs', value: '12', icon: 'briefcase' }, { label: 'Active Quotes', value: '8', icon: 'chartBar' }, { label: 'Confirmed Bookings', value: '5', icon: 'checkCircle' }, { label: 'Total Saved', value: '₹2,40,000', icon: 'trendingUp' }, ].map((item, i) => (
{item.label}
{item.value}
))}

Recent RFPs

{rfps.slice(0, 2).map(rfp => (

{rfp.title}

{rfp.destination}
{rfp.status}
{rfp.quotes} quotes received
{rfp.budget}
))}

Top Suppliers

{[ { name: 'Beachfront Hotels', rating: 4.8, reviews: 45 }, { name: 'Business Hotels India', rating: 4.6, reviews: 32 }, { name: 'Sunset Resorts', rating: 4.5, reviews: 28 }, ].map((s, i) => (

{s.name}

{s.reviews} reviews
{s.rating}★
))}
); case 'rfps': return (

RFP Management

{showNewRfpForm && (

Create New RFP

setNewRfpData({...newRfpData, title: e.target.value})} /> setNewRfpData({...newRfpData, destination: e.target.value})} /> setNewRfpData({...newRfpData, pax: e.target.value})} /> setNewRfpData({...newRfpData, budget: e.target.value})} />