O projektu: data, provoz a cena vývoje

Manažerské shrnutí webu Přijímačky na školu. Co web dělá, z jakých veřejných dat staví, jak je zpracovává a co by jeho vývoj stál, kdyby ho dodala běžná agentura.

Stav k 21. 9. 2026. Čísla o datech a školách se berou z týchž souborů, které pohánějí web, takže stárnou spolu s ním. Rozsah kódu a odhad ceny jsou měření a model k datu 21. 9. 2026.

1.Co web dělá

Přijímací řízení na střední školy vytváří každý rok velké množství veřejných dat. CERMAT zveřejňuje, kolik se na který obor přihlásilo uchazečů, kolik jich škola přijala a s jakými výsledky jednotné zkoušky. Česká školní inspekce vydává zprávy o školách. MŠMT vede rejstřík škol. Data jsou veřejná, ale leží v desítkách tabulek, které rodič ani ředitel školy neotevře.

Web tato data spojuje do jednoho místa a odpovídá jimi na otázky, které rodiče a žáci skutečně mají: jak velký je o obor zájem, s kolika body se tam někdo dostal v posledním uzavřeném ročníku, jak škola dopadá u maturity, co o ní napsala inspekce a jak dlouho se tam dítě dostane hromadnou dopravou. Každé číslo má dohledatelný zdroj a uvedený rok.

Web vzniká jako otevřený projekt Patricka Zandla ve spolupráci s Hlídačem státu. Veškerý kód i postupy zpracování dat jsou veřejné na GitHubu. Kdokoli si může ověřit, jak se konkrétní číslo spočítalo.

2.Web v číslech

1 119
středních škol v katalogu
3 216
oborů s vlastní stránkou
14
krajů, tedy celá republika
24
datových sad v registru
19
z nich se zobrazuje na webu
3
ročníky přijímacího řízení vedle sebe
849
rozebraných inspekčních zpráv
1 180
profilů škol z portálu INSPIS
533
škol, jejichž novinky sklízíme

Katalog drží 2024 (2 721 nabídek), 2025 (2 837 nabídek), 2026 (3 224 nabídek). Díky tomu jde u oboru ukázat vývoj, ne jen poslední číslo. Seznam škol z inspekce je širší než katalog, protože zahrnuje i základní a mateřské školy: je v něm 9 558 záznamů.

3.Jaká data používáme

Všechna data jsou veřejná a anonymizovaná. Web nesbírá nic o návštěvnících a nepracuje s údaji o konkrétních dětech; i tam, kde zdroj obsahuje jednotlivé uchazeče, jsou to anonymní řádky bez jakékoli možnosti ztotožnění.

Zdroje vede registr datových sad. U každé sady je zapsané, jaké období web zobrazuje, kdy se kontrolovala, co se z ní počítá a jak se aktualizuje. Registr je závazný: dokud v něm období nepřepneme, web novější data neukáže, ani když už je máme stažená. Naposledy se registr měnil 18. 9. 2026.

ZdrojObdobíJak se aktualizujeK čemu
CERMAT, kapacity oborů, 1. kolo1 ukazatel na webu2026automaticky jen upozornění, že data vyšlazobrazuje se
CERMAT, přihlášky na obory, 1. kolo5 ukazatelů na webu2026automaticky jen upozornění, že data vyšlazobrazuje se
CERMAT, výsledky přijímacího řízení, 1. kolo12 ukazatelů na webu2026stažení a kontrola automaticky, převzetí schvaluje člověkzobrazuje se
CERMAT, data o jednotlivých uchazečích, 1. kolo20 ukazatelů na webu2026stažení a kontrola automaticky, převzetí schvaluje člověkzobrazuje se
CERMAT, data o jednotlivých uchazečích, 2. kolo2025automaticky jen upozornění, že data vyšlaleží ladem
CERMAT, položková data jednotné zkoušky2025automaticky jen upozornění, že data vyšlajen rozbory
CERMAT, maturitní výsledky, společná část11 ukazatelů na webu2026stažení a kontrola automaticky, převzetí schvaluje člověkzobrazuje se
CERMAT, školní agregáty JPZ 2017–2023-neaktualizuje seleží ladem
Rejstřík škol MŠMT, čtvrtletní snímky JSON-LD1 ukazatel na webu30. 6. 2026stažení a kontrola automaticky, převzetí schvaluje člověkzobrazuje se
Rejstřík škol MŠMT, export CSV11. 2. 2026ručnězobrazuje se
MŠMT, číselník kmenových oborů AKKO8. 3. 2026ručnějen rozbory
Česká školní inspekce, seznam inspekcí a odkazy na zprávy7. 9. 2026celé automatickyzobrazuje se
Inspekční zprávy, strojová extrakce25. 11. 2025ručnězobrazuje se
INSPIS, profily škol11. 2. 2026ručnězobrazuje se
Jízdní řády PID a celostátní GTFS7. 2. 2026stažení a kontrola automaticky, převzetí schvaluje člověkzobrazuje se
Katalog, historické ročníky 2024 a 20251 ukazatel na webu2025neaktualizuje sezobrazuje se
school_analysis.json, starší odvozený soubor2 ukazatele na webu2025neaktualizuje sezobrazovat se nesmí
CERMAT, kapacity, přihlášky a výsledky 2. kola7 ukazatelů na webu2026stažení a kontrola automaticky, převzetí schvaluje člověkzobrazuje se
MŠMT, harmonogram přijímacího řízení2027ručnězobrazuje se
RSS/Atom feedy školních webů4 ukazatele na webuprůběžněcelé automatickyzobrazuje se
Veletrhy a přehlídky středních škol2 ukazatele na webu2027ručnězobrazuje se
CERMAT, převod výsledků cvičných testů TAU1 ukazatel na webu2024ručnězobrazuje se
DiPSy, kritéria přijímacího řízení (přepis z PDF)2 ukazatele na webu2026ručnězobrazuje se
Hranice krajů, RÚIAN (ČÚZK)27. 9. 2026ručnězobrazuje se

Sady, které se nezobrazují, jsou v soupisu schválně. Má být úplný, aby se při návrhu nové funkce hledalo mezi tím, co projekt opravdu má. Jinak se hledá mezi tím, co už je na webu vidět, a to je past, do které jsem spadl. Jedna sada je dokonce vedená jako zobrazovat se nesmí: obsahuje starší dopočty, které se rozcházejí s nynější metodikou.

4.Jak se data dostanou na web

Žádný zdroj se nepřebírá přímo. Mezi zveřejněním dat a jejich zobrazením je linka o pěti krocích, kterou z větší části obsluhuje stroj, ale poslední slovo má vždy člověk:

  1. 1Zjištění. Stroj se pravidelně ptá sledovaných adres, zda se soubor změnil nebo přibyl nový ročník.
  2. 2Příprava. Stáhne soubor, spočítá jeho otisk, zkontroluje, že má očekávané sloupce, a zkusmo ho zpracuje stranou od webu.
  3. 3Oznámení. Pošle správci shrnutí: co se změnilo, jak velký je rozdíl proti tomu, co web ukazuje, a co se stane po schválení.
  4. 4Schválení. Správce odpoví „schvaluji“. Bez toho se nestane nic.
  5. 5Předání. Teprve pak vznikne návrh změny ke kontrole. I po jeho přijetí web zobrazí nový ročník až po samostatném přepnutí v registru.

Dvojí pojistka, tedy schválení a pak samostatné přepnutí období, je tam schválně. Data o přijímacím řízení vycházejí nejprve předběžně a upřesňují se o rok později. Kdyby se web aktualizoval sám, mohl by rodičům ukázat čísla, která se ještě změní, a nikdo by si toho nevšiml.

Kontrola struktury není formalita. Když zdroj přejmenuje list v tabulce nebo vypustí sloupec, zpracování se zastaví a ohlásí to, místo aby tiše vyrobilo web s prázdnými hodnotami.

5.Jak je web postavený

Stránky škol a oborů se předgenerují dopředu, ne až při návštěvě. Když si rodič otevře konkrétní gymnázium, server nepočítá nic: posílá hotovou stránku. Má to tři důsledky, které stojí za zmínku.

  • Únor a květen web nepoloží. Návštěvnost má dva ostré vrcholy, kolem podávání přihlášek a kolem výsledků; v únoru je zhruba šestkrát vyšší než v létě. Předgenerovaná stránka stojí stejně u sta i u sta tisíc návštěv.
  • Chyba v datech se projeví při sestavení, ne u návštěvníka.Kontroly běží nad celým katalogem najednou, takže je vidět, že například čtrnáct oborů sdílí jednu adresu, dřív než si toho všimne rodič.
  • Provoz je levný. Většinu webu tvoří hotové soubory.

Dynamické části jsou jen tam, kde bez nich nejde být: vyhledávání, dotaz na dojezd hromadnou dopravou, odběr novinek e-mailem a portál, přes který školy spravují svůj profil. Ty používají databázi. Sklízeč novinek z webů škol běží dvakrát denně odděleně od webu, aby výpadek cizího feedu neovlivnil nic dalšího.

Nad tím vším běží 59 automatických testů a 8 pravidelných kontrol. Některé testy prohánějí celou datovou linku proti falešnému zdroji, aby se dalo ověřit i chování při rozbitém vstupu, aniž by se čekalo na to, až se rozbije doopravdy.

6.Jak vývoj probíhal

Od první verze 24. 1. 2026 do dneška vyšlo 34 vydání. Úplný přehled je ve veřejném changelogu; tady jsou jen měsíce a to hlavní, co v nich přibylo.

leden 2026
3 vydání
  • První verze
  • Simulátor a rozšířené funkce
  • Vyhledávání a opravy bodového systému
únor 2026
13 vydání
  • Nová struktura škol a průvodce
  • Mobilní responsivita
  • UX/UI audit a opravy přístupnosti
  • Transfer-aware Dijkstra v2 a rebranding
  • Grafická kompatibilita s Hlídačem státu
  • Redesign dostupnosti: per-oborové detaily a opravy mapování škol
  • Bug report widget, UX dopravních informací a zarovnání tabulek
  • AI shrnutí inspekčních zpráv ČŠI na detailu školy
březen 2026
1 vydání
jen opravy
duben 2026
1 vydání
jen opravy
květen 2026
1 vydání
  • Výsledky přijímaček 2026 a přehledy měst
červen 2026
1 vydání
jen opravy
září 2026
14 vydání
  • Simulátor výběru oboru a kalendář přijímaček 2027
  • Ročník 2026 v katalogu a jak dopadli loňští uchazeči
  • Portál pro školy a čerstvější data inspekcí
  • Nová stránka oboru: jak těžké je se dostat
  • Nová stránka školy
  • Odběr novinek e-mailem
  • Kolik bodů je potřeba a data z přijímaček 2026
  • Každý obor má vlastní stránku a jeden průvodce místo dvou
  • Maturita i na stránce oboru
  • Stránky měst, novinky ze školních webů a odběr e-mailem
  • Veletrhy středních škol a „Kde stojím“ na stránce oboru

Rozložení není rovnoměrné a nemá být. Únor stavěl dopravní dostupnost a inspekce, jaro patřilo výsledkům přijímaček, léto bylo mrtvé období a září přineslo data ročníku 2026, přepsané stránky školy i oboru, portál pro školy a odběr novinek.

7.Co by vývoj stál

Otázka zní: kolik by stálo objednat tentýž výsledek u dodavatele. Odpověď je odhad a nemůže být nic jiného, protože nikdo neodpracoval a nevykázal hodiny, ze kterých by se dala sečíst. Aby šel odhad oponovat po částech, je rozepsaný na bloky i s tím, proč u každého vychází tolik, kolik vychází.

Změřený rozsah k 21. 9. 2026: 66 471 řádků kódu a 112 dokumentů o zhruba 250 696 slovech. Dokumentace tu není přílepek: velkou část tvoří rozbory zdrojů a zdůvodnění, proč se ten či onen ukazatel počítá takhle a ne jinak.

BlokŘádkůČlověkodnů
Web: stránky škol, oborů a vyhledávání
34 typů stránek, z nich se staticky generují tisíce adres pro jednotlivé školy a obory, k tomu vyhledávání, kraje, města, mapa webu a náhledy pro sociální sítě.
Největší blok rozsahem a sám o sobě přímočarý. Drží ho ale pravidlo „každá nabídka má vlastní stránku“, a to si vynutilo vlastní systém adres oborů i testy, které ho hlídají.
15 00050
Katalog přijímacího řízení
Import tří zdrojů CERMAT za tři ročníky, spárování nabídek mezi ročníky, výpočet souhrnů za obor a skupinu srovnatelných škol.
Nejtěžší datová část a jediná, ke které se práce vrací pořád. Obory se mezi ročníky přejmenovávají, slučují a ruší, takže párování má vlastní skript, ruční přepisy a doklady o chybovosti. Odhad byl původně 45 dnů a zvedl se poté, co rozbor commitů ukázal, že katalog má nejvíc změn ze všech oblastí, rozložených do 41 různých dnů napříč celým projektem, a že třetina z nich jsou opravy. Opakovaný návrat do téhož místa je dražší než práce v jednom kuse, a pro tým spíš víc než pro jednoho člověka.
12 00060
Školní novinky z webů škol
Sklízeč RSS a Atom feedů, zařazení zprávy do rubriky, databáze, odběr e-mailem s dvojím potvrzením, odesílač a správa.
Sklízeč cizích feedů je práce s nespolehlivým vstupem. Každá škola má jiný tvar a část webů spojení rovnou odmítne podle toho, odkud přichází. Odběr e-mailem k tomu přidává souhlasy, tokeny a doby uložení.
10 09035
Dopravní dostupnost
Převod jízdních řádů do grafu, hledání nejkratšího spojení, geokódování škol a zastávek, dvě rozhraní pro dotaz na dojezd.
Algoritmicky nejnáročnější blok. Jízdní řády mají vlastní formáty, noční linky a přestupy vyžadují zvláštní ošetření a chyby se projeví až na konkrétní trase.
7 50430
Portál pro školy
Účty škol, přihlášení odkazem bez hesla, pozvánky, profil školy, e-mailová komunikace a správcovské rozhraní.
Běžná aplikační práce s účty a oprávněními. Rozsah je daný počtem stavů, kterými účet projde: pozvánka, uplatnění kódu, přihlášení, změna profilu, odhlášení, odebrání.
8 21125
Data České školní inspekce
Import seznamu inspekcí, strojový rozbor inspekčních zpráv do porovnatelné podoby, profily škol z portálu INSPIS a jejich zobrazení.
Řádků málo, práce hodně. Rozbor zpráv psaných volným textem potřebuje vlastní ověření, jak dobře vychází. Bez něj se na web dostanou nesprávná tvrzení o konkrétní škole a nikdo si toho nevšimne.
4 13525
Analýza dat a metodika
Soupis zdrojů sloupec po sloupci, slovník ukazatelů, oponentury vlastních návrhů, audity a doklady k měřením.
Tohle dělá datový analytik. Odhad odpovídá 112 dokumentům a zhruba 250 tisícům slov, které vznikly rozborem dat; popis hotového kódu v nich nehledejte.
-40
Návrh a vzhled
Vizuální podoba, komponenty, chování na telefonu, přístupnost.
Měří se špatně, protože je rozptýlený po celém webu. Odhad odpovídá jednomu redesignu a průběžné údržbě; dvě třetiny návštěv jsou z telefonu, takže to není okrajová položka.
-25
Simulátor a obtížnost přijetí
Rozdělení uchazečů do kohort, pásma přijetí podle bodů a rozhraní, které k oboru vrátí, jak těžké bylo se na něj dostat.
Kódu je málo. Rozhodnout, co se smí tvrdit, stálo mnohonásobně víc než ho napsat. Web schválně nepředpovídá přijetí konkrétního dítěte; odhad zahrnuje i varianty výpočtu, které jsem zamítl.
2 55620
Testy a průběžná kontrola
59 testů a osm automatických běhů, které je spouštějí nad každou změnou.
Součet testů napříč bloky. Část z nich spouští celou datovou linku proti falešnému zdroji, což je dražší než běžné testy jednotek. Odhad se snížil z 20 dnů, protože nasazení a konfigurace odešly do vlastního bloku níže.
6 99115
Provoz, konfigurace a nasazení
Nasazení webu a odděleně běžícího sklízeče, databáze, bezpečnostní hlavičky, správa závislostí, obsluha vygenerovaných souborů.
V první podobě odhadu tenhle blok chyběl úplně, protože se v žádném adresáři nesoustředí a při inventuře podle složek se přehlédne. Rozbor commitů ho našel: 85 změn ve 27 různých dnech, tedy víc rozptýlených dnů než u většiny funkcí. Patří sem i práce, kterou nikdo neplánuje, například vygenerovaný soubor, který se rozejde se zdrojem a musí se srovnat.
-15
Datová linka
Automatické hlídání, zda zdroje vydaly nová data, jejich stažení a kontrola, oznámení správci a po jeho schválení příprava převzetí.
Malá věc s velkým dopadem. Bez ní je každé nové vydání dat ruční práce. Odhad je vyšší, než by rozsah napovídal, protože podstatná část sedí v ošetření případů, kdy zdroj změní tvar souboru.
1 85015
Maturitní výsledky
Import dvanácti ročníků, napojení na obory a jejich zobrazení u školy i oboru.
Přímočařejší než ostatní datové bloky, protože zdroj nese klíč, kterým se výsledky na obory napojí, aniž by se mapa dohledávala.
2 01412
Vedení projektu, koordinace a přejímka16 % k práci výše, běžná režie u dodávky této velikosti-59
Celkem66 471426

367 člověkodnů práce plus 59 na vedení. Pro představu: 426 člověkodnů odpovídá zhruba dvěma rokům jednoho člověka na plný úvazek, nebo osmi měsícům čtyřčlenného týmu.

Při běžných českých sazbách

VariantaKč/hodCena dodávky
Dolní mez
Menší studio nebo samostatní vývojáři na dlouhodobé spolupráci.
1 2004 089 600 Kč
Střed
Vážený průměr rolí: datový inženýr, vývojář rozhraní, analytik, vedení projektu.
1 4004 771 200 Kč
Horní mez
Zavedená agentura se smlouvou o dostupnosti a zárukou na dílo.
1 8006 134 400 Kč
Odhad ceny vývoje u dodavatele
4,1 mil. Kč až 6,1 mil. Kč
Střed 4,8 mil. Kč při 426 člověkodnech, 8 hodinách denně a sazbě 1 400 Kč za hodinu.

Kde se odhad může mýlit

  • Člověkodny jsou odhad z rozsahu a obtížnosti, ne záznam odpracovaného času. Nikdo takový záznam nevede, protože projekt tímto způsobem nevznikal.
  • Poměr 181 řádků kódu na člověkoden je na horní hranici běžné produktivity. Odhad proto spíš podhodnocuje; tým, který stejná data vidí poprvé, by strávil víc času rozborem zdrojů než psaním.
  • Cena nezahrnuje průzkum mezi uživateli, testování s rodiči a žáky, právní posouzení ani provoz po spuštění.
  • Sazba dodavatele obsahuje marži a nefakturovaný čas. Vlastní zaměstnanecký tým by týž rozsah zvládl levněji, veřejná zakázka na obdobný portál bývá dražší.
  • Odhad říká, co by stál tento výsledek. Neříká, že by ho tým v tomto tvaru navrhl; část rozhodnutí vznikla až z toho, co se v datech našlo.
  • Dva bloky se opravily poté, co rozbor 514 commitů ukázal, kam čas opravdu šel: katalog dostal o patnáct dnů víc a provoz s konfigurací přibyl jako blok, který v první podobě chyběl. Ostatní bloky se nepřepisovaly, protože naměřený čas říká, jak rychle práci odbyl model, ne jak dlouho by trvala týmu. Dopravní dostupnost je toho případ: šest procent naměřeného času a přitom algoritmicky nejtěžší kus webu.

8.Kolik to stálo doopravdy

Žádný tým na tom nedělal. Web jsem postavil sám ve spolupráci s jazykovým modelem: určuju, co se má stát a proč, rozhoduju sporné otázky a dílo přebírám, model píše kód, rozbory a dokumentaci.

Rozdíl je řádový a stojí za to říct nahlas, čím to je. Nejdražší položkou klasické dodávky bývá rozbor dat. Někdo musí otevřít tabulku o devadesáti jedna sloupcích a zjistit, co v nich vlastně je. Pro tým jsou to týdny, tady odpoledne. Druhá věc: oponentura vlastního návrhu tu nestojí nic. Když se ukáže, že jsem ukazatel postavil špatně, přepíšu ho. Nehledám argument, proč to tak stačí.

Co nezlevnilo ani o korunu: rozhodnout, co se smí rodičům tvrdit. Právě proto mám v repozitáři 112 dokumentů. Většina z nich popisuje, proč se něco počítá tak a ne jinak, a co jsem zamítl. Jak kód funguje, v nich nenajdete.

Kolik času to stálo mě
zhruba 200 hodin
Za 9 měsíců, od 24. 1. 2026. Hodiny jsem si nevykazoval, číslo jsem zrekonstruoval z časových odstupů mezi 596 commity. Čistý čas nad tímto webem to není - v týchž hodinách mi vznikal i druhý projekt.

Vedle sebe to tedy stojí takhle: zhruba 200 hodin proti 3 408 hodinám, které by na týž rozsah potřeboval dodavatelský tým. Dělit jedno druhým a vydávat výsledek za míru úspory by bylo přehnané. Obě čísla jsou odhady a každé se může mýlit o desítky procent. Řádový rozdíl ta dvojice ukazuje spolehlivě, přesný násobek už ne.

Proč by zakázkový web vypadal jinak

Oba způsoby vedení se liší hlavně v tom, kdy se rozhoduje, co web bude umět. Cena je až důsledek. Samostatná stránka staví vedle sebe sedm fází veřejné zakázky a pětikrokovou smyčku, kterou vznikal tenhle web, a dokládá to pěti případy, kdy se rozhodnutí ukázalo jako špatné až po tom, co padlo.

Jak projekt vznikal: zakázka proti rozhodování za pochodu

9.Co stojí provoz

Provoz je oproti vývoji zanedbatelný, protože web je z velké části hotové soubory. Platí se čtyři věci:

PoložkaK čemuŘádově měsíčně
Hosting webuSestavení a rozvoz stránek, měření návštěvnosti20 USD
Sklízeč novinekDvakrát denně obejde feedy škol; běží odděleně od webu5 USD
DatabázeOdběry e-mailem, novinky škol, účty portálu0 až 19 USD
Doménaprijimackynaskolu.czdo 30 Kč

Odhad z veřejných ceníků, ne z faktur; databáze je zatím v bezplatném pásmu. Dohromady řádově 600 až 1 100 Kč měsíčně při kurzu kolem 23 Kč za dolar. Odesílání e-mailů se v tomto objemu vejde do bezplatného pásma.

Podstatné je, jak se částka chová při růstu. Předgenerované stránky rostou s návštěvností pomalu; kdyby se únorová špička ztrojnásobila, hosting to nepocítí. Dražší by bylo spíš rozšíření odběru novinek, kde se platí za odeslané zprávy.

Otázky k tomuto shrnutí, k metodice výpočtů nebo k datům: eda@prijimackynaskolu.cz. Zdrojový kód a všechny rozbory jsou na GitHubu.