Reference

SAFETY Kyjov s.r.o.Služby20264 týdny

Nabídka pro zákazníka odchází odkazem, ne přílohou, a Google dává webu 99 ze 100

Firma na bezpečnost práce, požární ochranu a ekologii měla jednu dlouhou stránku bez podstránek. Dnes má web s vlastní stránkou pro každou službu a obor, firemní ceník o osmdesáti osmi položkách a nabídky, které zákazník otevře na mobilu a rovnou přijme. K tomu řízenou dokumentaci, kterou si vede sama a její zákazníci ji najdou po přihlášení ve vlastním portálu. Bez cookie lišty, protože měřit se dá i bez ní.

RozsahWeb na míruAplikace na míruSpráva a rozvojSEO a obsah
  • 99 / 100

    výkon na mobilu podle Googlu

    Na velké obrazovce 100. Načtení hlavního obsahu za 2,0 s na mobilu a 0,5 s na desktopu

    PageSpeed Insights, Lighthouse 13.4.1, 9. 8. 2026

  • 3× 100

    přístupnost, osvědčené postupy a technické SEO

    Plný počet ve všech třech oblastech, na mobilu i na desktopu, bez jediného nálezu

    PageSpeed Insights, Lighthouse 13.4.1, 9. 8. 2026

  • 0

    cookies a cizí skripty

    Proto na webu není lišta se souhlasem. Statistiky přitom běží

    Měření v prohlížeči: žádná hlavička Set-Cookie, všechny požadavky na vlastní doménu, 9. 8. 2026

  • 88

    položek ve firemním ceníku

    V šestnácti kategoriích, s 206 množstevními pásmy a 57 citacemi předpisů

    Produkční databáze, 9. 8. 2026

  • 44

    adres místo jedné dlouhé stránky

    Pět služeb, čtrnáct oborů, devět referencí a profil každého z pěti lidí

    Produkční sitemap.xml, 9. 8. 2026

  • 25

    agend v administraci

    Sedmatřicet obrazovek nad padesáti pěti tabulkami, bez jediného doplňku zvenčí

    Zdrojový kód a produkční databáze, 9. 8. 2026

  • Přišel jsem s tím, že potřebujeme nový web, a odcházím se systémem na nabídky. Nejdřív se ptal, jak nabídku děláme dneska a co nám na tom bere čas, a teprve pak něco navrhoval. To jsem u dodavatele webu ještě nezažil.
    Ing. Roman Frelichjednatel, SAFETY Kyjov s.r.o.
  • U školení se lidé ptají pořád na to samé: co je čeká, jak dlouho to trvá a jestli to stačí podle zákona. Dneska je to na webu i s nejčastějšími dotazy, takže místo psaní mailu pošlu odkaz. A doklady zákazníkům nedohledávám ve složkách, mají je ve svém portálu a potvrdí si tam i to, že je četli.
    Bc. Monika Frelichováškolení první pomoci, SAFETY Kyjov s.r.o.
Přehled funkcí
  • Ceník uvnitř firmy, ne na webu
  • Nabídka odchází jako odkaz, ne jako příloha
  • Průvodce, který sestaví rozsah, ne cenu
  • Pět služeb a čtrnáct oborů místo jedné dlouhé stránky
  • Statistiky bez lišty se souhlasem
  • Administrace, ve které se dá změnit všechno
  • Řízená dokumentace, kterou si firma vede sama
  • Zákazník si svoje dokumenty otevře sám po přihlášení
  • Přístupnost jako podmínka spuštění
  • U ceny je vidět, ze kterého paragrafu povinnost plyne
  • Odeslaná nabídka se změnou ceníku nezmění
  • Odmítnutá položka z nabídky nezmizí
  • Verze nabídky vzniká při odeslání
  • Tužka přímo na webu
  • Zákazník se páruje podle IČO
  • Nula cizích skriptů, tedy ani cizí měření
  • Ranní hlídka nabídek
  • Dokumentace se zakládá přetažením celé složky
  • Postavené na mém vlastním jádru, ne od nuly
  • Struktura webu se dá číst i strojově
  • Vylepšení z jiných webů se sem dostanou taky

Celý přehled funkcí

Mobilměřeno 9. 8. 2026
99
Výkonvýborné
100
Přístupnostvýborné
100
Praxevýborné
100
SEOvýborné
Laboratorní měření
LCP1,95 svýborné
CLS0,00výborné
TBT3 msvýborné
TTFB36 msvýborné
Desktopměřeno 9. 8. 2026
100
Výkonvýborné
100
Přístupnostvýborné
100
Praxevýborné
100
SEOvýborné
Laboratorní měření
LCP532 msvýborné
CLS0,00výborné
TBT26 msvýborné
TTFB77 msvýborné

Ověřit v PageSpeed Insights

SAFETY Kyjov je pět lidí, kteří firmám na jižní Moravě drží bezpečnost práce, požární ochranu, školení, koordinaci na staveništi a ekologii. Patnáct let praxe, reference od elektroniky přes potravinářství a zdravotnický materiál až po hotel a aquapark. Jejich web byl přitom jedna dlouhá stránka na hotové platformě, bez podstránek, bez blogu a s referencemi v podobě obrázků cizích log.

To není kosmetická vada. Firma umí pět různých věcí, ale web uměl vyprávět jen o dvou. Kdo hledal koordinátora na stavbu nebo někoho na hlášení odpadů, neměl na co dojít. A hlavně: web neměl jedinou stránku, na kterou by šlo cílit dotaz typu „bezpečnost práce v potravinářské výrobě“, což je přesně to, co lidé hledají.

Podklad, se kterým jsme začínali, měl navíc šest věcí špatně, a přišlo se na to jejich ověřením proti živému webu. Byl v něm zkomolený název firmy, na kterém stál i tón komunikace. Počítal s jedním člověkem místo s týmem. Dělil nabídku na dvě oblasti místo pěti a ty dvě chybějící jsou přitom na trhu vzácnější, tedy prodejně cennější. Školení ve virtuální realitě, jediná věc, kterou konkurence v okolí nemá, byla schovaná v jedné větě na konci odstavce.

A pak dvě rozhodnutí o řemesle. Koncept chtěl kalkulačku, která na tři kliky řekne cenu, a ochranu formulářů cizím skriptem od velké firmy. Obojí jsem odmítl a níž je napsané proč.

Během stavby se ukázalo, že web není to hlavní, co firmě bere čas. Nabídky ano. Každá se skládala ručně, ceny se hledaly ve starších dokumentech a odesílala se příloha, o které nikdo neví, jestli ji zákazník otevřel. Odtud se zadání rozšířilo z webu na ceník a nabídky. A hned za nimi na dokumentaci: doklady zákazníků ležely ve složkách a jediný způsob, jak je zákazník dostal, byl mail.

Pět oblastí, ne dvě. Každá služba dostala vlastní stránku a k tomu vznikla samostatná větev oborů. Oborová stránka nemluví o firmě, ale o rizicích toho provozu: ve skladu o vozících a regálech, ve vinařství o oxidu uhličitém ve sklepě, na stavbě o tom, že se na jednom místě potká pět firem. Tohle je hlavní nástroj vyhledávání, protože na „BOZP Kyjov“ stojí v cestě celý kraj, kdežto na obor se dá dostat nahoru.

Kalkulačka ceny se nahradila průvodcem poptávkou. Cenu za BOZP určuje počet provozoven, rizikovost a stav dokumentace. Tříklikový odhad by byl buď tak široký, že je k ničemu, nebo tak úzký, že se nedá dodržet, a firma by pak buď couvala z vlastního čísla, nebo dělala pod cenou. Průvodce proto sestaví rozsah poptávky a předvyplní formulář. Firma dostane kvalifikovanou poptávku a cenu pošle člověk.

Jedna akcentní barva. Logo je oranžové, koncept k němu chtěl přidat jantarovou pro bezpečnost práce a červenou pro požární ochranu. Tři teplé barvy z jednoho výseku spektra se vedle sebe rozmažou a web ztratí tvar. Oranžová proto zůstala jediným akcentem a patří akcím, zatímco oblasti se rozlišují ikonou a tenkým signálním proužkem.

Značková oranžová se musela na text ztmavit. Kontrast se počítá, neodhaduje: #F26522 má proti bílé 3,15 a norma chce 4,5. Ve světlém režimu proto na text jde ztmavená varianta, v tmavém stačí barva z loga. Původní odstín zůstal plochám bez písma, obrysům a logu, takže značka nikde neztratila svůj tón.

Nula cizích skriptů. Koncept doporučoval ochranu formulářů od velké firmy. Je to cizí skript, tedy cizí měření návštěvníků a další zpomalení. Nahradila ho past na roboty, časová značka a omezení počtu odeslání, což na tuhle třídu webu stačí. Ze stejného rozhodnutí plyne i to, že se návštěvnost měří vlastními silami a bez cookies, takže web nepotřebuje lištu se souhlasem.

Ceník dovnitř, nabídka ven. Ceny nepatří na veřejný web, protože se stejně počítají podle provozu. Patří do administrace jako podklad, ze kterého se nabídka sestaví za pár minut místo hodiny ve Wordu.

A rozhodnutí, které stojí za rychlostí i za tou úrovní: nestavěl jsem to od nuly. Weby stavím na vlastním jádru, které si píšu a živím sám. Přihlášení, práva, knihovna médií, editor, pošta, zálohy, měření, přístupnost i celá administrace jsou hotové balíčky, které mám odzkoušené z předchozích projektů. Měsíc práce tedy nešel na to, aby web uměl základní věci, ale na to, čím se tahle firma liší: na pět oblastí, čtrnáct oborů, ceník s pásmy, nabídky a řízenou dokumentaci.

Je to vědomá střední cesta mezi dvěma krajnostmi. Kdo staví každý web od začátku, platí pokaždé znovu za tytéž samozřejmosti a nezbude na to, co firmě opravdu pomůže. Kdo si vezme hotový redakční systém, dostane to levně, ale s cizími doplňky, které nikdo nehlídá a přes které vede cesta dovnitř. Vlastní jádro je jediná varianta, u které můžu za každý řádek ručit a zároveň dodat za měsíc.

Web běží na Next.js, obsah i obchodní data jsou v PostgreSQL a stránky se skládají na serveru. V Dockeru běží aplikace s databází v uzavřené síti, ven vede jen Caddy, který sám obnovuje certifikát a nastavuje bezpečnostní hlavičky.

Ceník má dvě úrovně kategorií a osmdesát osm položek. Každá položka může mít množstevní pásma: buď cenu za jednotku v tom pásmu, nebo pevnou cenu za celé pásmo. Tím se pokryjí obě věci, které firma běžně potřebuje, tedy „prvních deset po 250, dalších padesát po 180“ i „nad sto zaměstnanců pevně“. K položkám patří citace předpisů s odkazem do e-Sbírky, takže je u ceny vidět, ze kterého paragrafu povinnost plyne.

Nabídka vzniká z ceníku, ale nese si kopii názvu, popisu i ceny z okamžiku sestavení. Pozdější změna ceníku tak nemá jak přepsat doklad, který zákazník už drží. Zákazníkovi odejde odkaz na neuhodnutelnou adresu (dvaatřicet náhodných bajtů, ne pořadové číslo). Tam si nabídku přečte, může si odškrtnout volitelné položky, k jednotlivým částem napsat dotaz a nakonec přijmout, odmítnout, nebo dát vědět, že má zájem. Firma vidí, kdy ji poprvé otevřel. Každé odeslání založí verzi s hodnotami, ne s odkazy, takže i smazaná položka ve staré verzi zůstane.

Statistiky běží bez jediné cookie. Opakovanou návštěvu rozliší otisk počítaný ze soli, která žije jen v paměti procesu a každou půlnoc se vymění; stará se zahodí, takže zpětné dohledání konkrétního člověka není možné ani z celé databáze. Měří se návštěvy a zdroje, kroky k poptávce a rychlost u skutečných návštěvníků, ne jen v laboratoři.

Administrace má pětadvacet agend a sedmatřicet obrazovek nad padesáti pěti tabulkami. Obsah stránek, služby, obory, reference, tým, osvědčení, blog, ceník, nabídky, zákazníci, poptávky, nastavení pošty i statistiky. Nová agenda se přidává popisem polí, ne psaním další obrazovky. Navíc: přihlášený správce vidí přímo na webu tužku, klikne u sekce a upraví ji v okně, aniž by hledal, kde ten text v administraci bydlí.

Řízená dokumentace je z toho, co přibylo nad rámec původního zadání, ta největší část. Firma si v administraci vede registr dokumentů svých zákazníků: dvacet osm druhů, kategorie, štítky, hierarchie, verze a schvalovací oběh. Zakládá se přetažením celé složky z počítače, a když se tatáž složka přetáhne podruhé, nahraje se jen soubor, který se změnil. Zveřejnit dokument bez schválené a uzamčené verze nejde, takže se k zákazníkovi nedostane rozpracovaná verze. Vede si to firma sama, ne já: jsou to její doklady a nemá být na kom závislá.

Zákazník firmy má vlastní portál. Přihlásí se, vidí jen svoje dokumenty, stáhne si je jednotlivě nebo naráz v ZIPu a potvrdí, že se s nimi seznámil; potvrzení se uloží jako úkon s časem a otiskem adresy, ne jako poznámka do papíru. Ověřoval jsem to v prohlížeči, ne testem: zákazník A nevidí nic zákazníka B, cizí dokument i cizí soubor vracejí 404 i při přímém zadání adresy, pozvánka se ukáže právě jednou a v databázi po ní zůstane jen otisk, a relace portálu s relací administrace se navzájem neuznají. Denní hlídka navíc ráno ohlásí dokumenty, kterým běží termín, a když není pošta nastavená, nedá razítko a raději se ozve.

Provoz se hlídá sám. V pracovní dny ráno projde úloha nabídky a upozorní na ty, kterým končí platnost nebo na které nikdo nereagoval; když není co hlásit, e-mail nechodí. Záloha databáze běží denně, ověřuje si velikost i celistvost archivu a poškozenou zálohu raději smaže, než aby vypadala jako pojistka.

Google dává webu 99 ze 100 na mobilu a 100 na velké obrazovce, k tomu plný počet za přístupnost, osvědčené postupy i technické SEO, a to bez jediného nálezu. Hlavní obsah se na mobilu vykreslí za dvě vteřiny, na desktopu za půl. Změřeno přes PageSpeed Insights 9. 8. 2026, přeměřit si to může kdokoli.

Z jedné stránky je čtyřiačtyřicet adres: pět služeb, čtrnáct oborů, devět referencí a profil každého z pěti lidí včetně praxe a osvědčení. Každá stránka nese strukturovaná data, takže vyhledávač i jazykový model vidí, o čem je, ne jen text.

Na webu není lišta se souhlasem, a přesto firma vidí, kolik lidí přišlo, odkud a kolik z nich se ozvalo. Web neukládá do prohlížeče nic a nenačítá nic z cizí domény, což mimochodem znamená i to, že jeho rychlost nezávisí na tom, jak je dnes vytížený cizí server.

Nabídka se dnes sestaví z ceníku a odejde odkazem. Osmdesát osm nacenených položek v šestnácti kategoriích, dvě stě šest množstevních pásem a sedmapadesát citací předpisů. Zákazník ji otevře v telefonu, odškrtne, co nechce, a přijme, nebo se zeptá. Firma o tom ví.

Dokumentace zákazníků je mimo složky a mimo maily. Firma si ji vede sama v administraci, zákazník ji najde po přihlášení ve svém portálu a potvrdí tam, že ji četl. Nic z toho nejde přes nás a nic z toho se nedá vyřešit tím, že si někdo vzpomene.

Web je z hlediska správy hotový, ne rozdělaný. Texty, ceny, lidé, obory i reference se mění v administraci a nikdo kvůli tomu nemusí volat mně. Blog je připravený a čeká na první článek, což je vědomý stav: obsah má psát ten, kdo obor dělá.

Celé to vzniklo za měsíc, a to i s ceníkem, nabídkami a dokumentací. Není to proto, že by se spěchalo, ale proto, že se nezačínalo od nuly: jádro, na kterém web stojí, si píšu sám a nese hotové to, co je na každém webu stejné. Vedlejší efekt je i po předání: co se v jádru zlepší kvůli jinému webu, dostane tenhle taky.

Poznámka na rovinu: web běží na vlastní doméně od 9. 8. 2026, takže o pozicích ve vyhledávání se dnes nedá tvrdit nic. Čísla výš jsou naměřená, ne slibovaná. Až data z vyhledávání budou, doplní se sem.

Jádro zadání

9 funkcí

Co klient chtěl a bez čeho by web nefungoval

  • Ceník uvnitř firmy, ne na webu

    Osmdesát osm položek v šestnácti kategoriích, každá s množstevními pásmy. Ceník je jen pro firmu: veřejný web žádnou částku neukazuje, protože bezpečnost práce se cení podle provozu, ne podle sazebníku.

    Technická poznámka

    Pásem je dvě stě šest. Pásmo umí buď cenu za jednotku, nebo pevnou cenu za celé pásmo, takže „nad sto zaměstnanců pevně“ i „prvních deset po 250 a dalších padesát po 180“ je jeden mechanismus, ne dvě zvláštní pole, která se navzájem vylučují.

  • Nabídka odchází jako odkaz, ne jako příloha

    Nabídka se sestaví z ceníku a zákazníkovi odejde odkaz na vlastní stránku. Tam si ji přečte na mobilu, může ji přijmout, odmítnout, nebo se k jednotlivým částem zeptat. Firma vidí, kdy ji poprvé otevřel.

    Technická poznámka

    Adresa je dvaatřicet náhodných bajtů, ne pořadové číslo. Přijetí je průkazný projev vůle se záznamem času, ale není to elektronický podpis podle eIDAS a je to na té stránce napsané. Slibovat u nabídky víc, než co doklad unese, se nevyplácí.

  • Průvodce, který sestaví rozsah, ne cenu

    Původní zadání chtělo kalkulačku ceny na tři kliky. Místo ní vyplní návštěvník pár kroků o svém provozu a firmě přijde poptávka, ze které jde rovnou postavit nabídku. Cenu pošle člověk.

    Technická poznámka

    Tříklikový odhad ceny BOZP je buď tak široký, že je k ničemu, nebo tak úzký, že se nedá dodržet. Vedlejší efekt téhle výměny je lepší než původní záměr: místo e-mailu „kolik to stojí“ chodí poptávka s údaji o provozu.

  • Pět služeb a čtrnáct oborů místo jedné dlouhé stránky

    Starý web byl jedna stránka bez podstránek. Dnes má web čtyřiačtyřicet adres: pět služeb, čtrnáct oborů, devět referencí a profil každého člověka z týmu.

    Technická poznámka

    Oborové stránky jsou tu hlavní nástroj vyhledávání. „BOZP pro potravinářskou výrobu“ je dotaz, na kterém se dá uspět, na rozdíl od „BOZP Kyjov“, kde stojí v cestě celý kraj. Každá oborová stránka mluví o rizicích toho provozu, ne o firmě.

  • Statistiky bez lišty se souhlasem

    Web měří návštěvnost, zdroje, cestu k poptávce i rychlost u skutečných návštěvníků. Neukládá přitom do prohlížeče nic, takže žádná cookie lišta není potřeba a čísla nezkresluje nikdo, kdo souhlas odmítl.

    Technická poznámka

    Opakovanou návštěvu rozliší otisk spočítaný ze soli, která žije jen v paměti procesu a každou půlnoc se vymění. Stará se zahodí, takže zpětné dohledání konkrétního člověka není možné ani z celé databáze. Právě proto to není osobní údaj a nepotřebuje souhlas.

  • Administrace, ve které se dá změnit všechno

    Pětadvacet agend a sedmatřicet obrazovek: stránky, služby, obory, reference, tým, osvědčení, blog, ceník, nabídky, zákazníci, poptávky, dokumentace, pošta, statistiky. Žádný doplněk zvenčí, který by bylo potřeba hlídat a aktualizovat.

    Technická poznámka

    Nová agenda se přidává schématem, ne psaním obrazovky. Seznam, formulář, kontroly i historie vzniknou z popisu polí, takže druhý web dostane totéž bez druhého vývoje.

  • Řízená dokumentace, kterou si firma vede sama

    Celý registr dokumentace pro zákazníky firmy: dvacet osm druhů dokumentů, kategorie, štítky, hierarchie, verze a schvalovací oběh. Zveřejnit dokument bez schválené a uzamčené verze nejde, takže se k zákazníkovi nedostane rozpracovaná verze.

    Technická poznámka

    Oběh má jedenáct pravidel a každé je ověřené zvlášť: odeslání zmrazí verzi, správce nesmí rozhodnout za adresáta, nahrání do uzamčené verze odkáže na novou, vypnutý účet svou žádost uvolní. Bez těchhle pravidel je to sdílená složka s hezčím rozhraním.

  • Zákazník si svoje dokumenty otevře sám po přihlášení

    Firma nemusí posílat doklady mailem. Zákazník se přihlásí do portálu, vidí jen svoje dokumenty, stáhne si je jednotlivě nebo naráz v ZIPu a potvrdí, že se s nimi seznámil. Potvrzení se uloží jako úkon s časem, ne jako poznámka.

    Technická poznámka

    Ověřené v prohlížeči, ne testem: zákazník A nevidí nic zákazníka B (cizí dokument i cizí soubor vrací 404 i při přímém zadání adresy), pozvánka se ukáže právě jednou a v databázi je jen její otisk, a relace portálu s relací administrace se navzájem neuznají.

  • Přístupnost jako podmínka spuštění

    Lighthouse dává přístupnosti sto bodů z sta na mobilu i na velké obrazovce, bez jediného nálezu. Web se dá ovládat klávesnicí, čte ho odečítač a funguje ve světlém i tmavém režimu.

    Technická poznámka

    Kontrast se u každé barvy počítá, neodhaduje. Značková oranžová #F26522 má proti bílé jen 3,15 a potřeba je 4,5, takže ve světlém režimu jde na text ztmavená varianta a původní barva zůstala plochám bez písma a logu.

Vychytávky

9 funkcí

Detaily, které nikdo nezadal a dělají rozdíl

  • U ceny je vidět, ze kterého paragrafu povinnost plyne

    Položka ceníku si nese citace předpisů i s odkazem do e-Sbírky. Zákazník se tak u nabídky nemusí ptát, jestli si to firma vymyslela, a firma nemusí hledat, kde to bylo.

    Technická poznámka

    Citací je dnes sedmapadesát. Ukládají se tak, jak se čtou („§ 103 odst. 2 zákona č. 262/2006 Sb.“), a odkaz je nepovinný: u citace, ze které nešel předpis spolehlivě poznat, je lepší žádný odkaz než odkaz vedle.

  • Odeslaná nabídka se změnou ceníku nezmění

    Řádek nabídky nese kopii názvu, popisu i ceny z okamžiku sestavení. Zdražení v ceníku se tak nikdy nepromítne do nabídky, kterou už zákazník drží v ruce.

    Technická poznámka

    Zní to samozřejmě, ale běžné řešení je opačné: řádek odkazuje do katalogu a cena se dopočítá při zobrazení. Takový doklad se zpětně mění sám od sebe a nikdo si toho nevšimne, dokud se někdo neozve s jinou částkou.

  • Odmítnutá položka z nabídky nezmizí

    Část položek může být volitelná. Když si je zákazník odškrtne, zůstanou v nabídce, jen se nepočítají do součtu. Může si je kdykoli vrátit a firma vidí, co odmítl.

    Technická poznámka

    Filtrování se dělá uvnitř výpočtu součtu, ne u každého volajícího. Součet se počítá na deseti místech od seznamu po e-mail a jedno zapomenuté místo by znamenalo dvě různé částky u téže nabídky.

  • Verze nabídky vzniká při odeslání

    Každé odeslání založí verzi s hodnotami, ne s odkazy. I položka, která se z nabídky později smaže, tak ve staré verzi zůstane a je vidět, co přesně tehdy odešlo.

  • Tužka přímo na webu

    Přihlášený správce vidí na stránce tužku. Klikne u sekce, otevře se okno s jejím formulářem a po uložení se stránka rovnou obnoví. Nemusí hádat, kde v administraci ten text bydlí.

    Technická poznámka

    Návštěvník o té funkci nemá jak vědět. Do stránky jde jen několik řádků, které se podívají na nápovědnou cookie, a teprve když ji najdou, dotáhne se zbytek editoru. Cookie sama o sobě není oprávnění: každý zápis se ověřuje na serveru.

  • Zákazník se páruje podle IČO

    Z nabídky vzniká záznam zákazníka. Páruje se podle IČO, které je jediný spolehlivý klíč, a bez něj podle názvu. Nabídka si přesto dál nese vlastní kopii údajů, protože je to doklad.

  • Nula cizích skriptů, tedy ani cizí měření

    Web nenačítá nic z cizí domény: žádné písmo z Googlu, žádný widget, žádný měřicí skript. Všechny požadavky včetně písem a obrázků vedou na vlastní adresu.

    Technická poznámka

    Zásady obsahu (CSP) to navíc vynucují na úrovni prohlížeče, takže cizí skript by se nespustil, ani kdyby ho tam někdo omylem přidal. Vedlejší efekt: rychlost není závislá na tom, jak je dnes vytížený cizí server.

  • Ranní hlídka nabídek

    V pracovní dny ráno projde úloha nabídky a upozorní na ty, kterým končí platnost nebo na které nikdo nereagoval. Když není co hlásit, e-mail nechodí.

    Technická poznámka

    Úlohu i její záznam v cronu zakládá nasazovací skript, takže po přeinstalování serveru nezmizí. Routa je chráněná vlastním klíčem: bez něj odmítá všechno, i z vlastního stroje.

  • Dokumentace se zakládá přetažením celé složky

    Do registru se dá přetáhnout celý strom složek z počítače naráz. Když se totéž přetáhne podruhé, nahraje se jen soubor, který se změnil, a vznikne u něj jedna nová verze.

    Technická poznámka

    Ověřeno na stromu se 152 soubory, z toho 150 v jedné složce, což je past na prohlížeč: čtení položek vrací po stovce a naivní kód o zbytek přijde. Soubory leží mimo web a mimo knihovnu médií a vydávají se podepsanou adresou s krátkou platností.

Bonusy nad rámec

3 funkce

Práce navíc, která se nepočítala

  • Postavené na mém vlastním jádru, ne od nuly

    Administrace, obsah, ceník, nabídky, dokumentace i měření jsou samostatné balíčky, které si stavím a živím sám. Proto tenhle web vznikl za měsíc a v téhle úrovni: nezačínalo se prázdným souborem a čas šel do toho, čím se ta firma liší.

    Technická poznámka

    Kdo staví každý web od začátku, platí pokaždé znovu za tytéž věci: přihlášení, práva, knihovnu médií, editor, poštu, zálohy, přístupnost. Kdo si vezme hotový redakční systém, dostane to levně, ale s cizími doplňky, které nikdo nehlídá. Vlastní jádro je střední cesta a jediná, u které můžu za každý řádek ručit.

  • Struktura webu se dá číst i strojově

    Každá stránka nese strukturovaná data: profil firmy, popis služby, drobečkovou navigaci a časté dotazy s odpověďmi. Vyhledávač i jazykový model tak vidí, o čem stránka je, ne jen text.

  • Vylepšení z jiných webů se sem dostanou taky

    Jádro žije dál. Když kvůli jinému webu vznikne lepší editor, rychlejší hledání nebo oprava v přístupnosti, dostane to i tenhle web, aniž by se na něm sáhlo na jediný řádek obsahu.

  • Next.js

    Stránky se skládají na serveru, takže prohlížeč dostane hotové HTML. Web stojí na tom, že ho lidé najdou přes obor a službu, a to se bez serverového vykreslení dělá špatně.

  • React

    Interaktivní je jen to, co interaktivní být musí: průvodce poptávkou, sestavování nabídky a administrace. Zbytek webu je serverový a do prohlížeče o něm nejde ani řádek navíc.

  • TypeScript

    Ceník počítá s penězi a nabídka je doklad. Typy jsou tu levná pojistka: sestavení spadne dřív, než se rozdíl v částce dostane k zákazníkovi.

  • Tailwind CSS

    Barvy a odsazení mají jediné místo pravdy. Značková oranžová neprošla kontrastem, a protože je uložená jako token, opravila se na jednom místě a ne ve stovce komponent.

  • Prisma

    Padesát pět tabulek a dvaadvacet migrací v jednom schématu. Změna datového modelu je tak vidět v gitu, včetně data a důvodu.

  • PostgreSQL

    Ceník, nabídky a jejich verze potřebují transakce. Kopie ceny v nabídce je pak jistota, ne dohoda: odeslaný doklad nemá jak se zpětně změnit.

  • Docker a Caddy

    Aplikace a databáze běží jako dvě služby v uzavřené síti, ven nevede žádný port. Certifikát se obnovuje sám a bezpečnostní hlavičky jsou v jednom souboru, takže by v něm cizí skript ani nemohl běžet.

  • S3 úložiště

    Dokumentace zákazníků leží mimo aplikaci a vydává se podepsanou adresou s krátkou platností. Nasazení tak nikdy nesáhne na soubory klientů.

  • safetykyjov.cz
    Úvodní stránka webu SAFETY Kyjov na velké obrazovce
    Úvodní stránka: pět oblastí hned nad ohybem, ne až v patičce
  • Stránka služby Bezpečnost práce s přehledem v kostce
    Stránka služby: co firma dostane, shrnuté v pěti bodech
  • Rozcestník oborů s fotografiemi provozů
    Čtrnáct oborů, každý s riziky svého provozu
  • Úvodní stránka webu SAFETY Kyjov na mobilu
    Na mobilu drží zavolání a poptávka spodní lištu, palec na ně dosáhne
Od zadání ke spuštění
4 týdny
Co se dodalo
Web na míru, Aplikace na míru, Správa a rozvoj, SEO a obsah
Web běží od
2026
  • 99 / 100výkon na mobilu podle Googlu
  • 3× 100přístupnost, osvědčené postupy a technické SEO
  • 0cookies a cizí skripty
  • 88položek ve firemním ceníku
  • 44adres místo jedné dlouhé stránky
  • 25agend v administraci

Potřebujete něco podobného

Napište nám, co řešíte. Ozveme se do jednoho pracovního dne a řekneme rovnou, jestli to umíme a co to bude stát.