1
0 Comments

I built "20 minutes from your university" into a room search.

I built distance-by-time instead of distance-by-map.

I built "20 minutes from your university" into a room search

Every rental portal lets you filter by neighbourhood. Which is useless to a

student, because they don't care about the neighbourhood — they care about

whether they can get to their 9am lecture.

So I built distance-by-time instead of distance-by-map.

Plinthos is a rental management tool for landlords renting single rooms, and

it has a public portal attached. On that portal you don't search by area.

You pick your university campus and you say 20 minutes on foot, or 30 by

bike, or 40 by public transport. What comes back is every room inside that

travel-time shape.

Getting there was more work than I expected:

- Isochrones come from Valhalla, self-hosted in Docker. Building the routing

tiles for northern Italy took 18 minutes and 1.7 GB of RAM.

- Public transport needs GTFS feeds, one per city, each in its own state of

disrepair. Valhalla segfaulted on transit until I pruned the feeds down to

urban services only.

- Half the cities I wanted have no usable GTFS at all, so their stops come

from OpenStreetMap instead.

- Every listing gets its travel-time bands computed on insert by a trigger,

so search is a polygon lookup, not a routing call. Search has to be fast;

precomputation doesn't.

10 cities so far. Bologna, Milan, Rome, Turin, Naples, Florence, Padua,

Modena, Parma, Reggio Emilia. Metro lines included where they exist.

The part I like: the same data makes the listings better, not just the

filter. A room isn't "in Bolognina", it's "14 minutes from Unibo

Engineering". That's the sentence the student actually needs, and it writes

itself from the geometry.

Happy to go deeper on the Valhalla setup if anyone's fighting with it —

the transit side in particular is badly documented and cost me a weekend.

posted toAvatar for product plinthos
plinthos