This is a project of the CIIS course (WS 2020/21). The content below was created by Philipp Jahn.
What is BayreuthRace?
BayreuthRace is an app for inhabitants of Bayreuth, for people that are new to the city, but also for people that know Bayreuth for some years.
With my app, you can discover and get to know the city by doing quests about Bayreuth. But you can only do a quest on your mobile phone, if you are less than 50m away from it.
After you did a quest you achieve points, depending on your answer and the time, how fast you ticked an answer. With your ranking points, you take part in the user ranking, where you can see, how good you know Bayreuth, compared with other users.
But what can you do with the app if there are no more new quests?
Then, you can create your own quests about the city for the other users! After you published them, the community can play your quests!
But how do the quests look like?
There are two types of quests: multiple choice questions and guessing questions, where you have to guess the correct value. There are 6 different quest topics:
history, culture, city, people, nature, guessing
Right after the start of the semester I thought of the students, that just started studying in Bayreuth during a worldwide pandemic. How can they get to know the city and people if there are only a few events for them? With my app I’m trying to solve this problem.
How does the final app look like?
There are 4 main tabs in the app.
- The maps tab, where you can walk through the city and discover and play the quests
- The statistics tab, where you can see the user ranking and the quests, you already did
- The recommendations tab, where the app offers you quests to play, based on the users’ distance from a quest, based on the favorite quests types of the user and based on a random recommendation
- The “quest factory” tab, where users can create and manage quests, that they created for other users
The first hard part of designing the app was, to find a good concept, of how to code the app. Which database should I use? How should I structure the data? How can I access the data in a good way? I decided, to use Google Firebase, because it offers easy functions, to manage the database access.
A disadvantage is, that joining data is a bit hard in Firebase, because it is a NoSQL Database. So, I decided, to do the joining process on the client.
Lesson learned 1:
Don’t underestimate the time it takes, until you have a concept for the App. At the beginning I thought that this would be the easiest part.
But nope, it was not the case. And It would have been even more time consuming if the website stackoverflow would not exist.
When I finally had my concept, I started coding the app. It consists of 4 different class types:
- The UI classes (Fragments,Activities)
- The ViewModel Classes, which provide functions for the UI classes, to access the database.
- The Repository, which manages all the database access logic
- The “Helper Classes” which are simple classes, that store the Database and User specific data (Quests, Users, …) and App data.
Lesson learned 2:
Don’t underestimate the time it takes, until you reach a coding “flow”. Until I got a feeling, how all the different functions from the SDKs work (FirebaseAuth, Firebase Firestore, GoogleMaps, ..),
it took a lot of time and frustration, to debug all the errors, that came up.
Again I have to say thank you to stackoverflow, which always offers a solution for a problem!
After the logic of the App worked, I decided to quickly build the UI. Well, quickly turned out to more than 4 days, finding a good design and understanding the Constraint Layout of Android Apps.
Lesson learned 3:
Don’t underestimate the time it takes to build a UI. You know whom I have to thank, that the UI building didn’t even take more time (It starts with “Stack” and ends with “Overflow”)
After the UI and the logic was built, I started to look for potential errors and gave the app to some friends, to get some feedback about the UI and to see, if there are bugs on other devices.
Lesson learned 4:
If you think, you are nearly finished with the App: You are not finished!
Now my App prototype is finished and I’m looking back to the 2 moths of coding. In this time, I have learned a lot about coding an app.
But the most important things I learned, while coding BayreuthRace, is the following lesson:
Lesson learned 5:
Don’t underestimate the time it takes, to code an app. Use stackoverflow.