Needs attention

Sites

Media hub (Vercel)

Down

fetch failed

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

How to fix

Vercel deploy or DNS. Check vercel.com for the media-hub project; a new deploy mints a new URL, so the alias may need repointing.

Media hub cron endpoint (Vercel to Turso)

Down

fetch failed

24 h 68.6% · 7 d 71.9% · in this state since 17 Sept, 00:15 · 25 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

fetch failed

24 h 69.6% · 7 d 72.8% · in this state since 17 Sept, 00:15 · 6 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)

Down

fetch failed

24 h 68.6% · 7 d 69.3% · in this state since 17 Sept, 00:15 · 10010 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)

Down

fetch failed

24 h 71.6% · 7 d 74.6% · in this state since 17 Sept, 00:15 · 5 ms

How to fix

Pages Functions only deploy when wrangler runs from intel-suite/ (the dir with functions/). If this 404s, the last deploy ran from the wrong directory.

Client portal (onboarding.launchlink.co)

Down

fetch failed

24 h 70.6% · 7 d 73.7% · in this state since 17 Sept, 00:15 · 10011 ms

How to fix

Vercel project client-portal. Deploy command and secrets are in the client-portal memory note.

Cycle engine (Railway)

Down

fetch failed; volume 99% full

24 h 15.8% · 7 d 15.8% · in this state since 17 Sept, 00:02 · 10364 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 4634 ms

24 h 70.6% · 7 d 73.7% · in this state since 17 Sept, 00:15 · 4634 ms

Live processes on the Mac

WhatsApp bridge

OK

up; last message 17 min ago

24 h 79.4% · 7 d 81.6% · in this state since 16 Sept, 20:30

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 17 Sept, 00:15

How to fix

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

Team dash refresh daemon

OK

last tick 3 min ago

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

Scheduled jobs

Gmail media intel (06:30 daily)

OK

last intel file 1.5 h ago

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

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

Check

last stores file 40 h ago

24 h 100.0% · 7 d 98.2% · 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 17 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 2 min ago; [TypeError: fetch failed] {

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

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

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

GitHub Actions watchdog (backup, fires every few hours)

OK

last run 4.4 h ago, success

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

Verification sweep (daily)

Check

last pass 3.9 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 31 h ago; last exit 1; log: API Error: Unable to connect to API (ConnectionRefused)

24 h 91.2% · 7 d 92.1% · 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 10 min ago; launchd exits [6,1,6,6,6,6]

24 h 92.2% · 7 d 93.0% · 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 69.6% · 7 d 72.8% · 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.1% · in this state since 15 Sept, 08:05

Production data (Turso)

Turso production database

Down

fetch failed

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

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 67.6% · 7 d 71.1% · in this state since 17 Sept, 00:15

Substack session (On Background, Get Featured)

OK

newest post pulled 2.1 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 credit17 Sept, 00:32openfetch failed
Turso production database17 Sept, 00:32openfetch 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:32openfetch failed
Team page functions (D1 notes and submissions)17 Sept, 00:32openfetch failed
Media Intel team page (Cloudflare)17 Sept, 00:32openfetch failed
Opportunity API (/api/mobile/v1/feed)17 Sept, 00:32openfetch failed
Media hub cron endpoint (Vercel to Turso)17 Sept, 00:32openfetch failed
Media hub (Vercel)17 Sept, 00:32openfetch failed
Team dash (Cloudflare)17 Sept, 00:1517 Sept, 00:32fetch failed
Cycle engine (Railway)17 Sept, 00:15openfetch 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 credit16 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 credit16 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