Media hub (Vercel)
OKHTTP 307 in 6293 ms
HTTP 307 in 6293 ms
HTTP 200: {"ran":"2026-09-16T12:26:19.734Z","step":"ping"}
auth wall answering (HTTP 401) in 3216 ms
up; page says "Updated 15 Sep 2026" (37 h ago)
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.
HTTP 400 {"error":"opp required"}
HTTP 200 in 6806 ms
HTTP 404: Application not found (no active deployment on Railway); volume 99% full
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 3195 ms
up; last message 4 min ago
answering (HTTP 404)
last tick 1 min ago
last poll finished 0 min ago
last intel file 30 h ago; log: API Error: Unable to connect to API (ConnectionRefused)
Runs media-db/media-intel.sh via headless claude. 'issue with the selected model' = the CLI cannot use the model; the script now pins --model opus. 'Unable to connect to API' = no network at run time. Re-run: bash media-db/media-intel.sh
last stores file 38 h ago
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
last run 15 h ago; digest FAILED; [2026-09-15 22:18:11] 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 22 min ago; email: 125 seen, 0 new, 113 updated, 12 already known, 0 dupes, 12 exp | sourcebottle: 219 seen, 0 new, 207 updated, 12 already known, 0 dupes,
last run 2.6 h ago, success
gh run list --workflow=poll-opportunities.yml in media-hub. A failure with 401 = CRON_SECRET secret drifted from .deploy-secrets; 'disabled workflow' = GitHub switched it off after repeated failures or billing (gh workflow enable). The local launchd poll keeps the feed alive meanwhile.
last run 2.2 h ago, success
gh run list --workflow=watchdog.yml in media-hub. It alerts by email if RESEND_API_KEY is a repo secret, otherwise by opening a GitHub issue.
last pass 1.8 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
'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.
brief last written 29 h ago; last exit 1; log: API Error: Unable to connect to API (ConnectionRefused)
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 29 h ago; launchd exits [6,6,6,6,6,6]
team-dash/scripts/morning-brief.sh, two headless claude calls, now pinned to --model opus.
claude -p answered
9 jobs loaded
reachable in 14782 ms; 12,148 journalists; 2433 staged changes awaiting review
last feed run 18 h ago; 60/69 feeds healthy; failing: AdNews, Banking Day, Business News Australia, HR Leader, Information Age, InnovationAus, InvestorDaily, The New Daily, ZDNet
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 18 h ago; needs attention: annmargaret@launchlink.co (needs_reauth)
needs_reauth = Google refresh token expired (invalid_grant). That person signs in to the hub and reconnects their inbox under Settings.
newest callout 2.6 h ago; 115 in last 24 h; email:haro 2.6 h ago, email:qwoted 35.2 days ago, sourcebottle 7.7 h ago
nothing sent in the last 24 h
US$16.65 left; burning about US$3.02/day (about 5 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 2.0 days ago
key present in media-hub/.env.local (delivery proven by the digest job above)
| Component | Started | Ended | What was seen |
|---|---|---|---|
| GitHub Actions watchdog (checks this monitor every 30 min) | 16 Sept, 22:25 | open | last run 2.2 h ago, success |
| OpenRouter credit (web lookups, verification, chat) | 16 Sept, 21:50 | 16 Sept, 22:00 | fetch failed |
| Turso production database | 16 Sept, 21:50 | 16 Sept, 22:00 | fetch failed |
| Team dash (Cloudflare) | 16 Sept, 21:50 | 16 Sept, 22:00 | fetch failed |
| Media Intel team page (Cloudflare) | 16 Sept, 21:50 | 16 Sept, 22:00 | fetch failed |
| Opportunity API (/api/mobile/v1/feed) | 16 Sept, 21:50 | 16 Sept, 22:00 | fetch failed |
| Media hub cron endpoint (Vercel to Turso) | 16 Sept, 21:50 | 16 Sept, 22:00 | fetch failed |
| Media hub (Vercel) | 16 Sept, 21:50 | 16 Sept, 22:00 | fetch failed |
| Cycle engine (Railway) | 16 Sept, 21:32 | open | up; NaN articles, undefined live cycles, 0/0 feeds healthy, llm undefined |
| Media Intel team page (Cloudflare) | 16 Sept, 21:32 | 16 Sept, 21:34 | fetch failed |
| Opportunity API (/api/mobile/v1/feed) | 16 Sept, 21:32 | 16 Sept, 21:34 | fetch failed |
| Media hub cron endpoint (Vercel to Turso) | 16 Sept, 21:32 | 16 Sept, 21:34 | fetch failed |
| OpenRouter credit (web lookups, verification, chat) | 16 Sept, 21:18 | 16 Sept, 21:34 | fetch failed |
| Turso production database | 16 Sept, 21:18 | 16 Sept, 21:34 | fetch failed |
| Media hub (Vercel) | 16 Sept, 21:18 | 16 Sept, 21:32 | fetch failed |
| WhatsApp bridge | 16 Sept, 09:09 | 16 Sept, 20:44 | process not running |
| Opportunity poll (every 15 min) | 16 Sept, 03:14 | 16 Sept, 09:23 | last poll 5.8 h ago; [TypeError: fetch failed] { |
| Team dash refresh daemon | 16 Sept, 03:14 | 16 Sept, 09:09 | last tick 1.0 h ago |
| OpenRouter credit (web lookups, verification, chat) | 15 Sept, 20:02 | 16 Sept, 20:44 | fetch failed |
| Turso production database | 15 Sept, 20:02 | 16 Sept, 20:44 | fetch failed |
| Headless claude (what every extractor job runs on) | 15 Sept, 20:02 | 16 Sept, 21:18 | no answer: exit 143 |
| Team dash (Cloudflare) | 15 Sept, 20:02 | 16 Sept, 20:44 | fetch failed |
| Client portal (onboarding.launchlink.co) | 15 Sept, 20:02 | 16 Sept, 20:44 | fetch failed |
| Team page functions (D1 notes and submissions) | 15 Sept, 20:02 | 16 Sept, 20:44 | fetch failed |
| Media Intel team page (Cloudflare) | 15 Sept, 20:02 | 16 Sept, 20:44 | fetch failed |
| Component | When | Action |
|---|---|---|
| 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 |
| Felicia's daily brief (6x/day) | 16 Sept, 09:11 | co.launchlink.personal-brief |
| Opportunity poll (every 15 min) | 16 Sept, 04:15 | co.launchlink.opportunities |
| Team dash refresh daemon | 16 Sept, 04:15 | com.launchlink.refresh-daemon |
| WhatsApp bridge | 16 Sept, 04:15 | com.launchlink.whatsapp-bridge |