TL;DR
- Kontekst: Prowadzę uxtygodnik.pl — cotygodniowy polski newsletter o UX, od listopada 2023.
- Problem: Ręczne prowadzenie cotygodniowego newslettera (czytanie, selekcja, formatowanie) nie skaluje się w nieskończoność.
- Co zrobiłem: Zbudowałem własny pipeline — zbieranie → triage → składanie → wysyłka — jak produkt, nie ręczna robota co poniedziałek.
- Wynik: 112 numerów wysłanych, kilkuset subskrybentów, rytm utrzymywalny 2+ lata.
Diagnoza
Cotygodniowy newsletter zabije Cię, jeśli robisz go ręcznie — czytanie, selekcja, ocena, formatowanie, każdego poniedziałku, w nieskończoność. Traktowałem więc uxtygodnik jak produkt i zbudowałem pipeline, który go produkuje: zbieranie w momencie natrafienia (czytnik RSS i skrót na telefonie, oba zasilają jeden arkusz), triage we własnej aplikacji (ocena, kategoryzacja, auto-shortlinki), składanie w drugiej aplikacji (listy wg kategorii, sortowane po ocenie, tylko ≥3 gwiazdki), potem wysyłka. Po 112 numerach rytm jest utrzymywalny — bo tarcie siedzi w narzędziach, a narzędzia są moje.
flowchart LR
A["Czytnik RSS<br/>Miniflux"] --> E["Webhook<br/>n8n"]
B["Skrót na telefonie<br/>Safari"] --> E
E --> F["Google Sheets"]
F --> G["Triage w Retool<br/>ocena, kategoria, shortlink"]
G --> H["Składanie w Retool<br/>listy wg kategorii, min 3 gwiazdki"]
H --> I["Mailerlite<br/>wysyłka, poniedziałek 8:00"]
classDef neutral fill:#f0f0f1,stroke:none,color:#3f3f46,rx:14,ry:14
classDef info fill:#e9eff8,stroke:none,color:#1e3a5f,rx:14,ry:14
classDef accent fill:#27272a,stroke:#3f3f46,stroke-width:1px,color:#fafafa,rx:14,ry:14
class A,B,E,F info
class G,H neutral
class I accent
linkStyle default stroke:#a8a8b3,stroke-width:1.5px
Co zrobiłem
- Zbudowałem warstwę zbierania: self-hosted czytnik RSS (Miniflux) sterowany z klawiatury, plus skrót Apple w panelu udostępniania Safari — oba pchają artykuły przez webhooki przez n8n do jednego arkusza Google Sheets.
- Zbudowałem aplikację do triage w Retool na tym arkuszu — otwieranie, ocena (5 gwiazdek), kategoryzacja, edycja opisu przy linku, zaznaczanie nawiasami, co ma być linkiem, i auto-generowanie shortlinków przez self-hosted Kutt na mojej domenie (linki do medium.com wpadały jako spam).
- Zbudowałem drugą aplikację Retool do składania każdego numeru — listy wg kategorii, linki sortowane po ocenie, wszystko poniżej 3 gwiazdek odrzucone.
- Wysłałem 112 numerów od listopada 2023, do kilkuset subskrybentów, w każdy poniedziałek o 8:00.
Wyniki
- 112 numerów wysłanych od listopada 2023 — cotygodniowo, utrzymywalnie.
- Kilkuset subskrybentów i rośnie.
- Postawiłem nudną infrę self-hosted (Miniflux do RSS, Kutt do shortlinków) — bez kosztów subskrypcji, a linki wskazują na moją domenę.
- 2+ lata rytmu bez wypalenia — pipeline niesie tarcie, nie moje poniedziałki.
| Metryka | Wartość |
|---|---|
| Numery wysłane | 112 (od listopada 2023) |
| Rytm | cotygodniowo, poniedziałki 8:00 |
| Subskrybenci | kilkuset, rosnąco |
| Kandydaci do triage | 50–60 tygodniowo |
| Koszt subskrypcji infry | 0 zł (self-hosted) |
Problem
Dlaczego cotygodniowy newsletter potrzebuje pipeline’u?
Bo robienie tego ręcznie nie przetrwa pierwszego entuzjazmu. Co tydzień: przeczytaj dziesiątki artykułów, zdecyduj, co warto, skategoryzuj, oceń, napisz opis przy linkach, sformatuj, wyślij. Rób to dwa lata z rzędu, a wąskim gardłem przestaje być pisanie — staje się ta mechaniczna, powtarzalna dłubanina wokół samego pisania. Ominiesz poniedziałek czy dwa i nawyk umiera.
Dlaczego po prostu nie użyć gotowego narzędzia do newsletterów?
Bo te narzędzia wysyłają newslettery; nie decydują, co do niego wejdzie. Trudna część to pipeline nadrzędny — zbieranie, triage, ocena, formatowanie — a ten jest szyty na miarę tego, jak ja czytam i wybieram. Zbudowałem więc tę część, a standardowego nadawcę (Mailerlite) używam tylko na ostatniej mili.
Moja rola / zakres
- Solo — mój newsletter, mój pipeline. Zaprojektowałem go, zbudowałem i prowadzę; też czytam, wybieram i piszę każdy numer.
- To praktyka designer-codera, nie hobby: ten sam instynkt, który wnoszę do pracy produktowej — traktuj workflow jak system z wąskim gardłem — zastosowany do własnego publikowania.
Proces
- Zbieranie w momencie natrafienia. Artykuły wchodzą do systemu w chwili, gdy je znajduję — przez czytnik RSS (obsługa z klawiatury, jeden klawisz do zapisu) albo skrót na telefonie (panel udostępniania Safari). Nigdy nie czekają na „później”, bo później nie przychodzi.
- Triage co tydzień w aplikacji Retool. 50–60 kandydatów tygodniowo → otwieram, czytam, oceniam (5 gwiazdek), kategoryzuję, piszę opis przy linku, generuję shortlink.
- Składanie w drugiej aplikacji Retool. Listy wg kategorii, linki sortowane po ocenie, ≥3 gwiazdki.
- Wklejenie do Mailerlite i wysyłka, poniedziałki o 8:00. Ostatnie wklejenie jest wciąż ręczne — celowo.
Kluczowe decyzje i trade-offy
- Arkusz jako baza danych, nie „prawdziwa” baza. Google Sheets trzyma wszystko. Trade-off: to nie jest prawdziwa baza — ale do solo cotygodniowego newslettera arkusz to właściwe narzędzie: natychmiast edytowalne, zero infra, a aplikacje Retool siedzą na nim OK.
- Zbieranie w momencie natrafienia, nie później. Dwie ścieżki zbierania (RSS + skrót na telefonie), obie → n8n → jeden arkusz. Trade-off: dwie ścieżki do utrzymania — ale dzięki temu artykuł jest złapany w chwili, gdy go widzę, a to jedyny niezawodny moment.
- Triage we własnej aplikacji, nie w surowym arkuszu. UI w Retool nad arkuszem do oceny, kategoryzacji, edycji, shortlinków. Trade-off: budowa aplikacji vs edycja komórek — ale triage 50–60 artykułów tygodniowo w surowym arkuszu to męka; aplikacja to przyspiesza.
- Self-hosted shortlinki na własnej domenie. Linki do medium.com wpadały jako spam, więc postawiłem Kutt (self-hosted) na *.at.marekbrze.dev i generuję linki z Retoola przez API. Trade-off: prowadzenie własnego skracacza — ale naprawia dostarczalność i linki wskazują na moją domenę.
- Szczerze: ostatnie wklejenie do Mailerlite jest wciąż ręczne. Rozważałem CLI + Maizzle na template’y HTML; zdecydowałem się jeszcze nie budować. Wklejenie trwa minuty, a czas lepiej wydać gdzie indziej.
Jak to się skończyło
Wysłałem już 112 numerów od listopada 2023, do kilkuset subskrybentów, w każdy poniedziałek o 8:00 — i rytm jest utrzymywalny, bo pipeline niesie ciężar. Elementy self-hosted (Miniflux, Kutt) nie generują kosztów subskrypcji i trzymają infrę w moich rękach. Jedyne, czego nie zautomatyzowałem — ostatnie wklejenie — zostawiłem celowo, bo jest tanie, a czas wolę wydać na rzeczy, które znaczą więcej.
Co z tego wyniosłem
- Traktuj własny workflow jak produkt. Narzędzia to fosa przeciwko „zrobię to później” — a później to tam, gdzie newslettery umierają.
- Łap w momencie natrafienia. Nigdy nie licz na to, że zapamiętasz to później; jedyny niezawodny moment to ten, w którym to zauważyłeś.
- Trzymaj nudną infrę u siebie. Czytnik RSS i skracacz linków są tanie do samodzielnego prowadzenia i zostają Twoje.
- Automatyzuj bolesne 80%, zostaw tanie 20%. Ręczne ostatnie wklejenie to świadomy wybór, nie porażka — nie każdy krok zasługuje na automatyzację.