We have seen anonymous confession apps for some universities but generally not for universities in the UK, which is where we live. Therefore we decided to make this app for UK universities.
What it does
The app allows Cambridge University students or faculty to post anonymously to a feed that shows to all users. Users are able to upvote/downvote posts and comments, comment, and like posts. Users can also filter posts by the general feed, liked posts, and the user's own posts. The app verifies users via email using the person's university ID, which means only registered members of the university can have access to the app's content.
How we built it
We decided to use Flutter because it's the easiest way of implementing a cross platform app quickly because this allows us to avoid having to write separate Android and iOS versions. We used Firebase for our backend because it's the quickest and most secure way we found to structure our app data. This allowed us to complete the app in the time given as it meant we did not have to write our own back end from scratch. We installed Flutter and did our development in Android Studio. We simulated our app during development using the built in X-Code simulator. The first thing we started with was getting the basic feed working, so thought about how to structure our collections and documents in Firebase and decided that it's best to have a dedicated posts collection with all post data included. Once we got the main feed working we then implemented user login and authentication for which we made separate registration, login, and verification screens. This was relatively easy to implement due to the work FirebaseAuth does behind the scenes, which allowed us to easily check the ID of the signed in user, send verification emails, and check whether a given user's email has been verified. After login worked, we started to associate posts with a given user's ID in the post document and began work on the individual posts screen. Then we started to implement comments, tying them with each post. In the end, we used Provider to manage state as we found that was the best way to manage all the post and comment widgets within our app. Our project was essentially finished at this point but we still had time left to add more features, so decided to do this. We added the option to filter posts by user's own posts by adding a field to the user's collection which contains all of the user's associated post IDs. In a similar way, we added 'likes' so that users could like a post and then filter by posts they've liked. Throughout the project we improved the look of the app and user interface, implementing features such as scroll physics and pull to refresh. We kept the look simple and easy to navigate whilst keeping it Cambridge themed with the colour scheme.
Challenges we ran into
One of the biggest challenges faced was actually learning Flutter in the first place. We did this through Flutter's well written documentation and Youtube videos posted by the Google team. Another challenge was limiting the number of database requests the app makes as much as possible. During testing we found that one of the biggest culprits was the fact that each comment on a post was loaded individually and not as a collection, meaning that when someone clicked on a post, the number of requests was the same as the number of comments. We solved this by moving the comments collection from being a top level collection to being sub collection of each post. This reduced the number of requests for comments for each post down to one request. To improve user experience, we implemented local state changes for aspects such as upvotes and likes, which means that the data was updated and displayed locally, while handling database writes in the background. This improved the immediacy of actions, as the widgets did not have to wait for database requests to complete before refreshing.
Accomplishments that we're proud of
We finished everything we wanted to in time, and so added extra features that we originally didn't think about, such as the option to like posts to have easier access to them, and also a separate feed that shows users their own posts. We did not expect to learn and finish the project this quickly, so we are extremely proud of our work.
What we learned
We learnt that coming from a web-development background, with experience using frameworks such as react, made it easier to learn Flutter as the concepts are quite similar. We also learnt it is extremely important to think about app structure before making the product as it was very difficult to refactor aspects of the project at a later point. We found this out by stressing out over debugging our somewhat spaghetti code.
What's next for Fess
Expanding the app to allow users to match with one another and chat anonymously. We plan to launch this as an actual product after Christmas and, if successful, potentially expand this to other universities.