BusBuddies
Where We Started, The Bumps in the Road, and Where We’re Heading
Inspiration
794,950 students ride the bus every day in North Carolina, a majority of which are from rural areas. So many of these students miss the bus because they can be unreliable– whether they show up too early, too late, or not at all. Coincidentally, these unreliable buses are most common in rural areas. If a student misses only two days of school in a single month, they are labeled chronically absent. Studies show that chronically absent students have lower grades, test scores, higher failing rates, and a correlation between graduating late or not ever.
As three Pitt County students who ride the bus both in the morning and afternoon, bus breakdowns, unprecedented stops, and general delays are our everyday. While we know that we can’t tackle the problem at the source, as that would be close to impossible, we were inspired by our own experiences to come up with a solution that would make our lives a bit easier. We needed something quick, accessible, and reliable that a student could use to know when their bus would arrive, especially on days when these hiccups would be prevalent. The solution we came up with tackles all these things and more. Introducing, BusBuddies.
What it does
BusBuddies utilizes in-app communication to keep students informed on when their bus will arrive. This includes chat features like push notifications, user-based messages, and app-based messages as well as data storage features such as route creation, and custom route settings. Push notifications will be sent out every time a fellow bus rider presses the “I’m On!” button, a student or driver sends out a message to the rest of the riders, or the app has another update that the user must be aware of.
Our user interface has been designed to be easy for kids of all ages to use. All students need to do is press a single button to use the app and all the information that a bus rider could need to catch the bus is located intuitively on one page. We also include profile options such as a profile picture the user can choose of one of our Buddies all designed to be inclusive and relatable, such as our wheelchair and blind buddies. Our graphic design and programming team work closely together to make sure the UI is clean, simple, and intrinsic.
As well as being comprehensive, our app is unique not only in its functionality but its appearance. The use of our “mascot”, Bussy, makes our app recognizable to the user and gives our brand a visual identity.
Our app will be helpful to users who are blind or visually impaired by the use of screen readers. This software will allow users in need to read text and image descriptions that are displayed on the screen through screen reader compatibility.
How we built it
Our app front-end was built with Android Studio, using the languages Java and XML. The backend was made using Google Firebase. Lastly, the GPS feature utilizes the Google Maps API from the Google Maps Platform. The first step in making the app was to create the blueprints and pseudocode the app by planning out all the pages in the app and adding buttons for everything the app needed to do. After this, we had an app that could click through a lot of pages that were basically empty except for buttons that didn't do anything. Now we had to add functionality. The first thing our programmer added was user authentication. Our programmer used Google Firebase’s authentication feature to do this. Now our app requires the user to make an account or log in to access its features. After that, the programmer programmed the page that deals with first-time sign-ups. This page collects and stores all the information that the app might need about a user. This was done using Google Firebase’s realtime database feature, with a branch in the database called “Users”.
Root{
Users{
UserID: "LongUniqueCodeOfNumbersAndLetters"{
Name: "Miles"
Username: "Miles's_cool_username"
Email: "Miles@Gmail.com"
Profile Image: 0123456789
}
}
}
Now that we had a way to add users, collect information about the users, and store that information, it was time to work on the first main important functions of the app. It was now that the programmer added functionality to buttons that would allow the user to create and join routes. These routes were stored in the user's account and were displayed on the main page of the app. This data was stored in the realtime database in a branch called “Routes”.
Root{
Users{}
Routes{
RouteID: "LongUniqueCodeOfNumbersAndLetters"{
RouteName: "Miles' Route"
RouteCode: "12345"
Members{
Miles: True
Ella: True
Cayden: True
Tobby: True
}
}
}
}
Next, we needed the most important part of the app, the bus tracking features. First, our programmer added a chat feature, so that users could message each other about updates with the bus. This was done by adding a child branch of “RouteID” to the database, called “Messages”.
Routes{
RouteID: "LongUniqueCodeOfNumbersAndLetters"{
RouteName: "Miles' Route"
RouteCode: "12345"
Members{
Miles: True
Ella: True
Cayden: True
Tobby: True
}
Messages{
FromCurrentUser: True
Message: "Hello Guys!"
Sender: "Miles"
SenderProfileImage: 0123456789
SenderID: "LongUniqueCodeOfNumbersAndLetters"
Timestamp: "3-16-24, 2:42pm"
}
}
}
The next step was to keep track of the older people in the route get picked up. To do this the programmer wrote a program that displays the list of members in a route. This list can be edited by dragging the member's names into a different order. This order is then saved and stored in another child branch of “RouteID”, called “Order”.
Routes{
RouteID: "LongUniqueCodeOfNumbersAndLetters"{
RouteName: "Miles' Route"
RouteCode: "12345"
Members{
Miles: True
Ella: True
Cayden: True
Tobby: True
}
Messages{
FromCurrentUser: True
Message: "Hello Guys!"
Sender: "Miles"
SenderProfileImage: 0123456789
SenderID: "LongUniqueCodeOfNumbersAndLetters"
Timestamp: "3-16-24, 2:42pm"
}
Order{
1: Ella
2: Tobby
3: Miles
4: Cayden
}
}
}
The original plan for the app was to make only the creator of the route able to edit this field, along with other settings for the specific route, our team unfortunately did not have time to program these features. Next up on the to-do list was the app’s “I’m On” button. When pressed by a user, the button would send a message to the chat saying that the user was on the bus, along with the next person who would be picked up by the bus. To do this the app accessed the “Order” branch in the realtime database. The last feature that our team had time for was making a GPS feature. This was done by using the Google Maps API and implementing it into the app. Now that the app was functional, we needed to make an appealing and accessible UI. Our artist designed many images and icons for the app. Then our graphic designer converted these images into SVG files along with other UI elements they designed. Once our final UI layout was created, and our programmer had all the SVG files they needed, they began programming the app’s UI in XML.
Accomplishments that we're proud of
One of our accomplishments was simply completing the application. To start, two of our team members had no experience coding, so we relied solely on our programmer for the coding side of the project. However, other tasks needed to be completed that didn’t require software skills, so efforts were focused on that. Even without any app-making experience, our graphic designer and artist worked together to fill in the gaps where the programmer couldn’t. Although general schoolwork piled on top of us, causing less and less time to be spent on the competition, we always made room in our schedule to meet deadlines. As a team, we are extremely proud of the final result. But the app wasn’t the only accomplishment made during this time. All of our team members learned something along the way. Our programmer learned the basics of backend development. Our UI designer learned what SVG files are, why their useful, and how to create, edit, and send them. Last but not least, our artist learned the basics of animation. Unfortunately, we couldn’t use the animation in the final product, however, they can use the skills they gained in the future. We will all carry the skills we acquired in this competition with us forever. That's our biggest accomplishment, gaining expertise about topics that we will use in the future.
Challenges we ran into
That’s not to say that there weren’t other issues along the way. Even though our programmer had previous coding experience they had never touched a backend server and barely knew how to do backend programming at all. This lack of knowledge ultimately led to us choosing to use .NET Maui, a multi-platform framework for creating mobile and desktop apps with the languages C# and XAML. This choice caused many problems that could have been avoided if we had known more about mobile app development and backend development. Due to the knowledge gaps our programmer had, the first step in building the app was learning. They had to do a lot of research just to know where to get started. Once we had a rough idea of what needed to be done our programmer began development using .NET maui. Soon we realized that we needed a way to store data for the app, so after some more research our programmer found Auth0. Quickly after our programmer started work, it became clear that Auth0 was not going to be the best backend cloud server to use. We pivoted to start using Google Firebase, however, Firebase proved to be extremely difficult to integrate with .NET Maui. At this point, there were 2 weeks left in the competition, and we were faced with a decision; Do we restart using Android Studio, scraping weeks of work with not much time left, or do we continue with .NET Maui and hope that our programmer could finish in time. We soon came to the conclusion that the second option would not yield results in time as it took over 3 weeks just to create a sign-in feature that wasn’t dependable using .NET Maui. Starting over felt like giving up, but soon became necessary due to the time restraints we were in. Luckily, Android Studio proved to be much easier to use, and soon enough, we were moving faster than ever in development. Our app was completed just in time for submission and we were left with a successful product.
What we learned
One of our main lessons was not to be afraid to start over. Once dropping .NET Maui and switching to Android Studio, our programmer was able to better integrate Google Firebase with the app. There were also many more tutorials for Android Studio, which provided our programmer with more resources to learn how to create what we needed. Though scary at the beginning, we would be in a much different place if we didn’t choose to take the risk. Now, instead of scrambling to finish what we need, we can think of what we can add next.
What's next for BusBuddies
BusBuddies aims to partner with schools starting in Pitt County to give students the opportunity to not only show up for their education in a timely manner, but help bring test scores, grades, and graduation rates up in a way that benefits students, staff, schools, and the community at large. Partnership with PCS would help create a more individual user experience that caters to a school’s specific needs. Things like a bus driver mode and joining routes based on your school would be implemented if we gained this partnership. Many other features will be added in the future.
Future Features
- Email verification to make sure that the email provided by the user is an actual email that exists. This would also allow the app to send people emails.
- An edit profile page for users to edit their profile information or delete their account.
- A settings page for students to edit settings dealing with GPS, notifications, and the routes they are in.
- A calendar, for students to mark when they won't be riding the bus, or for bus drivers to mark when the bus route will change or be delayed.
- An inbox to display messages that the app sends to individual users.
- An invitation system for joining routes so that the creator of a route can invite people to the route based on their username. This invitation would go to the user's inbox and they would be added to the route upon accepting the invite.
- A join request system so that instead of being instantly added to a route, when you join a route, a request will show up in the inbox of the user who created the route. You will then only be added to the route upon acceptance of the request by the route creator.
- A manage route membership page so that the creator of a route can remove people from a route or delete the route entirely. This page could also be used for users to remove themselves from a specific route.
- A progress bar that represents how far along the bus is on its route at any given time.
- A “Learn” feature that will record certain data while a route is running when the “Learn” button is clicked. The app will then learn how long the route takes and the amount of time between each stop. Based on this it will be able to give users a time estimate for the bus to arrive. The app will then be able to tell if someone has not pressed the “I’m On” button. A few minutes after the bus is predicted to arrive at someone's house, the app will send a notification to the user to remind them to press that button. If they continue to not press the button the app will send a tentative warning to the rest of the route members. This warning will inform them that either the user didn’t press the button and the bus is still on schedule or that something is causing the bus route to either change or be delayed.
- A route update field for members to update the route while it's running, this way the app can inform people of changes to the route while the bus is running the route. For example, if there is an accident or road work that is slowing the bus down, members can notify the app, and the app will account for the delay, as well as let members know.
- A customizable buddy for users to customize in the app using points they earn from using the app. This will help motivate users to use the app to help out their fellow bus riders.
Team Mission
We are a self-led team made for students, by students, to improve the bus-riding experience for everyone, no matter where they live in a simple and accessible way. Our team is fully equipped with passion and exposure to this issue. Our time creating this app has given us a new outlook on teamwork and, most importantly, time management. While it was no easy task, the process of creating BusBuddies has been nothing but fulfilling. We hope to bring this same fulfillment to as many users as possible.



Log in or sign up for Devpost to join the conversation.