Files
goodgo-platform/docs/audits/PROPERTY_DETAIL_INDEX.md
Ho Ngoc Hai b8512ebff4 docs: consolidate audit and analysis reports into docs/audits/
Move 36 root-level audit/analysis documents and 7 web app audit documents
into docs/audits/ directory to declutter the project root. Remove stale
EXPLORATION_SUMMARY.txt.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-11 01:37:50 +07:00

413 lines
12 KiB
Markdown

# Property Detail Page - Documentation Index
Created: 2026-04-11
Project: GoodGo Platform (Vietnamese Real Estate)
---
## 📚 Documentation Files
### 1. **PROPERTY_DETAIL_PAGE_ANALYSIS.md** (17KB, 553 lines)
**Comprehensive Analysis** - Start here for complete understanding
Contains:
- ✅ Project overview (Next.js 15, Tailwind, Zustand)
- ✅ Full page structure & architecture
- ✅ Property images implementation
- ✅ Image-related components (gallery, upload)
- ✅ Project component structure & patterns
- ✅ Next.js Image usage patterns
- ✅ State management patterns (Zustand)
- ✅ Available third-party libraries
- ✅ Tailwind & design tokens
- ✅ API & data types (PropertyMedia, ListingDetail)
- ✅ Complete file structure
- ✅ Key insights & best practices
- ✅ Dependencies not present
**Use when:** You need a deep understanding of the architecture
---
### 2. **PROPERTY_DETAIL_QUICK_REFERENCE.md** (13KB, 583 lines)
**Code Snippets & Patterns** - Quick lookup guide
Contains:
- 🎯 Quick navigation (file paths, routes)
- 🖼️ Working with images (gallery, upload, data structure)
- 🎨 Styling patterns (aspect ratios, Tailwind classes)
- 🔄 State management patterns (Zustand, local state)
- 🧩 UI component patterns (Button, Badge, Card, Dialog)
- 📱 Responsive design patterns (breakpoints, grid)
- 🔗 Common imports (ready-to-copy imports)
- 📊 Data fetching examples
- 🌐 Internationalization
- 🔐 Security features
- 🧪 Testing considerations
- 🚀 Performance optimization tips
- 📋 Common tasks (add UI element, modify gallery)
- 🐛 Common issues & solutions
**Use when:** You need code snippets, patterns, or quick answers
---
### 3. **PROPERTY_DETAIL_COMPONENTS_MAP.md** (14KB, 601 lines)
**Component Hierarchy & Architecture** - Visual reference
Contains:
- 🎯 Page component hierarchy (visual tree)
- 🖼️ Image Gallery component details
- 📱 Image Upload component details
- 🧩 Related components (search results, property card)
- 🌐 Data flow & API mapping
- 🎨 Styling architecture
- 📊 State management patterns
- 🔗 Import map & file references
- 📈 Component complexity levels
- 🚀 Performance considerations
- 🔄 Navigation flows
- 📋 Component checklists
- 🛠️ Maintenance guide
**Use when:** You need to understand component relationships
---
## 🎯 Quick Start Guide
### For Understanding the Current Implementation:
1. Start with **PROPERTY_DETAIL_PAGE_ANALYSIS.md** sections:
- Section 1: Property Detail Page Structure
- Section 2: Property Images - Current Implementation
- Section 3: Image-Related Components
### For Making Changes:
1. Check **PROPERTY_DETAIL_QUICK_REFERENCE.md**:
- Find the relevant pattern or component
- Copy the code snippet
- Adapt to your needs
2. Reference **PROPERTY_DETAIL_COMPONENTS_MAP.md**:
- Understand where component fits
- Check data flow
- Verify state management
### For Building New Image Features:
1. **PROPERTY_DETAIL_PAGE_ANALYSIS.md** - Section 5 (Next.js Image Usage)
2. **PROPERTY_DETAIL_QUICK_REFERENCE.md** - Section "Working with Images"
3. **PROPERTY_DETAIL_COMPONENTS_MAP.md** - "Image Gallery Component Details"
---
## 📍 Key File Locations
### Main Files
- **Page**: `apps/web/app/[locale]/(public)/listings/[id]/page.tsx`
- **Detail Client**: `apps/web/components/listings/listing-detail-client.tsx`
- **Image Gallery**: `apps/web/components/listings/image-gallery.tsx`
- **Image Upload**: `apps/web/components/listings/image-upload.tsx`
- **Property Card**: `apps/web/components/search/property-card.tsx`
### Configuration
- **Tailwind Config**: `apps/web/tailwind.config.ts`
- **Next.js Config**: `apps/web/next.config.js`
- **Global Styles**: `apps/web/app/globals.css`
### API & State
- **Listings API**: `apps/web/lib/listings-api.ts`
- **Auth Store**: `apps/web/lib/auth-store.ts`
- **Comparison Store**: `apps/web/lib/comparison-store.ts`
### UI Components
- **Button**: `apps/web/components/ui/button.tsx`
- **Badge**: `apps/web/components/ui/badge.tsx`
- **Card**: `apps/web/components/ui/card.tsx`
- **Dialog**: `apps/web/components/ui/dialog.tsx`
---
## 🔑 Key Technologies
| Technology | Version | Purpose |
|-----------|---------|---------|
| Next.js | 15.5.14 | Full-stack framework (App Router) |
| React | 18.3.0 | UI library |
| Tailwind CSS | 3.4.0 | Styling with CSS variables |
| Zustand | 5.0.12 | State management |
| next-intl | 4.9.0 | i18n (Vietnamese/English) |
| React Query | 5.96.2 | Server state management |
| Lucide React | 1.7.0 | Icons |
| Mapbox GL | 3.21.0 | Maps |
| CVA | 0.7.1 | Component variants |
---
## ✨ Current Features
### Image Display
- ✅ Responsive main image (16:9 aspect ratio)
- ✅ Previous/Next navigation buttons
- ✅ Image counter badge ("X / Total")
- ✅ Horizontal scrollable thumbnails (64x64px)
- ✅ Selected thumbnail highlighting
- ✅ Empty state fallback
- ✅ Next.js Image optimization (responsive sizes)
- ✅ Lazy loading for thumbnails
- ✅ Priority loading for first image
### Image Upload
- ✅ Drag & drop support
- ✅ Click to browse
- ✅ File type validation (JPEG, PNG, WebP)
- ✅ File size validation (10MB max)
- ✅ Max 20 files limit
- ✅ Preview grid
- ✅ Delete button on hover
- ✅ Cover photo indicator
- ✅ URL cleanup on unmount
### Page Features
- ✅ SEO metadata (Open Graph, Twitter Cards)
- ✅ JSON-LD structured data
- ✅ Breadcrumb navigation
- ✅ Property details cards
- ✅ Amenities list
- ✅ Map integration
- ✅ Contact sidebar (sticky)
- ✅ Statistics (views, saves, inquiries)
- ✅ Comparison feature integration
---
## 🚀 NOT Currently Implemented
- ❌ Image lightbox / modal zoom
- ❌ Keyboard navigation (← →)
- ❌ Touch gestures / swipe support
- ❌ Image carousel transitions
- ❌ Upload progress bar
- ❌ Multiple file upload progress
- ❌ Image cropping / editing
- ❌ Video playback
- ❌ 360° panorama viewer
- ❌ AI image analysis
---
## 📋 Data Structure Quick Reference
### PropertyMedia
```typescript
{
id: string;
url: string; // HTTPS URL to image
type: 'image' | 'video'; // Type filter
order: number; // Sort order (0, 1, 2...)
caption: string | null; // Optional caption
}
```
### ListingDetail (partial)
```typescript
{
id: string;
property: {
media: PropertyMedia[]; // Array of images/videos
// ... other property fields
};
// ... other listing fields
}
```
---
## 🎓 Learning Paths
### I want to understand how images work:
1. Read: **PROPERTY_DETAIL_PAGE_ANALYSIS.md** - Section 2
2. Review: **PROPERTY_DETAIL_QUICK_REFERENCE.md** - Section "Working with Images"
3. Check: `image-gallery.tsx` source code
4. Check: `next.config.js` image configuration
### I want to modify the gallery:
1. Check: **PROPERTY_DETAIL_QUICK_REFERENCE.md** - "Modify Image Gallery"
2. Edit: `apps/web/components/listings/image-gallery.tsx`
3. Test: Responsive behavior and state changes
4. Reference: **PROPERTY_DETAIL_COMPONENTS_MAP.md** - "Image Gallery Component Details"
### I want to add a new feature (like lightbox):
1. Choose library: **PROPERTY_DETAIL_PAGE_ANALYSIS.md** - Section 7
2. Install: Use `pnpm add package-name -F @goodgo/web`
3. Create: New component wrapper
4. Integrate: With existing ImageGallery
5. Test: Multiple images, responsive, edge cases
### I want to understand state management:
1. Read: **PROPERTY_DETAIL_PAGE_ANALYSIS.md** - Section 6
2. Review: **PROPERTY_DETAIL_QUICK_REFERENCE.md** - Section "State Management"
3. Check: `auth-store.ts` and `comparison-store.ts`
### I want to understand component patterns:
1. Read: **PROPERTY_DETAIL_PAGE_ANALYSIS.md** - Section 4
2. Check: **PROPERTY_DETAIL_COMPONENTS_MAP.md** - "Component Complexity Levels"
3. Review: **PROPERTY_DETAIL_QUICK_REFERENCE.md** - Section "UI Component Patterns"
---
## 🔗 Navigation Between Docs
```
PROPERTY_DETAIL_PAGE_ANALYSIS.md
├─ "Section 1" → Component structure → See PROPERTY_DETAIL_COMPONENTS_MAP.md
├─ "Section 2" → Image implementation → See PROPERTY_DETAIL_QUICK_REFERENCE.md "Working with Images"
├─ "Section 4" → Component patterns → See PROPERTY_DETAIL_QUICK_REFERENCE.md "UI Component Patterns"
├─ "Section 5" → Next.js patterns → See PROPERTY_DETAIL_QUICK_REFERENCE.md "Using Images in Components"
└─ "Section 6" → State management → See PROPERTY_DETAIL_QUICK_REFERENCE.md "State Management"
PROPERTY_DETAIL_QUICK_REFERENCE.md
├─ Quick navigation → See PROPERTY_DETAIL_COMPONENTS_MAP.md for full tree
├─ Working with images → See PROPERTY_DETAIL_PAGE_ANALYSIS.md Section 2
└─ Common tasks → See PROPERTY_DETAIL_COMPONENTS_MAP.md "Maintenance Guide"
PROPERTY_DETAIL_COMPONENTS_MAP.md
├─ Page hierarchy → Overview → See PROPERTY_DETAIL_PAGE_ANALYSIS.md Section 1
├─ Gallery details → Implementation → See PROPERTY_DETAIL_PAGE_ANALYSIS.md Section 2
└─ Import map → File paths → See PROPERTY_DETAIL_PAGE_ANALYSIS.md Section 10
```
---
## 💡 Tips & Best Practices
### Image Optimization
- Always use `sizes` prop with Next.js Image
- Set `priority={true}` only for above-fold images
- Use aspect ratio containers to prevent layout shift
- Let Next.js handle format selection (WebP, AVIF)
### Component Design
- Keep components focused (single responsibility)
- Use CVA for variant management
- Use composition over inheritance
- Keep local state for UI, global for app state
### State Management
- Use Zustand for global state (auth, comparison)
- Use local React state for component UI (gallery index)
- Use React Query for server state
- Persist only essential data to localStorage
### Testing
- Mock Next.js Image component
- Test responsive behavior
- Test edge cases (empty state, many images)
- Mock Zustand stores
---
## 🤝 Contributing Changes
### To modify the image gallery:
1. Create a new branch
2. Edit `apps/web/components/listings/image-gallery.tsx`
3. Test responsive behavior
4. Update type definitions if needed
5. Submit PR with description
### To add a new image feature:
1. Check PROPERTY_DETAIL_PAGE_ANALYSIS.md Section 12 (not present section)
2. Evaluate library options
3. Create component wrapper
4. Integrate without breaking existing features
5. Document changes
### To update documentation:
1. Edit corresponding `.md` file
2. Keep sections organized
3. Include code examples
4. Cross-reference other docs
5. Maintain consistent formatting
---
## 📞 Quick Answers
**Q: How do I display an image?**
A: Use `next/image` with `fill` layout and aspect ratio container. See PROPERTY_DETAIL_QUICK_REFERENCE.md "Using Images in Components"
**Q: How do I add state management?**
A: Use Zustand for global, React.useState for local. See PROPERTY_DETAIL_PAGE_ANALYSIS.md Section 6
**Q: How do I add a lightbox?**
A: Install library, create wrapper, integrate with gallery. See PROPERTY_DETAIL_QUICK_REFERENCE.md "Add Image Lightbox"
**Q: Where are the UI components?**
A: `apps/web/components/ui/`. See PROPERTY_DETAIL_PAGE_ANALYSIS.md Section 10
**Q: What image formats are allowed?**
A: JPEG, PNG, WebP. See PROPERTY_DETAIL_QUICK_REFERENCE.md "File Upload Component"
**Q: Is there keyboard navigation?**
A: Not currently. See PROPERTY_DETAIL_COMPONENTS_MAP.md "Component Checklist"
---
## 📊 Documentation Statistics
| Metric | Value |
|--------|-------|
| Total Lines | 1,737 |
| Analysis Document | 553 lines |
| Quick Reference | 583 lines |
| Components Map | 601 lines |
| Code Examples | 50+ snippets |
| Key Files Documented | 20+ |
| Technologies Covered | 10+ |
---
## ✅ Checklist for New Developers
- [ ] Read PROPERTY_DETAIL_PAGE_ANALYSIS.md (Sections 1-3)
- [ ] Review PROPERTY_DETAIL_COMPONENTS_MAP.md (Page hierarchy)
- [ ] Check key file locations (listed above)
- [ ] Understand data structure (PropertyMedia, ListingDetail)
- [ ] Review image gallery source code
- [ ] Understand Zustand store pattern
- [ ] Review UI component patterns
- [ ] Familiarize with Tailwind classes
- [ ] Test with local development environment
- [ ] Bookmark this index for quick reference
---
## 🎓 Next Steps
1. **Understand Current State**
- Read comprehensive analysis
- Review component hierarchy
- Check existing components
2. **Plan Your Changes**
- Reference quick guide
- Check code patterns
- Verify data structure
3. **Implement & Test**
- Use provided snippets
- Follow patterns
- Test responsively
4. **Document Updates**
- Update this index if needed
- Add to relevant sections
- Maintain consistency
---
**Last Updated:** 2026-04-11
**Documentation Version:** 1.0
**Status:** Complete & Comprehensive