Sase Dev
7bc78a6f69
chore(lint): manual cleanup batch 4 — noNonNullAssertion + small fixes
...
- noNonNullAssertion (42 → 0): replaced ! assertions with explicit null guards across auth.module, storage.service, pl24-auth, categories.service, catalog.service, parts.service, emex.browser, emex.service, parts-catalogs-auth, pl24-ford-legacy, email.service, database.provider, jobs/processors, psa-variant-selector, vehicles/$id/categories, catalog/$brandName
- buildTree: skip orphaned items instead of asserting map.get
- emex.browser.acquirePage: explicit context check before newPage
- pcat-auth.getIstanbulTime: graceful UTC fallback if Intl parts missing
- email.send: gate on both postalApiUrl + postalApiKey for type narrowing
- categories.service: PSA root-fallback now early-returns when category.vehicleId missing (catalog-only categories don't have a sibling root)
- pl24-ford-legacy: createHash from "node:crypto", URL building uses single template literals, useDefaultParameterLast — required modelYear/engine/gearbox params (callers already supply them)
- pcat-auth: h.origin / h.referer literal-key access
- index.tsx: <button type="button"> on mobile menu toggle
- parts-panel + admin/users: keyboard handler for clickable rows (Enter/Space)
- ford-legacy: useOptionalChain on item.name?.toUpperCase()
Lint count: 155 → 114. Remaining: 121 noExplicitAny + 3 small.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 17:10:28 +00:00
Sase Dev
80fddf2864
chore(lint): manual cleanup batch 3/3 — finish noArrayIndexKey + format pass
...
- group 6 finished: convert remaining 9 Array.from skeleton patterns (index, demo, search, history) using KEYS_N + dynamicKeys helpers
- biome-ignore for legitimate column-index keys in column-stack components
- biome --write format pass
Lint count: 218 → 155 (614/769 fixed cumulatively, 80%).
Remaining (legacy): 121 noExplicitAny + 42 noNonNullAssertion + ~9 small. These need typed refactors and aren't safe to auto-fix (--unsafe drops the ! assertions and breaks strict TS); deferred to a follow-up.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 16:54:40 +00:00
Sase Dev
0af3fbf725
chore(lint): manual cleanup batch 1/3 (groups 1-5)
...
- group 1 (catalog.service): rename categoryId→categoryIdInput param + local categoryId; init pl24Categories with Awaited type; fix img alt + scroll buttons
- group 2 (useButtonType): add type=button to 12 buttons (demo.tsx, index.tsx)
- group 3 (noSvgWithoutTitle): add role+aria-label to 13 decorative svgs
- group 4 (noAssignInExpressions): convert 13 while((m=regex.exec())) → for...of matchAll (pl24-ford-legacy + emex.service)
- group 5 (useExhaustiveDependencies): correct deps in __root user identification, subscription onboarding, model-list-columns; biome-ignore for legitimate single-trigger effects
Lint count: 769 → 218
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 16:42:36 +00:00
Sase Dev
3184e4c619
style: apply biome safe auto-fixes
...
Run 'biome check --fix' on apps/api/src and apps/web/src to clear
the safe-fixable lint backlog (151 files: parseInt → Number.parseInt,
isNaN → Number.isNaN, organize imports, etc.). 769 errors remain
that require manual changes (mostly noExplicitAny).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 16:13:56 +00:00
Sase Dev
f35d64f2be
feat: catalog browser polish + design system refresh + translation pipeline
...
- catalog: P5 restriction selector flow (mainGroupsPath), grid/tree/columns view modes for brands and models with persisted user settings
- translations: bulk translateMany() path with 1d cache-miss TTL, expanded automotive dictionary; categories.service now drives EN→TR via TranslationsService instead of mapper-side strings
- pcat: migrate auth from v1 JWT to v3 widget tokens (TWS- api-key + supporting X-* headers, IP-bound via DataImpulse proxy)
- pl24: new fetchP5Restrictions() for restriction-level navigation
- subscriptions: trial extended 7 → 30 days
- design: oklch color tokens, brand semantic color, Geist + Instrument Serif fonts, tinted shadows, button "brand" variant with hover-lift, accessible focus rings, skip link, 404 NotFound page, auth layout polish
- nginx: dynamic resolver for Faro upstream
- config: OPENROUTER_API_KEY env (used by emex translate bootstrap script)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-09 15:54:30 +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