Table of Contents
Kosmo: Digitální Ekosystém Sofie
Tato dokumentace popisuje kompletní digitální strategii a softwarový stack pro ZŠ a MŠ Sofie. Nejedná se jen o popis jedné aplikace, ale o celkový pohled na IT infrastrukturu školy.
Co je součástí ekosystému?
- Aplikace Kosmo (Custom Vývoj):
- Portál pro rodiče (docházka, evidence, omluvenky).
- Interní nástroje pro učitele.
- Marketing & Web (Web/Marketing):
- Veřejná prezentace (Web, Blog).
- CRM pro zájemce (HubSpot).
- Back Office (SaaS):
- Řízení týmu (Asana + Google Chat).
- Ekonomika (Pohoda).
- Matrika (ŠkolaOnline).
Aplikace Kosmo (Core)
Kosmo je srdcem ekosystému. Je to "lepidlo", které spojuje data a lidi. Cílem projektu je vytvořit moderní, bezpečnou a AI-powered aplikaci, která sjednotí komunikaci, evidenci a procesy v Montessori škole Sofie (MŠ + ZŠ).
Klíčové vlastnosti
- Feed: Rodič otevře appku a vidí, co dítě dnes dělalo — fotky, aktivity, docházka. Jako Instagram školy. Včetně přehledu zítřka.
- AI Concierge (Sofie): Chatbot, který odbavuje dotazy rodičů 24/7 a eskaluje na učitele jen to důležité.
- Evidence: Digitalizace prací žáka — fotka → AI štítek → v feedu rodiče.
- Bezpečnost: Google Auth, Apple Auth, Magic Links, Safety Gate pro vyzvedávání.
Rychlý start
Pro vývojáře:
1. Nainstalujte závislosti: pnpm install
2. Spusťte lokální server: pnpm dev
Pro čtenáře dokumentace: - Začněte sekcí Kontext a Vize.
Kontext a Požadavky (CONTEXT.md)
Tento dokument slouží k zachycení kontextu a požadavků pro aplikaci Kosmo. Bude postupně doplňován na základě informací od uživatele.
Vize Školy Sofie
- Typ: Malá soukromá Montessori škola a školka (MŠ, ZŠ 1. stupeň + přechod na 2. stupeň, aktuálně po 7. třídu).
- MŠ: Školka běží na Twigsee (externí systém). MVP Kosmo řeší pouze ZŠ.
- Motto: "V dítěti leží osud budoucnosti."
- Filozofie:
- Montessori pedagogika (věkově smíšené třídy, "pomoz mi, abych to dokázal sám").
- CLIL: Výuka angličtiny integrovaná do předmětů (TV, Matematika, Kosmická výchova).
- Důraz na klíčové kompetence (k učení, řešení problémů, komunikativní, sociální, digitální).
- Nezvoví, flexibilní hodiny, slovní hodnocení, absence soutěžení.
Problém k řešení
- Komunikační propast: Rodiče se cítí v "vzduchoprázdnu". Nerozumí, co děti dělají (integrovaná výuka, žádné známky, děti "neví/neřeknou").
- Řešení: Feed — rodič vidí fotky a aktivity dítěte v reálném čase, před vyzvednutím už ví, na co se zeptat.
- Přetížení školy: Komunikace je zmatená, na poslední chvíli.
- Řešení: AI Concierge (Sofie) odbaví rutinu, učitel se soustředí na učení.
- Administrativa: Učitelé jsou zavaleni, systémy spolu nemluví.
AI First Vize & Kosmo
- Cíl: Stát se "AI first" školou.
- Kosmo "Sokratův průvodce": Budoucí vize osobního AI průvodce pro každého žáka (ve škole i mimo ni). Reaguje na zájmy žáka (fotky, projekty).
-
Role aplikace: "Centrální mozek", který propojuje evidence, komunikaci a plány.
-
Ekosystém: Microsoft 365 Education (přechod na Google Workspace).
- Specializované systémy:
- ŠkolaOnline: Výkaznictví pro MŠMT.
- Pohoda: Účetnictví.
- strava.cz: Školní jídelna.
- Transparent Classroom: Testováno, ale nevyhovuje.
- Ostatní: Excel (evidence žáků), Outlook, Word. Data na OneDrive/SharePoint.
Přechod na Google Workspace + AI
- Přechod na Google Workspace: Škola migruje z Microsoft 365 na Google (Gmail, Drive, Calendar).
- Doménová Tříštění: Aktuálně existují
zs-sofie.czams-sofie.cz. Někteří učitelé učí na obou stupních, některé rodiny mají děti v MŠ i ZŠ.- Cíl: Sjednotit identitu pod jednu střechu
sofie.education. Kosmo poběží na této doméně.
- Cíl: Sjednotit identitu pod jednu střechu
- Informační vakuum: Rodiče neví, co se ve škole děje ("Dítě řekne, že bylo ve škole 'dobrý', a to je vše").
- Cíl: Kompletní přechod na Google Workspace Education.
- Integrace AI: Maximální využití Gemini AI pro automatizaci a generování obsahu (zprávy, metodické listy).
- Vlastní vývoj: Uživatel (správce repo) má expertní znalost Pythonu a matematiky -> vývoj vlastní aplikace "Kosmo".
Role a Uživatelé (USERS.md)
Tento dokument definuje role uživatelů a jejich specifické potřeby v rámci aplikace Kosmo.
Role
Ředitel
- Potřeby: Přehled o chodu školy, efektivní administrativa, snadný přístup k datům pro rozhodování.
Administrativa
- Potřeby: Automatizace rutinních úloh, správa žáků a zaměstnanců, integrace s externími systémy (ŠkolaOnline, Pohoda).
Učitelé (Průvodci)
- Potřeby:
- Snadná evidence prací a pokroků žáků (digitalizace).
- Automatizovaná příprava metodických listů.
- Jednoduchá komunikace s rodiči (generování zpráv o aktivitách a kompetencích).
- Minimalizace administrativy ("Kliknout a hotovo").
Rodina (Zástupci dítěte)
- Koncept: Rodič, prarodič, chůva. Může jich být libovolný počet.
- Role Overlap: Rodič může být zároveň učitel nebo ředitel (aplikace musí zvládnout více rolí u jednoho uživatele).
- Přepínání rolí: Uživatel s více rolemi musí mít v aplikaci možnost přepínat kontext (např. "Přepnout na: Rodič Aničky" ↔ "Přepnout na: Učitel"). Domovská obrazovka (Feed/Dashboard) a funkce se mění podle aktivní role.
- Potřeby:
- Pravidelné a srozumitelné informace o dětech.
- Docházka a Vyzvedávání: Nastavení časů odchodů (pravidelné i mimořádné), správa osob oprávněných vyzvedávat.
- Omluvenky: Snadné omlouvání absence přímo v aplikaci.
- Přístup k hodnocení a plánům.
Děti (Žáci MŠ - 7. třída)
- Role:
- Běžný žák: Vidí své plány, nahrává práce (starší žáci), komunikuje s průvodcem.
- Služba (Dítě): Digitalizuje práce celé třídy (focení, skenování) pro učitele.
- Potřeby:
- Extrémně jednoduché UI (zejména pro mladší děti).
- Sokratův průvodce (Vize): AI společník, který pomáhá s učením, reaguje na fotky/zájmy i mimo školu.
- Bezpečné prostředí (schválení rodiči).
Požadavky (REQUIREMENTS.md)
Tento dokument obsahuje funkční a nefunkční požadavky na aplikaci Kosmo.
[!IMPORTANT] MVP scope: Pouze ZŠ (1.-7. třída). MŠ bude řešena v pozdější fázi — jiný workflow, jiné kompetence, jiný denní souhrn.
Funkční požadavky
1. Komunikace s Rodiči (AI Concierge) - PRIORITA Č. 1
- Cíl: "Odbavit" rodiče okamžitě (24/7), nezatěžovat učitele rutinou.
- Koncept "AI Podatelna":
- Rodič komunikuje s chatbotem "Sofie".
- Sofie má kontext: zná rozvrh, jídelníček, akce, manuály.
- Triage (Třídění):
- Okamžitá odpověď: "Co má mít na školu v přírodě?" -> Sofie pošle seznam (RAG).
- Akce: "Omlouvám Aničku." -> Sofie zapíše do DB a notifikuje učitele.
- Eskalace: "Máme problém..." -> Sofie vytvoří Ticket a předá ho řediteli/učiteli.
- Hlasový vstup (Voice Mode):
- Rodič může zprávu rovnou namluvit (na mobilu podrží tlačítko).
- "Sofie, omluv Aničku na zítra, má kašel." -> AI zpracuje audio přímo.
- Funkce:
- Automatické pravidelné zprávy: Co se děti učily (generováno z Evidence, zobrazeno ve Feedu).
- Kalendář a Připomínky: Automatické notifikace.
2. Evidence a Hodnocení Žáků (PRIORITA Č. 2)
- Cíl: Digitalizace prací s minimálním úsilím.
- Funkce:
- Role "Služba": Dítě nebo učitel rychle nafotí/naskenuje práce celé třídy.
- Individuální nahrávání: Žák (starší) si nahrává své projekty.
- API First: Evidence musí jít vytvořit strojově (např. AI agentem z emailu, z n8n).
- Use Case: Učitel pošle fotku na
evidence@sofie.education-> AI vytvoří draft, oštítkuje a připraví ke schválení.
- Use Case: Učitel pošle fotku na
- Štítkování: Vazba na kompetence a předměty (ideálně automatizovaně pomocí AI).
- Dopad: Každá naevidovaná práce se automaticky objeví ve Feedu rodiče.
3. Integrace se ŠkolaOnline (PRIORITA Č. 3)
- Cíl: Odlehčení administrativy (jedna pravda o žácích).
- Funkce:
- Synchronizace databází žáků a rodičů.
- Přenášení absencí/kompetencí (pokud relevantní).
4. Docházka a Vyzvedávání (AI Action)
- Cíl: Bezpečnost dětí a přehled pro školu.
- Funkce (Chat Interface):
- Vyzvedávání: "Dnes vyzvedne babička." -> Sofie to založí a dá vědět učiteli.
- Bezpečnostní Pojistka (Safety Gate):
- AI nikdy neprovede akci "tiše".
- Vždy vrátí Potvrzovací kartu: "Chápu správně, že dnes (9.2.) vyzvedne Aničku paní Marie Nováková?"
- Rodič musí kliknout na [✅ Potvrzuji a přebírám odpovědnost].
- Teprve poté se vytvoří záznam.
- Omluvenky: "Anička je nemocná." -> Sofie se doptá na detaily (od-do) a vytvoří omluvenku.
- Validace: Učitel na tabletu vidí "Dnes: Babička Nováková (tel: 777...)" a jen potvrdí předání.
- Zjednodušení: Není třeba spravovat "seznam oprávněných osob" v DB rodičem složitě. Rodič to napíše do chatu, AI to vytáhne.
- Družina (Odpolední provoz):
- Rodič ve feedu vidí: "Anička je v družině. Plánovaný odchod: 15:30."
- Vyzvedávání z družiny = stejný Safety Gate jako ze školy.
- Vychovatel/ka družiny zadává docházku a aktivity (jako učitel).
- Kroužky:
- Rozvrh kroužků v kalendáři (úterý šachy 14:00-15:00).
- Přihlašování na kroužky (anketa / formulář).
- Notifikace při zrušení kroužku: "Kroužek šachů ZRUŠEN — nemoc lektora."
- Feed item: "Anička dnes na kroužku šachů."
5. Ankety a Sběr Dat (Interaktivní Chat)
- Cíl: Rychlé rozhodování.
- Funkce:
- Rychlé otázky: Sofie se v chatu zeptá: "Máte zájem o kroužek šachů?"
- Odpověď: Rodič klikne na vygenerovaná tlačítka (Ano / Ne / Více info).
- Výhoda: Vypadá to jako konverzace, ne jako "úřední deska".
- Dashboard: Ředitel vidí graf výsledků hned.
6. Sokratův Průvodce (VIZE - BUDOUCNOST)
-
Cíl: Osobní AI průvodce pro každého žáka.
-
Funkce:
- Pomoc s učením ve škole i doma.
- Reakce na fotky a zájmy žáka ("Vyfotil jsem brouka" -> AI navrhne projekt).
- Bezpečné prostředí (moderováno, schváleno rodiči).
7. Podpora Rodičů (VIZE - FÁZE 3)
- Cíl: Pomoci rodičům rozvíjet dítě doma v souladu se školou.
- Funkce:
- Tipy na aktivity: "Ve škole probíráme zlomky, zkuste doma krájet pizzu."
- Knihovna materiálů: Odkazy na Montessori pomůcky/literaturu.
8. Export Dat (Excellence)
- Cíl: Podpora administrativy a reportingu.
- Funkce:
- Export do Excelu: Tlačítko "Stáhnout .xlsx" u všech tabulek (Seznam žáků, Docházka, Ankety).
- Export do Google Sheets: Tlačítko "Otevřít v Google Sheets" (vytvoří nový list na Drive).
- Export do PDF: Tlačítko "Stáhnout PDF" u všech tabulek (Seznam žáků, Docházka, Ankety).
- Export do CSV: Tlačítko "Stáhnout CSV" u všech tabulek (Seznam žáků, Docházka, Ankety). Pokud je relevantní, tak formát pro ŠkolaOnline.
- Struktura: Čitelná pro člověka i stroje (žádné sloučené buňky).
9. Marketing a Komunikace (Blog & Newsletter) — FÁZE 2
- Status: Odloženo. MVP focus = Chat + Evidence + Docházka. Blog řeší WordPress.
10. Generování Metodických Listů (VIZE - FÁZE 2)
- Status: Zatím neřešit, priorita je komunikace.
- Cíl: Automatizovat přípravu podkladů pro učitele.
11. Integrace
- Viz dedikovaný dokument: Integrace (Pohoda, ŠkolaOnline, Google, Strava.cz, CLIL).
12. Notifikace a Upozornění
- Cíl: Dostatečně informovat, ale neobtěžovat ("Signal, not Noise").
- Kanály:
- Email: Pro kritické věci (Faktura, Reset hesla, Urgentní zpráva ředitele).
- Push Notifikace: Pro web/mobil (Nový příspěvek v evidenci, Zpráva v chatu).
- Nastavení: Uživatel si může vybrat, co chce dostávat (např. vypnout upozornění na obědy).
13. Souhrn (Killer Feature ⭐)
- Cíl: "Proč si nainstalujete appku? Protože pokaždé, když ji otevřete, víte, co se děje."
- Dopad: Souhrn je pinnutá karta v Feedu — hlavní důvod otevřít appku.
- Adaptivní souhrn ("Od poslední návštěvy"):
- Systém trackuje
last_seen_atpro každého rodiče. - Při otevření appky AI vygeneruje souhrn za období od poslední návštěvy:
- < 4 hodiny: "Právě probíhá: Matematika — zlomky 🍎. Od rána: ✅ dorazila 8:05, 📸 1 nová fotka."
- 1 den: "Včera: 📸 2 nové práce, oběd č. 2, odchod 15:30."
- 1 týden: "Minulý týden: 📸 5 prací, docházka 100 %, výlet na Šumavu (fotky)."
- 3+ týdny: "Za 3 týdny: 📸 12 prací, 3 omluvenky, docházka 92 %." → po týdnech → dnech → detail.
- Zero config — rodič nemusí nic nastavovat, vše automaticky.
- Systém trackuje
- Push re-engagement: Pokud se rodič nepřihlásí 3+ dny → "Anička měla zajímavý týden — mrkněte se! 📸"
- 🔮 Přehled zítřka: Každý den od ~14:00 karta s rozvrhem, obědem, kroužky + zvýrazněné výjimky. Viz Rozhodnutí (Feed).
- Drill-down navigace (ve 2 osách):
- Časová: Souhrn → Týden → Den → Detail (granularita dle období).
- Tematická: Souhrn → Detail kategorie (Fotky / Evidence / Docházka / Komunikace).
- Pro ředitele: "Dnes chyběli 3 žáci, Sofie odbavila 15 dotazů, 2 tickety čekají."
- Generováno AI: Sofie automaticky sestaví z dat v DB (evidence, docházka, tickety).
- Personalizovaný styl (nastavitelný rodičem):
- Příběh: "Anička dnes pracovala na projektu o vesmíru. S kamarádkou Eliškou vytvořily plakát..." (narativní, emoční).
- Odrážky: "• Matematika: zlomky. • Čtení: 20 min. • Oběd: č. 2. • Odchod: 15:30." (strohé, faktické).
- AI si pamatuje preferenci a generuje souhrn v odpovídajícím tónu.
Nefunkční požadavky
- UX/UI: Maximální jednoduchost ("Apple-like"). Učitel nesmí trávit čas klikáním.
- AI: Využití Gemini API.
- Dostupnost: Webová aplikace (responzivní pro mobily/tablety).
- Bezpečnost: Ochrana osobních údajů dětí (GDPR). Data musí být uložena v EU (Supabase Frankfurt).
- IVP: Individuální vzdělávací plány se ukládají jako
work_item(source: 'ivp') + soubory v Supabase Storage. Separátní tabulku řešit až bude jasný workflow. - Fallback (odpůrci appky): Rodič, který odmítá technologii → telefonát kanceláři, učitel zadá za rodiče. Kritické akce (omluvenky, vyzvedávání) musí jít přes appku — škola toto definuje jako minimum.
Měřitelné cíle (KPI)
Adopce
- 80 % rodičů s aktivním účtem do 1 měsíce od spuštění.
- 90 % omluvenek zadáno přes appku do 3 měsíců.
Efektivita AI
- 70 %+ dotazů odbaveno Sofií bez eskalace.
- Snížení emailů řediteli o 50 % do 6 měsíců.
Spokojenost
- Pravidelný sběr zpětné vazby od rodičů (kvartálně):
- "Co vás trápí? Co byste chtěli zlepšit? Jak hodnotíte? Co se vám líbí?"
- Realizováno přes ankety v appce (Sofie se zeptá).
- Dashboard pro ředitele: Vyhodnocení spokojenosti v čase (trendy, grafy).
Onboarding (Jak se rodič dostane do aplikace)
Flow
-
Zápis / Přijetí dítěte
- Rodič přijde osobně do kanceláře.
- Ředitel ověří totožnost (OP) a zapíše email rodiče do systému.
- → Profil je
is_identity_verified: trueod prvního dne.
-
První přihlášení
- Rodič obdrží email: "Vítejte v Sofii! Přihlaste se zde."
- Přihlásí se přes Google / Apple / Magic Link (je jedno jakou metodou, email je klíč).
- Supabase Auth automaticky propojí
auth.userssprofilespřes email.
-
Guided Tour (přes Chatbota)
- Po prvním přihlášení se otevře chat se Sofií: "Ahoj! Jsem Sofie, vaše digitální asistentka. Pomohu vám zorientovat se — nejen v aplikaci, ale i v tom, jak naše škola funguje. Můžete se mě zeptat na cokoliv!"
- Sofie provede rodiče klíčovými věcmi:
- Jak funguje Montessori (stručně, pro nové rodiče).
- Jak omluvit dítě.
- Jak nastavit notifikace a styl souhrnu.
- Co je k obědu.
- Jazyk: Tour probíhá v jazyce rodiče (
preferred_languagez profilu). Expati = anglicky.
Otevřené otázky (TODO)
- [ ] Kdy přesně zadat žáka do systému? Při podání přihlášky (Lead v HubSpotu) nebo až po přijetí (profil v Kosmu)? Řešit s ředitelem.
- [ ] Hromadný import: Pro stávající rodiče (cca 100+) — importovat z ŠkolaOnline CSV?
Předpoklady
- Každý rodič má smartphone (Android/iOS).
- Každý rodič má email.
- Magic Link pokrývá i rodiče bez Google/Apple účtu.
Pohled Uživatelů (Požadavky podle rolí)
Tento dokument zachycuje wish-list z pohledu každé role. Nejde o finální scope — jde o to, aby nám neunikly důležité potřeby. Body označené ⭐ jsou kandidáti na MVP.
👨👩👧 Rodič
"Chci vědět, co se děje ve škole, a nechci kvůli tomu nikomu volat."
| # | Požadavek | Popis | Status |
|---|---|---|---|
| R1 | ⭐ Galerie dítěte / Feed | Časová osa prací a fotek — to, co ukážu babičce. Viz Rozhodnutí (Feed). | Zdokumentováno |
| R2 | ⭐ Víc dětí najednou | Mám Aničku i Tomáše. Souhrn chci za obě děti, ne se přepínat. Seskupený přehled. | K řešení |
| R3 | ⭐ Kalendář akcí | Třídní schůzky, výlety, prázdniny — na jednom místě. Export do Google Calendar (.ics). |
K řešení |
| R4 | ⭐ Přehled plateb | "Zaplatil jsem školné?" — rodič vidí stav ve feedu (💳). I informativně před Pohoda integrací. | Fáze 2 |
| R5 | Profily učitelů | Fotka, jméno, co učí. Důležité pro nové rodiče a expaty. | K řešení |
| R6 | ⭐ Urgentní notifikace | Úraz/incident = HNED (push + možná SMS). Rozlišit urgentní vs. běžné. | K řešení |
| R7 | Co na zítra? | "Sofie, co má Anička zítra mít?" — AI z rozvrhu/plánu. | Nice-to-have |
| R8 | Přehled absencí | "Letos chyběla 5 dní (3 omluvené)." — Graf, ne hledání v historii. | K řešení |
| R9 | Přímá zpráva učiteli | Někdy nechci Sofii, chci napsat přímo třídní. Přes Sofii jako prostředníka? | K řešení |
| R10 | ⭐ Consent management | "Souhlasíte s výletem?" — tlačítko místo papíru. S audit_log. |
K řešení |
| R11 | Appka nesmí ztichnout | Pokud po týdnu nejsou fotky/souhrny, rodič ztratí důvěru → riziková mitigace. | Viz Instrukce pro AI #10 |
🎓 Ředitel
"Chci mít přehled o škole, ne trávit den odpovídáním na emaily."
| # | Požadavek | Popis | Status |
|---|---|---|---|
| D1 | ⭐ Dashboard školy | Kolik žáků dnes chybí, kolik ticketů čeká, kolik omluvenek přišlo — vše na jedné obrazovce. | K řešení |
| D2 | ⭐ FAQ schvalování | Sofie předpřipraví odpověď, ředitel schválí → FAQ. (Viz Rozhodnutí (Knowledge Base)) | Zdokumentováno |
| D3 | Statistiky AI | Kolik dotazů Sofie odbavila sama vs. eskalovala? Trend v čase. Vidím ROI. | K řešení |
| D4 | Přehled učitelů | Kdo eviduje pravidelně? Kdo ne? (Jemně — ne "big brother", ale podpora.) | K řešení |
| D5 | ⭐ Hromadné zprávy | "Oznámení pro všechny rodiče ZŠ" — ne email, ale přes Sofii (s push notifikací). | K řešení |
| D6 | Inspekce-ready výstupy | ŠVP plnění, docházka, IVP — export pro Českou školní inspekci. | Fáze 2 |
| D7 | Spokojenost rodičů | Kvartální anketa + trend graf. (Viz Požadavky — KPI sekce) | Zdokumentováno |
| D8 | Schvalování consent | Hromadné souhlasy (výlet, fotky) — přehled kdo podepsal / kdo ne. | K řešení |
| D9 | ⭐ Přehled plateb | Kdo nezaplatil školné — přehled splatností, upomínky, notifikace kanceláři. Dashboard: "3 rodiče po splatnosti, celkem 25 500 Kč." | Fáze 2 (Pohoda) |
| D10 | Plánování kapacit | Kolik žáků mám, kolik přihlášek? Pipeline z HubSpotu. | Fáze 2 |
🗂️ Administrativa (Kancelář)
"Chci, aby se věci dělaly samy, a ne abych je přepisovala z jednoho systému do druhého."
| # | Požadavek | Popis | Status |
|---|---|---|---|
| A1 | ⭐ Správa profilů | Přidání rodiče, přiřazení k dítěti, ověření identity. Bulk import z CSV. | K řešení |
| A2 | ⭐ Export do ŠkolaOnline | Omluvenky, docházka — aby se nemusely přepisovat. | Zdokumentováno |
| A3 | ⭐ Knowledge Base správa | Nahrávání dokumentů na Google Drive do správné složky. Jasný návod. | Zdokumentováno |
| A4 | ⭐ Fakturace a platby | Generování faktur za školné → XML do Pohody. Přehled: kdo zaplatil, kdo ne, automatické upomínky. Rodič vidí stav ve Feedu (💳). | Fáze 2 |
| A5 | Kontaktní údaje | Přehled všech rodičů s kontakty. Hromadný export. | K řešení |
| A6 | Nástěnka kanceláře | Co dnes potřebuji udělat? Neschválené omluvenky, nepodepsané souhlasy. | K řešení |
| A7 | Šablony dokumentů | Potvrzení o docházce, výpis z evidence — generované z dat v systému. | Fáze 2 |
| A8 | Správa školního roku | Nový rok = nové třídy, přeřazení žáků, archivace starého roku. | K řešení |
👩🏫 Učitel
"Chci učit, ne klikat v aplikaci."
| # | Požadavek | Popis | Status |
|---|---|---|---|
| U1 | ⭐ Fotka → hotovo | Vyfotím práci → AI oštítkuje → publikuji. Max 3 kliknutí. | Zdokumentováno |
| U2 | ⭐ Docházka jedním tapem | Ráno: seznam žáků, tapnu kdo chybí. Hotovo za 30 sekund. | K řešení |
| U3 | ⭐ Přehled ticketů | Sofie mi přeposlala dotaz od rodiče — vidím ho, odpovím, zavřu. | Zdokumentováno |
| U4 | Plánování výuky | Co budu učit tento týden? Vazba na ŠVP/kompetence. | Fáze 2+ |
| U5 | Hromadné hodnocení | Slovní hodnocení pro celou třídu — AI navrhne draft z evidence, učitel upraví. | Fáze 2 |
| U6 | Offline fotky | Na výletě fotím bez signálu. Nahraje se později. (PWA Service Worker) | Zdokumentováno |
| U7 | Přehled třídy | Kdo dnes chybí, kdo má IVP, kdo odchází dříve — na jedné obrazovce. | K řešení |
| U8 | Zpráva rodičům třídy | "Zítra potřebujeme gumáky" — hromadně, přes Sofii, s potvrzením přečtení. | K řešení |
| U9 | Tablet mód | Učitel používá tablet ve třídě. UI musí být touch-friendly, velké tlačítka. | K řešení |
| U10 | Služba žáků | Žák-služba fotí práce spolužáků. Učitel jen potvrdí. Musí být jednoduché i pro dítě. | Zdokumentováno |
👧 Dítě / Žák (starší, 4.-7. třída)
"Chci vidět svoje věci a nechci, aby to bylo nudné."
| # | Požadavek | Popis | Status |
|---|---|---|---|
| Z1 | Moje portfolio | Všechny moje práce na jednom místě — jako Instagram pro školu. Vidím svůj pokrok. | K řešení |
| Z2 | Nahrávání prací | Starší žák si sám nahraje projekt (fotka, text, video?). | Zdokumentováno |
| Z3 | Sokratův průvodce | AI kamarád — "Vyfotil jsem brouka" → AI navrhne projekt. (VIZE) | Zdokumentováno |
| Z4 | Gamifikace? | Odznaky, streaky, úrovně? Kontroverzní v Montessori, ale motivační. Diskutovat. | Otevřená otázka |
| Z5 | Bezpečnost | Dítě nemůže chatovat s kýmkoliv. Vše moderováno. Rodič povoluje přístup. | K řešení |
| Z6 | Jednoduchý login | Dítě nemá email. QR kód? PIN? Školní Google účet? | K řešení |
| Z7 | Co mám dnes? | Rozvrh dne — co budu dělat, co potřebuji. | Nice-to-have |
| Z8 | Zpětná vazba | Učitel napíše komentář k práci — žák ho vidí. Motivace. | K řešení |
[!NOTE] Tento dokument je living document. Body se budou přesouvat do Požadavky (a případně do Datový Model) jakmile budou schváleny pro konkrétní fázi.
Architektura
Architektura Aplikace Kosmo
Tento dokument popisuje navrhovaný technologický stack a high-level architekturu aplikace.
Technologický Stack: "Vibe Stack"
Zvolili jsme moderní, flexibilní stack zaměřený na rychlost vývoje, skvělé UX a snadnou škálovatelnost.
Frontend & Backend (Next.js)
- Framework: Next.js 14+ (App Router)
- Důvod: Průmyslový standard, React server components, skvělý routing. Umožňuje psát backend (API routes) přímo v projektu.
- Jazyk: TypeScript
- Důvod: Typová bezpečnost, autocomplete, prevence chyb.
- UI/Styling: Tailwind CSS + Shadcn/ui + Framer Motion
- Důvod: Umožňuje vytvořit prémiový "Apple-like" design s animacemi.
- PWA (Progressive Web App):
- Funkce: Možnost "Nainstalovat na plochu" na iOS/Android.
- Notifikace: Web Push API (přes Service Workers) pro nativní notifikace na mobilu i PC.
- Offline: Service Worker + IndexedDB queue pro práci bez signálu (fotky, docházka). Data se synchronizují při obnovení spojení.
- i18n (Dvojjazyčnost):
next-intl— CZ/EN od začátku (bilingvální třídy, expat rodiče). - Hosting: Vercel (optimální pro Next.js).
- Package Manager: pnpm
- Důvod: Rychlost (podobně jako
uvv Pythonu), efektivní správa disku, "industry standard" pro moderní web development.
- Důvod: Rychlost (podobně jako
Data & Auth (Supabase)
- Databáze: PostgreSQL (Managed via Supabase)
- Region: EU Central (Frankfurt) - Nutnost pro GDPR.
- Důvod: Relační data (žáci, třídy), ale s jednoduchým API. Podpora vektorového vyhledávání (pgvector) pro AI.
- Auth: Supabase Auth (Bezpečné přihlašování bez hesel)
- Google OAuth:
- Pro koho: Učitelé (školní účty), rodiče s Androidem / Google účtem.
- Flow: Kliknu na "Přihlásit přes Google" -> Vyberu účet -> Jsem tam.
- Apple Sign In:
- Pro koho: Rodiče s iPhonem (vyžadováno Apple pro App Store).
- Flow: FaceID/TouchID -> Jsem tam.
- Magic Link (Email):
- Pro koho: Všichni ostatní (Seznam.cz, Centrum.cz).
- Flow: Zadáte email -> Přijde vám jednorázový odkaz -> Kliknete -> Jste tam.
- Výhoda: Nikdo si nemusí pamatovat další heslo. Bezpečnější než "heslo123".
- Row Level Security (RLS): Zabezpečení dat přímo v DB (např. "Rodič vidí jen své dítě").
- Ověření Identity (Strategie):
- BankID: Pro MVP zamítnuto (cena/složitost).
- Trusted Device: Fyzické ověření rodiče ve škole (admin potvrdí
is_identity_verified). Následná přihlášení (Google/Apple) jsou považována za důvěryhodná. Kritické akce vyžadují "re-confirmation" v UI.
- Google OAuth:
- Storage: Supabase Storage
- Důvod: Ukládání fotek prací a dokumentů.
- Realtime: Supabase Realtime
- Důvod: Okamžité notifikace pro rodiče (chat, nové zprávy).
AI & Python (Special Agents)
- Hlavní AI: Gemini API (volané z Next.js přes Vercel AI SDK).
- Multimodalita: Gemini umí zpracovat Audio a Obrázky přímo.
- Voice Input: Rodič nahraje vzkaz -> Gemini dostane audio blob -> vrátí text a JSON akci (
{ "action": "excuse_student", "date": "tomorrow" }).
- Specializované úlohy: Python Scripts / Microservice
- Pohoda: XML import/export (mServer).
- ŠkolaOnline: Jednosměrná synchronizace (Master data).
- Důvod: Využití expertní znalosti uživatele v Pythonu a matematice pro složitější analýzy, generování metodik nebo Sokratova průvodce.
- Tooling: uv
- Důvod: Rychlý Python package manager, user choice.
- Integrace: Může běžet jako Supabase Edge Function (Python support in beta) nebo samostatná služba na Modal/Railway.
Marketingový Stack (FÁZE 2)
- Blog: Next.js + MDX (odloženo — MVP řeší WordPress).
- Newsletter: HubSpot Marketing Hub (Free).
- Důvod: Integrace s CRM (Leads), kvalitní editor, GDPR compliance.
Hlavní Moduly (Aplikace)
1. app/(platform)
- Hlavní aplikace pro přihlášené uživatele.
- Rodič: Feed (scrollovací přehled dětí). Sofie chatbot jako FAB overlay.
- Ředitel/Učitel: Dashboard s přehledy a akcemi.
2. app/api
- Backend endpointy pro specifickou logiku, kterou nevyřeší přímé volání Supabase.
- Evidence Ingestion (
/api/evidence/ingest):- Endpoint pro AI agenty a externí nástroje (Make/n8n).
- Přijímá data (např. parsovaný email), ukládá
work_itemjako Draft.
3. structure (Organizace školy)
- Třídy (Triády), Ročníky, Uživatelé.
- Správa rolí a vazeb (Kdo koho učí, kdo je čí rodič).
4. evidence (Srdce systému)
- WorkItems: Evidence prací žáků (úkoly, projekty, testy).
- Hodnocení: Známky, slovní hodnocení, kompetence.
- AI Analýza: Automatické štítkování a návrhy hodnocení.
5. attendance (AI Action)
- Docházka: Validace příchodů/odchodů.
- Vyzvedávání: Chat-based správa ("Dnes vyzvedne babička").
- Omluvenky: Konverzační zadávání omluvenek.
6. surveys (Interaktivní Chat)
- Sběr Dat: "Chatové tlačítka" místo dlouhých formulářů.
- Vyhodnocení: Real-time grafy pro vedení.
7. communication (AI Concierge)
- Sofie Bot: Hlavní rozhraní pro rodiče.
- Funkce: RAG nad daty žáka (Evidence, Docházka) + Knowledge Base školy (ŠVP, Řády).
- Ticket System:
- Pokud AI nevyřeší dotaz, vytvoří "Ticket".
- Routing: AI rozhodne, komu ticket přidělit (Třídní učitel / Jídelna / Ředitel).
- Safety Check: Citlivé akce (Vyzvedávání, Zdraví) vyžadují expliciní potvrzení uživatele (Confirmation UI). AI pouze předpřipraví data, člověk je schválí.
- Email Sender: Notifikace o vyřešení ticketu nebo nové zprávě ze školy.
8. integrations & Externí Nástroje
- CRM: HubSpot (Free):
- Google Integrace: Gmail Extension (logování emailů), Google Calendar Sync (schůzky).
- Evidence Leadů a Rodičů.
- Project Management: Asana (Free):
- Google Integrace: "Turn emails into tasks" (Gmail Add-on), Google Drive attachments.
- Interní řízení školy.
- ŠkolaOnline/Bakaláři (případně).
9. components/ai
- UI komponenty pro interakci s AI (Chat, Generátor reportů).
10. utils
- Excel Export: Knihovna
xlsxneboexceljspro generování reportů. - Google Sheets Export: Využití
googleapispro vytváření tabulek přímo na Drive uživatele. - Date Formatting:
date-fnspro práci s daty a časy.
Deployment & Workflow (CI/CD)
Bezpečný proces nasazování změn.
- Local (Vývoj)
- Kde:
localhost:3000 - Data: Lokální Supabase (Docker)
- Kdo: Vývojář
- Kde:
- Staging (Testování)
- Kde:
staging.sofie.education(Vercel Preview) - Data: Supabase Staging Project (anonymizovaná data nebo testovací set)
- Kdo: Ředitel, vybraní učitelé (UAT testy)
- Kde:
- Production (Ostrý provoz)
- Kde:
app.sofie.education(Vercel Production) - Data: Supabase Production Project (ostrá data)
- Kdo: Všichni uživatelé
- Kde:
Datový Model (Návrh pro Supabase / Postgres)
Tento dokument popisuje databázové schéma, které bude implementováno v Supabase.
1. Uživatelé a Role (Tabulka public.profiles)
Supabase používá tabulku auth.users pro přihlašování. My vytvoříme tabulku public.profiles, která bude propojena přes id.
-
profiles (rozšiřuje
auth.users)id: UUID (Primary Key, FK -> auth.users.id)email: Textfull_name: Textavatar_url: Textroles: Array[Enum] ('admin', 'teacher', 'parent', 'student') - Uživatel může mít více rolí.preferred_language: Enum ('cs', 'en') (default: 'cs') — jazyk UI a AI odpovědí.summary_style: Enum ('narrative', 'bullets') (default: 'narrative') — styl AI souhrnu.hubspot_contact_id: Text (pro synchronizaci s CRM)is_identity_verified: Boolean (Fyzicky ověřeno školou)identity_verified_at: Timestampidentity_verified_by: UUID (FK -> profiles.id - kdo ověřil)created_at: Timestamp
-
student_records (Citlivá data žáků - RLS: Pouze Admin/Ředitel)
id: UUID (PK, FK -> profiles.id)birth_number: Text (Rodné číslo - Šifrováno?)variable_symbol: Integer (Unikátní identifikátor pro platby/evidenci. Formát:YYNNN(např.25011pro 11. žáka v roce 2025).)status: Enum ('active', 'graduated', 'transferred', 'did_not_start', 'interrupted')enrollment_date: Dateend_date: Datenotes: Text (Interní poznámky)
2. Struktura Školy
-
school_years (Školní roky)
id: UUIDname: Text (např. "2025/2026")is_active: Boolean
-
class_groups (Třídy/Triády)
id: UUIDname: Text (např. "Hvězdáři")grade_level: Text (např. "1-3")lead_teacher_id: UUID (FK -> profiles.id)
-
students_classes (Vazba Žák <-> Třída)
student_id: UUID (FK -> profiles.id)class_id: UUID (FK -> class_groups.id)school_year_id: UUID
-
student_guardians (Vazba Žák <-> Zákonný zástupce)
student_id: UUID (FK -> profiles.id)guardian_id: UUID (FK -> profiles.id)relationship_type: Enum ('mother', 'father', 'grandparent', 'other')can_pickup: Boolean (Oprávněn vyzvedávat ze školy)is_legal_guardian: Boolean (Zákonný zástupce - dostává oficiální zprávy)
(Tabulka pickup_persons byla odstraněna — v modelu "AI Podatelna" rodič sdělí vyzvedávající osobu v chatu, AI extrahuje údaje a uloží je přímo do attendance_records.pickup_person_name. Historická data jsou dohledatelná z communication_threads.)
3. Docházka a Omluvenky
-
attendance_records (Denní docházka)
id: UUIDstudent_id: UUIDdate: Datestatus: Enum ('present', 'absent', 'excused', 'late')arrival_time: Timedeparture_time: Timepickup_person_name: Text (Kdo vyzvedl, pokud to nebyl defaultní rodič)
-
attendance_plans (Plán odchodů)
id: UUIDstudent_id: UUIDday_of_week: Int (0-6)regular_departure_time: Timetype: Enum ('regular', 'exception')valid_from: Datevalid_to: Date
-
excuse_notes (Omluvenky)
id: UUIDstudent_id: UUIDauthor_id: UUID (Rodič)content: Textfrom_date: Dateto_date: Datereason: Textstatus: Enum ('pending', 'approved', 'rejected')
-
activities (Kroužky a Akce)
id: UUIDname: Text (např. "Šachy", "Keramika")description: Textteacher_id: UUID (FK -> profiles.id - vedoucí kroužku)schedule: Text (např. "Úterý 14:00-15:00")capacity: Intprice: Decimalis_active: Boolean
-
activity_enrollments (Přihlášky na kroužky)
id: UUIDactivity_id: UUID (FK -> activities.id)student_id: UUID (FK -> profiles.id)status: Enum ('enrolled', 'waitlist', 'cancelled')created_at: Timestamp
-
consents (Definice Souhlasů - GDPR, Výlety)
id: UUIDtitle: Text (např. "Souhlas s focením", "Souhlas s výletem na Šumavu")content: Text (Markdown - právní text)valid_until: Date (kdy vyprší)is_mandatory: Booleancategory: Enum ('gdpr', 'trip', 'photo', 'health')
-
student_consents (Podpisy souhlasů)
id: UUIDconsent_id: UUID (FK -> consents.id)student_id: UUID (FK -> profiles.id)signed_by: UUID (FK -> profiles.id - rodič)signed_at: Timestampstatus: Enum ('granted', 'revoked', 'pending')ip_address: Text (Audit)
4. Evidence Práce
-
subjects (Předměty)
id: UUIDname: Textcolor: Text
-
competencies (Kompetence)
id: UUIDsubject_id: UUID (FK -> subjects.id)name: Textdescription: Text
-
work_items (Práce/Důkazy)
id: UUIDstudent_id: UUID (FK -> profiles.id)created_by: UUID (FK -> profiles.id or NULL for AI agent)title: Textdescription: Text (Markdown support)content: JSONB (Strukturovaný obsah: textové bloky, seznam URL na fotky/soubory, audio poznámky)source: Enum ('upload', 'email', 'api_agent', 'manual')external_reference_id: Text (např. Message-ID emailu pro párování)status: Enum ('draft', 'pending_approval', 'published', 'archived')ai_metadata: JSONB (Analýza od Gemini: navržené kompetence, sentiment, klíčová slova)teacher_feedback: Textcreated_at: Timestamppublished_at: Timestampvisibility: Enum ('private', 'teacher', 'parent', 'public')
-
work_item_tags (Štítky na pracích - Kompetence)
work_item_id: UUIDcompetence_id: UUIDconfidence_score: Float (0.0 - 1.0, pokud navrženo AI)is_approved: Boolean (potvrzeno učitelem)
5. Komunikace (AI Concierge)
-
communication_threads (Konverzace / Tickety)
id: UUIDstudent_id: UUID (FK -> profiles.id, nullable — obecné dotazy nemají žáka)category: Enum ('obecne', 'omluvenka', 'zdravi', 'vyuka', 'incident', 'survey')status: Enum ('open', 'ai_resolved', 'teacher_review', 'closed')assigned_to: UUID (FK -> profiles.id, nullable — pokud řeší AI)created_at: Timestampupdated_at: Timestamp
-
messages (Zprávy ve vlákně)
id: UUIDthread_id: UUID (FK -> communication_threads.id)sender_id: UUID (FK -> profiles.id, nebo NULL pro AI bota)content: Text (Markdown)is_internal: Boolean (pro poznámky učitelů, rodič nevidí)ai_metadata: JSONB (analýza sentimentu, navržené odpovědi, survey response apod.)created_at: Timestamp
6. Ankety a Sběr Dat
-
surveys (Ankety)
id: UUIDtitle: Textdescription: Textauthor_id: UUID (FK -> profiles.id)is_active: Booleandeadline: Timestamptarget_audience: Enum ('all_parents', 'class_group', 'specific_parents')
-
survey_questions (Otázky)
id: UUIDsurvey_id: UUID (FK -> surveys.id)question_text: Textquestion_type: Enum ('yes_no', 'single_choice', 'multiple_choice', 'text')order: Int
-
survey_options (Možnosti odpovědí)
id: UUIDquestion_id: UUID (FK -> survey_questions.id)option_text: Textorder: Int
-
survey_responses (Odpovědi rodičů)
id: UUIDsurvey_id: UUIDquestion_id: UUIDoption_id: UUID (nullable)respondent_id: UUID (FK -> profiles.id)text_answer: Text (nullable)created_at: Timestamp
7. Audit Log
- audit_logs (Auditní stopa — právní pojistka)
id: UUIDuser_id: UUID (FK -> profiles.id)action: Text (např. 'pickup_confirmed', 'excuse_created', 'consent_granted')entity_type: Text (např. 'attendance_records', 'excuse_notes')entity_id: UUIDdetails: JSONB (snapshot dat v okamžiku akce)ip_address: Textuser_agent: Textcreated_at: Timestamp
8. Nastavení Notifikací
- notification_preferences (Preference uživatele)
id: UUIDuser_id: UUID (FK -> profiles.id)channel: Enum ('push', 'email')category: Text (např. 'attendance', 'evidence', 'surveys', 'daily_digest')enabled: Boolean (default: true)summary_frequency: Enum ('daily', 'weekly', 'monthly') (default: 'daily') — jak často posílat souhrn.
9. Knowledge Base & FAQ
-
knowledge_documents (Indexované dokumenty z Google Drive)
id: UUIDdrive_file_id: Text (Google Drive File ID)title: Texttrust_level: Enum ('verified', 'current', 'draft')content_hash: Text (pro detekci změn při syncu)last_synced_at: Timestampcreated_at: Timestamp
-
faq_entries (Ověřené FAQ — samoučící se z dotazů rodičů)
id: UUIDquestion: Textanswer: Textsource_thread_id: UUID (FK -> communication_threads.id — dotaz, který FAQ vytvořil)approved_by: UUID (FK -> profiles.id — ředitel/zástupce)approved_at: Timestampis_published: Booleancategory: Text (např. 'stravování', 'výlety', 'pravidla')usage_count: Integer (kolikrát Sofie tuto FAQ citovala)created_at: Timestamp
10. Bezpečnost (RLS Policies)
Row Level Security (RLS) policies zajistí, že data vidí jen oprávnění uživatelé.
- profiles: Každý může číst své (nebo veřejné profily učitelů). Admin může vše.
- student_records: Pouze admin/ředitel.
- work_items: Učitel vidí svou třídu, rodič vidí své dítě.
- communication_threads: Rodič vidí jen své konverzace. Učitel vidí přiřazené tickety.
- attendance_records: Rodič vidí své dítě. Učitel vidí svou třídu.
- faq_entries: Publikované (
is_published: true) vidí všichni.
[!NOTE] Detailní RLS policies budou implementovány v migraci
0000_init_schema.sql.
Integrace (INTEGRATIONS.md)
Tento dokument popisuje strategii integrace s externími systémy na základě analýzy dostupné dokumentace.
1. POHODA (Ekonomický systém)
Škola používá systém Pohoda pro účetnictví a fakturaci. Cíl: Automatizace fakturace školného/stravného a přenos plateb.
Technické Možnosti
Dle příručky Ekonomický systém POHODA (2024), kapitola 16 (Datová komunikace):
-
XML Import/Export (Kapitola 16/6, str. 498)
- Pohoda podporuje nativní XML formát pro výměnu dat.
- Režim: Dávkový (soubor se nahraje do složky, Pohoda ho zpracuje).
- Využití: Generování faktur za školné (Kosmo -> XML -> Pohoda).
-
POHODA mServer (Kapitola 16/10, str. 511)
- HTTP server běžící nad Pohodou.
- Umožňuje zasílat XML požadavky přes API (např. dotaz na stav úhrady faktury).
- Výhoda: Online komunikace (není třeba ručně přenášet soubory).
- Nevýhoda: Vyžaduje veřejnou IP nebo VPN do školy (běží lokálně).
Doporučená Strategie (Fáze 2/3)
- MVP: Generování XML souborů (Faktury) v aplikaci Kosmo, které účetní ručně nahraje do Pohody.
- Cílový stav: Využití mServeru pro automatické párování plateb (rodič vidí v aplikaci "Zaplaceno").
- Dopad na uživatele:
- Rodič: Vidí ve Feedu 💳 stav platby ("Školné únor: zaplaceno ✅" / "Splatnost: 15.2.").
- Ředitel: Dashboard s přehledem nezaplacených ("3 rodiče po splatnosti, celkem 25 500 Kč.").
- Administrativa: Přehled faktur, automatické upomínky, export pro účetní.
1.5. CRM & Project Management (Interní rozhodnutí)
Detailní analýza včetně srovnání alternativ viz DECISION_PM.md.
CRM (Vztahy s rodiči vs. Leads)
- Leads (Zájemci o školu): Používáme HubSpot Free.
- Integrace: Outlook add-in (teď) → Gmail Extension (po migraci). Calendar Sync.
- Pipeline:
Nový kontakt → Telefonát → Prohlídka → Přihláška → Zapsán - Důvod: Pipeline management (Zájemce -> Prohlídka -> Zápis).
- Hybridní režim: Ředitel (Gmail) + Kancelář (Outlook) mohou pracovat současně — HubSpot umožňuje každému uživateli vlastní email provider.
- Rodiče (Klienti): Používáme Kosmo "AI Podatelna".
- Důvod: Kontext dětí (známky, docházka). HubSpot nevidí do školních dat.
- Emaily od rodičů se forwardují do Kosmo (Ticket System).
Project Management (Úkoly týmu)
- Nástroj: Asana Free (10 interních uživatelů + neomezení hosté/rodiče).
- Hosté: Rodiče zapojení do stavebních projektů (šatna, zahrada, statek) získají bezplatný přístup jen k „svému" projektu.
- Gemini: Od ledna 2026 existuje Asana Gemini Workspace Connector (Google Marketplace) — Vortex vidí do Asany přes side panel.
- Důvod: Stavět vlastní task manager v Kosmo je drahý nesmysl.
- Pravidlo: Kosmo řeší školní agendu (omluvenky, evidence). Asana řeší provozní agendu (opravit lavici, připravit den otevřených dveří, dostavba šatny).
- Migrace MS365→Google: Asana je platformově nezávislá — jen se přepojí email integrace, žádná migrace dat.
2. ŠkolaOnline (Školní Matrika)
ŠkolaOnline je hlavní evidenční systém (matrika). Cíl: Synchronizace žáků a rodičů (Single Source of Truth), přenos známek/omluvenek.
Analýza Dokumentace
Dokumentace naznačuje velmi komplexní datový model (tisíce polí pro MŠMT výkaznictví). - Struktura: Hierarchická (Kraje -> Školy -> Žáci -> Vzdělávací plány). - Data: Obsahuje citlivé údaje (RČ, zdravotní znevýhodnění, IVP).
Doporučená Strategie
- Jednosměrná synchronizace (ŠkolaOnline -> Kosmo):
- ŠkolaOnline je "master" pro seznam žáků.
- Kosmo si stahuje data (ideálně přes API nebo noční CSV export).
- Omluvenky:
- Rodič zadá v Kosmo -> Kosmo pošle email učiteli / pokusí se zapsat do ŠOL (pokud API dovolí).
3. Google Workspace (Identita & Dokumenty)
Cíl: Single Sign-On (SSO) a úložiště. - Auth: OAuth 2.0 (přihlašování školním Google účtem). - Drive: Ukládání studentských prací (Evidence). Každý žák/třída může mít Shared Drive. - Docs/Sheets: Export reportů (vysvědčení, hodnocení).
4. Strava.cz (Školní Jídelna)
Cíl: Zobrazení jídelníčku v aplikaci (a odpovědi přes AI: "Co je dnes k obědu?").
Technické Možnosti
- XML Feed (Oficiální): Strava.cz nabízí XML feed jídelníčku pro každou jídelnu.
- URL:
https://www.strava.cz/strava/...?xml=true&cisloJidelny=XXXXX - Stačí znát ID jídelny školy.
- URL:
- Neoficiální API: Existují komunitní projekty (OpenStravaCZ/StravaProtocol) s dokumentací protokolu.
Doporučená Strategie
- MVP: Denní cron stáhne XML feed → uloží do DB/Knowledge Base → Sofie odpovídá.
- TODO: Zjistit ID jídelny školy Sofie a ověřit XML feed.
- Budoucnost: Objednávání obědů přes appku (pokud API dovolí).
5. Sofie Specifika (z Sofie - popis.pdf)
Dokument popisuje vzdělávací model, který musí Kosmo podporovat:
- Slovní hodnocení: Nutnost rich-text editorů, ne jen známky 1-5.
- Kompetence: Vazba na RVP (Klíčové kompetence). Evidence musí umožnit tagování ("Komunikativní", "Sociální").
- IVP: Individuální plány pro žáky se znevýhodněním (pole v databázi pro přílohy/cíle pro AI analýzu).
- CLIL / Bilingvální třídy: Škola má bilingvální třídy s rodilými mluvčími i rodiče-expaty.
- UI: Čeština + Angličtina (i18n od začátku — next-intl).
- AI odpovědi: Sofie odpovídá v jazyce rodiče (auto-detect nebo nastavení profilu).
- Reporty: Dvojjazyčné výstupy (česky pro MŠMT, anglicky pro expaty).
Dilema: Webová Prezentace (WordPress vs Next.js)
Kontext:
Škola má v současnosti dva weby na WordPressu:
1. ms-sofie.cz (Mateřská škola)
2. zs-sofie.cz (Základní škola)
Cíl: Sjednotit komunikaci, přidat Blog a zajistit moderní "Apple-like" dojem.
Možnosti Strategie
1. Ponechat WordPress (Status Quo)
- Jak to funguje: Weby běží dál tak, jak jsou. Aplikace Kosmo poběží na
app.sofie.education(neborodic.zs-sofie.cz). - Pro:
- Nulová vstupní investice (už to máte).
- Učitelé/Sekretariát už asi umí editovat články ve WP.
- Proti:
- Roztříštěnost: Máte 3 systémy (WP MŠ + WP ZŠ + Kosmo).
- Design: WP šablony často nevypadají jako moderní Next.js aplikace.
- Bezpečnost/Rychlost: WP vyžaduje údržbu (aktualizace pluginů).
2. Hybridní Model (Doporučeno pro Start)
- Jak to funguje:
- Hlavní stránky ("O nás", "Kontakty") zůstanou na WP.
- Blog a Newsletter se přesunou do Kosmo (Next.js).
- Do WP se jen přidá odkaz "Blog" vedoucí na
sofie.education/blog.
- Pro:
- Nemusíte hned přepisovat celý web ("O nás").
- Nový obsah (Blog) už budujete v moderní technologii.
- Proti:
- Uživatel přeskakuje mezi dvěma vzhledy (WP vs Next.js).
3. Sjednocení pod Next.js (Cílový stav)
- Jak to funguje:
- Vytvoříme jednu doménu
sofie.education. - Web, Blog, i Aplikace pro rodiče běží na jednom Next.js stacku.
- Obsah ("O nás") se spravuje přes Headless CMS (např. Sanity, Strapi) nebo přímo v kódu (MDX).
- Vytvoříme jednu doménu
- Pro:
- Brand: Jedna silná značka, jeden designový jazyk.
- Rychlost: Next.js je bleskurychlý.
- Údržba: Žádné pluginy, žádný WP spam.
- Proti:
- Pracnost: Nutnost přepsat texty a stránky z WP do Reactu/MDX.
- Editace: Učitelé se musí naučit nový editor (např. Sanity Studio), což je ale často jednodušší než WP Gutenberg.
Doporučení
Fáze 1 (Teď):
Postavme Kosmo (Next.js) jako aplikaci + Blog.
Weby zs-sofie.cz nechte zatím běžet. Aplikaci nasadíme na app.sofie.education (nebo podobně).
Fáze 2 (Léto 2026):
Až bude Kosmo hotové, zvažte migraci statického webu do Next.js.
Pro 22 zaměstnanců a pár set rodičů je sjednocený portál sofie.education (kde je web i aplikace v jednom) obrovská výhra v prestiži a přehlednosti.
Dilema: Jméno Aplikace (Kosmo vs. Sofie)
Otázka: Má se aplikace jmenovat "Kosmo", nebo jen "Sofie App"?
Možnosti
1. Kosmo (Vlastní Identita)
- Původ: Odkaz na Montessori "Kosmickou výchovu" (Cosmic Education).
- Výhody:
- Hravost: Děti i učitelé to mohou vzít za své ("Jdu do Kosma").
- Odlišení: Pokud řeknete "Je to na Sofii", myslíte web, budovu, nebo zřizovatele? "Je to v Kosmu" je jasné.
- Nevýhody:
- Zmatení rodičů: "Co je to Kosmo? Já hledám aplikaci školy Sofie."
- Marketing: Musíte vysvětlovat novou značku.
2. Sofie (Brand školy)
- Název: "Sofie Online", "Moje Sofie", "Sofie App".
- Výhody:
- Důvěra: Rodič vidí logo školy a název školy. Okamžitě ví, o co jde.
- Profesionalita: Působí to jako oficiální digitální pobočka školy.
- Nevýhody:
- Může se plést s webem (
sofie.education).
- Může se plést s webem (
Doporučení
Použijme hybridní přístup:
-
Oficiální název (pro rodiče): Sofie Online (nebo Moje Sofie).
- Volné domény (K diskuzi):
mojesofie.cz: Velmi osobní, moderní, "Apple-style". (Doporučeno)sofieskola.cz: Konzervativní, sázka na jistotu.
- Obsazené / Problémové:
sofie.online(Držitel: Gransy - nutná akvizice).sofie.cz,sofie.school,sofie.app(Obsazeno).
- Rozhodnutí: Vyberte jednu z volných a registrujte.
- Ikona na ploše: Logo školy.
- Nadpis v aplikaci: "Sofie".
- Volné domény (K diskuzi):
-
Interní kódové jméno (pro tým): Kosmo.
- Vývojáři a učitelé tomu mohou říkat Kosmo ("Engine, který pohání Sofii").
- V patičce může být malé "Powered by Project Kosmo".
Proč? Rodič chce komunikovat se školou, ne s aplikací. Značka školy je to nejcennější. Kosmo je "motor", Sofie je "auto".
Dilema: Náhrada CRM a Centralizace Komunikace
Dotaz: Jak zařídit, aby rodič viděl kompletní komunikaci v aplikaci (i když to šlo mailem)?
Vztah Emailu a CRM (HubSpot)
V modelu "AI Podatelna" se mění role emailu a CRM:
-
Email jako "Vstupní brána" (Mail-to-Ticket)
- Pokud rodič pošle klasický email (např. na
info@sofieskola.cz), systém by ho měl ideálně zpracovat stejně jako chat. - Řešení: Forwarding na
inbox@sofie.education-> AI přečte -> vytvoří Ticket -> odpoví: "Dobrý den, přijal jsem váš dotaz. Kolegyně se na to podívá. (Ticket #123)" - Realita MVP: Nechat email bokem (HubSpot/Gmail) a snažit se rodiče naučit psát do Appky.
- Pokud rodič pošle klasický email (např. na
-
HubSpot jako "Archiv kontaktů" a "Leads"
- Leads (Zájemci): Zůstávají v HubSpotu. S těmi si píše ředitel/kancelář klasicky mailem + AI v HubSpotu.
- Rodiče (Klienti): Jakmile se dítě zapíše, komunikace se přesouvá do Kosmo App.
- Sync: Kosmo App může (volitelně) posílat logy do HubSpotu ("Sofie vyřešila ticket o omluvence"), abyste měli v CRM kompletní historii, i když se odehrála v Appce.
Rozhodnutí: Kde je pravda?
- Starý svět: Pravda je v Outlooku paní ředitelky.
- Nový svět (Kosmo): Pravda je v Ticketu/Konverzaci v Appce.
- Důsledek: Emailové notifikace musí být "hluché" (noreply), aby nutily rodiče kliknout a jít do Appky. Pokud to neuděláme, skončíme v "split-brain" pekle (půlka v mailu, půlka v chatu).
Současný stav (Problém)
- Roztříštěnost: Něco se řeší mailem, něco osobně, něco telefonem.
- Slepota: Aplikace (Kosmo) o těchto konverzacích neví.
- Důsledek: V aplikaci je "ticho", zatímco v mailu bouře.
Nová Vize: AI Concierge ("Zeptej se Sofie")
Myšlenka: Rodič nepíše "paní učitelce", ale píše "Sofii" (AI Chatbot).
Jak to funguje?
- Rodič má dotaz: "Kdy se jede na školu v přírodě a co má mít Anička s sebou?"
- Sofie (AI) odpovídá:
- AI se podívá do
evidence(plány akcí, emaily). - Odpověď: "Škola v přírodě je 15.-20. května. Seznam věcí byl v mailu z minulého týdne, tady ho máš..."
- Výsledek: Učitel vůbec nebyl rušen! (Úspora 90% času).
- AI se podívá do
- Sofie (AI) eskaluje:
- Dotaz: "Anička má angínu, zítra nepřijde."
- Sofie: "Rozumím, omlouvám ji na zítra. Mám to napsat i do jídelny?" -> Vygeneruje Omluvenku a pošle notifikaci učiteli.
- Sofie (AI) formuluje ticket:
- Dotaz: "Chci řešit šikanu ve třídě."
- Sofie: "To mě mrzí. Abychom to vyřešili rychle, potřebuji vědět: Kdy se to stalo? Kdo byl u toho?"
- Akce: AI vytvoří strukturovaný ticket a pošle ho Řediteli (ne učiteli, pokud je to citlivé).
Routing Logic (Třídění)
AI funguje jako "Level 1 Support": * Běžné info (Jídelníček, Akce, Pomůcky) -> Odpoví AI hned. * Omluvenka -> Zpracuje AI -> Notifikace Učiteli. * Závažný problém -> AI předpřipraví -> Ředitel/Vedení.
Závěr
Místo "Walled Garden Inboxu" budujeme Inteligentní Podatelnu. Zprávy už nejsou "chat", ale "tickety" nebo "AI konverzace".
Rozhodnutí (Nutné schválit)
Otázka: Zakážeme rodičům odpovídat na notifikační emaily?
- [ ] MOŽNOST A (Walled Garden): "Ano, musíte jít do aplikace."
- Doporučeno. Udrží pořádek.
- [ ] MOŽNOST B (Email Bridge): "Ne, nechte je odepisovat z Outlooku."
- Varování: Technicky složité, drahé, náchylné k chybám (spam, přílohy).
Finální Doporučení pro MVP
Začněme Cestou A (Walled Garden). 1. Aplikace je hlavní kanál. 2. Učitelé píší zprávy tam. 3. Rodiče odpovídají tam. 4. Pokud někdo napíše mail, učitel může (ručně) nejdůležitější info zkopírovat do poznámky v aplikaci, nebo (lépe) odpovědět v aplikaci: "Dobrý den, díky za mail. Odpovídám zde v systému, abychom to měli pohromadě..."
Tím postupně vychováme rodiče k používání aplikace, což je cílem.
Rozhodnutí: Knowledge Base pro AI (Odkud Sofie ví?)
Problém
Sofie (AI Concierge) musí odpovídat na dotazy typu "Co má mít Anička na školu v přírodě?". K tomu potřebuje znát školní dokumenty, pravidla, jídelníčky. Odkud data vezme a jak zajistíme, že jsou správná?
Rozhodnutí: Google Drive + Úrovně důvěryhodnosti
Dokumenty žijí na Google Drivu (škola už v něm pracuje). Složky určují, zda jim AI může věřit.
Struktura složek
📁 Sofie Knowledge Base (sdílená složka)
├── 📁 ✅ Ověřené (AI se může spolehnout)
│ ├── Školní řád 2025.pdf
│ ├── ŠVP.pdf
│ └── Pravidla vyzvedávání.docx
│
├── 📁 📅 Aktuální (platí do odvolání)
│ ├── Jídelníček - únor 2026.pdf
│ └── Rozvrh kroužků.docx
│
└── 📁 📝 Drafty (AI NEPOUŽÍVÁ)
└── Návrh výletu - neschváleno.docx
Pravidla
| Složka | AI může citovat? | Kdo nahrává | Kdo schvaluje |
|---|---|---|---|
✅ Ověřené |
✅ Ano | Kancelář | Ředitel |
📅 Aktuální |
✅ Ano | Kancelář / Učitel | — (automaticky platné) |
📝 Drafty |
❌ Ne | Kdokoliv | — |
Technický Flow
- Sync (noční cron nebo manuální trigger): Kosmo přečte složky
✅a📅přes Google Drive API. - Embedding: Text se rozseká na chunky → Gemini
text-embedding-004→ uloží dopgvector(Supabase). - Dotaz: Rodič se zeptá → Sofie prohledá vektorovou DB → najde chunk → odpoví s citací ("Podle školního řádu, čl. 5...").
- Smazání: Při dalším syncu zmizí smazaný dokument z vektorové DB.
FAQ: Samoučící se znalostní báze
Sofie se nejen ptá dokumentů — sama si vytváří FAQ z reálných dotazů rodičů.
Flow
Rodič: "Můžeme přivést na školu v přírodě vlastní jídlo?"
↓
Sofie: (Nenašla odpověď v Knowledge Base)
"Dobrý dotaz! Na to nemám ověřenou odpověď.
Zeptám se ředitele a vrátím se k vám."
↓
Vytvoří Ticket (kategorie: 'info_request')
Předpřipraví draft odpovědi (pokud má kontext)
↓
Ředitel: Vidí v dashboardu: "Nový FAQ dotaz"
Upraví/schválí odpověď:
"Ano, ale musí splňovat hygienické normy (viz příloha)."
↓
[✅ Schválit a publikovat do FAQ]
↓
Sofie: 1. Odpoví rodiči: "Ředitel odpověděl: Ano, ale..."
2. Uloží do tabulky `faq_entries` (verified: true)
3. Příště odpoví sama: "Ano, vlastní jídlo je povolené,
ale musí splňovat hygienické normy. (FAQ #42)"
Proč je to silné
- Ředitel má kontrolu: Žádná odpověď se nepublikuje bez schválení.
- AI se učí: Každý schválený FAQ je nový fakt pro Sofii.
- Méně práce: Stejný dotaz od 5 rodičů = 1 odpověď ředitele, ne 5.
- Transparentnost: Rodič vidí, že odpověď přišla od vedení, ne od AI.
Zdroje dat (souhrn)
| Typ | Příklad | Zdroj | Aktualizace |
|---|---|---|---|
| Strukturovaná data | Rozvrh, docházka | Supabase (DB) | Automaticky z appky |
| Dokumenty | Školní řád, ŠVP | Google Drive | Manuálně (Kancelář) |
| FAQ | Ověřené odpovědi | Supabase (faq_entries) |
Schválením ředitele |
| Jídelníček | Denní menu | strava.cz (XML feed) | Automaticky (cron) |
Alternativa: Paperless-ngx
- Co to je: Open-source DMS pro správu dokumentů (OCR, tagování, fulltext).
- Verdikt: Zatím NE (rozhodnuto 2026-02-09).
- Důvod:
- Overkill: Pro malou školu je Google Drive s fulltextem dostatečný.
- Údržba: Další self-hosted služba (Docker, zálohování, security).
- Adopce: Další UI pro administrativu. Drive znají.
- Kdy přehodnotit: Až bude dokumentů 10 000+ nebo bude potřeba složité schvalovací workflow nad fakturami.
Rozhodnutí: Feed jako hlavní obrazovka rodiče
Problém
Proč by rodič chodil do aplikace každý den? Dashboard s tlačítky nestačí. Potřebujeme "pull mechanismus" — něco, co rodiče vtáhne a dá mu důvod se vracet.
Rozhodnutí: Scrollovací Feed (à la Instagram)
Výchozí landing page rodiče je chronologický feed o jeho dětech a školních událostech.
Proč
- Rodič → dítě: Při vyzvedávání se dívám do apky a vím, na co se zeptat. "Tak jaký byl ten projekt o vesmíru?" místo "Co jste dělali?" → "Nevím."
- Rodič → učitel: Vidím, že učitel fotí práce, eviduje → cítím hodnotu školy → důvěra.
- Učitel → rodič: Učitel ví, že rodič reaguje → motivace evidovat → řeší riziko #10 "kdo krmí AI".
- Engagement loop: Appka žije, rodič se vrací, data pro AI rostou.
Struktura feedu
┌─────────────────────────────────┐
│ 📌 Souhrn od poslední návštěvy │
│ "Od včera: 📸 2 nové fotky, │
│ ✅ Přítomna, 🍽️ Oběd č. 2" │
├─────────────────────────────────┤
│ 📸 Evidence (14:30) │
│ [Fotka práce] │
│ "Anička — Projekt vesmír" │
│ 🏷️ Přírodověda · Týmová práce │
├─────────────────────────────────┤
│ 📢 Zpráva školy (12:00) │
│ "Zítra nezapomeňte gumáky!" │
├─────────────────────────────────┤
│ 🍽️ Jídelníček (11:00) │
│ "Oběd: Kuřecí řízek, bramborová│
│ kaše, salát" │
├─────────────────────────────────┤
│ ✅ Docházka (8:05) │
│ "Anička dorazila v 8:05" │
└─────────────────────────────────┘
💬 [Sofie] ← FAB overlay
Typy feed items
| Typ | Zdroj | Ikona | Příklad |
|---|---|---|---|
| Adaptivní souhrn | AI (pinned) | 📌 | Souhrn od poslední návštěvy (auto-granularita) |
| Přehled zítřka | AI (od 14:00) | 🔮 | "Zítra: Škola do 13:30, plavání, přineste gumáky!" |
| Evidence/fotka | Učitel / Služba | 📸 | Fotka práce + AI štítek |
| Docházka | Systém | ✅ | "Dorazila v 8:05" |
| Družina | Vychovatel/ka | 🏠 | "Anička je v družině. Odchod: 15:30." |
| Kroužek | Systém / Lektor | 🎯 | "Dnes: Šachy 14:00" / "ZRUŠENO" |
| Zpráva školy | Ředitel / Učitel | 📢 | "Zítra výlet — gumáky!" |
| Jídelníček | strava.cz (cron) | 🍽️ | "Oběd č. 1: Řízek" |
| Akce / kalendář | Kalendář | 📅 | "Za 3 dny: Třídní schůzka" |
| Odpověď na dotaz | Sofie / Učitel | 💬 | "Odpověď na váš dotaz" |
| Platba (Fáze 2) | Pohoda (sync) | 💳 | "Školné únor: zaplaceno ✅" / "Splatnost: 15.2." |
Multi-child
Rodič s více dětmi vidí prolínající se feed s avatarem/tagem dítěte:
[👧 Anička] 📸 Projekt vesmír (14:30)
[👦 Tomáš] ✅ Dorazil v 8:02 (8:02)
[👧 Anička] ✅ Dorazila v 8:05 (8:05)
[🏫 Škola] 📢 Zítra gumáky!
Filtr: "Zobrazit jen Aničku" / "Zobrazit jen Tomáše" / "Vše".
Sofie Overlay (FAB)
- Plovoucí tlačítko vpravo dole (Floating Action Button).
- Klik → otevře chat panel (slide-up nebo sidebar).
- Vždy dostupný z jakékoliv obrazovky.
- Badge s počtem nepřečtených zpráv.
Přehled zítřka (🔮 Tomorrow Preview)
Každý den od cca 14:00 se ve feedu objeví karta s přehledem následujícího dne:
┌─────────────────────────────────┐
│ 🔮 Zítra — Úterý 11. února │
├─────────────────────────────────┤
│ 🕒 Škola do: 13:30 │
│ 🍽️ Oběd: Kuřecí řízek, kaše │
│ 🎯 Kroužek: Šachy 14:00–15:00 │
├─────────────────────────────────┤
│ ⚠️ NESTANDARDNÍ: │
│ 📌 Plavání — přines plavky+ručník│
│ ❌ Nepodepsaný souhlas s výletem│
└─────────────────────────────────┘
- Běžné položky: Rozvrh, konec školy, oběd, plánovaný odchod, kroužky.
- Zvýrazněné výjimky (⚠️): Výlet, plavání, "přineste si...", škola v přírodě.
- Akce potřeba (❌): Nepodepsané souhlasy, nezaplacené platby, chybějící dokumenty.
- Generuje AI z rozvrhu, kalendáře a školních dat.
- Push notifikace: "Sofie: Zítra plavání — nezapomeňte plavky!"
Technické poznámky
- Realtime: Supabase Realtime subscriptions → nový item se objeví bez refreshe.
- Infinite scroll: Načítání po dávkách (20 items), lazy loading fotek.
- Privacy: Feed zobrazuje POUZE děti přihlášeného rodiče (RLS policy).
- Offline: PWA cache → poslední feed items dostupné i bez signálu.
Adaptivní souhrn ("Od poslední návštěvy")
- Systém trackuje
last_seen_attimestamp pro každého rodiče. - Při otevření appky AI vygeneruje souhrn za období od
last_seen_at:- < 4 hodiny: Live stav — "Právě probíhá: Matematika — zlomky 🍎"
- 1 den: "Včera: 📸 2 nové práce, oběd č. 2, odchod 15:30."
- 1 týden: "Minulý týden: 📸 5 prací, docházka 100 %, výlet na Šumavu." → rozklikne po dnech.
- 3+ týdny: "Za 3 týdny: 📸 12 prací, 3 omluvenky, docházka 92 %." → po týdnech → dnech → detail.
- Zero config — rodič nemusí nastavovat frekvenci, vše automaticky.
- Push re-engagement: Pokud se rodič nepřihlásí 3+ dny → "Anička měla zajímavý týden — mrkněte se! 📸"
Důsledky pro architekturu
- Dashboard (z Plán (Fáze 1)) se mění na Feed pro rodiče.
- Ředitel a učitel si ponechávají klasický dashboard.
work_itemstabulka je primární zdroj dat pro feed items.- Nový koncept:
feed_eventsview (nebo materializovaný pohled), který agreguje data z různých tabulek (evidence, docházka, družina, kroužky, zprávy) do jednoho chronologického streamu.
Rozhodnutí: Skupinový chat / Komentáře — NE
Zvážení
Měli bychom umožnit rodičům diskutovat mezi sebou pod příspěvky (školními oznámeními, fotkami)?
Rozhodnutí: Ne. Použít reakce místo diskuze.
Důvody
- Moderace — kdo řeší, když se dva rodiče pohádají? Ředitel? → Víc práce, ne míň.
- WhatsApp už existuje — škola má WhatsApp komunity, kde si rodiče mohou povykládat a postěžovat si. Neporazíme ho a ani nechceme.
- GDPR — rodič napíše o cizím dítěti → právní problém.
- Scope creep — budujeme informační systém školy, ne sociální síť.
- "Negativity bias" — veřejná diskuze přitahuje stížnosti, ne pochvaly.
Co místo toho
| Funkce | Popis | Moderace? |
|---|---|---|
| Reakce (❤️ 👏) | Rodič "lajkne" fotku práce dítěte. Učitel vidí počet reakcí → motivace. | Žádná potřeba |
| Strukturované odpovědi | Škola: "Kdo jede na výlet?" → Tlačítka Ano/Ne. Ne volný text. | Žádná potřeba |
| Otázky → Sofie | Rodič má dotaz k oznámení? Zeptá se Sofie, ne ostatních rodičů. | AI + eskalace |
| Privátní zpráva učiteli | Potřebuji řešit něco osobně → přes Sofii nebo přímo učiteli. | Učitel |
[!IMPORTANT] Pro volné diskuze mezi rodiči slouží WhatsApp komunity školy. Kosmo se zaměřuje na informace o dítěti, ne na sociální interakci mezi rodiči.
Rozhodnutí: Project Management & CRM
Aktualizováno: 2026-02-18
Kontext: Škola o ~22 zaměstnancích potřebuje:
- PM — Řídit interní provozní úkoly (porady, údržba, akce, stavební projekty)
- CRM — Spravovat vztahy se zájemci (leads), stávajícími rodiči a dodavateli
- Gemini (AI) — Nástroje musí být napojitelné na Google Gemini po migraci na Google Workspace
Škola má aktuálně < 200 kontaktů (rodiče + dodavatelé + zájemci) a potřebuje min. 3 uživatelské přístupy do CRM.
Kritéria Výběru
- Jednoduchost: Učitelé „nesnáší" složité systémy. Pokud to bude trvat > 10s, neudělají to.
- Cena: Pro malou školu musí být zdarma nebo velmi levné.
- Gemini integrace: Nástroj musí být ovladatelný přes Google Gemini (nativní connector nebo přes vlastní API extension).
- 3 skupiny kontaktů: Zájemci (leads), stávající rodiče, dodavatelé.
- Min. 3 CRM přístupy: Ředitel + kancelář (2).
- Platformová nezávislost: Musí fungovat dnes (MS365) i po migraci (Google).
Proč nestavět PM/CRM v Kosmo
Rozhodnutí: PM i CRM kupujeme/hostujeme, nestavíme vlastě v Kosmo.
| Stavět v Kosmo | Koupit / Self-host | |
|---|---|---|
| Odhadovaný vývoj | 8–10 týdnů | Hodiny (nastavení) |
| Údržba | Trvalá | Minimální (SaaS) nebo přiměřená (self-hosted) |
| Dopad na roadmap | ❌ Zpozdí Feed, AI Concierge, Evidence | ✅ Žádný |
Klíčový argument: Kosmo má řešit věci, které žádný hotový nástroj neumí — Feed s aktivitami dětí, AI Concierge Sofie, Evidence prací, Safety Gate, integrace se ŠkolaOnline. PM a CRM jsou komodity, které se dají koupit.
Výjimka — AI Podatelna: Komunikaci s existujícími rodiči (dotazy → AI odpověď → eskalace na učitele) bude řešit Kosmo, protože vyžaduje přístup ke školním datům (docházka, IVP, evidence). Toto žádný hotový CRM neumí.
CRM: Srovnání
3 skupiny kontaktů
| Skupina | Typ komunikace | Objem | Potřeba |
|---|---|---|---|
| Zájemci (leads) | Pipeline: pozvánka → prohlídka → zápis | Desítky/rok | Pipeline + email tracking |
| Stávající rodiče | Dotazy, omluvenky, informace, zpětná vazba | Stovky zpráv/měsíc | Kontakty + historie komunikace |
| Dodavatelé | Nabídky, faktury, reklamace, koordinace (stavba) | Desítky/měsíc | Kontakty + pipeline pro projekty |
Srovnání CRM nástrojů (ověřeno únor 2026)
| HubSpot Free | Copper Starter | Twenty (self-hosted) | |
|---|---|---|---|
| Cena | 0 Kč | $9/user/mo (~700 Kč za 3) | Zdarma (VM ~150 Kč/mo) |
| Kontakty | ⚠️ Max 1 000 | ⚠️ Max 1 000 na Starter | ✅ Neomezené |
| Uživatelé | ❌ Max 2 | ✅ Dle licencí | ✅ Neomezené |
| Pipelines | 1 | 1 (více na vyšších plánech) | Neomezené |
| Email šablony | 3 (nové účty) | Basic | Vlastní |
| Gemini | ✅ Marketplace connector | ✅ Nativní v Gmail (Chrome ext.) | ❌ Nemá (řeší se vlastní API connector) |
| Google integrace | ✅ Gmail, Calendar | ✅✅ Žije přímo v Gmail | ⚠️ IMAP/SMTP (funguje, ale samostatná appka) |
| API | REST | REST | ✅ REST + GraphQL |
| Self-hosted | ❌ Jen SaaS | ❌ Jen SaaS | ✅ Docker (GCP / VPS) |
| Data vlastnictví | U HubSpotu | U Copperu | ✅ Vaše |
| Zralost | ✅ 10+ let, market leader | ✅ 10+ let, Google-native | ⚠️ 2 roky, 39K+ GitHub stars |
| Mobilní app | ✅ iOS + Android | ✅ iOS + Android | ⚠️ Responsive web |
| UI demo | Demo video | Demo video | Live demo |
Vyřazené CRM nástroje
| Nástroj | Důvod vyřazení |
|---|---|
| EspoCRM (self-hosted) | Zralý, ale starší UI. Nemá Gemini connector. Pro školu zbytečně komplex. |
| Monday CRM | Free plán nemá CRM ani integrace. Placený drahý. |
PM: Srovnání
SaaS nástroje
| Asana | Google Tasks + Chat Spaces | |
|---|---|---|
| Free plán | ⚠️ Max 2 uživatelé (hosté se počítají!) | ✅ V ceně Workspace |
| Starter plán | $10.99/user/mo → ✅ Neomezení hosté zdarma | — |
| Gemini | ✅ Nativní connector (side panel) | ✅ Součást Gemini |
| Funkce | Projekty, Kanban, Calendar, Timeline (placené), mobilní app | Jednoduché úkoly, žádný projekt overview |
| Hosté (rodiče) | ❌ Free: počítají se do limitu / ✅ Starter: neomezeně | ✅ Sdílení skrze Spaces |
| UI demo | asana.com | Součást Gmail |
⚠️ Asana Free je pro školu nepoužitelná (jen 2 uživatelé). Starter pro 5 lidí = ~$55/mo (~1 400 Kč).
Self-hosted PM nástroje (Docker / GCP)
| Plane ⭐ | Leantime | Vikunja | OpenProject | |
|---|---|---|---|---|
| Styl | Moderní (Jira/Asana klon) | Pro ne-PM lidi | Minimalistický (Todoist) | Enterprise (Gantt, Scrum) |
| UI | ✅ Hezký, moderní | ✅ Jednoduchý, přívětivý | ⚠️ Jednoduchý | ⚠️ Korporátní |
| Google Calendar | ✅ Ano | ✅ Ano (+ Zapier) | ⚠️ CalDAV | ⚠️ Omezené |
| Google Auth | ✅ SSO | ✅ SSO | ⚠️ Omezené | ✅ OIDC |
| Hosté (rodiče) | ✅ Neomezení | ✅ Ano | ⚠️ Omezené | ✅ Ano |
| Gemini | ❌ Nemá connector | ❌ Nemá connector | ❌ | ❌ |
| API | ✅ REST | ✅ REST (+ Zapier) | ✅ REST | ✅ REST |
| Docker | ✅ | ✅ | ✅ | ✅ |
| Cena | Zdarma (Community Ed.) | Zdarma (Open Source) | Zdarma | Zdarma (Community) |
| Demo | app.plane.so | leantime.io | try.vikunja.io | community.openproject.org |
Vyřazené PM nástroje
| Nástroj | Důvod vyřazení |
|---|---|
| Notion | Education Free neplatí pro K-12. Nemá Gemini connector. Limit 10 hostů. |
| Trello | Primitivní pro řízení projektů, špatný přehled „co mám dělat já". |
| Basecamp | Drahý ($99/mo), nemá Gemini connector. |
| ClickUp | Příliš složité pro učitele a rodiče. |
| Monday.com | Free plán: 2 uživatelé, žádné integrace. CRM jen placené. |
| Focalboard | Slabá Google integrace, jen Kanban. |
Gemini integrace: Nativní vs. vlastní connector
| Způsob | Popis | Složitost |
|---|---|---|
| Nativní connector (Asana, HubSpot, Copper) | Předpřipravený v Google Marketplace. Funguje hned. | ✅ Žádná |
| Vlastní Gemini Workspace Extension | Vytvoříte OpenAPI spec popisující API nástroje → zaregistrujete jako connector | ⚠️ Středně náročné |
| Vertex AI Extension | Pro hlubší AI integraci — Gemini nejen čte, ale analyzuje a navrhuje | ❌ Pokročilé |
Vlastní connector je realistický: Plane i Twenty mají bohaté REST/GraphQL API. Connector je v podstatě:
1. OpenAPI spec (popis endpointů)
2. Registrace v Google Workspace Marketplace (interní, jen pro @sofie.education)
3. Gemini pak umí volat tyto endpointy z side panelu
Toto je přesně to, co dělají Asana/Salesforce connectory — jen jsou předpřipravené výrobcem.
HubSpot Free vs Copper Starter — detailní srovnání pro školu
Proč ne HubSpot Free?
HubSpot Free vypadá lákavě (0 Kč), ale pro školu naráží na dva tvrdé limity:
| Limit | Dopad |
|---|---|
| Max 2 uživatelé | Potřebujete 3 (ředitel + kancelář × 2) → ❌ nestačí |
| Žádné „marketing contacts" | Newsletter/hromadné emaily na Free nelze poslat seznamu kontaktů |
Upgrade na HubSpot Starter ($20/user/mo × 3 = $60/mo = ~1 500 Kč) by vyřešil oba problémy, ale je dražší než Copper.
Head-to-head: HubSpot vs Copper
| HubSpot Free | Copper Starter | |
|---|---|---|
| Cena (3 users) | ❌ Nelze (max 2) → Starter $60/mo | ✅ $27/mo |
| Kde žije | Samostatná appka (app.hubspot.com) | Přímo v Gmail (Chrome extension) |
| UX | Přepínání mezi Gmail a HubSpot | ✅ Kontakt = sidebar v Gmailu |
| Email tracking | ✅ 200 notifikací/měs | ✅ Ano |
| Email šablony | 3 | Základní |
| Bulk email | ⚠️ 2 000/měs, ale ne na Free (chybí marketing contacts) | ❌ Ne na Starter (od Professional $59/user) |
| Gemini | ✅ Marketplace connector | ✅✅ Nativní v Gmail |
| Mobilní app | ✅ iOS + Android | ✅ iOS + Android |
| Zapier | ✅ | ✅ |
| Mailchimp integrace | ✅ | ✅ (nativní sync kontaktů) |
Verdikt: Pro 3 uživatele a Google-first prostředí vychází Copper Starter lépe — je levnější ($27 vs $60), žije přímo v Gmailu a má nativní Gemini integraci.
Newsletter
Potřeba
Škola chce posílat měsíční newsletter stávajícím rodičům (~150 kontaktů): novinky, akce, fotky z výletů, připomínky.
SaaS varianty
| Varianta | Jak funguje | Cena/měs | Pro | Proti |
|---|---|---|---|---|
| Copper + Mailchimp Free ⭐ | Copper sync kontakty → Mailchimp posílá newsletter | ~700 Kč (Copper) + 0 Kč | CRM v Gmailu + newsletter zdarma | Dva systémy (ale sync je automatická) |
| HubSpot Starter | Vše v jednom (CRM + newsletter) | ~1 500 Kč | Jeden systém | Drahé |
| Copper + Brevo Free | Alternativa k Mailchimp | ~700 Kč + 0 Kč | 300 emails/den zdarma | Menší komunita |
Mailchimp Free limity (únor 2026): 500 kontaktů, 1 000 emails/měs → pro ~150 rodin a 1 newsletter/měs stačí s rezervou.
Self-hosted newsletter (Docker / GCP)
| Listmonk ⭐ | Mautic | Mailtrain | |
|---|---|---|---|
| Zaměření | Newsletter + mailing listy | Plná marketing automatizace | Newsletter (Mailchimp klon) |
| Složitost | ✅ Jednoduchý, Go | ❌ Komplexní (HubSpot alternative) | ⚠️ Střední |
| UI | ✅ Čistý, moderní | ⚠️ Korporátní | ⚠️ Starší |
| Docker | ✅ Jednoduchý compose | ✅ Compose (více kontejnerů) | ✅ |
| RAM | ~256 MB | 2–4 GB | ~512 MB |
| Kontakty | Neomezené | Neomezené | Neomezené |
| SMTP | Jakýkoliv (Google, SES, Resend) | Jakýkoliv | Jakýkoliv |
| Šablony | WYSIWYG + Markdown + HTML | ✅ Drag-and-drop builder | HTML editor |
| Analytika | ✅ Open rate, clicks, bounces | ✅ Podrobná | ✅ Základní |
| Cena | Zdarma (jen VM ~50 Kč) | Zdarma (ale potřebuje silnější VM ~150 Kč) | Zdarma |
| Verze | v6.0 (leden 2026) | v5.x (aktivní vývoj) | ⚠️ Méně aktivní |
| Demo | demo.listmonk.app | mautic.org | — |
Doporučení self-hosted: Listmonk — ultrajednoduchý (Go binary + PostgreSQL), Docker compose na 3 řádky, nulový maintenance. Stačí napojit na SMTP (Google Workspace nebo Resend — 3 000 emails/měs zdarma).
Newsletter v self-hosted scénářích
Pro odeslání newsletteru je potřeba SMTP relay (nelze posílat přímo z VM — emaily budou v spamu):
| SMTP provider | Free tier | Cena |
|---|---|---|
| Google Workspace SMTP | V ceně licence | 0 Kč (limit ~2 000/den) |
| Resend | 3 000 emails/měs | 0 Kč |
| Amazon SES | 62 000 emails/měs (z EC2) | ~$0.10 za 1 000 |
| Brevo SMTP | 300 emails/den | 0 Kč |
Pro ~150 rodičů a 1 newsletter/měs stačí kterýkoliv free tier.
Scénáře nasazení (včetně newsletteru)
Scénář A: Maximální Gemini integrace (SaaS, placené)
| Role | Nástroj | Cena/měs |
|---|---|---|
| PM | Asana Starter (5 users) | ~1 400 Kč |
| CRM | Copper Starter (3 users) | ~700 Kč |
| Newsletter | Mailchimp Free (sync s Copper) | 0 Kč |
| Celkem | ~2 100 Kč/měs | |
| Gemini | ✅✅ Nativní connectory pro PM i CRM |
Pro: Žádná údržba, Gemini vidí do všeho, Copper v Gmailu, newsletter zdarma. Proti: Nejvyšší měsíční náklady.
Scénář B: Self-hosted PM + Copper CRM (hybrid) ⭐
| Role | Nástroj | Cena/měs |
|---|---|---|
| PM | Plane na GCP | ~150 Kč (VM) |
| CRM | Copper Starter (3 users) | ~700 Kč |
| Newsletter | Mailchimp Free (sync s Copper) | 0 Kč |
| Celkem | ~850 Kč/měs | |
| Gemini | ✅ Copper nativně / Plane přes vlastní connector |
Pro: Dobrý poměr cena/funkce. CRM přímo v Gmailu. PM + hosté neomezené. Proti: Správa VM na GCP, vývoj Gemini connektoru pro Plane.
Scénář C: Plně self-hosted (max. úspora)
| Role | Nástroj | Cena/měs |
|---|---|---|
| PM | Plane na GCP | ~150 Kč |
| CRM | Twenty na GCP | ~150 Kč |
| Newsletter | Listmonk na GCP (sdílená VM) | ~0 Kč (sdílí VM) |
| SMTP | Google Workspace SMTP nebo Resend | 0 Kč |
| Celkem | ~300 Kč/měs | |
| Gemini | Vše přes vlastní connectory (jednorázový vývoj) |
Pro: Nejlevnější. Plná kontrola. Neomezené vše. Newsletter je součástí infrastruktury. Proti: Správa VM + vývoj 2–3 Gemini connectorů. Twenty i Listmonk jsou mladší projekty.
Doporučení
Ještě nebylo učiněno finální rozhodnutí. Výběr závisí na diskuzi s ředitelem: 1. Cloud služby vs. self-hosted: Chceme platit za SaaS (žádná údržba) nebo hostovat na GCP (levnější, víc kontroly)? 2. Priorita Gemini: Nativní connectory hned, nebo vlastní connector (jednorázový vývoj)? 3. Budget: 300 Kč vs. 850 Kč vs. 2 100 Kč měsíčně?
Workflow: Schůzka → Přepis → Úkoly v PM
Cíl
Po každé projektové schůzce (porada učitelů, schůzka s rodiči k projektu, jednání s dodavatelem) chceme:
- Nahrát schůzku
- Přepsat ji automaticky (AI)
- Vydestilovat úkoly a přiřadit správným lidem
- Potvrdit — přiřazená osoba potvrdí/odmítne úkol
Varianta A: Google Meet + Gemini Business (placená)
Google Meet (nahrávka + "Take notes for me")
↓ automaticky
Google Docs (přepis + shrnutí + action items)
↓ Gemini identifikuje úkoly
Google Tasks ← automatický sync
↓ Zapier / Make
PM nástroj (Asana / Plane) → úkoly přiřazené správným lidem
↓
Přiřazená osoba → potvrdí / odmítne úkol ✅
Požadovaná licence: Google Workspace Business Standard ($12/user/mo) nebo Gemini Business add-on ($14/user/mo). Pro Education: Teaching & Learning Upgrade nebo Education Plus.
⚠️ Education Fundamentals (zdarma) NEUMÍ nahrávání ani přepis v Meet. Toto je klíčový limit.
Stačí 1 placená licence: Schůzku zakládá uživatel s Business Standard / Education Plus licencí (ředitel). Ostatní se jen připojí — nemusí mít placenou licenci.
| Funkce | Co dělá | Licence |
|---|---|---|
| Nahrávání v Meet | Video + audio do Google Drive | Business Standard+ |
| „Take notes for me" | Realtime přepis + shrnutí + action items | Business Standard + Gemini |
| Sync do Google Tasks | Action items → úkoly automaticky | Business Standard+ |
| „Ask Gemini" (2026) | Ptáte se Gemini na shrnutí během meetingu | Gemini add-on |
Varianta B: Bez placené licence (DIY, zdarma) ⭐
Pokud škola má jen Education Fundamentals (zdarma), stačí 3-krokový postup:
📱 Nahrávka (telefon / OBS / jakýkoliv rekordér)
↓ upload MP3/WAV
🤖 Gemini app (gemini.google.com) — přepis zdarma (do 10 min)
nebo Google AI Studio (aistudio.google.com) — přepis až 3h zdarma
↓ přepis jako text
📋 Gemini / NotebookLM → extrakce úkolů, přiřazení lidem
↓ ručně nebo přes Zapier
✅ PM nástroj (Asana / Plane) → úkoly s přiřazením
Krok za krokem:
| # | Co | Jak | Cena |
|---|---|---|---|
| 1 | Nahrát schůzku | Telefon (diktafon), OBS na laptopu, nebo Chrome extension (Recall.ai — open-source, lokální) | 0 Kč |
| 2 | Přepsat | Nahrát audio do Gemini (do 10 min zdarma) nebo Google AI Studio (až 3h, Gemini 3.0 Flash, zdarma) | 0 Kč |
| 3 | Vydestilovat úkoly | Gemini prompt: „Z tohoto přepisu vytáhni action items. U každého uveď: kdo, co, do kdy." | 0 Kč |
| 4 | Nahrát do PM | Ručně (copy-paste) nebo přes Zapier (Google Docs → Asana/Plane task) | 0 Kč |
| 5 | Potvrzení | Přiřazená osoba dostane notifikaci v PM a potvrdí/odmítne úkol | 0 Kč |
Alternativa pro krok 3: NotebookLM (zdarma) — nahrajete přepis, NotebookLM vytvoří strukturovaný přehled s úkoly a rozhodnutími.
Ukázkový Gemini prompt pro extrakci úkolů
Jsi asistent pro řízení projektů školy. Z následujícího přepisu schůzky:
1. Vytáhni všechny ACTION ITEMS (úkoly, úlohy, sliby)
2. U každého uveď:
- KDO: osoba zodpovědná
- CO: co má udělat (stručně)
- DO KDY: termín (pokud byl zmíněn)
- PRIORITA: vysoká / střední / nízká
3. Formátuj jako tabulku
Přepis schůzky:
[sem vložit přepis]
Open-source Chrome extensions pro přepis v Meet
| Extension | Co dělá | Cena |
|---|---|---|
| Recall.ai Chrome Extension | Scrapuje live captions z Meet → .txt s timestampy + volitelně nahrává video |
Zdarma, open-source |
| Meet-Script | Ukládá konverzaci z Meet → PDF | Zdarma, open-source |
| Tactiq | AI přepis + shrnutí + action items | Freemium (10 přepisů/měs zdarma) |
Porovnání variant
| Varianta A (placená) | Varianta B (zdarma) | |
|---|---|---|
| Automatizace | ✅✅ Plně automatický | ⚠️ Polo-manuální (2–3 min práce) |
| Kvalita přepisu | ✅ Google Meet nativní | ✅ Gemini 3.0 Flash (srovnatelná) |
| Limit délky | Neomezený | 10 min (Gemini) / 3h (AI Studio) |
| Extrakce úkolů | ✅ Automatická | ✅ Prompt v Gemini (30 sekund) |
| Cena | ~$12–14/user/mo (1 licence stačí) | 0 Kč |
| Vhodné pro | Časté schůzky (denně) | Občasné schůzky (týdně/měsíčně) |
Doporučení
Pro školu s ~2–4 schůzkami týdně je Varianta B (DIY) plně dostačující. Workflow trvá ~3 minuty navíc po každé schůzce:
- Zastaví nahrávání na telefonu
- Nahraje MP3 do Gemini / AI Studio
- Vloží prompt → dostane tabulku úkolů
- Vytvoří úkoly v PM (copy-paste nebo Zapier)
Pokud škola později přejde na Education Plus (nebo ředitel získá Business Standard licenci), přechod na plně automatickou Variantu A je bezšvový — jen se zapne „Take notes for me" v Meet.
CRM Pipeline — vizuální přehled (platí pro jakýkoliv CRM nástroj)
Představte si nástěnku se sloupci, kde každá kartička = jeden zájemce:
┌─────────────┐ ┌────────────────┐ ┌─────────────────┐ ┌────────────────┐ ┌──────────┐
│ 📥 NOVÝ │ │ 📞 KONTAKTO- │ │ 👀 PROHLÍDKA │ │ 📝 PŘIHLÁŠKA │ │ ✅ ZAPSÁN │
│ ZÁJEMCE │ │ VÁNO │ │ PROBĚHLA │ │ PODÁNA │ │ │
│ │ │ │ │ │ │ │ │ │
│ • Novákovi │ │ • Dvořákovi │ │ • Královi │ │ • Soukupovi │ │ • Černí │
│ • Procházka │ │ • Veselá │ │ • Marešovi │ │ │ │ • Kučera │
│ │ │ │ │ │ │ │ │ │
└─────────────┘ └────────────────┘ └─────────────────┘ └────────────────┘ └──────────┘
Ředitel na první pohled vidí: - „Máme 2 nové zájemce, kterým jsme ještě nezavolali" - „3 rodiny čekají na prohlídku" - „1 rodina podala přihlášku, máme ji zpracovat"
Chat & Video (po migraci na Google)
- Chat: Google Chat (Spaces) — Prostory: „Sborovna", „Jídelna", „IT Support"
- Video: Google Meet — Jeden klik z Kalendáře/Chatu
Poznámka: Dokud škola běží na MS365, používá MS Teams. Po migraci přejde na Google Chat/Meet.
Implementace
Implementační Plán (Fáze 1: Walking Skeleton)
Cíl: Vytvořit funkční kostru aplikace (Next.js + Supabase) s nasazením na Vercel.
1. Inicializace Projektu (Next.js)
- [ ] Clean Setup: Smazat/archivovat staré pokusy.
- [ ] Next.js Init:
pnpm create next-app@latest .- TypeScript: Yes
- Tailwind: Yes
- ESLint: Yes
- App Router: Yes
- Src Directory: Yes
- Import Alias:
@/*
- [ ] Shadcn UI Init:
npx shadcn-ui@latest init- Style: New York
- Base Color: Zinc
- CSS Variables: Yes
- [ ] Základní Komponenty: Instalace
button,input,card,dialog,toast. - [ ] i18n Setup:
pnpm add next-intl— CZ/EN od začátku. Middleware +messages/cs.json+messages/en.json.
2. Supabase Setup
- [ ] Lokální Vývoj:
npx supabase init&npx supabase start. - [ ] Environment: Nastavení
.env.local(NEXT_PUBLIC_SUPABASE_URL,NEXT_PUBLIC_SUPABASE_ANON_KEY). - [ ] Auth: Povolení Email/Password a Google Provider v Supabase Config.
- [ ] Databáze: Vytvoření migrace
0000_init_schema.sqlpodle Datový Model.
3. Základní UI (App Shell)
- [ ] Layout: Header (Logo Sofie), Sidebar (Navigace), Footer.
- [ ] Public Pages:
/login(Auth formulář)./(Landing page - přesměrování na dashboard nebo login).
- [ ] Protected Pages (vyžadují login):
/dashboard(Rozcestník)./evidence(Seznam prací)./attendance(Docházka).
4. AI Integrace (Gemini)
- [ ] Vercel AI SDK:
pnpm add ai @ai-sdk/google. - [ ] API Route:
/api/chat(Simple chatbot endpoint). - [ ] UI Chatbot: Plovoucí tlačítko "Sofie" v pravém dolním rohu.
5. Deployment
- [ ] GitHub: Push do
main. - [ ] Vercel: Napojení repozitáře, nastavení ENV proměnných.
- [ ] Ověření: Funkční
https://kosmo-sofie.vercel.app(nebo custom doména).
6. Validace s Uživateli (UAT)
- [ ] Demo řediteli: Po Walking Skeleton (funkční login + chat). Cíl: "Ano, tohle chceme."
- [ ] Beta (3-5 rodičů): Po prvním sprintu (chat + omluvenky + docházka). Sběr zpětné vazby.
- [ ] Rozšířená beta (třída): Celá třída (1 učitel + rodiče). Validace reálného provozu.
- [ ] Plný rollout: Po prázdninách (září 2026). Všichni rodiče ZŠ.
Instrukce pro Agenta (AGENT.md)
Tento soubor slouží k zaznamenávání instrukcí, preferencí a poznatků získaných během spolupráce na projektu Kosmo.
Hlavní zásady
- Detailní dokumentace: Cokoliv, co se naučíš nebo co uživatel zadá, si pečlivě zaznamenávej. Buď raději přehnaně detailní než stručný.
- Iterativní přístup: Postupujeme po krocích, ověřujeme si porozumění.
- Google-first: Aplikace je integrována s Google Workspace.
-
Kontext: Vždy uvažuj kontext školy Sofie (viz Kontext a Vize).
-
Rovnocenný Partner (Senior Architect):
- Nefunguj jen jako "vykonavač". Přemýšlej za roh.
- Kritizuj: Pokud uživatel navrhne hloupost nebo over-engineering, řekni to (slušně, ale jasně).
- Navrhuj: Proaktivně nabízej lepší alternativy. "Místo X bych udělal Y, protože..."
- Challenge: Ptej se "Proč to děláme?" a "Má to ROI?".
- Kritické myšlení: Ověřuj informace, nepředpokládej. Neboj se opravit uživatele nebo navrhnout lepší řešení.
- Proaktivita: Hledej "unknown unknowns" - navrhuj to, co by uživatel měl chtít.
- Zjednodušuj: Tvůj kód má být čistý, čitelný a efektivní. DRY (Don't Repeat Yourself) a KISS (Keep It Simple, Stupid).
- Simplicity is the ultimate complexity: Tlak na promyšlenou jednoduchost. Nemusíme vyřešit vše, ale těch 80 % případů extrémně dobře a jednoduše. AI Concierge > 10 různých formulářů.
- Naming konvence:
- "Kosmo" = kódové jméno, technická dokumentace, repo, package name.
- "Sofie" = brand pro rodiče, UI texty, chatbot. "Sofie je auto, Kosmo je motor."
- Riziko: Kdo krmí AI?
- Sofie bude tak dobrá, jak dobrá budou data od učitelů.
- Mitigace: Evidence musí být tak jednoduchá, že je rychlejší evidovat než neevidovat (fotka → AI štítek → hotovo).
- Mitigace: Knowledge Base plní kancelář (Google Drive). FAQ se generují automaticky z dotazů.
Poznámky z konverzací
- 2026-02-08: Uživatel vyžaduje detailní dokumentaci všech kroků a instrukcí. Byl založen tento soubor.
- 2026-02-08: Aktualizace instrukcí: Buď detailní, ověřuj, buď kritický, hledej "unknown unknowns", preferuj jednoduchost.
- 2026-02-08: Požadavek na CRM: Řešení "nasraných rodičů" a přetíženého ředitele.
- 2026-02-08: Rozhodnutí: Externí Nástroje.
- CRM: HubSpot (Free). Pro správu Leadů a historii komunikace. Skvělá integrace s GMail a GCal.
- Project Management: Asana (Free). Pro interní úkoly školy. Turn emails to tasks (Gmail add-on).
- Komunikace: Kosmo bude generovat reporty a posílat je přes API (Resend/Mailgun) a logovat kopii do HubSpotu.
- 2026-02-08: Požadavek: Google Workspace Integrace. Vybrané nástroje musí "hrát" s Googlem (SSO, Gmail, Calendar, Drive). HubSpot i Asana toto splňují na jedničku.
- 2026-02-08: Požadavek: Ankety. Rychlý sběr dat od rodičů (např. "Zájem o kroužek", "Účast na brigádě").
- 2026-02-08: Vize: Podpora rodičů ("Doma"). Po metodické podpoře učitelů bude cílem nabídnout rodičům nástroje/tipy pro rozvoj dítěte doma (v souladu s Montessori).
- 2026-02-08: Rozhodnutí Auth: Google + Apple + Magic Link. Maximální pohodlí. Rodič si vybere. Žádná hesla na tvrdo.
- 2026-02-08: Požadavek: Export do Excelu. Škola "žije v Excelu" (evidence žáků, výkazy). Aplikace musí umět exportovat data (seznamy, docházka, hodnocení) do .xlsx.
- 2026-02-08: Požadavek: Export do Spreadsheets. Kromě Excelu i přímý export do Google Sheets (ideálně "Otevřít v Google Sheets").
- 2026-02-08: Požadavek: Dev/Stage/Prod. Bezpečný vývoj. Nic nejde rovnou do produkce. Nutnost testovacího prostředí.
- 2026-02-08: Konzultace: Domény. Současný stav (zs-sofie.cz + ms-sofie.cz) je tříštivý. Učitelé a rodiče kráčejí napříč.
- 2026-02-08: Rozhodnutí Doména: sofie.education. Moderní, sjednocující brand. Aplikace poběží na
app.sofie.education(nebokosmo.sofie.education). - 2026-02-08: Rozhodnutí Tooling: pnpm (pro JS/Next.js) + uv (pro Python scripty).
pnpmje pro Node.js to, couvpro Python (rychlost, DX). - 2026-02-08: Uživatel preferuje moderní, responzivní "Vibe Coding" přístup. Navržen Next.js + Supabase.
- 2026-02-08: Zjištěn kontext: Montessori škola, náhrada MS365 za Google, důraz na automatizaci (metodické listy, reporty) a AI.
- 2026-02-08: Upřesnění priorit:
- Komunikace s rodiči (řešení informačního vakua).
- Evidence práce (digitalizace, služba žáků).
- Integrace (ŠkolaOnline).
- Vize "Sokratova průvodce" (AI společník pro žáka).
- Metodické listy (určitě potřeba, ale není lowest hanging fruits).
- 2026-02-08: Důraz na "AI First" přístup. Aplikace má být centrálním mozkem.
- 2026-02-08: Začínáme s fází sběru požadavků.
- 2026-02-08: Vytvořeny základní dokumenty Kontext a Vize, Uživatelé a Role, Požadavky v adresáři
docs/.
Workflow
- Při každé významné změně nebo nové informaci aktualizuj tento soubor nebo příslušné dokumentační soubory (Kontext a Vize, Uživatelé a Role, Požadavky).