↑↓ select · ENTER go · ESC close

AutomationIntegrations

Tech Radar: pulling signal out of a developer community feed

What this was
My own service: it collects messages from a professional community, filters the noise with explainable rules and assembles a digest. Running on my server.
My role
Framing, architecture, development, operations — alone
Period
2026, ongoing
Outcome
7,627 messages from 581 authors archived; the service runs unattended.

Context and original problem

A developer community discussing new libraries, tools and API pricing. The value is real but spread across hundreds of messages a day, and reading everything by hand is not an option.

Business task

Miss nothing useful without reading everything. Get a short daily summary instead of a feed, and be able to explain why a message made the cut.

Constraints and unknowns

  • One server, 2 CPU / 4 GB, no GPU
  • The messages belong to other people: the archive stays private, only links and fragments surface
  • It has to run unattended — I am busy with other work
  • No paid APIs

My responsibility

Everything: collection via Telethon, database schema, selection rules, digest, the systemd unit, tests and operations.

Key decisions and trade-offs

  • The raw archive is untouchable: processing never deletes from items, and every derived verdict lives separately in item_analysis. Rules can be rewritten and replayed over the whole history.
  • Deterministic rules first, an LLM only after. Rules are cheap, reproducible and explain themselves with a list of reasons; a model on two cores without a GPU is slow and cannot.
  • The LLM sits behind an ItemAnalyzer interface rather than inside the processing code. Adding a local model means another implementation of the same protocol, not a rewrite.
  • Incremental collection by cursor: a restart does not re-read history.
  • Observability from day one — every collector run is recorded with its status, including abnormal termination.

What changed

  • 7,627 messages from 581 authors collected between March and August 2026
  • Deduplication by normalised text and by canonicalised links, with tracking parameters stripped
  • The digest reports a score, a category and the list of reasons a message was selected
  • The service runs under systemd and survives a server reboot with no manual step
  • 1,148 lines of my own code, four external dependencies, three test suites

Disclosure and outcome boundaries

Next step for a similar task

A similar task: extract signal from a stream of messages, emails or inbound requests. We would start by defining what counts as signal.

Get in touch

Have a project to discuss?

Start with ScopeMap or describe what happens today and what should happen instead. I will suggest a safe first step.