Native Android MRT route planner for Singapore, built with Kotlin and Jetpack Compose.
SGMRT Android is a native Android version of alfredang/sgmrtapp. It helps commuters plan the shortest route between Singapore MRT stations, view route timing and transfers, and browse a bundled MRT map PDF inside the app.
Key features:
- Shortest-route planning between Singapore MRT stations
- Estimated journey time, station count, and transfer count
- Route step breakdown by MRT line
- Optional LTA DataMall train service alerts and passenger crowd density
- Bundled Singapore MRT map PDF rendered in-app
- Two-tab Jetpack Compose UI for route planning and map browsing
| Area | Technology |
|---|---|
| Language | Kotlin 2.0.21 |
| UI | Jetpack Compose, Material 3 |
| Android | Android Gradle Plugin 8.13.0, minSdk 26, targetSdk 36 |
| Async | Kotlin coroutines |
| Data | In-app MRT network model, optional LTA DataMall API |
| Assets | Bundled Singapore MRT map PDF |
+-------------------------------------------------------------+
| Compose UI |
| SGMRTApp, JourneyPlannerScreen, PdfMapScreen |
+------------------------------+------------------------------+
|
+------------------------------v------------------------------+
| ViewModel Layer |
| JourneyPlannerViewModel manages selected stations, route, |
| live LTA state, loading, and error state. |
+------------------------------+------------------------------+
|
+------------------------------v------------------------------+
| Domain and Data Layer |
| MRTNetwork, RoutePlanner, MRTModels, LTADataMallClient |
+------------------------------+------------------------------+
|
+------------------------------v------------------------------+
| Resources |
| singapore_mrt_map.pdf, app icon, Android resources |
+-------------------------------------------------------------+
sgmrtapp/
|-- app/
| |-- build.gradle.kts
| `-- src/main/
| |-- AndroidManifest.xml
| |-- java/com/tertiaryinfotech/sgmrt/
| | |-- MainActivity.kt
| | |-- data/
| | |-- model/
| | |-- ui/
| | `-- viewmodel/
| `-- res/
| |-- drawable/
| |-- raw/singapore_mrt_map.pdf
| `-- values/
|-- gradle/libs.versions.toml
|-- build.gradle.kts
|-- settings.gradle.kts
`-- README.md
- Android Studio with Android SDK installed
- JDK 17, or Android Studio's bundled JBR
- Android emulator or physical Android device
- Optional: LTA DataMall account key for live train service alerts and crowd density
Create local.properties at the project root:
sdk.dir=/Users/your-user/Library/Android/sdk
LTA_ACCOUNT_KEY=Set LTA_ACCOUNT_KEY to an LTA DataMall account key to enable live alerts and crowd density. The route planner and bundled map work without it.
JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home" ./gradlew assembleDebugThe debug APK is generated at:
app/build/outputs/apk/debug/app-debug.apk
adb install -r app/build/outputs/apk/debug/app-debug.apkThis is a native Android project. Release distribution is handled through the Google Play Console using a signed Android App Bundle (./gradlew bundleRelease) and Google Play App Signing.
Google Play store listing assets (app icon, feature graphic, and phone screenshots) are kept in play-assets/.
Local signing files are intentionally ignored by Git:
local.propertieskeystore.properties*.jks*.keystore
- Fork the repository.
- Create a feature branch.
- Build and test the Android app locally.
- Open a pull request with a clear summary and screenshots for UI changes.
Tertiary Infotech Academy Pte. Ltd.
No license has been specified yet.
- Singapore MRT data model and route-planning logic from the SGMRT project
- LTA DataMall for optional live service and crowd data
- Android, Kotlin, and Jetpack Compose open-source ecosystems
