Skip to content

Commit 7532d04

Browse files
committed
README for the native app; a Maven Central mirror as a fallback in CI
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011C2fAvFFcMRkaF7qSvRA1v
1 parent 9525323 commit 7532d04

2 files changed

Lines changed: 107 additions & 10 deletions

File tree

‎README.md‎

Lines changed: 105 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# AKL Live
22

3-
An Android app for live Auckland Transport buses and trains, built for the
4-
Galaxy S26. It's the phone version of
3+
A native Android app for getting around Auckland: live buses, trains and
4+
ferries, journey planning on AT's full timetable, and a few quirks. Built for
5+
the Galaxy S26 with Kotlin, Jetpack Compose and Material 3. It started as the
6+
phone version of
57
[akl-departure-board](https://github.com/intelarc/akl-departure-board), the
6-
ESP32 desk display.
8+
ESP32 desk display, and brings over the features of the desktop app.
79

810
## Install
911

@@ -13,13 +15,30 @@ builds a new signed APK there. Installing it updates the app in place.
1315

1416
The app needs an Auckland Transport API key, and none is built in. Sign up at
1517
[dev-portal.at.govt.nz](https://dev-portal.at.govt.nz) (it's free), subscribe
16-
to the GTFS and realtime APIs, and paste your key in the app's Settings. The
17-
app opens on Settings until a key is set.
18+
to the GTFS and realtime APIs, and paste your key in the app's Settings. Home
19+
shows a card pointing there until a key is set.
1820

19-
## Buses
21+
The bottom bar has **Home**, **Directions**, **Live** (every bus), **Trains**
22+
and **More** (search, alerts, routes, the fleet, the fleet dex, settings).
2023

21-
The 27H at Aldersgate Road, Hillsborough, both directions: stop 8669 to
22-
Britomart and 8664 to Waikowhai. Stops and route can be changed in Settings.
24+
## Home
25+
26+
A greeting for the time of day (Mōrena, Kia ora, Ahiahi mārie in Kiwi mode), a
27+
line on how things look ("The 27H's running 6 min late, eh", "Double-decker
28+
incoming"), the time and the weather, then:
29+
30+
- **Leave in…** for the next bus each way, from how long your walk to the stop
31+
is. Miss it and it tells you when to leave for the one after, or to run.
32+
- **A search bar** for everything, and one-tap chips: take me home, to work,
33+
every bus, alerts.
34+
- **Your stops' live scenes** (below), each with **Track** and **All departures**.
35+
- **The next 12 hours of weather**, with the chance of rain.
36+
- **Favourite stops** with their next departures, live.
37+
- **Stops near me** from your location.
38+
- **The live route map** and your **fleet dex** progress.
39+
40+
Home's scenes follow your stops: by default the 27H at Aldersgate Road,
41+
Hillsborough, both directions (stop 8669 to Britomart, 8664 to Waikowhai).
2342

2443
- **A live scene per direction.** The bus drives toward the stop as its arrival
2544
counts down, and its wheels turn while it's moving. The sky follows the real
@@ -42,6 +61,71 @@ Britomart and 8664 to Waikowhai. Stops and route can be changed in Settings.
4261
photos (or a street map), every bus on its way to you gliding between GPS
4362
fixes and pointing where it's heading. Tap it for full screen, then tap a bus
4463
to see what it is. Pull down anywhere to refresh.
64+
- **Tap the scene** and the bus honks.
65+
66+
## Directions
67+
68+
Journey planning across buses, trains and ferries, on the phone. AT's full
69+
GTFS timetable (about 29 MB) downloads once, is checked for updates every six
70+
hours, and each service day is compiled into a compact network cached on the
71+
phone. A RAPTOR planner, ported from the desktop app, finds the fastest
72+
journeys with 1, 2, 3 or more rides, walking between nearby stops for changes.
73+
74+
- **From and to**: your location, home, work, favourite stops, recent places,
75+
any stop or station, any address or place (Photon / OpenStreetMap), or a pin
76+
dropped on the map.
77+
- **Leave now, leave at or arrive by**, today or any day in the next week.
78+
- **Options**: how far you'll walk, your pace, buses/trains/ferries, how many
79+
changes.
80+
- **Each option** shows its times, the rides in order, walking, changes and
81+
"leave in", with live delays on the first ride and tags for the fastest,
82+
fewest changes and least walking. If walking there takes under 25 minutes,
83+
that shows too.
84+
- **The journey view**: the whole trip over a map, with the ride shapes and
85+
every bus or train live on them, walking paths with turn-by-turn directions
86+
(OSRM), every stop on each ride, platforms, and "3 stops away" / "you're on
87+
it: 5 stops to go". Share it, add it to your calendar, or track a ride.
88+
89+
## Stops, routes and search
90+
91+
- **Any stop or station**: live departures from every platform, filtered by
92+
route, with each bus's model, how late it is and how many stops away. Tap one
93+
to see the bus and track it. There's a map of the stop with the buses heading
94+
for it (tap one to see its route), alerts for the stop and its routes,
95+
favourites with nicknames, directions to or from it, and **add to home
96+
screen** as its own icon.
97+
- **Any route**: its paths on a map, its stops each way, trips today, first and
98+
last departures, who runs it, and every bus on it right now.
99+
- **Search** finds stops (by name or the number on the sign), routes, places,
100+
bus models and fleet numbers. With nothing typed, it shows saved places,
101+
favourites and recent searches.
102+
- **Alerts**: AT's disruptions with yours first (your route, stops and
103+
favourites), then everything happening now or coming up, searchable by route.
104+
105+
## On your phone
106+
107+
- **Track a bus**: a notification that counts down to it on its own, shows how
108+
many stops away it is, its model and how full it is, updated every 20 s. It
109+
buzzes when it's time to leave (your walk plus a lead time you choose), and
110+
stops itself once the bus has been.
111+
- **Home screen widget**: your next bus each way, refreshed in the background.
112+
- **Quick settings tile**: "27H · 6 min" in the notification shade.
113+
- **App shortcuts**: long-press the icon for Directions, Live, Trains, Search
114+
and your favourite stops.
115+
- **Links**: `akllive://stop/8669`, `akllive://route/27H`, `akllive://plan` and
116+
the rest open straight to the screen.
117+
118+
## Looks and quirks
119+
120+
- **Material 3** throughout, with six colour themes named after Auckland
121+
things (Waitematā, Pōhutukawa, Kawakawa, Kōwhai, Rangitoto, Tūī), Material
122+
You colours from your wallpaper, light, dark and pure black.
123+
- **Shake to refresh**, haptics on taps, predictive back, a splash screen,
124+
and a themed icon.
125+
- **Kiwi mode**: "Sweet as", "Chur!", "Gutted.", "Time to hit the road!".
126+
- **Fleet dex**: every bus model that pulls up at your stops is spotted and
127+
counted, from Rookie spotter to Ultimate spotter. Unseen ones stay mysteries.
128+
- A few things to find in search, and in Settings' version number.
45129

46130
## Live
47131

@@ -92,8 +176,13 @@ out west. Harbours and volcanic cones sit behind it.
92176

93177
## How it's built
94178

95-
Kotlin + Jetpack Compose. The scenes, the train diagram and the vehicle
96-
markers are drawn with Compose Canvas. The real maps are
179+
Kotlin, Jetpack Compose and Material 3, with navigation-compose, Glance for
180+
the widget and WorkManager behind it. The scenes, the train diagram and the
181+
vehicle markers are drawn with Compose Canvas. The journey planner
182+
(`gtfs/`) is plain Kotlin: a streaming GTFS reader, a compiler that turns a
183+
service day into flat arrays (routes, stops, trips grouped into patterns,
184+
footpaths between stops within 450 m, shapes) saved to disk, and RAPTOR over
185+
them. The real maps are
97186
[MapLibre](https://maplibre.org) (open source), with:
98187

99188
- satellite: [Esri World Imagery](https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9),
@@ -114,6 +203,12 @@ Transit data comes straight from the
114203
| Station departures | stoptrips for each platform (platforms from `parent_station`) |
115204
| Every bus (Live, Fleet) | `realtime/legacy/vehiclelocations`, the whole feed (~80 KB gzipped) |
116205
| Bus operator and model | the vehicle label (`TR3884`) looked up in `app/src/main/assets/fleet.tsv` and `models.json` |
206+
| Service alerts | `realtime/legacy/servicealerts` |
207+
| The timetable (Directions, stops, routes) | `https://gtfs.at.govt.nz/gtfs.zip` |
208+
209+
Other open services: [Photon](https://photon.komoot.io) for places,
210+
[FOSSGIS OSRM](https://routing.openstreetmap.de) for walking directions and
211+
[Open-Meteo](https://open-meteo.com) for weather. None needs a key.
117212

118213
Train GPS fixes are snapped onto the nearest station-to-station stretch of the
119214
train's own line on the schematic. `tools/gen_data.py` generates the map

‎settings.gradle.kts‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ dependencyResolutionManagement {
1010
repositories {
1111
google()
1212
mavenCentral()
13+
// Google's mirror of Maven Central, for when Central turns CI runners away
14+
maven("https://maven-central.storage-download.googleapis.com/maven2/")
1315
}
1416
}
1517
rootProject.name = "AKL Live"

0 commit comments

Comments
 (0)