Framework pro stavbu několika obsahově i vizuálně oddělených statických webů nad jedním technickým jádrem. Tento web je jedním z nich; vedle něj z téhož repozitáře vzniká FreeOrbit.eu a Libernetics.eu.
Dvě věci to drží pohromadě. První je, že se sdílí jen infrastruktura – build, kontroly, nasazení. Identita, navigace, komponenty a obsah zůstávají každému webu vlastní a nesmí se samovolně sjednocovat, protože návštěvník je má vnímat jako samostatné weby, ne jako jeden portál se třemi záložkami. Druhá je, že výstupem je pořád jen statický web: hotové HTML, CSS, JavaScript a assety, které obslouží webserver bez aplikačního serveru, databáze a bez Node.js na produkci.
Od Jekyllu dál
Statické weby jsem předtím stavěl v Jekyllu. Model „šablona plus Markdown“ tam funguje a pro spoustu webů stačí dodnes; tohle je záměrný posun jinam, ne oprava něčeho rozbitého.
Chtěl jsem zjistit, kam se statické weby posunuly. Co dnes zvládne web postavený na komponentách místo šablon, kam došel build tooling a kolik toho jde ohlídat automaticky – aby validace obsahu, přístupnost nebo bezpečnostní pravidla nebyly věc, na kterou si musí člověk vzpomenout při každé změně.
Co framework dává
- Statický export přes
adapter-statics úplným prerenderem, bez SPA fallbacku. Každá stránka existuje jako soubor. - Obsah v Markdownu s validovaným frontmatterem. Schéma je zapsané, takže neznámé pole, chybějící překlad nebo odkaz na neexistující položku shodí build, ne až čtenáře.
- Kontroly předem: lint, typová kontrola, testy a validace obsahu běží při každém commitu a stejný cíl volá CI, aby se lokální a CI kontrola nerozešly.
- Přístupnost, kontrast a výkonové rozpočty jako automatické brány nad hotovým artifactem, ne jako dodatečná revize.
- Bezpečnost: same-origin Content Security Policy bez
unsafe-inlinea kontrola hotového buildu na sourcemapy, interní cesty, tvary tajemství a cizí originy. - Vyhledávání přes Pagefind, který běží při buildu nad hotovým HTML. Produkce zůstává statická, index je jen další soubor.
- Nasazení jako pull: server si release sám stáhne z registru, ověří součet, zkontroluje značku dokončeného buildu a atomicky přepne symlink. Do serveru nevede zapisovací kanál ani deploy klíč.
Další web se přidává jako nový workspace. Kontroly, testy, brány i nasazení jsou hotové.
Jak to vzniká
Každé rozhodnutí o společném kontraktu má vlastní ADR a implementace se k němu musí dát dohledat. Pravidla, která platí na víc místech, nejsou v hlavě, ale v registru se strojovou kontrolou: verze runtime, umístění bran, dostupná pole obsahu i čísla zobrazovaných verzí. Když se dva zápisy téhož rozejdou, spadne lint – ne až web.