Media hub (Vercel)
OKHTTP 308 in 1419 ms
HTTP 308 in 1419 ms
HTTP 308: Redirecting...
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.
HTTP 308
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.
up; page says "Updated 22 Sep 2026" (19 h ago)
HTTP 400 {"error":"opp required"}
HTTP 200 in 381 ms
up; 10,295 articles, 0 live cycles, 80/90 feeds healthy, llm api (gemini-flash-latest); disk 82% used (db 344 MB, 79 MB free)
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.
HTTP 200 in 277 ms
up; last message 9 min ago
answering (HTTP 404)
last tick 0 min ago
last poll finished 4 min ago
last intel file 12 h ago
last stores file 12 h ago
last run 11 h ago; digest FAILED; [2026-09-22 07:17:08] digest failed (continuing)
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
last poll 10 min ago; email: 130 seen, 0 new, 121 updated, 9 already known, 0 dupes, 23 expi | sourcebottle: 455 seen, 0 new, 396 updated, 59 already known, 0 dupes,
last run 33 min ago, success
last run 2.1 h ago, success
last pass 47 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
brief last written 1.4 h ago
last log write 1.3 h ago; launchd exits [0,0,0,6,0,0]
claude -p answered
9 jobs loaded
reachable in 1893 ms; 12,149 journalists; 2595 staged changes awaiting review
last feed run -47 min ago; 61/69 feeds healthy; failing: AdNews, Banking Day, Business News Australia, HR Leader, Information Age, InnovationAus, InvestorDaily, The New Daily
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.
6 inboxes, last scan -66 min ago
newest callout 1.1 h ago; 183 in last 24 h; email:haro 1.1 h ago, email:qwoted 41.7 days ago, sourcebottle 3.8 h ago
last 24 h: 1 delivered, 0 failed of 1; last response: 200 {"received":true}
US$16.67 left; burning about US$3.40/day (about 4 days)
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'.
newest post pulled 35 h ago
key present in media-hub/.env.local (delivery proven by the digest job above)
| Component | Started | Ended | What was seen |
|---|---|---|---|
| Turso production database | 23 Sept, 07:28 | 23 Sept, 07:39 | fetch failed |
| Turso production database | 23 Sept, 06:57 | 23 Sept, 07:08 | fetch failed |
| Turso production database | 23 Sept, 06:06 | 23 Sept, 06:16 | fetch failed |
| Turso production database | 22 Sept, 14:26 | 23 Sept, 04:08 | BLOCKED: 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:20 | open | HTTP 308: Redirecting... |
| Opportunity API (/api/mobile/v1/feed) | 22 Sept, 02:09 | open | HTTP 308 |
| Headless claude (what every extractor job runs on) | 21 Sept, 23:02 | 22 Sept, 01:38 | no answer: You've hit your session limit · resets 11:30am (America/New_York) |
| Opportunity poll (every 15 min) | 21 Sept, 15:06 | 21 Sept, 22:51 | last 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:06 | 21 Sept, 22:51 | last poll finished 4.9 h ago |
| Team dash refresh daemon | 21 Sept, 15:06 | 21 Sept, 22:40 | last tick 1.6 h ago |
| Opportunity engine (callouts arriving) | 21 Sept, 09:19 | 21 Sept, 09:51 | newest 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:19 | 21 Sept, 09:30 | last 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:45 | 21 Sept, 04:29 | brief 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:45 | 21 Sept, 04:29 | last poll finished 4.5 h ago |
| OpenRouter credit (web lookups, verification, chat) | 20 Sept, 17:35 | 21 Sept, 01:45 | This operation was aborted |
| Turso production database | 20 Sept, 17:35 | 21 Sept, 01:45 | fetch failed |
| Opportunity poll (every 15 min) | 20 Sept, 17:35 | 21 Sept, 04:29 | last 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:35 | 21 Sept, 01:45 | This operation was aborted |
| Headless claude (what every extractor job runs on) | 20 Sept, 10:11 | 20 Sept, 11:34 | no answer: You've hit your session limit · resets 9:30pm (America/New_York) |
| Opportunity poll (every 15 min) | 20 Sept, 09:11 | 20 Sept, 10:11 | last 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 daemon | 20 Sept, 09:11 | 20 Sept, 10:11 | last tick 1.0 h ago |
| Opportunity poll (every 15 min) | 20 Sept, 06:35 | 20 Sept, 07:24 | last 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:38 | 20 Sept, 06:35 | no answer: You've hit your weekly limit · resets 3pm (America/New_York) |
| Opportunity poll (every 15 min) | 19 Sept, 15:27 | 19 Sept, 23:13 | last 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:27 | 19 Sept, 21:38 | last poll finished 2.9 h ago |
| Component | When | Action |
|---|---|---|
| Opportunity poll (every 15 min) | 21 Sept, 15:06 | co.launchlink.opportunities |
| Team dash refresh daemon | 21 Sept, 15:06 | com.launchlink.refresh-daemon |
| Verification sweep (daily) | 21 Sept, 09:20 | co.launchlink.media-sweep |
| Team dash refresh daemon | 20 Sept, 19:21 | com.launchlink.refresh-daemon |
| Opportunity poll (every 15 min) | 20 Sept, 13:42 | co.launchlink.opportunities |
| Felicia's daily brief (6x/day) | 20 Sept, 12:38 | co.launchlink.personal-brief |
| Felicia's daily brief (6x/day) | 20 Sept, 06:36 | co.launchlink.personal-brief |
| Opportunity poll (every 15 min) | 19 Sept, 10:24 | co.launchlink.opportunities |
| Team dash refresh daemon | 19 Sept, 10:24 | com.launchlink.refresh-daemon |
| Daily brief action server (:3001) | 19 Sept, 06:20 | co.launchlink.action-server |
| Team dash refresh daemon | 18 Sept, 06:50 | com.launchlink.refresh-daemon |
| Opportunity poll (every 15 min) | 18 Sept, 02:27 | co.launchlink.opportunities |
| Savings, events, trends + team page deploy (06:45 daily) | 17 Sept, 13:06 | co.launchlink.intel-stores |
| Daily brief action server (:3001) | 17 Sept, 00:34 | co.launchlink.action-server |
| Team dash morning brief (6x/day) | 17 Sept, 00:18 | co.launchlink.briefing.0900 |