There is a distinct, delicious irony in setting up a containerized Linux server on a cloud droplet, wiring up an enterprise-grade automation engine, and paying an artificial intelligence model fractional pennies per token—all so I can spend less time looking at screens.
We are told the internet is broken, that algorithmic feeds have turned our collective attention spans into scorched earth, and that the only cure is a £60 Moleskine notebook and a weekend retreat in a yurt. But going full digital hermit isn’t realistic when you actually enjoy the web’s better corners.
The issue isn’t the content; it’s the distribution model. Social platforms aren’t designed to inform you; they’re designed to keep you slightly agitated so you scroll past three more targeted adverts for ergonomic desk chairs you don’t need.
My compromise? I decided to build a bouncer for my brain.
Here is how I used Docker, n8n, and a ruthlessly opinionated LLM scoring pipeline to replace the endless scroll with a quiet, daily reading digest.
The Philosophy: Fighting the Machine with Better Machinery
RSS is the greatest surviving relic of the open web. It doesn’t track your eye movements, it doesn’t serve outrage bait to juice engagement metrics, and it chronologically delivers what you asked for.
The catch? If you subscribe to a dozen feeds spanning digital minimalism, philosophy, tech criticism, and slow culture, you quickly hit another wall: feed bloat. Even great publications publish filler. Before long, your feed reader looks like an unread email inbox with a bright red badge screaming “342 unread items.” That isn’t digital wellness; that’s just an unpaid editorial internship.
I didn’t want a firehose. I wanted a garden.
To achieve that simplicity on the reading end, I chose to absorb all the complexity on the engineering end.
Under the Hood: The Architecture of Intention
Instead of opening a reader app throughout the day, the curation runs on an automated loop hosted on a self-managed DigitalOcean droplet.
[Hourly Schedule Trigger]
│
▼
[Fetch RSS Feeds] (Curated Sources)
│
▼
[Loop Over Posts] ──► [LLM Scoring Node]
│ │ (Evaluates Rubric 1–5)
│◄───────────────────┘
│ (done)
▼
[Deduplicate & Collate] (Code Node)
│
▼
[Dispatch Digest] ──► Discord / Inbox
Here’s how the pipeline transforms raw noise into signal:
1. Curating the Perimeter
The input list avoids generic tech aggregators. Instead of broad feeds that dump 80 press releases an hour, it targets voices exploring intentional tech, tactile workflows, e-ink computing, and platform critique: writers like Austin Kleon, Cal Newport, Low-tech Magazine, and Cory Doctorow.
2. Teaching an AI the Meaning of “Deliberate Friction”
This was the trickiest part of the build. Left to its own devices, asking an LLM to “rate this article from 1 to 10” produces a bizarre distribution where everything is either a generic 5 or a catastrophic 0.
To fix it, I compressed the scale to a strict 1 to 5 rubric and forced the model to justify its rating with a single sentence of reasoning before emitting the score.
The model is explicitly instructed to reward:
- Deliberate friction: People building with pen/paper, dumbphones, e-ink, or static websites.
- Thoughtful irony: Using complex technical workflows to engineer quiet (a meta-point the model seems to appreciate).
- Deep structural critique: Sharp dissection of surveillance capitalism over standard “drink a glass of water and stretch” wellness tropes.
If a generic productivity blog posts “10 Chrome Extensions to Triple Your Morning Output,” it gets slapped with a 1 and discarded. If an essay explores how a writer uses a monochrome e-ink device and physical index cards to finish a screenplay, it scores a 4 or 5.
3. The Grand Aggregator
Inside n8n, handling nested loops across multiple feeds without spamming webhooks requires some structural discipline.
The pipeline cycles through the feeds, scores the unread articles sequentially, and waits for the final batch completion. A custom JavaScript node gathers the day’s scores, strips duplicate URLs, tracks statistical distributions (averages, high/mid/low buckets), and formats the top recommendations.
4. Zero Algorithmic Delivery
Once a day, the workflow fires.
Instead of an endless stream of updates, I receive a single, compact Discord card (or email). It tells me how many articles were parsed, gives me the birds-eye view of the score distribution, and highlights only the articles that scored a 4 or 5.
If nothing hit the editorial bar that day? The digest says nothing worth reading arrived, and I close the tab. That might be the best feature of the entire build.
Why Over-Engineer It?
You could rightly ask: “Isn’t spending hours debugging Docker containers, DNS records, and JSON payloads a strange way to cultivate a simpler life?”
Maybe. But there is a fundamental difference between passive consumption and active engineering.
Passive scrolling leaves you drained because someone else designed the constraints to capture your attention. Building your own curation pipeline is the opposite: you define the constraints, you choose the bouncers, and you set the bar for what deserves your time.
By pushing the friction into the infrastructure, the consumption becomes light, deliberate, and entirely analogue in spirit—even if there’s a Docker daemon humming quietly in the background to make it happen.
