Aktualizováno 24. 9. 2026 Témata: ai, whatsapp, provoz

Stínicí technika se kupuje těžko naslepo. Zákazník si z katalogu neumí představit, jak bude látka nebo barva vypadat na jeho okně, a prodejce mu to na dálku neumí rychle ukázat. Pro skupinu e-shopů se stínicí technikou jsem proto postavil vizualizátor, který běží ve WhatsAppu. Od března 2026 ho používají tři značky skupiny a do září vyrobil přes 4 000 vizualizací.

Co dělá zákazník

Na produktové stránce klikne na tlačítko nebo naskenuje QR kód. Otevře se mu konverzace se značkou ve WhatsAppu. Pošle fotku svého okna a za chvíli dostane zpátky tutéž fotku, jen s roletou nebo žaluzií, kterou si vybral. Vidí produkt na vlastním okně dřív, než si objedná vzorek nebo zaměření.

Co dělá systém

Katalog produktů si vizualizátor bere z feedu e-shopu, takže ho prodejce neudržuje dvakrát. Fotku okna a vybraný produkt pošle obrazovému modelu od OpenAI, který produkt vloží do fotky. Výsledek se vrátí do stejné konverzace.

Každá značka má vlastní vzhled, katalog a průběh konverzace, ale všechny tři běží na jednom systému. Pod tím je API v Bunu s Honem, administrace v Next.js, PostgreSQL, úložiště obrázků a WhatsApp přes Twilio. Nasazuje se automaticky po pushi a jako značka obrazu slouží hash commitu, takže vždycky vím, který kód je doopravdy živý.

Proč WhatsApp

Fotka okna vzniká v telefonu a WhatsApp v telefonu zákazník už má. Nemusí nic instalovat ani nahrávat soubor přes formulář na webu. Výsledek mu zůstane v konverzaci, kde se k němu může vrátit. Stejný kanál navíc funguje i pro lidi, kteří nejsou zákazníci, ale stojí u zákazníka doma.

Technici v terénu

Značka může mít ve vizualizátoru i své techniky. V administraci je zaregistruje jménem a telefonem. Technik pak pošle fotku přímo od zákazníka a výsledek mu ukáže na místě, zatímco administrátor vidí historii jeho vizualizací.

V červenci se nový technik nedal přidat. Formulář posílal prázdné jméno jako null a validace ho odmítla. Opravu jsem nasadil ještě týž den a další den pět navazujících věcí: srozumitelné chybové hlášky místo obecné chyby a to, že znovu přidaný technik, kterého někdo dřív smazal, dostane zpátky svůj původní záznam i s historií vizualizací.

Co se pokazilo a co jsem opravil

Za půl roku provozu se nasbíraly chyby, které nikoho nebolely každý den, ale bolely ve chvíli, kdy na ně někdo narazil.

Hláška o denním limitu. Zákazník, který vyčerpal denní limit vizualizací, měl dostat vysvětlení. Dostal obecné „Omlouvám se, něco se nepovedlo”. Kód volal funkci, která neexistovala. Oprava je jeden řádek, ale nejdřív jsem napsal test, který chybu ukázal, a teprve pak ji opravil.

Nastavení, které nikdo nečetl. Administrace měla pole pro model, kvalitu a formát výstupu. API je nikdy nečetlo, model byl zapsaný natvrdo v kódu. Dnes se nastavení skutečně používá a neznámá hodnota spadne na bezpečný výchozí model, místo aby rozbila vizualizaci.

Testy, které neběžely. Osm testů dlouhodobě padalo a jedna sada se čtrnácti testy se vůbec nespouštěla, protože byla psaná pro jiný testovací nástroj. Zastaralé testy jsem nemazal, ale přesměroval na současné chování. Celá sada je poprvé zelená: 191 testů.

Nasazení, které se tvářilo jako hotové. Jeden přepínač v nasazovacím nástroji rozbil sestavení administrace. Staré kontejnery přitom běžely dál, takže web fungoval a na první pohled nebylo nic vidět, jen nový kód nebyl živý. Je to stejný vzorec, o kterém píšu v poznámce Chyba hlásí úspěch. Poznal jsem to tak, že běžící kontejner pořád nesl hash starého commitu, ne podle toho, že web odpovídá. Příčinu jsem pak našel v historii nasazení.

Přechod na rychlejší model

Dne 24. září jsem vizualizátor přepnul z modelu gpt-image-1.5 na gpt-image-2.5-flare. Před přepnutím jsem oba modely pustil na pět reálných fotek na demu. Nový model potřeboval 15 až 27 sekund na obrázek, starý 39 až 51. Kvalita vyšla srovnatelně a v jednom případě byl nový lepší: starý vybílil sklo balkonových dveří.

Po nasazení jsem nový model ověřil na šesti skutečných oknech zákazníků, každé trvalo 11 až 15 sekund. Jednou vyšel hůř: u hliníkové žaluzie vypadaly lamely průsvitně a vybledle. Je to jeden vzorek a než z něj budu dělat závěr, potřebuju jich víc. Výsledky se teď ukládají jako JPEG kolem 100 kB místo PNG kolem 2 MB.

Co si z toho odnést

AI vizualizace prodává tím, že zákazník uvidí produkt na vlastním okně, ne tím, že je to AI. Kanál má být ten, který zákazník už má v ruce. Chyby, které se neprojeví každý den, se v provozu hromadí potichu, a proto se vyplatí je jednou za čas vybrat v jedné dávce. Nový model se nasazuje po srovnání na reálných fotkách a po nasazení se kontroluje dál, protože malý vzorek ukáže směr, ne jistotu.

Další poznámka

Napište mi, co potřebujete

Napište mi