- Add checkbox selection for cars in All Cars tab when requestId is present
- Add "Add to Request" button with selection count
- Add select all/deselect all functionality
- Highlight selected cars with blue ring
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed from { car_ids: [...] } to { cars: [...] } format
- Now includes full car details required by backend ImportCarsRequest schema
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added 'cho': '' parameter to enable searching both domestic and import cars
- This fixes Toyota Prius (and other import cars) not appearing in search results
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- About page: CarsImage as large hero with company intro below
- Contact page: HandShakeImage as semi-transparent hero background
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add handshake image to About page Company Introduction section
- Add cars-export image as background in Contact page Business Partnership section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Backend: Include promo_preferred_maker, promo_preferred_model, promo_email_enabled in admin/users API
- Frontend: Add AdminUser interface fields
- Admin UI: Display Promo Interest column with maker/model and email alert status
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed from carsApi to carmodooApi for maker/model data
- Now shares same data source as vehicle-request page
- Added CarmodooMaker and CarmodooModel types
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Adjust layout to center Request Vehicle with PromoPreference on right
- Use translateCarName for maker/model names in combo boxes
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
FastAPI's redirect_slashes was causing /makers/ to redirect to /makers
which then didn't match the route definition.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move /makers/ and /models/ routes before /{car_id} to fix route conflict
- Center Request Vehicle button, move PromoPreference to the right
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add promo preference fields to User model (promo_preferred_maker,
promo_preferred_model, promo_email_enabled)
- Create API endpoints for getting/updating promo preferences
- Create PromoPreference component with maker/model selection
- Show login prompt for non-logged-in users when interacting
- Add promo notification service to send emails when matching vehicles
are added to promotion
- Add multi-language translations (en, mn, ru, ko)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add BoardCategory and BoardPost models with multi-language support
- Add bulletin API endpoints (CRUD, notice toggle, pin toggle)
- Add board_enabled setting to control menu visibility
- Create frontend board pages (list, detail, write, edit)
- Create admin board management and category management pages
- Update Header.tsx with conditional Board menu between Inquiry and Contact Us
- Update admin settings with board_enabled toggle
- Add Board menu to admin sidebar
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Document git hook vs manual docker run conflict issue
- Add resolution steps for container name conflicts
- Reinforce: always use docker-compose for staging
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add rule #5: Never use manual docker run for staging deployment
- Document 2025-01-05 incident where wrong volume mount caused missing images
- Add correct docker-compose commands for staging deployment
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add latitude/longitude columns to visitor_logs model
- Update visitor_service to fetch and store coordinates from ip-api.com
- Add /admin/map-data API endpoint for map visualization
- Create VisitorMap component using Leaflet/OpenStreetMap
- Integrate map into visitor-stats admin page
- 30-second auto-refresh with animation for new visitors
- Color-coded markers (red: active, blue: recent)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add daily scheduled check for Carmodoo car availability
- Add manual trigger button in admin settings
- Mark sold cars as soldout=True automatically
- Add settings for check time and enable/disable toggle
- Display check status and statistics in admin UI
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add fonts-noto-cjk and fontconfig to backend Dockerfile
- Fixes garbled Korean text in performance check PDFs
- Update SERVER_INFRASTRUCTURE_PLAN.md with actual infrastructure
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add server roles (Server1: Master, Server2/3: Workers)
- Add nginx-proxy-manager info (port 81, SSL management)
- Add registered domains table
- Add database info (autonet, autonet_staging)
- Link to SERVER_INFRASTRUCTURE_PLAN.md for details
This ensures infrastructure context is always available in sessions.
- Add CI/CD auto-deployment flow diagram
- Add 'Claude Code 작업 규칙' section (no direct server edits)
- Update deployment commands to use CI/CD
- Add DB schema change process with ALTER TABLE examples
- Document deploy.sh promote/rollback/status commands
- Add change history for CI/CD implementation
- Share production uploads directory for staging
- Ensures image files are available in staging environment
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use mongolcar-network (external) for DB/Redis access
- Add NEXT_PUBLIC_API_URL as build arg
- Simplify configuration
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add tracking set to prevent duplicate entries within same batch
- Refactor to use helper function for consistent duplicate checking
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Next.js API rewrites to proxy /api and /uploads requests
- Update docker-compose.staging.yml to use relative API paths
- Set NEXT_PUBLIC_API_URL to empty for staging (use rewrites)
- Add BACKEND_URL env var for Next.js server-side proxying
- Update all files to use relative paths when API_URL is empty
This fixes the issue where the staging site (HTTPS) was trying to
load resources from HTTP backend, causing Mixed Content errors.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add cash_cc_balance to User model (withdrawable CC)
- Create SnsShareSubmission model for SNS share verification
- Add marketing campaign settings to SystemSettings
- Add reward_type to ReferralReward model
- Create /api/sns-share endpoints for submission and verification
- Add referral signup reward logic (10CC on signup)
- Create /sns-share user page for SNS sharing
- Create /admin/sns-shares management page
- Add marketing settings UI to admin settings page
- Add SNS Shares menu to admin sidebar
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Document staging vs production DB separation (autonet_staging)
- Add staging sync and deployment commands to CLAUDE.md
- Update changelog with 2025-01-03 changes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add new /my-vehicles API endpoint returning both recommended and direct purchases
- Add DirectPurchasedCarResponse and MyVehiclesResponse schemas
- Update frontend to display directly purchased cars (from banners with 1CC)
- Show separate collapsible section for direct purchases
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Cars that were recommended to the user (via vehicle request with 1CC payment)
should be accessible without additional CC payment.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add car_id foreign key to link recommended vehicles to cars table
- Add car relationship for easier access
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This field was missing, causing the API to not return car_id
for approved vehicles in My Vehicle Requests page.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add optional car_id field for linking to cars table
- Add regenerateSingle function to adminPdfApi
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use car_id or fallback to car_data.local_car_id or car_data.id
- Disable link if no valid car ID is available
- Show "Vehicle unavailable" message when car ID is missing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move mobile tabs outside flex container to prevent layout conflict
- Add sticky positioning for mobile tabs
- Add min-w-0 to main content to prevent overflow
- Reduce padding on mobile screens
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Header: Hide notifications/auth on mobile, add to mobile menu, make hamburger more visible
- FilmStripSlider: Responsive image sizes (200-500px based on viewport)
- Home page: Smaller text, buttons, and spacing on mobile
- Car detail: Responsive image height, text sizes, and padding
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add staging/production server URLs
- Add step-by-step deployment order (staging first!)
- Add Git repository info
- Add staging and production deployment commands
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>