Typewriter Tutor - Adaptiver Tipptrainer --- Ein moderner, webbasierter Tipptrainer mit **adaptivem Metronom** und umfangreichen Statistiken. Das Programm passt sich automatisch Ihrer Tippgeschwindigkeit an und hilft Ihnen, das Zehnfingerschreiben systematisch zu erlernen.
  • Python 49.3%
  • HTML 23.2%
  • JavaScript 21.4%
  • CSS 3.5%
  • Shell 2.4%
  • Other 0.2%
Find a file
dschlueter d0557f7145 Release: Version v0.6.0
Versionsnummer von v0.5.0 auf v0.6.0 angehoben (VERSION, README,
PROJECT_STRUCTURE, HILFE, helpers.get_version-Fallback). Changelog-
Eintrag 0.6.0 ergänzt (Auto-Save, LAN-Zugriff, Test-Isolation-Fix,
create_app-Factory, app.config['LESSONS'], Route-Tests + ruff).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 13:48:21 +02:00
.githooks Tooling (Welle B): ruff-Linting einführen, Pre-commit-Hook härten 2026-06-22 12:39:31 +02:00
alembic Lektionsspezifische Datenpersistenz und automatisches Pausieren beim Seitenwechsel 2025-10-29 03:51:25 +01:00
data Neuer User dschlueter 2026-06-22 10:45:40 +02:00
routes Cleanup: debug()-Endpoint entschachtelt 2026-06-22 12:57:42 +02:00
services Release: Version v0.6.0 2026-06-22 13:48:21 +02:00
static Feature: Periodischer Auto-Save (alle 10s, einstellbar) + Speichern bei Pause 2026-06-22 13:42:10 +02:00
templates Docs: Alte jamulix/GitHub-Verweise auf Forgejo umgestellt 2026-06-22 12:06:36 +02:00
tests Feature: Periodischer Auto-Save (alle 10s, einstellbar) + Speichern bei Pause 2026-06-22 13:42:10 +02:00
.coveragerc CI/CD Integration: GitHub Actions, Coverage & Pre-commit Hooks 2025-10-29 09:57:48 +01:00
.gitignore Chore: CLAUDE.md zu .gitignore hinzugefügt (nur lokal) 2026-06-22 11:42:51 +02:00
.stylelintrc.json Claude Code hat übernommen 2025-10-27 14:14:17 +01:00
alembic.ini Claude Code hat übernommen 2025-10-27 14:14:17 +01:00
app.py Feature: LAN-URL beim Start ausgeben 2026-06-22 13:26:32 +02:00
cleanup.sh Neue Claude Änderungen 2025-10-27 15:47:04 +01:00
convert_txt_files_to_lessons_json.py Feature: Lesson task field & TXT-to-JSON converter tool 2025-10-29 20:22:34 +01:00
HILFE.md Release: Version v0.6.0 2026-06-22 13:48:21 +02:00
JAVASCRIPT_MODULES.md Docs: Verweise auf gelöschte Test-Dateien bereinigt 2026-06-22 12:11:57 +02:00
MIGRATIONS.md Dokumentation auf v0.3.0 aktualisiert 2025-10-28 12:39:53 +01:00
models.py Tooling (Welle B): ruff-Linting einführen, Pre-commit-Hook härten 2026-06-22 12:39:31 +02:00
PROJECT_STRUCTURE.md Release: Version v0.6.0 2026-06-22 13:48:21 +02:00
README.md Release: Version v0.6.0 2026-06-22 13:48:21 +02:00
requirements-dev.txt Tooling (Welle B): ruff-Linting einführen, Pre-commit-Hook härten 2026-06-22 12:39:31 +02:00
requirements.txt Refactor (Welle A): Pins, Konstanten, gezieltes CSRF, robustes load_lessons 2026-06-22 12:34:38 +02:00
ruff.toml Refactor (Welle C): create_app()-Factory einführen 2026-06-22 12:42:19 +02:00
run_coverage.sh CI/CD Integration: GitHub Actions, Coverage & Pre-commit Hooks 2025-10-29 09:57:48 +01:00
setup.sh Docs: Verweise auf gelöschte Test-Dateien bereinigt 2026-06-22 12:11:57 +02:00
setup_database.py Tooling (Welle B): ruff-Linting einführen, Pre-commit-Hook härten 2026-06-22 12:39:31 +02:00
start.sh Anzeige und Scrolling im Vorlagenfenster verbessert 2025-10-27 15:02:42 +01:00
VERSION Release: Version v0.6.0 2026-06-22 13:48:21 +02:00

Typewriter Tutor - Adaptiver Tipptrainer

Version: v0.6.0 (siehe VERSION Datei)

Ein moderner, webbasierter Tipptrainer mit adaptivem Metronom und umfangreichen Statistiken. Das Programm passt sich automatisch Ihrer Tippgeschwindigkeit an und hilft Ihnen, das Zehnfingerschreiben systematisch zu erlernen.

💡 Hinweis: Dieses Projekt dient auch als Übungsprojekt für das KI-Programmiertool Aider.

Hauptfunktionen

🎯 Adaptives Metronom

  • Automatische Geschwindigkeitsanpassung: Das Metronom passt sich dynamisch Ihrer Tippgeschwindigkeit an
  • 5 intelligente Anpassungsregeln: Beschleunigt bei hoher Genauigkeit, bremst bei Fehlern
  • Zielgenauigkeit: Hält Sie im optimalen Bereich von 91-95% Genauigkeit
  • Konfigurierbare Obergrenze: Maximale Geschwindigkeit einstellbar (Standard: 100 BPM)
  • Präzises Timing: Läuft unabhängig von Tastatureingaben mit Web Audio API
  • Zwei Modi:
    • Automatisch: Adaptives Metronom (empfohlen)
    • Explizit: Feste Geschwindigkeit (40-200 BPM)
  • Streak-Bonus: Belohnt fehlerfreies Tippen mit höherer Geschwindigkeit

📊 Umfangreiche Statistiken

  • Echtzeit-Metriken: ZPM (Zeichen/Minute), WPM (Wörter/Minute), Präzision in %
  • Positive Darstellung: Präzisions-Anzeige statt Fehlerrate für motivierendes Feedback
  • Detaillierte Diagramme: Visualisierung Ihrer Fortschritte mit Chart.js
  • Lektionsbasierte Auswertung: Separate Statistiken für jede Lektion
  • Historische Daten: Verfolgen Sie Ihre Entwicklung über die Zeit
  • Datenexport: CSV und JSON-Export Ihrer Statistiken

🎨 Moderne Benutzeroberfläche

  • Direct Input: Tippen Sie direkt im Vorlagenfeld - kein separates Eingabefeld
  • Visuelles Feedback:
    • Grün für korrekte Zeichen
    • Rot für Fehler mit orangefarbener Anzeige des falsch eingegebenen Zeichens
    • 📍 Blinkender Cursor zeigt Ihre Position
  • Dezentes Design: Schlichte, ablenkungsfreie Statistik-Anzeige ohne bunte Badges
  • Versionsnummer: Im Header sichtbar für bessere Nachvollziehbarkeit
  • Dark/Light Mode: Komfortable Arbeit bei Tag und Nacht
  • Responsive Design: Funktioniert auf Desktop und mobilen Geräten
  • Hilfe-System: Integrierte Hilfe mit detaillierten Erklärungen

🔧 Erweiterte Features

  • ErrorLock: Optional müssen Fehler korrigiert werden, bevor weitergeschrieben werden kann
  • Pause-Funktion: Unterbrechen und Fortsetzen jederzeit möglich
  • Flexible Lektionsauswahl: 43+ Lektionen von Grundlagen bis Programmierung
  • Fortschrittsverfolgung: Automatisches Speichern Ihres Fortschritts
  • Anti-Cheat: Verhindert Copy-Paste und unerlaubte Hilfen

🚀 Installation

Voraussetzungen

  • Python 3.8 oder höher
  • pip (Python Package Manager)

Schnellstart

  1. Repository klonen oder Download:
git clone https://kitux.de/forgejo/dschlueter/typewriter_tutor.git
cd typewriter_tutor

Alternativ: Neuestes Release herunterladen

  1. Virtuelle Umgebung erstellen (empfohlen):
python -m venv venv
source venv/bin/activate  # Linux/Mac
# oder
venv\Scripts\activate     # Windows
  1. Abhängigkeiten installieren:
pip install -r requirements.txt
  1. Datenbank initialisieren (optional, wird automatisch beim Start erstellt):
# Bei erster Installation oder für Updates:
alembic upgrade head
  1. Anwendung starten:
python app.py
  1. Im Browser öffnen:
http://localhost:5000

📁 Projektstruktur

typewriter/
├── app.py                          # Flask-Hauptanwendung
├── models.py                       # SQLAlchemy Datenbankmodelle
├── convert_txt_files_to_lessons_json.py  # Tool: TXT → lessons.json
├── requirements.txt                # Python-Dependencies
├── .env                            # Secret Key (automatisch generiert)
├── .gitignore                      # Git-Ignore-Konfiguration
│
├── data/
│   └── lessons.json                # 43 Lektionen (JSON)
│
├── static/
│   ├── css/
│   │   └── style.css               # Styling (Dark/Light Mode)
│   ├── js/                         # Modulare JavaScript-Architektur (ES6)
│   │   ├── main.js                 # Hauptorchestration
│   │   ├── keyboard.js             # Keyboard-Event-Handling
│   │   ├── metronome.js            # Adaptives Metronom
│   │   ├── session.js              # Session Management
│   │   ├── statistics.js           # Statistik-Berechnungen
│   │   ├── textDisplay.js          # Text-Rendering
│   │   ├── theme.js                # Theme Management
│   │   └── ui.js                   # UI-Interaktionen
│   └── favicon.svg                 # Schreibmaschinen-Icon
│
├── templates/
│   ├── index.html                  # Hauptseite (Training)
│   ├── statistics.html             # Statistik-Diagramme
│   └── settings.html               # Einstellungen (Metronom, Anzeige)
│
├── alembic/                        # Datenbank-Migrationen
│   ├── env.py
│   ├── versions/
│   │   └── 09de7cfb8b74_initial_migration.py
│   └── alembic.ini
│
├── instance/
│   └── typewriter.db               # SQLite-Datenbank (automatisch erstellt)
│
├── README.md                       # Diese Datei
├── CLAUDE.md                       # Projektdokumentation für KI
└── MIGRATIONS.md                   # Alembic-Anleitung

🎮 Verwendung

Grundlegende Bedienung

  1. Training starten: Öffnen Sie die Anwendung im Browser
  2. Lektion wählen: Klicken Sie auf eine Lektionsnummer in der Lektionsleiste
  3. Tippen: Beginnen Sie direkt zu tippen - der Cursor zeigt Ihre Position
  4. Statistiken: Werden in Echtzeit angezeigt (optional über "Leistung" einblendbar)
  5. Navigation:
    • Weiter: Nächste Lektion
    • Leistung: Detaillierte Statistiken ein-/ausblenden
    • Statistik: Zur Statistik-Seite mit Diagrammen
    • Beenden: Sitzung beenden

Steuerung

Taste/Aktion Funktion
Buchstaben/Zahlen Zeichen eingeben
Leertaste Leerzeichen
Enter Zeilenumbruch (falls im Text vorhanden)
Pfeiltaste ←/→ Cursor bewegen
Backspace Zeichen löschen
Lautsprecher-Icon Metronom ein/aus
Schloss-Icon ErrorLock ein/aus
Play/Pause-Icon Training pausieren/fortsetzen
Mond/Sonne-Icon Dark/Light Mode wechseln
Zahnrad-Icon Einstellungen öffnen

Einstellungen

Über das Zahnrad-Icon (⚙️) gelangen Sie zu den Einstellungen:

Metronom-Einstellungen:

  • Modus: Automatisch (adaptiv) oder Explizit (feste Geschwindigkeit)
  • Geschwindigkeit: 40-200 ZPM (nur im Explizit-Modus)
  • Ziel-Fehlerrate: 1-20% (nur im Automatik-Modus)
  • Maximale Geschwindigkeit: 40-200 BPM (Standard: 100) - verhindert Überforderung bei fehlerfreiem Tippen

Statistik-Anzeige:

  • ZPM (Zeichen pro Minute) oder WPM (Wörter pro Minute)

📈 Statistiken und Metriken

Berechnungsformeln

Zeichen pro Minute (ZPM) = (Korrekte Zeichen / Zeit in Sekunden) × 60

Wörter pro Minute (WPM) = (Korrekte Zeichen / 5) / (Zeit in Minuten)

Fehlerrate (%) = (Falsche Tastenanschläge / Gesamte Tastenanschläge) × 100

Präzision (%) = 100 - Fehlerrate

Statistik-Seite

Die Statistik-Seite (/statistics) bietet:

  • Interaktive Diagramme: ZPM/WPM und Fehlerrate über die Zeit
  • Lektionsauswahl: Separate Statistiken für jede Lektion
  • Datenexport: CSV und JSON-Download Ihrer Statistiken
  • Verlaufsanalyse: Sehen Sie Ihre Fortschritte über mehrere Sitzungen

🧪 Tests

Das Projekt enthält eine umfassende Test-Suite mit 97 Tests (100% Erfolgsrate) und lokaler Validierung per Pre-commit-Hook (ruff + Tests).

Test-Übersicht

Kategorie Anzahl Status
Gesamt 97 Tests 100%
Unit Tests 54 Tests Bestanden
Integration Tests 31 Tests Bestanden
Route Tests 12 Tests Bestanden

Test-Ausführung

# Alle Tests
python -m unittest discover -s tests -p "test_*.py" -v

# Nur Unit Tests (schnell, ohne DB)
python -m unittest tests.test_lesson_service tests.test_statistics_service tests.test_settings_service -v

# Nur Integration Tests (mit DB)
python -m unittest tests.test_integration_progress tests.test_integration_statistics -v

# Nur Route-Tests (Flask-Testclient)
python -m unittest tests.test_routes -v

# Coverage Report generieren
./run_coverage.sh

Was wird getestet?

Service Layer (Unit + Integration):

  • LessonService: Navigation, Validierung, Edge Cases
  • StatisticsService: Berechnungen (ZPM/WPM), DB-Operationen, 30-Tage-Daten
  • SettingsService: Validierungen, Boundary Values
  • ProgressService: CRUD, State Management, Multi-Lesson Independence, Lektions-Auflösung

Routes (test_routes.py):

  • Seiten (/, /train, /statistics, /settings) und zentrale API-Endpoints inkl. CSV-Export

Lokale Validierung

Die Validierung läuft lokal über einen Git-Pre-commit-Hook (aktuell ist keine serverseitige CI eingerichtet).

  • Pre-commit Hook führt Unit- und Integrationstests vor jedem Commit aus und blockiert bei Fehlern
  • Coverage Reports mit HTML-Visualisierung (lokal via ./run_coverage.sh)

Pre-commit Hook Installation:

# Hook ist bereits installiert, oder kopiere Template:
cp .githooks/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

Weitere Informationen:

🔧 Entwicklung

Lektionen aus TXT-Dateien erstellen

Das Projekt enthält ein Kommandozeilen-Tool zum Konvertieren von TXT-Dateien in das lessons.json Format:

# Konvertiere TXT-Dateien zu lessons.json
python3 convert_txt_files_to_lessons_json.py 01.1_*.txt 01.2_*.txt 01.3_*.txt

# Mit custom Output-Datei
python3 convert_txt_files_to_lessons_json.py -o data/lessons.json *.txt

# Hilfe anzeigen
python3 convert_txt_files_to_lessons_json.py --help

TXT-Datei Format:

Titel: 01.1 Erarbeitung der Grundstellung
Untertitel: Die erste Lektion (optional, wird ignoriert)
Anweisung: Sprechen Sie laut und deutlich jeden Buchstaben mit.

ffff jjjj ffff jjjj ffff jjjj
ffjj ffjj ffjj ffjj ffjj ffjj
...

Dateinamen-Format: XX.Y_Beschreibung.txt (z.B. 01.1_Grundstellung.txt)

  • Die Nummer wird zur lesson (z.B. 01.1"1.1")
  • Die Reihenfolge der Parameter bestimmt die Reihenfolge in der JSON-Datei
  • Kommentarzeilen (beginnend mit #) werden ignoriert

Datenbank-Migrationen

Das Projekt verwendet Alembic für Datenbank-Schema-Änderungen:

# Neue Migration erstellen
alembic revision --autogenerate -m "Beschreibung"

# Migrationen anwenden
alembic upgrade head

# Migration rückgängig machen
alembic downgrade -1

Siehe MIGRATIONS.md für vollständige Anleitung.

API-Endpoints

Öffentliche Endpoints:

  • GET / - Hauptseite (Training)
  • GET /statistics - Statistik-Seite mit Diagrammen
  • GET /settings - Einstellungsseite
  • GET /export/statistics/csv - CSV-Export
  • GET /export/statistics/json - JSON-Export

API-Endpoints (AJAX):

  • POST /update_progress - Fortschritt aktualisieren
  • POST /next_text - Nächste Lektion laden
  • POST /set_lesson - Lektion wechseln
  • POST /save_lesson_statistics - Lektionsstatistiken speichern
  • GET /get_lesson_statistics/<int:lesson_index> - Statistiken abrufen
  • POST /save_settings - Einstellungen speichern
  • POST /set_metronome - Metronom-Einstellungen
  • POST /end_session - Sitzung beenden

Debug-Endpoints (nur im Debug-Modus):

  • GET /debug - Debug-Informationen
  • POST /repair_json - JSON-Reparatur
  • POST /recreate_lessons - Lektionen neu erstellen

Sicherheitsfeatures

  • CSRF-Protection: Flask-WTF schützt vor Cross-Site Request Forgery
  • Input-Validierung: Alle POST-Endpoints validieren Eingaben
  • Secret Key: Automatisch generiert und sicher in .env gespeichert (0o600)
  • XSS-Prevention: HTML-Escaping bei DOM-Manipulation
  • SQL-Injection-Schutz: SQLAlchemy ORM mit Parameterisierung
  • Anti-Cheat: Copy-Paste im Vorlagenfeld deaktiviert

🎯 Adaptives Metronom - Details

Das adaptive Metronom ist das Herzstück des Trainers:

Anpassungsregeln

Regel Bedingung Aktion Änderung
#1 15+ fehlerfreie Zeichen (Streak) Belohnung +3%
#2 Genauigkeit > 95% Zu leicht +2%
#3 Genauigkeit < 85% Zu schwer -8%
#4 Genauigkeit 85-91% Leicht unter Ziel -3%
#5 Genauigkeit 91-95% Im Zielbereich +1%

Funktionsweise

  1. Sliding Window: Speichert die letzten 50 Tasteneingaben
  2. Genauigkeitsberechnung: Prozentsatz korrekter Eingaben
  3. Regelauswahl: Hierarchische Prüfung der 5 Regeln
  4. Geschwindigkeitsanpassung: Multiplikation mit Faktor
  5. Grenzen: Minimum 40 BPM, Maximum 200 BPM

Beispiel: Anfänger mit 70% Genauigkeit

  • Start: 60 BPM
  • Nach 50 Eingaben: ~40 BPM (Minimum erreicht)
  • System bremst ab für weniger Fehler

Beispiel: Experte mit 98% Genauigkeit

  • Start: 60 BPM
  • Nach 100 Eingaben: ~200 BPM (Maximum erreicht)
  • Plus Streak-Boni bei 15+ korrekten Zeichen

Die Implementierung findet sich in static/js/metronome.js.

📊 Datenbank-Schema

Tabellen

Progress - Aktueller Fortschritt

id                  INTEGER PRIMARY KEY
current_text_index  INTEGER DEFAULT 0      -- Aktuelle Lektion
current_position    INTEGER DEFAULT 0      -- Cursor-Position
last_text           TEXT DEFAULT ''        -- Letzte Eingabe

Statistic - Allgemeine Statistiken (Legacy)

id                  INTEGER PRIMARY KEY
total_chars         INTEGER DEFAULT 0
correct_chars       INTEGER DEFAULT 0
incorrect_chars     INTEGER DEFAULT 0
error_rate          FLOAT DEFAULT 0.0
typing_speed        FLOAT DEFAULT 0.0
duration_per_char   FLOAT DEFAULT 0.0
accuracy            FLOAT DEFAULT 0.0
wpm                 FLOAT DEFAULT 0.0

LessonStatistic - Lektionsstatistiken (mit Indexes)

id                  INTEGER PRIMARY KEY
lesson_index        INTEGER NOT NULL       -- Index: idx_lesson_created
chars_per_minute    FLOAT DEFAULT 0.0
error_rate          FLOAT DEFAULT 0.0
wpm                 FLOAT DEFAULT 0.0
created_at          DATETIME DEFAULT NOW() -- Index: idx_lesson_created

🤝 Beitragen

Contributions sind willkommen! Bitte:

  1. Fork das Repository
  2. Erstelle einen Feature-Branch (git checkout -b feature/AmazingFeature)
  3. Führe Tests aus (python -m unittest discover -s tests -p "test_*.py" -v)
  4. Commit deine Änderungen (git commit -m 'Add AmazingFeature')
  5. Push zum Branch (git push origin feature/AmazingFeature)
  6. Öffne einen Pull Request

Code-Qualität

  • Alle Tests müssen bestehen
  • Neue Features sollten Tests haben
  • Code sollte dokumentiert sein (Docstrings)
  • Befolge die bestehende Code-Struktur

📝 Changelog

Hinweis: Die aktuelle Versionsnummer wird zentral in der VERSION Datei verwaltet.

Version 0.6.0 (Aktuell)

  • Auto-Save: Periodisches Speichern des Fortschritts (Standard alle 10s, im Code einstellbar) sowie beim Pausieren schützt vor Datenverlust bei abruptem Abbruch
  • LAN-Zugriff: Erreichbar von allen Geräten im Netzwerk; die LAN-URL wird beim Start ausgegeben (Tipp-Training im LAN: http://<ip>:5000)
  • Fix: Integrationstests isoliert: Tests zerstörten zuvor die echte Datenbank nun via create_app()-Factory mit In-Memory-DB sauber getrennt
  • Application-Factory: create_app(config) ermöglicht isolierte Test-Apps und nebenwirkungsfreien Import
  • Robustere Architektur: Lektionen zentral über app.config['LESSONS'] (behebt stale-state-Fehler u.a. auf der Statistik-Seite)
  • Mehr Tests & Linting: Route-Level-Tests (Flask-Testclient), ruff im Pre-commit-Hook (97 Tests gesamt)
  • Fix: doppelte Statistik-Einträge, CSRF gezielt nur für /shutdown, defensiveres Laden von lessons.json

Version 0.5.0

  • Lektionsspezifische Datenpersistenz: Jede Lektion speichert ihren Fortschritt unabhängig
  • Automatisches Pausieren: Beim Wechsel zur Statistikseite wird automatisch pausiert und gespeichert
  • Korrekte Datenwiederherstellung: Alle Daten (Cursor-Position, Eingabe, Trainingszeit) werden beim Zurückkehren korrekt geladen
  • Reset-Funktionalität: Reset-Buttons (refresh-ccw) für Lektions-Fortschritt und Statistiken
  • CTRL-P Tastenkombination: Pausieren/Fortsetzen mit Tastatur
  • LessonProgress-Tabelle: Neue Datenbank-Tabelle für lektionsspezifische Daten
  • Automatische Statistik-Speicherung: Bei Lektion-Abschluss werden Statistiken automatisch gespeichert
  • Fix: ZPM-Berechnung: Mindestzeit von 1 Sekunde verhindert unrealistische Werte

Version 0.4.5

  • Tooltips: Alle Symbole zeigen beim Hover hilfreiche Tooltips (Einstellungen, Theme wechseln, Fehler blockiert an/aus, etc.)
  • Whitespace-Farbkodierung: Leerzeichen, Tabs und Newlines werden grau-grün (korrekt) oder rot (falsch) eingefärbt
  • Fehler-Overlay für Whitespace: Falsch eingegebene Zeichen werden auch bei Leerzeichen, Tabs und Newlines in Orange angezeigt
  • Live-Trainingszeit: Zeitanzeige aktualisiert sich sekündlich während des Trainings (pausiert automatisch bei Pause)
  • Landing Page Bild: Piano-Emoji durch professionelles typing_hands.jpg Bild ersetzt

Version 0.4.0

  • Landing Page: Begrüßungsseite mit Übersicht über Funktionen und direktem Zugang zum Training
  • Theme-Integration: Dark/Light Mode Toggle auch auf der Landing Page
  • Verbesserte Navigation: Zentrale Einstiegsseite für neue Nutzer

Version 0.3.0

  • Maximale Metronom-Geschwindigkeit: Konfigurierbar (Standard: 100 BPM) zur Vermeidung von Überforderung
  • Präzisions-Anzeige: Positive Darstellung (Präzision statt Fehlerrate) für motivierendes Feedback
  • Persistente Settings: Einstellungen werden in Datenbank gespeichert (nicht nur Session)
  • Metronom-Timing: Web Audio API für präzises, unterbrechungsfreies Timing
  • UI-Verbesserungen: Dezente Statistik-Anzeige ohne bunte Badges, einheitliches Button-Design
  • Versionsnummer: Im Header sichtbar
  • Alembic-Migration: max_bpm_speed zur UserSettings-Tabelle hinzugefügt

Version 0.2.0

  • Streak-Statistik: 30-Tage Balkendiagramm mit täglicher Übungszeit
  • Persistente Einstellungen: Alle Einstellungen und Lektion werden gespeichert
  • Session-Ende: Übersichtsseite mit Statistiken beim Beenden
  • Auto-Restore: Beim Neustart werden gespeicherte Einstellungen wiederhergestellt
  • Shutdown-Funktion: Programm kann sich selbst beenden
  • Metronom-Fix: Läuft jetzt rhythmisch präzise ohne Unterbrechungen
  • Adaptives Metronom mit 5 Anpassungsregeln
  • Einstellungsseite für Metronom und Anzeige
  • CSV/JSON-Export der Statistiken
  • CSRF-Protection mit Flask-WTF
  • Umfassende Input-Validierung
  • Secret Key Management mit .env
  • Alembic für Datenbank-Migrationen
  • 40 Unit-Tests (18 App + 22 Metronom)
  • Accessibility-Verbesserungen (ARIA-Labels)
  • Performance-Optimierung (DOM-Rendering)
  • Custom Favicon (Schreibmaschine)
  • Strukturiertes Logging
  • Type Hints in Python-Code

Version 0.1.x

  • Grundlegende Tipptrainer-Funktionalität
  • 43 Lektionen von Grundlagen bis Programmierung
  • Echtzeit-Statistiken
  • Diagramme mit Chart.js
  • Dark/Light Mode
  • Direct Input im Vorlagenfeld

🐛 Bekannte Einschränkungen

  • Metronom-Difficulty: Parameter current_difficulty wird aktuell nicht genutzt (immer 1.0)
  • Type Hints: Nicht alle Funktionen haben vollständige Type Hints

Diese können bei Bedarf in zukünftigen Versionen verbessert werden.

📄 Lizenz

MIT License - siehe LICENSE Datei für Details.

👨‍💻 Autor

Dieter Schlüter 📧 dieter.schlueter@linix.de 🌐 Forgejo: @dschlueter


🙏 Danksagungen


Viel Erfolg beim Training! 🚀