Published on: October 3, 2024

Build bicycle tracker using Kotlin - Progress, Lessons Learned, and Decisions Made (Part 3)

After several months of on-and-off work on my personal bicycle tracking app, I’ve decided to share my progress, the lessons I’ve learned, and the decisions that shaped the project.

Android Client and Complexity

As I mentioned in previous post, I initially chose to use the Multiplatform Compose library for Android. The goal of this library is to provide a unified approach for mobile multiplatform development. However, for creating a basic MVP, this level of support wasn’t strictly necessary. One downside of using Multiplatform Compose is that it adds complexity (as every library), especially if you’re developing your first mobile app. To simplify things, I switched to using Jetpack Compose, a library specifically for building Android apps, which made the development process more straightforward.

Dashboard UI

The dashboard is a simple React application that displays the user’s current location on a map. The main idea behind the personal bicycle tracker is to allow me to track my real-time location while cycling, using my Android phone. The app then sends the data to a server, so my family and friends can view my live location through the dashboard in a web browser.

Deployment and infrastructure

For deployment, I chose to host the server API and the dashboard UI on AWS using Docker containers managed by ECS (Elastic Container Service). While this may not be the cheapest solution there are definitely more cost-effective options on AWS, such as using Lambda functions. I preferred this setup because it allows easy deployment to other cloud providers or any Docker-compatible platform.

Another key decision was to define the infrastructure using Terraform, which simplifies the process of creating and destroying the entire stack, enabling seamless management of the infrastructure.

What’s Next for My Bicycle Tracking App?

This project is still a work in progress, and I’m excited to continue investing more time into it. The primary goal is to enhance my skills as a full-stack developer and gain deeper insights into the Kotlin ecosystem. So far, it’s been a interesting journey, even with the limited time I’ve had to dedicate to it.