Needs attention

Sites

Media hub (Vercel)

OK

HTTP 307 in 3115 ms

24 h 70.6% · 7 d 73.6% · in this state since 17 Sept, 00:32 · 3115 ms

Media hub cron endpoint (Vercel to Turso)

OK

HTTP 200: {"ran":"2026-09-16T15:54:27.017Z","step":"ping"}

24 h 70.6% · 7 d 73.6% · in this state since 17 Sept, 00:32 · 10732 ms

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

OK

auth wall answering (HTTP 401) in 1539 ms

24 h 71.6% · 7 d 74.4% · in this state since 17 Sept, 00:32 · 1539 ms

Media Intel team page (Cloudflare)

Check

up; page says "Updated 15 Sep 2026" (41 h ago)

24 h 70.6% · 7 d 71.1% · in this state since 17 Sept, 00:32 · 3230 ms

How to fix

The page is regenerated and deployed by the 6:45 intel-stores job. Stale page = that job stopped before its deploy step. Read stores/intel-stores.log.

Team page functions (D1 notes and submissions)

OK

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

24 h 73.4% · 7 d 76.0% · in this state since 17 Sept, 00:32 · 1790 ms

Client portal (onboarding.launchlink.co)

OK

HTTP 200 in 4585 ms

24 h 72.5% · 7 d 75.2% · in this state since 17 Sept, 00:32 · 4585 ms

Cycle engine (Railway)

OK

up; 4,212 articles, 478 live cycles, 80/90 feeds healthy, llm api (gemini-flash-latest); disk 18% used (db 68 MB, 356 MB free)

24 h 38.5% · 7 d 38.5% · in this state since 17 Sept, 00:32 · 4185 ms

Team dash (Cloudflare)

OK

HTTP 200 in 1908 ms

24 h 72.5% · 7 d 75.2% · in this state since 17 Sept, 00:15 · 1908 ms

Live processes on the Mac

WhatsApp bridge

OK

up; last message 7 min ago

24 h 80.7% · 7 d 82.6% · 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 17 Sept, 00:32

Team dash refresh daemon

OK

last tick 1 min ago

24 h 99.1% · 7 d 99.2% · in this state since 16 Sept, 16:11

Scheduled jobs

Opportunity poll actually running (any clock)

OK

last poll finished 4 min ago

24 h 100.0% · 7 d 100.0% · in this state since 17 Sept, 00:02

Gmail media intel (06:30 daily)

OK

last intel file 2.9 h ago

24 h 100.0% · 7 d 98.3% · in this state since 16 Sept, 22:38

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

Check

last stores file 42 h ago

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

How to fix

Runs stores/intel-stores.sh. The extractor step is now non-fatal, so the page still regenerates and deploys even if Gmail mining fails. Re-run: bash stores/intel-stores.sh

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

Check

last run 19 h ago; digest FAILED; [2026-09-15 22:18:11] digest failed (continuing)

24 h 100.0% · 7 d 100.0% · in this state since 16 Sept, 03:14

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)

Check

last poll 35 min ago; email: 125 seen, 0 new, 113 updated, 12 already known, 0 dupes, 12 exp | sourcebottle: 415 seen, 0 new, 357 updated, 55 already known, 0 dupes,; error: sourcebottle/sb:160995: fetch failed

24 h 98.2% · 7 d 98.3% · in this state since 17 Sept, 01:42

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 1.1 h ago, success

24 h 91.7% · 7 d 91.7% · in this state since 16 Sept, 23:50

GitHub Actions watchdog (backup, fires every few hours)

OK

last run 50 min ago, success

24 h 88.9% · 7 d 88.9% · in this state since 16 Sept, 23:50

Verification sweep (daily)

Check

last pass 5.3 h ago; [2026-09-16 11:37] pass 1/1 unreadable response / [2026-09-16 11:38] adjudicate settled 0 · disagreed 0 · for a person 0

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

How to fix

'unreadable response' = the cron verify step timed out or returned non-JSON (often OpenRouter out of credit, or a 300 s Vercel window overrun). Check the credits card below first.

Felicia's daily brief (6x/day)

Down

brief last written 33 h ago; last exit 1; log: API Error: Unable to connect to API (ConnectionRefused)

24 h 85.3% · 7 d 86.8% · in this state since 16 Sept, 23:03

How to fix

refresh.sh needs --permission-mode acceptEdits and current MCP tool names; a stale file with no error usually means the final Write was denied.

Team dash morning brief (6x/day)

OK

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

24 h 92.7% · 7 d 93.4% · in this state since 17 Sept, 00:15

Headless claude (what every extractor job runs on)

Down

no answer: You've hit your session limit · resets 5:10pm (Europe/Lisbon)

24 h 65.1% · 7 d 68.6% · in this state since 17 Sept, 00:15

How to fix

If the message is 'issue with the selected model', ~/.claude/settings.json names a model the CLI at /opt/homebrew/bin/claude cannot use; scripts pin --model opus for this reason. 'Unable to connect to API' = network or auth (claude login).

launchd registrations

OK

9 jobs loaded

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

Production data (Turso)

Turso production database

OK

reachable in 6792 ms; 12,148 journalists; 2433 staged changes awaiting review

24 h 67.9% · 7 d 71.1% · in this state since 17 Sept, 00:32 · 6792 ms

Article ingest (Vercel cron, nightly)

Check

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

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)

Check

6 inboxes, last scan 21 h ago; needs attention: annmargaret@launchlink.co (needs_reauth)

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

How to fix

needs_reauth = Google refresh token expired (invalid_grant). That person signs in to the hub and reconnects their inbox under Settings.

Opportunity engine (callouts arriving)

OK

newest callout 6.0 h ago; 115 in last 24 h; email:haro 6.0 h ago, email:qwoted 35.4 days ago, sourcebottle 11 h ago

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

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

OK

nothing sent in the last 24 h

24 h 29.7% · 7 d 26.7% · in this state since 15 Sept, 18:15

Credits, keys and sessions

OpenRouter credit (web lookups, verification, chat)

Check

US$16.65 left; burning about US$3.02/day (about 5 days)

24 h 69.7% · 7 d 72.7% · in this state since 17 Sept, 00:32

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 2.2 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
OpenRouter credit (web lookups, verification, chat)17 Sept, 00:3217 Sept, 00:45fetch failed
Turso production database17 Sept, 00:3217 Sept, 00:45fetch failed
Headless claude (what every extractor job runs on)17 Sept, 00:32openno answer: You've hit your session limit · resets 5:10pm (Europe/Lisbon)
Client portal (onboarding.launchlink.co)17 Sept, 00:3217 Sept, 00:45fetch failed
Team page functions (D1 notes and submissions)17 Sept, 00:3217 Sept, 00:45fetch failed
Media Intel team page (Cloudflare)17 Sept, 00:3217 Sept, 00:45fetch failed
Opportunity API (/api/mobile/v1/feed)17 Sept, 00:3217 Sept, 00:45fetch failed
Media hub cron endpoint (Vercel to Turso)17 Sept, 00:3217 Sept, 00:45fetch failed
Media hub (Vercel)17 Sept, 00:3217 Sept, 00:45fetch failed
Team dash (Cloudflare)17 Sept, 00:1517 Sept, 00:32fetch failed
Cycle engine (Railway)17 Sept, 00:1517 Sept, 00:45fetch failed
Turso production database16 Sept, 23:5516 Sept, 23:58fetch failed
GitHub Actions watchdog (backup, fires every few hours)16 Sept, 23:5016 Sept, 23:55last run 3.6 h ago, success
OpenRouter credit (web lookups, verification, chat)16 Sept, 23:4316 Sept, 23:50fetch failed
Media hub cron endpoint (Vercel to Turso)16 Sept, 23:4316 Sept, 23:50This operation was aborted
Media hub (Vercel)16 Sept, 23:4316 Sept, 23:50fetch failed
Turso production database16 Sept, 23:2916 Sept, 23:50fetch failed
GitHub Actions watchdog (backup, fires every few hours)16 Sept, 23:2916 Sept, 23:43last run 3.3 h ago, success
Media Intel team page (Cloudflare)16 Sept, 23:2916 Sept, 23:43This operation was aborted
Team dash morning brief (6x/day)16 Sept, 23:1517 Sept, 00:32last log write 30 h ago; launchd exits [6,6,6,6,6,6]
Felicia's daily brief (6x/day)16 Sept, 23:15openbrief last written 30 h ago; last exit 1; log: API Error: Unable to connect to API (ConnectionRefused)
Client portal (onboarding.launchlink.co)16 Sept, 23:1516 Sept, 23:29This operation was aborted
GitHub Actions opportunity poll (backup clock)16 Sept, 22:5016 Sept, 23:55last run 3.0 h ago, success
GitHub Actions watchdog (backup, fires every few hours)16 Sept, 22:2516 Sept, 23:15last run 2.2 h ago, success
OpenRouter credit (web lookups, verification, chat)16 Sept, 21:5016 Sept, 22:00fetch failed

Automatic restarts (last 15)

ComponentWhenAction
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
Gmail media intel (06:30 daily)16 Sept, 22:27co.launchlink.media-intel
Verification sweep (daily)16 Sept, 20:34co.launchlink.media-sweep
Felicia's daily brief (6x/day)16 Sept, 16:14co.launchlink.personal-brief
Opportunity poll (every 15 min)16 Sept, 16:14co.launchlink.opportunities
Team dash refresh daemon16 Sept, 16:14com.launchlink.refresh-daemon
WhatsApp bridge16 Sept, 16:14com.launchlink.whatsapp-bridge
Savings, events, trends + team page deploy (06:45 daily)16 Sept, 14:22co.launchlink.intel-stores
Felicia's daily brief (6x/day)16 Sept, 09:11co.launchlink.personal-brief
Opportunity poll (every 15 min)16 Sept, 04:15co.launchlink.opportunities
Team dash refresh daemon16 Sept, 04:15com.launchlink.refresh-daemon
WhatsApp bridge16 Sept, 04:15com.launchlink.whatsapp-bridge