Needs attention

Sites

Media hub (Vercel)

OK

HTTP 308 in 843 ms

24 h 99.4% · 7 d 95.1% · in this state since 24 Sept, 01:30 · 843 ms

Media hub cron endpoint (Vercel to Turso)

Down

HTTP 308: Redirecting...

24 h 0.0% · 7 d 58.9% · in this state since 22 Sept, 02:09 · 317 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 0.0% · 7 d 58.9% · in this state since 22 Sept, 01:59 · 96 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 24 Sep 2026" (-576 min ago)

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

Team page functions (D1 notes and submissions)

OK

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

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

Client portal (onboarding.launchlink.co)

OK

HTTP 200 in 340 ms

24 h 99.4% · 7 d 95.7% · in this state since 24 Sept, 01:30 · 340 ms

Cycle engine (Railway)

Check

up; 8,137 articles, 0 live cycles, 80/90 feeds healthy, llm api (gemini-flash-latest); disk 82% used (db 344 MB, 79 MB free)

24 h 98.8% · 7 d 96.1% · in this state since 24 Sept, 01:40 · 333 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 218 ms

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

Live processes on the Mac

WhatsApp bridge

OK

up; last message 0 min ago

24 h 100.0% · 7 d 96.9% · 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 99.4% · 7 d 99.5% · in this state since 23 Sept, 23:15

Scheduled jobs

Opportunity poll actually running (any clock)

OK

last poll finished 2 min ago

24 h 100.0% · 7 d 99.1% · in this state since 23 Sept, 23:15

Gmail media intel (06:30 daily)

OK

last intel file 48 min ago

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

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

OK

last stores file 55 min ago

24 h 100.0% · 7 d 87.0% · in this state since 24 Sept, 02:53

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

OK

last run 7.1 h ago; digest sent; [2026-09-23 09:05:26] linkedin enrich failed (continuing)

24 h 100.0% · 7 d 100.0% · in this state since 23 Sept, 14:35

Opportunity poll (every 15 min)

OK

last poll 3 min ago; email: 132 seen, 0 new, 109 updated, 23 already known, 0 dupes, 17 exp

24 h 99.4% · 7 d 97.6% · in this state since 24 Sept, 03:32

GitHub Actions opportunity poll (backup clock)

OK

last run 1.6 h ago, success

24 h 100.0% · 7 d 98.9% · in this state since 24 Sept, 01:40

GitHub Actions watchdog (backup, fires every few hours)

OK

last run 49 min ago, success

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

Verification sweep (daily)

Check

last pass 17 h ago; [2026-09-22 21:36] pass 1/1 unreadable response / [2026-09-22 21:36] adjudicate adjudication unreadable

24 h 100.0% · 7 d 100.0% · in this state since 23 Sept, 11:26

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)

OK

brief last written 53 min ago

24 h 100.0% · 7 d 96.4% · in this state since 23 Sept, 23:36

Team dash morning brief (6x/day)

OK

last log write 43 min ago; launchd exits [0,0,0,0,0,0]

24 h 100.0% · 7 d 98.6% · in this state since 23 Sept, 23:15

Headless claude (what every extractor job runs on)

OK

claude -p answered

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

launchd registrations

OK

9 jobs loaded

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

Production data (Turso)

Turso production database

OK

reachable in 1908 ms; 12,150 journalists; 2595 staged changes awaiting review

24 h 61.6% · 7 d 83.2% · in this state since 24 Sept, 01:40 · 1908 ms

Article ingest (Vercel cron, nightly)

Check

last feed run 19 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 19 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 2.2 h ago; 149 in last 24 h; email:haro 2.2 h ago, email:qwoted 42.5 days ago, sourcebottle 14 h ago

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

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

Credits, keys and sessions

OpenRouter credit (web lookups, verification, chat)

Check

US$16.60 left; burning about US$3.26/day (about 5 days)

24 h 100.0% · 7 d 94.2% · 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 2.3 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
Turso production database24 Sept, 01:3024 Sept, 01:50fetch failed
Cycle engine (Railway)24 Sept, 01:3024 Sept, 01:50fetch failed; volume 82% full
Client portal (onboarding.launchlink.co)24 Sept, 01:3024 Sept, 01:40fetch failed
Media hub (Vercel)24 Sept, 01:3024 Sept, 01:40fetch failed
Opportunity poll (every 15 min)23 Sept, 23:2523 Sept, 23:36last poll 2.1 h ago; sourcebottle: 465 seen, 0 new, 406 updated, 59 already known, 0 dupes,
Team dash refresh daemon23 Sept, 23:1523 Sept, 23:25last tick 1.4 h ago
Turso production database23 Sept, 07:2823 Sept, 07:39fetch failed
Turso production database23 Sept, 06:5723 Sept, 07:08fetch failed
Turso production database23 Sept, 06:0623 Sept, 06:16fetch failed
Turso production database22 Sept, 14:2623 Sept, 04:08BLOCKED: Operation was blocked: SQL read operations are forbidden (reads are blocked, do you need to upgrade your plan?)
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)

Automatic restarts (last 15)

ComponentWhenAction
Savings, events, trends + team page deploy (06:45 daily)24 Sept, 02:53co.launchlink.intel-stores
Team dash morning brief (6x/day)23 Sept, 23:15co.launchlink.briefing.0900
Felicia's daily brief (6x/day)23 Sept, 23:15co.launchlink.personal-brief
Opportunity poll (every 15 min)23 Sept, 23:15co.launchlink.opportunities
Team dash refresh daemon23 Sept, 23:15com.launchlink.refresh-daemon
Verification sweep (daily)23 Sept, 11:36co.launchlink.media-sweep
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