./blog.sh

Tři koncepty, tři rána

Psaní nepřichází rovnoměrně. Přijde večer, kdy chtějí ven tři příspěvky, a pak týden nic. Publikovat je tak, jak byly napsány, znamená tři příspěvky za jednu noc a potom ticho – což je horší blog než tytéž tři příspěvky rozložené do tří rán.

Takže web teď může říci, kdy obvykle publikuje:

publishing:
  slots:
    - "mon 09:30"
    - "wed 09:30"
    - "fri 09:30"

Nebo, když píšeš víc, jediné "daily 09:00".

S tímhle v konfiguraci ti naplánování konceptu nabídne nejbližší slot, který žádný jiný naplánovaný příspěvek ještě nezabírá. Tři koncepty napsané za jeden večer dostanou nabídnuto pondělí, středu a pátek, v tomhle pořadí, aniž bys počítal dny.

Jen a pouze nabízí

Číst dál

Některé příspěvky jsou ke stažení

Fotka v příspěvku je holé jméno souboru v řádku s obrázkem. Vždycky byla:

![Pohled z okna](window.jpg)

Takže soubor připojený k příspěvku je týž řádek bez vykřičníku:

[Poznámky ze čtení, 2025](reading-notes.pdf)

Celý řádek, který není nic než odkaz, mířící na holé jméno souboru se známou příponou, je příloha. Připraví se přes incoming/ jako fotka, uloží se vedle příspěvku jako fotka a nikdy tvůj web neopustí.

Řádek s adresou v sobě zůstává tím, čím vždy byl: odkazem. Rozdíl je holé jméno souboru – totéž pravidlo, kterým se fotky už řídí, takže není co nového se učit.

Vykreslená jako karta, ne jako odkaz

Příloha se vykreslí jako karta nesoucí popisek, příponu a velikost. Velikost tam je proto, že stažení si zaslouží říci, co stojí, než se k němu zavážeš – 40MB PDF na telefonu na mobilních datech je jiná nabídka než 200kB, a čtenář má mít možnost to rozhodnout.

Číst dál

Příspěvek, který zůstává

Titulní strana blogu je jediná stránka, která je prohlášením. Všechno ostatní je chronologie, která dělá svou práci.

Takže pinned: true v hlavičce publikovaného příspěvku teď drží jeho kopii nahoře na první stránce výpisu. To je celá funkce a zajímavá část je všude tam, kde se záměrně neuplatní.

Jen titulní strana

Výpisy podle typu, výpisy štítků, feed RSS a sitemapa zůstávají přísně chronologické. Připnutí je tvrzení o tom, co má návštěvník číst první, ne přepis toho, kdy byly věci napsány. Kdo odebírá feed, dostává příspěvky v pořadí, v jakém se staly, a připnutý příspěvek mu nepředbíhá frontu pokaždé, když se přepne.

Co se děje, jak stárne

Dokud je příspěvek ještě dost nový na to, aby podle data seděl na stránce 1, objeví se přesně jednou – připnutí ho nevytiskne dvakrát na téže obrazovce. Jakmile zestárne na stránku 2, objeví se na obou místech: nahoře na stránce 1 a na svém chronologickém místě na stránce 2.

Číst dál

./blog.sh 1.1

./blog.sh 1.1 je venku.

Připni příspěvek nahoru. Plánuj do publikačních slotů, které se řadí do fronty, místo aby se srážely. Přikládej soubory jako karty ke stažení. Přejmenuj slug, aniž rozbiješ odkaz – stará adresa přesměrovává navždy. Jeden dialog pro všechno, co můžeš s příspěvkem udělat.

A pojistky nasazení, které měří sestavení proti sestavení, takže je neúspěšné nahrání nemůže potichu vypnout.

./blog.sh 1.0.1

./blog.sh 1.0.1 je venku – osmnáct oprav, žádnou z nich nenahlásil uživatel.

Vzešly z nezávislého ověřovacího průchodu nad vydáním: neúspěšný zápis mohl nechat příspěvek bez souboru, jeden špatný příspěvek mohl zastavit celé sestavení, chybějící soubor médií mohl smazat kopii, která už byla naživo.

Teď existuje CHANGELOG, který si klon může přečíst, a ./blog.sh version ti řekne, co provozuješ.

./blog.sh 1.0

./blog.sh 1.0 je venku.

Blogovací engine, který je složka a shellový skript. Standardní knihovna Ruby a bash – žádná databáze, žádné gemy, žádná administrace. Komentáře žijí na Fediverse. Osm importérů, aby měly tvoje archivy z Tumblru a Twitteru kam jít. Licence MIT.

Web, který čteš, je ten engine, jak běží sám sebou.

Čtrnáct let a každý obrázek se vrátil domů

Chybová stránka prohlížeče s hláškou, že IP adresu serveru distilleryimage1.instagram.com se nepodařilo najít
distilleryimage1.instagram.com, o čtrnáct let později

V roce 2012 jsem dal fotku na Instagram. Odkaz pořád funguje. Fotka ne.

Číst dál

Některé příspěvky jsou rozhovory

Petr
Potřebuju do příspěvku dialog.
./blog.sh
Napiš ho do plotu chat. Jméno, dvojtečka, řádek.
Petr
To je všechno?
./blog.sh
Řádek bez dvojtečky pokračuje v tom nad ním.
Petr
A Markdown uvnitř?
./blog.sh
Funguje. Tučné, odkazy, kód – jako obvykle.
Petr
Každý jiný engine na tohle chce plugin.
./blog.sh
Každý jiný engine chce plugin i na tabulky.

Zdroj té výměny je přesně to, co jsi právě četl – jméno mluvčího, dvojtečka, řádek:

Petr: Potřebuju do příspěvku dialog.
./blog.sh: Napiš ho do plotu chat. Jméno, dvojtečka, řádek.
Petr: To je všechno?

Zabal ty řádky do plotu kódu označeného chat a máš hotovo.

Právě jsi přečetl tu funkci. To je celá dokumentace.

Proč jsem to postavil (38 vteřin)

Proč jsem to postavil – 38 vteřin, jeden záběr, nahráno telefonem

Třicet osm vteřin, nahráno telefonem, bez střihu. Psaná verze je níže, kdybys raději četl.

Statických generátorů webů jsou stovky. Stejně jsem napsal další a důvody se vejdou do necelé minuty.

Moje příspěvky bydlely čtrnáct let na velkých platformách. Některé z těch platforem změnily pravidla. Některé prostě zmizely. Trávím celý den v terminálu, takže jsem chtěl i svůj blog psát tam. A malý osobní blog nepotřebuje databázi – soubory stačí.

Takže: příspěvky jsou soubory, web je sestavení a komentáře žijí na Fediverse. To je celá myšlenka.

Sedm klíčů

Titulní strana ve výchozí modré paletě
Výchozí modrá – paleta, se kterou tento web přichází
Číst dál