Zpět na blog
ai kvalty engineering

Možná největší sólo AI projekt v Česku

237K řádků vlastního kódu. 3 528 commitů. 15 měsíců. Jeden vývojář. Tady jsou čísla za tím tvrzením.

Když lidem říkám, že jsem Kvalty.cz — největší nezávislý srovnávač autoškol v České republice — postavil sám, s AI jako kopilotkem, první reakce je většinou skepse. Chápu. Tak ukážu čísla.

Čísla

  • 237 624 řádků vlastního TypeScript kódu (nepočítaje 448K auto-generovaného)
  • 1 555 TypeScript souborů v Turborepo monorepu
  • 3 528 commitů za 15 měsíců aktivního vývoje
  • 163 databázových tabulek, 168 tRPC procedur, 8 506 překladových klíčů
  • 4 aplikace + 17 sdílených balíčků v jednom monorepu
  • Velikost týmu: 1

Je to produkční systém se 4 aplikacemi (web, academy, admin, API), Hono/tRPC backendem, 163tabulkovou PostgreSQL databází s PostGIS, BullMQ frontami úloh, Better Auth s RBAC, CrowdSec WAF a flotilou 20 paralelních Claude Code agentů, kteří autonomně validovali každou autoškolu v zemi.

Čtyři aplikace

Rozeberu, co každá aplikace doopravdy dělá, protože „4 aplikace” se snadno přehlédne.

Web — veřejný srovnávač na kvalty.cz. Tohle je to, co uživatelé vidí: vyhledávání autoškol podle lokace, porovnání cen vedle sebe, detailní profily škol s hodnoceními a recenzemi, regionální a městské stránky a transparentní hodnotící systém. Server-side rendered s Next.js, plně lokalizovaný v češtině a angličtině, optimalizovaný pro Core Web Vitals.

Academy — platforma pro přípravu na zkoušky z autoškoly. Cvičné testy pro teoretickou zkoušku, banky otázek kategorizované podle tématu, časované simulace zkoušek, které napodobují reálné podmínky. Tohle je růstový motor — studenti přijdou na přípravu na testy, objeví srovnávač škol a zkonvertují.

Admin — dashboard pro správu škol. Autoškoly si mohou nárokovat své profily, aktualizovat ceníky, odpovídat na recenze, nahrávat fotky a spravovat svůj výpis. Je to taky místo, kde spravuji platformu: administrace uživatelů, moderace obsahu, workflow ověřování škol, kontroly kvality dat a analytika.

API — Hono/tRPC backend obsluhující všechny tři frontendové aplikace. 168 typově bezpečných procedur ošetřujících všechno od geografického vyhledávání přes aktualizace ceníků po autentizační flow. End-to-end typová bezpečnost od Drizzle ORM schématu až po React komponenty — změňte typ sloupce v databázi a TypeScript řve na každém callsite, který potřebuje aktualizaci.

200bodový hodnotící algoritmus

Každá škola na Kvalty dostane transparentní skóre kvality z 200 bodů. Přesné váhy neprozradím — to je konkurenční výhoda — ale můžu říct, jaké faktory do toho vstupují:

  • Cenová transparentnost — zveřejňuje škola jasné, kompletní ceníky? Nebo musíte zavolat, abyste zjistili, kolik stojí řidičák skupiny B?
  • Hodnocení na Google Maps — vážené počtem recenzí. 4,8 s 12 recenzemi není totéž co 4,8 s 340.
  • Pestrost kurzů — kolik kategorií řidičáků nabízejí, jestli mají automatickou převodovku, kondiční jízdy, intenzivní programy.
  • Kvalita webu — je web funkční, informativní a udržovaný? Nebo je to rozbitá WordPress šablona z roku 2012?
  • Doba odezvy — jak rychle škola reaguje na dotazy (měřeno přes platformu).
  • Úplnost dat — školy, které vyplní celý profil, se řadí výš než ty s holým minimem.
  • Sentiment recenzí — ne jen hvězdičky, ale co lidi skutečně píšou.

Celý smysl je transparentnost. Uživatelé vidí, proč škola skóruje tak, jak skóruje. Žádné pay-to-play, žádné skryté boostování. Školy, které chtějí být výš, mají jasnou cestu: zveřejněte ceny, udržujte profil, chovejte se k žákům dobře. To je celé.

PostGIS geografické vyhledávání

„Najdi autoškoly blízko mě” zní jednoduše, dokud to nezkusíte implementovat pro Českou republiku.

Jádro je výpočet Haversine vzdálenosti přes PostGIS. Uživatel sdílí svou polohu (nebo zadá název města), dotazujeme školy v konfigurovatelném poloměru pomocí ST_DWithin na geography sloupcích, seřazené podle vzdálenosti. Standard.

Co standard nebylo: české vyhledávání bez diakritiky. Když uživatel napíše „Pribram”, očekává, že najde školy v „Příbrami”. Když napíše „Ceske Budejovice”, myslí „České Budějovice”. Češi běžně vynechávají diakritiku při rychlém psaní — obzvlášť na mobilu.

Řešení: PostgreSQL rozšíření unaccent v kombinaci s trigram indexy (pg_trgm). Každé vyhledatelné textové pole má generovaný sloupec s neakcentovanou verzí, indexovaný GIN trigram indexy. Vyhledávací dotazy se odakcentují za běhu. Výsledek: „Ceske Budejovice,” „České Budějovice,” „české budějovice” i „cesk budej” — všechno najde správné město. Dostatečně fuzzy na odpouštění, dostatečně přesné, aby nevracelo nesmysly.

Ošetření hranic regionů byl další problém. Školy blízko hranice dvou krajů by se měly zobrazovat při vyhledávání v obou. Škola 2 km za Prahou ve Středočeském kraji by se měla pořád zobrazit, když někdo hledá „autoškoly v Praze.” PostGIS to řeší — geografické dotazy se nestarají o administrativní hranice.

Srovnání

Pro zasazení 237K řádků vlastního TypeScript do kontextu:

  • Větší než Vue.js (~150K řádků) — o 158 %
  • Skoro 3× Express.js (~80K řádků) — o 296 %
  • Skoro 5× Create React App (~50K řádků)
  • Architektonická sofistikovanost: 163 databázových tabulek, end-to-end typová bezpečnost od Drizzle schématu po React komponenty, PostGIS geografické vyhledávání, české vyhledávání bez diakritiky, 200bodový transparentní hodnotící algoritmus a kompletní platforma pro simulaci zkoušek z autoškoly

Za těmi řádky: geografické vyhledávání s Haversine výpočty vzdáleností, multi-tenant autentizace, real-time event-driven webhooky, 90+ překladových namespaces ve dvou jazycích a kompletní admin dashboard pro správu škol.

Vývoj

Projekt prošel třemi hlavními fázemi za 15 měsíců skutečného vývoje (repozitář byl vytvořen v srpnu 2024, ale seriózní práce začala v lednu 2025):

  1. Monolitická Next.js aplikace (srpen 2024 – prosinec 2025) — 2 284 commitů. Původní frontend s GraphQL/Apollo a Directus CMS.
  2. Directus extensions (březen 2025 – únor 2026) — 475 commitů. Vlastní backend logika: vyhledávání, ranking, engine funkcí, emailová fronta, celkem 21 extensions.
  3. Turborepo monorepo (prosinec 2025 – současnost) — 769 commitů a zrychluje. Kompletní přepis stacku: tRPC nahradil GraphQL, Drizzle ORM nahradil Directus SDK, Better Auth nahradil Directus auth, Hono API server nahradil custom endpointy.

Stack se kompletně transformoval — a codebase rostl přes každou migraci. Jen únor 2026 měl 347 commitů, kdy se dokončovala tRPC migrace a Drizzle schéma.

Infrastruktura

Celá věc běží na překvapivě skromném stacku:

  • Hetzner Cloud — jeden VPS pro PostgreSQL databázi, API server a BullMQ workery. Nic zvláštního — prostě schopný stroj v evropském datacentru.
  • Vercel — hosting tří Next.js frontendových aplikací s edge cachingem a ISR.
  • Cloudflare — DNS, CDN, DDoS ochrana a integrace s CrowdSec WAF.
  • Neon — database branching pro preview nasazení, takže každý PR dostane vlastní izolovanou databázi.
  • Better Stack — monitoring uptime a agregace logů.

Měsíční náklady na infrastrukturu? Pod 100 €. To je za celou platformu — databázi, API, tři frontendové aplikace, monitoring, WAF, všechno. V této fázi není bottleneck výpočetní výkon, ale můj čas.

Růst

Přesná čísla sdílet nebudu — to je mezi mnou a mým analytickým dashboardem — ale trajektorie vypráví příběh. Organický provoz roste měsíc od měsíce od spuštění, přičemž Academy táhne nejstrmější křivku. Ukazuje se, že studenti hledající „autoškola test” konvertují dobře na uživatele srovnávače.

První příjmový milník přišel dřív, než jsem čekal. Školy se začaly ozývat, aby si nárokovaly profily, během týdnů od spuštění — ještě předtím, než jsem postavil self-service onboarding. Trh byl tak podhodnocený.

Lidská cena

Budu upřímný o tom, jak doopravdy vypadá 15 měsíců vývoje po práci.

Mám plný úvazek jako Android vývojář ve Fortuna Entertainment Group. Kvalty stavím večery a víkendy. To znamená, že většina mých „vývojářských dní” začíná v 19:00 a končí o půlnoci. Víkendy jsou delší tahy — 6 až 10 hodin, když jsem v zóně.

Vyhoření přicházelo ve vlnách. Nejhorší bylo během tRPC migrace v lednu–únoru 2026, kdy jsem přepisoval celou API vrstvu a zároveň udržoval produkční web v provozu. 347 commitů v únoru. To je průměrně 12 commitů denně. Některé ty dny jsem v jednu ráno debugoval problémy s Drizzle schématem, přičemž v 9 ráno mě čekal standup v hlavní práci.

Jak to zvládám? Někdy špatně. Ale pár věcí pomáhá: beru si celé týdny volna od Kvalty, když cítím pokles motivace. Dávkuji kreativní práci (design, copy) odděleně od technické. A připomínám si, že timeline si nastavuju sám — nikdo neumře, když funkce vyjde příští týden místo zítra.

Faktor AI je to, co tohle vůbec umožňuje udržitelně. Bez AI jako multiplikátoru síly by tenhle projekt vyžadoval 3-4 vývojáře na plný úvazek. S AI to jeden vývojář na částečný úvazek zvládá — tak tak, s nějakým spánkovým dluhem, ale funguje to.

Metodologie

Jen jsem nehrabal prompty do ChatGPT a nedoufal v nejlepší. Vyvinul jsem dva systémy, které tohle umožnily:

Vibe Engineering

Moje třífázová metodologie pro stavění s AI. Každá funkce projde Výzkumem a strategií, Roastem (adversariální AI review) a Konsenzem před implementací. Je to strukturované, záměrné a adversariální — ne „vibe coding”.

Metoda Ralph

Produkční systém 20 paralelních Claude Code agentů, kteří autonomně crawlovali, extrahovali a validovali data autoškol. 826řádkový custom prompt. Lidský review před každým commitem do databáze. Takhle jsem validoval 1 700 autoškol po celé České republice.

Proč „možná největší”?

Nemůžu znát každý projekt v Česku. Ale na základě veřejně dostupných dat o vývoji s AI:

  • 41 % veškerého kódu je nyní globálně generováno AI (2024)
  • Většina AI-coded projektů se pohybuje v rozsahu 5–30K řádků (Bolt.new, Lovable, v0)
  • I projekty v Cursor AI typicky vrcholí na 50–150K řádcích
  • 237K vlastních řádků Kvalty to posouvá výrazně za hranice toho, co bylo veřejně zdokumentováno

Většina AI-generovaných projektů nikdy neopustí fázi prototypu. Kvalty se nasadilo. Obsluhuje reálné uživatele. Zpracovává reálná data. Generuje reálné příjmy.

Proč o tom píšu

Jo, částečně se chlubím. Ale taky je to reálný důkaz, že jeden člověk s AI a pořádnou metodologií dokáže za 15 měsíců postavit a nasadit software — 4 aplikace, 163 databázových tabulek, 168 API procedur — na co by normálně byl potřeba tým a dvojnásobný čas.

Mohl by tohle někdo jiný udělat bez AI, s týmem? Jasně, se 3-4 inženýry a rokem. Mohl by to někdo udělat s AI, ale bez metodologie? Pravděpodobně ne za hranici 50K řádků, než by se codebase zhroutil pod nekonzistencí.

Jeden vývojář, který rozumí architektuře. AI, které dokáže exekuovat rychle. Metodologie, která drží obě strany poctivé. Tahle kombinace to celé umožnila.


Čísla v tomto článku vychází z git statistik repozitářů Kvalty.cz k 13. březnu 2026. Projekt dál roste s tím, jak stavím Kvalty Academy a rozšiřuji platformu.

Martin Svoboda

Martin Svoboda

Android vývojář ve Fortuně, zakladatel Kvalty.cz a Ferda App. Stavím produkty s Kotlin, React a AI-asistovaným vývojem z Prahy.