# Lorem Ipsum – Memory Game Webanwendung ## Inhaltsverzeichnis - [Projektbeschreibung](#projektbeschreibung) - [Anforderungen & Features](#anforderungen--features) - [Installation & Setup](#installation--setup) - [Verwendung](#verwendung) - [Projektstruktur](#projektstruktur) - [Technologie-Stack](#technologie-stack) - [Architektur & Technische Entscheidungen](#architektur--technische-entscheidungen) - [Sicherheit](#sicherheit) - [KI-Werkzeuge & deren Einsatz](#ki-werkzeuge--deren-einsatz) - [Herausforderungen & Lerneffekte](#herausforderungen--lerneffekte) - [Team](#team) --- ## Projektbeschreibung **Lorem Ipsum** ist eine interaktive Webanwendung, die das Kurzzeitgedächtnis trainiert. Nutzer werden mit zufälligen Texten präsentiert, die sie sich innerhalb einer definierten Zeitspanne einprägen müssen. Nach Ablauf der Zeit reproduzieren sie den Text so akkurat wie möglich. Das System bewertet die Leistung durch Wort-für-Wort-Vergleich und vergibt Punkte. Die Anwendung ermöglicht soziale Interaktion durch ein globales Leaderboard, auf dem Nutzer ihre Scores veröffentlichen und sich mit anderen Spielern vergleichen können. --- ## Anforderungen & Features ### Funktionale Anforderungen | Feature | Beschreibung | |---------|-------------| | **Benutzerverwaltung** | Benutzer können ein Konto erstellen und erhalten ein eindeutiges Passwort | | **Spielmechanik** | Zufällige Texte werden angezeigt und müssen nach Ablauf einer Zeitspanne reproduziert werden | | **Score-System** | Automatische Bewertung basierend auf korrekt eingegebenen Wörtern mit Punkt-Vergabe | | **Persönliche Scores** | Nutzer können alle ihre bisherigen Scores ansehen und verwalten | | **Globales Leaderboard** | Echtzeit-Anzeige der Top 10 Spieler mit ihren besten Scores | | **Nachrichten-System** | Nutzer können sich gegenseitig Nachrichten/Challenges schreiben | --- ## Installation & Setup ### Voraussetzungen - Moderner Webbrowser (Chrome, Firefox, Safari, Edge) - Node.js (optional, nur für lokale Backend-Entwicklung) - Zugriff auf die Backend-API (`config-service.js` für API-Konfiguration) ### Schnellstart ```bash # 1. Repository klonen git clone cd lorem_ipsum # 2. Abhängigkeiten installieren (falls Backend vorhanden) npm install # 3. Applikation starten # Option A: Mit Live-Server (VS Code Extension) # Rechtsklick auf index.html → "Open with Live Server" # Option B: Mit Python (falls vorhanden) python -m http.server 8000 # Dann öffnen: http://localhost:8000 # Option C: Mit Node.js npx http-server ``` ### Backend-Konfiguration Die API-Endpoints sind in `assets/src/service/config-service.js` konfiguriert: ```javascript // config-service.js export const API_BASE_URL = "https://api.example.com"; export const API_VERSION = "v1"; ``` --- ## Verwendung ### Für neue Benutzer 1. **Account erstellen**: Auf der Startseite auf "Registrieren" klicken 2. **Login**: Mit dem erhaltenen Passwort anmelden 3. **Spiel spielen**: "Spiel Starten" wählen - Text wird 15 Sekunden lang angezeigt - Nach Ablauf Text reproduzieren - Automatische Bewertung wird angezeigt 4. **Scores verwalten**: Persönliche Scores einsehen und ggf. auf Leaderboard hochladen 5. **Leaderboard**: Top 10 Spieler in Echtzeit betrachten 6. **Nachrichten**: Mit anderen Spielern kommunizieren oder Challenges stellen ### Beispiel-Workflows **Workflow 1: Account erstellen** ``` Home → Login/Registrieren → Username eingeben → Username und Passwort speichern ``` **Workflow 2: Leaderboard ansehen** ``` Home → Leaderboard → Top 10 wird geladen und angezeigt ``` --- ## Projektstruktur ``` lorem_ipsum/ ├── index.html # Startseite ├── README.md # Dokumentation (diese Datei) ├── pages/ │ ├── login.html # Login/Registrierung │ ├── home.html # Startseite nach Login │ ├── play.html # Spielseite │ ├── scores.html # Persönliche Scores │ ├── leaderboard.html # Globales Leaderboard │ └── messages.html # Nachrichts-/Challenge-System ├── js/ │ ├── login.js # Login-Logik & Event-Handler │ ├── play.js # Spiel-Logik (Timer, Text-Vergleich) │ ├── leaderboard.js # Leaderboard-Rendering │ ├── navigation.js # Navigations-Controls │ └── messages.js # Nachrichten-Funktionalität ├── assets/ │ ├── css/ │ │ └── custom.css # Custom-Styles │ ├── src/ │ │ ├── service/ │ │ │ ├── user-service.js # User-API-Aufrufe (Login, Register) │ │ │ ├── leaderboard-service.js # Leaderboard-API-Aufrufe │ │ │ ├── score-service.js # Score-Management │ │ │ ├── message-service.js # Nachrichten-API │ │ │ ├── challenge-service.js # Challenge-API │ │ │ └── config-service.js # API-Konfiguration & Konstanten │ │ └── sites/ │ │ └── exampleAPI.js # API-Test/Beispiel │ └── bootstrap-5.3.8-dist/ # Bootstrap Framework (v5.3.8) └── pages/ └── [weitere Pages wie oben] ``` ### Dateibenennungs-Konventionen - **HTML-Dateien**: `kebab-case` (z.B. `login.html`, `play.html`) - **JavaScript-Dateien**: `kebab-case` (z.B. `login.js`, `play.js`, `user-service.js`) - **Service-Dateien**: Suffix `-service.js` (z.B. `score-service.js`, `leaderboard-service.js`) - **CSS-Klassen**: Bootstrap-Utilities + Custom Selektoren; BEM bei komplexen Komponenten (z.B. `.play-challenge-result__title`) --- ## Technologie-Stack | Layer | Technologie | Version | Begründung | |-------|-------------|---------|-----------| | **Markup** | HTML5 | 5 | Semantische Struktur, barrierefreundlich | | **Styling** | Bootstrap CSS | 5.3.8 | Responsive Grid, vordefinierte Komponenten, Accessibility | | **Custom CSS** | CSS3 | - | Flexbox/Grid für Layout-Feinheiten, Custom Properties | | **Frontend-Logik** | Vanilla JavaScript | ES6+ | Keine externen Abhängigkeiten nötig, vollständige Kontrolle | | **API-Kommunikation** | Fetch API | - | Modern, Promise-basiert, Error-Handling via try/catch | | **Versionsverwaltung** | Git | - | Nachvollziehbarer Entwicklungsverlauf | ### Warum Vanilla JS statt Framework? - Projekt-Anforderungen sind moderat (keine komplexe State-Verwaltung nötig) - Fetch API mit async/await bietet ausreichende Abstraktionen - Schnellere Ladezeiten ohne Framework-Overhead - Volles Verständnis über den Code ohne "Black Box"-Effekte ### Warum Bootstrap? - Responsive Design out-of-the-box (12er Grid-System) - Umfangreiches Komponenten-Portfolio (Modals, Forms, Cards) - WCAG Level A Compliance bereits implementiert - Konsistentes Design über alle Seiten hinweg --- ## Architektur & Technische Entscheidungen ### Service-orientierte Architektur Die Anwendung folgt einer **Service-orientierten Architektur**: ``` UI Layer (HTML/CSS) ↓ Event Handler (login.js, play.js, ...) ↓ Service Layer (user-service.js, score-service.js, ...) ↓ Fetch API → Backend REST API ``` **Vorteile:** - **Separation of Concerns**: Jeder Service hat eine klare Verantwortung - **Wiederverwendbarkeit**: Services können von mehreren Seiten genutzt werden - **Testbarkeit**: Services können isoliert getestet werden - **Wartbarkeit**: API-Änderungen erfordern nur Anpassung in einem Ort ### Datenfluss beim Spielen ```javascript 1. play.js: generateGameText() // Zufälligen Text lokal generieren 2. play.js: Timer starten (15s) 3. User tippt Text ein 4. play.js: Wort-für-Wort-Vergleich nach Position 5. score-service.postScore() // Score zum Server senden 6. UI zeigt Ergebnis sofort an, Speichern läuft asynchron ``` ### Authentifizierungs-Design **Besonderheit: Backend generiert Passwörter statt User-Input** ``` Konventionell (problematisch): Unser Ansatz (bewusst gewählt): User gibt Passwort ein → Backend generiert zufälliges Passwort Risiko: User nimmt häufig genutztes → Keine Passwort-Reuse-Gefahr Passwort → Für diese Session gültig ``` **Begründung dieser Entscheidung:** 1. **Sicherheitsausrichtung**: Nutzer gefährden kein häufig genutztes Passwort (Lernaspekt: User-Sicherheit) 2. **Frontend-Fokus**: Komplexe Auth-Logik (Hashing, Salting) sind nicht im scope dieses Moduls 3. **Transparenz**: Diese Limitierung ist im Code und README dokumentiert – nicht versteckt **Konsequenzen für OWASP:** - ⚠️ localStorage speichert plaintext-Passwort (A07:2021 – nicht konform) - ✅ Aber: Generierte Passwörter sind Wegwerf-Token, kein häufig genutztes Passwort ### HTML5 Semantik Alle HTML-Dateien nutzen semantisch korrekte Elemente: ```html