Needs attention

Sites

Media hub (Vercel)

OK

HTTP 308 in 1467 ms

24 h 97.5% · 7 d 91.4% · in this state since 20 Sept, 17:35 · 1467 ms

Media hub cron endpoint (Vercel to Turso)

Down

HTTP 308: Redirecting...

24 h 92.5% · 7 d 90.9% · in this state since 22 Sept, 02:09 · 235 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 90.0% · 7 d 90.9% · in this state since 22 Sept, 01:59 · 92 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)

OK

up; page says "Updated 21 Sep 2026" (13 h ago)

24 h 100.0% · 7 d 91.4% · in this state since 19 Sept, 05:58 · 362 ms

Team page functions (D1 notes and submissions)

OK

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

24 h 100.0% · 7 d 93.0% · in this state since 19 Sept, 05:58 · 56 ms

Client portal (onboarding.launchlink.co)

OK

HTTP 200 in 474 ms

24 h 100.0% · 7 d 92.1% · in this state since 19 Sept, 06:31 · 474 ms

Cycle engine (Railway)

Check

up; 27,136 articles, 430 live cycles, 80/90 feeds healthy, llm api (gemini-flash-latest); disk 76% used (db 320 MB, 104 MB free)

24 h 100.0% · 7 d 94.3% · in this state since 22 Sept, 01:59 · 317 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 167 ms

24 h 100.0% · 7 d 92.8% · in this state since 19 Sept, 05:58 · 167 ms

Live processes on the Mac

WhatsApp bridge

OK

up; last message 13 min ago

24 h 100.0% · 7 d 95.1% · 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 19 Sept, 06:19

Team dash refresh daemon

OK

last tick 1 min ago

24 h 97.5% · 7 d 99.3% · in this state since 21 Sept, 15:06

Scheduled jobs

Opportunity poll actually running (any clock)

OK

last poll finished 3 min ago

24 h 92.3% · 7 d 98.7% · in this state since 21 Sept, 22:40

Gmail media intel (06:30 daily)

OK

last intel file 3.8 h ago

24 h 100.0% · 7 d 99.5% · in this state since 21 Sept, 22:40

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

OK

last stores file 4.0 h ago

24 h 100.0% · 7 d 82.7% · in this state since 18 Sept, 06:50

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

Check

last run 5.3 h ago; digest FAILED; [2026-09-21 08:13:25] digest failed (continuing)

24 h 100.0% · 7 d 100.0% · in this state since 21 Sept, 01:45

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 4 min ago; email: 40 seen, 0 new, 39 updated, 1 already known, 0 dupes, 2 expired

24 h 87.5% · 7 d 96.7% · in this state since 22 Sept, 00:14

GitHub Actions opportunity poll (backup clock)

OK

last run 2.8 h ago, success

24 h 100.0% · 7 d 98.4% · in this state since 21 Sept, 23:54

GitHub Actions watchdog (backup, fires every few hours)

OK

last run 5.8 h ago, success

24 h 100.0% · 7 d 97.9% · in this state since 19 Sept, 05:58

Verification sweep (daily)

OK

last pass 17 h ago; [2026-09-20 19:28] pass 2/2 checked 602 · confirmed 160 · staged 13 · 82% verified · 1939 left / [2026-09-20 19:29] adjudicate settled 8

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

Felicia's daily brief (6x/day)

OK

brief last written 3.7 h ago; last exit 1

24 h 97.5% · 7 d 95.3% · in this state since 21 Sept, 09:19

Team dash morning brief (6x/day)

OK

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

24 h 100.0% · 7 d 98.1% · in this state since 20 Sept, 09:11

Headless claude (what every extractor job runs on)

OK

claude -p answered

24 h 55.0% · 7 d 81.5% · in this state since 22 Sept, 01:28

launchd registrations

OK

9 jobs loaded

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

Production data (Turso)

Turso production database

OK

reachable in 1942 ms; 12,148 journalists; 2592 staged changes awaiting review

24 h 97.5% · 7 d 90.4% · in this state since 20 Sept, 17:35 · 1942 ms

Article ingest (Vercel cron, nightly)

Check

last feed run 18 h ago; 61/69 feeds healthy; failing: AdNews, Banking Day, Business News Australia, HR Leader, Information Age, InnovationAus, InvestorDaily, 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 17 h ago

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

Opportunity engine (callouts arriving)

OK

newest callout 25 min ago; 75 in last 24 h; email:haro 25 min ago, email:qwoted 40.4 days ago, sourcebottle 10 h ago

24 h 92.3% · 7 d 99.2% · in this state since 21 Sept, 09:40

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

OK

nothing sent in the last 24 h

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

Credits, keys and sessions

OpenRouter credit (web lookups, verification, chat)

Check

US$20.96 left; burning about US$3.36/day (about 6 days)

24 h 97.5% · 7 d 90.0% · in this state since 21 Sept, 04: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 5.5 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
Media hub cron endpoint (Vercel to Turso)22 Sept, 02:20openHTTP 308: Redirecting...
Opportunity API (/api/mobile/v1/feed)22 Sept, 02:09openHTTP 308
Headless claude (what every extractor job runs on)21 Sept, 23:0222 Sept, 01:38no answer: You've hit your session limit · resets 11:30am (America/New_York)
Opportunity poll (every 15 min)21 Sept, 15:0621 Sept, 22:51last poll 5.3 h ago; email: 0 seen, 0 new, 0 updated, 0 already known, 0 dupes, 0 expired ( | sourcebottle: 257 seen, 4 new, 226 updated, 27
Opportunity poll actually running (any clock)21 Sept, 15:0621 Sept, 22:51last poll finished 4.9 h ago
Team dash refresh daemon21 Sept, 15:0621 Sept, 22:40last tick 1.6 h ago
Opportunity engine (callouts arriving)21 Sept, 09:1921 Sept, 09:51newest callout 2.1 days ago; 0 in last 24 h; email:haro 2.1 days ago, email:qwoted 39.7 days ago, sourcebottle 2.8 days ago
Opportunity poll (every 15 min)21 Sept, 09:1921 Sept, 09:30last poll 5.0 h ago; email: 20 seen, 0 new, 14 updated, 6 already known, 0 dupes, 9 expired; [TypeError: fetch failed] {
Felicia's daily brief (6x/day)21 Sept, 01:4521 Sept, 04:29brief last written 37 h ago; last exit 1; log: API Error: The socket connection was closed unexpectedly. For more information, pass `verbose
Opportunity poll actually running (any clock)21 Sept, 01:4521 Sept, 04:29last poll finished 4.5 h ago
OpenRouter credit (web lookups, verification, chat)20 Sept, 17:3521 Sept, 01:45This operation was aborted
Turso production database20 Sept, 17:3521 Sept, 01:45fetch failed
Opportunity poll (every 15 min)20 Sept, 17:3521 Sept, 04:29last poll 3.2 h ago; email: 63 seen, 0 new, 32 updated, 31 already known, 0 dupes, 21 expir
Media hub (Vercel)20 Sept, 17:3521 Sept, 01:45This operation was aborted
Headless claude (what every extractor job runs on)20 Sept, 10:1120 Sept, 11:34no answer: You've hit your session limit · resets 9:30pm (America/New_York)
Opportunity poll (every 15 min)20 Sept, 09:1120 Sept, 10:11last poll 2.0 h ago; sourcebottle: 0 seen, 0 new, 0 updated, 0 already known, 0 dupes, 0 ex; note: all industries failed: iid 61: 500 Intern
Team dash refresh daemon20 Sept, 09:1120 Sept, 10:11last tick 1.0 h ago
Opportunity poll (every 15 min)20 Sept, 06:3520 Sept, 07:24last poll 3.4 h ago; email: 84 seen, 0 new, 44 updated, 39 already known, 0 dupes, 32 expir | sourcebottle: 216 seen, 0 new, 203 updated, 12
Headless claude (what every extractor job runs on)19 Sept, 21:3820 Sept, 06:35no answer: You've hit your weekly limit · resets 3pm (America/New_York)
Opportunity poll (every 15 min)19 Sept, 15:2719 Sept, 23:13last poll 5.1 h ago; email: 124 seen, 0 new, 66 updated, 57 already known, 0 dupes, 39 expi | sourcebottle: 430 seen, 0 new, 369 updated, 57
Opportunity poll actually running (any clock)19 Sept, 15:2719 Sept, 21:38last poll finished 2.9 h ago
Opportunity poll (every 15 min)19 Sept, 10:2319 Sept, 12:15last poll 2.8 h ago; email: 124 seen, 14 new, 53 updated, 56 already known, 8 dupes, 36 exp | sourcebottle: 408 seen, 0 new, 344 updated, 56
OpenRouter credit (web lookups, verification, chat)19 Sept, 06:5319 Sept, 22:38US$8.23 left; burning about US$4.31/day (about 1 days)
Client portal (onboarding.launchlink.co)19 Sept, 06:3119 Sept, 06:43fetch failed
Turso production database19 Sept, 06:1919 Sept, 06:31fetch failed

Automatic restarts (last 15)

ComponentWhenAction
Opportunity poll (every 15 min)21 Sept, 15:06co.launchlink.opportunities
Team dash refresh daemon21 Sept, 15:06com.launchlink.refresh-daemon
Verification sweep (daily)21 Sept, 09:20co.launchlink.media-sweep
Team dash refresh daemon20 Sept, 19:21com.launchlink.refresh-daemon
Opportunity poll (every 15 min)20 Sept, 13:42co.launchlink.opportunities
Felicia's daily brief (6x/day)20 Sept, 12:38co.launchlink.personal-brief
Felicia's daily brief (6x/day)20 Sept, 06:36co.launchlink.personal-brief
Opportunity poll (every 15 min)19 Sept, 10:24co.launchlink.opportunities
Team dash refresh daemon19 Sept, 10:24com.launchlink.refresh-daemon
Daily brief action server (:3001)19 Sept, 06:20co.launchlink.action-server
Team dash refresh daemon18 Sept, 06:50com.launchlink.refresh-daemon
Opportunity poll (every 15 min)18 Sept, 02:27co.launchlink.opportunities
Savings, events, trends + team page deploy (06:45 daily)17 Sept, 13:06co.launchlink.intel-stores
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