Jakub Kubík
Napíšte mi

Všetky projekty

Prípadová štúdia

ozjuliana.sk: web malého združenia bez WordPressu

Web Občianskeho združenia Juliána bez WordPressu: správy pridávajú sami z telefónu, prihlásenie chráni kód z mobilu a redizajn je overený po pixeloch.

V skratke

  • 0 nálezov automatickej kontroly prístupnosti na všetkých 10 stránkach
  • 30 denných záloh; obsah sa každý večer zálohuje sám
  • 2 kolá bezpečnostného auditu a ani jedno nenašlo cestu do administrácie bez prihlásenia
rola
návrh, vývoj, prevádzka
obdobie
2026
Živý web
ozjuliana.sk
stav
hotové
Publikované
  • PHP
  • HTML
  • CSS
  • JavaScript
  • Apache
Úvodná stránka ozjuliana.sk pred redizajnom: ružové pozadie, drobné logo v hlavičke, bordové tlačidlo.
Pred redizajnom
Úvodná stránka ozjuliana.sk po redizajne: veľké logo so srdcom, červený akcent, výraznejšie tlačidlá.
Po redizajne

Redizajn zo septembra 2026: veľké logo so srdcom, červený akcent a výraznejšie tlačidlá. Vľavo pôvodný web, vpravo nový; rukoväť sa dá potiahnuť alebo posúvať šípkami.Hore pôvodný web, dole nový.

O čo išlo

Občianske združenie Juliána celoročne zbiera oblečenie, obuv, hračky a potreby do domácnosti a rozváža ich ľuďom v núdzi a komunitným centrám. Web má povedať, kde a kedy sa dá pomoc priniesť, a správy o zbierkach doň pridávajú ľudia zo združenia sami, prevažne z telefónu.

Web robím dobrovoľnícky od apríla 2026. Pred redizajnom prešiel auditom prístupnosti, typografie a administrácie; redizajn dostal jednu podmienku: čo sa meniť nemá, nesmie sa zmeniť ani o pixel.

Čo z toho má združenie

Ľudia zo združenia pridávajú správy o zbierkach aj s fotkami sami z telefónu, bez technika. Na webe nie je nič, čo treba každý mesiac aktualizovať, a beží na lacnom zdieľanom hostingu za jednotky eur mesačne, bez ďalších poplatkov. Návštevnosť sa meria, len keď s tým návštevník súhlasí, a obsah sa každý večer sám zálohuje.

Obmedzenia

  • Rozpočet. Lacný zdieľaný hosting, na ktorom beží len PHP – bez príkazového riadka (SSH) a bez Gitu. Žiadne platené doplnky ani externé služby.
  • Bez WordPressu. Na takom hostingu by znamenal pravidelné aktualizácie jadra a pluginov, databázu a nekonečné pokusy o prihlásenie. Združenie pritom pridá článok s fotkami raz za pár týždňov.
  • Publikum číta na mobile. Web je navrhnutý od najmenších telefónov, od šírky 320 px.
  • Nezávislosť odo mňa. Web beží na hostingu združenia a nepotrebuje žiadny môj server ani počítač.

Rozhodnutia

  1. Súbory, nie databáza. Vlastné PHP bez frameworku; každý článok je jeden súbor JSON a fotky sa pri nahraní zmenšia knižnicou GD. Celý obsah sa zálohuje skopírovaním dvoch priečinkov a v núdzi sa dá článok opraviť v obyčajnom textovom editore.
  2. Heslo a kód z telefónu. Administrácia má povinné dvojfaktorové prihlásenie (2FA): heslo a šesťmiestny kód z aplikácie Google Authenticator. Výpočet kódov je súčasťou webu, bez cudzej knižnice, lebo na takom hostingu je to jednoduchšie než nahrávať knižnicu so závislosťami, a overuje sa proti oficiálnym testovacím hodnotám.
  3. Súkromie návštevníkov. Písma sa načítavajú z vlastného servera, verejné stránky nenastavujú žiadnu cookie a Google Analytics sa spustí až po súhlase v lište podľa zákona 452/2021 Z. z. Súhlas sa zaznamenáva bez IP adresy. Od Googlu sa hneď načíta len mapa v kontakte.
  4. Bezpečnosť bez doplnkov. Prehliadač dostáva prísne pravidlá: načíta len zdroje zo schváleného zoznamu a web otvára vždy cez šifrované HTTPS. Formulár chráni skryté pole na roboty a limit odoslaní. Hneď po spustení prešiel živý web bezpečnostným auditom v dvoch kolách: 38 zistení, ani jedno kolo nenašlo cestu do administrácie bez prihlásenia a opravy kódu boli nasadené ešte v ten istý deň.
  5. Redizajn podľa merania, nie podľa pocitu. Refaktoring pred redizajnom nesmel zmeniť ani bajt HTML, ani pixel na 450 screenshotoch (15 stránok × 10 šírok × 3 režimy). Pri samotnom redizajne sa zamýšľané zmeny zapísali vopred a všetko ostatné muselo ostať zhodné.

Výsledok

Čo Hodnota
Prístupnosť 0 nálezov nástroja axe podľa pravidiel WCAG 2, úrovne A a AA, na všetkých 10 stránkach (30 behov)
Mobil a monitor nič nepreteká v rozsahu 320–1440 px
Písmo a kontrast 12 veľkostí písma (audit pred redizajnom: 29), hranice polí s kontrastom nad 3 : 1
Správa obsahu článok s galériou pridajú ľudia zo združenia z telefónu, bez technika
Záloha každý večer automaticky, 30 denných snímok
Prevádzkové náklady len zdieľaný hosting, žiadne platené služby

Čo dnes riešim inak

Zmenu vzhľadu dnes najprv zmeriam: kontrast každého farebného páru, screenshoty na desiatich šírkach od 320 px a porovnanie so starou verziou. Po každom nasadení navyše skript živý web iba číta a kontroluje. Tak odhalil aj tlačidlo „nastaviť DNS“ v administrácii hostingu, ktoré ticho presmerovalo doménu priamo na server, mimo CDN (siete, ktorá web doručuje a chráni).

Technológie a postup

PHP 8.5 (minimum 8.4), HTML, CSS a tri malé súbory čistého JavaScriptu bez knižníc; Apache s .htaccess; zdieľaný hosting za CDN. Kontrolná sada: Playwright, axe-core, html-validate a stylelint. Nasadenie skriptom cez FTPS so skúšobným behom a s kontrolou živého webu na konci.

Dvojfaktorové prihlásenie: TOTP podľa RFC 6238 v čistom PHP, overené testovacími hodnotami z RFC. Hlavičky Content Security Policy (CSP) bez inline skriptov a HSTS; vo formulári honeypot a limit odoslaní.

Každá zmena prešla testami a mojou kontrolou pred zlúčením.

Dlhší text o tom, prečo web beží bez WordPressu a ako sa overoval redizajn, je v zápisku Ako vznikol web OZ Juliána.