feat(search-frontend): add public landing page, search page with map view, filters, and property cards

- Create (public) route group with landing page (hero, featured listings, district links, stats, CTA)
- Create search page with filter sidebar, list/map/split view modes, URL-synced filters, pagination
- Build ListingMap component with CSS-based marker visualization and popup details
- Build FilterBar with transaction type, property type, city, price range, area, bedrooms filters
- Build PropertyCard and SearchResults components with responsive grid layout
- Update middleware to allow public access to / and /search routes
- Move dashboard home to /dashboard to avoid route conflict
- All content in Vietnamese, mobile responsive

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Ho Ngoc Hai
2026-04-08 02:02:42 +07:00
parent ad7713968a
commit 5e44456d11
10 changed files with 1254 additions and 9 deletions

View File

@@ -2,13 +2,13 @@ import Link from 'next/link';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
export default function HomePage() {
export default function DashboardPage() {
return (
<div className="space-y-8">
<div>
<h1 className="text-3xl font-bold">Chào mừng đến GoodGo</h1>
<h1 className="text-3xl font-bold">Bảng điều khiển</h1>
<p className="mt-2 text-muted-foreground">
Nền tảng bất đng sản thông minh tại Việt Nam
Quản tin đăng bất đng sản của bạn
</p>
</div>
@@ -43,7 +43,7 @@ export default function HomePage() {
<CardDescription>Tìm bất đng sản phù hợp nhu cầu</CardDescription>
</CardHeader>
<CardContent>
<Link href="/listings">
<Link href="/search">
<Button variant="outline" className="w-full">Tìm kiếm</Button>
</Link>
</CardContent>

View File

@@ -7,7 +7,7 @@ import { useAuthStore } from '@/lib/auth-store';
import { Button } from '@/components/ui/button';
const navItems = [
{ href: '/', label: 'Trang chủ', icon: '🏠' },
{ href: '/dashboard', label: 'Bảng điều khiển', icon: '🏠' },
{ href: '/listings', label: 'Tin đăng', icon: '📋' },
{ href: '/listings/new', label: 'Đăng tin', icon: '' },
];