Delivery
A separate analytics dashboard asks the user to stop, switch context, re-find the vehicle and interpret โ while they are already looking at the listing in question.
VINSAVVY ยท IN-CONTEXT INTELLIGENCE ยท SHARED DATA MODEL ยท SCALABLE DATA NORMALISATION
Designing a browser extension, dealer workspace and admin console on one vehicle-data model, for dealerships pricing against a live market.
My role: Product UX/UI design across all three surfaces: the shared scope model, interaction design and admin workflows. Engineering owned data collection, decoding and the normalisation pipeline.
Project status: Completed product design across three surfaces. Production implementation has not been independently verified for every feature described.
VinSavvy aggregates and decodes vehicle data scraped from dealership websites so dealers can price against their local market. The backend handled collection; my design problem was delivery and comparability.
Aggregated data only becomes intelligence at the moment someone has to decide something.
The product design spans three surfaces. The extension contains five tools; the workspace and admin console provide the supporting workflows.

A given vehicle configuration can be listed by several dealerships in the same metro region at different prices. The useful question for a dealer is not what a car is worth in the abstract, but where their price sits against the units a shopper would compare it to.
The data to answer that is spread across competitor websites, and VinSavvyโs backend collects and decodes it. Two problems stood between that data and a decision:
A separate analytics dashboard asks the user to stop, switch context, re-find the vehicle and interpret โ while they are already looking at the listing in question.
Dealership websites do not share a vocabulary. What one site presents as a discount, another splits across rebates, add-ons and dealer fees. Scraped numbers are not comparable until something reconciles those labels.

No user research was conducted for this project. Four inputs informed the design, each of which also set a constraint.
The decision that holds the product together is the scope model. Every market metric in VinSavvy is expressed against the same three columns: My Inventory, Competitors, Region. Supply counts, price ranks, lowest and median and highest price โ all read the same way in the extensionโs VIN Market panel and in a full-width workspace table, because the entities behind them are the same objects.
Those entities flow in one direction. The admin console defines the dealership, its region, its group and its competitor pool. The workspace lets a user compose competitive sets from that pool and save vehicles against them. The extension reads both, and renders the result on whatever VDP the user is looking at.

The brief for this tool was market pricing data. How that data met the user was a design decision, and it went through two explorations.
The first followed the conventional pattern: show the vehicleโs current discount ranking alongside the market range, and let the user work out a new price from it. Laying that out exposed the problem โ the screen answered a question the user had not asked and left the actual task undone, since they still had to pick a candidate price, work out the rank it would produce, and adjust.
The second inverted the inputs and outputs. The design hypothesis was that working backward from a target rank could be more useful than iterating through candidate prices. So the user sets the discount ranking they want, and the Optimum Pricing Metric returns the discount percentage, discount in dollars and sell price required to reach it โ with the market context it was calculated against on the same screen: lowest, median and highest price, and supply across the three scope columns.
Report the rank, and the user still has to do the work. Take the rank as input, and the product does it.

The hardest design work in this project is not a screen a dealer ever sees.
Scraped price data is only comparable once the platform knows what each dealership website means by each number โ which field is MSRP, which line is a genuine discount, which is an add-on. Automated inference could not be trusted as the sole source of truth here, because a wrong mapping silently corrupts every metric downstream.
Engineering owned the normalisation pipeline itself. What I designed is the configuration model and interface that feeds it: when an admin adds a dealership, they map that siteโs vocabulary through moniker fields โ an MSRP moniker, add-on monikers, custom entries โ stored alongside the dealershipโs region, group, brands, competitor set and subscription terms. The intent is that the per-site knowledge enters the system through an admin form rather than through code, so that adding a dealership does not require a development change. This case study shows the configuration design; its effect on production onboarding and engineering effort has not been measured.

Four conditions shaped more of this product than any feature did:
Retrieval is uneven, so supply counts are shown per scope column on every comparison. A thin comparison set stays visibly thin instead of being averaged into a single confident-looking market figure โ the interface refuses to present more certainty than the data supports.
Competitor pools, inventory and history were designed to scale well beyond what fits on a screen, so tables, pagination, search and filtering are first-class components rather than afterthoughts. This was a design requirement from the data model, not an observed production volume.
Access is defined across four levels, with seat licensing and subscription status at the dealership level, and staff can switch between dealerships without logging out โ designed in response to the dealer-group structure described in domain sessions.
The panel renders over pages of unknown layout and width. It is movable, minimisable and dismissible, sized to coexist with the host pageโs own content rather than cover it, and every tool opens in a panel that can be closed back to the compact launcher.
Alongside these: designed empty states that name the next action, the full credential and invitation set, and transactional emails โ since for an invited user the email is the first screen of the product.
These requirements are part of the design specification. Production accessibility conformance has not been independently verified:

Each architectural property below was chosen for a commercial reason. The property is inspectable in the design; the business effect is the intended outcome and has not been measured.
Around 170 screens and states across the three surfaces. The number matters less than what it covers: not a feature set, but the full lifecycle of an enterprise data product โ the primary tools, the four-level permission model, partial-data and empty states, credential recovery and invitation flows, and the admin configuration layer that makes the data comparable in the first place.
This case study documents the completed product design across the Chrome extension, dealer workspace and admin console. Production implementation has not been independently verified for every feature described.
In a data product, the interface decisions that matter most are often furthest from the user โ an admin form no dealer will ever open determines whether every number the dealer does see can be trusted.
What I would do differently: get in front of dealership staff during design rather than relying on domain input alone. The in-context model and the inverted pricing interaction are both strong claims about behaviour that I designed without watching anyone work.
Data becomes a product at the moment it meets a decision. Everything before that is plumbing.