Adds a green button below the vehicle list that approves all vehicles
and sends notification to the user. Status changes to Completed.
Previously there was no way to trigger the approve + notify flow from UI.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Backend: Include car_name in skipped response
- Frontend: Display skip details (car name + reason like "Already imported (ID: 123)")
- Frontend: Display error details with error message
- Add import process description during loading
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Backend: Review model, full API (public/user/admin endpoints)
- Frontend: list, detail, write/edit pages, admin management
- 1 CC reward for writing a review on completed vehicle requests
- Navigation updates (Header + admin sidebar)
- "Write Review" button on my-request page for completed requests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Added complex_code parameter to search_cars method
- Added /api/carmodoo/complexes endpoint with list of Korean auto complexes
- Added Complex dropdown as first filter in admin Cars search
- Passes complex_code to Carmodoo API as c_danji parameter
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The margin input was making API calls on every keystroke, causing race
conditions and making it difficult to edit values (especially to 0).
Changed to:
- Use defaultValue + key pattern for uncontrolled input
- Save only onBlur (when user clicks away)
- Only call API if value actually changed
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>
- 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>
- 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>
- 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 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 SOLD OUT overlay on car detail page image
- Add SOLD OUT badge next to car name
- Add Sold Out status in Admin Cars detail view
- Add soldout field to Car TypeScript interface
- Create PRODUCTION_VALUES.md for deployment reference
- Update CLAUDE.md with CRITICAL deployment section
- Update TROUBLESHOOTING.md with recurring errors
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add cc_per_banner_view setting to system_settings (default 0.1 CC)
- Update car detail page to use dynamic CC value from settings
- Add CC per Banner View field in admin settings page
- Replace hardcoded 0.1 CC with configurable value
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add show_dealer_comment toggle to admin settings
- Add domestic_export_customs_krw setting for cost page
- Cost page now uses dynamic settings instead of hardcoded values
- Enhance Visitor Stats with dedicated Country Stats card with flags
- Fix hero_banners API route ordering (422 error fix)
- Fix banner toggle logic to check HeroBanner table instead of car.is_banner
- Add country flag emojis for 23+ countries
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Translate car name to English using translateCarName
- Remove Korean year suffix (년)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Wrap banner API call in try-catch to prevent entire function failure
- Fall back to car.is_banner field if banner API returns error
- Local Cars tab now loads even if banner API fails
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change banner checkbox from immediate toggle to local state management
- Add "Update Banner" button for batch saving changes
- Add draggable banner section at top using framer-motion Reorder
- Banner cars now sorted by display_order from server
- Checkboxes reflect current banner state from DB on page load
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add is_banner, soldout fields to Car model
- Add banner toggle API (POST /hero-banners/admin/toggle/{car_id})
- Add soldout APIs (POST/DELETE /cars/{car_id}/soldout)
- Add nightly soldout checker in agent (runs at 3:00 AM)
- Update Local Cars UI with banner checkbox and status column
- Remove hero-banners admin page (functionality moved to Cars page)
- Banner cars sorted to top with purple background
- Soldout cars displayed with gray overlay
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add translateCarName import from i18n.ts for proper multilingual support
- Change default API language from 'ko' to 'en' for hero banners
- Add checkbox column for Local Cars banner registration
- Update Dockerfile with Playwright dependencies
- Add PostgreSQL migration script
- Add banner translation fix script
🤖 Generated with [Claude Code](https://claude.ai/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add Russian language support (title_ru, subtitle_ru) for hero banners
- Add fuel/transmission translations for Mongolian (경유→Дизель, 오토→Автомат)
- Improve Vehicle Requests admin page:
- Display real request ID and user email
- Show detailed request info (maker, grade, year, fuel, mileage)
- Replace modal search with Cars page integration
- Add "Add to Request" flow in Cars page for vehicle recommendations
- Fix image URL handling in FilmStripSlider and car detail page
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Frontend: Next.js 14 with TypeScript
- Backend: FastAPI with SQLAlchemy
- Agent: Carmodoo sync agent
- Deployment: Docker Compose based staging/production setup
- Scripts: Automated deployment with rollback support
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>