Needs attention

Sites

Media hub on Vercel (cron endpoint to Turso)

Down

fetch failed

24 h 97.7% · 7 d 98.0% · in this state since 13 Nov, 08:21 · 10558 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)

Down

fetch failed

24 h 97.7% · 7 d 98.0% · in this state since 13 Nov, 08:21 · 10503 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 100.0% · 7 d 98.5% · in this state since 12 Nov, 08:23 · 5109 ms

Client portal (onboarding.launchlink.co)

OK

HTTP 200 in 7101 ms

24 h 100.0% · 7 d 98.0% · in this state since 12 Nov, 09:39 · 7101 ms

Cycle engine (Railway)

Down

fetch failed

24 h 0.0% · 7 d 0.0% · in this state since monitoring began · 10502 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 5538 ms

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

Live processes on the Mac

WhatsApp bridge

OK

up; last message 0 min ago

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

Daily brief action server (:3001)

Check

not answering (dashboard buttons will not work)

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 08:21

How to fix

launchctl kickstart -k gui/$(id -u)/co.launchlink.action-server

Team dash refresh daemon

OK

last tick 1 min ago

24 h 100.0% · 7 d 99.5% · in this state since 12 Nov, 03:03

Scheduled jobs

Gmail media intel (06:30 daily)

OK

last intel file 9.5 h ago

24 h 100.0% · 7 d 100.0% · in this state since 9 Nov, 20:17

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

OK

last stores file 9.6 h ago

24 h 100.0% · 7 d 100.0% · in this state since 10 Nov, 12:44

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

OK

last run 9.2 h ago; digest sent

24 h 100.0% · 7 d 100.0% · in this state since 11 Nov, 20:58

Opportunity poll (every 15 min)

Check

last poll 1.9 h ago; [TypeError: fetch failed] {

24 h 100.0% · 7 d 98.5% · in this state since 13 Nov, 08:21

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)

Check

could not read GitHub runs: Get "https://api.github.com/repos/feliciacoco/media-hub/actions/workflows/poll-o

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 08:21

How to fix

gh run list --workflow=poll-opportunities.yml in media-hub. A failure with 401 = CRON_SECRET secret drifted from .deploy-secrets; 'disabled workflow' = GitHub switched it off after repeated failures or billing (gh workflow enable). The local launchd poll keeps the feed alive meanwhile.

GitHub Actions watchdog (backup, fires every few hours)

Check

could not read GitHub runs: Get "https://api.github.com/repos/feliciacoco/media-hub/actions/workflows/watchd

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 08:21

How to fix

gh run list --workflow=watchdog.yml in media-hub. It alerts by email if RESEND_API_KEY is a repo secret, otherwise by opening a GitHub issue.

Verification sweep (daily)

Check

last pass 8.1 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 3.4 h ago; last exit 1; log: API Error: Connection dropped (ECONNRESET)

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 08:21

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 8 min ago; launchd exits [0,0,0,0,1,0]; log: API Error: Connection dropped (ECONNRESET)

24 h 100.0% · 7 d 100.0% · in this state since 13 Nov, 08:21

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)

Down

no answer: exit 143

24 h 97.7% · 7 d 96.0% · in this state since 13 Nov, 08:21

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 100.0% · in this state since monitoring began

Production data (Turso)

Turso production database

Down

fetch failed

24 h 97.7% · 7 d 97.5% · in this state since 13 Nov, 08:21

How to fix

ENOTFOUND = DNS/network from this Mac. 401 = token rotated; refresh media-hub/.turso-env. Vercel keeps working on its own copy of the credentials.

Credits, keys and sessions

OpenRouter credit

Down

fetch failed

24 h 97.7% · 7 d 61.9% · in this state since 13 Nov, 08:21

Substack session (On Background, Get Featured)

OK

newest post pulled 3.5 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 credit13 Nov, 11:27openfetch failed
Turso production database13 Nov, 11:27openfetch failed
Headless claude (what every extractor job runs on)13 Nov, 11:27openno answer: exit 143
Media Intel team page (Cloudflare)13 Nov, 11:27openfetch failed
Media hub on Vercel (cron endpoint to Turso)13 Nov, 11:27openfetch 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 credit10 Nov, 08:0212 Nov, 09:09US$8.08 left; burning about US$2.32/day (about 3 days)
OpenRouter credit10 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
Media hub on Vercel (cron endpoint to Turso)10 Nov, 05:5710 Nov, 06:52This operation was aborted
OpenRouter credit9 Nov, 08:189 Nov, 08:51fetch failed
Turso production database9 Nov, 08:189 Nov, 08:51fetch failed

Automatic restarts (last 15)

ComponentWhenAction
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
Opportunity poll (every 15 min)6 Nov, 19:21co.launchlink.opportunities
Opportunity poll (every 15 min)6 Nov, 10:55co.launchlink.opportunities
Team dash morning brief (6x/day)6 Nov, 01:31co.launchlink.briefing.0900
Felicia's daily brief (6x/day)6 Nov, 01:31co.launchlink.personal-brief