Skip to content

Publication & delivery

What happens after the agent posts a finished SITREP to the ingest endpoint.

Fan-out

flowchart LR
    I[POST /api/admin/ingest] --> DB[(Database)]
    DB --> OG[OG image generator]
    DB --> TG[Telegram channel post]
    DB --> NL[Newsletter queue]
    DB --> AUD[Audio pipeline]
    DB --> RSS[RSS / podcast.xml]
    DB --> WEB[Reader UI / permalink]

Channels

Each SITREP gets a permanent URL at sitrepisr.com/update/<slug>. The reader view is the canonical artefact; every other channel links back to it.

Telegram channel

Posted automatically on ingest by agent/sitrep_agent/publish.py (or the ingest handler). Message contains BLUF + permalink. No commentary, no follow-ups.

Channel: t.me/israel_sitreps (short link: sitrepisr.com/telegram).

If a SITREP was triggered by a Telegram bot interaction, the publish notification threads as a reply (reply_chat_id / reply_message_id).

Newsletter

Delivered via Buttondown. The admin surface handles preview + send — the site does not auto-send on ingest, to give the operator a moment to sanity-check the rendered email before fan-out.

Signup: sitrepisr.com/subscribe/newsletter (short link: sitrepisr.com/newsletter).

RSS

Two feeds:

  • /rss.xml — SITREPs.
  • /api/rss/simulations — simulations (separate stream so subscribers can opt into one without the other).

Podcast

/podcast.xml is the Apple/Spotify-compatible feed. See audio pipeline.

Back-edits / corrections

Corrections are handled from the admin surface and written through the public site's back-edit API. Key rules:

  • Corrections are dated in place, not silently overwritten.
  • The OG image regenerates after an edit.
  • A correction does not re-trigger newsletter send or Telegram post — corrections are visible on-site but don't re-spam subscribers.

Monitoring

  • GitHub Actions logs per run (the runtime is per-invocation — no always-on worker to monitor).
  • Failed ingest calls surface in Vercel logs.
  • Heartbeat runs that found nothing to publish write a marker so a gap in the public feed can be distinguished from a broken pipeline.