Steven
Steven6 min čtení

Schůzky, které zase najdete: vydání s timeline

GeekBye v1.7.3 nahradil dropdown se schůzkami skutečnou timeline — lidsky psaná data, vyhledávání, breadcrumb, který říká, ve které schůzce jste. Pod povrchem: souboj s automatickým výběrem, screenshot, který předchází vlastní schůzce, a pět oprav pro Windows za dvacet osm minut.

Inženýrství
UX
Desktop
Vydání GeekBye
Schůzky, které zase najdete: vydání s timeline

V lednu 2026 měli uživatelé GeekBye problém s historií. Aplikace jejich schůzky bez problémů nahrávala a analyzovala — a pak je zakládala do dropdownu. Dropdown je v pořádku pro tři položky. Kolem patnácté schůzky se „ten pohovor z minulého úterý" proměnil v archeologickou expedici skrz identicky vypadající řádky. v1.7.3 — 64 commitů mezi polovinou prosince a 16. lednem — je vydání, ve kterém se schůzky staly něčím, co zase opravdu najdete.

(Jedna účetní poznámka, protože git historie je poctivá, i když čísla verzí nejsou: neexistuje release tag v1.7.2. Verze byla zvednutá, ale další vydaný tag byl v1.7.3, takže opravy pro Windows z éry v1.7.2 se svezly v tomto vydání.)

Z dropdownu na timeline

Hlavní změna je jeden pull request: 12 souborů, +640 řádků, většina z nich nová komponenta MeetingsTimeline o 381 řádcích. Dropdown se stal rolovatelnou timeline karet schůzek, seskupených do čtyř košů — Today, Yesterday, This Week, Older (dnes, včera, tento týden, starší) — s daty vykreslenými tak, jak by je řekl člověk: Today, 2:30 PM, Yesterday, 2:30 PM, Mon, 2:30 PM pro aktuální týden a Jan 5, 2:30 PM dál do minulosti. Cmd/Ctrl+K zaostří vyhledávací pole, které filtruje podle názvu. Detail schůzky se stal skutečnou navigační stránkou, takže tlačítka zpět a vpřed v navbaru konečně něco znamenají, a breadcrumb přestal ukazovat „Meetings / Meeting" a začal ukazovat „Meetings / Interview with John" (zkrácený trojtečkou, protože vždycky se najde někdo, kdo pojmenuje schůzku jako román).

Spolu s tím vyšly dvě drobnosti pro pohodlnější život: tlačítko pro smazání uvnitř zobrazení schůzky (které vás po smazání vrátí zpátky na timeline, místo aby vás nechalo trčet na mrtvé stránce), a automatická navigace — když poslechová session skončí se skutečným obsahem přepisu, dashboard se otevře rovnou na detailní stránce té schůzky. Ukončíte hovor, vidíte schůzku. Sessions, které skončí prázdné, se potichu smažou, místo aby zaplevelovaly timeline.

Souboj, který si vytvoříte vylepšením navigace

Tady je ta část, kterou vám changelog neřekne. Starý seznam schůzek měl zvyk: při každém načtení automaticky vybral nejnovější session. Neškodné, dokud byl seznam dropdown, na který jste skoro nesahali. Fatální v okamžiku, kdy se schůzky staly stránkou, po které navigujete: kliknete na schůzku č. 5, na pozadí doběhne refetch a seznam ochotně vybere nejnovější schůzku — a přepíše volbu, kterou jste udělali před dvěma sekundami. Oprava nebyla chytřejší pojistka; bylo to úplné smazání automatického výběru. Každý seznam, který vybírá věci za uživatele, nakonec začne s uživatelem bojovat.

Jeho odstranění odhalilo druhý souboj. Automatická navigace skáče na schůzku v okamžiku, kdy její session skončí — což může být dřív, než ta session dopíše do lokální SQLite databáze. Navigujte příliš rychle a dorazíte ke schůzce, která ještě neexistuje. Vydaná oprava je prodleva 500 milisekund před načtením sessions při příchodu do detailního zobrazení a navigační handler si nese vlastní pojistky — počkat na did-finish-load okna plus 100ms, pokud byl dashboard právě vytvořen, 50ms, pokud už byl otevřený. Náš výklad: navigace na konci session překračuje tři časové domény — zápis do databáze, načtení okna a React mount — a každá z nich dostala vlastní malou prodlevu. Funguje to, a řekneme to na rovinu: hromádka magických čísel je poctivě přiznaný dluh, ne vítězství.

Screenshot, který předchází vlastní schůzce

V tomto vydání zemřel ještě jeden předpoklad: „screenshoty patří k session právě tehdy, když byly pořízeny během ní." Naprosto logické. Špatně. Skuteční uživatelé mačkají Cmd+H na pracovním inzerátu, na agendě, na kódu, o kterém se chystají mluvit — ještě před stisknutím Start. Záložka Report párovala screenshoty s časovým rozsahem session striktně, takže tyhle přípravné screenshoty zmizely přesně z toho reportu, pro který byly pořízeny. Oprava rozšířila okno párování o 60 sekund před začátek session. (Samotná mašinerie časových rozsahů je starší — potichu vyšla ve v1.6.15; příspěvkem v1.7.3 je, že ji naučil, že schůzky začínají o chvíli dřív, než začnou.)

Pět oprav za dvacet osm minut

Historka z fronty tohoto vydání není vůbec v timeline — je v onboarding overlayi na Windows a je to učebnicový řetěz „oprav tu opravu": pět commitů mezi 10:50 a 11:18 téhož dopoledne.

Hlavní okno GeekBye používá mouse passthrough — hook, který při každém pohybu myši přepíná setIgnoreMouseEvents Electronu, aby kliky propadávaly skrz průhledné oblasti. Během onboardingu na Windows se tenhle hook pral s overlayem tutoriálu a v kroku, kdy se objeví okno dashboardu, aplikace zamrzla. Oprava jedna: ať hook nedělá nic, dokud je onboarding aktivní. Mír skrze odzbrojení.

Jenže teď nereagovala tlačítka onboardingu, protože přeposílání událostí doručovalo kliky oknu dashboardu pod overlayem. Opravy dvě a tři šťouraly do forward: false pro každý wizard zvlášť. Pak přišel commit, který našel skutečnou hlavní příčinu: když se otevře okno dashboardu, jeho drag handler resetuje hlavní okno do režimu click-through — a první oprava udělala passthrough hook pasivním, což znamenalo, že nezbylo nic, co by ten zásah korigovalo. Skutečná oprava strategii obrátila: hook teď během onboardingu při každém pohybu myši aktivně znovu prosazuje setIgnoreMouseEvents(false), právě proto, že ho externí kód může kdykoli resetovat. Zároveň smazala 75 řádků dřívějších obezliček pro jednotlivé wizardy.

A i pak přišel pátý commit, protože vyhrát válku o vstup neznamená vyhrát válku o z-order: overlay i dashboard seděly na stejné always-on-top úrovni a Windows zvedají nahoru to okno, které dostane fokus. Overlay se přestěhoval na vyšší úroveň okna a po objevení dashboardu se s prodlevou sám znovu zvedne navrch. Ten oblouk stojí za zapamatování: pasivní oprava, která odzbrojí vašeho jediného obránce, je horší než původní boj.

Tři věci, které nás toto vydání naučilo

  1. Vylepšení navigace vytahují na povrch chyby ve stavu. Souboj s automatickým výběrem existoval už před v1.7.3; dropdown vám ho prostě nikdy nedal pocítit. V okamžiku, kdy se schůzky staly stránkou, po které vědomě navigujete, se každý kus kódu, který vybíral věci za vás, stal chybou.
  2. Časové hranice kolem záměru uživatele potřebují vůli. Sessions, nahrávky, reporty — uživatelé jednají o chvíli dřív a o chvíli později, než zní oficiální okno stroje. Buffer 60 sekund pro screenshoty je jeden řádek, který odráží, jak se lidé doopravdy chovají.
  3. Nikdy nedělejte svůj korekční kód pasivním. Zamrznutí na Windows si vyžádalo pět oprav, protože oprava jedna vypnula jediný mechanismus, který mohl vnějším zásahům čelit. Pokud může nějaký jiný kód váš invariant kdykoli rozbít, vaše práce je prosazovat ho znovu a znovu, ne složit zbraně.

Předchozí kapitolu příběhu v1 — stavbu dvou brandovaných aplikací z této jedné codebase — najdete v jedna codebase, dvě aplikace: jak na white-label bez forku (v1.7.1); a celý oblouk v anatomii dodávání softwaru k dokonalosti.