TL;DR
- Context: I run uxtygodnik.pl — a weekly Polish UX newsletter, since November 2023.
- Problem: Running a weekly newsletter by hand — reading, selecting, formatting — doesn’t scale forever.
- What I did: Built a self-owned pipeline — capture → triage → assemble → send — treating it like a product, not manual Monday work.
- Result: 112 issues shipped, several hundred subscribers, cadence sustained 2+ years.
Diagnosis
A weekly newsletter kills you if you do it by hand — the reading, the selecting, the rating, the formatting, every Monday, forever. So I treated uxtygodnik as a product and built the pipeline that produces it: capture at the point of discovery (an RSS reader and a phone shortcut, both feeding one spreadsheet), triage in a custom app (rate, categorize, auto-shortlink), assemble in a second app (categorized lists, sorted by rating, only the three-star-and-up pieces), then send. 112 issues in, the cadence is sustainable — because the friction lives in the tools, and the tools are mine.
flowchart LR
A["RSS reader<br/>Miniflux"] --> E["Webhook<br/>n8n"]
B["Phone shortcut<br/>Safari"] --> E
E --> F["Google Sheets"]
F --> G["Triage in Retool<br/>rate, categorize, shortlink"]
G --> H["Assemble in Retool<br/>categorized lists, 3 stars and up"]
H --> I["Mailerlite<br/>send, Monday 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
What I did
- Built the capture layer: a self-hosted RSS reader (Miniflux) with a keyboard-only flow, plus an Apple Shortcut in Safari’s share sheet — both funnel articles via webhooks through n8n into one Google Sheet.
- Built a triage app in Retool over that sheet — open, rate (5 stars), categorize, edit the link text, bracket the anchor, and auto-generate short links via a self-hosted Kutt on my own domain (Medium links were tripping spam filters).
- Built a second Retool app to assemble each issue — categorized lists, links sorted by rating, anything under three stars dropped.
- Shipped 112 weekly issues since November 2023, to several hundred subscribers, every Monday at 8:00.
Results
- 112 issues shipped since November 2023 — weekly, sustainable.
- Several hundred subscribers and growing.
- Self-hosted the boring infra (Miniflux for RSS, Kutt for short links) — no subscription cost there, and the links carry my domain.
- 2+ years of cadence without burnout — the pipeline carries the friction, not my Mondays.
| Metric | Value |
|---|---|
| Issues shipped | 112 (since November 2023) |
| Cadence | weekly, Mondays 8:00 |
| Subscribers | several hundred, growing |
| Triage candidates | 50–60 a week |
| Infra subscription cost | $0 (self-hosted) |
The problem
Why does a weekly newsletter need a pipeline?
Because doing it by hand doesn’t survive past the first enthusiasm. Every week: read dozens of articles, decide what’s worth it, categorize, rate, write the link blurbs, format, send. Do that for two years straight and the bottleneck is no longer the writing — it’s the mechanical, repetitive lifting around it. Miss a Monday or two and the habit dies.
Why not just use an off-the-shelf newsletter tool?
Because those tools send newsletters; they don’t decide what goes in. The hard part is the upstream pipeline — capture, triage, rating, formatting — and that’s bespoke to how I read and choose. So I built that part, and use a standard sender (Mailerlite) only for the last mile.
My role / scope
- Solo — my own newsletter, my own pipeline. I designed it, built it, and run it; I also read, select, and write every issue.
- This is designer-coder practice, not a side hobby: the same instinct I bring to product work — treat a workflow as a system with a bottleneck — applied to my own publishing.
Process
- Capture at discovery. Articles enter the system the moment I find them — via the RSS reader (keyboard flow, one key to save) or the phone shortcut (Safari share sheet). They never wait for “later,” because later doesn’t come.
- Triage weekly in the Retool app. 50–60 candidates a week → open, read, rate (5 stars), categorize, write the link blurb, generate a short link.
- Assemble in the second Retool app. Categorized lists, links sorted by rating, three stars and up only.
- Paste into Mailerlite and send, Mondays at 8:00. The last paste is still manual — by choice.
Key decisions & trade-offs
- A spreadsheet as the database, not a “real” one. Google Sheets holds everything. Trade-off: it isn’t a real database — but for a solo weekly newsletter, a spreadsheet is the right tool: instantly editable, zero infra, and the Retool apps sit on top of it fine.
- Capture at the point of discovery, not later. Two capture paths (RSS + phone shortcut), both → n8n → one sheet. Trade-off: two paths to maintain — but it means an article is captured the second I see it, which is the only reliable moment.
- Triage in a custom app, not in the raw spreadsheet. A Retool UI over the sheet for rating, categorizing, editing, short-linking. Trade-off: building an app vs editing cells — but triaging 50–60 articles a week in a raw sheet is miserable; the app makes it fast.
- Self-hosted short links on my own domain. Medium links tripped spam filters, so I run Kutt (self-hosted) at *.at.marekbrze.dev and generate links from Retool via API. Trade-off: running my own shortener — but it fixes deliverability and the links point at my domain.
- Honest: the final paste into Mailerlite is still manual. I considered a CLI tool plus Maizzle for HTML templates; chose not to build it yet. The paste takes minutes, and the time is better spent elsewhere.
How it turned out
I’ve shipped 112 weekly issues since November 2023, to several hundred subscribers, every Monday at 8:00 — and the cadence is sustainable because the pipeline does the heavy lifting. The self-hosted pieces (Miniflux, Kutt) cost nothing in subscriptions and put the infrastructure in my hands. The one step I didn’t automate — the final paste — I left on purpose, because it’s cheap and I’d rather spend the time on things that matter more.
What I took away
- Treat your own workflow as a product. The tools are the moat against “I’ll do it later” — and later is where newsletters go to die.
- Capture at discovery. Never trust your future self to remember; the only reliable moment is the one where you noticed it.
- Self-host the boring infra. An RSS reader and a link shortener are cheap to run yourself, and they stay yours.
- Automate the painful 80%, leave the cheap 20%. The manual final paste is a deliberate choice, not a failure — not every step deserves automation.