There are many reasons why people eat alone. Maybe they prefer the solitude. Maybe they have a lecture at odd times that no friend of theirs is taking. Maybe they are new to TUM and don't have many people to eat lunch with yet.

For the latter reasons, wouldn't it be nice to bring people together at the lunch table? The casual and relaxed setting is great for building relationships of whatever kind without any obligations.

What it does

With our app, it is easy to find someone to eat with (a MensaBuddy!). Simply select a Mensa, enter a time interval in which you'd like to have lunch in (eg. 1-2 pm), and a minimum duration for the meal (e.g. 30 minutes).

Then, our app matches you with another user of the app, with whom you have an overlapping time interval with. To improve the quality of matches, we developed a set of psychological questions everyone answers, and a intelligent matching algorithm that takes a bunch of factors into account.

Very importantly, the matching is totally anonymous. You don't need to sign up, you just download the app and jump right in. Nobody will know anything about their MensaBuddy until they actually meet. We see this as an analogy to sitting next to someone randomly and getting into a conversation them.

After lunch, users can decide in the app if they would like to exchange contact information. Only if both agree, they can send a message to each other.

How we built it

As we had some prior experience with Android, we build a native Android stack with Kotlin. For the backend, we chose Firebase, which is very flexible, easy to scale and can be set up very quickly.

The matching algorithm is implemented in Node.js/TypeScript and runs as a Firebase Cloud Function. Conceptually, we used a stochastic Monte-Carlo like approach, sampling a number of different matching configurations among all users currently matching and choosing the "best" matching. This approach ensures that the algorithm yields good results, even with scale.

Challenges we ran into

As we both did not work much with backend systems before, it was quite a challenge to build a backend system this quickly. Fortunately, Firebase is quite intuitive to use and provides a lot of documentation.

In addition, developing a satisfactory matching algorithm was not easy. Particularly for large numbers of users, it is computationally infeasible to always find the optimal matching configuration. This is why we backed to a stochastic approach as described above.

Accomplishments that we're proud of

First of all, a working prototype! ;)

In addition, we gave a great deal of attention to our user interface and we're proud that is has become quite intuitive and aesthetically pleasing.

We also believe that we have developed a good matching algorithm that is well-suited to the problem, giving fairly satisfactory results considering its compactness. Also, it is easily scalable and can still process large amounts of users relatively efficiently.

What we learned

A learned a lot about how to build a project from scratch efficiently, and in particular how to set up backend systems. And one thing most of all - teamwork.

What's next for MensaBuddy?

The matching algorithm can be improved in various ways. One idea is to develop a neural network that improves the matching quality by looking at which people stay in touch based on their answers. This could substantially improve the matching accuracy.

Also, we would to extend the app to serve more Mensas (there are 33 Mensas in Munich alone!)

Finally, while we would like to retain the anonymity in our app, we recognize the potential for abuse. We plan to introduce a one-time email verification scheme, so every user must verify that they are a student by signing up with their university email.

Share this project: