stefangaller.at

aufi-icon.png

AUFI.run

In Kürze

  • Typ: Flutter Web-App
  • Zeitraum: 2024 – heute
  • Monetarisierung: Kostenlos
Webseite

Das Problem

Als begeisterter Läufer beginnt man irgendwann darüber nachzudenken, sein Training selbst zu strukturieren. Jeder Körper ist anders, weshalb fertige Trainingspläne einen Anhaltspunkt, aber keine ideale Lösung darstellen.

Wer tiefer in die Welt des Trail- und Ultralaufs eintaucht, erkennt schnell, dass allgemeine Trainingspläne den spezifischen Anforderungen dieser Laufdisziplinen nicht mehr gerecht werden.

Früher oder später haben viele der Läufer ein **selbstgebautes Excel-Sheet **, in dem sie ihr individuelles Training planen.

Natürlich gibt es bereits Plattformen, die zur Erstellung von Trainingsplänen dienen. Jedoch sind diese oft auf Straßenläufer ausgelegt. Für jene wird der Trainingsumfang üblicherweise in Kilometern angegeben.

Durch die oft hügeligen Strecken von Trailläufen ist jedoch eine Trainingssteuerung über Stunden besser angebracht. Außerdem spielen die zurückgelegten Höhenmeter eine wichtige Rolle.

Die oben genannten Anforderungen werden also durch die vorhandenen Lösungen nur bedingt erfüllt.

Die Lösung

AUFI.run ist eine Plattform, die genau diese Unzulänglichkeiten beseitigt. Speziell für das Training auf Trail- und Ultraläufe ausgelegt, richtet sie sich perfekt an die Zielgruppe der Nicht-Straßen-Läufer.

Ein primäres Feature ist die langfristige Trainingsplanung. Damit können Läufer ihre Trainingsumfänge über Monate hinweg Trainingsumfänge planen und das Training in **Makro-Zyklen ** gliedern. AUFI unterstützt dadurch gezielt die Beobachtung der Trainingsumfänge und weist die User auf zu hohe oder zu niedrige Umfänge hin.

aufi-plan-page.png
Die Planungsansicht erlaubt langfristige Zielsetzungen des Umfangs.

In der **kurzfristigen Planung ** können die Nutzer ihren geplanten Trainingsumfang auch detailliert auf Workouts aufteilen. Durch eine Anbindung zur API von Garmin können dann direkt Planung und tatsächliches Training miteinander verglichen werden.

aufi-calendar-page.png
Dank API-Anbindung können Plan und Training miteinander verglichen werden.

AUFI.run befindet sich zurzeit in der Aufbau-Phase. Das bedeutet, dass das Augenmerk auf dem Aufbau einer regelmäßigen Nutzerbasis liegt.

In der Zukunft sind auch Möglichkeiten zur Monetarisierung vorgesehen. Vorstellbar wäre zum Beispiel der Verkauf von Trainingsvorlagen oder bezahlte Accounts für Trainer, mit denen sie die Trainingsplanung für andere Nutzer durchführen können.

Technische Details

AUFI.run ist als Microservice-Architektur strukturiert. Im Backend sind drei Services für verschiedene Aufgaben zuständig.

Jedes Service steht als Docker-Container zur Verfügung. Dadurch kann es individuell gestartet und gestoppt werden. Das vereinfacht sowohl die Entwicklung als auch das spätere Deployment.

Identity und Access-Management (IAM)

Keycloak ist als Identity und Access-Management (IAM) Service für die Verwaltung der User und ihrer Authentifizierung mit dem System zuständig.

Es übernimmt die Aufgaben der Nutzerregistrierung und der Möglichkeit eines Social Logins mit Google. Außerdem ist es für den Login und die Erstellung von JSON Web Tokens (JWT) verantwortlich, mit denen sich die Nutzer für die Verwendung der Dienste authentifizieren können.

Activity Service

Diesem Service obliegt die Verwaltung der von den Usern erstellten Aktivitäten, so wie der Synchronisierung der Aktivitäten von externen Services wie Garmin Connect.

Durch den Push-Ansatz der Garmin-API stehen hier Endpoints bereit, um die Daten von Garmin zu empfangen.

Die empfangenen Daten werden zur besseren Verwendung harmonisiert und für den Nutzer verfügbar gemacht.

Plan Service

Im Plan Service werden die vom User erstellten Pläne verwaltet. Das beinhaltet sowohl die langfristige als auch die kurzfristige Planung des Nutzers.

Die Daten werden über eine REST-API zur Verfügung gestellt und in einer PostgreSQL Datenbank persistiert.

Web-App

Die Web-App bietet die Nutzeroberfläche des Systems und wurde mit Flutter implementiert. Die Verwendung einer Cross-Platform-Lösung erlaubt es in Zukunft, auch Apps für Android und iOS zur Verfügung zu stellen.

Über ein API-Gateway werden die Zugriffe der Web-App auf die verschiedenen Services orchestriert. Je nach Zweck werden die Anfragen an das zuständige Service weitergeleitet.

Landing-Page

Abgerundet wird AUFI.run durch eine Landing-Page. Diese dient als initialer Berührungspunkt für potenzielle Nutzer. Sie bietet eine Übersicht über die wichtigsten Funktionen und lädt den Besucher dazu ein, die Web-App auszuprobieren.

Schematische Darstellung der Architektur von aufi.run
Schematische Darstellung der Architektur von AUFI.run

Das habe ich gelernt

Wie bei der Entwicklung von Trexpense habe ich durch die eigenverantwortliche Ausführung des Projekts alle Aspekte der Entwicklung kennengelernt. Das erlaubte es mir, mein Wissen insbesondere in der Architektur des Backend-Systems weiter zu vertiefen.

Im Folgenden gehe ich weiter auf die verschiedenen Schwerpunkte ein, die ich im Laufe des Projekts gelernt habe.

Microservice Architektur

Ursprünglich als Monolith geplant, stellte sich schnell heraus, dass die Aufteilung in verschiedene Services die bessere Variante sein würde.

Bereits die Verwendung von Keycloak als IMA Service führte zur Heraustrennung der Authentifizierungslogik und der User-Verwaltung.

Durch die speziellen Anforderungen der Anbindung an die Garmin-API, beschloss ich auch die Verwaltung und Synchronisierung der Aktivitätsdaten in ein separates Service auszulagern.

Spannend war für mich auch die Implementierung der Kommunikation zwischen den verschiedenen Teilen über einen Reverse-Proxy, implementiert mit nginx.

Containerisierung mit Docker

Durch die Aufteilung der App in verschiedene Services war für mich auch die Verwendung von **Docker-Containern ** ein logischer Schritt. So war es möglich, an einzelnen Komponenten zu arbeiten, andere aber als Container laufen zu lassen, um direkt die Integration testen zu können.

Durch die Verwendung von Docker-Compose konnte ich den Aufbau und die Abhängigkeiten der Services bereits in der Entwicklungsumgebung testen, was das Deployment erheblich erleichterte.

Backend-Entwicklung mit Go

Vor dem Beginn der Umsetzung recherchierte ich über die verschiedenen Möglichkeiten der Backend-Implementierung. Davor hatte ich bereits mit Java bzw. Kotlin und dem Spring-Framework gearbeitet.

Durch hilfreiche Bibliotheken, die die Anbindung an die Garmin-API erleichterten, beschloss ich das Backend in Go zu implementieren.

Durch die Arbeit mit Go erweiterte ich mein Technologie-Portfolio um eine leistungsstarke Sprache für Backend-Services, die ich nun auch für zukünftige Projekte einsetzen kann.

Flutter Web

Der Einsatz von Flutter-Web erlaubte es mir, in gewohnter Qualität die Benutzeroberfläche für AUFI.run umzusetzen.

Durch das schnelle Feedback durch Flutter konnte ich iterativ das Aussehen der App verbessern, ohne langwierige Änderungen vornehmen zu müssen. Das half auch neue Ideen zügig ausprobieren zu können.

Flutter eignet sich perfekt für die Entwicklung von Web-Applikationen, die nicht auf Search Machine Optimisation (SEO) angewiesen sind. Zusätzlich habe ich die Möglichkeit, in Zukunft auch eine Mobilversion der App anbieten zu können und dabei auf bestehenden Code zurückgreifen zu können.

Die 3 wichtigsten Erkenntnisse für zukünftige Projekte

1. Offenheit der Technologieauswahl statt Gewohnheit

Eine offene Einstellung zur Auswahl der Technologie ermöglicht **maßgeschneiderten Einsatz ** passend zu den Anforderungen. Der Einsatz von Go führte zu einer hochperformanten Umsetzung des Backends.

2. Unabhängiges Identity-Management mit Keycloak

Ist man bereit die Konfiguration und Wartung von Keycloak zu übernehmen, bietet es eine tolle Möglichkeit Identity-Management selbst zu hosten.

3. Schnelle Entwicklung und Deployment mit Containern

Die Verwendung von Containern beschleunigte meine Entwicklung durch konsistente Entwicklungsumgebungen und erlaubte mir zuverlässige Deployments auf die Produktionsumgebung.

Dein Partner für App-Entwicklung in Graz.

Jetzt kontaktieren und kostenloses Erstgespräch vereinbaren.

Kontaktiere mich