Needs attention

Sites

Media hub (Vercel)

OK

HTTP 307 in 6293 ms

24 h 66.7% · 7 d 70.6% · in this state since 16 Sept, 21:50 · 6293 ms

Media hub cron endpoint (Vercel to Turso)

OK

HTTP 200: {"ran":"2026-09-16T12:26:19.734Z","step":"ping"}

24 h 66.7% · 7 d 70.6% · in this state since 16 Sept, 21:50 · 14224 ms

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

OK

auth wall answering (HTTP 401) in 3216 ms

24 h 66.7% · 7 d 70.6% · in this state since 16 Sept, 21:50 · 3216 ms

Media Intel team page (Cloudflare)

Check

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

24 h 66.7% · 7 d 67.6% · in this state since 16 Sept, 21:50 · 12375 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 68.9% · 7 d 72.5% · in this state since 16 Sept, 20:30 · 2157 ms

Client portal (onboarding.launchlink.co)

OK

HTTP 200 in 6806 ms

24 h 68.9% · 7 d 72.5% · in this state since 16 Sept, 20:30 · 6806 ms

Cycle engine (Railway)

Down

HTTP 404: Application not found (no active deployment on Railway); volume 99% full

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

24 h 67.8% · 7 d 71.6% · in this state since 16 Sept, 21:50 · 3195 ms

Live processes on the Mac

WhatsApp bridge

OK

up; last message 4 min ago

24 h 76.7% · 7 d 79.4% · 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 monitoring began

Team dash refresh daemon

OK

last tick 1 min ago

24 h 98.9% · 7 d 99.0% · in this state since 16 Sept, 16:11

Scheduled jobs

Opportunity poll actually running (any clock)

OK

last poll finished 0 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 30 h ago; log: API Error: Unable to connect to API (ConnectionRefused)

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

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 38 h ago

24 h 100.0% · 7 d 98.0% · 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 15 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)

OK

last poll 22 min ago; email: 125 seen, 0 new, 113 updated, 12 already known, 0 dupes, 12 exp | sourcebottle: 219 seen, 0 new, 207 updated, 12 already known, 0 dupes,

24 h 97.8% · 7 d 98.0% · in this state since 16 Sept, 22:00

GitHub Actions opportunity poll (hourly, off the Mac)

Check

last run 2.6 h ago, success

24 h 100.0% · 7 d 100.0% · in this state since 16 Sept, 21:18

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 (checks this monitor every 30 min)

Down

last run 2.2 h ago, success

24 h 94.3% · 7 d 94.3% · in this state since 16 Sept, 22:06

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 1.8 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)

Check

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

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

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 29 h ago; launchd exits [6,6,6,6,6,6]

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

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 66.7% · 7 d 70.6% · in this state since 16 Sept, 21:01

launchd registrations

OK

9 jobs loaded

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

Production data (Turso)

Turso production database

OK

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

24 h 65.6% · 7 d 69.6% · in this state since 16 Sept, 21:50 · 14782 ms

Article ingest (Vercel cron, nightly)

Check

last feed run 18 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 18 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 2.6 h ago; 115 in last 24 h; email:haro 2.6 h ago, email:qwoted 35.2 days ago, sourcebottle 7.7 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 11.9% · 7 d 11.3% · 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 65.6% · 7 d 69.6% · in this state since 16 Sept, 21:50

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.0 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
GitHub Actions watchdog (checks this monitor every 30 min)16 Sept, 22:25openlast run 2.2 h ago, success
OpenRouter credit (web lookups, verification, chat)16 Sept, 21:5016 Sept, 22:00fetch failed
Turso production database16 Sept, 21:5016 Sept, 22:00fetch failed
Team dash (Cloudflare)16 Sept, 21:5016 Sept, 22:00fetch failed
Media Intel team page (Cloudflare)16 Sept, 21:5016 Sept, 22:00fetch failed
Opportunity API (/api/mobile/v1/feed)16 Sept, 21:5016 Sept, 22:00fetch failed
Media hub cron endpoint (Vercel to Turso)16 Sept, 21:5016 Sept, 22:00fetch failed
Media hub (Vercel)16 Sept, 21:5016 Sept, 22:00fetch failed
Cycle engine (Railway)16 Sept, 21:32openup; NaN articles, undefined live cycles, 0/0 feeds healthy, llm undefined
Media Intel team page (Cloudflare)16 Sept, 21:3216 Sept, 21:34fetch failed
Opportunity API (/api/mobile/v1/feed)16 Sept, 21:3216 Sept, 21:34fetch failed
Media hub cron endpoint (Vercel to Turso)16 Sept, 21:3216 Sept, 21:34fetch failed
OpenRouter credit (web lookups, verification, chat)16 Sept, 21:1816 Sept, 21:34fetch failed
Turso production database16 Sept, 21:1816 Sept, 21:34fetch failed
Media hub (Vercel)16 Sept, 21:1816 Sept, 21:32fetch failed
WhatsApp bridge16 Sept, 09:0916 Sept, 20:44process not running
Opportunity poll (every 15 min)16 Sept, 03:1416 Sept, 09:23last poll 5.8 h ago; [TypeError: fetch failed] {
Team dash refresh daemon16 Sept, 03:1416 Sept, 09:09last tick 1.0 h ago
OpenRouter credit (web lookups, verification, chat)15 Sept, 20:0216 Sept, 20:44fetch failed
Turso production database15 Sept, 20:0216 Sept, 20:44fetch failed
Headless claude (what every extractor job runs on)15 Sept, 20:0216 Sept, 21:18no answer: exit 143
Team dash (Cloudflare)15 Sept, 20:0216 Sept, 20:44fetch failed
Client portal (onboarding.launchlink.co)15 Sept, 20:0216 Sept, 20:44fetch failed
Team page functions (D1 notes and submissions)15 Sept, 20:0216 Sept, 20:44fetch failed
Media Intel team page (Cloudflare)15 Sept, 20:0216 Sept, 20:44fetch failed

Automatic restarts (last 15)

ComponentWhenAction
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