Autonavi · 2026

Autonavi.ee

CarPlay, Android Auto and navigation map updates matched exactly to your vehicle.

Goal

Customers had to know before buying whether CarPlay, Android Auto or a map update would work in their car, and the shop had to sell hundreds of vehicle-specific products without manual busywork.

Results in numbers

What changed

1,390

car-specific products in the shop

772 + 183

software versions compatibility is checked against

8

add-ons that don't bloat the product range

The situation

Whether CarPlay, Android Auto or a map update works in a car depends on the software version and hardware of its screen unit. Two cars that look identical can be completely different: one only needs activation, another needs newer software first and a third can’t have it at all. A wrong choice means a return and a disappointed customer.

Autonavi.ee had to sell hundreds of car-specific products so that the customer knows before buying whether the product fits their car. What happens after the purchase mattered just as much. Every order needs a software package made for that one car, containing only the features bought and impossible to run on another car by accident.

A lot of the work was in the part of the shop customers don’t see: making sure the price is always right, that a faulty order never reaches checkout and that a package touching the car’s software is safe even when something goes wrong.

Constraints

  • About 1,390 car-specific products (for example Audi 622, VW 528, Seat and Škoda 336 each) had to be created automatically from per-make data files, not by hand.
  • 8 add-ons (such as full-screen mode, wireless CarPlay and a map update) couldn't turn every product into hundreds of variants.
  • Order data had to be checked on the server, not just in the browser. A browser check can always be bypassed.
  • The software package goes into a real car. No bug may damage the car's screen unit.
  • The site launches publicly later, but orders and customer accounts had to be ready and secure before that.

Solution

How I solved it

Compatibility

The customer doesn't know in advance whether their car's screen unit supports CarPlay or Android Auto activation or a map update.

The product page has a compatibility check. The customer enters their unit’s software version and the system compares it with 772 known versions and 183 that can be activated directly.

The check copes with a partially typed version, because people rarely copy a long code exactly. It knows which units only have support in hardware and need a software update too, and recommends the newest option that fits. The aim is fewer wrong orders and returns.

The most important rule: compatibility is promised by software version, not by model year. The same model from the same year can ship with three different generations of head unit (MIB2, MIB2+ or MIB3), depending on trim and market. A promise based on the year would mean refunds. So every product description says how to read the version off the screen: hold the MENU button for about 10 seconds.

E-commerce

About 1,390 car-specific products (Audi, VW, Seat, Škoda and others) had to get into the shop without manual entry.

Products are generated automatically from cleaned per-make tables and imported into WooCommerce. Each product carries the list of software versions it works with, and the compatibility check uses the same list. When the data is corrected, both the products and the check update from the same source.

Porsche gearbox calibration products were added later the same way. Their driving rules and prices also came from a table, and when the table had a mistake it was fixed there, not on hundreds of product pages.

Structure

As ordinary product variants, 8 add-ons would have turned every product into up to 256 variants.

Each add-on is a separate option with its own price that can be switched on or off per product, and the final price is calculated in the cart. The product stays one product instead of hundreds of variants, which would have been impossible to manage at this scale.

The product image also follows the selection: when a customer picks full-screen mode, for example, they immediately see what it looks like in their car.

Eight add-ons as variants make 256 variants per product. As options the product stays one.

Pricing

A review of the shop found that add-on prices could be added to the cart more than once.

What didn’t work: the add-on price was added to the product price every time WooCommerce recalculated the cart total. And WooCommerce does that often: when the address, shipping method or coupon changes. Each change could add the same add-on price again. The server also accepted add-ons that weren’t allowed on that product at all, if someone wrote them into the request.

How it works now: the price is always calculated from the product’s original price, not from the previous result, so several calculations in a row always give the same answer. The server takes the allowed add-ons and their prices from the product’s own settings. A price coming from the browser is never trusted.

Every change of address, delivery or coupon recalculates the total. Now the calculation always starts from the base price.

Data quality

A malformed VIN in the cart means a wrong order that's expensive to fix later.

What didn’t work: the product page and the server had different rules. The page allowed one thing, the server checked another, and the product setting “don’t check the VIN for this product” only worked in the browser. The server still demanded a VIN.

How it works now: the rules are the same on both sides and the server has the final say. The VIN must have the right format: 17 characters, without the letters I, O and Q, which VINs don’t use. A plate number used to be accepted too, but that option went, because the software package is tied to the VIN. A plate doesn’t tell the package which car it’s in. The check can be switched on or off per product, and that setting now applies on the server too.

A VIN is always 17 characters, without the letters I, O and Q. The first three show the manufacturer.

Checkout

The checkout page drew the page header and footer twice. That could interfere with the payment methods.

The checkout template called the page header and footer itself, even though the page had already done so. The result was a page inside a page. You could hardly see it, but checkout refreshes itself in the background (when the address or shipping method changes) and the payment code expects a specific page structure. The doubled structure could break it.

Now checkout has one page frame and the checkout part is an ordinary block inside it. Other small bugs went at the same time: product page data was loaded on every page, even where it wasn’t needed, and some scripts assumed a library that hadn’t been loaded.

Software package

Every order needs a software package made for that car, but there was no convenient tool for it.

Each order has a “Download software” button. The server picks the right base package from the car’s software version, keeps only the features the customer bought (CarPlay and Android Auto are separate), ties the package to that car’s VIN and offers the finished file for download. Nobody has to assemble files by hand.

The base packages are large and valuable, so they’re kept where the public internet can’t reach them. Only staff with the right permissions see the button.

Safety

The package must only run on the right car. But what happens when the check itself is wrong?

What didn’t work: the earlier approach deleted the package files when the VIN didn’t match. On review I found it couldn’t tell a wrong car from a failed read. If the car returned its VIN in lower case, if the read came back empty or if a file had one extra character, the check took the right car for a wrong one and deleted a valid package. One script also had a typo that meant the check could never pass: every run, right VIN or not, ended in deletion. And the deletion had no guard against reaching outside the memory card.

How it works now: the package runs in two stages. The first stage contains no software files at all, only the VIN check. Only the right VIN unlocks the second stage with the real software. A wrong VIN never sees it. A read error no longer means “wrong car”, it stops safely and deletes nothing. The new version also has a trial mode that runs the whole decision and only logs what it would do, and a second trial mode that tests the handover between stages without installing any software.

I’m also honest about what it isn’t. This protection prevents installing on the wrong car; it isn’t cryptographic copy protection. That’s also why it no longer deletes anything: deleting only ever hurt genuine customers.

What makes the check harder is that the same calculation lives in four places: locking the package in the browser and on the server, and unlocking it in two different on-car scripts. All four have to agree byte for byte. One older script had rewritten the calculation in the car shell’s own arithmetic. In a 32-bit environment that could silently overflow and give the wrong result without a single error. In another script the car’s shell didn’t understand how the file names were encoded, so the delete quietly did nothing at all. The protection only existed on paper. The server version is now byte-for-byte identical to the browser one and checked against a memory card that was really used in a car.

Stage one contains no software files. A read error no longer means "wrong car" but a safe stop.

Catalogue

Before expanding, the CarPlay and Android Auto products in the shop had to be checked: were they even right, and was every finished product on sale?

I went through every product spreadsheet and the shop’s export. For each product I checked whether the promised activation is technically possible on that car, against the compatibility checker’s own data, because that is what decides real orders.

What I found: one make’s spreadsheet had been wrapped in quotes a second time on export. A reader saw 336 rows of one column instead of 14 products with 41 columns, so an import would have brought in garbage or nothing at all. The shop had over 30 products with no product code. Those can’t be updated by import or linked to the compatibility checker. One product was listed twice at different prices (€200 and €100), another four times as separate products. 32 finished products had never been imported: there were no Škoda or VW activations on sale at all.

Product names also included cars that don’t exist. There’s no Audi RS1 in the new-generation A1, and Audi has never built an RS Q7. Year ranges didn’t match the head unit. The VW T-Roc was listed as 2017–2023, but from model year 2021 it has MIB3 and needs a different product. 2015 Audi TTs have MIB1, where CarPlay can’t be activated. It went the other way too: some Audi ranges stopped at 2020 although those cars kept the same unit until 2024, so sales were simply being missed. Bentley was wrongly labelled MH2P. It’s actually MIB2 High, but the full-screen product still fits it.

The biggest finding was a missing section. The compatibility checker already knew 69 MIB3 software versions, but the shop had not a single MIB3 product. That left out every VAG car from about 2020 on: Golf 8, Octavia IV, Leon, Formentor, the whole ID range. The new master file added 50 MIB3 products for 26 models.

How it works now: the CarPlay and Android Auto catalogue is built by a script from one master file: 261 products with one price ladder and the same columns. Product codes match the shop’s, so an import updates the existing 89 products and adds the rest, with no duplicates. When a price needs changing, it’s changed in one place and the script is rerun.

The compatibility checker already knew which cars could be helped. The shop simply sold them nothing.

Result

The Autonavi.ee shop is ready: about 1,390 car-specific products, a compatibility check against 772 + 183 known software versions and 8 add-ons that don’t bloat the catalogue. Prices and order data are checked by the server, and each order’s software package is made with one click, tied to the right car.

Publicly the site is in “Coming soon” mode for now, but customer accounts and orders already work.

What's next

The next step is the public launch, and extending the compatibility database and base packages with new car models and software versions.

Next step

Your project could be next