myHHD

Pod kapotou

Jak je myHHD postavená

Pro zvědavé: technologie, testy, architektura a čísla. Všechno na této stránce se spočítá samo při každém nasazení. Popisuje verzi 1.0.1 ze dne 11. 11. 2026. English

737
jednotkových testů výpočtů, ukládání a synchronizace
294
běhů testů v prohlížeči, na iPhonu i v Chrome
13
známých zranitelností v použitých knihovnách (npm audit)
102kB
stáhne prohlížeč při prvním spuštění, po kompresi

Testy

Bez zelené se nenasazuje

Zdravotní záznamy a zásoby materiálu nesnesou chybu ve výpočtu. Nasazení proto samo spustí kontrolu typů a všechny testy. Když cokoli selže, nová verze se nevydá.

Jednotkové testy

737 testů v 78 souborech (Vitest): spotřeba, předpověď, objednávky, rozvrh, opravy a storna, kontrola vstupů.

Testy v prohlížeči

147 scénářů v 40 souborech (Playwright). Každý běží na iPhonu 13 mini (WebKit, jádro Safari) i v Chrome na počítači.

Krizové scénáře synchronizace

Dvě zařízení zapisují bez signálu, výpadek uprostřed synchronizace, poškozený nebo smazaný soubor na Disku, obnovení ze zálohy. Nic se nesmí ztratit ani zdvojit.

Přístupnost a vzhled

Automatická kontrola přístupnosti (axe), kontrast textu ve světlém, tmavém i kontrastních režimech, změřená velikost a barvy tlačítek.

Výkon

Vygenerovaná historie za 10 let, asi 25 000 záznamů. Přepočet stavu musí zůstat pod 50 ms.

Skutečná historie

Výpočty se porovnávají i s historií vedenou dřív v tabulce. Skutečná data zůstávají mimo repozitář, v něm je jen uměle vytvořená sada se stejnou strukturou.

Architektura

Deník jako řada událostí

Aplikace neukládá „aktuální stav“, ale každou akci jako samostatnou událost. Zásoby, deník i předpověď se z nich pokaždé dopočítají (event sourcing).

  1. Zápis

    Dialýza, závoz, inventura i oprava vznikne jako nová událost s jedinečným ID (UUID v7, seřaditelné podle času).
  2. Zařízení

    Událost se hned uloží do IndexedDB v zařízení. Nic se nepřepisuje ani nemaže, jen přibývá.
  3. Google Disk

    Na pozadí se nahraje do měsíčního souboru zařízení na vašem Disku, k tomu denní záloha. Ostatní zařízení si ho načtou.
  4. Výpočet

    Stav se dopočítá ze všech událostí. Oprava i storno jsou další události a výsledek nezávisí na pořadí, v jakém přišly.
  • 19 typů událostí
  • formát dat verze 2
  • oprava = nová událost
  • zápis nejdřív do zařízení

Jak vznikla

Postaveno s Claude Code

Aplikaci myHHD autor nepsal sám. Většinu kódu, testů, překladů do 15 jazyků i této stránky napsal Claude Code, programovací asistent s umělou inteligencí od společnosti Anthropic.

Autor určuje, co má aplikace umět a jak má vypadat, rozhoduje o každé změně a všechno zkouší na vlastním iPhonu v běžném provozu. Pravidla, která Claude při práci dodržuje (ochrana dat na prvním místě, události se nikdy nemažou, žádná doporučení k léčbě, bez úspěšných testů se nenasazuje), jsou sepsaná v repozitáři a velkou část z nich hlídají automatické testy.

Nejdřív zhruba týden příprava: autor sepisoval zadání a promýšlel technické řešení. Vývoj začal, až když byla jasná kostra zadání i technologie. Všechno podstatné pak vzniklo za 5 pracovních dní, včetně všech 737 jednotkových testů. Zbytek se ladí za běhu, při autorově vlastní domácí dialýze.

  • asi 1 týden zadání
  • 5 pracovních dní vývoje
  • ladění za běhu
Vyzkoušejte Claude Code

Technologie

Z čeho se skládá

Progresivní webová aplikace (PWA): běží v prohlížeči, dá se nainstalovat na plochu a funguje bez signálu. Žádný framework na serveru, žádná databáze u autora.

Knihovna a verze K čemu slouží
Svelte 5.57.2 Rozhraní. Kompiluje se do malého JavaScriptu bez běhového frameworku.
TypeScript 6.0.3 Typy ve striktním režimu, chyby se najdou před spuštěním.
Vite 8.3.4 Sestavení a rozdělení kódu na části, které se načtou až při potřebě.
vite-plugin-pwa 2.0.0 Service worker (Workbox): celá aplikace v zařízení, aktualizace na pozadí.
Dexie 4.4.6 Úložiště IndexedDB v prohlížeči.
Tesseract.js 7.0.0 Čtení dodacích listů z fotky přímo v zařízení (WebAssembly).
jsPDF 4.2.1 Exporty a objednávky do PDF.
write-excel-file 4.1.1 Exporty do Excelu (XLSX).
uqr 0.1.3 QR kódy pro platbu v sekci O autorovi.
Cloudflare Workers 4.151.1 Hosting a výměna přihlašovacích klíčů Google. Zdravotní data sem nechodí.
Claude Code Programovací asistent od Anthropicu, napsal většinu kódu, testů a překladů.
Vitest, Playwright, axe 5.0.5 · 1.64.1 · 4.14.0 Jednotkové testy, testy v prohlížeči, kontrola přístupnosti.

Kód

V číslech

48 918
řádků kódu aplikace v 199 souborech, z toho 73 komponent Svelte
12 602
řádků testů
16
jazyků, 23 411 řádků textů rozhraní
700
commitů a 292 nasazení

Bezpečnost a soukromí

Data nemají kam utéct

Přísná Content Security Policy

Prohlížeč smí spouštět jen skripty z webu myHHD a posílat data jen sem a na Google Disk. Ani chyba v knihovně tak záznamy nepošle jinam.

Minimální oprávnění

drive.file: aplikace na vašem Disku vidí jen soubory, které sama vytvořila.

Přihlášení OAuth s PKCE

Dlouhodobé oprávnění zůstává v zařízení. Malá funkce na Cloudflare jen vymění klíče, nic neukládá a zdravotní data nikdy nedostane.

Bez sledování

Žádné cookies, analytika ani reklamy. Hlášení chyby je e-mail s verzí a zařízením, bez zdravotních dat.

Málo závislostí

8 knihoven přímo v aplikaci (41 balíčků i s jejich závislostmi), 575 i s nástroji pro vývoj a testy.

Velikost

Do zařízení se uloží 2,4 MB, pak aplikace startuje bez sítě. Čtení z fotky (14,1 MB) se stáhne až při prvním použití, stejně jako PDF, Excel a jednotlivé obrazovky.