Aller au contenu
TerhillsWeb2023–2025

Real-time fleet oversight for autonomous shuttles

We built a transit product for the Terhills resort on top of EasyMile's shuttle API: a real-time backend and three apps, for passengers, for guests waiting at a stop, and for fleet operators.

ReactTypeScriptNode.js
Terhills autonomous shuttle ecosystem overview

At a Glance

  • A transit service built on EasyMile's API, which only sends a shuttle to a set of coordinates
  • Three apps (in-shuttle display, station kiosk, operator dashboard) driven by one real-time backend
  • A dispatcher that assigns shuttles to scheduled lines and replans mid-trip from live telemetry
  • Collision avoidance across overlapping routes, and passenger screens in Dutch and English

Challenge

Terhills is a resort in Maasmechelen, Belgium. It wanted guests to move between accommodations, dining and activity zones on autonomous shuttles that behave like a metro line rather than a set of individual vehicles. The resort partnered with EasyMile to run its EZ10 shuttles on site.

EasyMile's Site CC API is deliberately minimal. It lets you send one shuttle to a set of coordinates and streams back its telemetry. Scheduled lines, dispatching, collision avoidance, passenger information and operator tooling all had to be built on top.

Three groups needed different things: passengers inside a shuttle, guests waiting at a stop, and the staff running the fleet. All three views had to agree with vehicles moving in real time.

Solution

We built a real-time backend and one front-end for each of those groups.

In-Shuttle Display

A trip timeline inside every shuttle shows the current destination, the upcoming stops and progress along the route. It ships as a single-file build, so it installs cleanly on the in-vehicle hardware.

Station Kiosk

Every stop has a "next shuttles" board with live arrival times, destinations and intermediate stops. It is bilingual (Dutch and English) and shows announcements that operators publish for that station.

Operator Dashboard

A Mapbox view of the site shows shuttle positions, active trips and route conflicts. Operators create lines, assign vehicles, broadcast messages and tune operating parameters (shuttle speed, minimum spacing, door-opening time) without a developer.

Real-Time Backend

A GraphQL service turns the operator's lines into missions for EasyMile's API. The dispatcher assigns shuttles to scheduled lines and recomputes starting points mid-trip from telemetry. A collision-avoidance engine detects overlaps between routes. A state machine per shuttle reconciles the backend with the events each shuttle streams over an authenticated WebSocket.

Key Features

  • One backend, three audiences: in-shuttle, station and operator apps share one data model
  • Lines on top of vehicles: scheduled lines, mid-trip replanning and arrival times, built on a per-vehicle coordinate API
  • Collision avoidance between shuttles on overlapping routes
  • Operator self-service: stations, lines, fleet, announcements and operating parameters are all set from the dashboard
  • Bilingual passenger screens (Dutch and English) with announcements per station
  • Infrastructure as code for production and staging

Results

  • Guests use the shuttles as a single transit service across the resort, not as separate vehicles
  • Shorter waits and simpler navigation from real-time scheduling
  • Resort staff run the service themselves: new lines, stations and announcements go live without a developer
  • Room to grow: more shuttles, stations and routes fit the same model

Galerie


Construisons votre produit

Dites-nous ce que vous construisez. Nous vous dirons comment nous l'aborderions, ce qu'il faut, et à quelle vitesse nous pouvons avancer.

Nous vous dirons honnêtement si nous sommes le bon choix. Et si ce n'est pas le cas, nous vous orienterons vers quelqu'un qui l'est.