↓ Přeskočit na hlavní obsah
2026 ›
1. 10.
čtvrtek, 17:00

Rodokmen jako noční obloha: matkarodu.cz

Od nápadu po vlastní doménu za jeden večer a noc: rodokmen, který si rodina vyplní sama, hvězdy místo tabulek, GDPR, doména za 160 Kč a jedenáct pull requestů.

Se ženou jsme se bavili o rodokmenu a při představě mých znalostí jsem si říkal, že bych rád věděl, jaký příbuzenský vztah je mezi těmi, co jim říkám strýčku a teto. Již dříve jsem koukal po řešeních, ale vše mi přišlo složité, nudné a škaredé.

Chtěl jsem, aby mi širší rodina pomohla vyplnit rodokmen. Formulář nikdo vyplňovat nebude, takže to musí být hra. Ve středu 30. 9. po práci jsem napsal zadání a ve čtvrtek ve tři ráno běží matkarodu.cz na vlastní doméně, s jedenácti zmergovanými pull requesty za sebou. Psal jsem já s Claude Code, oponenturu dělal Fable.

Noční obloha rodokmenu: vybraná osoba uprostřed s prstencem, kolem ní příbuzní spojení modrými, zlatými a růžovými čarami. Ukázka s vymyšlenými jmény.

Středa odpoledne: zadání
#

Představa byla jednoduchá. Přihlásím se jménem, bez hesla. Když je jméno v rodokmenu víckrát, web se zeptá na rok narození, a když nesedí, dál nepustí. Žádný výběr z možností. Pak uvidím své příbuzné jako hvězdy na obloze: kdo je vybraný, je uprostřed, ostatní se kolem něj rozestaví. Po kliknutí na souseda se celá obloha plynule přesune na nový střed, žádné skoky.

Než se začalo psát, AI se doptala na podrobnosti. Pohyb „jako na gumě“ jen při přesunu, jinak nic zbytečně nehýbe. Žádný GEDCOM, export někdy později. Adresa zatím tajná a odkaz rozešlu přes WhatsApp. Na Cloudflare smí odejít jméno, vztah a rok narození, celé datum ne.

Krátce po „zadání hotovo“ byla první verze. Hned za ní oponentura v samostatném agentovi. Našla dvě vážné věci: kontrola roku narození platila jen v prohlížeči, takže server šlo ptát pořád dokola, až by rok prozradil, a statické soubory šly stáhnout i bez přístupového kódu. Opraveno dřív, než jsem to vůbec viděl.

Odpoledne: ladění očima
#

Pak přišlo to, co za mě nikdo neudělá: dívat se a říkat, co je špatně.

  • Pohyb. „Mění se to hodně rychle, zpomal.“ „Ještě zpomal.“ Napotřetí sedí. Rozložení se teď spočítá předem a hvězdy na místo jen doplují.
  • Vztahy. Na první pohled nebylo poznat, kdo je rodič, dítě nebo sourozenec. Popisky jsem nechtěl, rozšíření a zúžení čáry stačí. Pak sourozenci: první návrh byl čárkovaně. Jenže sourozenci by se urazili, vypadá to, jako by jejich vztah byl méněcenný. Skončilo to takhle: rodiče a děti modrou čarou, která se zužuje, sourozenci zlatou a partneři růžovou, obojí stejně výrazné jako modrá.
  • Úpravy. Vztah šel vytvořit dvěma cestami, přidáním nového člověka a spojením dvou existujících. Jedna z nich neuměla vybrat typ vztahu. Teď je cesta jedna.
  • Drobnosti. Při přidávání se hledá jen v okolí osoby, ne v celé databázi. Návrh jde vybrat šipkou a Enterem. Přibyl světlý režim. Můj první nápad byla sněhová pokrývka s vločkami, nakonec je to obyčejný světlý vzhled a přepínač je běžná ikona. Vrátila se možnost označit někoho „už nežije“ bez data úmrtí, protože to tak u předků často je. Otázka „není to tatáž osoba?“ se ptá jen tam, kde opravdu může jít o duplicitu, ne u syna, který se jmenuje stejně jako otec.
Po kliknutí na jinou hvězdu se obloha přesune na nový střed. Modrá čára vede k rodičům a dětem, zlatá k sourozencům, růžová k partnerovi.

Pak šla první verze ven na dočasnou adresu Cloudflare Workers. Nasazovací skript se ladil za běhu. Potom jsem dal merge, aby byla první funkční verze v main. Všechno další už šlo přes samostatné větve a PR.

Večer: GDPR
#

Rodokmen jsou osobní údaje živých lidí. Otázka tedy byla, co musím omezit, aby se z rodinného koníčka nestala služba s povinnostmi.

Odpověď, kterou si nechám ověřit, kdyby to někdy šlo dál: rodokmen, který si vedu pro sebe a rodinu v uzavřeném okruhu, spadá pod výjimku pro osobní a rodinné účely (čl. 2 odst. 2 písm. c GDPR). Výjimka padá ve chvíli, kdy data vidí neomezený okruh lidí. Kdybych web nabízel cizím lidem pro jejich rodokmeny, byl bych provozovatel a GDPR by se mě týkalo. Na zemřelé se GDPR nevztahuje. Kdo klikne na „pozvat“, nerozhoduje, rozhoduje to, jestli okruh zůstane rodinný.

Z toho vyšla pravidla:

  • Veřejná je jen vstupní stránka s názvem, všechno ostatní je noindex a za pozvánkou.
  • Pozvat jde příbuzného nejvýš tři kroky od sebe. Dva kroky mi přišly moc omezující a tři kroky jsou pořád rodina. Zákon žádný počet kroků neurčuje.
  • Viditelnost podle vzdálenosti. Jméno žijícího člověka uvidíš do šesti kroků, rok narození do pěti, dál jen „žijící osoba“ se vztahy. Zemřelí jsou vidět vždycky.
  • Ochrana, kterou si nastaví každý sám. Jmenuje se Mustang podle karty z karetní hry BANG!. Kdo má před sebou vyloženého Mustanga, toho ostatní hráči vidí o jedno místo dál, takže hůř dostřelí. Tady je to stupeň 0 až 5, který se přičítá ke vzdálenosti, takže se jméno ukáže jen bližším příbuzným. U dítěte ochranu nastavuje rodič.
  • Výmaz je právo a beru ho jako fakt. Smaže se jméno a údaje, vztahy zůstanou, protože okolí ten vztah má, i když dotyčný být znám nechce.

Večer: doména
#

Rodokmen chtěl vlastní adresu. AI měla každý návrh rovnou ověřit ve WHOIS, ať nepálíme čas nad obsazenými doménami. Zkratky jako rdk.cz jsem zavrhl, protože jsou divné, a varianty s „předky“ mi neseděly. Pak mě napadla „matka rodu“. Vyšla volná, nikdo ji nepoužívá a nezní urážlivě. Pomlčka se v doménách nedoporučuje, protože se špatně diktuje, takže matkarodu.cz.

Zbytek večera byl provoz:

  • Registrátor. Moje dosavadní řešení bylo zbytečně drahé. Vedos stojí 160 Kč ročně, stejně za registraci i prodloužení, a má API. Forpsi měl akci za 99 Kč, která ten den končila, prodloužení je potom dražší. Web i DNS zůstávají na Cloudflare Free.
  • Kontakt a NSSET. Chvíli jsem řešil, jestli přes kontakt ve WHOIS nejde dohledat, které domény patří jednomu člověku. Nakonec jsem to zjednodušil na jeden kontakt a jeden NSSET pro všechno.
  • Zóna v Cloudflare přes Terraform s importem, protože jsem ji v dashboardu založil dřív. AI plán připravila, apply jsem pouštěl já.
  • DNSSEC s klíči od Cloudflare, ne s KEYSETem od starého registrátora.
  • Přepnutí. Před zveřejněním ještě jedna kontrola zabezpečení. Hlavní adresa je doména bez www, www přesměrovává a HSTS je zapnuté. Kontrola po nasazení hlásila chybu, ale nebyla to chyba webu. DNS na serveru se na doménu zeptalo před nasazením a odpověď „nic tu není“ si půl hodiny pamatovalo. Pozvánky jsem rozeslal znovu na novou adresu a dočasnou adresu na workers.dev jsme vypnuli.

Večer jsem napsal „nasazeno“.

Kolem půlnoci: rodina testuje
#

Netrvalo dlouho a přišla zpětná vazba od první skutečné uživatelky, mé ženy. Chtěla propojit dvě zemřelé příbuzné, které spojuje jen jeden člověk mezi nimi, a nešlo to. Původní pravidlo počítalo vzdálenost od toho, kdo vazbu přidává. Nové počítá vzdálenost mezi oběma spojovanými: nejvýš dva kroky, mezi dvěma zemřelými až deset. Aby AI mohla pravidla posuzovat nad skutečnými daty, dostala ke Cloudflare D1 přístup jen pro čtení.

Do půlnoci vznikly ještě dvě věci:

  • Správa pro mě. Pod mou osobou je odkaz na přehled změn a statistiky, abych viděl, co se v rodokmenu děje.
  • Ikona. Claude Design připravil pět návrhů. AI doporučovala srpek, protože je nejčitelnější v 16 pixelech. Vybral jsem „Souhvězdí rodu“: matka rodu jako zlatá hvězda a rodina, která se pod ní větví.
Ikona Souhvězdí rodu: zlatá čtyřcípá hvězda nahoře, pod ní se větví modré čáry ke dvěma a pak ke třem menším hvězdám, na tmavomodrém podkladu.

Čtvrtek mezi jednou a třetí ráno: velká obrazovka
#

Rodokmen budou číst hlavně lidé v mém věku a starší a ti sedí spíš u počítače nebo tabletu než u telefonu. Na velké obrazovce je tedy místo na víc detailu. Ukázku jsem viděl ještě před nasazením nad aktuální databází:

  • Prstenec kolem jména uprostřed. Při přesunu jede po čarách přes příbuzné ze starého středu na nový. Tohle byl můj nápad a AI ho dotáhla.
  • Větší písmo, celé roky místo ’29, víc lidí naráz, oběžné dráhy a v tmavém režimu Mléčná dráha. Všechno statické, nic se zbytečně nehýbe.
  • Panel osoby vpravo, legenda dole.

Ukázka pro každého
#

Kdo přišel na matkarodu.cz bez pozvánky, viděl jen název. Teď vidí živou ukázku. Je to kopie skutečného rodokmenu, ve které má každé jméno a příjmení náhradu a roky jsou posunuté o pár let. Vazby zůstaly skutečné, takže ukázka vypadá jako opravdová rodina. Generátor spadne, kdyby ve výsledku zůstalo jakékoli skutečné jméno. V ukázce jde přidávat i mazat, ale změny zůstanou jen v prohlížeči a na server nic nejde. Obrázky v tomhle článku jsou z ní.

Co dál
#

Web už je veřejný na vlastní doméně, takže končí fáze „rychle změnit a zkusit“. Poslední otázka byla, jak dělat code review, když aplikaci píšu jen já s AI. Za druhého člověka může sloužit Fable nebo jinak nastavený model. Plán je, aby oponenturu spouštěl cron na serveru v samostatné session, ne autor PR. Zatím je to jen plán.

Počet kroků, Mustang i pravidla pro vazby jsem určoval já a rodina, ne AI. Za jeden večer a noc se změnily několikrát a změní se znovu, až rodokmen začnou vyplňovat další příbuzní.

štítky: ai