# Mini Map Macau: a 3D transit map that runs on a timetable

> Mini Map Macau is a React and MapLibre application that draws Macau's light rapid transit, buses, ferries and MFM airport flights on a 3D map, with vehicles moving along real geometry in a timetable-driven simulation. It adds a city data layer with schools, housing estates, public toilets, temples, refuse rooms and live car park occupancy, and it runs in three languages.

**asdfghj1237890/mini-macau** — Trilingual 3D visualization of Macau's public transit and aviation — LRT, buses, ferries, and MFM airport flights with schedule-driven simulation

- Repository: https://github.com/asdfghj1237890/mini-macau
- Website: https://mini-map-macau.app
- Stars: 637 · Forks: 77
- Language: TypeScript
- License: MIT
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/asdfghj1237890-mini-macau

## What the project visualises, and what makes it a simulation

The project is a 3D visualization of Macau's public transit, ferry and aviation system, inspired by Mini Tokyo 3D and Mini Taiwan. It draws the Macau Light Rapid Transit, the bus network, the HK and Macau ferry routes and MFM airport flights on an interactive 3D map, and the key phrase in the README is that vehicles move along actual geometry in a timetable-driven simulation. That distinction matters more than it sounds. The README's own framing is that LRT and buses run on simulated, manually regenerated timetables, while flights and ferries refresh on their own daily or monthly sync schedule. So the map is a faithful model of the network's shape and a plausible reconstruction of its rhythm, with a caveat that the transit side is generated rather than live.

```json
    "dev": "vite",
    "build": "tsc -b && vite build",
    "typecheck:functions": "tsc -p tsconfig.functions.json",
    "check:lrt-boundary": "node scripts/check-lrt-boundary.mjs",
    "lint": "eslint .",
    "preview": "vite preview",
    "test": "vitest run",
    "test:watch": "vitest"
```

Those eight scripts are the whole developer workflow, and the presence of a separate preview, lint and test entry point says the project treats itself as a normal Vite application rather than a one-off page.

## The vehicle layers, and the scale of each one

The feature list gives hard numbers, which is what makes the project assessable. The 3D LRT layer covers all three lines, Taipa, Seac Pai Van and Hengqin, with 15 stations, real track geometry and elevated viaducts. The 3D bus fleet covers 92 routes with road-snapped paths via OSRM, including bridge geometry for the Macau to Taipa crossings. The aircraft layer has about 160 real MFM airport flights, auto-synced daily, with detailed airplane models including fuselage, swept wings, a vertical tail in airline colors, engine nacelles, window rows and a cockpit windshield, and aircraft park at 12 apron stands before departure and taxi along waypoint paths before takeoff. The ferries cover six sea routes, Hong Kong Outer Harbour, Taipa and Sheung Wan, plus HKIA, Shenzhen Airport and Shekou, served by TurboJET and CotaiJet, drawn as a twin-hull catamaran with flared hulls, a raised bridge with a wraparound windscreen, cabin, windows and roof equipment. Landing and holding behaviour is modelled too, with aircraft approaching from north or south and entering a circular holding pattern when the runway is occupied.

## The city layer, which is the part that makes it a research tool

On top of the transport layers sits a CITY layer set built from Macau's open data, and this is what turns a pretty map into something you can analyse. The README lists DSAT road-works notices, every school's buildings coloured by level and shaded by founding era, the Housing Bureau's social and economic housing estates, the seven civil parishes as a boundary tint, IAM public toilets, the territory's temples, churches, mosque and Earth God street shrines, IAM's walking trails and cycle tracks, DSAT public car parks with live vacancy, and IAM and DSPA refuse rooms, compacting bins and recycling points. The school colouring and the era shading are the sort of detail that comes from a specific research question, and the live car park occupancy is the sort that comes from a real data source rather than a mock.

```json
    "data:amaral": "node scripts/patch-amaral-terminal.mjs && node scripts/build-bus-road-profile.mjs && node scripts/build-bus-terminal-map.mjs",
    "data:routes": "node scripts/patch-amaral-terminal.mjs && node scripts/patch-route-guides.mjs && node scripts/build-bus-road-profile.mjs && node scripts/build-bus-terminal-map.mjs",
    "icons:pwa": "node scripts/build-pwa-icons.mjs",
```

The data scripts in package.json show the shape of the pipeline: separate steps to patch a terminal, build the bus road profile and build the bus terminal map, plus a boundary check script for the LRT and an icon builder for the PWA.

## Interaction: timetable, time controls and click-to-follow

The interaction model is where a transit map becomes usable. Vehicles move along routes based on timetables, service frequencies and schedule types, and the schedule types are the ones that matter, with Mon to Thu, Friday and Sat to Sun treated separately, because that is how Macau's services actually run. Clicking a vehicle or a station shows live ETAs, next arrivals, route details and service status, clicking an aircraft shows flight number, airline, destination or origin with localized names, scheduled time, aircraft type and live or simulated status, and clicking a ferry shows operator, route, origin and destination port, scheduled departure, crossing time and live progress. Time controls cover play and pause, speed from 1x to 60x, jump to now and a free date and time picker, and there is click-to-follow with smooth camera animation plus free zoom and pan. Labels are trilingual, English, Traditional Chinese and Portuguese, which is the one detail that tells you this is aimed at a Macau audience rather than a generic demo.

## The stack, and where the data actually comes from

The badges name the stack: React 19, TypeScript 6, Vite 8, MapLibre GL 6, Tailwind CSS 4 and Python 3.13 for the data side, with the package.json confirming the versions including maplibre-gl, zod for validation, the turf helpers along and length and nearest-point-on-line, and leaflet 1.9.4 held alongside MapLibre. The build is tsc -b followed by vite build, and the tests run under vitest with a separate watch mode, and the linting is eslint with flat config. The repository layout shows both halves clearly, with src/ for the application, server/ and functions/ for the Cloudflare side, data/ holding the Python project, scripts/ for the data pipeline, plugins/ for the MapLibre plugins, and a wrangler.jsonc for the Workers deployment. There is also a set of workflow badges that name the automation: CI, deploy, a flights sync and a ferries sync, which is the daily and monthly refresh the README describes.

## The limits, and where the freshness caveat bites

The limitation the README itself foregrounds is freshness, and the honest reading is that the transit layers are the weakest part. The LRT and bus movement is a simulation over manually regenerated timetables, which means the ETAs on screen are the schedule's idea rather than a live feed, and anyone using the map to answer a question about actual service reliability will get the wrong answer. The flights and ferries are better, since they sync on their own daily or monthly schedule, but the sync windows are still windows. The second limit is scope: this is a Macau transport map with a city data overlay, not a general 3D transit visualiser, and the data pipeline is written against specific Macau open data sources, including a script dedicated to one terminal. The alternative to weigh is the operating data itself, the official transport bureau feeds and timetables, which are authoritative and live but come as tables rather than as a spatial simulation. What Mini Map Macau adds over those tables is the ability to see the shape of the network and watch a service pattern play out, which is a different question from what the live feed answers.

## Conclusion

Adopt Mini Map Macau if you teach, present or analyse Macau's transport system and want an interactive 3D view that plays back on a schedule rather than showing static lines. Do not adopt it as a departure board for actual travel, since the README is explicit that the LRT and bus movement is a simulation on manually regenerated timetables, with only flights and ferries syncing to live schedules. Before you rely on any layer, check the data freshness section for that layer, and note that the project publishes one release, readme-assets-v1, which is a documentation asset bundle rather than an application release.

## FAQ

### What is Mini Map Macau?

It is a 3D visualization of Macau's public transit, ferry and aviation system, showing the LRT, the bus network, HK and Macau ferry routes and MFM airport flights on an interactive 3D map with vehicles moving along actual geometry in a timetable-driven simulation. The homepage is mini-map-macau.app and the licence is MIT.

### How fresh is the data in Mini Map Macau?

The README says LRT and buses run on simulated, manually regenerated timetables, while flights and ferries refresh on their own daily or monthly sync schedule, and it points to a data freshness and update strategy section for a per-layer breakdown.

### What transport layers does Mini Map Macau render?

Three LRT lines with 15 stations and elevated viaducts, 92 bus routes with road-snapped paths via OSRM, about 160 real MFM airport flights with detailed airplane models and 12 apron stands, and six ferry routes served by TurboJET and CotaiJet drawn as twin-hull catamarans.

### What open data does the city layer in Mini Map Macau use?

DSAT road-works notices, school buildings coloured by level and shaded by founding era, Housing Bureau social and economic housing estates, the seven civil parishes as a boundary tint, IAM public toilets, temples, churches, the mosque and Earth God street shrines, IAM walking trails and cycle tracks, DSAT public car parks with live vacancy, and IAM and DSPA refuse rooms, compacting bins and recycling points.

### How do I run Mini Map Macau locally?

The package.json scripts give the workflow: npm run dev starts Vite, npm run build type checks with tsc -b and then builds with vite, npm run preview serves the build, npm run test runs vitest and npm run lint runs eslint. There is also a separate data pipeline set of scripts such as data:routes and data:amaral for the bus terminal and route data.

## Sources

- [asdfghj1237890/mini-macau on GitHub](https://github.com/asdfghj1237890/mini-macau)
- [License: MIT](https://github.com/asdfghj1237890/mini-macau/blob/master/LICENSE)
- [Project website](https://mini-map-macau.app)
- [README](https://github.com/asdfghj1237890/mini-macau/blob/master/README.md)
- [Releases](https://github.com/asdfghj1237890/mini-macau/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/asdfghj1237890-mini-macau
