Enterprise platforma · Přispěvatelka

KPCS Projects
(Project Delivery)

167 commitů napříč enterprise platformou — scope tabulky, generování prezentací, AI asistent na mobilu, feedback modul, PDF s českou typografií.

KPCS Projects (projects.kpcs.cz) je interní enterprise platforma pro management projektů — plánování rozsahu (scope), PnL tracking, generování nabídek a prezentací, real-time spolupráce nad dokumenty a AI asistent. Velký Turborepo monorepo (2 apps + 6 packages) s tRPC, Cosmos DB a Azure AI Search.

Moje role byla Přispěvatelka — 167 commitů za 2,5 měsíce (24. 3. — 10. 6. 2026) napříč osmi modulárními oblastmi. Místo jednoho vertikálního feature jsem doručovala polish a feature work tam, kde to bylo nejvíc potřeba.

Role Přispěvatelka (167 commitů)
Typ Enterprise platforma
Období Březen — červen 2026
Technologie
Next.js 16 (App Router) React 19 TypeScript tRPC (37 routerů) Cosmos DB (38 kontejnerů) Azure AI Search Hocuspocus + Yjs (CRDT) Claude Opus 4.5 (MS Foundry) Entra ID Azure Container Apps Turborepo + pnpm 10 Bicep (8 modulů) TipTap editor

KPCS Projects pokrývá celý cyklus delivery: od commercial části (D365 opportunity, nabídka, scope) přes execution (Gantt, scope tabulka s PnL, meetings se Speech transcripcí) až po zákaznickou komunikaci (PDF nabídky, prezentace v Gammě, e-mailing).

Reálně se používá v produkci konzultanty na projects.kpcs.cz, beta verze na beta.projects.kpcs.cz. Vlastní package pro PDF rendering, Hocuspocus collaboration server pro multi-user editing TipTap dokumentů, integrace na Microsoft 365 (Outlook kontakty, Teams meetings, D365 Dynamics).

20 commitů v hlavní pracovní obrazovce platformy — scope tabulka, kde konzultant plánuje rozsah práce v man-days (MD). Co jsem přinesla:

  • Resizable sloupce s localStorage persistencí — šířka sloupců se pamatuje per uživatel mezi sessions (useColumnWidths hook, v2.146.2).
  • Rozpad povinné × volitelné MD v záhlaví projektu jako proporční vizuální bar — vždy viditelný, tučná čísla, bez nutnosti otevírat detail (HeaderStatsGrid).
  • Inline filtry v hlavičkách sloupců místo samostatného toolbar panelu (v2.207.0).
  • Toolbar totals reagují na filtry — Items / MD / Customer Effort se přepočítávají podle aktivních filtrů, ne podle celé tabulky.
  • Konfigurovatelný duration multiplier per projekt (v2.177.0).
  • UX bugfixy — sticky header s overflow řešením, Carl-created řádky nepřeblikávají při dalších úpravách, sloupec datum konce projektu se přepočítává po editaci v Ganttu (Czech datum parsing + filtr milníků).

16 commitů v editoru nabídek a v generování prezentací:

  • Presentation generation — výstup z detailní/plné nabídky do Gamma formátu (lib/gamma/content-builder.ts, v2.191.0).
  • Vložení .md souboru do nabídky — formátovaný i neformátovaný mód, drag & drop, oprava sloupců tabulky (MarkdownImportDialog, MarkdownImportButton).
  • Verzování nabídek — obnovení verze s okamžitou zpětnou vazbou, remount editoru pro reset stavu, filtr auto-break Yjs transakcí.
  • Czech typografie — desetinná čárka místo tečky v MD hodnotách, NBSP před českými předložkami.
  • TipTap stabilizace — table column alignment už neposouvá kurzor na konec, ochrana proti rozbití struktury při column-move přes Carla, psaní data v tabulce se nekonvertuje na číslovaný seznam.
  • EmailChipsInput — vložení Outlook kontaktů do pole „Příjemci" v průvodním e-mailu nabídky.

9 commitů v AI chatu (Carl) s důrazem na mobile:

  • Mobile bottom sheet dialog místo desktop popoveru (v2.190.0).
  • Draggable Carl button s edge snapping — uživatel si může posunout AI tlačítko po obrazovce a ono se přichytí ke kraji (v2.181.1).
  • Viewport boundary detection — fix bugu, kdy Carl button mizel mimo viewport po resize okna.
  • Input focus management během streamingu odpovědi — kurzor neuteče z input pole při příchozím chunk.
  • Config-driven Azure OpenAI deployment — deployment name přes config (gpt-41-mini), oprava broken classification flow.

16 commitů v in-app feedback systému (uživatelé hlásí bugy a nápady, admin tým řeší):

  • Admin pagination + server-side filtry assignee (v2.143.0, v2.147.1).
  • Assignee picker s návrhy v feedback adminu (v2.161.0).
  • E-mailové notifikace s deep linkem přímo na konkrétní feedback (v2.183.1).
  • Default status filter a lokalizované filter labels (v2.183.0).
  • TipTap mention editor nahradil legacy overlay textarea — @mentions v komentářích fungují konzistentně s editorem nabídek.
  • Modal UX fixes — AI analysis loop, layout shift, colored ikony, čištění input pole po odeslání komentáře, clickable URL v detail modalu.

17 commitů rozdělených mezi vlastní PDF renderer package a meeting modul s Azure Speech transkripcí:

PDF (packages/pdf-renderer/):

  • Page-map markery cestují s parentem přes page-break (stabilní indexace).
  • TOC accuracy — správné číslo stránky po regenerování.
  • České předložky s NBSP před následující slovo (typografická korektura).
  • Vypnuté auto-dělení slov v nabídkách (hyphens: manual).
  • Filename začíná opportunity number (řazení v Downloads / sdílení).
  • Sloupce v TipTap tabulkách s explicit colwidth a kontrastními borders.

Meetings:

  • Audio transcode pipeline — OGG/WebM/3GP/CAF konverze na WAV před voláním Azure Speech (řešilo problém s nekompatibilními iOS/Android formáty).
  • Czech topic generation jako default.
  • Sjednocený Teams meeting dialog mezi dashboardem a projektem.
  • NEW badge na tématech jen u live recordingu, ne u importu.
  • Search input ztrácel focus po každém znaku — fix.
  • Mobile shadcn DropdownMenu místo broken native dropdownů, scroll v CreateMeetingDialog.

Práce v existujícím codebase s 38 Cosmos kontejnery a 37 tRPC routery.

Hlavní disciplína nebyla psát nový kód, ale rozumět cizímu — najít správné místo pro změnu, neutéct mimo konvence, neudělat regresi v sousední featuře. SemVer pravidla v CLAUDE.md vyžadují CHANGELOG a RELEASE-NOTES update u každého commitu.

TipTap + Yjs CRDT synchronizace.

Editor nabídek je real-time multi-user (Hocuspocus server). Jakákoli změna struktury dokumentu musí projít Yjs transakcí; bugfixy jako „column-move v tabulce rozbíjel strukturu" vyžadovaly hard guards a deterministické table operace, ne přímé DOM změny.

Czech typografie v PDF a v editoru.

České předložky vyžadují NBSP před následujícím slovem (typograficky nepřípustné nechat „v" na konci řádku). Desetinná čárka místo tečky. Auto-hyphenation vypnutá. Šlo o desítky malých opatření v PDF rendereru i v ProseMirror schemech.

Azure Speech vstupní formáty.

Mobilní browsery nahrávají v OGG / WebM / 3GP / CAF. Azure Speech chce WAV. Před voláním transkripční služby tedy běží transcode pipeline — bez ní by Carl řekl „neumím tento formát".

Mobile-first pro feature postavený pro desktop.

Konzultanti používají Scope na laptopu, ale Carl chatu, meetings a feedback přistupují i z telefonu. Hodně zlepšení směřovalo k bottom sheet dialogům, draggable buttonům a fixům focus/scroll bugů, které na desktopu nikdo neviděl.

Z git logu autora schwubova@kpcs.cz:

167 commitů za 2,5 měsíce
~1,3 commitu denně (průměr)
8 modulárních oblastí
20 commitů ve scope tabulkách
16 v nabídkách / prezentacích
16 ve feedback modulu
17 PDF + meetings
9 v AI asistentovi Carl