Uživatelé a Role
MVP Scope (2026-04-22)
Dvě třídy. Digitální třídnice. Seznam žáků s kontakty.
Testovací verze pro Kentaur (4.+5. ročník) a Phenix (6.+7. ročník). Většina učitelů učí v obou → přepínání tříd je první-třídní UX. Cíl: nahradit papírovou třídnici digitální verzí, kterou učitelé budou chtít používat. Data založí vývojář ručně v Supabase — žádné admin UI v MVP.
Učitel (Průvodce)
"Chci učit, ne klikat v aplikaci."
Device: primárně telefon (na hodině), sekundárně desktop (večer příprava). Mobile-first + responsive, ne "roztažený mobil".
Třídnice — denní rutina
| ID | Story | Akceptace | Spec / Status |
|---|---|---|---|
| U-01 | Otevřu app a rovnou jsem v aktuální hodině. | Systém podle času + rozvrhu najde probíhající slot. Pokud učím v obou třídách ve stejném slotu → vybere tu, kam jsem přiřazený. Fallback: nejbližší budoucí hodina dne. V hlavičce je class switcher — kdykoliv přepnu. | _EXAMPLE-morning-attendance · Implemented |
| U-02 | "Kdo chybí?" → tapnu 1-2 jména → hotovo za 5 sekund. | Default: všichni přítomní. Seznam žáků, každý s jedním tapem přepíná P → N → Pozdě → Omluven → P. Žádné 4 tlačítka per řádek. | _EXAMPLE-morning-attendance · Implemented |
| U-03 | Další hodina automaticky přebírá docházku z předchozí. | Slot 2+ zobrazí stav z předchozího slotu. Upravím jen změny (kdo přišel, kdo odešel). | _EXAMPLE-morning-attendance · Implemented |
| U-04 | Přidám téma → přiřadím celému ročníku jedním chipem. | "Přidat téma" → text → chips [4. ročník] [5. ročník] [individuální žák]. Tap na chip = assignment. | — · Ready for /define |
| U-05 | Anička (5. ročník) dneska pracuje s čtvrťáky. | Přiřadím Aničku k tématu 4. ročníku. Žák může být jen u jednoho tématu v jednom slotu. | — · Ready for /define |
| U-06 | Vidím "Nepřiřazení" — žáci, kteří nemají žádné téma. | Safety net: pod seznamem témat je sekce s žáky bez přiřazení. Ideálně prázdná. | — · Backlog |
| U-07 | Na konci dne vidím, které hodiny mám kompletní. | Dnes / týden (desktop): každý slot má dva vizuální indikátory — téma vyplněno, docházka zapsána. Chybějící = prázdné. | — · Backlog |
Evidence žáků (read-only)
| ID | Story | Akceptace | Spec / Status |
|---|---|---|---|
| U-08 | Najdu žáka a vidím jeho kontakt na rodiče. | Seznam žáků → klik na jméno → detail s ročníkem a zákonnými zástupci. Tap na telefon = volá. Tap na email = píše. | — · Implemented (kód) |
Rodič
V MVP nemá přístup do aplikace. Kontakty jsou v evidenci pro učitele.
Po MVP (vrstva roadmapy): 1. Omlouvání nepřítomnosti 2. Odchody a vyzvedávání 3. Feed — co dítě dělalo ve škole
Role v systému
| Role (DB enum) | Kdo | MVP | Budoucnost |
|---|---|---|---|
teacher |
Průvodce / třídní učitel | Aktivní | + příprava, voice, tracking kompetencí |
parent |
Zákonný zástupce | — (jen kontakt v evidenci) | Omlouvání, odchody, feed |
director |
Ředitel | — (data zakládá vývojář) | Admin UI, statistiky, schvalování |
office |
Kancelář | — | Evidence, exporty, ŠkolaOnline sync |
pending |
Nový uživatel | Čekací obrazovka | Onboarding flow |
Roadmap vrstev (po MVP, v pořadí priority)
Těsně po MVP ("velmi brzy")
- Příprava na hodinu — učitel si dopředu zadá plán témat per ročník; na hodině se předvyplní
- Audio debrief — hlasové poznámky (učitel mluví k dětem → AI rozpozná přiřazení témat; reflexe po hodině)
- Mimořádné dny — "Celá škola do lesa" = override napříč třídami, jedna celodenní docházka místo per-slot
- Zastupování — převzetí hodiny jiného učitele
- Družina — společná pro obě třídy, jednodušší UX (jen docházka)
Později
- Omlouvání rodiči → auto "O" v docházce
- Odchody a vyzvedávání
- Feed pro rodiče
- Tracking kompetencí / progress žáka
- MŠMT export, OpenAPI, MCP wrapper, AI integrace
Data setup pro testování
Vývojář založí ručně v Supabase (ne admin UI, ne seed v gitu):
- 2 třídy: Kentaur (4.+5.), Phenix (6.+7.)
- ~24 žáků s přiřazením do třídy a ročníkem
- Rozvrh (den × slot → předmět × třída)
- Učitelé přiřazení k třídám přes
class_staff - Zákonní zástupci s kontakty (email, telefon, vztah)
Učitelé se přihlásí přes Google OAuth. Propojení auth.users → profiles přes email.
Living document. Stories se rozšiřují s každou vrstvou roadmapy.