Linka.
- 01 Vstup
- 02 Audit
- 03 Bannery
- 04 Ikony
- 05 Screeny
- 06 Šablona
- 07 Chrome
- 08 Předání
Grafik postavil výrobní linku pro restaurace. Ne generátor. Bannery, ikony, screeny do obchodů i celé eshopové šablony dělá Claude Code podle pravidel, která jsem sepsal z 13 let grafického a UI designu. A měří, co se dá změřit, dřív než chybu uvidí obchod, klient nebo zákazník.
- Zákazník
- Restaurace na objednávkové platformě
- Potřebuje
- Grafiku do dvou obchodů + eshop
- Dřív
- Ručně, klienta po klientovi
- Bannery · eshop, appka, Google Play
- Balík log · všechny sloty adminu
- 38 ikon · App Store + Google Play
- Screeny do obchodů · sada pro každý obchod
- QR kód na účtenku
- Posty a plakáty „Stáhni si appku“
- Eshopová šablona · desktop + mobil
Restaurace, která začne prodávat online, potřebuje překvapivě hodně grafiky. Bannery na eshop, do appky a na Google Play. Balík log ve všech rozměrech, které admin chce. Ikony do obou obchodů. Dvě sady screenů, protože Apple a Google chtějí každý něco jiného. QR kód na účtenku. Plakáty, že má appku. A navrch má samotný eshop vypadat jako ta restaurace, ne jako výchozí vzhled platformy.
Všechno se dělalo ručně a od nuly pro každého klienta. Řetězce se rozjížděly: jedna síť pizzerií měla 9 eshopů pro 11 provozoven ve třech různých podobách. Nikdo to tak nechtěl. Prostě to tak vzniklo, pobočku po pobočce.
„Každá restaurace potřebovala stejnou sadu a každá ji dostala vyrobenou od nuly. Ta práce nebyla těžká. Byla pořád stejná, a pokaždé se dala pokazit jinak.“
Linka, ne generátor. Stroj dělá opakovanou práci a měření. Vkus, značka a schválení zůstávají na člověku.
Generátor vám dá něco, co vypadá hotově. Linka vám dá něco, co prošlo kontrolou na každé stanici, a zastaví se, když kontrola neprojde. Každá brána kvality v ní je proto, že jednou něco prošlo.
- Vkus: co je dobré a co je slop
- Značka a komunikace s klientem
- Schválení nové práce; zakázky z Discordu kontroluje kolegyně
- Nahrání do adminu a do obchodů
- Z nové chyby udělat nové pravidlo
- Každý rozměr, každý formát, každý obchod
- Kontrast, rozměry, alfa, přetečení, dotykové cíle — změřené
- Každou stránku a stav eshopu ve skutečném Chromu
- Řekne, kde se zastavil a proč
- Nikdy nic nenahrává sám
Dovnitř jedna fotka, tři loga a URL. Ven zkontrolovaná sada.
Vstup je to, co restaurace opravdu má: jednu fotku jídla, logo ve třech variantách a adresu eshopu. Všechno o klientovi je v jednom souboru se zadáním — barvy, písma, texty na banner. Ve skriptech není o klientovi nic natvrdo.
- 01
Vstupy
Změří loga a fotku dřív, než se cokoli spustí: lem kolem loga, tečky po upscalu, podklad zapečený do „průhledného“ souboru.
Při špatném vstupu zastaví běh
- 02
Audit
Přečte živý eshop: ID, co je už nasazené, loga, pokrytí fotkami.
Ví, co existuje, než vyrobí další
- 03
Bannery
Přesné rozměry pro eshop, appku a Google Play. Nadpis se zvětší do místa, max dva řádky.
Kontrast a rušnost pod textem, změřené
- 04
Balík log
Loga do všech slotů adminu, piny s kontrastem 3:1 proti mapě, favicon ze značky.
Kontrolní stránka pro Chrome: tab, mapa, patička
- 05
Ikony
38 ikon pro oba obchody a feature graphic. Ikona Play jako plný čtverec, iOS tmavá a tónovaná varianta.
Bezpečná zóna v maskách Androidu
- 06
Screeny
Čtyři obrazovky na obchod, jedno souvislé pozadí rozřezané na čtyři, správný telefon pro správný obchod.
Rozměry, alfa, švy mezi panely
- 07
Checklist
Porovná každý výstup s pravidly obchodu, kam míří.
„HOTOVO“, nebo „obchod nevezme“
Linka nikdy nic nenahrává. Člověk se podívá na kontaktní archy a nahraje to do adminu a do obchodů. Dvě fáze nejsou skripty vůbec: napsat eshopovou šablonu a projít každou stránku v Chromu. To je práce Claude Code, viz další sekce.
Claude Code postaví celou šablonu a pak projde každou stránku ve skutečném prohlížeči.
Platforma má dva adminy a každý bere šablonu v úplně jiné podobě. Postup je pro oba stejný: postavit, ověřit na živém webu před nasazením, nasadit, ověřit znovu naostro.
CSS a JS diff připojený na konec zkompilovaného stylu
Šablony jsou ve složce pro každou provozovnu. Linter chytá pasti platformy — potichu zahodí clamp(), min(), max(), @import a // komentáře — pak CSS načte v headless Chromu a spočítá, kolik pravidel prohlížeč opravdu přijal.
Síť pizzerií: 9 eshopů pro 11 provozoven ve třech podobách, sjednocené do jedné. Soubor každé pobočky nese i její dosavadní kód (přesměrování, kiosek). Simulace před nasazením: 9 poboček a appka, 1440 i 390 px, 20 běhů. Po nasazení 13. října kontrola naostro na živých webech: 20 běhů, 16 prošlo napoprvé a 4 po opakování (napoprvé ukázaly starou stránku, než se uložení v adminu propsalo). Kiosek vypadal na dvou pobočkách pixel po pixelu stejně jako předtím, na třetí s rozdílem 2 px ve vyhlazení.
Šablona jako JSON: layout, stránky, prefaby, proměnné stylu
Pro každého klienta builder, který JSON vygeneruje, takže se oprava dělá jednou ve zdroji, ne v JSONu o 200 kB. Vedle toho playbook nové šablony a katalog chyb platformy a technik, zapisovaný tak, jak se na ně přicházelo.
Tmavá šablona pro restauraci se dvěma vchody — z jedné strany Mexiko, z druhé Itálie — podle návrhu klienta, desktop i mobil, odladěná end to end.
- 01Build
Builder → JSON. Pojistka shodí build, když do šablony prosákne jméno nebo prefix minulého klienta.
- 02Injekce
Audit vloží CSS a tokeny šablony do živého webu na místo, kde budou po nasazení.
- 03Audit
10 scénářů na 5 šířkách. Ke každému screenshot a měření.
- 04Oprava
Jedna oprava v builderu, nový build, znovu audit.
- 05Nasazení
Nahrává člověk. Nic se nenasadí samo.
- 06Přejímka
Stejný audit bez injekce, na skutečně nasazeném webu.
# Audit sablona.json · CSS vlozene pred hydrataci · 1440 1024 768 440 390## Staticka kontrola CSShover mimo @media(hover:hover) ............. 0pravidel s :active (tap odezva) ............ 36prefers-reduced-motion ..................... anohex mimo tokeny ............................ 0scenar sirka preteka kontrast dotyk<44 bez-hover chybyhome 1440 0 0 0 0/17 1home 390 0 0 0 0/16 1menu 390 0 0 0 0/18 1modal 1440 0 0 0 0/4 1 zavreni .95 .76 .37 .00kosik 440 0 0 2 0/24 2 pridano, odber+platba+spropitnekontakt 1440 0 0 0 1/12 1pravni 390 0 0 0 — 1 VOP ok, GDPR okKaždá brána je jizva.
Žádná z nich nebyla navržená předem. Každá je tam proto, že chyba jednou k někomu došla — k recenzentovi obchodu, ke kolegyni, ke klientovi, nebo ke mně.
Grafika
- Přesné rozměry a žádná alfa, podle obchodu↳ App Store odmítl sadu, kterou Google vzal
- Rámeček telefonu podle obchodu↳ Z Google Play se vrátil rámeček, který vypadal jako iPhone
- Kontrast a rušnost pod každým nadpisem↳ Text na fotce jídla musí jít přečíst i v náhledu
- Švy mezi panely ve screenech↳ Čtyři obrazovky sdílejí jedno pozadí a musí navazovat
- Čeština v souborech písma, které Google opravdu servíruje↳ Některá oblíbená písma č, ř, ž vůbec nemají
- Špatný vstup zastaví běh↳ Logo s lemem pokazí každý výstup po něm
Eshop
- Přetečení do strany na 5 šířkách↳ Mobil se rozbije první
- Kontrast každého textu proti skutečnému podkladu↳ Vrstvy s alfou jednoduchou kontrolu obelžou
- Písma opravdu načtená, změřená na canvasu↳ Písmo, které se nenačte, potichu spadne na náhradní
- Dotykové cíle 44 px na mobilu↳ Zákazník restaurace objednává jedním palcem
- Hover skutečnou myší, zavírací animace modalu↳ Zavíraný modal 0,3 s stál a pak naráz zmizel
- Strom uzlů proti šabloně, která jede v produkci↳ Špatný typ uzlu nevykreslí nic, a to s nulou chyb
# 3-store/listingGooglePlay/01-1080x1920.png ......... OKGooglePlay/02-1080x1920.png ......... OKAppStore/01-1242x2688.png ........... obchod nevezme: slot chce 1206x2622AppStore/02-1242x2688.png ........... obchod nevezme: slot chce 1206x2622NENI HOTOVO · 2 vystupy neprojdou pravidly App StoreSedm věcí, které se pokazily, a co změnily.
Držím si je, protože jsou to skutečný návrh celého systému. Každá skončila jako pravidlo, skript nebo brána — ne jako poznámka, že mám být opatrnější.
- 23. 9.01
App Store odmítl screeny
- Co se stalo
- Jedna sada screenů 1080×1920 šla do obou obchodů. Google ji vzal, App Store Connect ne. Kolegyně na to přišla až při nahrávání. Horší je, že checklist hlásil HOTOVO, i když sada pro Apple vůbec neexistovala.
- Co se změnilo
- Dvě sady, jedna pro každý obchod. Checklist teď čte hlavičku PNG a kontroluje přesný rozměr a alfu podle pravidel každého obchodu.
- 1. 10.02
„Typický iPhone, myslím, že to neschválí.“
- Co se stalo
- Rámeček telefonu v sadě pro Google Play měl průstřel kamery, ale tělo iPhonu. Kolegyně sadu vrátila.
- Co se změnilo
- Rámeček se volí podle obchodu: pro Google Play Android s androidím stavovým řádkem, pro Apple iPhone.
- 9. 10.03
„Potřebujeme real fotku, ne AI slop.“
- Co se stalo
- Návrh banneru ukazoval jídlo, které si model přimyslel. Vypadalo dobře, a nebylo to jídlo té restaurace.
- Co se změnilo
- Na banneru je jen skutečné jídlo. AI smí skutečnou fotku překomponovat do tvaru banneru, pixely jídla jdou nechat původní, a když AI na obrázek sáhla, řekne se to hned.
- 12. 10.04
Apple změnil povinný rozměr
- Co se stalo
- Nový povinný slot iPhone 6,3" bere jen 1179×2556 nebo 1206×2622. Hotové sady tří klientů (1242×2688 a 1320×2868) neprošly.
- Co se změnilo
- Skript odvodí sadu 6,3" z té stávající, checklist dostal nové pravidlo a všichni tři klienti byli převedení týž den.
- 26. 8.05
Menu zmizelo s nulou chyb
- Co se stalo
- Nová šablona se nasadila bez filtru kategorií a bez všech produktů. HTTP 200, čistá konzole. Vypadalo to, že klient nemá produkty. Tři špatné typy uzlů najednou.
- Co se změnilo
- Zlaté pravidlo playbooku: strom 1:1 podle šablony, která jede v produkci, novinky po jedné. Skript porovná typy uzlů před prvním nasazením.
- 18. 9.06
Naše CSS schovalo přídavky, které zákazník zaplatil
- Co se stalo
- Pravidlo, které mělo schovat prázdnou poznámku, schovalo i řádek „Přidáno: slanina, čedar“. Poznámka je prázdná skoro vždy, takže zaplacené přídavky z rekapitulace košíku mizely.
- Co se změnilo
- Opraveno týž den na třech eshopech i v jejich appkách. Poučení šlo do katalogu chyb: prázdný potomek neznamená prázdný blok — než něco platformě schovám, přečtu si její zdroj.
- 29. 9.07
Simulace nevidí, co data nevyvolají
- Co se stalo
- Audit před nasazením běžel na webu se 4 kategoriemi. Skutečná restaurace jich měla 20, platforma ukázala šipku posunu — jako plný barevný kruh přes kategorii.
- Co se změnilo
- Po každém nasazení běží stejný audit znovu na skutečném webu, bez injekce. Přesně tak se u sítě pizzerií našla neviditelná lišta „Máme zavřeno“.
Linku spouští zprávou i kolegyně, které nejsou grafičky.
Ne chatbot, který generuje obrázky. Fronta zakázek s jasnými hranicemi: kolegyně z podpory nebo obchodu napíše, co restaurace potřebuje, přiloží soubory a hotovou sadu dostane zpátky do stejného vlákna.
- 01Kolegyně
Napíše zakázku do kanálu, přiloží logo nebo QR
- 02Discord bot (Docker)
Otevře vlákno, stáhne přílohy, zařadí zakázku do fronty
- 03Worker
Bere jednu zakázku najednou, pustí session Claude Code v repu linky
- 04Claude Code
Stejná pravidla jako ruční práce. Do vlákna píše jen dvěma nástroji: odpověď a dotaz
- 05Vlákno
Milníky, pak výsledek s přílohami. Odpověď naváže na stejnou session
Návrhová rozhodnutí
- Souborový protokol, jeden zapisovatel na soubor
- Bot a worker nikdy nepíšou do stejného souboru. Žádné zámky, které by šly pokazit.
- Jedna zakázka najednou
- Dvě session v jednom repu by si přepisovaly výstupy.
- Stejná pravidla jako ruční práce
- Session čte stejná pravidla a paměť projektu jako já. Poznatek smí nahlásit, zapsat ne.
- Tep
- Bot ví, jestli PC jede. Po 12 minutách ticha worker sám napíše, jak to vypadá.
- Dohnání po spánku
- Když se PC probudí, stáhnou se zmeškané zprávy, nejvýš 3 dny zpátky.
- Velké soubory přes sdílený disk
- Co má přes 20 MB, jde jako odkaz místo přílohy.
Bezpečnostní model
- Zakázku spustí jen povolení lidé — ne webhooky, ne jiní boti.
- Hook před každým nástrojem: zápis jen do výstupních složek a šablon, nikdy do pravidel, paměti a skriptů.
- Žádná tajemství, žádná síť kromě vlastních nástrojů pro vlákno.
- Žádný přístup k mému přihlášenému Chromu. Snímky eshopu dělá headless Chrome ze skriptů linky.
- Přílohy jen z výstupních složek, s filtrem na všechno, co vypadá jako klíč.
- Bot prošel dvěma koly recenze AI agenty pro bezpečnost, okrajové případy a slepou kontrolu bez kontextu. Druhé kolo (6. 10.) našlo přes 20 nálezů, ty podstatné jsou opravené.
Popsané schválně jako model. Konkrétní konfigurace by byla návod, jak to obejít.
Celá sada pro appku za 15 minut.
Skutečná zakázka z logu, 6. října. Kolegyně chtěla sadu pro appku pizzerie na novém adminu. Časy jsou z logu workeru, zprávy jsou to, co session psala do vlákna.
- 1)Screeny do App Store i Google Play podle jejich eshopu, se správnými rámečky telefonů
- 2)Ikony pro nový admin, všech 7 vrstev
- 3)QR na účtenku — QR z adminu přikládám
- 00:00startSession startuje.
- 00:52vláknoProhlížím, co už pro klienta existuje, než začnu generovat.
- 02:06vláknoČtu QR z přílohy, abych zjistil, kam vede.
- 02:10hookHook zablokoval příkaz: frontu zakázek spravuje worker — inbox, outbox ani stav neupravuj.
- 02:36vláknoPřiložené QR je stejné jako to v předávací složce. Jdu na screeny.
- 04:50vláknoDvě drobné vady ve snímcích: nad nadpisem vykukuje okraj karty, dole je useknutý nadpis. Dolaďuju posun stránky.
- 10:02vláknoSnímky eshopu jsou čisté. Pouštím generování obou sad.
- 11:06vláknoIkony sedí: značka v bezpečné zóně, favicon čitelný na světlém i tmavém.
- 11:45vláknoQR ověřené: Android skočí rovnou do Google Play, iPhone dostane stránku s oběma obchody.
- 12:45vláknoKontroluju rozměry a alfa kanál všech souborů.
- 13:44vláknoNa pozadí banneru do Google Play je vidět svislý šev. Upravuju výřez na jeden panel.
- 14:57výsledekHotovo. ZIP (18,9 MB), náhled screenů a QR na účtenku jsou ve vlákně.
89 kroků, 14 min 55 s, mezitím bez člověka. Nová práce byly obě sady screenů; ikony a QR byly hotové z dřívější zakázky a session je jen ověřila. Před nahráním výsledek zkontrolovala kolegyně.
Jen to, co je změřené.
Spočítané na disku a v logu zakázek 17. října 2026. Úspora času proti ruční práci tu není: nezměřil jsem ji, tak ji netvrdím.
- 44
- Python skriptů linky na grafiku
- 11 509 řádků
- 1 260
- Řádků runbooku
- PIPELINE.md
- 12
- Předaných balíků od 5. 10.
- 6 klientů, včetně oprav a doplněných sad
- 12+9
- Eshopových šablon postavených nebo přestavěných od září
- starý admin + nový admin
- 88
- Zapsaných chyb platformy
- a k tomu 95 technik
- 10×5
- Scénářů auditu × šířek
- u každé šablony, před i po nasazení
- 11
- Zakázek přes Discord za první týden
- 5.–12. 10. · 1 testovací
- 12
- Minut medián zakázky z Discordu
- 8 zakázek bez čekání na odpověď · nejdéle 42
- 2 127
- Řádků TypeScriptu v botovi
- bot + worker · 24 testovacích souborů
Co to není.
- 01
Dva režimy, dvě míry dozoru. Novou práci dělám se session Claude Code já a schvaluju ji. Zakázky z Discordu běží beze mě a výsledek kontroluje kolegyně. Brány jsou stejné, oko grafika u nich není.
- 02
Nic se nenahrává samo. Do adminu a do obchodů nahrávají lidé.
- 03
Simulace před nasazením neukáže stavy, které data na testovacím webu nevyvolají. Proto má každé nasazení přejímku naostro.
- 04
Windows nemá sandbox pro shell. Pravidla hlídají tvar příkazu a odhodlaný útočník by je skriptem obešel. Pro pár kolegyň přijatelné, pro víc lidí ne.
- 05
Worker běží na mém PC. Když je vypnuté, zakázky čekají.
- 06
Vzorek zakázek přes bota je malý: 11 za první týden.
Produkt jsou pravidla.
Skripty by šly přepsat snadno. Čas zabral seznam věcí, které se nesmí stát znovu — a linka, která je při každém běhu zkontroluje.