Zyje! A RetroFun.PL wreszcie opuscil WordPressa.
Jesli czytasz tego bloga (oboje — czesc!), mogles zauwazyc, ze zrobilo sie cicho. To dlatego, ze utknalem w czysncu migracyjnym na cos, co wydawalo sie latami. Zaczynalem przenosic sie na Ghost, dochodzil do 70%, napotkalem sciane, zaczalem watpic we wszystko i po cichu porzucalem probe. Powtorz co najmniej cztery razy.
Tym razem faktycznie skonczylem. Opowiem co sie stalo.
Ruszamy dalej
WordPress sluzyl mi dobrze przez lata i naprawde doceniam to, czym sie stal — szczegolnie edytor blokowy, ktory w ostatnich wersjach zrobil sie naprawde dobry. Ale ekosystem wokol niego byl coraz bardziej meczacy. Kazda wtyczka wygladala jak hack z najgorszego PHP, sklejony tasma i modalem premium upsell. Polowa z nich stale naciagala mnie na pieniadze. Druga polowa nie byla aktualizowana od czasow Obamy.
Ostatecznym impulsem byl dramat WordPress vs. WP Engine — patrzenie, jak Matt Mullenweg blokuje uzytkownikow WP Engine z repozytorium wtyczek WordPress.org z osobistej zlosci, bylo... nieinspirujace. Caly ekosystem zaczal wydawac sie kruchy i uzalezniony od jednej osobowosci.
Wiec Ghost. Wygladal dobrze. Edytor jest swietny. Czuje sie lekki — Node.js zamiast PHP, pojedynczy binarny plik zamiast rozrastajacego sie lasu wtyczek. Ma wbudowane newslettery email i poziomy czlonkostwa/wspierajacych, a chcialbym kiedys zbudowac mala spolecznosc wokol tego bloga. Filozofia "po prostu platforma do publikacji, zrobiona dobrze" do mnie przemowila.
Sama migracja danych byla wlasciwie najlatwiejsza czescia — nawet z dwujezyczna trescia (kazdy post istnieje po polsku i angielsku, polaczony ze soba). Format importu Ghost jest prosty, a oficjalny migrator WordPress-do-Ghost zrobil wiekszosc roboty. Napisalem skrypt wzbogacajacy na tym, zeby zachowac pary tlumaczen i posprzatac metadane Polylang.
To, co zabijalo kazda probe, bylo wszystko inne. Routing dwujezyczny — Ghost natywnie nie wspiera wielojezycznej tresci, wiec uzyskanie polskich postow pod /pl/ i angielskich pod / z dzialajacymi linkami do tlumaczen wymagalo niestandardowych tras, wstrzykiwania metadanych i JavaScriptu po stronie klienta. Motyw — budowalem cos, patrzylem na to i po prostu czulem ze jest zle. Zle odstrepy. Zla czytelnosc. Czcionki nie pasowaly do siebie. Retro estetyka wydawala sie wymuszona. Spedzilem godziny poprawiajac CSS, tracilem pewnosc siebie i odchdzilem. I oczywiscie klasyczna spirala watpliwosci: czy to w ogole warte wysilku? Moze powinienem zostac na WordPressie. Moze nikt tego nie czyta. Moze powinienem przepisac to w Hugo. Albo Astro. Albo recznym HTML...
To, co ostatecznie przerwalo cykl, to fakt, ze narzedzia AI dojrzaly wystarczajaco, zeby pomoc mi przebic sie przez nudne czesci. Uzylem Claude Code do pomocy ze skryptami migracyjnymi, debugowaniem CSS (3000+ linii CSS motywu z szescioma wariantami kolorow to... duzo), manipulacja baza danych i ogolnym "wiem czego chce, ale nie chce mi sie pisac 200 linii boilerplate'u". Decyzje projektowe, wybor czcionek, kierunek redakcyjny, tresc — to wszystko ja. Ale posiadanie niezmordowanego asystenta do mechanicznych czesci oznaczalo, ze moglem skupic sie na kreatywnych bez tracenia tempa.
Szesc motywow, jeden blog
Najbardziej widoczna zmiana to wyglad. Mozesz przlaczac miedzy szescioma motywami wizualnymi za pomoca selektora w gornej nawigacji.
Synthwave (domyslny)
Zbudowany wokol estetyki komputerow, o ktorych pisze ten blog — ale widzianych przez pryzmat tego, jak je pamietamy, a nie jak wygladaly naprawde. Glebokie tla indygo, nakladki skanlinii CRT, neonowa poswiate na tekscie, subtelne migotanie ekranu. Tytul uzywa prawdziwego pikselowego fontu Amstrad CPC (wersja miedzynarodowa, z polskimi znakami). Tekst glowny to JetBrains Mono — nowoczesny font o stalej szerokosci, wygodny do dlugiego czytania.
Paleta kolorow — cyjan, magenta, zielony — to klasyczne trio fosforow RGB. Jesli kiedykolwiek patrzyles na monitor CRT przez lupe, widziales te trzy subpiksele. Estetyka synthwave zamienia te surowe kolory sprzetowe w jezyk wizualny: cyjan na linki, zielony na tytuly, magenta na daty.
Matrix
Monochromatyczny zielony na czarnym, jak terminal VT100 lub monitor z zielonym fosforem. Trzy odcienie zieleni tworza hierarchie wizualna. Tak wygladalo komputerowanie zanim kolorowe monitory staly sie przystepne.
Amber
Wariant bursztynowego fosforu. Przed monitorami zielonymi i obok nich byly bursztynowe — cieple, zlote, podobno latwiejsze dla oczu podczas dlugich sesji. Karty graficzne Hercules napedzaly wiele z nich. Jesli kiedykolwiek uzywales PC/XT z Herculesem i bursztynowym monitorem, to poczujesz sie jak w domu.
BSOD
Blue Screen of Reading. Bialy na niebieskim, przypominajacy ekran awarii Windowsa, ale takze Norton Commandera, IDE Turbo Pascala i ekran konfiguracji BIOS. Niebieski to prawdziwy odcien BSOD (#0000A4).
Classic Light — instrukcja obslugi Amstrad CPC6128
Ten jest osobisty. Instrukcja CPC6128 byla — i szczerze mowiac nadal jest — jedna z najlepiej napisanych instrukcji technicznych, jakie kiedykolwiek czytalem. Nauczyla pokolenie dzieci programowania, nie przez upraszczanie, ale przez bycie naprawde dobrze zlozona typograficznie, starannie rozlozona i pieknie zaprojektowana.
Classic Light odtwarza jej typografie tak wiernie, jak to mozliwe w sieci:
- Naglowki w Rockwell N90 — zwezena wersja slab serifu z oryginalnej instrukcji
- Tekst glowny w Century Schoolbook (Bitstream) — ciepla, czytelna szeryfa z instrukcji
- Listingi kodu w Anka/Coder Condensed
- Kolor akcentowy: czerwien Amstrad (
#C41230) na liniach i ramkach - Linki w niebieskim Amstrad (
#1B3A5C) z okladki instrukcji - Tlo: prawie bialy z ledwo wyczuwalnym cieplem (
#FFFAF8), jak dobrze zachowany papier
Brak efektow CRT, brak animacji, brak poswiety. Czysta typografia na spokojnym papierze. To motyw do czytania.
Classic Dark
Ta sama typografia Rockwell + Century Schoolbook, odwrocona na chlodnym ciemnym tle. Instrukcja czytana pod lampka biurkowa w nocy.
Co pod maska
Dla technicznie ciekawych:
- Ghost 5 na Dockerze, SQLite do developmentu, MySQL na produkcji
- Routing dwujezyczny przez
routes.yamlGhost — polskie posty tagowane wewnetrznym tagiem#pl, routowane do/pl/{slug}/. Linki do tlumaczen przechowywane jako JSON w naglowku code injection kazdego posta - Self-hostowane fonty — Amstrad CPC pixel fonts, Rockwell N90, Century Schoolbook BT, Anka/Coder Condensed, Geometric Slabserif 712. Brak zaleznosci od Google Fonts dla klasycznych motywow
- Kolorowanie skladni przez Prism.js z kolorami adaptujacymi sie do motywu
- Autentyczne przyciski 88x31 na pasku bocznym linkujace do prawdziwych stron
- Licznik odwiedzin w stylu lat 90. — maly mikroserwis w Go, ktory liczy kazde wyswietlenie strony (jak w starych dobrych czasach!) ale filtruje boty
- 25 komentarzy z WordPressa zmigrowanych jako natywne komentarze Ghost, z wlasciwym watkowaniem tam gdzie oryginalny byly odpowiedziami
- Deployment produkcyjny gotowy: Ghost + MySQL + Nginx + counter, wszystko w jednym
docker-compose.prod.yml
Co dalej
Wiecej postow, oczywiscie. Migracja pochonela miesiace czasu na pisanie. Ale teraz, gdy infrastruktura jest solidna i nie walcze z WordPressem, nic mnie nie powstrzymuje.
Lista zaleglych tematow jest dluga. Mam okolo 27 projektow hobbystycznych — polowa to retro computing (CPC, C64, demoscena, restauracja sprzetu), druga polowa zyje gdzies w 2040 roku (narzedzia LLM, automatyka domowa, dziwne eksperymenty). Ten blog pokrywa retro polowe, ale czasami oba swiaty zderzaja sie w ciekawy sposob. Na przyklad, uzycie asystenta AI do pomocy w budowaniu retro-tematycznego bloga o komputerach 8-bitowych. Ironia nie umknela mi.
Jesli zauazysz cos zepsutego — brakujacy obraz, martwy link do tlumaczenia, motyw ktory wyglada zle na Twoim urzadzeniu — daj mi znac w komentarzach ponizej. To swieza migracja i na pewno sa szorstkosci, ktorych jeszcze nie wylapalem.
Dziekuje za czytanie i witam na nowym RetroFun.PL. Udalem sie dopiero za czwartym podejsciem.