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.

Pořád Grav

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.

Deploy přes Deployer + GitLab CI

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:

  1. Push do master spustí pipeline
  2. Build image — Docker image s PHP 8.2 a Deployer (jen když se změní Dockerfile.ci)
  3. Deploydep deploy přes SSH na server biberle.cz
  4. Maintenance — sync na dev.to a čištění cache

SSH klíč je uložený jako base64 CI variable, decoded za běhu. Celý deploy je plně automatický.

Automatický sync na dev.to

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.

Tweety generované AI

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:

  1. Projdou se všechny anglické články
  2. Porovnají se se seznamem už tweetnutých — duplicity se přeskočí
  3. Pro nové články se pošle titulek, úryvek a tagy do OpenAI
  4. OpenAI vygeneruje tweet (max 250 znaků) v mém stylu
  5. Tweet se pošle přes Twitter API v2 s OAuth 1.0a
  6. URL článku se zaznamená a commitne zpátky do gitu

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.

Co se nezměnilo

Některé věci prostě fungují a nemá smysl je měnit:

  • Grav je pořád perfektní pro osobní blog — rychlý, jednoduchý, minimální údržba
  • Markdown + Git je nejlepší workflow pro psaní technických článků
  • Deployer dělá přesně to co má a nic víc

Co bych chtěl dál

  • Umami analytics místo Google Analytics (placeholder v šabloně už je)
  • Lepší cover images pro články
  • Možná přidat RSS feed pro české články

Ale hlavně — psát víc. Automatizace je fajn, ale bez článků je k ničemu.

Předchozí příspěvek Následující příspěvek

Related Posts