v0.20.0 · Release notes

What's new

Product updates, improvements, and fixes shipped to HGV Traders.

14 releases · 511 public updates

v0.20.0

Latest

110 updates

Features

55
  • **account:** add auth-gated account route group shell
  • **account:** add candidate profile page and form
  • **account:** add candidate-facing message thread view
  • **account:** add CV upload/download to the candidate profile page
  • **account:** add DVSA licence check code submission to profile form
  • add JSON-LD structured data to auction lot detail page
  • **jobs:** add AI spam/quality prescreen for job applications
  • **jobs:** add candidate option groups (licence, vehicle, route/shift, endorsements)
  • **jobs:** add candidate profile get/update server actions
  • **jobs:** add candidate-facing CV application form
  • **jobs:** add candidate-facing job application submit action
  • **jobs:** add CV upload/download presigned URL helpers

Bug Fixes

53
  • **account,jobs:** recover from thrown exceptions, gate polling, replace emoji icon
  • **account:** clear stale licence number when DVSA check code is cleared
  • add index on OrganisationUser.userId for auth hot path
  • add SEO metadata to the new dealer stock/jobs listing pages
  • cache getFinanceConfig with unstable_cache, invalidate on writes
  • dashboard pattern drift (org membership, saved-search count, business form)
  • **dashboard:** fix crashes, data loss, and stale-org bugs across dealer dashboard
  • dealer jobs link uses proper /dealers/[slug]/jobs route
  • dealer stock link uses proper /dealers/[slug]/stock route
  • dealer/supplier/franchised profile title format + dedupe suffix
  • dedupe loadBusinessListingPage calls with React cache()
  • deterministic subscription order, Zod inbox params, cache enquiry stats

Performance

2
  • add composite indexes for Stock/Job/Conversation/Business dashboards
  • parallelize onboarding image fetches with Promise.allSettled

v0.19.0

28 updates

Bug Fixes

24
  • **business:** correct claim CTA, date pluralization, and cache-hit Date bugs
  • **buyer:** preserve TRADE tier on HGV_VERIFIED revocation
  • **buyer:** promote to TRADE tier from the dashboard profile form too
  • **compare:** stabilize getCompareIds snapshot reference to stop infinite render loop, closes
  • **dashboard:** correct plan-eligibility messaging and full-slot CTA
  • **dashboard:** show unread count badge on the Messages nav item
  • **enquiry-form:** guard against double-submit from a fast double-click
  • **enquiry:** close dead-end and wasted-step bugs in buyer verification gate
  • **enquiry:** enforce pay-per-lead lock server-side on reply actions
  • **finance-calculator:** keep deposit value when switching finance products
  • **leads:** seed a real subscription discount so pay-per-lead's pitch isn't 0%
  • **mcp:** stop get_job_detail leaking internal job fields

Features

4
  • **articles:** add share button, fix placeholder contrast, verify rich body content
  • **dashboard:** redesign locked-lead pay-per-lead experience
  • **events:** full polish pass — real content, count/hydration bugs, share, related, placeholders
  • **leads:** cooldown on pay-per-lead toggle, auto-apply discount platform-wide

v0.18.0

84 updates

Performance

4
  • **hot-paths:** index Message/Notification lookups, cache taxonomy pages (FLI-260)
  • **marketing,stock:** dedupe slug queries, cache catalogue/social-proof, index Post (FLI-243)
  • **plan:** cache the plan catalogue read, fetch it once per nav render
  • **saved-searches:** cache live-count lookups; add unit tests for compare/filter logic

Bug Fixes

26
  • **articles:** fix code-review findings in the articles CMS epic
  • **auth:** route org-scoping call sites through canonical lib/auth/org.ts helpers
  • **dashboard:** allow horizontal scroll on dashboard tables instead of clipping
  • **dashboard:** server-side pagination for dealer stock list
  • **dealer:** rebrand Companies House badge as HGV Traders Verified Dealer trust signal
  • **email:** centralise base-URL resolution and fix broken email/checkout links
  • **enquiry:** add Stripe idempotency key and org-scoped rollback to lead unlock
  • **enquiry:** close double-charge race in unlockLeadAction
  • **errors:** add scoped error boundaries to high-traffic leaf segments
  • **finance:** resolve active org via resolveActiveOrgId, not session field
  • **leads:** guard settings page and toggle action against missing config/subscription
  • **leads:** isolate enquiry submission from lead-scoring failures

Features

54
  • **articles:** add author profiles and bylines
  • **articles:** add autosave, revision history, and live preview
  • **articles:** add per-article SEO controls
  • **articles:** add R2 image uploads for featured and inline images
  • **articles:** add scheduled publishing for articles
  • **articles:** add schema foundation for CMS toolkit
  • **articles:** add tags and related articles
  • **articles:** replace raw HTML textarea with BlockNote editor
  • **leads:** add anonymized signal chip generator
  • **leads:** add daily auto-reveal job for unpaid expired leads
  • **leads:** add dealer-facing pay-per-lead opt-in and payment method setup
  • **leads:** add discount percent field and platform-disabled cleanup event

v0.17.0

16 updates

Features

8
  • **business:** durable dealer reputation surfaced on dealer profiles (FLI-184), closes
  • **enquiry:** funnel dashboard + draft retention for buyer-verification gate (FLI-182)
  • **seo:** add /asset-types hub, internal links, and ItemList JSON-LD (FLI-181), closes
  • **seo:** AutoDealer JSON-LD enrichment + sitemap source-of-truth dedupe (FLI-181)
  • **stock:** add recently-viewed listings strip on homepage (FLI-184)
  • **stock:** emit Vehicle/Car JSON-LD and richer Offer on stock detail (FLI-180)
  • **stock:** side-by-side listing comparison for buyers (FLI-184)
  • **stock:** verified badge, social proof, accessible gallery (FLI-180)

Performance

1
  • **dashboard:** bound messages/analytics reads, fix spotlight N+1 (FLI-172)

Bug Fixes

7
  • **enquiry:** defer buyer verification to submit time (FLI-182)
  • **marketing:** resolve trial-copy contradiction, add social proof, pricing anchoring (FLI-183)
  • **messaging:** remove dead conversation action + rate-limit sendMessage (FLI-164)
  • **perf:** batch N+1 queries and bound unbounded scans in import/lifecycle jobs (FLI-191)
  • **saved-search:** user-scope terminal mutation + rate-limit create/update (FLI-165)
  • **seo:** noindex non-canonical faceted /stocks permutations (FLI-181)
  • **spotlight:** stop value-importing Prisma enums into client bundle (FLI-204)

v0.16.0

16 updates

Bug Fixes

5
  • **claim:** atomic submit dedupe via partial unique index + P2002 catch
  • **claim:** guard approve/reject against terminal-status claims
  • **footer:** link all three business directories in Company group
  • **footer:** restore Getting started link in overflow strip
  • **merge:** link category/sub-category, guard transaction, layout + test gaps

Features

11
  • **claim:** add business-claim inbox payload schema, title and label
  • **claim:** add email-domain claim signal helper
  • **claim:** claim emails honour notification preferences
  • **claim:** disable approve/reject controls for resolved claims
  • **claim:** email claimant on approve/reject via Inngest
  • **claim:** public claim page, form and detail-page CTA
  • **claim:** public submit-claim action with dedupe and already-claimed guards
  • **claim:** show duplicate candidates in the claim review flow
  • **merge:** add BusinessSlugRedirect model
  • **merge:** duplicate business detection helper
  • **merge:** resolve business slug redirects on public pages

v0.15.0

7 updates

Bug Fixes

4
  • **analytics:** make stock view/enquiry counters forgery-resistant (FLI-134)
  • **dvla:** deny DVLA lookup when active org does not resolve (FLI-133)
  • **jobs:** gate public-API job publish on plan/slot limit (FLI-136)
  • update stock image key format and refactor transaction conflict handling

Features

3
  • **billing:** enhance registration and billing flow with plan selection
  • **dashboard:** enhance dashboard overview and imports functionality
  • **mot:** integrate MOT history functionality into stock management

v0.14.0

11 updates

Features

1
  • **api:** add new scripts for API documentation checks and stock seeding

Bug Fixes

10
  • **api-v1:** harden public input validation and add field-leak tests
  • **api:** expire and revoke public API bearer tokens (FLI-100)
  • **api:** explicit DTOs, validated params & deterministic org selection for public v1 (FLI-105)
  • **api:** guard anonymous analytics beacons against abuse (FLI-104)
  • **api:** harden public v1 reads, search and org selection (FLI-102/91/105)
  • **api:** rate-limit auth endpoint and cap tokens per user (FLI-99)
  • **api:** whitelist public v1 read payloads and harden new-tab links (FLI-88)
  • harden audit backlog for org scoping, rate limits, and public API
  • **stock:** atomic plan/slot publish gate + gate/limits test coverage (FLI-117)
  • **webhooks:** unify delivery path and add replay-protected signatures (FLI-90)

v0.13.0

3 updates

Features

3
  • add migration scripts to package.json
  • implement outbound webhooks and public REST API enhancements
  • update event management and migration documentation

v0.9.0

3 updates

Features

3
  • **dashboard:** enhance dashboard functionality with new components and data handling
  • **dashboard:** enhance dashboard overview and enquiry management
  • **dashboard:** overhaul enquiries management and enhance inbox features

v0.8.0

10 updates

Features

8
  • **jobs:** integrate dynamic job options into forms and tables
  • **webhooks:** add crypto, sign, and dispatch utilities
  • **webhooks:** add settings UI -- webhooks management page
  • **webhooks:** add STOCK_UNPUBLISHED event and Webhooks sidebar link
  • **webhooks:** add webhook dispatch, deliver, and prune Inngest functions
  • **webhooks:** add webhook endpoint server actions
  • **webhooks:** add WebhookEndpoint and WebhookDelivery schema
  • **webhooks:** wire dispatch into enquiry, stock, and job event sources

Bug Fixes

2
  • **webhooks:** improve crypto error handling and hex validation
  • **webhooks:** replace setTimeout with AbortSignal.timeout in webhook delivery

v0.6.0

4 updates

Features

4
  • **dashboard:** enhance forms and layouts for improved user experience
  • **marketing:** enhance header and user menu styles with new variant handling
  • **marketing:** enhance loading states and page structure
  • **stock:** enhance stock card and reveal buttons with icon-only option

v0.5.0

1 update

Features

1
  • **articles:** enhance articles page and loading state

v0.4.0

1 update

Features

1
  • **jobs:** enhance job listing and management features

v0.2.1

217 updates

Features

164
  • add /api/dvla/lookup proxy route with duplicate VRM check
  • add /api/makes and /api/models search routes
  • add MakeCombobox and ModelCombobox components
  • add VehicleMake and VehicleModel schema and seed data
  • analytics, events, stock search, and dashboard polish
  • **analytics:** add analytics navigation to jobs and business pages
  • **analytics:** add business analytics series lib
  • **analytics:** add business event tracker and wire dealer public page
  • **analytics:** add job analytics series lib
  • **analytics:** add job event tracker and wire public job page
  • **analytics:** add job-events and business-events API routes
  • **analytics:** add JobEvent and BusinessEvent schema models

Bug Fixes

53
  • **analytics:** increment viewCount/enquiryCount in real-time
  • **analytics:** rename stock enquiries label, add invariant note, swap glyphs for Lucide
  • **api:** standardise response envelopes on checkout and stock-events routes
  • **api:** verify org ownership on R2 presign endpoint
  • **business:** replace hardcoded colours with semantic tokens in CH section
  • **buyer:** add createdAt to PlatformConfig to satisfy global schema constraint
  • **buyer:** add missing createdAt/updatedAt to EnquiryIntent and CountryRiskConfig
  • **buyer:** catch Twilio send errors in sendPhoneOtp, clean up OTP token on failure
  • **buyer:** merge double stock query and add Zod guard on preferredSpecJson in check-match route
  • **buyer:** null out hgvVerifiedByUserId on revoke; add enquiries.updatedAt backfill migration
  • **buyer:** only create EnquiryIntent when buyerProfile is present
  • **company:** org scope in verify action, env guard, shared ChDataJson type