V roce 2019 jsem psal o tom, jak tenhle blog funguje. Od té doby se toho změnilo docela dost — automatický deploy, sync na dev.to, tweety generované AI. Čas na aktualizaci.
Základy zůstaly stejné. Grav CMS, flat-file, PHP 8.2, Markdown, bez databáze. Aktualizace pluginů a bezpečnostní záplaty neřeším — Grav prostě běží.
Šablona blog dědí z quark a přidává pár vlastních stylů — střídání bílého a šedého pozadí sekcí, tag cloud s CSS custom properties, karty článků. Čistý vanilla JS.
Web je dvojjazyčný — čeština (*.cs.md) a angličtina (*.en.md). Každý článek má oba soubory vedle sebe.
Tady se od roku 2019 nic zásadního nezměnilo, jen se to zpevnilo. Deployer 7.3 řeší samotný deploy — symlink strategie, shared dirs pro cache, automatické čištění starých releasů.
GitLab CI to celé orchestruje:
master spustí pipelineDockerfile.ci)dep deploy přes SSH na server biberle.czSSH klíč je uložený jako base64 CI variable, decoded za běhu. Celý deploy je plně automatický.
Anglické články se automaticky publikují na dev.to. Sync skript projde všechny anglické články, porovná je přes canonical_url s tím, co už na dev.to existuje, a vytvoří nebo aktualizuje. Stateless — kanonická URL slouží jako klíč. Běží v CI po každém deploy a taky na schedule (pro články s budoucím datem).
Opačný směr taky funguje — import z dev.to do lokálního blogu, stáhne cover image a nastaví canonical_url zpátky na blog.
Tohle je novinka. Když vyjde nový článek, automaticky se o něm tweetne. Ale ne s nějakým generickým "Nový článek na blogu!" — tweet generuje OpenAI (gpt-4o-mini) podle mého writing style guide.
Jak to funguje:
Writing style guide je v jednom souboru, takže je jeden zdroj pravdy pro AI i pro mě.
Tweety se posílají jen v pracovní dny v 9:00 ráno (Europe/Prague), přes separátní GitLab CI schedule s proměnnou TWITTER_POST=true.
Některé věci prostě fungují a nemá smysl je měnit:
Ale hlavně — psát víc. Automatizace je fajn, ale bez článků je k ničemu.