Needs attention

Sites

Media hub on Vercel (cron endpoint to Turso)

Down

This operation was aborted

24 h 96.2% · 7 d 97.6% · in this state since 13 Nov, 19:10 · 110427 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.

Media Intel team page (Cloudflare)

OK

up; page says "Updated 13 Nov 2026" (14 h ago)

24 h 98.1% · 7 d 98.1% · in this state since 13 Nov, 11:27 · 3137 ms

Team page functions (D1 notes and submissions)

OK

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

24 h 100.0% · 7 d 98.6% · in this state since 12 Nov, 08:23 · 22 ms

Client portal (onboarding.launchlink.co)

OK

HTTP 200 in 518 ms

24 h 100.0% · 7 d 98.1% · in this state since 12 Nov, 09:39 · 518 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 0.0% · 7 d 0.0% · in this state since monitoring began · 86 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 136 ms

24 h 100.0% · 7 d 98.6% · in this state since 12 Nov, 08:23 · 136 ms

Live processes on the Mac

WhatsApp bridge

OK

up; last message 16 min ago

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

Daily brief action server (:3001)

OK

answering (HTTP 404)

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 11:27

Team dash refresh daemon

Check

last tick 20 min ago

24 h 100.0% · 7 d 99.5% · in this state since 13 Nov, 19:10

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)

OK

last poll finished 5 min ago

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

Gmail media intel (06:30 daily)

Check

last intel file 32 h ago; log: API Error: Can't reach the API server — check your internet or DNS (ENOTFOUND)

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 19:10

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)

Check

last stores file 32 h ago

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 19:10

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 7.3 h ago; digest FAILED; [2026-11-13 08:48:02] digest failed (continuing)

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 19:10

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 14 h ago; email: 120 seen, 0 new, 75 updated, 43 already known, 0 dupes, 25 expi | sourcebottle: 358 seen, 0 new, 304 updated, 43 already known, 0 dupes,; error: email:haro/1a1d1db680279698#7: fetch failed

24 h 98.1% · 7 d 98.1% · in this state since 13 Nov, 19:10

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 11 min ago, success

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 18:39

GitHub Actions watchdog (backup, fires every few hours)

OK

last run 4.1 h ago, success

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 11:27

Verification sweep (daily)

Check

last pass 30 h ago; [2026-11-12 08:20] pass 1/1 unreadable response / [2026-11-12 08:20] adjudicate adjudication unreadable

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)

Check

brief last written 21 h ago; last exit 1; log: API Error: Can't reach the API server — check your internet or DNS (ENOTFOUND)

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 19:10

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)

Check

last log write 2.4 h ago; launchd exits [1,6,6,6,1,0]; log: API Error: Can't reach the API server — check your internet or DNS (ENOTFOUND)

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 19:10

How to fix

team-dash/scripts/morning-brief.sh, two headless claude calls, now pinned to --model opus.

Headless claude (what every extractor job runs on)

OK

claude -p answered

24 h 98.1% · 7 d 96.2% · in this state since 13 Nov, 11:27

launchd registrations

OK

9 jobs loaded

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

Production data (Turso)

Turso production database

OK

reachable in 2206 ms; 3525 staged changes awaiting review

24 h 98.1% · 7 d 97.6% · in this state since 13 Nov, 11:27 · 2206 ms

Article ingest (Vercel cron, nightly)

Check

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

24 h 100.0% · 7 d 100.0% · in this state since 28 Oct, 06:08

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

7 inboxes, last scan -358 min ago

24 h 100.0% · 7 d 100.0% · in this state since 28 Oct, 06:08

Opportunity engine

Down

TypeError: fetch failed

24 h 98.0% · 7 d 99.5% · in this state since 13 Nov, 19:10

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

OK

last 24 h: 1 delivered, 0 failed of 1; last response: 200 {"received":true}

24 h 100.0% · 7 d 100.0% · in this state since 7 Nov, 09:40

Credits, keys and sessions

OpenRouter credit (web lookups, verification, chat)

Check

US$29.40 left; burning about US$2.22/day (about 13 days)

24 h 98.1% · 7 d 63.5% · in this state since 13 Nov, 19:10

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 4.4 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 engine14 Nov, 08:39openTypeError: fetch failed
Opportunity poll (every 15 min)14 Nov, 08:39openlast poll 14 h ago; email: 120 seen, 0 new, 75 updated, 43 already known, 0 dupes, 25 expi | sourcebottle: 358 seen, 0 new, 304 updated, 43
Media hub on Vercel (cron endpoint to Turso)14 Nov, 08:39openThis operation was aborted
OpenRouter credit (web lookups, verification, chat)13 Nov, 11:2713 Nov, 13:01fetch failed
Turso production database13 Nov, 11:2713 Nov, 13:01fetch failed
Headless claude (what every extractor job runs on)13 Nov, 11:2713 Nov, 13:01no answer: exit 143
Media Intel team page (Cloudflare)13 Nov, 11:2713 Nov, 13:01fetch failed
Media hub on Vercel (cron endpoint to Turso)13 Nov, 11:2713 Nov, 13:01fetch failed
Client portal (onboarding.launchlink.co)12 Nov, 09:3912 Nov, 10:11fetch failed
Turso production database12 Nov, 08:2312 Nov, 09:09fetch failed
Team dash (Cloudflare)12 Nov, 08:2312 Nov, 09:09fetch failed
Client portal (onboarding.launchlink.co)12 Nov, 08:2312 Nov, 09:09fetch failed
Team page functions (D1 notes and submissions)12 Nov, 08:2312 Nov, 09:09fetch failed
Media Intel team page (Cloudflare)12 Nov, 08:2312 Nov, 09:09fetch failed
Media hub on Vercel (cron endpoint to Turso)12 Nov, 08:2312 Nov, 09:09fetch failed
Headless claude (what every extractor job runs on)12 Nov, 04:4112 Nov, 08:23no answer: You've hit your session limit · resets 12:50pm (America/Los_Angeles)
Opportunity poll (every 15 min)12 Nov, 03:0312 Nov, 04:10last poll 2.9 h ago
Headless claude (what every extractor job runs on)11 Nov, 02:1911 Nov, 07:13no answer: You've hit your session limit · resets 9:10am (America/Los_Angeles)
OpenRouter credit (web lookups, verification, chat)10 Nov, 08:0212 Nov, 09:09US$8.08 left; burning about US$2.32/day (about 3 days)
OpenRouter credit (web lookups, verification, chat)10 Nov, 05:5710 Nov, 06:52fetch failed
Turso production database10 Nov, 05:5710 Nov, 06:52fetch failed
Team dash (Cloudflare)10 Nov, 05:5710 Nov, 06:52fetch failed
Client portal (onboarding.launchlink.co)10 Nov, 05:5710 Nov, 06:52fetch failed
Team page functions (D1 notes and submissions)10 Nov, 05:5710 Nov, 06:52fetch failed
Media Intel team page (Cloudflare)10 Nov, 05:5710 Nov, 06:52fetch failed

Automatic restarts (last 15)

ComponentWhenAction
Felicia's daily brief (6x/day)14 Nov, 09:44co.launchlink.personal-brief
Savings, events, trends + team page deploy (06:45 daily)14 Nov, 09:44co.launchlink.intel-stores
Gmail media intel (06:30 daily)14 Nov, 09:44co.launchlink.media-intel
Team dash refresh daemon14 Nov, 09:44com.launchlink.refresh-daemon
Opportunity poll (every 15 min)13 Nov, 11:35co.launchlink.opportunities
Daily brief action server (:3001)13 Nov, 11:35co.launchlink.action-server
Opportunity poll (every 15 min)12 Nov, 03:20co.launchlink.opportunities
Team dash refresh daemon12 Nov, 03:20com.launchlink.refresh-daemon
Savings, events, trends + team page deploy (06:45 daily)10 Nov, 12:45co.launchlink.intel-stores
Verification sweep (daily)10 Nov, 08:03co.launchlink.media-sweep
Team dash refresh daemon9 Nov, 04:07com.launchlink.refresh-daemon
Opportunity poll (every 15 min)8 Nov, 11:52co.launchlink.opportunities
Felicia's daily brief (6x/day)7 Nov, 01:57co.launchlink.personal-brief
Team dash morning brief (6x/day)6 Nov, 22:24co.launchlink.briefing.0900
Verification sweep (daily)6 Nov, 19:21co.launchlink.media-sweep