Spoke is a lightweight e-ink friendly Android client for BCycle bike share systems in Philadelphia, Los Angeles, and Las Vegas. Designed for the Mudita Kompakt according to Mudita Mindful Design guidelines, this app provides a de-Googled and distraction free interface for finding local bike share stations, checking out bikes, and viewing your trip history.
| Stations | Station Details | Bike Checkout | Settings |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| My Rides | Lifetime Stats | Trip History | Trip Details |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- Real-time bike share station status - bike availability, battery percentage, distance from user location
- Find bike stations near you - using location sharing
- Get station statuses - bike availability, number of open docks, battery percentage for electric bikes
- Checkout bikes - unlock bikes in-app and track your ride status
- Trip tracking - see your all-time trip history and specific trip details
- Lifetime account stats - surface stats hidden in the BCycle API like money saved and carbon offset
- E-ink Friendly Design - app UI designed for e-ink screens based on Mudita Mindful Design guidelines
As of v1.0, Spoke supports the following BCycle bike share systems:
- Indego (Philadelphia, PA) (full support)
- Metro Bike Share (Los Angeles, CA) (partial support)
- RTC Bike Share (Las Vegas, NV) (read only support)
For a full feature matrix of supported features across these systems, see CHANGELOG.MD.
You can also request support for another bike share system here.
- Android API Level 31+ (Android 12+)
- Android Studio Narwhal (2025.1) or newer (required for Android Gradle Plugin 9.x)
- Kotlin 2.2.10+
- JDK 17+
- Gradle 9.6.1 (provided via the Gradle wrapper)
-
Clone the repository:
git clone https://github.com/Snarr/Spoke.git cd Spoke -
Configure
local.propertiesin the project root (create it if it doesn't exist):sdk.dir=/path/to/your/Android/SDKThis file tells Gradle where your Android SDK is installed. Android Studio typically creates this automatically, but if you're building from the command line, you may need to create it manually.
-
Configure the required secrets in your global Gradle properties file at
~/.gradle/gradle.properties(create it if it doesn't exist):INDEGO_SECRET=your_indego_api_secret METRO_BIKE_SHARE_SECRET=your_metro_api_secret
Tip
You can find these secrets by intercepting API requests made from a system's respective bike share app. In an abundance of caution, I won't be publishing these secrets to GitHub even though they're unobscured and easy to find.
-
Open the project in Android Studio:
open -a "Android Studio" .
-
Build and run the app on an emulator or connected device:
- Click "Run" or press
Ctrl+R(Linux/Windows) /Cmd+R(macOS)
- Click "Run" or press
To build a signed release APK:
./gradlew clean bundleReleaseThe signed app bundle will be available at:
app/build/outputs/bundle/release/app-release.aab
Spoke/
├── app/ # Main application module
│ ├── src/main/java/ # Kotlin source code
│ ├── src/main/res/ # Android resources
│ ├── src/main/AndroidManifest.xml
│ ├── src/test/ # Unit tests
│ ├── src/androidTest/ # Instrumentation tests
│ └── build.gradle.kts # App build configuration
├── config/detekt/ # Detekt static-analysis config
├── gradle/ # Gradle wrapper & version catalog
├── .github/ # Issue templates & CI workflows
├── build.gradle.kts # Root build configuration
├── settings.gradle.kts # Gradle settings
└── CONTRIBUTING.md # Contribution guidelines
Run the test suite:
./gradlew testThis project uses several tools to maintain code quality:
- Detekt: Kotlin static analysis
- Spotless: Code formatting
Run code quality checks:
./gradlew detekt
./gradlew spotlessCheckTo automatically format code:
./gradlew spotlessApplyContributions are welcome! Please see CONTRIBUTING.md for guidelines on how to contribute to Spoke.
This project is licensed under the MIT License - see the LICENSE file for details.
- Designed for Mudita Kompakt
- Powered by BCycle bike-share systems:
- Indego (Philadelphia)
- Metro Bike Share (Los Angeles)
- RTC Bike Share (Las Vegas)
For issues, feature requests, or general questions:
- Open an issue
- Check existing discussions







