flask_template_codex/design.md
2026-08-08 03:08:28 +02:00

13 KiB
Raw Blame History

📋 Design Document: Steady ADHD-Friendly Flask Task Manager

1. Projektübersicht

Steady ist eine Flask-basierte, ADHS-freundliche Task-Management-Anwendung, die wissenschaftliche Erkenntnisse über Executive Function Deficits in ein intuitives, beruhigendes UI übersetzt. Die App compensiert typische ADHS-Herausforderungen wie Time Blindness, Working Memory Limits und Entscheidungsparalyse durch strukturierte, visuell ruhige Interaktion.


2. Technische Architektur

2.1 Stack

  • Backend: Flask 3.x mit Application-Factory- und Blueprint-Architektur
  • Database: SQLite3 (Flask-SQLAlchemy ORM)
  • Authentifizierung: Flask-Login (Passwort-Hashing via werkzeug.security)
  • Frontend: Jinja2 Templates + Vanilla CSS (keine Frameworks, nur Reset) + Vanilla JS
  • Sicherung: JSON Export/Import für User-Backups
  • Erweiterbarkeit: Unabhängige Feature-Packages, Config-driven Feature Toggles, versionierbare API

2.2 Verbindliche Architekturprinzipien

  • Die Flask-App muss Raum für weitere Apps und Features lassen. Jede fachliche Funktion wird als eigenständiges Feature-Package mit Blueprint, Routes, Models, Services und optionalen Templates angelegt.
  • Die Application Factory (create_app) erstellt und konfiguriert App-Instanzen. Globale Erweiterungen werden ungebunden in extensions.py definiert und per init_app() verbunden.
  • Features dürfen keine internen Routes, Models oder Templates anderer Features importieren. Gemeinsame, fachlich neutrale Bausteine gehören nach app/core/; notwendige fachübergreifende Abläufe nutzen dokumentierte Service-Schnittstellen.
  • Neue Features müssen registriert oder über Konfiguration aktiviert werden können, ohne bestehende Feature-Packages umzubauen.
  • Erweiterbarkeit darf Sicherheit, Tests, Barrierefreiheit oder Wartbarkeit nicht umgehen. Etablierte Flask- und Python-Best-Practices sind verpflichtend.

2.3 Verzeichnisstruktur

steady/
├── app/
│   ├── __init__.py           # create_app() und Blueprint-Registrierung
│   ├── extensions.py         # db, login_manager, csrf (ungebunden)
│   ├── core/                 # Gemeinsame Fehlerseiten und neutrale Services
│   ├── auth/                 # Eigenständiges Auth-Feature
│   │   ├── __init__.py
│   │   ├── routes.py
│   │   ├── models.py
│   │   └── services.py
│   ├── tasks/                # Eigenständiges Task-Feature
│   │   ├── __init__.py
│   │   ├── routes.py
│   │   ├── models.py
│   │   └── services.py
│   ├── settings/             # Eigenständiges Settings-Feature
│   ├── admin/                # Deaktivierbares zukünftiges Feature
│   ├── api/                  # Versionierte API-Blueprints (zukünftig)
│   │   └── v1/
│   ├── templates/
│   │   ├── base.html
│   │   ├── auth/
│   │   ├── dashboard/
│   │   ├── tasks/
│   │   ├── settings/
│   │   └── admin/
│   └── static/
│       ├── css/
│       │   └── style.css     # Pastel Design-System
│       └── js/
│           └── main.js
├── config.py                 # Umgebungsconfig und Feature Toggles
├── wsgi.py                   # Produktions-Entrypoint
├── requirements.txt
├── instance/
│   └── steady.db             # SQLite Database
└── tests/                    # Unit- und Feature-Integrationstests
    ├── conftest.py
    ├── auth/
    └── tasks/

Diese Struktur ist ein Vertrag: Neue Funktionen wie Kalender, Coaching oder Benachrichtigungen werden als zusätzliche Packages unter app/ ergänzt. Nur tatsächlich gemeinsam genutzter, fachlich neutraler Code darf nach app/core/ verschoben werden.


3. Datenbank-Modell (SQLite/SQLAlchemy)

3.1 User Model

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password_hash = db.Column(db.String(256), nullable=False)
    role = db.Column(db.String(20), default='user')  # user, admin, viewer, coach
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    
    # Settings (JSON-serialized)
    theme = db.Column(db.String(20), default='auto')  # auto, light, dark
    completion_chime = db.Column(db.Boolean, default=True)
    dyslexia_font = db.Column(db.Boolean, default=False)
    notification_frequency = db.Column(db.String(20), default='quiet')  # quiet, moderate, alert
    
    tasks = db.relationship('Task', backref='owner', lazy=True)

3.2 Task Model

class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(200), nullable=False)
    description = db.Column(db.Text, nullable=True)
    status = db.Column(db.String(20), default='not_started')  # not_started, in_progress, done
    priority = db.Column(db.String(20), default='normal')     # urgent, important, normal
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    due_date = db.Column(db.DateTime, nullable=True)
    completed_at = db.Column(db.DateTime, nullable=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    
    # ADHD Features
    subtasks = db.relationship('Subtask', backref='parent_task', lazy=True)
    timer_seconds = db.Column(db.Integer, default=0)  # Countdown Timer
    context = db.Column(db.String(100), nullable=True)  # Location/Context-based reminders
    chunk_sessions = db.Column(db.JSON, default=list)    # Time-block sessions ["5min", "5min"]

3.3 Subtask Model

class Subtask(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    completed = db.Column(db.Boolean, default=False)
    task_id = db.Column(db.Integer, db.ForeignKey('task.id'), nullable=False)

4. ADHS-UX/UI Richtlinien (aus ADHD.md abgeleitet)

4.1 Feature 1: Radical Reduction of Visible Items [1]

  • Today View zeigt maximal 7 Items (Working Memory Cap) [1][2]
  • Future-dated Items werden automatisch versteckt (Deferr/Snooze) [1]
  • One Primary Action surfaced at a time in Focus Mode [1]

4.2 Feature 2: Frictionless Capture [1]

  • Voice Input / Quick Add (<3 Sekunden) [1]
  • Unstructured Inbox First, dann Organization [1]
  • Markdown/Text Bulk Import [1]

4.3 Feature 3: Concrete External Time Structures [1]

  • Visual Countdown Timer pro Task [1]
  • Progress Bars für Time Blindness Countermeasure [1]
  • Task Chunking in Time-Blocks (z.B. "3 x 5-min") [1]
  • Context-based Reminders (Location) statt Fixed-Clock Alerts [1]

4.4 Feature 4: Forgiving, Shame-Free Feedback [1]

  • Keine roten Overdue-Warnungen [1]
  • Streak Freeze (Flexible Goals) [1]
  • Immediate Positive Feedback (Animation + Audio Chime) [1]

4.5 Feature 5: Task Decomposition [1]

  • Subtask-System für Step-by-Step Scaffolding [1]
  • Persistent Progress Indicators [1]
  • Sequential Task Lists (nur nächster Schritt) [1]

4.6 Feature 6: Visual Simplicity [1]

  • Minimalist Layout mit Generous White Space [1]
  • Consistent Navigation [1]
  • User-Controlled Notifications (Default: Quiet) [1]
  • System "Reduce Motion" Respekt [1]

4.7 Feature 7: Personalization [1]

  • Theme Toggle (Light/Dark/Auto) [1]
  • Dyslexia-Friendly Font Toggle [1]
  • Customizable Notification Frequency [1]

5. Design-System (CSS Variables)

:root {
    /* Pastel Palette */
    --lavender: #B8A9C9;  /* Primary Actions, Important Tasks */
    --blue: #A8D8EA;      /* Completed Tasks */
    --yellow: #FFEAA7;    /* Urgent Tasks */
    --purple: #D4A5FF;    /* Not Started Tasks */
    --orange: #FFB4A2;    /* In Progress Tasks */
    --beige: #F5F0E8;     /* Background Light */
    --dark-bg: #1E1E24;   /* Background Dark */
    --text-primary: #2D2D3A;
    --text-secondary: #6B6B7B;
    --success: #A8D8EA;
    --warning: #FFEAA7;
    --error: #FFB4A2;     /* Nur für positive Feedback, nie für Overdue */
}

/* ADHD Guidelines: ruhige, gezielte Übergänge statt transition: all */
button,
a,
.task-card {
    transition: color 0.2s ease, background-color 0.2s ease,
                border-color 0.2s ease, transform 0.2s ease;
}

/* Generous White Space */
.task-card {
    padding: 1.5rem;
    margin-bottom: 1rem;
}

/* Accessibility-Best-Practice: Systemeinstellung respektieren */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        scroll-behavior: auto !important;
        transition-duration: 0.01ms !important;
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
    }
}

6. Feature-Phasen & Task-Liste

Phase 1: Core Infrastruktur (Week 1-2)

  • Flask Application Factory mit unabhängiger Blueprint-Registrierung [3]
  • Zentrale, ungebundene Extensions mit init_app() [3]
  • Config-Klassen für Development, Testing und Production sowie Feature Toggles [3]
  • SQLite Database Setup mit SQLAlchemy [3]
  • User Model & Registration/Login Routes [3]
  • Password Hashing mit werkzeug.security [3]
  • Session Cookie Security (HttpOnly, SameSite=Lax) [3]
  • Jinja2 Base Template mit Pastel CSS [2]

Phase 2: Task Management (Week 3-4)

  • Task CRUD Operations (Create, Read, Update, Delete) [3]
  • Task List View mit Today View (Max 7 Items) [1]
  • Status Filter (All, Not Started, In Progress, Done) [2]
  • Priority Badge System (Urgent, Important, Normal) [2]
  • Subtask Decomposition UI [1]
  • Progress Bar Component [1]

Phase 3: ADHD-Specific Features (Week 5-6)

  • Focus Mode (One Primary Action) [1]
  • Countdown Timer per Task [1]
  • Task Chunking UI (Time-Blocks) [1]
  • Context-based Reminders Placeholder [1]
  • Positive Feedback Animation + Completion Chime [1]
  • Forgiving Streak System (No Guilt) [1]

Phase 4: Import/Export & Backup (Week 7)

  • Markdown File Upload & Bulk Task Import [2]
  • JSON Export (Backup) [2]
  • JSON Import (Restore) [2]
  • Clear Completed Tasks (Undoable) [2]

Phase 5: Settings & Personalization (Week 8)

  • Theme Toggle (Light/Dark/Auto) [2]
  • Dyslexia-Friendly Font Toggle [2]
  • Notification Frequency Settings [1]
  • Browser Reminders (Web Push API Placeholder) [2]

Phase 6: Admin Dashboard (Placeholder - Future) [3]

  • Admin Route Placeholder [3]
  • User Management UI (Future) [3]
  • Analytics Dashboard (Future) [3]
  • Role-based Access Control (Admin, User, Viewer, Coach) [3]

Phase 7: Polish & Testing (Week 9-10)

  • Responsive Design Testing [2]
  • Reduce Motion Respekt [1]
  • Accessibility Audit (WCAG) [1]
  • Performance Optimization [3]
  • Documentation & Deployment Guide [3]

7. API Placeholder (Future Integration)

# app/api/v1/
# Separater, versionierter Blueprint für stabile Integrationen
# - /api/v1/tasks (JSON CRUD)
# - /api/v1/users (Admin)
# - /api/v1/analytics (Admin Dashboard)

Web-Routes und API-Routes verwenden dieselbe Service-Schicht, damit Geschäftslogik nicht dupliziert wird. Öffentliche Schnittstellen müssen versioniert, validiert, autorisiert und durch Vertragstests abgesichert sein.


8. Sicherheit & Best Practices

  • Password Hashing: werkzeug.security.generate_password_hash [3]
  • Session Security: HttpOnly, SameSite=Lax Cookies [3]
  • CSRF Protection: Flask-WTF Token [3]
  • Input Validation: Form-/Schema-Validierung an jeder Systemgrenze; SQLAlchemy schützt Datenbankabfragen zusätzlich durch parametrisierte Queries [3]
  • Role-Based Access: Flask-Login @login_required + Role Check [3]
  • Best Practices (verpflichtend): PEP 8, Type Hints für öffentliche Funktionen, kleine Module, klare Verantwortlichkeiten und keine Geschäftslogik in Routes oder Templates
  • Dependency Management: Versionen reproduzierbar festhalten, Updates prüfen und bekannte Schwachstellen vermeiden
  • Tests: Jedes Feature erhält isolierte Unit-Tests und Integrationstests mit einer eigenen Test-App und temporärer Datenbank
  • Migrationen: Schemaänderungen ausschließlich nachvollziehbar über Flask-Migrate/Alembic; keine manuellen Produktionsänderungen
  • Observability: Strukturiertes Logging und zentrale Fehlerbehandlung ohne Secrets oder personenbezogene Daten in Logs
  • Feature Contract: Jedes neue Feature dokumentiert Blueprint, Konfiguration, Berechtigungen, Datenmodell und öffentliche Service-Schnittstellen

9. Zukünftige Erweiterungen

Alle Erweiterungen werden als deaktivierbare Feature-Packages umgesetzt und über die Application Factory registriert. Sie dürfen bestehende Features nur über dokumentierte Schnittstellen verwenden und müssen unabhängig testbar bleiben.

  • Multi-User Collaboration: Shared Tasks, Coach-User Mapping [3]
  • Push Notifications: WebSockets/Celery Background Tasks [3]
  • AI Task Summarization: LLM Integration for Auto-Subtasking [3]
  • Calendar Integration: Google/Outlook Sync [3]
  • Mobile App: React Native Wrapper [3]

10. Referenzen

[1] ADHD.md Wissenschaftliche Grundlagen für ADHS-UX/UI
[2] index.html –现有 HTML Mockup Features
[3] Codex Prompt.md Flask App Architektur


Diese Design-Dokument dient als BluePrint für die Entwicklung der Flask-App. Alle ADHS-UX-Richtlinien sind evidenzbasiert aus peer-reviewed Meta-Analysen und UX-Research für neurodivergente Nutzer.