Commit Graph

676 Commits

Author SHA1 Message Date
3710251117 feat: EMEX VIN decode → DB catalog entegrasyonu
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
- CATALOG_MAP'e ~40 yeni WMI eklendi (Mitsubishi, Nissan, Volvo, vb.)
- brandFromCatalogCode listesi 55 DB kataloğuna genişletildi
- brand="UNKNOWN" olsa bile catalogCode varsa EMEX sonucu kabul edilir
- emex-catalog: linkPath'li kategorilerde parçalar DB'den yüklenir (scraper bug fix)
- VIN cache: emex_vehicle_vins tablosu ile tekrar VIN'lerde emexdwc.ae atlanır
- getCategoryTree Step 0: VIN cache lookup (~10ms)
- Match sonrası otomatik VIN cache doldurma
- Proaktif cache: ilk decode sonrası matchByName + saveVinCache

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 08:32:34 +00:00
79332003d2 fix: bump pcat cache prefix to invalidate stale empty results
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Old queries cached empty arrays for groups and schemas. Bumping cache
key prefix from "pcat:" to "pcat2:" so new correct queries bypass stale
entries without needing manual Redis flush.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 20:40:15 +00:00
51f630db3c fix: pcat groups query — use schema_images.category_id instead of car_groups
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
car_groups junction table only has data for 2K of 68K cars. Derive groups
from schema_images.category_id which covers 92.6% of records. Also fix
getSchemaImages to filter by category_id instead of empty group_id.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 20:30:53 +00:00
ca4437b245 feat: pcat v2 — full catalog browsing with cars, groups, schema viewer
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Expand pcat API with getCars, getCarGroups, getSchemaImages, getSchemaDetail
endpoints. Add frontend routes for the complete flow:
catalog → model → car → groups → schema+parts with hotspots.
Reuses existing SchemaViewer component for interactive part diagrams.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 20:03:48 +00:00
c61ad8c175 feat: add Pcat catalog browsing — import pc dump, API endpoints, frontend routes
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Import parts-catalogs.com dump into pc schema (72 catalogs, 2788 models,
134K groups). Add pcat-catalog service/controller with Redis caching.
Create frontend routes for catalog → model → group navigation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:52:41 +00:00
13bd112add feat: update catalog page tabs — Sase.Tr, Pl24, Pcat, Emex, Tecdoc
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Expand catalog tabs from 2 to 5. Rename existing PL24/Emex labels,
add Sase.Tr, Pcat, Tecdoc as coming-soon placeholders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:31:05 +00:00
Sase Dev
14e43bc808 feat: CarBrandLogo component + PL24 image pre-download + catalog index fix
- Add CarBrandLogo component with SVG assets for 11 brands (Alpine, Citroën,
  Cupra, Dacia, MAN, Opel, Peugeot, Renault, SEAT, Škoda, Suzuki); falls back
  to logoUrl prop then initial-letter avatar
- Use CarBrandLogo across brand-selector, catalog index, subscription page,
  dashboard home, and vehicle detail page
- PL24: pre-download schema image buffer while auth headers are fresh to avoid
  token expiry on cached URLs; strip buffer before Redis caching
- PL24: fetchVehicleList tries de account first, falls back to main token
- DB: widen catalogVehicles unique index to include serviceName column
- CSS: add Tailwind v4 dark variant declaration

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-07 15:47:43 +00:00
Sase Dev
9d2e534e56 feat: parallel VIN decode (pcat+emex) + member since in profile settings
- Refactor VIN decode chain to launch PartsCatalogs and EMEX in parallel;
  EMEX is race-capped at 3 s — if it doesn't resolve in time, PL24 takes over
- Decision tree: pcat=1 → use pcat; else await EMEX result; else PL24; else candidates
- Add "Member Since" (Kayıt Tarihi) field to profile settings, sourced from user.createdAt
- Add createdAt to auth store User interface

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 20:31:20 +00:00
Sase Dev
24c8f066d5 chore: add SEO audit skill, EMEX migration plan, VIN test harness, and knowledge docs
- Add .agents/skills/seo-audit + .claude/skills/seo-audit skill
- Add .claude/plans/emex-mysql-to-postgres.md migration plan
- Add ralph-vin-test/ VIN decode test harness with progress tracking
- Add knowledge.md, postalMail.txt, ralpRapor.md reference docs
- Update scripts screenshots (quickgroups-tree, vehicles-page)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 19:52:45 +00:00
Sase Dev
19ccaa7b68 fix: bypass Corgi WMI in VIN decode chain + misc integrations
- vehicles.service.ts: remove Corgi from resolveVin chain; go straight
  to PartsCatalogs → PL24 → EMEX without offline WMI lookup
- End condition simplified: return null only when EMEX also fails (no
  corgiKnown fallback)
- Add scripts/test-emex-http.mjs: proxy timing test for EMEX HTTP decode

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 19:51:40 +00:00
7a6b42c2e7 feat: QuickGroups shortcut — VIN SSD + vid=0 for fast category fetch
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
When EMEX DB has no vehicle match (Ford EU, Mercedes etc.), instead of
falling back to full on-demand VIN decode (~8s), use the VIN-decode SSD
directly with QuickGroups.aspx?c={catalog}&vid=0&ssd={vinSsd} (~2-3s).

Tested: Ford Focus CB4 VIN SSD returns 376 categories via QuickGroups.

New step 3.5 in the cascade:
1. pathData → matchByName (DB-only, ~50ms)
2. emexVehicleName → matchByName (DB-only, ~50ms)
3. matchBySsd wizard walk (DB, ~2-3s)
3.5. VIN SSD → QuickGroups shortcut (~2-3s) ← NEW
4. Fallback → full on-demand scrape (~8s)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 15:24:38 +00:00
a74a073009 fix: matchBySsd walks wizard from root SSD instead of VIN SSD
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
VIN-decode SSDs are too long/specific — EMEX returns HTML instead of
JSON when passed to GetWizard2. New approach:
1. Start from root SSD ("")
2. Advance through wizard steps (Europe → Passenger → ...)
3. Find pathData name (e.g. "Focus CB4 2008-2011") in model options
4. Use getWizardVehicles for DB matching

For Ford Focus: wizard finds it at step 3, but Ford DB has no EU
models so it still falls back to on-demand scrape. BMW/Renault with
good DB coverage will benefit from this flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 15:07:28 +00:00
2780609082 fix: matchBySsd wizard flow — use GetWizard2 to find sales designation SSD
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
The VIN-decode SSD is model-level, not variant-level. matchBySsd now:
1. Calls GetWizard2 with VIN SSD → gets sales designation options
2. Finds option matching pathData (e.g. "Focus CB4 2008-2011")
3. Uses that option's key SSD for Vehicles.aspx?ft=findByWizard2
4. Matches motor/variant names against DB

Note: Ford Focus still falls back to on-demand scrape because Ford
DB coverage is only 55 US models (no EU models like Focus/Fiesta).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:56:36 +00:00
53a6296a91 feat: EMEX VIN decode → catalog DB matching via pathData/SSD
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Parse path_data from Vehicle.aspx URLs (Base64-decoded vehicle name),
persist vehicleLabel/vid/pathData in rawData, and add 4-step matching
cascade for category resolution:
1. pathData name → matchByName (DB-only, ~50ms)
2. emexVehicleName → matchByName (DB-only, ~50ms)
3. ssd + catalogCode → matchBySsd (wizard HTTP + DB, ~2-3s)
4. Fallback → on-demand EMEX scrape (unchanged, ~6-13s)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:46:00 +00:00
adfba6c543 test: bypass pcat/pl24 in VIN resolve — EMEX-only test
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Temporarily disable PartsCatalogs and PL24 decode steps to test
EMEX-only VIN resolution speed and reliability.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:35:10 +00:00
8bbd82bc2c feat: service-test EMEX flow — candidate modal + vehicle card + auto-navigate
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
When EMEX returns candidates, show VehicleSelectModal for selection.
When EMEX returns a single vehicle, show vehicle info card and
auto-navigate to the category page via /vehicles/decode.
Failed results still show JSON output as before.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 13:05:28 +00:00
1a552ed8fd fix: handle empty EMEX proxy env vars with proper defaults
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
ConfigService returns empty string (not the default) when env var
exists but is empty. Add || fallbacks in code and set proper defaults
in docker-compose to prevent invalid proxy URL like http://user:pass@:10000.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:21:26 +00:00
0fce6a2266 fix: use undici's own fetch for proxy dispatcher support
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Node's global fetch doesn't support the dispatcher option. Use
undici's exported fetch when proxy is configured, which properly
handles ProxyAgent as a dispatcher.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:13:09 +00:00
ae64e60bf0 feat: pass EMEX proxy env vars through docker-compose
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Add EMEX_USE_PROXY, EMEX_PROXY_HOST, EMEX_PROXY_USER, EMEX_PROXY_PASS
to both api and worker services so the proxy config reaches the
containers at runtime.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 12:07:04 +00:00
66f30a475c fix: move undici to production dependencies
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
undici was in devDependencies, causing MODULE_NOT_FOUND crash in
production where only prod deps are installed. Move to dependencies
since emex.service.ts imports ProxyAgent at the top level.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 11:45:50 +00:00
016860c68a fix: route EMEX HTTP fetches through DataImpulse proxy
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
EMEX server blocks direct server IP requests (geo/bot protection),
causing all HTTP-based VIN decodes to return empty results. Add proxy
support to fetchEmexHtml() using undici ProxyAgent, reusing the same
EMEX_USE_PROXY / EMEX_PROXY_* env vars as the browser service.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 11:29:00 +00:00
7a322c5574 fix(service-test): handle emex notFound/error as failures
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
decodeVinOrCandidates returns { type: "notFound" } or { type: "error" }
instead of null, so data !== null was incorrectly marking these as
success. Now explicitly checks emex result type.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 11:04:43 +00:00
dd75495a1d fix(service-test): show error message when service returns null
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
testService() was swallowing errors — services like parts-catalogs catch
internally and return null, so the outer try/catch never fired. Now each
service call has its own try/catch, and null responses get an explicit
error message.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 10:56:37 +00:00
866ea42dee fix(service-test): rename response 'data' field to 'result' to avoid api client unwrap conflict
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
The api client unwraps response.data automatically, which conflicts
with our testService response having its own 'data' field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 10:26:02 +00:00
03353a703a feat: add service test page for individual VIN decode testing
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Admin-only page at /dashboard/service-test with dropdown to test
each VIN decode service (Corgi, PartsCatalogs, PL24, EMEX, VIN API)
individually or the full cascade. Results shown as JSON on page,
no DB writes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 10:12:50 +00:00
4e838fdace fix(emex): improve wizard vehicle matching with model-based fuzzy search
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
- Backend: add `model` query param to wizard-vehicles endpoint
- Backend: 3-tier matching: exact name → name prefix → model fuzzy
- Frontend: simplified wizard UI, show determined params as tags

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:50:52 +00:00
184bf4741e feat(emex): wizard-based vehicle selection via GetWizard2 API
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Replace static DB-based dropdown chain with live wizard from emexdwc.ae.
The wizard API (GetWizard2) works without auth and shows all models/options
for each catalog (e.g. AU1587 now shows 103 Audi models vs 11 before).

Backend: proxy GetWizard2 + search DB for matching vehicles after wizard completes.
Frontend: step-by-step wizard with breadcrumb navigation, search, and reset.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:43:08 +00:00
e7b1350876 fix(emex): dynamic filter chain with proper field dedup across all catalogs
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
- Detect available filter fields from actual data per catalog
- Skip fields whose values are substrings of optionsRaw (e.g. driveType
  redundant when optionsRaw="LEFT (GSX)")
- Skip fields that duplicate already-added filters (e.g. engine=LHD same
  as driveType=LHD in Land Rover)
- Use optionsRaw as primary variant text in vehicle rows
- Works for all 54 catalogs: Renault (structured), Fiat, BMW, Volvo, etc.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 08:38:01 +00:00
01d5367deb feat(emex): dynamic cascading filters for vehicle selection
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Dropdowns now auto-detect which fields have data (engine, body type,
transmission, drive type, fuel type, variant) and show only relevant
filters. Each dropdown cascades — selecting a value narrows options
for subsequent filters. Handles both structured options_raw (Renault)
and standard DB fields (Fiat, BMW, Volvo, etc).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 08:29:17 +00:00
288a0b06ad feat(emex): replace flat vehicle list with cascading dropdown filters
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Model → Engine → Gearbox dropdown chain narrows 4000+ vehicles down
to a manageable selection. Parses options_raw key:value pairs for
catalogs that have structured data (Renault). Falls back to engine/
transmission fields for others (BMW, Volvo, etc).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 06:43:43 +00:00
a120e542a3 feat(emex): expand group hierarchy mapping to 795/795 (100% coverage)
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Parsed 17 catalogs from emexdwc.ae + auto-categorized remaining by name.
Normalized duplicate top-level categories (Brakes→Brake System, etc).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 06:27:20 +00:00
50847c5fd8 feat(emex): add 3-level category tree view with static group hierarchy mapping
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Parse emexdwc.ae QuickGroups hierarchy and create a static gid→path mapping
(384 groups). Groups page now shows collapsible tree (Body > Vehicle Front >
Bumper/Parts) instead of flat list. Unmapped groups fall back to flat display.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 06:15:08 +00:00
2e3c609a72 feat(emex): use SchemaViewer for group parts page with image pagination
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Replace stacked images + plain table with interactive SchemaViewer (same as PL24).
Backend transforms response to SchemaViewer-compatible format (Part/SchemaPic types).
Add prev/next pagination for groups with multiple schema images.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 05:42:23 +00:00
1e8a049219 feat: EMEX catalog integration — schema, data migration, backend & frontend
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Redesign emex_* tables from vehicle-centric to catalog-centric structure with
junction tables (emex_vehicle_group_links, emex_vehicle_part_links). Migrate
92M+ rows from emex DB via postgres_fdw. Add EmexCatalogService for browse
and VIN pre-scraped matching, with Redis caching. Frontend catalog page now
has PL24/Emex tabs with full drill-down routes (brand → vehicle → group → parts).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 04:06:29 +00:00
63f6309bf3 fix: allow storage.sase.tr in CSP for schema images
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Helmet's default CSP blocked images from storage.sase.tr (different
origin). Add it to img-src and connect-src directives.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:31:59 +00:00
91c204db0d fix: allow storage.sase.tr in CSP for schema images
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
Helmet's default CSP blocked images from storage.sase.tr (different
origin). Add it to img-src and connect-src directives.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:31:54 +00:00
0d5e254479 fix: SPA fallback via HttpExceptionFilter for non-API 404s
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Move SPA fallback from main.ts catch-all (didn't work - NestJS 404
handler runs first) to HttpExceptionFilter. Now non-API GET 404s
serve index.html so client-side routing works for /dashboard/* etc.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:27:10 +00:00
2e9e4ede50 fix: SPA fallback via HttpExceptionFilter for non-API 404s
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
Move SPA fallback from main.ts catch-all (didn't work - NestJS 404
handler runs first) to HttpExceptionFilter. Now non-API GET 404s
serve index.html so client-side routing works for /dashboard/* etc.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:27:04 +00:00
90ad75701d fix: add SPA fallback for client-side routing
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
NestJS was returning 404 JSON for SPA routes like /dashboard/search
because ServeStaticModule couldn't find a matching file and the request
fell through to NestJS router. Add explicit catch-all GET handler after
app.init() to serve index.html for non-API routes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:22:13 +00:00
01bfb80750 fix: add SPA fallback for client-side routing
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
NestJS was returning 404 JSON for SPA routes like /dashboard/search
because ServeStaticModule couldn't find a matching file and the request
fell through to NestJS router. Add explicit catch-all GET handler after
app.init() to serve index.html for non-API routes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:22:08 +00:00
f2b387850e fix: add traefik.docker.network label to fix staging routing
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Traefik was picking the wrong Docker network (_default) for the staging
api container, causing requests to hang. Force it to use the coolify
network which is shared with the Traefik proxy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:12:24 +00:00
95aaab50b5 fix: add traefik.docker.network label to fix staging routing
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
Traefik was picking the wrong Docker network (_default) for the staging
api container, causing requests to hang. Force it to use the coolify
network which is shared with the Traefik proxy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:12:13 +00:00
b5c54176cd refactor: remove hardcoded Traefik labels, let Coolify manage FQDN routing
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
Coolify adds its own Traefik labels when FQDN is set on the service.
This allows different domains per environment (sase.tr vs dev.sase.tr).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 14:00:45 +00:00
dfd6225a23 fix: hardcode sase.tr in Traefik label (env var not interpolated in labels)
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 13:44:32 +00:00
f07ee1ef9b fix: rename redis service to sase-redis to avoid coolify network conflict
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
The 'redis' hostname resolved to coolify-redis (Coolify's internal Redis)
instead of our compose Redis service due to shared coolify network.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 13:39:58 +00:00
465349734b fix: remove extra userId argument from pl24Service.decodeVin call
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 13:34:23 +00:00
cfbf85c5c0 feat: add Coolify deployment config (Docker Compose + ServeStatic)
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
- Add multi-stage Dockerfile (node:22-alpine, pnpm, Chromium for Playwright)
- Add docker-compose.coolify.yml with api, worker, redis services
- Add @nestjs/serve-static for serving Vite frontend from NestJS
- Add .dockerignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 12:53:53 +00:00
Sase Dev
ce8784014e feat: EMEX HTTP decode + multi-candidate selection UI
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
Deploy / Deploy to Production (push) Has been cancelled
Replace Playwright browser with pure HTTP for EMEX VIN decode:
- Vehicles.aspx, QuickGroups.aspx, QuickDetails.aspx all work
  without authentication — no session/browser needed
- VIN decode drops from ~10-20s (Playwright) to ~1-5s (HTTP)
- Playwright browser kept as fallback if HTTP fails

Add multi-candidate selection for EMEX (mirrors PartsCatalogs flow):
- EmexCandidate interface matches PcatCar shape so VehicleSelectModal
  renders without changes
- decodeVinOrCandidates(): single HTTP fetch returns vehicle OR
  candidates (avoids double Vehicles.aspx request)
- decodeVinByIndex(): resolves user-selected candidate by index
- vehicles.service: emexCandidates in VinResolveResult, emexCarIndex
  param in decodeVin/resolveVin, resolveEmexCarByIndex() method
- vehicles.controller: @Body("emexCarIndex") accepted
- search.tsx: candidateSource state, handleCandidateSelect sends
  emexCarIndex or pcatCarId based on source

Test VIN NM417800006410193 (Fiat SIENA) now shows 2-option modal.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-05 09:46:25 +00:00
Sase Dev
f29a923e6e fix: deploy.sh git pull origin master → main
Some checks failed
CI / Lint, Typecheck, Test & Build (push) Has been cancelled
2026-03-02 00:32:31 +00:00
Sase Dev
72c0de65de docs: update INDEX.md + add catalog module, Ford/PSA legacy catalog, shared vehicles
- CatalogModule: VIN-less PL24 catalog browser (brands, models, categories, parts)
  - Supports P5 Modern (REST) and P4 Legacy (Ford, PSA) catalog architectures
  - Ford variant selector (model-year/engine/gearbox), PSA variant selector (body/engine/gearbox)
  - New API endpoints: ford-config, psa-bodies, psa-engines, psa-gearboxes, brands/:name/catalogs
- Shared vehicles: vehicles table decoupled from users via userVehicles junction table
- PL24 Ford Legacy service: comprehensive HTML-scraping for Ford/PSA/Hyundai/Kia/Nissan/Opel/Volvo
- PL24 types and service updated for P4 Legacy brand support
- Categories/parts service updated for dual FK (vehicleId + catalogVehicleId) pattern
- Catalog browser frontend routes and components
- docs/INDEX.md: updated with all new endpoints, components, hooks, routes (2026-03-02)
- docs/pl24-catalog/: per-brand catalog exploration docs
- scripts/migration-shared-vehicles.sql, pl24-catalog-explorer.js, posthog-dashboards.sh

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 00:31:15 +00:00