diff --git a/Documentation/src/bibliography.bib b/Documentation/src/bibliography.bib
index bf923977e1be16d7fc18a8593ddd38055bdd4105..77573aa96f2a450b790e8a59c23485f836878d22 100644
--- a/Documentation/src/bibliography.bib
+++ b/Documentation/src/bibliography.bib
@@ -1,10 +1,60 @@
-@article{Migliore19,
-  author  = {Vincent Migliore and Beno{\^i}t G{\'e}rard and Mehdi Tibouchi and Pierre-Alain Fouque},
-  title   = {Masking {D}ilithium: Efficient Implementation and Side-Channel Evaluation},
-  journal = {IACR Transactions on Cryptographic Hardware and Embedded Systems},
-  volume  = {2019},
-  number  = {4},
-  pages   = {213--242},
-  year    = {2019},
-  doi     = {10.13154/tches.v2019.i4.213-242}
+@inproceedings{AssessingSharedResponsibilityModel,
+  author    = {Demissie, Biniam Fisseha and Ranise, Silvio},
+  booktitle = {2021 IEEE International Conference on Smart Data Services (SMDS)},
+  title     = {Assessing the Effectiveness of the Shared Responsibility Model for Cloud Databases: the Case of Google’s Firebase},
+  year      = {2021},
+  volume    = {},
+  number    = {},
+  pages     = {121-131},
+  keywords  = {Access control;Databases;Conferences;Prototypes;Static analysis;Tools;Data models;firebase;cloud database;security rules;android apps;static analysis;security testing;database security},
+  doi       = {10.1109/SMDS53860.2021.00026}
 }
+
+@inproceedings{EnhancingFirebaseAuth,
+  author    = {Tyagi, Shiva
+               and Vishwakarma, Akash
+               and Siddhant
+               and Sirohi, Shagun
+               and Singh, Yash},
+  editor    = {Hassanien, Aboul Ella
+               and Anand, Sameer
+               and Jaiswal, Ajay
+               and Kumar, Prabhat},
+  title     = {Enhancing the Security of Web Application Using Firebase Auth},
+  booktitle = {Innovative Computing and Communications},
+  year      = {2024},
+  publisher = {Springer Nature Singapore},
+  address   = {Singapore},
+  pages     = {491--505},
+  abstract  = {To safeguard sensitive data in modern online applications, it's crucial to secure user interactions through UI/UX design, effective authentication, and permission procedures. This research paper examines how firebase authentication works to provide strong authentication mechanism. We will also evaluate some tools which identify the vulnerability in website and finding the gaps and we can secure the data from unauthorized access. This research paper also discusses the user interaction mechanism to provide better user experience to the end users and also discusses the best practice for securing the user data and raising awareness from the attackers.},
+  isbn      = {978-981-97-4149-6}
+}
+
+
+
+@book{Gamma1994,
+  author    = {Erich Gamma and Richard Helm and Ralph Johnson and John Vlissides},
+  title     = {Design Patterns: Elements of Reusable Object-Oriented Software},
+  year      = {1994},
+  publisher = {Addison-Wesley},
+  address   = {Boston, MA},
+  series    = {Addison-Wesley Professional Computing Series},
+  note      = {Foreword by Grady Booch},
+  isbn      = {978-0201633610}
+}
+
+@misc{GDPR,
+  author       = {{Europäisches Parlament und der Rat der Europäischen Union}},
+  title        = {{Verordnung (EU) 2016/679 des Europäischen Parlaments und des Rates vom 27. April 2016 (Datenschutz-Grundverordnung, DSGVO)}},
+  year         = {2016},
+  howpublished = {Amtsblatt der Europäischen Union},
+  url          = {https://eur-lex.europa.eu/legal-content/DE/TXT/?uri=CELEX%3A32016R0679}
+}
+
+@misc{OAuth2.0,
+  author       = {Hardt, D. and IETF Working Group},
+  title        = {The OAuth 2.0 Authorization Framework, RFC 6749},
+  year         = {2012},
+  howpublished = {\url{https://www.rfc-editor.org/rfc/rfc6749}}
+}
+
diff --git a/Documentation/src/chapters/detaillierte_umsetzung.tex b/Documentation/src/chapters/detaillierte_umsetzung.tex
index 97d5645ff391d4a46b02a07d71a95a6cd089e916..abc451b4af408b02816a17c89953ce5dad81f938 100644
--- a/Documentation/src/chapters/detaillierte_umsetzung.tex
+++ b/Documentation/src/chapters/detaillierte_umsetzung.tex
@@ -13,24 +13,86 @@ Platzhaltertext ...
 % z.B. Responsive Design
 
 \subsection{Backend}
+
 \subsubsection{Spring Boot Setup}
-Platzhaltertext ...
+Die \textbf{Spring Boot}-Applikation wird über eine zentrale \texttt{Application}-Klasse gestartet (vgl. \texttt{Application.java}). Dort erfolgt die Konfiguration des Spring-Frameworks und der zugehörigen Komponenten. Mithilfe des \texttt{spring-boot-starter-web}-Abhängigkeitspakets werden automatische Konfigurationen für HTTP-Server und Dispatcher-Servlet bereitgestellt. Zusätzlich gewährleistet \texttt{spring-boot-starter-security} die Basis für das Sicherheits- und Rollenmodell.
+
+\paragraph{Projektstruktur}
+\begin{itemize}
+    \item \textbf{Application-Klasse:} Einstiegspunkt in die Applikation, verantwortlich für das Bootstrapping von Spring Boot.
+    \item \textbf{Controller-Package:} Enthält die REST-Controller (\emph{UsageDataController}, \emph{UserController}, \emph{UserRegistrationController}) zur Steuerung der Datenflüsse aus und in das Frontend.
+    \item \textbf{Service-Package:} Kapselt die Geschäftslogik (z.\,B. \emph{UsageDataService}, \emph{UserService}). Hier werden CRUD-Operationen sowie Integrationen zur Datenbank und zum File-Server abgebildet.
+    \item \textbf{Config-Package:} Umfasst sicherheits- und applikationsweite Konfigurationen (z.\,B. \emph{SecurityConfig}, \emph{FirebaseConfig}) sowie den globalen Exception-Handler.
+\end{itemize}
+
+\paragraph{Build- und Deployment-Prozess}
+Der \texttt{maven-compiler-plugin} kompiliert den Code für Java 17 und warnt bei veralteten/ungültigen Elementen (\texttt{-Xlint}). Mit dem \texttt{spring-boot-maven-plugin} kann die Applikation entweder lokal (z.\,B. \texttt{mvn spring-boot:run}) oder in einer produktiven Umgebung (z.\,B. als \texttt{jar}-Deployment) gestartet werden.
 
 \subsubsection{REST-Schnittstellen}
-Platzhaltertext ...
-% Endpoints, Datenformate
+Sämtliche \textbf{REST-Endpoints} folgen dem Schema \texttt{/api/<Ressource>} und akzeptieren bzw. liefern Daten im \emph{JSON}-Format. Im Folgenden ein kurzer Überblick:
+
+\begin{itemize}
+    \item \textbf{UserController} (\texttt{/api/users}):
+          \begin{itemize}
+              \item \emph{POST} \texttt{/users} -- Neuen Nutzer erstellen
+              \item \emph{PUT} \texttt{/users} -- Bestehenden Nutzer (teilweise) aktualisieren
+              \item \emph{GET} \texttt{/users} -- Liste aller Nutzer abrufen
+              \item \emph{GET} \texttt{/users/\{id\}} -- Einzelnen Nutzer abrufen (via \texttt{id})
+              \item \emph{DELETE} \texttt{/users/\{id\}} -- Nutzer löschen
+          \end{itemize}
+    \item \textbf{UsageDataController} (\texttt{/api/usagedata}):
+          \begin{itemize}
+              \item \emph{GET} \texttt{/usagedata} -- Übersicht aller UsageData-Einträge
+              \item \emph{GET} \texttt{/usagedata/\{day\}/\{localId\}} -- Einzelner UsageData-Eintrag via \texttt{day}+\texttt{localId}
+              \item \emph{PUT} \texttt{/usagedata} -- Teilaktualisierung bestehender Nutzungsdaten (nur \emph{Admin})
+              \item \emph{DELETE} \texttt{/usagedata/\{day\}/\{localId\}} -- UsageData entfernen (nur \emph{Admin})
+          \end{itemize}
+    \item \textbf{UserRegistrationController} (\texttt{/api/register}, \texttt{/api/verify}, \texttt{/api/accounts}):
+          \begin{itemize}
+              \item \emph{POST} \texttt{/register} -- Registrierung eines (noch \emph{disabled}) Moderator-Kontos
+              \item \emph{POST} \texttt{/verify} -- Freischaltung eines Moderators (nur \emph{Admin})
+              \item \emph{DELETE} \texttt{/accounts} -- Löschung eines Benutzers (nur \emph{Admin})
+          \end{itemize}
+\end{itemize}
+
+Die Autorisierung erfolgt über \emph{Spring Security} und \emph{FirebaseAuthenticationFilter}, wobei Nutzer-Claims (z.\,B. \texttt{ROLE\_ADMIN}, \texttt{ROLE\_MODERATOR}) über das JWT-Token abgefragt werden.
 
 \subsubsection{Datenbankanbindung}
-Platzhaltertext ...
-% Firebase
+\textbf{Firebase} (Cloud Firestore) wird als zentraler Datenspeicher genutzt. Im Backend erfolgt die Anbindung über das \emph{Firebase Admin SDK}:
+\begin{itemize}
+    \item \textbf{FirebaseConfig}: Initialisiert den \emph{FirebaseApp}-Kontext anhand der \texttt{serviceAccountKey.json}.
+    \item \textbf{FirebaseService}: Stellt Methoden zum Erstellen, Löschen und Updaten von Firebase-Nutzern (\emph{UserRecord}) bereit.
+\end{itemize}
 
 \subsubsection{Besondere Configs}
-Platzhaltertext ...
-% GlobalExceptionHandler etc.
+\begin{itemize}
+    \item \textbf{GlobalExceptionHandler:} Zentralisiert die Behandlung häufig auftretender Fehler (z.\,B. \texttt{IllegalArgumentException}, \texttt{IOException}). Auf diese Weise werden im Controller ausgelöste Ausnahmen in ein einheitliches \emph{JSON}-Fehlerrückgabeformat überführt.
+    \item \textbf{SecurityConfig:} Definiert Zugriffsregeln (z.\,B. \texttt{.requestMatchers("/api/register").permitAll()}) und integriert den \emph{FirebaseAuthenticationFilter} vor dem \emph{UsernamePasswordAuthenticationFilter}, sodass alle eingehenden Requests zunächst via JWT-Token authentifiziert werden.
+    \item \textbf{FileWatcherService}: Implementiert die Überwachung lokaler Log-Dateien. Bei neu angelegten oder geänderten Dateien werden JSON-Daten extrahiert und in Firestore eingespeist.
+    \item \textbf{Repository-/Service-Klassen} (z.\,B. \emph{UserService}, \emph{UsageDataService}): Verwenden \emph{FirestoreClient.getFirestore()} zur Abfrage und Speicherung der jeweiligen Objekte in Collections wie users oder usage-data.
+\end{itemize}
 
 \subsection{Datenbank (Firebase)}
+
 \subsubsection{Datenmodell}
-Platzhaltertext ...
+Die wichtigsten Entitäten werden in separaten Collections verwaltet:
+\begin{itemize}
+    \item \texttt{\textbf{users}}: Enthält \emph{UserData}-Dokumente mit Feldern wie \texttt{id}, \texttt{name}, \texttt{gender}, \texttt{educationalLevel}, \texttt{professionalRole} und \texttt{gameIds}.
+    \item \texttt{\textbf{usage\_data}}: Sammelt \emph{UsageData}-Dokumente, darunter \texttt{day} (Datum), \texttt{localId} (laufende Nummer), \texttt{uniqueId} (Kombination aus \texttt{day\_localId}), \texttt{steps} (Phasen) und \texttt{users} (Namen der zugeordneten Spieler).
+    \item \texttt{\textbf{moderator\_profiles}}: Speichert zusätzliche Profilinformationen zu angelegten Moderator-Accounts (z.\,B. \texttt{fullName}, \texttt{organization}).
+\end{itemize}
+
+\paragraph{Schlüsselkonzepte}
+\begin{itemize}
+    \item \textbf{Dokumentenorientiert}: Firestore legt jedes Nutzer- oder Datensatzobjekt in einem Dokument ab, wodurch flexible Strukturen möglich sind.
+    \item \textbf{Custom Claims in Firebase Auth}: Rollen und Rechte (z.\,B. \emph{ROLE\_MODERATOR}, \emph{ROLE\_ADMIN}) werden auf dem User-Record gespeichert und via JWT an das Backend übergeben.
+\end{itemize}
 
 \subsubsection{Synchronisation (File-Server)}
-Platzhaltertext ...
+Da ein Teil der Nutzungsdaten aus lokal abgelegten JSON-Dateien stammt, übernimmt der \emph{FileWatcherService} die Übertragung in die \texttt{usage\_data}-Collection. Sobald eine neue Datei erkannt wird:
+\begin{enumerate}
+    \item Der Service extrahiert relevante Felder (\texttt{"id"}, \texttt{"roleAD"}, \texttt{"steps"} etc.).
+    \item Ein \textbf{UsageData}-Objekt wird erzeugt und mit \texttt{day} sowie \texttt{localId} ergänzt (ermittelt aus dem Dateinamen und Verzeichnis).
+    \item Das Objekt wird anschließend in \texttt{usage\_data} gespeichert.
+\end{enumerate}
+Dieses Verfahren erlaubt ein automatisiertes Einlesen neuer Log-Daten, ohne dass manuell in das Backend eingegriffen werden muss.
diff --git a/Documentation/src/chapters/einleitung.tex b/Documentation/src/chapters/einleitung.tex
index 25141ad7c6714f605d189d2d82c04556826bee9d..40c73d7ae18fac4c2b2171dc3895fddd347e2177 100644
--- a/Documentation/src/chapters/einleitung.tex
+++ b/Documentation/src/chapters/einleitung.tex
@@ -4,8 +4,6 @@
 Platzhaltertext ...
 
 \subsection{Hintergrund und Motivation}
-Diese Arbeit baut auf aktuellen Forschungsergebnissen auf,
-wie zum Beispiel in \cite{Migliore19} dargestellt.
 
 \subsection{Zielsetzung der Arbeit}
 Platzhaltertext ...
diff --git a/Documentation/src/chapters/security_oauth.tex b/Documentation/src/chapters/security_oauth.tex
index 6f77c8b8f85ca89ad0ad0368adfd79cd4703d786..ec807927ca4677235d580e9b15b06576bd579536 100644
--- a/Documentation/src/chapters/security_oauth.tex
+++ b/Documentation/src/chapters/security_oauth.tex
@@ -1,16 +1,61 @@
+% File: security_oauth.tex
+% !TeX root = ../main.tex
+
 \section{Security \& OAuth / RBAC}
 
+In diesem Abschnitt wird das grundsätzliche Sicherheitskonzept der Anwendung beschrieben, wobei insbesondere auf das Rollen- und Rechtemodell (RBAC) sowie auf die Verwendung von OAuth 2.0 in Form der \emph{Firebase Authentication} eingegangen wird.
+
 \subsection{Überblick über das Sicherheitskonzept}
-Platzhaltertext ...
-% User-Authentifizierung, Rollen- und Rechtemodell
+Das Ziel des Sicherheitskonzepts ist es, den Zugriff auf sensible Daten und Funktionen zu steuern. Hierfür wird eine rollenbasierte Zugriffssteuerung (\emph{Role-Based Access Control}, RBAC) eingesetzt:
+\begin{itemize}
+    \item \textbf{Moderator} (eingeschränkte Rechte; kann nur bestimmte Datensätze bearbeiten/löschen)
+    \item \textbf{Admin} (volle Rechte; kann Moderatoren aktivieren/deaktivieren, alle Datensätze verwalten)
+\end{itemize}
+
+Der Authentifizierungsmechanismus basiert auf \emph{OAuth 2.0} \cite{OAuth2.0}, wobei Firebase als Identity Provider fungiert. Damit werden sensible Vorgänge wie die Passwort-Verwaltung oder Erstellung von Tokens nicht durch die eigene Anwendung, sondern über die sichere Infrastruktur von Firebase abgewickelt. Diese Vorgehensweise wird auch in der Forschung hervorgehoben, um hohe Sicherheitsstandards zu gewährleisten und den Entwicklungsaufwand für unternehmenseigene Authentifizierungslösungen zu reduzieren \cite{EnhancingFirebaseAuth}.
 
 \subsection{OAuth bzw. Firebase Authentication}
-Platzhaltertext ...
-% Aufbau, Ablauf
+Das \emph{OAuth 2.0} \cite{OAuth2.0}-Protokoll hat sich als De-facto-Standard für Webanwendungen etabliert, da es unterschiedliche Rollen wie \emph{Resource Owner}, \emph{Client} und \emph{Authorization Server} klar definiert.
+\begin{itemize}
+    \item In diesem Projekt übernimmt \textbf{Firebase} die Rolle des \emph{Authorization Servers} und Identity Providers.
+    \item Das \textbf{Frontend} (Angular) agiert als \emph{Client}, welcher beim Loginvorgang das OIDC/OAuth-Token von Firebase erhält.
+    \item Das \textbf{Backend} (Spring Boot) fungiert als \emph{Resource Server} und überprüft das vom Client übermittelte Token mithilfe des \emph{Firebase Admin SDK}, um die Authentizität und Gültigkeit zu bestätigen.
+\end{itemize}
+
+Da wir auf einen externen Identity Provider (Firebase) setzen, werden Authentifizierungsaspekte (z.\,B. Token-Erzeugung, Passwort-Reset) vollständig outgesourct. Dieses Vorgehen mindert Entwicklungsaufwand und erhöht die Sicherheit, da Firebase bereits etablierte Schutzmechanismen (z.\,B. Multi-Faktor-Authentifizierung) bietet. In der Literatur wird allerdings auch deutlich gemacht, dass eine \emph{Shared Responsibility} zwischen Anbieter und Entwicklern besteht; Fehlkonfigurationen können trotz sicherer Cloud-Plattform zu Datenlecks führen \cite{AssessingSharedResponsibilityModel}.
+
+\paragraph{Warum keine eigene Login-Schnittstelle im Backend?}
+Anstatt Login-Requests an unser Spring-Boot-Backend zu richten, kommuniziert das Frontend direkt mit Firebase. Sobald ein Nutzer sich anmeldet, erhält er ein JWT (ID Token) von Firebase. Das Backend muss lediglich dieses Token verifizieren und die enthaltenen Claims (z.\,B. \texttt{roles}) auslesen. Dieser Ansatz reduziert die Komplexität, da wir keinen separaten Authentifizierungs-Endpunkt im Backend pflegen müssen und zudem auf die \emph{Sicherheitspatches} und \emph{Skalierbarkeit} der Firebase-Umgebung vertrauen können.
 
 \subsection{Umsetzung im Code}
-Platzhaltertext ...
-% Filter, SecurityConfig, Rollenvergabe
+\paragraph{Filter und SecurityConfig}
+Im \textbf{Backend} wird ein \texttt{FirebaseAuthenticationFilter} (ein \emph{OncePerRequestFilter}) vor der eigentlichen Anfrageabwicklung in der \texttt{SecurityConfig} positioniert:
+\begin{itemize}
+    \item \texttt{FirebaseAuthenticationFilter} extrahiert das \texttt{Bearer}-Token aus dem \texttt{Authorization}-Header.
+    \item Das Token wird mit dem \emph{Firebase Admin SDK} validiert. Ist es gültig, wird eine \texttt{UsernamePasswordAuthenticationToken} mit den entsprechenden Rollen (\textit{ROLE\_ADMIN}, \textit{ROLE\_MODERATOR} etc.) erzeugt.
+    \item Spring Security übergibt daraufhin die Anfrage an den zuständigen Controller, falls die erforderlichen Rechte für die Ressource vorliegen.
+\end{itemize}
+
+Die \texttt{SecurityConfig} definiert, welche Pfade ohne Authentifizierung verfügbar sind (z.\,B. \texttt{/api/register}) und welche nur Moderator- bzw. Admin-Accounts vorbehalten sind:
+\begin{itemize}
+    \item \texttt{/api/users}, \texttt{/api/usagedata} -- für \emph{moderator} und \emph{admin}
+    \item \texttt{/api/verify}, \texttt{/api/accounts} -- nur für \emph{admin}
+\end{itemize}
+
+\paragraph{Rollenvergabe (Custom Claims)}
+Zur Unterscheidung zwischen \textit{Moderator} und \textit{Admin} werden in Firebase Custom Claims vergeben. Bei der Erstellung eines neuen Users (bzw. beim Admin-Upgrade) setzt man die Claims \texttt{"roles": ["ADMIN"]} oder \texttt{"roles": ["MODERATOR"]}. Diese Claims sind Teil des JWT und werden bei jedem Request durch das Backend ausgewertet.
 
 \subsection{Vorteile und Grenzen der gewählten Sicherheitslösung}
-Platzhaltertext ...
+\paragraph{Vorteile}
+\begin{itemize}
+    \item \textbf{Minimaler eigener Entwicklungsaufwand}: Sämtliche Kernfunktionen (Token-Generierung, Passwortverwaltung) übernimmt Firebase.
+    \item \textbf{Zentrale Rollenverwaltung}: Claims müssen nur an einer Stelle (Firebase) gepflegt werden und gelten systemweit.
+    \item \textbf{Skalierbarkeit und Stabilität}: Firebase ist auf hohe Last ausgelegt und stellt globale Infrastruktur bereit.
+\end{itemize}
+
+\paragraph{Grenzen}
+\begin{itemize}
+    \item \textbf{Bindung an einen Drittanbieter}: Bei einem Wechsel zu einer anderen Auth-Plattform (z.\,B. Keycloak, Auth0) muss man Code und Konfiguration anpassen.
+    \item \textbf{Abhängigkeit von Cloud-Diensten}: Sollte die Firebase-Instanz ausfallen, ist das Anmeldeverfahren gestört.
+    \item \textbf{Shared Responsibility Model}: Falsche Konfiguration seitens der Entwickler kann trotz sicherer Cloud-Plattform zu unerwünschten Datenlecks führen \cite{AssessingSharedResponsibilityModel}.
+\end{itemize}
diff --git a/Documentation/src/chapters/softwarearchitektur.tex b/Documentation/src/chapters/softwarearchitektur.tex
index d42a9fc40314ecdb88040e15150e09e6caa03a49..3cfd27a6936f62eed9525d3ba53d9786b633a1bd 100644
--- a/Documentation/src/chapters/softwarearchitektur.tex
+++ b/Documentation/src/chapters/softwarearchitektur.tex
@@ -1,14 +1,78 @@
 \section{Softwarearchitektur und Design}
 
+\begin{figure}[h!]
+    \centering
+    \includegraphics[width=\textwidth]{figures/architecture-component.png}
+    \caption{Komponentendiagramm der Softwarearchitektur}
+    \label{fig:architecture-component}
+\end{figure}
+
 \subsection{Überblick über das gewählte Architekturkonzept (MVC)}
-Platzhaltertext ...
+Das \emph{Model-View-Controller} (MVC)-Architekturkonzept zählt zu den etablierten Entwurfsmustern der Softwareentwicklung. Das zentrale Anliegen ist die konsequente \emph{Trennung der Verantwortlichkeiten}, indem Datenhaltung und Geschäftslogik (Model), Benutzerschnittstelle (View) und Ablaufsteuerung (Controller) in eigenständigen Komponenten gekapselt werden \cite{Gamma1994}.
+
+\begin{itemize}
+    \item \textbf{Model} \\
+          Übernimmt die Hauptverantwortung für die Verarbeitung und Speicherung von Daten. Dazu zählen neben der Definition von Datenstrukturen und Entitäten (z.\,B. \emph{User}, \emph{Game}, \emph{ModeratorProfile}) insbesondere auch Services oder Schnittstellen zu externen Datenbanken und Web-APIs. Veränderungen an den Daten oder deren Validierung erfolgen meist in dieser Schicht.
+
+    \item \textbf{View} \\
+          Stellt die Präsentationsschicht dar, in der Daten für den Endnutzer aufbereitet werden. Die View enthält typischerweise die Gestaltungselemente der Benutzeroberfläche und nimmt Interaktionen (Eingaben, Klicks, etc.) entgegen. Diese Schicht sollte idealerweise keinen direkten Zugriff auf die Datenbank haben, sondern über den Controller mit dem Model kommunizieren.
+
+    \item \textbf{Controller} \\
+          Agiert als Vermittler zwischen Model und View. Er nimmt Anfragen von der View entgegen, führt mithilfe des Models notwendige Operationen durch (z.\,B. Datenabfragen, Filterungen, Updates) und übergibt die Ergebnisse zurück an die View. Im Controller werden auch Autorisierung, Validierung der Eingabedaten und Ablaufsteuerung abgewickelt.
+\end{itemize}
+
+Damit gewährleistet das MVC-Konzept eine klare Struktur: Änderungen an der Benutzeroberfläche erfordern keine Anpassungen im Model, während die Geschäftslogik unabhängig von der Darstellung weiterentwickelt werden kann.
+
+\subsection{Komponentendiagramm}
+Abbildung \ref{fig:architecture-component} zeigt, wie dieses MVC-Konzept in unserer Anwendung konkret umgesetzt wurde. Die Implementierung gliedert sich in drei Module (Model, Controller, View), in denen wiederum einzelne Komponenten angeordnet sind:
 
-\subsection{Komponenten- und Kommunikationsdiagramm}
-Platzhaltertext ...
+\begin{description}
+    \item[View]
+        \hfill \\
+        Das Frontend (Angular) bietet zentrale Einstiegspunkte über das \emph{Dashboard} sowie drei Hauptmodule: \emph{Data Management}, \emph{Data Analysis} und \emph{Account}. Die Rollen \textit{Admin} und \textit{Moderator} greifen auf diese Module zu, je nach Berechtigungsstufe. Alle Anfragen an das Backend erfolgen via \emph{REST API}.
+
+    \item[Controller]
+        \hfill \\
+        Die Controller-Schicht verarbeitet die vom Frontend kommenden HTTP-Requests. Dies beinhaltet:
+        \begin{itemize}
+            \item \emph{UsageDataController} für sämtliche Nutzungsdaten-Operationen,
+            \item \emph{UserController} zum Verwalten und Bearbeiten von Benutzerinformationen,
+            \item \emph{UserRegistrationController} zur Registrierung und Verwaltung von Moderator- und Admin-Konten.
+        \end{itemize}
+        Ein \emph{Firebase Authentication Filter} prüft eingehende Anfragen auf ihre Gültigkeit (Token, Rollen) und setzt entsprechende Berechtigungen.
+
+    \item[Model]
+        \hfill \\
+        Die fachlichen Entitäten (\emph{UsageData}, \emph{UserData}, \emph{ModeratorProfile}) sowie die zugehörigen Services (\emph{UsageDataService}, \emph{UserService}, \emph{FirebaseService}) befinden sich in dieser Schicht. Darin werden Datenbankzugriffe, Validierung und Geschäftslogik gebündelt.
+\end{description}
+
+Die Kommunikation zwischen den Komponenten erfolgt im Wesentlichen durch:
+\begin{itemize}
+    \item \textbf{REST-Endpunkte} vom \textbf{Frontend (View)} an die \textbf{Controller},
+    \item \textbf{servicebasierte Aufrufe} der \textbf{Controller} an das \textbf{Model},
+    \item \textbf{eventuelle Rückgaben} von Validierungs- oder Ergebnisobjekten (Fehlermeldungen, Daten) an die View.
+\end{itemize}
 
 \subsection{Begründung der Architekturentscheidung}
-Platzhaltertext ...
-% Trennung der Verantwortlichkeiten, Erweiterbarkeit
+Die Entscheidung, ein MVC-basiertes Design in Kombination mit Spring Boot (Backend) und Angular (Frontend) zu wählen, gründet sich auf folgenden Aspekten:
+\begin{itemize}
+    \item \textbf{Trennung von Logik und Darstellung:} Änderungen in der Benutzeroberfläche (Angular-Komponenten) sind unabhängig von den Geschäftslogik-Komponenten (Spring-Services) möglich.
+    \item \textbf{Erweiterbarkeit:} Zusätzliche Anforderungen lassen sich durch neue Services oder Controller erweitern, ohne dass das Gesamtkonstrukt stark beeinträchtigt wird.
+    \item \textbf{Testbarkeit:} Insbesondere die Model- und Controller-Schicht können (Unit-/Integrationstests) separat geprüft werden, was die Wartung erleichtert.
+\end{itemize}
 
 \subsection{Vorteile/Nachteile der gewählten Struktur}
-Platzhaltertext ...
+\paragraph{Vorteile:}
+\begin{itemize}
+    \item \textbf{Konsistente Modularität:} Die getrennte Entwicklung von Frontend und Backend ermöglicht eine saubere Code-Struktur.
+    \item \textbf{Klare Verantwortlichkeiten:} Durch die Aufteilung in Model, Controller und View ist die Zuständigkeit der einzelnen Bausteine gut nachvollziehbar.
+    \item \textbf{Leichte Austauschbarkeit:} Frontend-Frameworks könnten ausgetauscht werden, ohne die Geschäftslogik im Backend zu verändern.
+\end{itemize}
+
+\paragraph{Nachteile:}
+\begin{itemize}
+    \item \textbf{Größerer Initialaufwand:} Für kleine Projekte ist die Einrichtung mit mehreren Schichten und Frameworks (Angular, Spring Boot, Firebase) potenziell überdimensioniert.
+    \item \textbf{Komplexität der Kommunikation:} Das parallele Management von Frontend, REST-Schnittstelle und Datenbank-Logik verlangt eine konsequente Dokumentation und Abstimmung.
+\end{itemize}
+
+Trotz einiger Herausforderungen erweist sich das MVC-Konzept für die vorliegende Anwendung als geeigneter Kompromiss, um die zukünftige Wartung und Weiterentwicklung zu erleichtern.
diff --git a/Documentation/src/chapters/technologie_stack.tex b/Documentation/src/chapters/technologie_stack.tex
index f536c2c7d4f6de54e538c3bd5e5e874cfca37606..5a1662328563ae9e2e88e1d10f92e164ec82a3e5 100644
--- a/Documentation/src/chapters/technologie_stack.tex
+++ b/Documentation/src/chapters/technologie_stack.tex
@@ -1,12 +1,66 @@
 \section{Technologie-Stack}
+Um die Anforderungen der plattformunabhängigen Datenverwaltungs- und Analyselösung zu erfüllen, wurde ein durchdachter Technologie-Stack aus modernen und bewährten Werkzeugen, Frameworks und Bibliotheken zusammengestellt. Die folgende Übersicht beschreibt die eingesetzten Technologien und deren Beitrag zur Realisierung des Projekts.
 
 \subsection{Begründung für die eingesetzten Technologien}
-Platzhaltertext ...
-% Spring Boot, Angular, Firebase, Git etc.
+Für die Umsetzung der plattformunabhängigen Datenverwaltungs- und Analyselösung haben wir mehrere bewährte Technologien kombiniert:
+\begin{itemize}
+    \item \textbf{Spring Boot} \\
+          Ermöglicht eine schnelle und robuste Entwicklung von REST-Backends in Java. Durch den \emph{Spring Boot Starter}-Ansatz steht ein umfangreiches Ökosystem zur Verfügung (Security, Web, Test-Frameworks), was die Implementierung und Wartung deutlich vereinfacht.
+    \item \textbf{Angular} \\
+          Bietet ein funktionsreiches Framework zur Entwicklung von Single-Page-Applications (SPA). Dank TypeScript und modularer Architektur kann das Frontend schnell erweitert und gewartet werden. Darüber hinaus unterstützen Angular-Komponenten ein Responsive Design, um die Anwendung auf unterschiedlichen Endgeräten gleichermaßen nutzbar zu machen.
+    \item \textbf{Firebase} \\
+          Dient als Cloud-Datenbank (Firestore) und erlaubt eine nahezu \emph{serverlose} Datenhaltung. Zugleich stellt Firebase mit dem \emph{Authentication-Service} grundlegende Mechanismen für die Nutzerverwaltung und Rollenzuweisung bereit. So können Registrierungs- und Anmeldeprozesse relativ einfach umgesetzt werden.
+    \item \textbf{Git \& GitLab} \\
+          Zur Versionskontrolle kommt Git zum Einsatz, um Änderungen im Code nachverfolgen und bei Bedarf rückgängig machen zu können. GitLab dient als zentraler Hosting-Service für das Repository, inklusive Issue-Tracking, Milestones und weiteren features.
+    \item \textbf{Postman} \\
+          Wurde insbesondere für das manuelle Testen der REST-Endpunkte genutzt. Auf diese Weise konnten Schnittstellen rasch überprüft und beispielhafte Requests/Responses validiert werden, bevor das Frontend final implementiert wurde.
+\end{itemize}
 
 \subsection{Übersicht über die wichtigsten Frameworks und Bibliotheken}
-Platzhaltertext ...
+\paragraph{Backend}
+\begin{itemize}
+    \item \textbf{Spring Boot} (Version 3.3.x)
+          \begin{itemize}
+              \item \emph{spring-boot-starter-web} für die REST-Schnittstellen
+              \item \emph{spring-boot-starter-security} für Basis-Funktionalitäten zur Authentifizierung/Autorisierung
+          \end{itemize}
+    \item \textbf{Firebase Admin SDK} (Version 9.3.x)
+          \begin{itemize}
+              \item Schnittstelle zur Firestore-Datenbank, Verwaltung von Custom Claims für das Rollen- und Rechtemanagement
+          \end{itemize}
+    \item \textbf{Jackson-Databind}
+          \begin{itemize}
+              \item Serialisierung/Deserialisierung von JSON-Daten (z.\,B. beim \emph{FileWatcherService})
+          \end{itemize}
+    \item \textbf{JUnit \& Mockito}
+          \begin{itemize}
+              \item Einheitstests (Unit/Integration) für Services und Controller
+          \end{itemize}
+\end{itemize}
 
-\subsection{Systemumgebung}
-Platzhaltertext ...
-% IDEs, Build-Tools, Versionskontrolle
+\paragraph{Frontend}
+\begin{itemize}
+    \item \textbf{Angular (Version 18.2.x)}
+          \begin{itemize}
+              \item \emph{@angular/animations}, \emph{@angular/common}, \emph{@angular/forms}, \emph{@angular/router} usw.
+              \item \emph{@angular/flex-layout} für flexible Layouts
+              \item \emph{@angular/material} und \emph{@angular/cdk} für UI-Komponenten
+              \item \emph{Angular SSR} (Server-Side Rendering) mithilfe von \emph{@angular/ssr} und \emph{express} für SEO oder Performance-Optimierungen
+          \end{itemize}
+    \item \textbf{Bootstrap (Version 5.3.x)}
+          \begin{itemize}
+              \item Responsives CSS-Framework für die grundlegende Seitengestaltung
+          \end{itemize}
+    \item \textbf{Chart.js (Version 4.3.x) \& ng2-charts (Version 4.1.x)}
+          \begin{itemize}
+              \item Ermöglichen die grafische Darstellung von Daten, beispielsweise Aktivitätsgraphen
+          \end{itemize}
+    \item \textbf{Firebase (Version 11.1.x)}
+          \begin{itemize}
+              \item Für Client-seitige Operationen, z.\,B. Authentifizierung oder direkte Anbindung ausgewählter Firebase-Dienste
+          \end{itemize}
+    \item \textbf{RxJS}
+          \begin{itemize}
+              \item Reaktives Programmiermodell und asynchrone Datenströme in Angular
+          \end{itemize}
+\end{itemize}
\ No newline at end of file
diff --git a/Documentation/src/chapters/test_validierung.tex b/Documentation/src/chapters/test_validierung.tex
index cccf4a844eaa01f8bfeefd93acf4f7476d436ec4..a3313a053eff0b41e5331eb5bc3ce4f3a70b4de5 100644
--- a/Documentation/src/chapters/test_validierung.tex
+++ b/Documentation/src/chapters/test_validierung.tex
@@ -1,11 +1,27 @@
 \section{Test und Validierung}
 
-\subsection{Testvorgehen}
-Platzhaltertext ...
-% Automatisierte Tests, manuelle Tests etc.
+\subsection{Teststrategie und Vorgehen}
+Die Testaktivitäten im Projekt wurden auf mehreren Ebenen durch\-ge\-führt, um eine hohe Code-Qualität und Stabilität zu gewährleisten:
 
-\subsection{Darstellung der Testergebnisse und Abdeckung}
-Platzhaltertext ...
+\begin{itemize}
+    \item \textbf{Unit-Tests:}
+          \begin{itemize}
+              \item \textit{Backend (Java, Spring Boot):} JUnit- und Mockito-Tests für einzelne Service- und Controller-Klassen (z.\,B. \texttt{UserServiceTest}, \texttt{FirebaseServiceTest}). Dabei wurden Methoden zur Datenvalidierung, Benutzererstellung sowie der Umgang mit Exceptions getestet.
+              \item \textit{Frontend (Angular):} Karma/Jasmine-Tests für zentrale Komponenten (z.\,B. \texttt{NavbarComponent}, \texttt{DashboardComponent}), um sicherzustellen, dass Template-Logik und Service-Interaktionen wie erwartet funktionieren.
+          \end{itemize}
+    \item \textbf{Integrationstests:}
+          \begin{itemize}
+              \item Mehrere Funktionen (z.\,B. \emph{UserController} in Kombination mit \emph{UserService}) wurden im Zusammenspiel geprüft, um sicherzustellen, dass REST-Endpunkte und Firestore-Anbindungen korrekt interagieren. Dafür haben wir häufig \emph{Mock-Objekte} (Mockito) oder echte Test-Deployments mit einer Beispieldatenbank verwendet.
+          \end{itemize}
+    \item \textbf{End-to-End-Tests (manuell):}
+          \begin{itemize}
+              \item Parallel zur Entwicklung wurden E2E-Tests sowohl auf Desktop-PCs als auch auf mobilen Endgeräten durchgeführt, bei denen typische Workflows (z.,B. \emph{Benutzerregistrierung} bis zum Einspielen einer neuen \texttt{UsageData}-Datei) im Browser ausgeführt und verifiziert wurden. Dies ermöglichte eine realitätsnahe Überprüfung sämtlicher Schichten (Frontend, Backend, Datenbank).
+          \end{itemize}
+\end{itemize}
 
-\subsection{Probleme, Bugs und deren Lösungen}
-Platzhaltertext ...
+Zusätzlich wurde ein \textbf{Code-Review-Prozess} etabliert, bei dem neuer Code vor dem Merge in den \texttt{main}-Branch von mindestens einer weiteren Person geprüft wurde. Erst nach bestandenem Review und funktionierenden Tests wurde der Code in das Hauptrepository übernommen.
+
+\subsection{Ausblick und weitere Validierung}
+Obwohl ein umfangreiches Testkonzept implementiert wurde, bedarf es zur \textbf{Langzeitstabilität} zusätzlicher Nutzererfahrung aus der Praxis. Um \emph{weitere Bugs} zu finden und die Benutzerfreundlichkeit zu optimieren, ist der nächste Schritt, echte user die Anwendung in ihrem Arbeitsumfeld testen zu lassen. Dabei könnten noch unentdeckte Randfälle oder Usability-Hürden sichtbar werden, die im Entwicklungsteam nicht aufgefallen sind.
+
+Zukünftig wären zudem \textbf{automatisierte End-to-End-Tests} (z.\,B. mit \emph{Protractor} oder \emph{Cypress}) eine sinnvolle Erweiterung, um komplexe Workflows kontinuierlich auf Funktionalität zu prüfen. Auf diese Weise kann der Deployment-Prozess weiter abgesichert und die Qualität auch bei steigender Komplexität gehalten werden.
diff --git a/Documentation/src/chapters/umgesetzte_loesung.tex b/Documentation/src/chapters/umgesetzte_loesung.tex
index ffb86a93332ebe8c763bdd6018dfce7714470036..69b87f71d60bcf17089a244a83d53c352bb2142d 100644
--- a/Documentation/src/chapters/umgesetzte_loesung.tex
+++ b/Documentation/src/chapters/umgesetzte_loesung.tex
@@ -1,14 +1,91 @@
-\section{Umgesetzte Lösung (Implementation)}
+% File: umgesetzte_loesung.tex
+% !TeX root = ../main.tex
+\section{Umgesetzte L\"osung}
+In diesem Kapitel wird die entwickelte Lösung detailliert beschrieben, wobei sowohl die Umsetzung der funktionalen Anforderungen als auch die Berücksichtigung der nicht-funktionalen Anforderungen im Fokus stehen.
 
-\subsection{Gesamtüberblick}
-Platzhaltertext ...
-% Welche Funktionen wurden konkret realisiert? 
-% Was läuft zuverlässig, was ist unvollständig?
+\subsection{Einleitung und Zielsetzung}
+Die umgesetzte L\"osung verfolgt das Ziel, eine einheitliche Web-Anwendung bereitzustellen, die plattformunabh\"angig sowohl von Windows-Computern als auch von mobilen Endger\"aten genutzt werden kann. Dadurch entf\"allt die Notwendigkeit, getrennte Desktop- und Mobilapplikationen zu entwickeln.
 
-\subsection{Funktionale Abdeckung}
-Platzhaltertext ...
-% Wie deckt die Implementierung die Anforderungen ab?
+Basis f\"ur die Implementierung waren die eingangs definierten funktionalen Anforderungen:
+\begin{itemize}
+    \item \textbf{Datenquellenintegration:} Anbindung eines (internen) File-Servers und eines Cloud-Dienstes f\"ur pers\"onliche Daten.
+    \item \textbf{Datenverwaltung:} CRUD-Funktionalit\"aten (Create, Read, Update, Delete) f\"ur Spieler und Spiel-Logs.
+    \item \textbf{Benutzeroberfl\"ache:} Entwicklung einer intuitiven UI, mit der die Daten effizient verwaltet werden k\"onnen.
+    \item \textbf{Anmeldefunktion:} Rollen- und Rechtemodell (mindestens Moderator- und Administratorrolle).
+\end{itemize}
 
-\subsection{Einschränkungen und Verbesserungsmöglichkeiten}
-Platzhaltertext ...
-% Was fehlt noch? Was könnte man optimieren?
+Dar\"uber hinaus wurde \"uber das responsive Design eine hohe \emph{Usability} angestrebt, um unterschiedlichen Endger\"aten Rechnung zu tragen.
+
+\subsection{Account-Management und Rollenverteilung}
+Um auf die Daten zuzugreifen, ist eine Benutzerregistrierung sowie eine anschlie\ss ende Freischaltung durch einen Administrator erforderlich. Die Rollenverteilung umfasst zwei Stufen:
+\begin{itemize}
+    \item \textbf{Moderator:} Kann nach Freischaltung Daten einsehen und eingeschr\"ankt ver\"andern.
+    \item \textbf{Admin:} Verf\"ugt \"uber vollumf\"angliche Rechte, einschlie\ss lich Freischaltung, L\"oschung anderer Benutzerkonten und Bearbeitung aller Datens\"atze.
+\end{itemize}
+
+\noindent\textbf{Registrierungsprozess:}
+\begin{enumerate}
+    \item Ein neuer Benutzer kann sich \"uber den Men\"upunkt \textit{Account} registrieren. Es werden E-Mail-Adresse, Passwort, Vollst\"andiger Name sowie Organisation abgefragt.
+    \item Der neu registrierte Benutzer erh\"alt standardm\"a\ss ig die Rolle \textit{Moderator} und ist zun\"achst deaktiviert.
+    \item Ein Admin muss den Benutzer explizit freischalten (aktivieren), damit ein Moderator auf Daten zugreifen kann.
+\end{enumerate}
+
+\noindent\textbf{Upgrade zum Admin-Account:}\\
+Zus\"atzlich besteht die M\"oglichkeit, einen Moderator-Account zu einem Admin-Account hochzustufen. Dies erfolgt nicht \"uber die Web-Oberfl\"ache, sondern ausschlie\ss lich \"uber die Konsole im Hosting-Umfeld des Backends. Weitere Informationen sind im README des Projekts zur Verfügung gestellt.
+
+\subsection{Datenschutz und Begr\"undung des Rollenmodells}
+Es wurden Vorkehrungen getroffen, um eine datenschutzkonforme Verarbeitung personenbezogener Daten zu erm\"oglichen. Grunds\"atzlich unterliegen alle in der Anwendung verarbeiteten Daten den relevanten Datenschutzbestimmungen, siehe DSGVO \cite{GDPR}. Aus diesem Grund wurde ein differenziertes Rollen- und Rechtesystem eingef\"uhrt:
+\begin{itemize}
+    \item \emph{Vertraulichkeit}: Daten (z.\,B. personenbezogene Spielerinformationen) sind nur nach erfolgreicher Anmeldung sichtbar.
+    \item \emph{Integrit\"at}: Nur berechtigte Rollen k\"onnen Daten bearbeiten oder l\"oschen. Moderatoren d\"urfen ausschlie\ss lich Datens\"atze anpassen, die sie selbst erstellt haben, w\"ahrend Administratoren systemweit \"Anderungen durchf\"uhren k\"onnen.
+\end{itemize}
+
+\subsection{Data Management (Datenverwaltung)}
+Der Men\"upunkt \textit{Data Management} gliedert sich in zwei Hauptbereiche: \emph{Spieler-Verwaltung} (User Data) und \emph{Nutzungsdaten-Verwaltung} (Usage Data).
+
+\subsubsection{Spieler-Verwaltung (User Data)}
+\begin{itemize}
+    \item \textbf{Spieler hinzuf\"ugen}: Ein Formular erlaubt das Anlegen neuer Spieler. M\"ogliche Felder sind Geschlecht, Bildungsniveau, Professional Role, Own Branch, Customer Branch(es) sowie eine oder mehrere \texttt{GameID}(\,s).
+    \item \textbf{Spieler \"andern}: \"Uber ein Drop-down-Men\"u lassen sich existierende Spieler identifizieren. Die jeweiligen Daten werden vorausgef\"ullt, um gezielt einzelne Informationen zu aktualisieren. Moderatoren k\"onnen nur Spieler bearbeiten, die sie selbst angelegt haben, w\"ahrend Administratoren alle bearbeiten k\"onnen.
+    \item \textbf{Spieler l\"oschen}: Analog zur Bearbeitung sind Moderatoren nur zum L\"oschen ihrer eigenen Eintr\"age befugt. Administratoren k\"onnen s\"amtliche Spielerprofile entfernen. Eine Suchfunktion erleichtert das Auffinden eines bestimmten Datensatzes.
+\end{itemize}
+
+\subsubsection{Nutzungsdaten-Verwaltung (Usage Data)}
+Nutzungsdaten werden automatisiert von einem wissenschaftlichen Demonstrator \"uber einen Server bereitgestellt und in die Datenbank \"ubernommen. Die Daten sind \"uber eine eindeutige \texttt{GameID} zuordenbar. Nur \emph{Administratoren} sind befugt, diese Datens\"atze direkt zu bearbeiten oder zu l\"oschen, da hier Integrit\"at eine besonders hohe Priorit\"at hat.
+\begin{itemize}
+    \item \textbf{Bearbeiten}: Auswahl \"uber die \texttt{GameID}, Anpassung einzelner Felder, falls z.\,B. Fehlwerte korrigiert werden m\"ussen.
+    \item \textbf{L\"oschen}: Vollst\"andige Entfernung ausgew\"ahlter Datens\"atze (etwa fehlerhafter Logs).
+\end{itemize}
+
+\subsection{Datenanalyse}
+Der Bereich \textit{Data Analysis} liefert \"Ubersichten zu Spielen (Usage Data) und Benutzerdaten (User Data) sowie einen Aktivitätsgraphen:
+
+\begin{itemize}
+    \item \textbf{Usage Data (Spiele)}:
+          \begin{itemize}
+              \item Auflistung aller Spiele mit relevanten Informationen (z.\,B. \texttt{GameID}, Datum, beteiligte Spieler).
+              \item Filterung nach \texttt{GameID} oder Zeitbereichen.
+              \item Pop-up-Fenster f\"ur Detailansichten (z.\,B. Rollen, genaue Spielschritte).
+          \end{itemize}
+    \item \textbf{User Data (Spieler)}:
+          \begin{itemize}
+              \item Tabelle aller Spielerdatens\"atze (u.\,a. Alter, Geschlecht, zugeordnete \texttt{GameIDs}).
+              \item Aufruf einer Detailansicht per Klick, um tiefergehende Informationen (z.\,B. Bildungsniveau, Branch) einzusehen.
+          \end{itemize}
+    \item \textbf{Activity Graph}:
+          \begin{itemize}
+              \item Visualisierung neuer Spiele (rote Linie) und neuer Spieler (gr\"une Linie) \"uber verschiedene Zeitr\"aume (z.\,B. letzte Woche, letzter Monat).
+              \item Ein- und Ausblenden einzelner Linien durch Klick auf die jeweilige Legende.
+          \end{itemize}
+\end{itemize}
+
+\subsection{Erf\"ullung der Anforderungen}
+Durch die beschriebene Implementierung sind alle in der initialen Anforderungssammlung definierten \emph{funktionalen Anforderungen} umgesetzt worden:
+\begin{itemize}
+    \item \textbf{Datenquellenintegration}: Der File-Server (Nutzungsdaten) und die Spieler-Repository-Daten (User Data) sind eingebunden.
+    \item \textbf{Datenverwaltung}: Erstellung, Bearbeitung und L\"oschung von Spielern bzw. Nutzungsdaten sind über das Web-Interface m\"oglich (rollenabh\"angige Eingriffsrechte).
+    \item \textbf{Benutzeroberfl\"ache}: Eine einheitliche, plattformunabh\"angige Web-Oberfl\"ache bietet alle notwendigen Interaktionsm\"oglichkeiten.
+    \item \textbf{Anmeldefunktion}: Einfache Registrierung mit E-Mail und Passwort sowie differenzierte Rollen (Moderator, Admin) und Freischaltungsprozess sind implementiert.
+\end{itemize}
+
+Dar\"uber hinaus erf\"ullt das System zentrale \emph{nicht-funktionale Anforderungen} wie \emph{Usability} und eine grundlegende Ber\"ucksichtigung der \emph{Datenschutzprinzipien} durch rollenbasierte Zugriffssteuerung.
diff --git a/Documentation/src/figures/architecture-component.drawio b/Documentation/src/figures/architecture-component.drawio
index b94a3ea53a1091795c8f679f12930b43e6f77571..f297ec10d37b44760a79c8b75dc7a3e971626597 100644
--- a/Documentation/src/figures/architecture-component.drawio
+++ b/Documentation/src/figures/architecture-component.drawio
@@ -1,45 +1,61 @@
-<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" version="24.8.2">
+<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" version="26.0.5">
   <diagram name="Page-1" id="ks9rIyVkApmRkA9VNlf3">
-    <mxGraphModel dx="1171" dy="575" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+    <mxGraphModel dx="989" dy="542" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
       <root>
         <mxCell id="0" />
         <mxCell id="1" parent="0" />
-        <mxCell id="KkHb_fp4yDoaqeA0yEgW-1" value="View" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="90" y="159" width="160" height="295" as="geometry" />
+        <mxCell id="chHJOXkwJXto75_Sr-b2-17" value="View" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+          <mxGeometry x="52" y="95" width="408" height="365" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-47" value="Model" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="860" y="90" width="220" height="460" as="geometry" />
+          <mxGeometry x="983" y="95" width="220" height="460" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-7" value="Admin" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
-          <mxGeometry x="40" y="215" width="30" height="60" as="geometry" />
+          <mxGeometry x="12" y="202.5" width="30" height="60" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-10" value="Moderator" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
-          <mxGeometry x="40" y="343" width="30" height="60" as="geometry" />
+          <mxGeometry x="12" y="302.5" width="30" height="60" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-18" value="Firebase" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.database;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="919" y="482.5" width="122" height="60" as="geometry" />
+          <mxGeometry x="1039" y="484.5" width="122" height="60" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-22" value="Controller" style="shape=module;align=left;spacingLeft=20;align=center;verticalAlign=top;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="320" y="95" width="450" height="365" as="geometry" />
+          <mxGeometry x="530" y="95" width="362" height="365" as="geometry" />
+        </mxCell>
+        <mxCell id="QZ1Q3wUFRfap7xdTNe5J-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;" edge="1" parent="1" source="6CP33WcMq1AVLbEmVYmS-23">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="625" y="402.5" as="targetPoint" />
+          </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-23" value="&lt;b&gt;UsageDataController&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="440" y="137.5" width="210" height="55" as="geometry" />
+          <mxGeometry x="650" y="137.5" width="210" height="55" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-24" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-23" vertex="1">
           <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
             <mxPoint x="-27" y="7" as="offset" />
           </mxGeometry>
         </mxCell>
+        <mxCell id="QZ1Q3wUFRfap7xdTNe5J-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endArrow=none;endFill=0;" edge="1" parent="1" source="6CP33WcMq1AVLbEmVYmS-25">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="625" y="402.5" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-25" value="&lt;b&gt;UserController&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="440" y="215" width="210" height="55" as="geometry" />
+          <mxGeometry x="650" y="215" width="210" height="55" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-26" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-25" vertex="1">
           <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
             <mxPoint x="-27" y="7" as="offset" />
           </mxGeometry>
         </mxCell>
+        <mxCell id="QZ1Q3wUFRfap7xdTNe5J-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=none;endFill=0;" edge="1" parent="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="859" y="320" as="sourcePoint" />
+            <mxPoint x="1091" y="320" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-27" value="&lt;b&gt;UserRegistrationController&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="440" y="292.5" width="210" height="55" as="geometry" />
+          <mxGeometry x="650" y="292.5" width="210" height="55" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-28" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-27" vertex="1">
           <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
@@ -47,31 +63,31 @@
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-29" value="" style="fontStyle=0;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;spacingLeft=2;" parent="1" vertex="1">
-          <mxGeometry x="234" y="295" width="30" height="30" as="geometry" />
+          <mxGeometry x="444" y="273" width="30" height="30" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-30" value="" style="fontStyle=0;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;spacingLeft=2;" parent="1" vertex="1">
-          <mxGeometry x="320" y="295" width="30" height="30" as="geometry" />
+          <mxGeometry x="525" y="273" width="30" height="30" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-31" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-180;" parent="1" vertex="1">
-          <mxGeometry x="280" y="300" width="20" height="20" as="geometry" />
+          <mxGeometry x="490" y="278" width="20" height="20" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-35" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-29" target="6CP33WcMq1AVLbEmVYmS-31" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="410" y="370" as="sourcePoint" />
-            <mxPoint x="460" y="320" as="targetPoint" />
+            <mxPoint x="620" y="348" as="sourcePoint" />
+            <mxPoint x="670" y="298" as="targetPoint" />
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-36" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-31" target="6CP33WcMq1AVLbEmVYmS-30" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="210" y="360" as="sourcePoint" />
-            <mxPoint x="266" y="360" as="targetPoint" />
+            <mxPoint x="420" y="338" as="sourcePoint" />
+            <mxPoint x="476" y="338" as="targetPoint" />
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-37" value="REST API" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
-          <mxGeometry x="250" y="265" width="80" height="30" as="geometry" />
+          <mxGeometry x="460" y="243" width="80" height="30" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-43" value="&lt;b&gt;UsageDataService&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="900" y="137.5" width="160" height="55" as="geometry" />
+          <mxGeometry x="1023" y="137.5" width="160" height="55" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-44" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-43" vertex="1">
           <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
@@ -79,7 +95,7 @@
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-45" value="&lt;b&gt;UserService&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="900" y="230" width="160" height="55" as="geometry" />
+          <mxGeometry x="1023" y="215" width="160" height="55" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-46" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-45" vertex="1">
           <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
@@ -87,43 +103,43 @@
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-50" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-180;" parent="1" vertex="1">
-          <mxGeometry x="800" y="250" width="20" height="20" as="geometry" />
+          <mxGeometry x="927" y="232.5" width="20" height="20" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-51" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.999;entryY=0.588;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-50" target="6CP33WcMq1AVLbEmVYmS-25" edge="1">
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-51" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-50" target="6CP33WcMq1AVLbEmVYmS-25" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="784" y="310" as="sourcePoint" />
-            <mxPoint x="760" y="310" as="targetPoint" />
+            <mxPoint x="994" y="310" as="sourcePoint" />
+            <mxPoint x="970" y="310" as="targetPoint" />
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-52" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-50" target="6CP33WcMq1AVLbEmVYmS-45" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="770" y="360" as="sourcePoint" />
-            <mxPoint x="875.9999999999998" y="310" as="targetPoint" />
+            <mxPoint x="893" y="360" as="sourcePoint" />
+            <mxPoint x="998.9999999999998" y="310" as="targetPoint" />
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-53" value="User Requests" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
-          <mxGeometry x="770" y="220" width="100" height="30" as="geometry" />
+          <mxGeometry x="892" y="202.5" width="100" height="30" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-54" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-180;" parent="1" vertex="1">
-          <mxGeometry x="800" y="155" width="20" height="20" as="geometry" />
+          <mxGeometry x="927" y="155" width="20" height="20" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-55" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-23" target="6CP33WcMq1AVLbEmVYmS-54" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="684" y="189" as="sourcePoint" />
-            <mxPoint x="754" y="190" as="targetPoint" />
+            <mxPoint x="894" y="189" as="sourcePoint" />
+            <mxPoint x="964" y="190" as="targetPoint" />
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-56" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-54" target="6CP33WcMq1AVLbEmVYmS-43" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="770" y="240" as="sourcePoint" />
-            <mxPoint x="834" y="190" as="targetPoint" />
+            <mxPoint x="893" y="240" as="sourcePoint" />
+            <mxPoint x="957" y="190" as="targetPoint" />
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-57" value="Data Requests" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
-          <mxGeometry x="770" y="125" width="100" height="30" as="geometry" />
+          <mxGeometry x="892" y="125" width="100" height="30" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-58" value="&lt;b&gt;FirebaseService&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="900" y="350" width="160" height="55" as="geometry" />
+          <mxGeometry x="1023" y="347" width="160" height="55" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-59" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-58" vertex="1">
           <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
@@ -131,7 +147,7 @@
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-60" value="&lt;b&gt;Firebase&lt;/b&gt;&lt;div&gt;&lt;b&gt;Authentication&lt;/b&gt;&lt;div&gt;&lt;b&gt;Filter&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="470" y="387.5" width="150" height="55" as="geometry" />
+          <mxGeometry x="680" y="387.5" width="150" height="55" as="geometry" />
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-61" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-60" vertex="1">
           <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
@@ -139,169 +155,199 @@
           </mxGeometry>
         </mxCell>
         <mxCell id="6CP33WcMq1AVLbEmVYmS-62" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-90;" parent="1" vertex="1">
-          <mxGeometry x="410" y="400.5" width="20" height="20" as="geometry" />
+          <mxGeometry x="615" y="401.5" width="20" height="20" as="geometry" />
+        </mxCell>
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-63" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="6CP33WcMq1AVLbEmVYmS-60" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="632.0000000000001" y="415" as="sourcePoint" />
+            <mxPoint x="681.0000000000001" y="415" as="targetPoint" />
+          </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-63" value="" style="endArrow=none;html=1;rounded=0;exitX=0.3;exitY=0.83;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-62" target="6CP33WcMq1AVLbEmVYmS-60" edge="1">
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-77" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="6CP33WcMq1AVLbEmVYmS-30" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="440" y="392.5" as="sourcePoint" />
-            <mxPoint x="456" y="392.5" as="targetPoint" />
+            <mxPoint x="625" y="288" as="sourcePoint" />
+            <mxPoint x="550" y="288" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-64" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-62" target="6CP33WcMq1AVLbEmVYmS-27" edge="1">
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-85" value="" style="endArrow=none;html=1;rounded=0;entryX=0.358;entryY=0.142;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.504;exitY=-0.013;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-18" target="6CP33WcMq1AVLbEmVYmS-83" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="387" y="319.5" as="sourcePoint" />
-            <mxPoint x="430" y="320.5" as="targetPoint" />
-            <Array as="points">
-              <mxPoint x="420" y="320.5" />
-            </Array>
+            <mxPoint x="1104" y="480" as="sourcePoint" />
+            <mxPoint x="1103" y="470" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-65" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" edge="1">
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-87" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-180;" parent="1" vertex="1">
+          <mxGeometry x="943" y="510" width="20" height="20" as="geometry" />
+        </mxCell>
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-88" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-83" target="6CP33WcMq1AVLbEmVYmS-60" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="420" y="322.5" as="sourcePoint" />
-            <mxPoint x="440" y="242.5" as="targetPoint" />
+            <mxPoint x="1200" y="493" as="sourcePoint" />
+            <mxPoint x="1200" y="476" as="targetPoint" />
             <Array as="points">
-              <mxPoint x="420" y="242.5" />
+              <mxPoint x="1052" y="429" />
             </Array>
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-66" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" edge="1">
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-89" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-87" target="chHJOXkwJXto75_Sr-b2-14" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="420" y="242.5" as="sourcePoint" />
-            <mxPoint x="440" y="162.5" as="targetPoint" />
+            <mxPoint x="1010" y="594" as="sourcePoint" />
+            <mxPoint x="385" y="455" as="targetPoint" />
             <Array as="points">
-              <mxPoint x="420" y="162.5" />
+              <mxPoint x="870" y="520" />
+              <mxPoint x="328" y="520" />
             </Array>
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-70" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-102" target="6CP33WcMq1AVLbEmVYmS-27" edge="1">
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-90" value="" style="endArrow=none;html=1;rounded=0;exitX=-0.001;exitY=0.595;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-18" target="6CP33WcMq1AVLbEmVYmS-87" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="810" y="377.5" as="sourcePoint" />
-            <mxPoint x="660" y="497" as="targetPoint" />
+            <mxPoint x="1113" y="493" as="sourcePoint" />
+            <mxPoint x="1113" y="476" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-73" value="" style="shape=requiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-91;" parent="1" vertex="1">
-          <mxGeometry x="975" y="440" width="10" height="20" as="geometry" />
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-91" value="FireStore&lt;div&gt;SDK&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
+          <mxGeometry x="1108" y="413" width="70" height="40" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-77" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="6CP33WcMq1AVLbEmVYmS-30" edge="1">
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-92" value="OAuth Token" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
+          <mxGeometry x="908" y="480" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-93" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-10" target="chHJOXkwJXto75_Sr-b2-12" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="420" y="310" as="sourcePoint" />
-            <mxPoint x="330" y="320" as="targetPoint" />
+            <mxPoint x="-8" y="388" as="sourcePoint" />
+            <mxPoint x="31.550000000000182" y="387.84000000000015" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-83" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-180;" parent="1" vertex="1">
-          <mxGeometry x="967" y="448.5" width="20" height="20" as="geometry" />
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-94" value="&lt;b&gt;Data&amp;nbsp;&lt;/b&gt;&lt;div&gt;&lt;b&gt;Analysis&lt;/b&gt;&lt;/div&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
+          <mxGeometry x="265" y="260.5" width="126" height="55" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-85" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.358;entryY=0.142;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-18" target="6CP33WcMq1AVLbEmVYmS-83" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="927" y="539" as="sourcePoint" />
-            <mxPoint x="980" y="470" as="targetPoint" />
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-95" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-94" vertex="1">
+          <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
+            <mxPoint x="-27" y="7" as="offset" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-96" value="&lt;b&gt;Data&amp;nbsp;&lt;/b&gt;&lt;div&gt;&lt;b&gt;Management&lt;/b&gt;&lt;/div&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
+          <mxGeometry x="265" y="173" width="126" height="55" as="geometry" />
+        </mxCell>
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-97" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-96" vertex="1">
+          <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
+            <mxPoint x="-27" y="7" as="offset" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-86" value="" style="endArrow=none;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-73" target="6CP33WcMq1AVLbEmVYmS-58" edge="1">
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-98" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-7" target="chHJOXkwJXto75_Sr-b2-12" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="990" y="440" as="sourcePoint" />
-            <mxPoint x="1000" y="476" as="targetPoint" />
+            <mxPoint x="2" y="261" as="sourcePoint" />
+            <mxPoint x="32" y="261" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-87" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-180;" parent="1" vertex="1">
-          <mxGeometry x="820" y="510" width="20" height="20" as="geometry" />
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-102" value="" style="shape=requiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-180;" parent="1" vertex="1">
+          <mxGeometry x="1091" y="310" width="10" height="20" as="geometry" />
+        </mxCell>
+        <mxCell id="u8_nf58v80TP83UxYRXt-1" value="Verify Token" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
+          <mxGeometry x="570" y="418" width="90" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="u8_nf58v80TP83UxYRXt-2" value="Prep DB Access" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
+          <mxGeometry x="992" y="290" width="110" height="30" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-88" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-83" target="6CP33WcMq1AVLbEmVYmS-60" edge="1">
+        <mxCell id="chHJOXkwJXto75_Sr-b2-5" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1" target="6CP33WcMq1AVLbEmVYmS-45">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="990" y="493" as="sourcePoint" />
-            <mxPoint x="990" y="476" as="targetPoint" />
-            <Array as="points">
-              <mxPoint x="840" y="420" />
-            </Array>
+            <mxPoint x="1103" y="307" as="sourcePoint" />
+            <mxPoint x="1103" y="269" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-89" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-87" edge="1">
+        <mxCell id="chHJOXkwJXto75_Sr-b2-6" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="chHJOXkwJXto75_Sr-b2-7" target="6CP33WcMq1AVLbEmVYmS-43" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="800" y="594" as="sourcePoint" />
-            <mxPoint x="175" y="455" as="targetPoint" />
+            <mxPoint x="1360" y="252.5" as="sourcePoint" />
+            <mxPoint x="1042" y="252.5" as="targetPoint" />
             <Array as="points">
-              <mxPoint x="660" y="520" />
-              <mxPoint x="175" y="520" />
+              <mxPoint x="1195" y="320" />
+              <mxPoint x="1195" y="165" />
             </Array>
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-90" value="" style="endArrow=none;html=1;rounded=0;exitX=-0.014;exitY=0.601;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-18" target="6CP33WcMq1AVLbEmVYmS-87" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="990" y="493" as="sourcePoint" />
-            <mxPoint x="990" y="476" as="targetPoint" />
-          </mxGeometry>
+        <mxCell id="chHJOXkwJXto75_Sr-b2-7" value="" style="shape=requiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=0;" parent="1" vertex="1">
+          <mxGeometry x="1106" y="310" width="10" height="20" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-91" value="FireStore&lt;div&gt;SDK&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
-          <mxGeometry x="990" y="438.5" width="70" height="40" as="geometry" />
+        <mxCell id="6CP33WcMq1AVLbEmVYmS-83" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-180;" parent="1" vertex="1">
+          <mxGeometry x="1088" y="419" width="20" height="20" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-92" value="OAuth Token" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
-          <mxGeometry x="785" y="480" width="90" height="30" as="geometry" />
+        <mxCell id="chHJOXkwJXto75_Sr-b2-10" value="" style="shape=requiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-90;" parent="1" vertex="1">
+          <mxGeometry x="1097" y="412" width="8" height="20" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-93" value="" style="endArrow=none;html=1;rounded=0;entryX=-0.003;entryY=0.703;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
+        <mxCell id="chHJOXkwJXto75_Sr-b2-11" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.488;entryY=0.999;entryDx=0;entryDy=0;exitPerimeter=0;entryPerimeter=0;" parent="1" source="chHJOXkwJXto75_Sr-b2-10" target="6CP33WcMq1AVLbEmVYmS-58" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="60" y="372" as="sourcePoint" />
-            <mxPoint x="99.55000000000018" y="371.84000000000015" as="targetPoint" />
+            <mxPoint x="1112" y="357" as="sourcePoint" />
+            <mxPoint x="1112" y="337" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-94" value="&lt;b&gt;Formular&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="120" y="350" width="110" height="55" as="geometry" />
+        <mxCell id="chHJOXkwJXto75_Sr-b2-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="chHJOXkwJXto75_Sr-b2-12" target="6CP33WcMq1AVLbEmVYmS-94" edge="1">
+          <mxGeometry relative="1" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-95" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-94" vertex="1">
+        <mxCell id="chHJOXkwJXto75_Sr-b2-12" value="&lt;b&gt;Dashboard&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
+          <mxGeometry x="85" y="260.5" width="126" height="55" as="geometry" />
+        </mxCell>
+        <mxCell id="chHJOXkwJXto75_Sr-b2-13" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="chHJOXkwJXto75_Sr-b2-12" vertex="1">
           <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
             <mxPoint x="-27" y="7" as="offset" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-96" value="&lt;b&gt;Analysis&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
-          <mxGeometry x="120" y="220" width="110" height="55" as="geometry" />
+        <mxCell id="chHJOXkwJXto75_Sr-b2-14" value="&lt;b&gt;Account&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1">
+          <mxGeometry x="265" y="343" width="126" height="55" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-97" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="6CP33WcMq1AVLbEmVYmS-96" vertex="1">
+        <mxCell id="chHJOXkwJXto75_Sr-b2-15" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="chHJOXkwJXto75_Sr-b2-14" vertex="1">
           <mxGeometry x="1" width="20" height="20" relative="1" as="geometry">
             <mxPoint x="-27" y="7" as="offset" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-98" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-7" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="70" y="245" as="sourcePoint" />
-            <mxPoint x="100" y="245" as="targetPoint" />
+        <mxCell id="chHJOXkwJXto75_Sr-b2-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="chHJOXkwJXto75_Sr-b2-12" target="6CP33WcMq1AVLbEmVYmS-96" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="221" y="298" as="sourcePoint" />
+            <mxPoint x="275" y="298" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-100" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-140;" parent="1" vertex="1">
-          <mxGeometry x="965" y="320.5" width="20" height="20" as="geometry" />
+        <mxCell id="chHJOXkwJXto75_Sr-b2-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="chHJOXkwJXto75_Sr-b2-12" target="chHJOXkwJXto75_Sr-b2-14" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="221" y="298" as="sourcePoint" />
+            <mxPoint x="275" y="211" as="targetPoint" />
+          </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-101" value="" style="endArrow=none;html=1;rounded=0;entryX=0.091;entryY=0.227;entryDx=0;entryDy=0;exitX=0.489;exitY=0.005;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-58" target="6CP33WcMq1AVLbEmVYmS-100" edge="1">
+        <mxCell id="chHJOXkwJXto75_Sr-b2-25" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="6CP33WcMq1AVLbEmVYmS-94" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="990" y="455" as="sourcePoint" />
-            <mxPoint x="990" y="415" as="targetPoint" />
+            <mxPoint x="442" y="288" as="sourcePoint" />
+            <mxPoint x="488" y="320" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-102" value="" style="shape=requiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-183;" parent="1" vertex="1">
-          <mxGeometry x="967" y="323" width="10" height="20" as="geometry" />
+        <mxCell id="chHJOXkwJXto75_Sr-b2-26" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="6CP33WcMq1AVLbEmVYmS-96" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="442" y="288" as="sourcePoint" />
+            <mxPoint x="401" y="298" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="435" y="288" />
+              <mxPoint x="435" y="200" />
+            </Array>
+          </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-103" value="" style="endArrow=none;html=1;rounded=0;entryX=0.918;entryY=0.951;entryDx=0;entryDy=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-43" target="6CP33WcMq1AVLbEmVYmS-102" edge="1">
+        <mxCell id="chHJOXkwJXto75_Sr-b2-27" value="" style="endArrow=none;html=1;rounded=0;entryX=0.998;entryY=0.545;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-29" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="988" y="360" as="sourcePoint" />
-            <mxPoint x="988" y="350" as="targetPoint" />
+            <mxPoint x="442" y="288" as="sourcePoint" />
+            <mxPoint x="390.7479999999998" y="370.975" as="targetPoint" />
             <Array as="points">
-              <mxPoint x="880" y="179" />
-              <mxPoint x="880" y="320" />
+              <mxPoint x="435" y="288" />
+              <mxPoint x="435" y="371" />
             </Array>
           </mxGeometry>
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-104" value="" style="shape=requiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-35;" parent="1" vertex="1">
-          <mxGeometry x="977" y="320" width="10" height="20" as="geometry" />
+        <mxCell id="QZ1Q3wUFRfap7xdTNe5J-8" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;" vertex="1" parent="1">
+          <mxGeometry x="1096" y="310" width="20" height="20" as="geometry" />
+        </mxCell>
+        <mxCell id="QZ1Q3wUFRfap7xdTNe5J-9" value="" style="shape=providedRequiredInterface;html=1;verticalLabelPosition=bottom;sketch=0;rotation=-90;" vertex="1" parent="1">
+          <mxGeometry x="1093" y="307" width="20" height="20" as="geometry" />
         </mxCell>
-        <mxCell id="6CP33WcMq1AVLbEmVYmS-105" value="" style="endArrow=none;html=1;rounded=0;entryX=0.616;entryY=1.015;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" parent="1" source="6CP33WcMq1AVLbEmVYmS-104" target="6CP33WcMq1AVLbEmVYmS-45" edge="1">
+        <mxCell id="QZ1Q3wUFRfap7xdTNe5J-10" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="6CP33WcMq1AVLbEmVYmS-58">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="988" y="360" as="sourcePoint" />
-            <mxPoint x="988" y="350" as="targetPoint" />
+            <mxPoint x="1102" y="364" as="sourcePoint" />
+            <mxPoint x="1103" y="326.5" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="u8_nf58v80TP83UxYRXt-1" value="Verify Token" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
-          <mxGeometry x="330" y="395.5" width="90" height="30" as="geometry" />
-        </mxCell>
-        <mxCell id="u8_nf58v80TP83UxYRXt-2" value="Prep DB Access" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
-          <mxGeometry x="977" y="317.5" width="110" height="30" as="geometry" />
+        <mxCell id="QZ1Q3wUFRfap7xdTNe5J-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;endArrow=none;endFill=0;" edge="1" parent="1" source="6CP33WcMq1AVLbEmVYmS-27" target="6CP33WcMq1AVLbEmVYmS-62">
+          <mxGeometry relative="1" as="geometry" />
         </mxCell>
       </root>
     </mxGraphModel>
diff --git a/Documentation/src/figures/architecture-component.png b/Documentation/src/figures/architecture-component.png
index 652046e39b75d3a37f41c369a9fae86bee6884b5..9091f40c2ec1349e170cfbb47777fec1095b3e64 100644
Binary files a/Documentation/src/figures/architecture-component.png and b/Documentation/src/figures/architecture-component.png differ