Needs attention

Sites

Media hub (Vercel)

OK

HTTP 308 in 568 ms

24 h 99.1% · 7 d 99.4% · in this state since 26 Sept, 16:23 · 568 ms

Media hub cron endpoint (Vercel to Turso)

Down

HTTP 308: Redirecting...

24 h 0.0% · 7 d 12.2% · in this state since 22 Sept, 02:09 · 214 ms

How to fix

This proves the deployed app can authorise a cron call and open the production database. 401 = CRON_SECRET mismatch between .deploy-secrets and Vercel env. 500 = Turso credentials on Vercel.

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

Down

HTTP 308

24 h 0.0% · 7 d 12.0% · in this state since 22 Sept, 01:59 · 65 ms

How to fix

Consumers (Pressto, the phone app) pull from here with an x-api-key. Anything but 200/401 means the route is gone or the app is down.

Media Intel team page (Cloudflare)

Check

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

24 h 99.1% · 7 d 99.8% · in this state since 27 Sept, 01:59 · 300 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 99.1% · 7 d 99.8% · in this state since 26 Sept, 16:23 · 39 ms

Client portal (onboarding.launchlink.co)

OK

HTTP 200 in 259 ms

24 h 99.1% · 7 d 99.4% · in this state since 26 Sept, 16:23 · 259 ms

Cycle engine (Railway)

Down

up; 0 articles, 0 live cycles, 80/90 feeds healthy, llm api (gemini-flash-latest); disk 82% used (db 344 MB, 79 MB free)

24 h 3.6% · 7 d 77.8% · in this state since 25 Sept, 11:52 · 221 ms

How to fix

cd ~/Developer/cycle-engine && railway status. 'Application not found' = no active deployment. If railway up says 'Your trial has expired', pick a plan at railway.com (Hobby is enough) and redeploy: railway up --service cycle-engine --detach. A full volume kills SQLite; the Janitor agent now prunes at boot and every 6 h, and a 'disk_warning' in the agent feed means grow the volume in the Railway dashboard.

Team dash (Cloudflare)

OK

HTTP 200 in 254 ms

24 h 99.1% · 7 d 99.8% · in this state since 26 Sept, 16:23 · 254 ms

Live processes on the Mac

WhatsApp bridge

OK

up; last message 26 min ago

24 h 100.0% · 7 d 100.0% · in this state since 26 Sept, 16:23

Daily brief action server (:3001)

OK

answering (HTTP 404)

24 h 100.0% · 7 d 100.0% · in this state since 26 Sept, 16:23

Team dash refresh daemon

OK

last tick 1 min ago

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

Scheduled jobs

Opportunity poll actually running (any clock)

OK

last poll finished 13 min ago

24 h 99.1% · 7 d 98.8% · in this state since 27 Sept, 00:47

Gmail media intel (06:30 daily)

OK

last intel file 3.6 h ago

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

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

Check

last stores file 3.7 h ago; log: TypeError: Cannot read properties of null (reading 'toLowerCase')

24 h 100.0% · 7 d 100.0% · in this state since 27 Sept, 03:01

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 9.4 h ago; digest FAILED; [2026-09-26 07:17:13] digest failed (continuing)

24 h 100.0% · 7 d 100.0% · in this state since 26 Sept, 16:23

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)

OK

last poll 18 min ago; email: 81 seen, 0 new, 51 updated, 30 already known, 0 dupes, 24 expir | sourcebottle: 468 seen, 0 new, 393 updated, 75 already known, 0 dupes,

24 h 97.3% · 7 d 96.5% · in this state since 27 Sept, 00:47

GitHub Actions opportunity poll (backup clock)

OK

last run 54 min ago, success

24 h 100.0% · 7 d 100.0% · in this state since 26 Sept, 16:23

GitHub Actions watchdog (backup, fires every few hours)

OK

last run 16 min ago, success

24 h 100.0% · 7 d 100.0% · in this state since 26 Sept, 16:23

Verification sweep (daily)

Check

last pass 5.9 h ago; [2026-09-26 10:47] pass 2/2 unreadable response / [2026-09-26 10:47] adjudicate adjudication unreadable

24 h 100.0% · 7 d 100.0% · in this state since 23 Sept, 11:26

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)

OK

brief last written 1.5 h ago

24 h 100.0% · 7 d 99.8% · in this state since 27 Sept, 00:57

Team dash morning brief (6x/day)

OK

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

24 h 100.0% · 7 d 100.0% · in this state since 27 Sept, 00:47

Headless claude (what every extractor job runs on)

OK

claude -p answered

24 h 99.1% · 7 d 92.7% · in this state since 26 Sept, 16:23

launchd registrations

OK

9 jobs loaded

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

Production data (Turso)

Turso production database

OK

reachable in 1755 ms; 12,150 journalists; 2721 staged changes awaiting review

24 h 99.1% · 7 d 86.8% · in this state since 26 Sept, 16:23 · 1755 ms

Article ingest (Vercel cron, nightly)

Check

last feed run -160 min ago; 59/69 feeds healthy; failing: AdNews, Banking Day, Business News Australia, HR Leader, Information Age, InnovationAus, Inside Retail, InvestorDaily, Pedestrian TV, 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 -180 min ago

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

Opportunity engine (callouts arriving)

OK

newest callout 22 h ago; 65 in last 24 h; email:haro 22 h ago, email:qwoted 45.6 days ago, sourcebottle 40 h ago

24 h 99.1% · 7 d 98.8% · in this state since 25 Sept, 21:45

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

OK

nothing sent in the last 24 h

24 h 100.0% · 7 d 99.8% · in this state since 24 Sept, 12:04

Credits, keys and sessions

OpenRouter credit (web lookups, verification, chat)

Down

US$9.66 left; burning about US$3.15/day (about 3 days)

24 h 64.9% · 7 d 91.1% · in this state since 26 Sept, 06: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 28 h 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
Turso production database26 Sept, 16:2327 Sept, 00:47fetch failed
Headless claude (what every extractor job runs on)26 Sept, 16:2327 Sept, 00:47no answer: API Error: Unable to connect to API (FailedToOpenSocket)
Opportunity poll (every 15 min)26 Sept, 16:2327 Sept, 00:57last poll 9.4 h ago; email: 102 seen, 0 new, 68 updated, 34 already known, 0 dupes, 24 expi; [TypeError: fetch failed] {
Team dash refresh daemon26 Sept, 16:2327 Sept, 00:47last tick 1.1 h ago
Team dash (Cloudflare)26 Sept, 16:2327 Sept, 00:47fetch failed
Client portal (onboarding.launchlink.co)26 Sept, 16:2327 Sept, 00:47fetch failed
Team page functions (D1 notes and submissions)26 Sept, 16:2327 Sept, 00:47fetch failed
Media Intel team page (Cloudflare)26 Sept, 16:2327 Sept, 00:47fetch failed
Media hub (Vercel)26 Sept, 16:2327 Sept, 00:47fetch failed
OpenRouter credit (web lookups, verification, chat)26 Sept, 06:54openUS$9.73 left; burning about US$3.27/day (about 2 days)
Opportunity poll (every 15 min)25 Sept, 23:5426 Sept, 02:54last poll 2.0 h ago; email: 124 seen, 0 new, 83 updated, 41 already known, 0 dupes, 29 expi | sourcebottle: 360 seen, 0 new, 310 updated, 50
Opportunity engine (callouts arriving)25 Sept, 21:4525 Sept, 21:55TypeError: fetch failed
Cycle engine (Railway)25 Sept, 12:03openup; 0 articles, 0 live cycles, 80/90 feeds healthy, llm api (gemini-flash-latest); disk 82% used (db 344 MB, 79 MB free)
Opportunity poll actually running (any clock)25 Sept, 10:2325 Sept, 11:31last poll finished 2.1 h ago
Opportunity poll (every 15 min)25 Sept, 08:1925 Sept, 10:23last poll 4.2 h ago; email: 126 seen, 0 new, 98 updated, 28 already known, 0 dupes, 26 expi | sourcebottle: 257 seen, 0 new, 241 updated, 16
Client portal (onboarding.launchlink.co)25 Sept, 01:1025 Sept, 01:21This operation was aborted
Pressto webhook deliveries (hub to api.yaarn.ai)24 Sept, 12:0424 Sept, 12:15LibsqlError: SERVER_ERROR: Server returned HTTP status 502
Opportunity engine (callouts arriving)24 Sept, 12:0424 Sept, 12:15LibsqlError: SERVER_ERROR: Server returned HTTP status 502
Turso production database24 Sept, 01:3024 Sept, 01:50fetch failed
Cycle engine (Railway)24 Sept, 01:3024 Sept, 01:50fetch failed; volume 82% full
Client portal (onboarding.launchlink.co)24 Sept, 01:3024 Sept, 01:40fetch failed
Media hub (Vercel)24 Sept, 01:3024 Sept, 01:40fetch failed
Opportunity poll (every 15 min)23 Sept, 23:2523 Sept, 23:36last poll 2.1 h ago; sourcebottle: 465 seen, 0 new, 406 updated, 59 already known, 0 dupes,
Team dash refresh daemon23 Sept, 23:1523 Sept, 23:25last tick 1.4 h ago
Turso production database23 Sept, 07:2823 Sept, 07:39fetch failed

Automatic restarts (last 15)

ComponentWhenAction
Savings, events, trends + team page deploy (06:45 daily)27 Sept, 02:51co.launchlink.intel-stores
Team dash morning brief (6x/day)27 Sept, 00:47co.launchlink.briefing.0900
Felicia's daily brief (6x/day)27 Sept, 00:47co.launchlink.personal-brief
Verification sweep (daily)27 Sept, 00:47co.launchlink.media-sweep
Opportunity poll (every 15 min)26 Sept, 18:50co.launchlink.opportunities
Team dash refresh daemon26 Sept, 18:50com.launchlink.refresh-daemon
Daily brief action server (:3001)26 Sept, 18:50co.launchlink.action-server
WhatsApp bridge26 Sept, 18:50com.launchlink.whatsapp-bridge
Felicia's daily brief (6x/day)25 Sept, 19:16co.launchlink.personal-brief
Opportunity poll (every 15 min)25 Sept, 11:32co.launchlink.opportunities
Opportunity poll (every 15 min)24 Sept, 15:20co.launchlink.opportunities
Savings, events, trends + team page deploy (06:45 daily)24 Sept, 02:53co.launchlink.intel-stores
Team dash morning brief (6x/day)23 Sept, 23:15co.launchlink.briefing.0900
Felicia's daily brief (6x/day)23 Sept, 23:15co.launchlink.personal-brief
Opportunity poll (every 15 min)23 Sept, 23:15co.launchlink.opportunities