diff --git a/src/app/(user)/user/dashboard/page.tsx b/src/app/(user)/user/dashboard/page.tsx
deleted file mode 100644
index 138318f..0000000
--- a/src/app/(user)/user/dashboard/page.tsx
+++ /dev/null
@@ -1,115 +0,0 @@
-'use client';
-
-import { useSession } from 'next-auth/react';
-
-export default function UserDashboard() {
- const { data: session } = useSession();
-
- return (
-
- );
-}
diff --git a/src/app/(user)/user/userprofile/page.tsx b/src/app/(user)/user/userprofile/page.tsx
new file mode 100644
index 0000000..8308d8a
--- /dev/null
+++ b/src/app/(user)/user/userprofile/page.tsx
@@ -0,0 +1,19 @@
+'use client';
+
+import { HeroSection } from '@/components/home/HeroSection';
+import { FeaturesSection } from '@/components/home/FeaturesSection';
+import { FeaturedAgents } from '@/components/home/FeaturedAgents';
+import { TopProfessionals } from '@/components/home/TopProfessionals';
+import { TestimonialsSection } from '@/components/home/TestimonialsSection';
+
+export default function UserDashboard() {
+ return (
+
+ );
+}
diff --git a/src/app/globals.css b/src/app/globals.css
index a2dc41e..a30e025 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1,26 +1,95 @@
@import "tailwindcss";
:root {
- --background: #ffffff;
- --foreground: #171717;
+ /* RE-Quest Design Tokens */
+ --color-primary-dark: #00293d;
+ --color-primary-light: #c4d9d4;
+ --color-accent-orange: #f5a623;
+ --color-accent-orange-hover: #e09620;
+ --color-background: #ffffff;
+ --color-background-alt: #f5f9f8;
+ --color-foreground: #171717;
+ --color-text-gray: #666666;
+ --color-text-muted: #9ca3af;
+ --color-border: #e5e7eb;
+
+ /* Spacing */
+ --spacing-section: 6rem;
+ --spacing-section-sm: 4rem;
+
+ /* Border Radius */
+ --radius-sm: 0.375rem;
+ --radius-md: 0.5rem;
+ --radius-lg: 1rem;
+ --radius-xl: 1.5rem;
+ --radius-2xl: 2rem;
+ --radius-full: 9999px;
+
+ /* Shadows */
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
}
@theme inline {
- --color-background: var(--background);
- --color-foreground: var(--foreground);
+ --color-background: var(--color-background);
+ --color-foreground: var(--color-foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
}
-@media (prefers-color-scheme: dark) {
- :root {
- --background: #0a0a0a;
- --foreground: #ededed;
+/* Disable dark mode for consistent branding */
+body {
+ background: var(--color-background);
+ color: var(--color-foreground);
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+/* Custom utilities */
+.section-padding {
+ padding-top: var(--spacing-section-sm);
+ padding-bottom: var(--spacing-section-sm);
+}
+
+@media (min-width: 768px) {
+ .section-padding {
+ padding-top: var(--spacing-section);
+ padding-bottom: var(--spacing-section);
}
}
-body {
- background: var(--background);
- color: var(--foreground);
- font-family: Arial, Helvetica, sans-serif;
+/* Gradient backgrounds */
+.gradient-hero {
+ background: linear-gradient(to bottom, #e8f0ee, #f5f9f8);
+}
+
+/* Card hover effects */
+.card-hover {
+ transition: all 0.3s ease;
+}
+
+.card-hover:hover {
+ transform: translateY(-4px);
+ box-shadow: var(--shadow-xl);
+}
+
+/* Focus states */
+.focus-ring {
+ outline: none;
+}
+
+.focus-ring:focus {
+ box-shadow: 0 0 0 2px var(--color-background), 0 0 0 4px var(--color-primary-dark);
+}
+
+/* Smooth scrolling */
+html {
+ scroll-behavior: smooth;
+}
+
+/* Selection styling */
+::selection {
+ background-color: var(--color-primary-light);
+ color: var(--color-primary-dark);
}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 960ec61..8ad8a5e 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -22,7 +22,7 @@ export default function Home() {
if (userRole === 'AGENT') {
router.replace('/agent/dashboard');
} else {
- router.replace('/user/dashboard');
+ router.replace('/user/userprofile');
}
}, [session, status, router]);
@@ -32,7 +32,7 @@ export default function Home() {
diff --git a/src/components/home/FeaturedAgents.tsx b/src/components/home/FeaturedAgents.tsx
new file mode 100644
index 0000000..6b1c182
--- /dev/null
+++ b/src/components/home/FeaturedAgents.tsx
@@ -0,0 +1,68 @@
+'use client';
+
+import { AgentCard } from '../ui/AgentCard';
+
+// Sample featured agents data
+const featuredAgents = [
+ {
+ id: '1',
+ name: 'Andrew Collins',
+ title: 'Rental & Investment Consultant',
+ location: 'New York',
+ rating: 4.8,
+ reviewCount: 124,
+ experience: '8+ years in the real estate industry',
+ expertise: ['Residential', 'Commercial', 'Investment'],
+ imageUrl: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=400&h=400&fit=crop',
+ isVerified: true,
+ },
+ {
+ id: '2',
+ name: 'Dempsi',
+ title: 'Real Estate & Investment Consultant',
+ location: 'Atlanta',
+ rating: 4.9,
+ reviewCount: 98,
+ experience: '5+ years in the real estate industry',
+ expertise: ['Luxury Homes', 'First-time Buyers'],
+ imageUrl: 'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=400&h=400&fit=crop',
+ isVerified: true,
+ },
+ {
+ id: '3',
+ name: 'Daniel',
+ title: 'Rental & Investment Consultant',
+ location: 'San Diego',
+ rating: 4.7,
+ reviewCount: 156,
+ experience: '7 years in the real estate industry',
+ expertise: ['Property Management', 'Rentals'],
+ imageUrl: 'https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=400&h=400&fit=crop',
+ isVerified: true,
+ },
+];
+
+export function FeaturedAgents() {
+ return (
+
+
+
+ {featuredAgents.map((agent) => (
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/components/home/FeaturesSection.tsx b/src/components/home/FeaturesSection.tsx
new file mode 100644
index 0000000..f147ac2
--- /dev/null
+++ b/src/components/home/FeaturesSection.tsx
@@ -0,0 +1,78 @@
+'use client';
+
+const features = [
+ {
+ icon: (
+
+ ),
+ title: 'Hire Quickly',
+ description: 'Connect with experienced local real estate agents who match your needs and preferences. Get answers quickly and move forward on your property decisions.',
+ },
+ {
+ icon: (
+
+ ),
+ title: 'Verified Agents',
+ description: 'All agents are carefully vetted and background checked to ensure that you work with professionals who meet quality and reliability standards.',
+ },
+ {
+ icon: (
+
+ ),
+ title: 'Top Rated',
+ description: 'Find highly rated agents based on positive client feedback. Their credentials and contributions have made them standout performers in the industry.',
+ },
+ {
+ icon: (
+
+ ),
+ title: 'Trusted by Thousands',
+ description: 'Thousands of buyers, sellers, and investors have relied on our platform. Our professionals help people navigate property tax-free gift exchanges.',
+ },
+];
+
+export function FeaturesSection() {
+ return (
+
+
+ {/* Section Header */}
+
+
+ Find Trusted Real Estate Professionals On Demand
+
+
+ Quickly connect with the right agents exactly when you need them.
+
+
+
+ {/* Features Grid */}
+
+ {features.map((feature, index) => (
+
+
+ {feature.icon}
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/components/home/HeroSection.tsx b/src/components/home/HeroSection.tsx
new file mode 100644
index 0000000..6d7ad1f
--- /dev/null
+++ b/src/components/home/HeroSection.tsx
@@ -0,0 +1,153 @@
+'use client';
+
+import { useState } from 'react';
+import { useRouter } from 'next/navigation';
+import { Button } from '../ui/Button';
+
+const propertyTypes = [
+ { value: 'residential', label: 'Residential' },
+ { value: 'commercial', label: 'Commercial' },
+ { value: 'luxury', label: 'Luxury Homes' },
+ { value: 'rentals', label: 'Rentals' },
+];
+
+const categories = [
+ { value: 'buying', label: 'Buying Agent' },
+ { value: 'selling', label: 'Selling Agent' },
+ { value: 'investment', label: 'Investment' },
+ { value: 'property-management', label: 'Property Management' },
+];
+
+export function HeroSection() {
+ const router = useRouter();
+ const [searchParams, setSearchParams] = useState({
+ type: '',
+ name: '',
+ location: '',
+ category: '',
+ });
+
+ const handleSearch = () => {
+ const params = new URLSearchParams();
+ if (searchParams.type) params.set('type', searchParams.type);
+ if (searchParams.name) params.set('name', searchParams.name);
+ if (searchParams.location) params.set('location', searchParams.location);
+ if (searchParams.category) params.set('category', searchParams.category);
+ router.push(`/agents?${params.toString()}`);
+ };
+
+ return (
+
+ {/* Background Pattern */}
+
+
+
+
+
+ {/* Headline */}
+
+
+ “Discover verified, top-rated real estate professionals to guide your buying, selling, or investing journey.”
+
+
+ Discover verified, top-rated real estate professionals
+
+
+
+ {/* Search Form */}
+
+
+ {/* Type Select */}
+
+
+
+
+
+ {/* Name Input */}
+
+
+ setSearchParams({ ...searchParams, name: e.target.value })}
+ className="w-full px-4 py-3 rounded-lg border border-gray-200 focus:border-[#00293d] focus:ring-2 focus:ring-[#00293d]/20 outline-none transition-all"
+ />
+
+
+ {/* Location Input */}
+
+
+ setSearchParams({ ...searchParams, location: e.target.value })}
+ className="w-full px-4 py-3 rounded-lg border border-gray-200 focus:border-[#00293d] focus:ring-2 focus:ring-[#00293d]/20 outline-none transition-all"
+ />
+
+
+ {/* Category Select */}
+
+
+
+
+
+
+ {/* Quick Links */}
+
+
+ |
+
+
+
+ {/* Search Button */}
+
+
+
+
+ {/* Helper Text */}
+
+ Connect with trusted local agents to explore homes, compare options, and make smarter decisions.
+
+
+
+
+ );
+}
diff --git a/src/components/home/TestimonialsSection.tsx b/src/components/home/TestimonialsSection.tsx
new file mode 100644
index 0000000..1803869
--- /dev/null
+++ b/src/components/home/TestimonialsSection.tsx
@@ -0,0 +1,105 @@
+'use client';
+
+const testimonials = [
+ {
+ id: '1',
+ rating: 5,
+ title: 'I have been working with Lorem...',
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean in nulla lorem. Fusce dui diam, auctor nec ligula vel. Congue pharetra leo. Praesent scelerisque diam, sed lacinia mauris commodo in. Fusce dui diam, auctor nec.',
+ author: 'Caren Robert',
+ role: 'Chief Operations Officer',
+ },
+ {
+ id: '2',
+ rating: 5,
+ title: 'I have been working with Lorem...',
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean in nulla lorem. Fusce dui diam, auctor nec ligula vel. Congue pharetra leo. Praesent scelerisque diam, sed lacinia mauris commodo in. Fusce dui diam, auctor nec.',
+ author: 'Caren Robert',
+ role: 'Chief Operations Officer',
+ },
+ {
+ id: '3',
+ rating: 5,
+ title: 'I have been working with Lorem...',
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean in nulla lorem. Fusce dui diam, auctor nec ligula vel. Congue pharetra leo. Praesent scelerisque diam, sed lacinia mauris commodo in. Fusce dui diam, auctor nec.',
+ author: 'Caren Robert',
+ role: 'Chief Operations Officer',
+ },
+];
+
+function StarRating({ rating }: { rating: number }) {
+ return (
+
+ {[...Array(5)].map((_, i) => (
+
+ ))}
+
+ );
+}
+
+export function TestimonialsSection() {
+ return (
+
+
+ {/* Section Header */}
+
+
+ Our Clients' Trust Is Our Foundation
+
+
+ We help buyers, sellers, and investors close successful real estate deals with confidence in every transaction.
+
+
+ Clients rate our real estate services an average of 4.8 on average, based on recent client reviews.
+
+
+
+ {/* Rating Summary */}
+
+
+ 4.8 / 5 Stars
+
+
+ 1,200+ Happy Clients
+
+
+
+ {/* Testimonials Grid */}
+
+ {testimonials.map((testimonial) => (
+
+ {/* Rating */}
+
+
+
+
+ {/* Title */}
+
{testimonial.title}
+
+ {/* Content */}
+
+ {testimonial.content}
+
+
+ {/* Author */}
+
+
{testimonial.author}
+
{testimonial.role}
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/components/home/TopProfessionals.tsx b/src/components/home/TopProfessionals.tsx
new file mode 100644
index 0000000..3e0c152
--- /dev/null
+++ b/src/components/home/TopProfessionals.tsx
@@ -0,0 +1,169 @@
+'use client';
+
+import { useState } from 'react';
+import Link from 'next/link';
+import { AgentCard } from '../ui/AgentCard';
+import { Button } from '../ui/Button';
+
+// Sample agents data for tabs
+const agentsData = [
+ {
+ id: '1',
+ name: 'Arjun Mehta',
+ title: 'Professional/General Agent',
+ location: 'San Francisco, CA',
+ rating: 4.9,
+ reviewCount: 87,
+ experience: '6+ years in the real estate industry',
+ expertise: ['Residential', 'Luxury', 'Commercial'],
+ imageUrl: 'https://images.unsplash.com/photo-1560250097-0b93528c311a?w=400&h=400&fit=crop',
+ isVerified: true,
+ },
+ {
+ id: '2',
+ name: 'Arjun Mehta',
+ title: 'Top-tier Real Agent',
+ location: 'San Francisco, CA',
+ rating: 4.8,
+ reviewCount: 65,
+ experience: '8+ years in the real estate industry',
+ expertise: ['Investment', 'Commercial', 'Property Management'],
+ imageUrl: 'https://images.unsplash.com/photo-1519085360753-af0119f7cbe7?w=400&h=400&fit=crop',
+ isVerified: true,
+ },
+ {
+ id: '3',
+ name: 'Arjun Mehta',
+ title: 'Verified Real Agent',
+ location: 'San Francisco, CA',
+ rating: 4.7,
+ reviewCount: 42,
+ experience: '6+ years in the real estate industry',
+ expertise: ['Residential', 'First-time Buyers', 'Rentals'],
+ imageUrl: 'https://images.unsplash.com/photo-1573496359142-b8d87734a5a2?w=400&h=400&fit=crop',
+ isVerified: true,
+ },
+];
+
+const lendersData = [
+ {
+ id: '4',
+ name: 'Sarah Johnson',
+ title: 'Mortgage Specialist',
+ location: 'Los Angeles, CA',
+ rating: 4.9,
+ reviewCount: 112,
+ experience: '10+ years in mortgage lending',
+ expertise: ['FHA Loans', 'Conventional', 'VA Loans'],
+ imageUrl: 'https://images.unsplash.com/photo-1580489944761-15a19d654956?w=400&h=400&fit=crop',
+ isVerified: true,
+ },
+ {
+ id: '5',
+ name: 'Michael Chen',
+ title: 'Senior Loan Officer',
+ location: 'Seattle, WA',
+ rating: 4.8,
+ reviewCount: 89,
+ experience: '7+ years in lending',
+ expertise: ['Jumbo Loans', 'Refinancing', 'Investment'],
+ imageUrl: 'https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=400&h=400&fit=crop',
+ isVerified: true,
+ },
+ {
+ id: '6',
+ name: 'Emily Davis',
+ title: 'Home Loan Advisor',
+ location: 'Austin, TX',
+ rating: 4.7,
+ reviewCount: 76,
+ experience: '5+ years in mortgage industry',
+ expertise: ['First-time Buyers', 'FHA', 'USDA Loans'],
+ imageUrl: 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80?w=400&h=400&fit=crop',
+ isVerified: true,
+ },
+];
+
+export function TopProfessionals() {
+ const [activeTab, setActiveTab] = useState<'agents' | 'lenders'>('agents');
+ const displayData = activeTab === 'agents' ? agentsData : lendersData;
+
+ return (
+
+
+ {/* Section Header */}
+
+
+ “Meet top real estate professionals”
+
+
+
+ {/* Tabs */}
+
+
+
+
+
+ {/* Cards Grid */}
+
+ {displayData.map((professional) => (
+
+ ))}
+
+ {/* Browse Experts CTA Card */}
+
+
+ Discover 6,000+ Top Real Estate Agents in Our Network
+
+
+
+
+
+
+
+ {/* Pagination Dots */}
+
+ {[0, 1, 2, 3].map((dot) => (
+
+ ))}
+
+
+
+ );
+}
diff --git a/src/components/layout/AgentHeader.tsx b/src/components/layout/AgentHeader.tsx
new file mode 100644
index 0000000..4696f47
--- /dev/null
+++ b/src/components/layout/AgentHeader.tsx
@@ -0,0 +1,131 @@
+'use client';
+
+import { useState } from 'react';
+import Link from 'next/link';
+import Image from 'next/image';
+import { signOut } from 'next-auth/react';
+
+interface AgentHeaderProps {
+ userName?: string | null;
+ userEmail?: string | null;
+}
+
+const navLinks = [
+ { label: 'Education', href: '/education' },
+ { label: 'About Us', href: '/about' },
+ { label: "FAQ's", href: '/faq' },
+];
+
+export function AgentHeader({ userName, userEmail }: AgentHeaderProps) {
+ const [showProfileMenu, setShowProfileMenu] = useState(false);
+
+ return (
+
+ );
+}
diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx
new file mode 100644
index 0000000..3566bac
--- /dev/null
+++ b/src/components/layout/Footer.tsx
@@ -0,0 +1,220 @@
+'use client';
+
+import Link from 'next/link';
+import Image from 'next/image';
+
+const footerLinks = {
+ services: {
+ title: 'Services',
+ links: [
+ { label: 'Neighborhood Guides', href: '/neighborhood-guides' },
+ { label: 'Home Loan & EMI Calculator', href: '/calculator' },
+ ],
+ },
+ serviceProviders: {
+ title: 'Service Providers',
+ links: [
+ { label: 'Agent', href: '/agents' },
+ { label: 'Lenders', href: '/lenders' },
+ ],
+ },
+ resources: {
+ title: 'Resources',
+ links: [
+ { label: "Buyer's Guide", href: '/buyers-guide' },
+ { label: "Seller's Guide", href: '/sellers-guide' },
+ { label: 'FAQs', href: '/faq' },
+ { label: 'Blogs', href: '/blogs' },
+ { label: 'Legal & Documentation Help', href: '/legal-help' },
+ ],
+ },
+ aboutContact: {
+ title: 'About & Contact',
+ links: [
+ { label: 'About Our Agency', href: '/about' },
+ { label: 'Our Agents', href: '/agents' },
+ { label: 'Testimonials', href: '/testimonials' },
+ { label: 'Careers', href: '/careers' },
+ { label: 'Contact Us', href: '/contact' },
+ { label: 'Privacy Policy', href: '/privacy-policy' },
+ { label: 'Terms & Conditions', href: '/terms' },
+ ],
+ },
+};
+
+const socialLinks = [
+ {
+ name: 'LinkedIn',
+ href: '#',
+ icon: (
+
+ ),
+ bgColor: 'bg-[#0077b5]',
+ },
+ {
+ name: 'Instagram',
+ href: '#',
+ icon: (
+
+ ),
+ bgColor: 'bg-gradient-to-br from-[#f09433] via-[#e6683c] to-[#bc1888]',
+ },
+ {
+ name: 'Facebook',
+ href: '#',
+ icon: (
+
+ ),
+ bgColor: 'bg-[#1877f2]',
+ },
+ {
+ name: 'Twitter',
+ href: '#',
+ icon: (
+
+ ),
+ bgColor: 'bg-[#1da1f2]',
+ },
+];
+
+export function Footer() {
+ return (
+
+ );
+}
diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx
new file mode 100644
index 0000000..a27ff11
--- /dev/null
+++ b/src/components/layout/Header.tsx
@@ -0,0 +1,82 @@
+'use client';
+
+import Link from 'next/link';
+import Image from 'next/image';
+import { useSession } from 'next-auth/react';
+import { Button } from '../ui/Button';
+
+export function Header() {
+ const { data: session } = useSession();
+
+ return (
+
+
+
+ {/* Logo */}
+
+
+
+
+ {/* Navigation */}
+
+
+ {/* Right Side */}
+
+ {session ? (
+ <>
+ {/* Notification Bell */}
+
+ {/* Profile */}
+
+
+
+ >
+ ) : (
+
+
+
+
+
+
+
+
+ )}
+
+ {/* Mobile Menu Button */}
+
+
+
+
+
+ );
+}
diff --git a/src/components/ui/AgentCard.tsx b/src/components/ui/AgentCard.tsx
new file mode 100644
index 0000000..0171161
--- /dev/null
+++ b/src/components/ui/AgentCard.tsx
@@ -0,0 +1,104 @@
+'use client';
+
+import Image from 'next/image';
+
+interface AgentCardProps {
+ name: string;
+ title: string;
+ location: string;
+ rating?: number;
+ reviewCount?: number;
+ experience: string;
+ expertise: string[];
+ imageUrl: string;
+ isVerified?: boolean;
+ isFeatured?: boolean;
+}
+
+export function AgentCard({
+ name,
+ title,
+ location,
+ rating,
+ reviewCount,
+ experience,
+ expertise,
+ imageUrl,
+ isVerified = false,
+ isFeatured = false,
+}: AgentCardProps) {
+ return (
+
+ {/* Image */}
+
+
+ {isVerified && (
+
+ )}
+
+
+ {/* Content */}
+
+
{name}
+
{title}
+
+ {/* Location */}
+
+
+ {/* Rating */}
+ {rating && (
+
+
+ {[...Array(5)].map((_, i) => (
+
+ ))}
+
+ {reviewCount && (
+
({reviewCount} reviews)
+ )}
+
+ )}
+
+ {/* Expertise Tags */}
+
+ {expertise.slice(0, 3).map((tag) => (
+
+ {tag}
+
+ ))}
+
+
+ {/* Experience */}
+
+ Experience: {experience}
+
+
+
+ );
+}
diff --git a/src/components/ui/Button.tsx b/src/components/ui/Button.tsx
new file mode 100644
index 0000000..6fe4732
--- /dev/null
+++ b/src/components/ui/Button.tsx
@@ -0,0 +1,40 @@
+'use client';
+
+import { ButtonHTMLAttributes, ReactNode } from 'react';
+
+interface ButtonProps extends ButtonHTMLAttributes
{
+ variant?: 'primary' | 'secondary' | 'outline';
+ size?: 'sm' | 'md' | 'lg';
+ children: ReactNode;
+}
+
+export function Button({
+ variant = 'primary',
+ size = 'md',
+ children,
+ className = '',
+ ...props
+}: ButtonProps) {
+ const baseStyles = 'font-medium rounded-lg transition-all duration-200 inline-flex items-center justify-center';
+
+ const variants = {
+ primary: 'bg-[#f5a623] text-white hover:bg-[#e09620] active:bg-[#c98a1c]',
+ secondary: 'bg-[#00293d] text-white hover:bg-[#003a57] active:bg-[#001f2e]',
+ outline: 'border-2 border-[#00293d] text-[#00293d] hover:bg-[#00293d] hover:text-white',
+ };
+
+ const sizes = {
+ sm: 'px-4 py-2 text-sm',
+ md: 'px-6 py-3 text-base',
+ lg: 'px-8 py-4 text-lg',
+ };
+
+ return (
+
+ );
+}
diff --git a/src/components/ui/Input.tsx b/src/components/ui/Input.tsx
new file mode 100644
index 0000000..11d7464
--- /dev/null
+++ b/src/components/ui/Input.tsx
@@ -0,0 +1,29 @@
+'use client';
+
+import { InputHTMLAttributes, ReactNode } from 'react';
+
+interface InputProps extends InputHTMLAttributes {
+ label?: string;
+ icon?: ReactNode;
+}
+
+export function Input({ label, icon, className = '', ...props }: InputProps) {
+ return (
+
+ {label && (
+
+ )}
+
+ {icon && (
+
+ {icon}
+
+ )}
+
+
+
+ );
+}
diff --git a/src/components/ui/Select.tsx b/src/components/ui/Select.tsx
new file mode 100644
index 0000000..98f16a6
--- /dev/null
+++ b/src/components/ui/Select.tsx
@@ -0,0 +1,43 @@
+'use client';
+
+import { SelectHTMLAttributes } from 'react';
+
+interface SelectOption {
+ value: string;
+ label: string;
+}
+
+interface SelectProps extends SelectHTMLAttributes {
+ label?: string;
+ options: SelectOption[];
+ placeholder?: string;
+}
+
+export function Select({
+ label,
+ options,
+ placeholder = 'Select...',
+ className = '',
+ ...props
+}: SelectProps) {
+ return (
+
+ {label && (
+
+ )}
+
+
+ );
+}
diff --git a/src/middleware.ts b/src/middleware.ts
index 6b3631d..a5ebad8 100644
--- a/src/middleware.ts
+++ b/src/middleware.ts
@@ -28,11 +28,8 @@ export default auth((req) => {
// Redirect logged-in users away from public routes (login, signup)
if (isLoggedIn && isPublicRoute) {
- // Redirect to appropriate dashboard based on role
- if (userRole === "AGENT") {
- return NextResponse.redirect(new URL("/agent/dashboard", nextUrl.origin));
- }
- return NextResponse.redirect(new URL("/user/dashboard", nextUrl.origin));
+ // Redirect to home page instead of dashboard
+ return NextResponse.redirect(new URL("/", nextUrl.origin));
}
// Redirect non-logged-in users to login page for protected routes
@@ -46,7 +43,7 @@ export default auth((req) => {
if (isLoggedIn) {
// Prevent regular users from accessing agent routes
if (isAgentRoute && userRole !== "AGENT") {
- return NextResponse.redirect(new URL("/user/dashboard", nextUrl.origin));
+ return NextResponse.redirect(new URL("/user/userprofile", nextUrl.origin));
}
// Prevent agents from accessing user routes