Jamify

Gruppenarbeit

Jamify war eine Studienarbeit aus dem Kurs “Programmierprojekt mobiler Endgeräte” im 4. Semester meines Bachelorstudiums. Ziel war es, eine IOS App zu entwickeln, die es ermöglicht zusammen mit Freunden eine Musik-Warteschlange zu erstellen. Die App des Hosts der Gruppe ist hierbei mit Spotify oder Apple Music verbunden und spielt die Musik ab. Alle weiteren Teilnehmer benötigen lediglich unsere App, um Lieder zur Warteschlange hinzuzufügen.

Zusätzlich ist es möglich die Abspielreihenfolge der Lieder durch Voting zu ändern, sodass die beliebtesten Songs als erstes gespielt werden. Falls ein Lied nur negative Votes erhält, wird es aus der Warteschlange entfernt.

Frontend

Das Frontend wurde mit SwiftUI entwickelt und hat abgesehen vom Spotify und Apple Music SDK sowie dem OpenAPI Client Generators nur wenige Abhängigkeiten zu externen Paketen. Es wurde die MVVM-Architektur verwendet und die Daten vom Model über die ViewModels weiter zu den Views propagiert.

Es gibt 3 Hauptansichten:

  • Warteschlange: Hier werden die Lieder angezeigt, die zur Zeit in der Warteschlange sind. Nutzer können diese Lieder voten und der Host kann Lieder entfernen.
  • Suche: Hier können Nutzer nach Liedern suchen und diese zur Warteschlange hinzufügen.
  • Nutzer: Hier werden alle aktiven Nutzer der Gruppe in einem Leaderboard angezeigt. Nutzer erhalten Punkte, indem sie Votes erhalten.
Warteschlangen-Ansicht der Jamify-App mit fünf Songs und Voting-ButtonsSuche-Ansicht der Jamify-App mit SuchergebnissenBenutzer-Ansicht der Jamify-App mit einer Rangliste von vier Nutzern und ihren Scores

Backend

Für unser Backend haben wir NestJS verwendet. Das Backend ist hauptsächlich für die Verwaltung der Gruppen, Nutzer und der Song-Suche zuständig. Die Kommunikation mit dem Frontend erfolgt über REST-Endpunkte, während die Warteschlange über Server-Sent-Events (SSE) aktualisiert wird. Wir haben und für SSE entschieden, da der Status der Warteschlange primär eine unidirektionale Kommunikation von Server zu Client ist.

Um bei der Song-Suche die Spotify und Apple Music APIs nicht zu überlasten, haben wir Caching verwendet. Dadurch konnte die Anzahl an API-Anfragen reduziert werden und die Antwortzeit unserer API verbessert werden.

Da NestJS bereits eine eingebaute Unterstützung für OpenAPI bietet, konnten wir uns automatisch eine API-Dokumentation und den API-Client für unser Frontend generieren lassen.

2025/07