Žádná databáze. Jeden soubor JSON na příspěvek.

Díl 3 ze 15 — ./blog.sh v1.0

Tady jsou tři řádky Markdownu a tady je, jak vypadá soubor na disku poté, co je uložíš.

Co napíšeš:

Příspěvky jsou **soubory**. Sestavení je cyklus přes složku.

Žádný třetí krok není.

Co dopadne na disk, jeden soubor JSON na příspěvek:

{
  "slug": "zadny-treti-krok",
  "title": "Žádný třetí krok",
  "date": "2026-07-31T09:00:00+02:00",
  "state": "published",
  "tags": ["content"],
  "content": [
    {
      "type": "text",
      "text": "Příspěvky jsou soubory. Sestavení je cyklus přes složku.",
      "formatting": [
        { "type": "bold", "start": 15, "end": 22 }
      ]
    },
    {
      "type": "text",
      "text": "Žádný třetí krok není."
    }
  ],
  "source": { "platform": "manual" }
}

(Pro příspěvek zkráceno – skutečný soubor nese pár dalších provozních polí – ale tohle je skutečný tvar.)

Podívej se, kam šlo tučné

Text je prostý text. Tučné je dvojice posunů ukazujících do něj – ne značky <strong> zapečené do řetězce, ne chuchvalec Markdownu čekající na další rozebrání. To jedno rozhodnutí potichu zaplatí polovinu enginu:

  • Hledání indexuje text tak, jak je. Žádné odstraňování značek, žádné „proč hledání strong najde každý příspěvek".
  • Sestavení nikdy nerozebírá Markdown. Rozebrání se děje jednou, při uložení; sestavení jen vykreslí bloky, kterým už rozumí.
  • Importéry ze sedmi platforem všechny míří na totéž schéma – proto je nový zdroj importu adaptér se třemi metodami, ne fork parseru.

Cesty tam a zpět, s bezpečnostním pásem

edit převede JSON zpět na Markdown, ty upravuješ, při uložení se znovu rozebere. A když příspěvek obsahuje něco, co Markdown neumí vyjádřit – embed importovaný z Bluesky, kartu odkazu – editor tě před uložením varuje, že by to zploštil, a zeptá se. Nic se na cestě tam a zpět potichu nezahodí.

Nudné finále

Jeden příspěvek je jeden soubor, a myslím to jako infrastrukturu, ne jako poezii:

  • záloha je tar
  • historie je git
  • odchod od ./blog.sh je cyklus for přes složku samopopisných JSON

A jeden důsledek, který stojí za to říci nahlas: nasazený web je jen artefakt sestavení. Pracovní kopie – obsah, média, konfigurace – bydlí na tvém stroji, zcela pod tvou kontrolou, ať webová část běží kdekoli a ať se s ní stane cokoli. Hosting zmizí, server chytne, poskytovatel ztrojnásobí ceny? Nic cenného tam nebylo. Namíříš nasazení na jiný backend a web existuje znovu, bajt po bajtu. Server nikdy nebyl blog. Blog je tvoje složka.

Engine má být stejně snadné opustit, jako bylo snadné do něj vstoupit. Tohle je ono, v jednom souboru na příspěvek.

Komentáře