File size: 4,144 Bytes
c72a1e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# StudyAgent β€” FOR_SMLFLG

## Was ist das?
ADHS-freundlicher Study Buddy: Hilft Studenten mit ADHS durch ihr Semester.
Keine starren Plaene β€” Micro-Steps, Buddy-Ton, Dopamin beim Start statt beim Abschluss.

## Warum
Samuel IS die Zielgruppe. 569 ChatGPT + 232 Claude Sessions dokumentieren das Problem.
Kern-Insight: Dopamin kommt beim Task-BEGINN, nicht beim Complete. Jeder Step = frischer Start.

## Pain Points die das System loest
1. Lernplaene die nie halten β€” elastischer Plan, kein Guilt
2. WIP explodiert β€” max 2 Faecher gleichzeitig (hard enforcement in API)
3. Zeitdruck als Feature β€” Panik-Modus bei <48h
4. Routinedokumentation unmoeglich β€” Micro-Steps (je 5 Min)
5. Session-Memory β€” nie wieder bei Null anfangen

## Architektur & Tech-Stack

```
StudyAgent/
β”œβ”€β”€ main.py          # FastAPI app, alle Routes, htmx-Partials (~516 LOC)
β”œβ”€β”€ agent.py         # MiniMax M2.5 API-Call, Fallback-Steps ohne Key
β”œβ”€β”€ models.py        # SQLAlchemy Models (Subject, Deadline, MicroStep, StudySession)
β”œβ”€β”€ database.py      # SQLite Setup, Session-Maker
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ static/style.css # Warm palette, ADHS-friendly Design
β”œβ”€β”€ templates/
β”‚   β”œβ”€β”€ base.html
β”‚   β”œβ”€β”€ index.html
β”‚   └── partials/    # subject_card, deadline_item, micro_step_card,
β”‚                    # elastic_plan, progress_journey, session_banner
└── study_agent.db   # auto-created
```

**Tech:** Python + FastAPI (async, lifespan) + SQLAlchemy + SQLite + htmx + Jinja2 + MiniMax M2.5 API

## Starten / Nutzen

```bash
cd ~/Projekte/StudyAgent

# Erste Einrichtung
pip install -r requirements.txt
export MINIMAX_API_KEY=your-key-here   # optional β€” ohne Key laufen Fallback-Steps

# Starten
.venv/bin/uvicorn main:app --reload   # oder: uvicorn main:app --reload
# open http://localhost:8000
```

## Was funktioniert (implementiert)

- **Dashboard** (`GET /`) β€” aktive Faecher, naechste Deadlines, naechster Step, Session-Banner, Panik-Indikatoren
- **Faecher CRUD** (`POST/DELETE /subjects`) β€” WIP-Limit 2 wird server-seitig enforced
- **Deadlines anlegen** (`POST /deadlines`) β€” auto-generiert sofort Micro-Steps via MiniMax M2.5
- **Steps abschliessen/ueberspringen** (`POST /steps/{id}/complete|skip`) β€” naechster Step wird inline geladen
- **Elastischer Plan** (`GET /deadlines/{id}/plan`) β€” auto-komprimiert wenn Steps die verbleibende Zeit uebersteigen
- **Replan** (`POST /deadlines/{id}/replan`) β€” loescht pending+skipped, generiert neu
- **Session-Tracking** β€” Sessions werden auto-gestartet, after 30 Min Inaktivitaet auto-geschlossen
- **Panik-Modus** (`is_panic_mode()`) β€” greift bei <48h, reduziert auf 3-4 wesentliche Steps
- **AI-Fallback** β€” ohne `MINIMAX_API_KEY` kommen sinnvolle Dummy-Steps (kein Absturz)

## Was fehlt / bekannte Issues

- `.env` vorhanden (`MINIMAX_API_KEY`), in `.gitignore` geschuetzt. `.env.example` als Vorlage vorhanden.
- Browser-Test-Flow (Subject anlegen β†’ Dashboard β†’ Steps) noch nicht durchgespielt
- `fi_date`-aehnlicher Edge-Case: wenn `due_date` bereits vergangen ist, liefert `is_panic_mode()` `False` statt sinnvollen Zustand
- Kein Deployment-Setup (Fly.io geplant)
- Kein Auth (MVP-bewusste Entscheidung)

## Entscheidungen & Lessons Learned

- **htmx statt React** β€” kein Build-Step, Partials direkt vom Server, funktioniert ohne JS-Framework
- **Buddy-Ton in Code** β€” "Kein Stress, machen wir anders." direkt in Responses, kein separates i18n
- **Dummy-Steps als Fallback** β€” API-Fehler oder fehlender Key darf nie das Feature brechen
- **WIP-Limit server-seitig** β€” nicht nur UI-Warnung, sondern echter `HTTPException`-Block im `POST /subjects`
- **Auto-compress elastisch** β€” 20% Buffer-Formel: wenn `pending * 5min > hours_left * 0.8 * 60` β†’ Replan

## Next Steps (priorisiert)

1. `MINIMAX_API_KEY` in `.env`-File konfigurieren und testen
2. Browser-End-to-End-Test: Subject β†’ Deadline β†’ Steps β†’ Complete/Skip
3. Edge-Case fixen: vergangene Deadlines richtig behandeln
4. Sprint 3: Panik-Modus visuell sichtbar machen (Banner, roten Rahmen)
5. Fly.io Deployment vorbereiten