╔══════════════════════════════════════════════════════════════════════════════╗
║                    FRONTEND EXPLORATION SUMMARY                             ║
║                     GoodGo Platform AI - Next.js                            ║
╚══════════════════════════════════════════════════════════════════════════════╝

EXPLORATION COMPLETED: April 21, 2026
BASE PATH: /Users/velikho/Desktop/WORKING/goodgo-platform-ai/apps/web

📋 REPORTS GENERATED:
────────────────────────────────────────────────────────────────────────────

1. FRONTEND_EXPLORATION_REPORT.md (16 KB)
   └─ Comprehensive 12-section technical deep-dive
      • Project structure (directory layout)
      • Core technologies & dependencies
      • App Router structure & route organization
      • Component directory (23 domains)
      • Neighborhood components detail
      • Mapbox GL integration patterns
      • API client setup & domain-specific modules
      • React Query hooks & caching strategy
      • Chart components (Recharts)
      • Listing detail page structure (39 KB client component)
      • State management layers (React Query, Zustand, Context)
      • Key file patterns & conventions
      • Performance & SEO optimizations

2. FRONTEND_QUICK_REFERENCE.txt (19 KB)
   └─ 15-section quick lookup guide
      • Project structure overview
      • Core tech stack
      • Neighborhood features & types
      • Mapbox GL usage patterns
      • Chart components
      • API client patterns
      • React Query hooks
      • Listing detail page flow
      • State management layers
      • Design system components
      • Internationalization setup
      • Performance optimizations
      • Key file paths reference
      • Coding patterns examples
      • Debugging tips

3. ARCHITECTURE_OVERVIEW.txt (16 KB)
   └─ Visual ASCII diagrams & data flows
      • Routing & layout hierarchy
      • Listing detail page component flow
      • API & state management data flow
      • Neighborhood components detail
      • Chart components stack
      • Component import patterns (static/dynamic)
      • Mapbox GL initialization flow
      • i18n flow
      • SEO & metadata generation

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🏗️  KEY FINDINGS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. DIRECTORY STRUCTURE
   ✓ Domain-based organization (listings/, neighborhood/, map/, charts/)
   ✓ Shared utilities in /lib (API clients, hooks, stores)
   ✓ Design system components in /components/design-system/
   ✓ Next.js 15 App Router with locale prefix [locale]
   ✓ Multi-level layout hierarchy: root → locale → group → feature

2. NEIGHBORHOOD FEATURES (FULLY IMPLEMENTED)
   ✓ NeighborhoodPOIMap (11 KB) - Mapbox GL with 6 POI categories
   ✓ NeighborhoodRadarChart (2 KB) - Recharts radar with 0-10 scores
   ✓ NeighborhoodScore (2 KB) - Compact score display
   ✓ Rich type definitions (NeighborhoodScoreData, POIItem, NeighborhoodCategory)
   ✓ Integration point: Dynamically loaded in listing-detail-client.tsx

3. MAPBOX GL INTEGRATION
   ✓ 3 map components: listing-map, location-picker, neighborhood-poi-map
   ✓ Theme-aware styling (light/dark) via useMapboxStyle() hook
   ✓ CSS imported per component: 'mapbox-gl/dist/mapbox-gl.css'
   ✓ SVG marker icons for POI categories (school, hospital, transit, shopping, restaurant, park)
   ✓ Client-only rendering (no SSR)

4. CHART COMPONENTS (RECHARTS)
   ✓ 6 chart types: price area, price trend, district bar, heatmap, performance, radar
   ✓ Vietnamese number formatting (tr/k notation for millions)
   ✓ Signal colors (green/red) via CSS variables
   ✓ Responsive containers with theme-aware tooltips
   ✓ Dynamic imports for performance

5. API ARCHITECTURE
   ✓ Base client: lib/api-client.ts (127 lines)
     • CSRF token handling
     • Automatic 401 refresh-and-retry
     • Concurrent refresh coalescing
     • Type-safe generics
   ✓ 12+ domain-specific API modules (listings, analytics, valuation, agents, etc.)
   ✓ Both client-side and server-side implementations

6. STATE MANAGEMENT
   ✓ Layer 1: React Query (server state caching)
   ✓ Layer 2: Zustand (client UI state)
   ✓ Layer 3: React Context (global features: theme, notifications, auth)
   ✓ Query keys follow strict naming convention for cache invalidation

7. LISTING DETAIL PAGE
   ✓ Server component: /[locale]/(public)/listings/[id]/page.tsx
   ✓ generateMetadata() for SEO (OG, canonical, schema)
   ✓ Client component: 39 KB listing-detail-client.tsx
   ✓ 9 major sections with dynamic imports for heavy components
   ✓ Neighborhood section uses dynamic imports (SSR: false)

8. PERFORMANCE OPTIMIZATIONS
   ✓ Code splitting via dynamic imports (maps, charts)
   ✓ Lazy loading with loading fallbacks
   ✓ React Query automatic caching + deduplication
   ✓ Tailwind CSS + CVA for efficient styling
   ✓ Responsive containers for all visualizations

9. INTERNATIONALIZATION
   ✓ next-intl 4.9.0 for translations
   ✓ Locale prefix in routes: [locale]
   ✓ Two locales: vi (Vietnamese), en (English)
   ✓ Translations in /messages directory

10. DESIGN SYSTEM
    ✓ Financial components (KPI cards, stat cards, price delta, signal display)
    ✓ Data display (data table wrapper, empty states, skeletons)
    ✓ Layout components (dashboard layout, density provider)
    ✓ UI primitives from shadcn/ui (badge, button, card, dialog, etc.)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 DEPENDENCIES SUMMARY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

CORE FRAMEWORK:
  • Next.js 15.5.14 (App Router)
  • React 18.3.0

STATE & DATA:
  • @tanstack/react-query 5.96.2 (server state)
  • @tanstack/react-table 8.21.3 (table rendering)
  • zustand 5.0.12 (client state)

UI & STYLING:
  • Tailwind CSS 3.4.0
  • class-variance-authority 0.7.1
  • lucide-react 1.7.0 (icons)

FORMS & VALIDATION:
  • react-hook-form 7.72.1
  • @hookform/resolvers 5.2.2
  • zod 4.3.6

MAPPING & CHARTS:
  • mapbox-gl 3.21.0 ⭐
  • recharts 3.8.1 ⭐

UTILITIES:
  • next-intl 4.9.0 (i18n)
  • next-themes 0.4.6 (theme)
  • socket.io-client 4.8.3 (real-time)
  • html2canvas 1.4.1 + jspdf 4.2.1 (PDF export)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 COMPONENT IMPORT PATTERNS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Static imports (always in bundle):
  import { Badge } from '@/components/ui/badge';
  import { useMarketReport } from '@/lib/hooks/use-analytics';

Dynamic imports (code-split):
  const NeighborhoodMap = dynamic(
    () => import('@/components/neighborhood').then(m => m.NeighborhoodPOIMap),
    { ssr: false, loading: () => <Skeleton /> }
  );

Barrel exports (clean imports):
  // components/neighborhood/index.ts
  export { NeighborhoodRadarChart } from './neighborhood-radar-chart';
  export { NeighborhoodPOIMap } from './neighborhood-poi-map';
  
  // Usage:
  import { NeighborhoodRadarChart, NeighborhoodPOIMap } from '@/components/neighborhood';

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 QUICK START FOR DEVELOPMENT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ENVIRONMENT VARIABLES:
  NEXT_PUBLIC_API_URL=http://localhost:3001/api/v1
  NEXT_PUBLIC_SITE_URL=https://goodgo.vn
  MAPBOX_ACCESS_TOKEN=pk_... (from Mapbox)

COMMANDS:
  npm run dev           ← Start dev server (port 3000)
  npm run build         ← Production build
  npm run lint          ← ESLint check
  npm test              ← Vitest tests
  npm run typecheck     ← TypeScript check

KEY FILES TO KNOW:
  lib/api-client.ts                              ← Base HTTP client
  lib/listings-api.ts                            ← Listings endpoints
  lib/hooks/use-analytics.ts                     ← React Query pattern
  components/listings/listing-detail-client.tsx ← Main detail page
  components/neighborhood/                       ← Neighborhood features
  components/charts/                             ← Chart components
  lib/mapbox-style.ts                            ← Map styling

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 NOTABLE IMPLEMENTATION DETAILS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. CSRF PROTECTION
   └─ Token read from cookies on every request
   └─ Sent as X-CSRF-Token header for non-GET requests

2. AUTH TOKEN REFRESH
   └─ Automatic 401 handling with silent refresh
   └─ Concurrent requests coalesced to single refresh call
   └─ Auth endpoints excluded from refresh-retry

3. POI CATEGORIES
   └─ 6 types: school, hospital, transit, shopping, restaurant, park
   └─ SVG icons embedded in marker creation
   └─ Color-coded by category in POI_CATEGORY_CONFIG

4. NEIGHBORHOOD SCORING
   └─ 6 categories on 0-10 scale: education, healthcare, transport, shopping, dining, environment
   └─ RadarChart displays all at once with badges below
   └─ POIMap shows actual locations with distance info

5. PRICE FORMATTING
   └─ Vietnamese currency (VND) with tr/k notation
   └─ 1 tỷ = 1 billion (1,000,000,000)
   └─ 1 tr = 1 million (1,000,000)
   └─ 1 k = 1 thousand (1,000)

6. THEME SWITCHING
   └─ next-themes manages light/dark mode
   └─ Mapbox styles update reactively
   └─ CSS variables for component theming

7. DYNAMIC COMPONENT LOADING
   └─ Heavy components (NeighborhoodMap, charts) code-split
   └─ SSR disabled for client-only components
   └─ Loading fallback UI shown during load

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 PRO TIPS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✓ Use barrel exports (index.ts) for cleaner component imports
✓ Always add 'enabled' condition to useQuery() for dependent queries
✓ CSS variables (--signal-up, --color-border) support light/dark themes
✓ React Query query keys are the foundation—get them right for caching
✓ Mapbox GL must be in client components ('use client') 
✓ Dynamic imports reduce initial bundle size significantly
✓ Design system provides trader-style financial components
✓ API responses are type-safe via domain-specific API modules
✓ SVG icons in POI markers avoid loading external font files
✓ Responsive containers automatically adjust chart/map sizing

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📚 FILE SIZE REFERENCE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

LARGE COMPONENTS (candidates for dynamic import):
  listing-detail-client.tsx      39 KB (main listing detail)
  listing-form-steps.tsx         14 KB (form wizard)
  neighborhood-poi-map.tsx       11 KB (Mapbox visualization)
  ai-advice-cards.tsx            9 KB (AI recommendations)
  district-heatmap.tsx           9 KB (heat visualization)
  location-picker.tsx            9 KB (map picker)

MEDIUM COMPONENTS:
  agent-performance.tsx          6 KB (agent metrics chart)
  price-history-chart.tsx        2 KB (inline price chart)

SMALL COMPONENTS:
  neighborhood-radar-chart.tsx   2 KB (radar chart)
  neighborhood-score.tsx         2 KB (score display)
  price-area-chart.tsx           2 KB (area chart)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 NEXT STEPS FOR DEVELOPMENT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. Study the three generated reports in this order:
   a) ARCHITECTURE_OVERVIEW.txt (visual understanding)
   b) FRONTEND_QUICK_REFERENCE.txt (quick lookups)
   c) FRONTEND_EXPLORATION_REPORT.md (deep dive)

2. Familiarize yourself with key files:
   - lib/api-client.ts (understanding HTTP patterns)
   - lib/listings-api.ts (domain API example)
   - components/listings/listing-detail-client.tsx (main page structure)
   - components/neighborhood/ (neighborhood features)

3. Run the dev server:
   npm run dev
   Open http://localhost:3000/vi/listings/[any-id]

4. Explore in browser:
   - Check Network tab to see API calls
   - Toggle theme to see Mapbox style change
   - Inspect React tree to understand component hierarchy
   - Check local storage for persisted state

5. Experiment with modifications:
   - Add console.log to understand data flow
   - Try modifying neighborhood scores to see chart update
   - Add new query hooks following existing patterns
   - Create a test component using existing patterns

═══════════════════════════════════════════════════════════════════════════════
Questions? Reference the reports or check key file paths in QUICK_REFERENCE.txt
═══════════════════════════════════════════════════════════════════════════════
