Retro: 2026-05-11 (okno: bootstrap / cela historie repa)
Author: process-analyst
Window: 2026-02-08 (initial commit f6a727c) -> 2026-05-11 (HEAD e7320f6)
Commits: 79
Sessions analyzed: bootstrap retro, session history neni reprezentativni pro starsi commity
Souhrn
Repo prochazi tridi fazi: (1) docs-only brainstorm (feb-mar 2026), (2) self-hosted stack experimentu na GCP VM s Dify/Plane/ERPNext/Odoo (mar 2026), (3) clean-slate Next.js MVP tridnice (apr-may 2026). Faze 1 a 2 nechaly v repu znacny balast — legacy dify/ adresar, infra/docker-compose.yml obsluhujici 7 sluzeb na sdilene VM, zalohy v gitu, Python uv scaffolding pro MkDocs ktery uz neni potreba. Aktualni kod (web/src/, 3 migrace) je naopak chudy, koherentni a discipliny ARCHITECTURE.md drzi (Zod schemas, RLS pres role, relacni model). Vetsi cast docs popisuje aspirace ze stare faze a neodpovida realite kodu — to vyresi doc-curator. Hlavni dluh je infrastruktura a docs balast, ne kod.
Hlavni rizika (red flags)
- R1 — Disabilita mezi aspiraci a realitou docs: DEV-LOG.md cely druhy half popisuje dashboard/posts/events/tasks/excuses/departures/parent UI a n8n posts AI workflow — to vsechno bylo 2026-04-22 vymazano clean-slate resetem. Kdokoliv (clovek nebo agent) si naloaduje DEV-LOG, dostane falesny obraz stavu. Doc-curator dostane jasny ukol, ale flagnuto zde, aby PO vedel.
- R2 — Nesoulad CLAUDE.md vs realita: CLAUDE.md tvrdi ze pouzivame Listmonk (Faze 2+), Twenty CRM (napojeni planovano), BookStack KB, pgvector RAG. V
web/neexistuje zadna integrace ani s jednou z techto sluzeb. Sluzby bezi (ci nebezi — neoverene) na GCP VM, ale v aplikaci se neprojevuji. Cele Fazi 2+ skore na knowledge graphu, gamifikaci, document generation pres Typst, learning tools — vsechno aspirace, nic v kodu. - R3 — Self-hosted stack rotting:
infra/docker-compose.ymldefinuje 7 sluzeb (traefik, postgres, redis, twenty + worker, n8n, listmonk, bookstack + db) na jedne e2-small VM (typicky 2 GB RAM). Vznikl v mar 2026, zadne commity ode9521f1(konsolidace Dify->n8n). Pravdepodobne nezmenen mesice, neoveritelne zda vse jeste bezi a co se utili pamatovou tlaci. Pripadne tlaci na fakturu GCP tise. - R4 — Zalohy databazi commitnute do gitu:
infra/backups/obsahuje 6.9 MB sql dumpu, postgres + twenty + redis dump, commitnute na ostro. Postgres dump z mar 2026 muze obsahovat osobni data (Twenty CRM kontakty reditelu, n8n credentials hashe). Nesmi zustat v public repo historii bez auditu. - R5 —
dify/sofie-chatflow.ymllegacy: CLAUDE.md uvadi "dify/ Legacy (nepouzivat)". Adresar je v repu, souborsofie-chatflow.ymlzustal. Mentalni rezie pro nove agenty — "fakt to nepouzivame?". Funguje jako matouci pamatka. - R6 — Monitoring nakladu = zadny: Vertex AI/Gemini volani jdou pres n8n na ai.sofie.education. Zadny dashboard nakladu, zadny budget alert v GCP, zadny soubor s mesicnim trackingem. Faze 2 ma nahrat workflows ktere mohou spustit smycky (newsletter generation, post AI processing). Bez monitoring se nedovi, dokud GCP neposle ucet.
- R7 —
site/dir 277 MB v repu, ale gitignored: OK ze je gitignored, ale stoji 277 MB na disku a zustava pomkdocs build. Bez impactu, jen nepatrny noise pri ls.
Navrhy ke schvaleni
N1 — Smazat legacy artefakty z root repa
- Co: smazat soubory
extract_pdf.py,main.py,pyproject.toml,uv.lock,kosmo-dokumentace.zip,.venv/,.python-versionz root repa. README.md prepsat na Next.js-only.pnpmnesedi suvinstrukcemi. - Proc: Python uv scaffolding byl zaveden pro MkDocs, ale MkDocs jiz nepouzivame produkcne — site/ neni deployovany kamkoli (mkdocs.yml site_url ukazuje na
kosmo.sofie.education, ktera neexistuje). Souborymain.py/extract_pdf.pyjsou stub helpery z initial commitu, neslouzi nicemu..venv/v gitu (ne gitignored stary - je v gitignore, ale slozka existuje na disku — nevadi).kosmo-dokumentace.zip820 KB binarka v gitu. - Dopad: cistsi root, jednoznacny stack message (Node only), -1 MB git diff, -800 KB binarka.
- Effort: S
- Schvaleno PO
N2 — Pridat budget alerty + cost tracking
- Co: V GCP zapnout budget alerty na sofie-education projekt (Vertex AI, Compute Engine) — napr. $20/mesic prah. V Supabase otevrit usage dashboard a poznamenat baseline (rows, requests, storage). Vercel: zapnout email alert na bandwidth/build minutes. Vlozit do
docs/DEPLOYMENT.mdsekci "Naklady — baseline a alerty" s odkazy a baselinem. - Proc: Solo dev s vibe-coded loop hrozi tisi spalujici kredity. Bez baseline neumime detekovat regresi. Pareto: 30 min prace = trvaly safety net.
- Dopad: trvaly safety net, podklad pro budouci retro.
- Effort: S
- Schvaleno PO
N3 — Audit a vyrazeni infra/backups/ z git historie
- Co: Smazat
infra/backups/ze working tree (presunout na GCP VM nebo lokalni disk mimo repo). Pridatinfra/backups/do.gitignore. Zvazitgit filter-repopro vyhozeni z historie — Twenty CRM dump muze obsahovat osobni data reditele/ucitelu, n8n redis dump muze obsahovat credentials hashe. - Proc: GDPR + secret hygiene. Repo neni public (zatim?), ale pokud bude, je to retroaktivne pruser.
- Dopad: snizene riziko leaku, mensi repo.
- Effort: M (filter-repo + force push, koordinace pokud existuji jine clones — solo dev = nizke riziko)
- Schvaleno PO
N4 — web/src/components/StudentClassTabs.tsx location/scope check
- Co: Overit, zda
StudentClassTabsma sirsi uziti nebo patri vedleclassbook/. Pokud je class-tabbing-only, presunout dovnitrcomponents/classbook/pro koherenci. - Proc: Soubor zije v root
components/vedleAppHeader.tsx. AppHeader = global, StudentClassTabs = klasifikacni — patri jinam. Nizky-priority kosmetika. - Dopad: konzistentni adresarova struktura.
- Effort: S
- Schvaleno PO
N5 — Squash 3 migraci do jedne pred prvni produkci
- Co: Slouucit
20260422000001_init.sql+20260423000001_attendance_done.sql+20260423000002_default_teacher.sqldo nove single migrace pred deploy na produkci. Aktualni stav: 1 init (530 radku) + 2 mikro-fixy (4+7 radku) co melo byt soucasti init. - Proc: CLAUDE.md rika "zadna produkcni data, destruktivni migrace OK". Tedy: ted je posledni levna sance squashnout. Po nasazeni je squash bolestivy.
- Dopad: 1 migrace misto 3, snazsi reasoning o schematu, supabase db reset zustava cisty.
- Effort: S
- Schvaleno PO
N6 — Konsolidace docker-compose nebo vyrazeni VM
- Co: Rozhodnout, zda GCP VM
sofie-vm(Traefik + Postgres + Redis + Twenty + n8n + Listmonk + BookStack) skutecne potrebujeme. Pokud ne — vypnout, archivovat docker-compose. Pokud ano — zapsat do DEV-LOGu, ktere sluzby aktivne pouzivame a proc, a stanovit kvartalni revizi. - Proc: Vize aplikace je Next.js + Supabase + Vertex AI. Twenty CRM je v rozhodovaci tabulce CLAUDE.md, ale 0 integraci v kodu. BookStack KB se neuziva (zadna RAG cesta v kodu). Listmonk se neuziva (Faze 2+). n8n se uziva pro Sofie reformulaci — to je 1 workflow, lze pripadne presunout na Vercel cron + edge function, nebo na Inngest. Pravdepodobne sluzby tise spotrebovavaji RAM a privoz a sluzi 1 mailove orchestraci.
- Dopad: usetreni GCP nakladu (e2-small ~$15/mesic + traffic), mensi udrzbova plocha.
- Effort: M (revize co se aktivne pouziva + decision)
- Schvaleno PO
N7 — web/pnpm-workspace.yaml overit ucel
- Co: V
web/existujepnpm-workspace.yaml.web/ale neni monorepo (jediny package). Bud smazat soubor, nebo zdokumentovat zamer. - Proc: Mate-li package na rootu (
package.json) co provadipnpm --dir web ..., workspace soubor vweb/je matouci. Mensi noise. - Effort: S
- Schvaleno PO
Navrhy na odstraneni (Pareto cuts)
C1 — Smazat dify/ adresar
- Co ztratime:
dify/sofie-chatflow.yml(1 soubor) — exportovany chatflow z Dify, ktere uz nepouzivame. CLAUDE.md sam rika "Legacy (nepouzivat)". - Co ziskame: jasny signal "tudy ne", mensi mentalni rezie pro nove agenty, mensi adresarovy strom v rootu.
- Effort: S (1 minuta)
- Schvaleno PO
C2 — Smazat aspirations z docs/BACKLOG.md ktere nedavaji smysl
- Co ztratime: Casti BACKLOGu, ktere popisuji Document generation pres Typst (10+ otevrenych otazek W1-W6, D1-D6), Listmonk newsletter strategie, Transparent Classroom kurikulum tracking, Universal Knowledge Graph RFC — vsechno ambiciozni vize z faze brainstorm, daleko za horizontem solo-dev capacity.
- Co ziskame: BACKLOG.md se zmensi z 384 radku na ~100 prakticky-akcnich polozek. Vize ulozit do
docs/VISION.mdnebodocs/ideas.mdjako "moznosti, ne plan". RFC-knowledge-graph.md ulozit dodocs/archive/(nebo smazat — KISS). - Effort: M (decisions per polozka)
- Pozn.: Tohle ale patri doc-curatorovi, ne process-analystovi. Zde je to flag pro doc-curator runtu.
- Schvaleno PO
C3 — Smazat MkDocs setup nebo prestat budovat site/
- Co ztratime: MkDocs build (
site/277 MB),mkdocs.yml, MkDocs dependencies vpyproject.toml. Docs zustanou jako markdown vdocs/(GitHub render = dobry pro solo dev). - Co ziskame: -1 stack (Python jen kvuli MkDocs), -277 MB na disku, jednodussi mental model.
- Effort: S
- Pozn.: Pokud MkDocs opravdu pouzivame (deploy na kosmo.sofie.education) — ponechat. Aktualne site_url v
mkdocs.ymlukazuje na neexistujici subdomenu. Verify, decide. - Schvaleno PO
C4 — Smazat docs/GUIDE_AZURE_APP_REGISTRATION.md
- Co ztratime: Navod pro propojeni Twenty CRM s Microsoft 365 SSO.
- Co ziskame: -104 radku docs balastu. Pokud Twenty bude vyrazen (viz N6), pak nema smysl. I pokud zustane, je to operational runbook ktery nepatri do projektovych docs.
- Effort: S
- Pozn.: Doc-curator dostane signal.
- Schvaleno PO
C5 — Smazat docs/curriculum/ z hlavniho repa
- Co ztratime: 22 predmetu × 2 soubory (JSON + MD) = 44 souboru, ~240 KB, Montessori kurikulum Elementary 6-12 z Transparent Classroom. Ve
web/se nepouziva. - Co ziskame: cisti repo. Kurikulum patri do datove vrstvy (seed do DB pri implementaci kompetenci, viz Faze 2 v BACKLOGu), ne jako staticky dokumentacni dump. Pokud nasazujeme kompetence — udelat z toho seed/migrace. Pokud ne — neni dovod to v repu mit.
- Effort: S (move + decide)
- Schvaleno PO
Rewrite candidates
RW1 — n8n single workflow -> Vercel Edge Function nebo Inngest
- Co: Workflow "Sofie — Reformulace pro rodice" je jediny aktivne pouzivany n8n flow. Cely n8n stack (kontejner na GCP VM, postgres pro state, Traefik routing) sluzi 1 workflowu volajicimu Gemini.
- Cil: Vercel Edge Function nebo Inngest cron — primo zavolat Gemini API z Next.js backendu.
- Effort: M (jeden endpoint v
web/src/app/api/sofie/reformulate/route.ts+ presun promptu) - Usetreny effort udrzby: vypadnuti cele kategorie problemu — n8n upgrades, Traefik routing fixes, GCP VM RAM tlak, Postgres backup n8n state. Historie commitu ukazuje 10+ fixu kolem n8n/Traefik/MinIO/Plane v marci. Tomu se vyhneme.
- Trade-off: ztracime vizualni editor pro non-tech. Sofie reformulace ale neni editovana ne-dev userem, jen ladena.
- Doporuceni: VYBRAT pokud
n8nworkflow zustane jediny aktivni. Pokud planujeme posts AI processing + email ingest + chat workflow (3+ workflows) — n8n ma smysl drzet.
RW2 — BookStack KB -> nekosit, nepouzivat
- Co: BookStack je v docker-compose, ma vlastni MariaDB, ale v aplikacni vrstve neexistuje napojeni. CLAUDE.md zminuje "pgvector v Supabase + BookStack KB" — to je vize, ne realita.
- Doporuceni: Nepouzivat. KB nahradit
docs/markdownem + embeddings (pgvector) az to bude potreba (Faze 2+). BookStack vyradit z docker-compose. Greenfield optionality — neni za co optimalizovat, neni se ceho vzdat. - Effort: S (vypnuti sluzby)
RW3 — Vlastni PM Kanban v Kosmu — zrusit
- Co:
docs/BACKLOG.mdplanuje vlastni PM modul v Kosmu (zasvecena priloha). Resit triplu nadbytecne. - Doporuceni: pouzit Todoist/Linear/Trello externe. Solo dev nepotrebuje vlastni PM modul, a urcite ne v aktivni MVP appce. Zruseni navrhu = -10 % BACKLOGu.
- Trade-off: 0. Tomas ma vlastni PM tool.
RW4 — Listmonk -> Resend transactional + manualni MailChimp/Buttondown pro newsletter
- Co: Listmonk bezi na VM, 0 napojeni. Newsletter strategie planovala mesicni newsletter pro ~150 rodin.
- Doporuceni: pokud newsletter prijde na radu — pouzit Resend (transakcni mail uz nastaveny per memory
project_email_infra.md) + napsat html sablonu rucne, posilat batchovane. 150 prijemcu / mesic je triviálni objem. Listmonk = over-engineered. - Effort: S (vypnuti)
Zadny dalsi rewrite candidate v aplikacni vrstve
Aplikacni kod (web/src/) je mlady (apr 2026), koherentni, KISS. Disabilita ARCH disciplines drzi. Zadny tlak na rewrite.
Naklady
- Vertex AI / Gemini: Neznamy, monitoring chybi. Jediny aktivni vyuziti = Sofie reformulace n8n workflow. Pravdepodobne <$5/mesic dokud nema produkcni traffic.
- Supabase: Free plan, neznamy stav (rows, requests). Doporuceni: zaznam baseline ted.
- Vercel: Free plan, neznamy stav. Sofie-kosmo.vercel.app deploy pri push do main.
- GCP VM (e2-small): ~$15/mesic baseline. Pokud sluzby na VM nejsou nutne (viz N6/RW1/RW2/RW4) — usetri se cely cost.
- Red flags:
- Zadny budget alert nikde.
- Smycky pres LLM v kodu jsem nenasel (n8n workflow je single-shot reformulace s Window Buffer Memory 10 zprav — bezpecne).
- Spici VM nakladovy dluh je jediny realny financni risk.
Gap analysis
USERS.md — co je slibeno, co je implementovano
| ID | Story | Stav |
|---|---|---|
| U-01 | "Otevru app a rovnou jsem v aktualni hodine" | Implementovano (cross-class day view, slot-level ownership v commit c716962) |
| U-02 | "Kdo chybi?" toggle docházky | Implementovano |
| U-03 | Auto-carryover docházky predchozi -> dalsi slot | NEOVERENO v kodu, vyzaduje audit (architect deep-dive?) |
| U-04 | Pridat tema + assign rocniku jednim chipem | Implementovano (AddTopicDialog + TopicAssignmentEditor) |
| U-05 | Cross-rocnik assignment (Anicka u ctvrtaku) | Implementovano dle DEV-LOGu, neovereno |
| U-06 | Sekce "Neprirazeni" jako safety net | NEOVERENO v kodu |
| U-07 | Indikator kompletnosti hodiny (tema + dochazka) | NEOVERENO v kodu |
| U-08 | Evidence zaku, klik = volat/email | Implementovano (page zaci/[id]), klik-to-call NEOVERENO |
Gap: U-03, U-06, U-07, U-08 (klik akce) potrebuji verifikaci — to neni nova feature, to je QA dluh na zadanem MVP. Doporuceni: po dokonceni curate-docs spustit /ux-audit / na MVP routy.
VISION.md — kde se vzdalujeme
- Feed + Sofie: zcela mimo MVP, zminuje to USERS.md v "Roadmap vrstev" jako Faze 3+. Soulad s realitou. Bez gapu.
- Sofie persona: Cely SOFIE.md (435 radku) popisuje persona/chat/RAG/email pipeline — implementace = 0 v
web/, jen 1 n8n workflow pro reformulaci. Realisticky to neni gap, je to vize ktera nema termin. SOFIE.md by mel byt jasne oznacen jako "vision doc, ne implementacni plan". - Multi-channel komunikace (Walled Garden): 0 v kodu. Ok, je to Faze 3+.
- Vetsi cast strukturni docs (work_items, feed_events, vyzvedavani, omluvenky, kompetence): 0 v kodu. Bylo to v predchozi iteraci, 04-22 reset to vyhodil. Soulad s USERS.md MVP scope. Bez urgentniho gapu, ale ARCHITECTURE.md je radne zastaraly — doc-curator job.
REQUIREMENTS.md / DATAMODEL.md
Neauditovany v ramci tohoto bootstrap retra — necham doc-curatorovi.
Sub-reports (z delegovanych agentu)
Zadne delegace nebyly potreba. Bootstrap retro je dostatecne pokrytelne procesnim pohledem. Doporuceni pro PO:
- Po retro merge spustit doc-curator bootstrap — sladi 14 docs souboru s realitou kodu (zejmena DEV-LOG, BACKLOG, ARCHITECTURE).
- Po doc-curator spustit
/ux-audit /na MVP routy (Day/Week view) — verifikovat U-03, U-06, U-07, klik-to-call. - Pokud PO schvaluje RW1 (n8n -> Edge function) delegovat architect-review pred implementaci.
Continuity
Prvni retro v repu. Continuity zacne pristim runem.
Souhrn k vyplneni PO:
- Navrhu ke schvaleni (akce/zmena): 7 (N1-N7)
- Pareto cuts (odstraneni): 5 (C1-C5)
- Rewrite candidates: 4 (RW1-RW4 — RW1 aktivni, RW2/RW3/RW4 = "nedelat to")
- Total polozek: 16