Eat with me

Software & Web Engineering | University of Applied Sciences Münster
EATWITHME offers an app to easily and uncomplicatedly meet people from your own city. No matter if you are new in town and want to meet people, or if you are just in town for a few days for vacation.
Project Overview
Our Vision
Everyone has to eat, yet there are many people who like to cook. So how about making it possible for people to get to know each other directly over a meal instead of arranging an awkward meeting via Tinder or Bumble. That's why with EatWithMe, you don't swipe up on other users, you swipe up on your future favourite dishes.

As soon as two or more users like the same recipe, they can be matched. That way, you have a topic and activity to talk about directly. Such meetings don't necessarily have to be geared toward getting to know each other in a "date" context, but also help people connect in a new city or simply get to know new people.

How it Works
Users therefore receive recipe suggestions in the form of UI cards that they swipe either right or left. If they swipe right and like a recipe, they are matched with other users in their immediate vicinity. They can decide whether they want to be matched with a group or just with one other user.

Once they are in a group with other users and everyone accepts the match, they will get a group message where they can communicate to discuss everything else. The swiped recipe is directly set as group content and a shopping list is linked on which the group participants can tick who gets which ingredient. The only thing left to do is to clarify who will be doing the cooking.
My Contributions
The prototype of the app consisted of several microservices among which one for managing users, one with a matching algorithm that matches users, another for managing recipes and dishes, and one for exchanging messages via chat and managing associated group data such as shopping lists.

My contribution to the app included idea generation and further development, technical and functional conception, and the development of the chat microservice.

This service provides a chat service based on HTTP polling. The messenger functionality, allows multiple groups, with multiple users, as well as simple peer-to-peer messaging.

In addition, this service manages the shopping list associated with each chat. On this, users can mark ingredients to be purchased from the shopping list, which will then end up on the personal shopping list. The user can check this off when he buys one of these items.

In addition, a frontend in the form of a progressive web app was built, as well as an Android app. The frontend thereby complies with common security standards, includes appropriate CORS settings, precautions to protect against CSRF attacks, has extensive data validation, modern session management and precautions for registration and authentication. Data is also stored in the database in encrypted form.
Technical components
Components included an Android app as a native client and a single-page application as a progressive web app. Microservices included user & profile management, matching algorithm, chat management and purchase management as well as recipe management.A relational MySQL database was used as the database. For event communication we used different queue systems using RabbitMQ and we managed our images with Imgur.
Software & Web Engineering
Student Project | Bachelor's Course
Mar 2020 — Jul 2020
Wireframes
We created wireframes at the start of our project to plan and organize the layout and structure of our website or application. They helped us to communicate our ideas and gather feedback before moving on to the visual design phase and development. This ensured a more efficient and effective process, and helped us to create a better end product.
Techstack

Frontend

For the implementation of our frontend infrastructure, we employed the use of WebComponents based on the polymer project LitElement (currently known as Lit) and developed the entire system utilizing TypeScript, JavaScript, CSS and HTML. To ensure high quality, we conducted testing through the utilization of Karma and Jasmine, linted our project with ESLint, and evaluated coverage with Istanbul. As our integrated development environments, we employed the use of VSCode and IntelliJ, and accomplished bundling of our project through the implementation of WebPack with PostCSS as a post processor.

As component libraries, we favored Material Design WebComponents, which we augmented with additional WebComponents from Weightless, Vaadin, OpenUI5. Additionally, we constructed some WebComponents in-house. In terms of libraries, we employed the use of Lodash, Moment.js and Hammer.js and managed the entirety of our project through npm.

Backend
In the implementation of our backend infrastructure, we employed the use of the Spring framework, heavily relying upon Spring Boot, and developed the entire system utilizing the Java programming language. Quality assurance and testing were conducted through the utilization of Postman for API testing, Jacoco for coverage analysis, SonarLint for linting, and Swagger for the description of our REST API. Build management was accomplished through the employment of Maven and Gradle. Our database management system of choice was MySQL, with Hibernate serving as the JPA driver, and images were stored on Imgur. Inter-service communication was facilitated through the implementation of RabbitMQ for event messaging. IntelliJ and Android Studio were utilized as our integrated development environments. Additionally, we incorporated the incorporation of the Lombok library to minimize boilerplate code and maintain the leanness of our services.