Needs attention

Sites

Media hub (Vercel)

OK

HTTP 307 in 1568 ms

24 h 93.8% · 7 d 90.8% · in this state since 20 Sept, 17:35 · 1568 ms

Media hub cron endpoint (Vercel to Turso)

OK

HTTP 200: {"ran":"2026-09-21T05:06:22.186Z","step":"ping"}

24 h 100.0% · 7 d 91.1% · in this state since 19 Sept, 05:58 · 244 ms

Opportunity API (/api/mobile/v1/feed)

OK

auth wall answering (HTTP 401) in 77 ms

24 h 100.0% · 7 d 91.3% · in this state since 19 Sept, 05:58 · 77 ms

Media Intel team page (Cloudflare)

OK

up; page says "Updated 21 Sep 2026" (1.1 h ago)

24 h 100.0% · 7 d 90.8% · in this state since 19 Sept, 05:58 · 209 ms

Team page functions (D1 notes and submissions)

OK

HTTP 400 {"error":"opp required"}

24 h 100.0% · 7 d 92.6% · in this state since 19 Sept, 05:58 · 63 ms

Client portal (onboarding.launchlink.co)

OK

HTTP 200 in 535 ms

24 h 100.0% · 7 d 91.6% · in this state since 19 Sept, 06:31 · 535 ms

Cycle engine (Railway)

OK

up; 23,967 articles, 248 live cycles, 80/90 feeds healthy, llm api (gemini-flash-latest); disk 67% used (db 283 MB, 141 MB free)

24 h 100.0% · 7 d 93.9% · in this state since 19 Sept, 05:58 · 260 ms

Team dash (Cloudflare)

OK

HTTP 200 in 207 ms

24 h 100.0% · 7 d 92.3% · in this state since 19 Sept, 05:58 · 207 ms

Live processes on the Mac

WhatsApp bridge

OK

up; last message 8 min ago

24 h 100.0% · 7 d 94.8% · in this state since 16 Sept, 20:30

Daily brief action server (:3001)

OK

answering (HTTP 404)

24 h 100.0% · 7 d 100.0% · in this state since 19 Sept, 06:19

Team dash refresh daemon

Down

last tick 1.6 h ago

24 h 93.8% · 7 d 99.3% · in this state since 21 Sept, 09:51

How to fix

Runs every 2 min via com.launchlink.refresh-daemon. If stale: launchctl kickstart -k gui/$(id -u)/com.launchlink.refresh-daemon

Scheduled jobs

Opportunity poll actually running (any clock)

Down

last poll finished 4.9 h ago

24 h 86.7% · 7 d 99.0% · in this state since 21 Sept, 09:51

How to fix

Three clocks kick the Vercel poll: Cloudflare Worker media-cron every 15 min (primary), GitHub Actions hourly (fires every few hours in practice), launchd on the Mac every 15 min (backup). All three quiet = Vercel poll route or CRON_SECRET broke: curl it by hand with the Bearer secret.

Gmail media intel (06:30 daily)

Check

last intel file 11 h ago; log: API Error: The socket connection was closed unexpectedly. For more information, pass `verbose: true` in the second argument to fetch()

24 h 100.0% · 7 d 99.5% · in this state since 20 Sept, 17:35

How to fix

Runs media-db/media-intel.sh via headless claude. 'issue with the selected model' = the CLI cannot use the model; the script now pins --model opus. 'Unable to connect to API' = no network at run time. Re-run: bash media-db/media-intel.sh

Savings, events, trends + team page deploy (06:45 daily)

OK

last stores file 11 h ago

24 h 100.0% · 7 d 81.7% · in this state since 18 Sept, 06:50

Media hub daily refresh + team digest email (07:15 daily)

Check

last run 18 h ago; digest FAILED; [2026-09-20 12:14:24] digest failed (continuing)

24 h 100.0% · 7 d 100.0% · in this state since 21 Sept, 01:45

How to fix

scripts/daily.sh in media-hub. 'ENOTFOUND ...turso.io' = DNS/network dropped mid-run (travelling wifi); the digest simply retries tomorrow. Re-send today: cd media-hub && set -a && . .turso-env && set +a && npx tsx scripts/media-digest.ts

Opportunity poll (every 15 min)

Down

last poll 5.3 h ago; email: 0 seen, 0 new, 0 updated, 0 already known, 0 dupes, 0 expired ( | sourcebottle: 257 seen, 4 new, 226 updated, 27 already known, 0 dupes,

24 h 75.0% · 7 d 96.8% · in this state since 21 Sept, 09:51

How to fix

scripts/poll-cron.sh writes to production Turso and is now the BACKUP poller; the hourly GitHub Actions job below is the primary. Zero yield on SourceBottle for a whole day usually means their page changed, not that there were no callouts.

GitHub Actions opportunity poll (backup clock)

OK

last run 5.0 h ago, success

24 h 100.0% · 7 d 98.3% · in this state since 19 Sept, 05:58

GitHub Actions watchdog (backup, fires every few hours)

OK

last run 4.8 h ago, success

24 h 100.0% · 7 d 97.7% · in this state since 19 Sept, 05:58

Verification sweep (daily)

OK

last pass 5.6 h ago; [2026-09-20 19:28] pass 2/2 checked 602 · confirmed 160 · staged 13 · 82% verified · 1939 left / [2026-09-20 19:29] adjudicate settled 8

24 h 100.0% · 7 d 100.0% · in this state since 21 Sept, 09:19

Felicia's daily brief (6x/day)

OK

brief last written 5.6 h ago

24 h 93.8% · 7 d 95.0% · in this state since 21 Sept, 09:19

Team dash morning brief (6x/day)

OK

last log write 5.6 h ago; launchd exits [0,1,0,0,6,0]

24 h 100.0% · 7 d 98.0% · in this state since 20 Sept, 09:11

Headless claude (what every extractor job runs on)

OK

claude -p answered

24 h 81.3% · 7 d 84.2% · in this state since 20 Sept, 11:24

launchd registrations

OK

9 jobs loaded

24 h 100.0% · 7 d 99.8% · in this state since 15 Sept, 08:05

Production data (Turso)

Turso production database

OK

reachable in 2300 ms; 12,148 journalists; 2592 staged changes awaiting review

24 h 93.8% · 7 d 89.9% · in this state since 20 Sept, 17:35 · 2300 ms

Article ingest (Vercel cron, nightly)

Check

last feed run 6.0 h ago; 61/69 feeds healthy; failing: AdNews, Banking Day, Business News Australia, HR Leader, Information Age, InnovationAus, InvestorDaily, The New Daily

24 h 100.0% · 7 d 100.0% · in this state since monitoring began

How to fix

Feeds returning 403/404 have moved or now block bots. Fix the URL in the sources table (scripts/discover-feeds.ts) or disable the source.

Mailbox scans (Vercel cron, nightly)

OK

6 inboxes, last scan 5.5 h ago

24 h 100.0% · 7 d 100.0% · in this state since 17 Sept, 01:54

Opportunity engine (callouts arriving)

OK

newest callout 5.0 h ago; 21 in last 24 h; email:haro 2.3 days ago, email:qwoted 39.9 days ago, sourcebottle 5.0 h ago

24 h 80.0% · 7 d 99.2% · in this state since 21 Sept, 09:40

Pressto webhook deliveries (hub to api.yaarn.ai)

OK

nothing sent in the last 24 h

24 h 100.0% · 7 d 82.6% · in this state since 15 Sept, 18:15

Credits, keys and sessions

OpenRouter credit (web lookups, verification, chat)

Check

US$20.96 left; burning about US$3.36/day (about 6 days)

24 h 93.8% · 7 d 89.4% · in this state since 21 Sept, 04:29

How to fix

Top up at openrouter.ai/settings/credits. At zero, every web feature returns empty with no error (402 swallowed), verification stalls and the sweep logs 'unreadable response'.

Substack session (On Background, Get Featured)

OK

newest post pulled 6.7 days ago

24 h 100.0% · 7 d 100.0% · in this state since monitoring began

Resend (digest + portal email)

OK

key present in media-hub/.env.local (delivery proven by the digest job above)

24 h 100.0% · 7 d 100.0% · in this state since monitoring began

Incidents (last 25)

ComponentStartedEndedWhat was seen
Opportunity poll (every 15 min)21 Sept, 15:06openlast poll 5.3 h ago; email: 0 seen, 0 new, 0 updated, 0 already known, 0 dupes, 0 expired ( | sourcebottle: 257 seen, 4 new, 226 updated, 27
Opportunity poll actually running (any clock)21 Sept, 15:06openlast poll finished 4.9 h ago
Team dash refresh daemon21 Sept, 15:06openlast tick 1.6 h ago
Opportunity engine (callouts arriving)21 Sept, 09:1921 Sept, 09:51newest callout 2.1 days ago; 0 in last 24 h; email:haro 2.1 days ago, email:qwoted 39.7 days ago, sourcebottle 2.8 days ago
Opportunity poll (every 15 min)21 Sept, 09:1921 Sept, 09:30last poll 5.0 h ago; email: 20 seen, 0 new, 14 updated, 6 already known, 0 dupes, 9 expired; [TypeError: fetch failed] {
Felicia's daily brief (6x/day)21 Sept, 01:4521 Sept, 04:29brief last written 37 h ago; last exit 1; log: API Error: The socket connection was closed unexpectedly. For more information, pass `verbose
Opportunity poll actually running (any clock)21 Sept, 01:4521 Sept, 04:29last poll finished 4.5 h ago
OpenRouter credit (web lookups, verification, chat)20 Sept, 17:3521 Sept, 01:45This operation was aborted
Turso production database20 Sept, 17:3521 Sept, 01:45fetch failed
Opportunity poll (every 15 min)20 Sept, 17:3521 Sept, 04:29last poll 3.2 h ago; email: 63 seen, 0 new, 32 updated, 31 already known, 0 dupes, 21 expir
Media hub (Vercel)20 Sept, 17:3521 Sept, 01:45This operation was aborted
Headless claude (what every extractor job runs on)20 Sept, 10:1120 Sept, 11:34no answer: You've hit your session limit · resets 9:30pm (America/New_York)
Opportunity poll (every 15 min)20 Sept, 09:1120 Sept, 10:11last poll 2.0 h ago; sourcebottle: 0 seen, 0 new, 0 updated, 0 already known, 0 dupes, 0 ex; note: all industries failed: iid 61: 500 Intern
Team dash refresh daemon20 Sept, 09:1120 Sept, 10:11last tick 1.0 h ago
Opportunity poll (every 15 min)20 Sept, 06:3520 Sept, 07:24last poll 3.4 h ago; email: 84 seen, 0 new, 44 updated, 39 already known, 0 dupes, 32 expir | sourcebottle: 216 seen, 0 new, 203 updated, 12
Headless claude (what every extractor job runs on)19 Sept, 21:3820 Sept, 06:35no answer: You've hit your weekly limit · resets 3pm (America/New_York)
Opportunity poll (every 15 min)19 Sept, 15:2719 Sept, 23:13last poll 5.1 h ago; email: 124 seen, 0 new, 66 updated, 57 already known, 0 dupes, 39 expi | sourcebottle: 430 seen, 0 new, 369 updated, 57
Opportunity poll actually running (any clock)19 Sept, 15:2719 Sept, 21:38last poll finished 2.9 h ago
Opportunity poll (every 15 min)19 Sept, 10:2319 Sept, 12:15last poll 2.8 h ago; email: 124 seen, 14 new, 53 updated, 56 already known, 8 dupes, 36 exp | sourcebottle: 408 seen, 0 new, 344 updated, 56
OpenRouter credit (web lookups, verification, chat)19 Sept, 06:5319 Sept, 22:38US$8.23 left; burning about US$4.31/day (about 1 days)
Client portal (onboarding.launchlink.co)19 Sept, 06:3119 Sept, 06:43fetch failed
Turso production database19 Sept, 06:1919 Sept, 06:31fetch failed
OpenRouter credit (web lookups, verification, chat)19 Sept, 05:5819 Sept, 06:08fetch failed
Turso production database19 Sept, 05:5819 Sept, 06:08fetch failed
Team dash (Cloudflare)19 Sept, 05:5819 Sept, 06:08fetch failed

Automatic restarts (last 15)

ComponentWhenAction
Opportunity poll (every 15 min)21 Sept, 15:06co.launchlink.opportunities
Team dash refresh daemon21 Sept, 15:06com.launchlink.refresh-daemon
Verification sweep (daily)21 Sept, 09:20co.launchlink.media-sweep
Team dash refresh daemon20 Sept, 19:21com.launchlink.refresh-daemon
Opportunity poll (every 15 min)20 Sept, 13:42co.launchlink.opportunities
Felicia's daily brief (6x/day)20 Sept, 12:38co.launchlink.personal-brief
Felicia's daily brief (6x/day)20 Sept, 06:36co.launchlink.personal-brief
Opportunity poll (every 15 min)19 Sept, 10:24co.launchlink.opportunities
Team dash refresh daemon19 Sept, 10:24com.launchlink.refresh-daemon
Daily brief action server (:3001)19 Sept, 06:20co.launchlink.action-server
Team dash refresh daemon18 Sept, 06:50com.launchlink.refresh-daemon
Opportunity poll (every 15 min)18 Sept, 02:27co.launchlink.opportunities
Savings, events, trends + team page deploy (06:45 daily)17 Sept, 13:06co.launchlink.intel-stores
Daily brief action server (:3001)17 Sept, 00:34co.launchlink.action-server
Team dash morning brief (6x/day)17 Sept, 00:18co.launchlink.briefing.0900