# EIS Projekt – Entwicklung interaktiver Softwareanwendungen

## 📋 Projektübersicht

Dies ist eine mehrseitige Website für die Lehrveranstaltung **„Entwicklung interaktiver Softwareanwendungen"** an der PH Weingarten.

**Dozenten:** Stefan Franke und Prof. Dr. Wolfgang Müller

## 🚀 Live-Zugang

Die Website ist unter folgender Adresse erreichbar:
```
https://isa##.edumake.de
```
(## wird durch Ihre Benutzernummer ersetzt)

## 📁 Projektstruktur

```
~/public_html/
├── index.html              # Startseite
├── ueber_uns.html          # Über uns & Dozenten
├── eis_projekt.html        # Projektdetails
├── team.html               # Team-Seite
├── galerie.html            # Bildergalerie (Lightbox)
├── notenrechner.html       # Notenrechner (DOM-basiert)
├── textanalyse.html        # Textanalyse-Tool
├── api.html                # fetch & API Demo (JSONPlaceholder)
├── kanban.html             # Kanban-Board (Drag & Drop)
├── quiz.html               # Mini-Quiz (50 Fragen, 3 random, DOM-basiert)
├── app.py                  # Flask-App (U17): Kommentare/Pinnwand unter /app/pinnwand
├── kontakt.html            # Kontaktformular
├── impressum.html          # Rechtliche Infos
├── css/
│   └── style.css           # Zentrale Stylesheet (~3600 Zeilen)
├── js/
│   ├── script.js           # Dark Mode, Hamburger-Nav, Formular, Lightbox
│   ├── api-demo.js         # fetch() API Demo
│   ├── kanban.js           # Kanban-Board Logik
│   └── quiz.js             # Mini-Quiz Logik (U14)
├── venv/                   # Python Virtual Environment (serverlokal, in .gitignore)
├── img/
│   ├── logo.png            # Projekt-Logo
│   ├── gruppenbild.jpg     # Team-Gruppenbild
│   └── teambild.jpeg       # Teambild
└── README.md               # Diese Datei
```

## 🛠️ Technologie-Stack

### Frontend
- **HTML5** – Semantisches Markup
- **CSS3** – Responsive Design mit Grid & Flexbox (~3600 Zeilen)
- **JavaScript (ES6+)** – Interaktive Elemente
  - Dark Mode mit localStorage-Persistenz
  - Hamburger-Navigation (Mobile)
  - Lightbox-Galerie
  - Formularvalidierung (feldspezifisch)
  - fetch() API Demo
  - Kanban-Board (Drag & Drop)
  - Mini-Quiz (DOM-basiert, 50 Fragen, zufällig)

### Features
- ✅ Responsive Design (Mobile, Tablet, Desktop)
- ✅ Dark Mode (Toggle + localStorage; Auto-Dark ab 16:00 Uhr)
- ✅ Begrüssung nach Tageszeit im Header (Morgen/Mittag/Abend + Uhrzeit, live)
- ✅ Hamburger-Menü (Mobile)
- ✅ Einheitliche Navigation (12 Seiten)
- ✅ Kontaktformular mit feldspezifischer JS-Validierung
- ✅ Bildergalerie mit Lightbox
- ✅ Notenrechner (DOM-basiert, Tabs, Fortschrittsbalken)
- ✅ Textanalyse-Tool (Wörter, Zeichen, Sätze, Metriken)
- ✅ fetch & API Demo (JSONPlaceholder, DOM-Rendering, Fehlerbehandlung, Filter)
- ✅ Kanban-Board (Drag & Drop, Labels, localStorage, JSON-Export)
- ✅ Mini-Quiz (50 Fragen, 3 zufällig, Feedback, Auswertung, Highscore)
- ✅ Flask-App (U17): Kommentare/Pinnwand unter `/app/pinnwand`
- ✅ Antworten auf Kommentare (Inline-Antwortfeld + Anzeige unter Kommentar)
- ✅ Zeitstempel in CEST (UTC+2)
- ✅ SEO-freundliches Markup

## 🖥️ SSH-Zugang

Verbindung zum Server:
```bash
ssh -p 2222 isa##@edumake.de
```

⚠️ **Wichtig:** Eduroam sperrt Port 2222 – verwenden Sie WLAN mbm oder Ihren mobilen Hotspot.

Navigationszum Projektverzeichnis:
```bash
cd ~/public_html
```

## 📝 Dateienverwaltung

### Dateien bearbeiten
Verwenden Sie einen Editor (nano, vi) oder SFTP:
```bash
nano index.html
```

### Änderungen hochladen (via SFTP)
```bash
sftp -P 2222 isa##@edumake.de
```

## 🎨 CSS-Struktur

Die zentrale `css/style.css` ist in folgende Abschnitte unterteilt:

1. **Global Styles & Reset** – Box-model, Basis-Styling
2. **Typography** – Überschriften, Text, Links
3. **Header & Navigation** – Sticky Header, aktive Links
4. **Main Content** – Layout, Sections, Container
5. **Forms** – Input-Styling, Validierung
6. **Galerie & Lightbox** – Bilder und Modal-Fenster
7. **Responsive Design** – Media Queries

## 📱 Responsive Breakpoints

```css
/* Tablet */
@media (max-width: 768px)

/* Mobile */
@media (max-width: 480px)
```

## 🔧 JavaScript-Funktionen

### script.js (Basis)
- **Dark Mode** – Toggle + sofortige Wiederherstellung via localStorage (IIFE); ab 16:00 Uhr automatisch Dark Mode (wenn kein manueller Override gespeichert)
- **Begrüssung nach Tageszeit (U13)** – zeigt „Guten Morgen/Mittag/Abend, es ist HH:MM Uhr" im Header; Uhrzeit aktualisiert sich jede Minute (`setInterval`)
- **Hamburger-Navigation** – Mobile Menü mit aria-Attributen
- **Navigation-Highlighting** – Aktiver Link basierend auf URL
- **Lightbox-Galerie** – Klick auf Bilder öffnet vergrößerte Ansicht (ESC/Overlay zum Schließen)
- **Kontaktformular** – Feldspezifische Validierung, Erfolgsmeldung im DOM

### api-demo.js
- `fetch('https://jsonplaceholder.typicode.com/users')` – automatischer Aufruf
- `.then(r => r.json())` – JSON-Parsing mit HTTP-Status-Prüfung
- `console.log()` + `console.table()` – strukturierte Ausgabe
- `createElement` + `DocumentFragment` – performantes DOM-Rendering
- `.catch(err)` – Fehlermeldung + „Erneut versuchen"-Button
- Client-seitiger Live-Filter (Name, Stadt, Firma, E-Mail)

### quiz.js
- 50 Fragen als Array von Objekten `{ frage, antworten, richtig }`
- `shuffle()` (Fisher-Yates) zieht jede Runde 3 zufällige Fragen
- Komplett dynamischer DOM-Aufbau (`createElement`, kein statisches HTML)
- Direktes Feedback im DOM (kein `alert()`): Button grün/rot eingefärbt
- Buttons nach Antwort deaktiviert (kein doppeltes Punkten)
- Fortschrittsbalken + Live-Punktestand während dem Quiz
- Auswertungsscreen mit Ergebnis-Nachricht je Punktzahl (0/1/2/3)
- Fragen-Rückblick mit richtigen Antworten
- 🥇 Highscore (perfekte Runden) in `localStorage`
- „Neues Quiz starten" – zieht neue 3 zufällige Fragen
- Karten anlegen / löschen / editieren (`contenteditable`)
- Drag & Drop (`dragstart`, `dragover`, `drop`, `dragenter`, `dragleave`)
- Präzise Reihenfolge via `getBoundingClientRect` + Drop-Placeholder
- Farbige Labels per Rechtsklick-Kontextmenü
- Vollständige Persistenz in `localStorage` als JSON
- Export als JSON-Datei (`Blob` + `URL.createObjectURL`)

## 📚 Inhaltsseiten

### index.html
- Hero-Abschnitt mit Projekt-Übersicht
- Info-Karten mit Links zu anderen Seiten

### ueber_uns.html
- Veranstaltungsinformationen
- Dozenten-Profile

### eis_projekt.html
- Technologie-Stack & Projektstruktur

### team.html
- Teammitglieder-Profile mit Beschreibung & Skill-Tags

### galerie.html
- Bildergalerie mit Lightbox (Teambild, Gruppenbild)

### notenrechner.html
- DOM-basierter Notenrechner mit Tabs & Fortschrittsbalken

### textanalyse.html
- Textanalyse: Wörter, Zeichen, Sätze, Lesbarkeit, häufigste Wörter

### api.html
- Live-Datenabruf von jsonplaceholder.typicode.com/users
- DOM-Rendering, Filter, Fehlerbehandlung

### kanban.html
- Trello-ähnliches Kanban-Board
- Drag & Drop, Labels, localStorage-Persistenz, JSON-Export

### quiz.html
- Mini-Quiz mit 3 zufälligen Fragen aus 50 (Allgemeinwissen)
- Direktes Feedback, Punktezähler, Auswertung, Highscore

### app.py (Flask, U17)
- Route `/` leitet auf `/app/pinnwand` weiter
- Route `/pinnwand` zeigt die Pinnwand im YouTube-Kommentarstil
- Kommentare können beantwortet werden; Antworten erscheinen unter dem Hauptkommentar
- Zeitstempel werden in CEST (UTC+2) erzeugt

### kontakt.html
- Kontaktformular mit feldspezifischer JavaScript-Validierung

### impressum.html
- Rechtliche Hinweise & Datenschutzerklärung

## 🚀 Entwicklungsschritte (Lernpfad)

| Unit | Thema | Inhalte |
|------|-------|---------|
| **U1** | Grundlagen | SSH, Linux, erste HTML-Seite |
| **U2** | Styling & Interaktion | CSS, JavaScript, Events |
| **U3** | Website-Architektur | Navigation, mehrere Seiten |
| **U4** | DOM & APIs | Notenrechner, Textanalyse, fetch & API Demo |
| **Bonus** | Erweitert | Kanban-Board (Drag & Drop, localStorage) |
| **U14** | Quiz | Mini-Quiz (50 Fragen, zufällig, DOM-basiert, Highscore) |
| **U17** | Flask | App unter `/app/` mit Pinnwand/Kommentaren, Antworten, Zeitstempel |

## 🗓️ Änderungsprotokoll

| Datum | Änderung |
|-------|----------|
| 17.06.2026 | U17: Flask-App aktualisiert – App-Fokus auf Kommentare, Antworten-Funktion integriert, Zeitstempel auf CEST korrigiert, Link „Kommentare“ in der Navigation |
| 03.06.2026 | U14: Mini-Quiz – 50 Fragen, 3 zufällig, DOM-Aufbau, Auswertung, Highscore |
| 03.06.2026 | U13: Begrüssung nach Tageszeit im Header + Auto-Dark-Mode ab 16:00 Uhr |
| 20.05.2026 | Dark Mode: Beschreibungstexte Team/Notenrechner/Textanalyse in dunkelblau |
| 20.05.2026 | Galerie: teambild.jpeg eingefügt |
| 20.05.2026 | Mega-Bonus: Kanban-Board (Drag & Drop, Labels, localStorage, JSON-Export) |
| 20.05.2026 | Bonus: fetch & API Demo (JSONPlaceholder, DOM-Rendering, Filter) |
| vor 20.05.2026 | Dark Mode, Hamburger-Navigation, Kontaktformular-Validierung, Notenrechner, Textanalyse |

## 📧 Support

Bei Fragen oder Problemen kontaktieren Sie:

- **Stefan Franke:** stefan.franke@ph-weingarten.de
- **Prof. Dr. Wolfgang Müller:** wolfgang.mueller@ph-weingarten.de

## 📄 Lizenz

Dieses Projekt ist ein Lernprojekt der PH Weingarten und dient zu Ausbildungszwecken.

---

**Zuletzt aktualisiert:** 17. Juni 2026
