Přeskočit obsah

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.yml definuje 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 od e9521f1 (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.yml legacy: CLAUDE.md uvadi "dify/ Legacy (nepouzivat)". Adresar je v repu, soubor sofie-chatflow.yml zustal. 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 po mkdocs build. Bez impactu, jen nepatrny noise pri ls.

N1 — Smazat legacy artefakty z root repa

  • Co: smazat soubory extract_pdf.py, main.py, pyproject.toml, uv.lock, kosmo-dokumentace.zip, .venv/, .python-version z root repa. README.md prepsat na Next.js-only. pnpm nesedi s uv instrukcemi.
  • 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). Soubory main.py/extract_pdf.py jsou stub helpery z initial commitu, neslouzi nicemu. .venv/ v gitu (ne gitignored stary - je v gitignore, ale slozka existuje na disku — nevadi). kosmo-dokumentace.zip 820 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.md sekci "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). Pridat infra/backups/ do .gitignore. Zvazit git filter-repo pro 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 StudentClassTabs ma sirsi uziti nebo patri vedle classbook/. Pokud je class-tabbing-only, presunout dovnitr components/classbook/ pro koherenci.
  • Proc: Soubor zije v root components/ vedle AppHeader.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.sql do 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/ existuje pnpm-workspace.yaml. web/ ale neni monorepo (jediny package). Bud smazat soubor, nebo zdokumentovat zamer.
  • Proc: Mate-li package na rootu (package.json) co provadi pnpm --dir web ..., workspace soubor v web/ je matouci. Mensi noise.
  • Effort: S
  • Schvaleno PO

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.md nebo docs/ideas.md jako "moznosti, ne plan". RFC-knowledge-graph.md ulozit do docs/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 v pyproject.toml. Docs zustanou jako markdown v docs/ (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.yml ukazuje 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 n8n workflow 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.md planuje 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