Media hub (Vercel)
OKHTTP 307 in 1300 ms
HTTP 307 in 1300 ms
HTTP 200: {"ran":"2026-09-19T05:27:25.461Z","step":"ping"}
auth wall answering (HTTP 401) in 93 ms
up; page says "Updated 19 Sep 2026" (1.5 h ago)
HTTP 400 {"error":"opp required"}
HTTP 200 in 285 ms
up; 17,971 articles, 237 live cycles, 80/90 feeds healthy, llm api (gemini-flash-latest); disk 61% used (db 254 MB, 170 MB free)
HTTP 200 in 158 ms
up; last message 1.4 h ago
answering (HTTP 404)
last tick 15 min ago
last poll finished 2.9 h ago
Three clocks kick the Vercel poll: Cloudflare Worker media-cron every 15 min (primary), GitHub Actions hourly (fires every few hours in practice), launchd on the Mac every 15 min (backup). All three quiet = Vercel poll route or CRON_SECRET broke: curl it by hand with the Bearer secret.
last intel file 8.5 h ago
last stores file 8.6 h ago
last run 8.2 h ago; digest FAILED; [2026-09-18 17:23:17] 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 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 already known, 0 dupes,; error: email:haro/1a0b01fd1fa63b3f#17: fetch failed
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.
last run 5.3 h ago, success
last run 3.2 h ago, success
last pass 8.6 h ago; [2026-09-18 16:49] pass 1/1 checked 375 · confirmed 42 · staged 9 · 74% verified · 2743 left / [2026-09-18 16:49] adjudicate settled 4 ·
brief last written 2.3 h ago; last exit 1; log: API Error: The socket connection was closed unexpectedly. For more information, pass `verbose: true` in the second argument to fetch()
refresh.sh needs --permission-mode acceptEdits and current MCP tool names; a stale file with no error usually means the final Write was denied.
last log write 0 min ago; launchd exits [0,1,0,1,1,0]; log: API Error: The socket connection was closed unexpectedly. For more information, pass `verbose: true` in the second argument to fetch()
team-dash/scripts/morning-brief.sh, two headless claude calls, now pinned to --model opus.
claude -p answered
9 jobs loaded
reachable in 1865 ms; 12,148 journalists; 2548 staged changes awaiting review
last feed run 6.3 h 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 5.8 h ago
newest callout 7.9 h ago; 51 in last 24 h; email:haro 7.9 h ago, email:qwoted 38.0 days ago, sourcebottle 25 h ago
last 24 h: 2 delivered, 0 failed of 3; last response: 200 {"received":true}
US$8.16 left; burning about US$2.99/day (about 2 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 4.8 days ago
key present in media-hub/.env.local (delivery proven by the digest job above)
| Component | Started | Ended | What was seen |
|---|---|---|---|
| Opportunity poll (every 15 min) | 19 Sept, 15:27 | open | 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 | open | last poll finished 2.9 h ago |
| Opportunity poll (every 15 min) | 19 Sept, 10:23 | 19 Sept, 12:15 | last 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:53 | open | US$8.23 left; burning about US$4.31/day (about 1 days) |
| Client portal (onboarding.launchlink.co) | 19 Sept, 06:31 | 19 Sept, 06:43 | fetch failed |
| Turso production database | 19 Sept, 06:19 | 19 Sept, 06:31 | fetch failed |
| OpenRouter credit (web lookups, verification, chat) | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| Turso production database | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| Team dash (Cloudflare) | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| Cycle engine (Railway) | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| Client portal (onboarding.launchlink.co) | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| Team page functions (D1 notes and submissions) | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| Media Intel team page (Cloudflare) | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| Opportunity API (/api/mobile/v1/feed) | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| Media hub cron endpoint (Vercel to Turso) | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| Media hub (Vercel) | 19 Sept, 05:58 | 19 Sept, 06:08 | fetch failed |
| OpenRouter credit (web lookups, verification, chat) | 18 Sept, 13:00 | 18 Sept, 13:12 | fetch failed |
| Turso production database | 18 Sept, 13:00 | 18 Sept, 13:12 | fetch failed |
| Media Intel team page (Cloudflare) | 18 Sept, 13:00 | 18 Sept, 13:12 | fetch failed |
| Opportunity API (/api/mobile/v1/feed) | 18 Sept, 13:00 | 18 Sept, 13:12 | fetch failed |
| Media hub cron endpoint (Vercel to Turso) | 18 Sept, 13:00 | 18 Sept, 13:12 | fetch failed |
| Media hub (Vercel) | 18 Sept, 13:00 | 18 Sept, 13:12 | fetch failed |
| Headless claude (what every extractor job runs on) | 18 Sept, 09:08 | 18 Sept, 09:29 | no answer: You've hit your session limit · resets 7:20pm (America/New_York) |
| Turso production database | 18 Sept, 03:57 | 18 Sept, 04:18 | fetch failed |
| Cycle engine (Railway) | 18 Sept, 03:57 | 18 Sept, 04:18 | fetch failed; volume 46% full |
| Component | When | Action |
|---|---|---|
| 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 |
| Gmail media intel (06:30 daily) | 16 Sept, 22:27 | co.launchlink.media-intel |
| Verification sweep (daily) | 16 Sept, 20:34 | co.launchlink.media-sweep |
| Felicia's daily brief (6x/day) | 16 Sept, 16:14 | co.launchlink.personal-brief |
| Opportunity poll (every 15 min) | 16 Sept, 16:14 | co.launchlink.opportunities |
| Team dash refresh daemon | 16 Sept, 16:14 | com.launchlink.refresh-daemon |
| WhatsApp bridge | 16 Sept, 16:14 | com.launchlink.whatsapp-bridge |
| Savings, events, trends + team page deploy (06:45 daily) | 16 Sept, 14:22 | co.launchlink.intel-stores |