75 Commits

Author SHA1 Message Date
AutonetSellCar Deploy
72eb8144e0 feat: Quick import on Carmodoo search result click
Click a car in Carmodoo search results to instantly import it and
open the detail modal with images. If already imported, opens the
existing car's detail modal instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 15:17:45 +09:00
AutonetSellCar Deploy
b17840ef75 feat: Add search/filter bar to admin cars page
- Backend: Add search (car name/plate number), color, year filters to GET /api/cars
- Frontend: Add filter bar with car name/plate, color, year range inputs
- Clear button resets all filters

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 14:54:01 +09:00
AutonetSellCar Deploy
958ea252bb feat: Improve PDF downloads in admin car detail modal
- Rename image PDF to {carName}_{carNumber}.pdf
- Add performance check PDF download button (blue, next to image PDF)
- Performance check PDF named {carName}_{carNumber}_성능점검표.pdf

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 18:00:06 +09:00
AutonetSellCar Deploy
a8aced66a8 feat: Add PDF download button for car images in admin car detail modal
- Download all car images as a single PDF (A4 landscape, one image per page)
- Button shows image count and displays in modal header for easy access
- Uses jsPDF library for client-side PDF generation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 17:41:00 +09:00
AutonetSellCar Deploy
b5d4b8b5bd fix: Reorder admin sidebar menu - move Dealers under Users
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 17:16:19 +09:00
AutonetSellCar Deploy
a5a87e78e8 fix: Prevent redirect to login on dealer apply page during auth loading
Wait for isLoading to complete before checking user state to avoid
premature redirect when navigating from profile page.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 16:44:08 +09:00
AutonetSellCar Deploy
e274bc763d feat: Add dealer apply link to profile and agreement step to dealer application
- Add dealer program section to profile page with apply/view card button
- Add 2-step dealer application: privacy consent + obligations agreement before form
- Add all translations (en/mn/ru/ko) for new dealer agreement UI

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 16:24:35 +09:00
AutonetSellCar Deploy
3f27297c4a refactor: Remove unused DB translation system
Static dictionary (i18n.ts CAR_TRANSLATIONS) already covers all terms.
DB translations table had only 179 entries used as fallback and was
never actually reached. Simplifies useTranslate hook to static-only.
DB table preserved for safety.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 23:24:38 +09:00
AutonetSellCar Deploy
03f277c6f1 fix: Wrap ternary branch in fragment to fix JSX syntax error
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 09:22:49 +09:00
AutonetSellCar Deploy
641bd37f64 feat: Add "Send Recommendation" button to Vehicle Requests admin
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>
2026-02-18 09:20:42 +09:00
AutonetSellCar Deploy
02a88da430 fix: Show skip/error reasons in car import results
- 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>
2026-02-18 09:08:58 +09:00
AutonetSellCar Deploy
d98e9287d3 fix: Show skeleton instead of sample images during banner loading
Sample car images (Tesla, Sportage etc.) now only appear as fallback
when the API fails to respond within 3 seconds. During normal loading,
a pulse-animated skeleton is shown instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 08:58:57 +09:00
AutonetSellCar Deploy
8e230c537c feat: Add Review (사용후기) board system with CC reward
- 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>
2026-02-18 08:42:35 +09:00
AutonetSellCar Deploy
fb3f3f6127 feat: Add Analytics component with Umami and Clarity support
- Add Analytics.tsx component for tracking with Umami (self-hosted) and Microsoft Clarity
- Update layout.tsx to include Analytics component
- Environment variables: NEXT_PUBLIC_UMAMI_WEBSITE_ID, NEXT_PUBLIC_CLARITY_ID

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-08 20:14:36 +09:00
AutonetSellCar Deploy
346018c4fb feat: Add Complex (단지선택) filter to Carmodoo search
- 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>
2026-02-01 23:00:35 +09:00
AutonetSellCar Deploy
a65c4bbfcf fix: Margin input not saving - change onChange to onBlur
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>
2026-02-01 22:31:15 +09:00
AutonetSellCar Deploy
ed48cac820 feat: Show user's recommended vehicles in Cost Calculator dropdown
- Fetch vehicles from user's MyRequest
- Show dropdown with vehicle names and prices
- Auto-select first vehicle if available
- Show 'Example: 20,000,000 KRW' if no vehicles
2026-02-01 21:42:11 +09:00
AutonetSellCar Deploy
f785e85270 fix: Prevent duplicate car creation when adding from All Cars tab
- Backend: Check local_car_id first before creating new car
- Frontend: Pass local_car_id to indicate car already exists in DB
2026-02-01 21:29:51 +09:00
AutonetSellCar Deploy
fd0a480ed2 fix: Add getImageUrl to handle relative image paths in MyRequest page 2026-02-01 21:25:24 +09:00
AutonetSellCar Deploy
b340d338ff fix: Remove car_id property from adminAddVehicle call to fix TypeScript error 2026-02-01 21:16:03 +09:00
AutonetSellCar Deploy
5881126408 feat: Add Request functionality to All Cars tab
- 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>
2026-02-01 21:13:55 +09:00
AutonetSellCar Deploy
c9f03c1f86 fix: Remove non-existent dealer_description property from car object 2026-02-01 20:53:17 +09:00
AutonetSellCar Deploy
ef0e25aff6 fix: Correct variable name from searchResults to cars 2026-02-01 20:52:11 +09:00
AutonetSellCar Deploy
feb32a8cb6 fix: Fix handleImport to send correct data format
- 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>
2026-02-01 20:50:58 +09:00
AutonetSellCar Deploy
37ee4cff1d feat: Swap images between About and Contact pages
- 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>
2026-01-15 22:38:42 +09:00
AutonetSellCar Deploy
b97ea784b0 feat: Add images to About and Contact pages
- 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>
2026-01-15 22:32:22 +09:00
AutonetSellCar Deploy
7c97d9aecb feat: Add Promo Interest column to admin users page
- 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>
2026-01-13 07:51:55 +09:00
AutonetSellCar Deploy
25caadde95 feat: Use carmodooApi for PromoPreference to share data with Request Vehicle
- 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>
2026-01-13 00:19:08 +09:00
AutonetSellCar Deploy
d1b14f8b76 fix: Center Request Vehicle button and translate maker/model names
- 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>
2026-01-13 00:07:18 +09:00
AutonetSellCar Deploy
cc1022aae3 fix: Position PromoPreference next to Request Vehicle button
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 23:56:58 +09:00
AutonetSellCar Deploy
800b2b4c61 fix: Remove trailing slashes from makers/models routes
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>
2026-01-12 23:52:16 +09:00
AutonetSellCar Deploy
3bd1e49699 fix: Reorder API routes and update main page layout
- 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>
2026-01-12 23:48:06 +09:00
AutonetSellCar Deploy
2354ee8bbb fix: Remove duplicate saving key from i18n interface
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 23:41:57 +09:00
AutonetSellCar Deploy
0cac315818 fix: Remove duplicate selectMaker/selectModel from i18n
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 23:40:12 +09:00
AutonetSellCar Deploy
305aa2a470 fix: Use register instead of signUp in PromoPreference
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-12 23:38:37 +09:00
AutonetSellCar Deploy
2720689515 feat: Add promo preference survey on main page
- 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>
2026-01-12 23:37:31 +09:00
AutonetSellCar Deploy
2378392f95 fix: Wrap useSearchParams in Suspense boundary for board page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 01:40:56 +09:00
AutonetSellCar Deploy
0b6bdf44e3 fix: Add board_enabled to SystemSettings interface
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 01:39:20 +09:00
AutonetSellCar Deploy
b86e50e734 fix: Import useLanguageStore for language property in board pages
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 01:38:03 +09:00
AutonetSellCar Deploy
d4b32794dc fix: Replace isLoggedIn with token/user check in board pages
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 01:36:14 +09:00
AutonetSellCar Deploy
e0c1f4540b feat: Add bulletin board system
- 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>
2026-01-10 01:34:41 +09:00
AutonetSellCar Deploy
b8f0ae4d28 feat: Add real-time visitor map with IP geolocation
- 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>
2026-01-05 18:31:22 +09:00
AutonetSellCar Deploy
4858965087 feat: Add car availability check feature
- 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>
2026-01-05 08:01:40 +09:00
AutonetSellCar Deploy
b8cab29ed2 Add 'Seed Defaults' button to load all predefined translations
- Add /translations/seed-all-defaults API endpoint
- Loads all DEFAULT_TRANSLATIONS (makers, models, colors, fuels, transmissions)
- Includes 100+ predefined translations (Mohave, Sonata, colors, etc.)
- Add 'Seed Defaults' button to admin translations page

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 20:53:14 +09:00
AutonetSellCar Deploy
77e707167f Fix Mixed Content issue on staging (HTTPS/HTTP mismatch)
- 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>
2026-01-03 18:32:00 +09:00
AutonetSellCar Deploy
7c943d8553 Add SNS Marketing Campaign feature
- 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>
2026-01-03 18:21:17 +09:00
AutonetSellCar Deploy
718c5b0474 Add staging environment documentation and minor fixes
- 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>
2026-01-03 16:22:34 +09:00
AutonetSellCar Deploy
b0a78abeb3 Add directly purchased cars to My Requests page
- 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>
2026-01-03 13:10:00 +09:00
AutonetSellCar Deploy
757241bb4e Add car_id field to RequestVehicle interface
- 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>
2026-01-03 12:28:13 +09:00
AutonetSellCar Deploy
0e55ab201a Fix vehicle click issue in My Vehicle Requests page
- 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>
2026-01-03 12:26:47 +09:00