Skip to main content

On the car screen, and off the tarmac

· 3 min read
Massimo Di Stefano
FastGIS author

Two threads this week, and they meet in the same place: the moment you stop looking at a phone and start riding.

CarPlay

The navigation HUD now renders on the car screen. Getting there took a scaffold, a gated config plugin, an absolute-fill layout and a self-healing install — the sort of list that looks like nothing and takes a week.

CarPlay is unusual to build for because you cannot iterate on a simulator and trust it; the head unit has opinions the simulator does not. It is on a real device now, it survives a reconnect, and the install steps are written down so the next person does not rediscover them.

The trail problem

Here is a scenario we got wrong, and then got right.

You are riding a road bike profile toward a trail. The router knows the trail exists. What should happen when you reach it?

The naive answer is "recompute", and the naive answer strands you: the recompute throws away the trail and sends you around by road, because by every metric a router optimises for, the road is better.

So we made the vehicle switch on a trail into an approach rebuild — car profile to the trail head, bike profile on the trail itself — and made keeping the trail the default, with road-to-end as an explicit choice you make rather than one made for you. The router is very good at answering the question it was asked. Most of this work is asking it a better one.

Detecting that you are on a trail at all turned out to need two independent signals: a structural one — a routing leg with no manoeuvres in it, because trails do not have junctions to announce — and an on-trail projection guard that checks where you actually are against the trail geometry. Either alone produces false positives on a long empty road. Together they hold up.

Freezes, found and killed

Three of them, all in the same fortnight:

  • A 12,000-point cap on the painted route line. A long TET trip was handing the map more geometry than it could paint, and the whole app stopped.
  • A stationary guard on rerouting. Parked with GPS jitter, the app recomputed forever. Now it notices you are not moving.
  • A degenerate curvy-loop line that failed geometry validation at startup.

None of these are features. All of them are the difference between an app you trust on a long day and one you don't.

Self-hosted Photon for European geocoding, a zero-result relaxation ladder, and an LLM rung behind an explicit ?deep flag. When the search finds nothing, the phone loosens the query a rung at a time rather than shrugging.

The LLM rung needed the most care, and the fix was mostly saying no to it: the prompt is hardened against inventing place names, because a geocoder that confidently returns a village that does not exist is worse than one that returns nothing at all. Tuning the prompt to a "rules" variant took the small local model from 71% to 88% on our benchmark, which is the difference between a feature and a liability.

Next

More car screen, more trail. The two ends of the same ride.


Dig deeper: the rider app guide covers navigation and the trail behaviour.