~$ skillshelf
← all writeups

Crypto Articles Queue: a day's publishing in one click

projectautomationtypescriptllm

I publish Arabic crypto news across the sites I run. That used to be most of a day, every day: read the English feeds, decide what’s worth covering, rewrite it in Arabic, find a picture I’m allowed to publish, post it to every site, and track what already went out so nothing ships twice. Crypto Articles Queue does that day in one click — and keeps, on purpose, the parts a machine shouldn’t own.

what it does

One button, once a day. It pulls the day’s candidates from English crypto feeds, turns each story into a finished Arabic article written for search, gives it an image, and publishes across Blogger and WordPress — dealing the day’s work out so no site floods and none gets skipped.

What it can’t be confident about, it refuses to publish. That goes to a review queue in Notion and waits for me. The split is the design: the machine takes the volume, I take the judgement, and which is which is never in doubt.

A day’s work, every day, became one click and an hour of review.

what it took

The happy path was the small part. The build is in everything that goes wrong.

  • Publishing where the API says no. One platform refuses write access to my account outright — not a bug I could fix, a policy I couldn’t argue with. So the tool drives the real editor in a browser and posts the way I would by hand. A published post is a published post; when the front door is locked you find another one.
  • Never repeating myself. Many feeds into many sites, and the same event arrives several different ways. Deciding that two headlines are one story is harder than it sounds, and getting it wrong is public.
  • Images I’m allowed to use. On topic, licensed for what I’m doing with it, and never the same picture twice.
  • Making mistakes cheap. Everything that can touch a live site is guarded, and the guards were written the day a test run went out live. Anything that publishes earns a rejection path before it earns a feature.
  • Surviving unattended. A dead feed, a model that won’t answer, a page that quietly changed its layout — none of them get to take the day down. The whole cycle is one headless command, so moving it onto a schedule somewhere permanent is a config change, not a rewrite.

the takeaway

The thing I’m taking to the next build: an automation is only worth having if you can walk away from it. That trust isn’t earned on the happy path. It’s earned by what happens when something is missing, ambiguous, or offline — and by being honest about which decisions shouldn’t be automated at all. The review queue isn’t a hole in the automation. It’s what makes the rest of it safe to leave alone.

Nine thousand lines of TypeScript. I built it with Claude Code doing the typing; the design, the decisions, and every failure it hit in production were mine.