Jakub Kubík
Napište mi

Všechny projekty

Případová studie

ozjuliana.sk: web malého sdružení bez WordPressu

Web Občanského sdružení Juliána bez WordPressu: zprávy přidávají sami z telefonu, přihlášení chrání kód z mobilu a redesign je ověřený po pixelech.

Ve zkratce

  • 0 nálezů automatické kontroly přístupnosti na všech 10 stránkách
  • 30 denních záloh; obsah se každý večer zálohuje sám
  • 2 kola bezpečnostního auditu a ani jedno nenašlo cestu do administrace bez přihlášení
role
návrh, vývoj, provoz
období
2026
Živý web
ozjuliana.sk
stav
hotovo
Publikováno
  • PHP
  • HTML
  • CSS
  • JavaScript
  • Apache
Úvodní stránka ozjuliana.sk před redesignem: růžové pozadí, drobné logo v hlavičce, vínové tlačítko.
Před redesignem
Úvodní stránka ozjuliana.sk po redesignu: velké logo se srdcem, červený akcent, výraznější tlačítka.
Po redesignu

Redesign ze září 2026: velké logo se srdcem, červený akcent a výraznější tlačítka. Vlevo původní web, vpravo nový; úchyt lze přetáhnout nebo posouvat šipkami.Nahoře původní web, dole nový.

O co šlo

Občanské sdružení Juliána (slovenská obdoba spolku) celoročně sbírá oblečení, obuv, hračky a potřeby do domácnosti a rozváží je lidem v nouzi a komunitním centrům. Web má říct, kde a kdy se dá pomoc přinést, a zprávy o sbírkách do něj přidávají lidé ze sdružení sami, většinou z telefonu.

Web dělám dobrovolnicky od dubna 2026. Před redesignem prošel auditem přístupnosti, typografie a administrace; redesign dostal jedinou podmínku: co se měnit nemá, nesmí se změnit ani o pixel.

Co z toho sdružení má

Lidé ze sdružení přidávají zprávy o sbírkách i s fotkami sami z telefonu, bez technika. Na webu není nic, co by se muselo každý měsíc aktualizovat, a běží na levném sdíleném hostingu za jednotky eur měsíčně, bez dalších poplatků. Návštěvnost se měří, jen když s tím návštěvník souhlasí, a obsah se každý večer sám zálohuje.

Omezení

  • Rozpočet. Levný sdílený hosting, na kterém běží jen PHP – bez příkazové řádky (SSH) a bez Gitu. Žádné placené doplňky ani externí služby.
  • Bez WordPressu. Na takovém hostingu by znamenal pravidelné aktualizace jádra a pluginů, databázi a nekonečné pokusy o přihlášení. Sdružení přitom přidá článek s fotkami jednou za pár týdnů.
  • Publikum čte na mobilu. Web je navržený od nejmenších telefonů, od šířky 320 px.
  • Nezávislost na mně. Web běží na hostingu sdružení a nepotřebuje žádný můj server ani počítač.

Rozhodnutí

  1. Soubory, ne databáze. PHP bez frameworku; každý článek je jeden soubor JSON a fotky se při nahrání zmenší knihovnou GD. Celý obsah se zálohuje zkopírováním dvou složek a v nouzi se dá článek opravit v obyčejném textovém editoru.
  2. Heslo a kód z telefonu. Administrace má povinné dvoufaktorové přihlášení (2FA): heslo a šestimístný kód z aplikace Google Authenticator. Výpočet kódů je součástí webu, bez cizí knihovny, protože na takovém hostingu je to jednodušší než nahrávat knihovnu se závislostmi, a ověřuje se proti oficiálním testovacím hodnotám.
  3. Soukromí návštěvníků. Písma se načítají z vlastního serveru, veřejné stránky nenastavují žádnou cookie a Google Analytics se spustí až po souhlasu v liště podle slovenského zákona 452/2021 Z. z. Souhlas se zaznamenává bez IP adresy. Od Googlu se hned načítá jen mapa v kontaktu.
  4. Bezpečnost bez doplňků. Prohlížeč dostává přísná pravidla: načte jen zdroje ze schváleného seznamu a web otevírá vždy přes šifrované HTTPS. Formulář chrání skryté pole pro roboty a limit odeslání. Hned po spuštění prošel živý web bezpečnostním auditem ve dvou kolech: 38 zjištění, ani jedno kolo nenašlo cestu do administrace bez přihlášení a opravy kódu byly nasazeny ještě tentýž den.
  5. Redesign podle měření, ne podle pocitu. Refaktoring před redesignem nesměl změnit ani bajt HTML, ani pixel na 450 screenshotech (15 stránek × 10 šířek × 3 režimy). Při samotném redesignu se zamýšlené změny zapsaly předem a všechno ostatní muselo zůstat shodné.

Výsledek

Co Hodnota
Přístupnost 0 nálezů nástroje axe podle pravidel WCAG 2, úrovně A a AA, na všech 10 stránkách (30 běhů)
Mobil a monitor nic nepřetéká v rozsahu 320–1440 px
Písmo a kontrast 12 velikostí písma (audit před redesignem: 29), hranice polí s kontrastem nad 3 : 1
Správa obsahu článek s galerií přidají lidé ze sdružení z telefonu, bez technika
Záloha každý večer automaticky, 30 denních snímků
Provozní náklady jen sdílený hosting, žádné placené služby

Co dnes dělám jinak

Změnu vzhledu dnes nejprve změřím: kontrast každého barevného páru, screenshoty na deseti šířkách od 320 px a porovnání se starou verzí. Po každém nasazení navíc skript živý web pouze čte a kontroluje. Tak odhalil i tlačítko „nastavit DNS“ v administraci hostingu, které potichu přesměrovalo doménu přímo na server, mimo CDN (síť, která web doručuje a chrání).

Technologie a postup

PHP 8.5 (minimum 8.4), HTML, CSS a tři malé soubory čistého JavaScriptu bez knihoven; Apache s .htaccess; sdílený hosting za CDN. Kontrolní sada: Playwright, axe-core, html-validate a stylelint. Nasazení skriptem přes FTPS se zkušebním během a s kontrolou živého webu na konci.

Dvoufaktorové přihlášení: TOTP podle RFC 6238 v čistém PHP, ověřené testovacími hodnotami z RFC. Hlavičky Content Security Policy (CSP) bez inline skriptů a HSTS; ve formuláři honeypot a limit odeslání.

Každá změna prošla testy a mou kontrolou před sloučením.

Delší text o tom, proč web běží bez WordPressu a jak se ověřoval redesign, je v zápisku Jak vznikl web OZ Juliána.