biking mobile application
CycleGuard is a mobile application and smart helmet that aims to innovate the fitness bike riding space. The helmet offers various safety features including automatic headlights and brakelights, toggleable turn signals, gps, elevation, and speed tracking. The smart helmet connects to CycleGuard-a standalone mobile app that can be used with or without the helmet to track biking fitness progress through a gamified approach. The app utilizes bluetooth and location services to track a ride in real time and offer various statistical metrics associated with individual rides and all-time ride history. The app is designed to feel like making progress through a game with earnable achievements and an in-app currency that can be spent on cosmetics. The app includes social platforms that foster community components in basic friend functionality, leaderboards, and team challenges. Consistency is encouraged through streaks, daily challenges, and daily goals.
I worked on mobile development for the CycleGuard project with an emphasis on the front end. I was responsible for engineering several core app features with the aim of making an appealing and intuitive UI/UX. Graphical and visual representations of statistics were utilized throughout the app to make it easier and faster to digest information. Animations, transitions, and interactable components were included on all pages I developed to improve the user experience.
Plugins and packages were a major component of this project. Flutter has extensive functionality with packages that enable rapid development and integrating known and proven problem solutions. The downside of this is that the app becomes dependent on lots of other people's code and can quickly become difficult to manage if these plugins and packages are continuously updated. Taking time to build certain features ourselves, such as the notification manager, helps customize the app and limit dependencies.
The front end is built with the Flutter framework, and the backend utilizes the Spring framework and DynamoDB database.
This tech stack was chosen primarily due to certain members of the team having experience with these technologies as well as the perception that this would be a beginner-friendly stack given the team was far more comfortable with the embedded system smart helmet side of the project than the mobile app requirements. Flutter's widget-based architecture, hot reload functionality, and the ability to write code once and deploy to multiple platforms were appealing qualities to our team.
Ultimately these decisions proved to be correct given the context of a school project but if this product were to be taken to market some complications arise by using this particular stack. These include but are not limited to large app size, limited functionality with APIs, package and plugin dependencies, heavyweight runtime, inconsistencies in cost of the database, and as this is an uncommon tech stack finding developers comfortable in it already could prove challenging.
I collaborated closely with our backend developer, working extensively with accessor functions/APIs for the backend, integrating various dependencies, and handling Android/iOS settings and permissions. The general workflow was as a team deciding to build a particular feature, consulting our client on it, building the backend to store any data necessary for the feature, and finishing with the front end logic.
CycleGuard was a large team by university project standards. Including myself there was a team of four working on the mobile app, our client was a four-person team building the smart helmet which our team ultimately saw through to completion, a designer, and oversight from our professor and TA.
Version control and communication were far more significant components of this process compared to other projects I worked on during my degree. The team adopted agile practices in two-week sprints and regular team meetings that contributed towards a professional standard and consistent development progress
The atmosphere was great with several of my teammates being motivated to put in the hours required to meet some ambitious project goals. There were conflicts with certain members of the team not meeting the contribution standards that had been set. By putting into practice some of the management skills I developed with the League of Legends program we were able to resolve these through open communication and keep everyone working together towards the end goal we had established early on in the development cycle.
There are several significant lessons learned from working on this project. Of course technical skills were developed and are discussed extensively on this page but there are three primary lessons to do with marketability, collaboration, and development.
The primary culprit of this is changeable color themes. While this is a neat feature to have it means that different users experience significantly different apps. If we were to pursue advertising the app would look different from one advertisement to the next making it more challenging for a recognizable brand to be built. Given this experience, I would argue an app should put extensive effort into one thematic design that makes sense given the product and is recognizable from one user to the next.
The idea here is that when any two entities with separate disciplines, skill sets, and perspectives are interacting it is crucial that there is someone who can bridge the gap between them. For example, a person who can mediate the conversation between engineers and management, or management and designers, any two different entities is imperative to effective functioning of the team. In addition to this, a person who can help resolve the conflicts arising between individuals or groups of people saves tremendous amounts of time.
Perhaps the biggest mistake we made was going wide to early into development. As a result, some of the core features including the routes tracking capabilities and social community components feel underdeveloped. Likely more time should have been dedicated to perfecting the route features as that is the core selling point of the app. The most important two or three features should be identified and thoroughly developed so they stand out as exciting features of the product.