Live · daily use since Oct 19, 2026 · AI

Morning market digest

A spoken market briefing that writes itself every morning. Claude writes it, a local model on my own GPU steps in if Claude can't, and I can ask follow-up questions out loud.

The briefing player mid-story: the headline, the spoken summary marked as being read, the in-depth text below it, and the Ask, Again, Play, Skip and Deeper controls
figure 01: the player mid-story, with the summary and the in-depth text on screen · live page, Oct 26 briefing
summary

01 / problem

I invest for the long term and buy big dips, so a ticker feed is noise. I wanted a few minutes each morning covering only what matters to that: a short watch list, market-stress signals and the news behind them, read to me while I get ready.

02 / approach

Each morning the workstation pulls news from free feeds and searches. Claude writes the briefing through my signed-in Claude plan, with no API key. Gemma 4 12B on an RTX 4080 at home writes it if Claude fails, and Kokoro reads it in a local voice. I picked the writer by running Claude, Gemma and gpt-oss on the same news pull.

03 / result

A briefing at 06:00 every weekday and Saturday since Oct 19, and I listen daily: 58 stories heard, 13 deeper dives and 7 spoken questions so far. Answers to a question start playing 3.4 to 6.2 seconds after I ask, down from about 10. A 533-check regression suite covers the page, the API and the writer.

architecture

phone → home server → workstation → Claude, Gemma, Kokoro

Phoneweb player, lock-screen controls, push-to-talk questions, speech-to-text on the device
Home serverpage and API in Docker, question queue, listening log; listen-only from outside, behind a sign-in
Workstation06:00 news pull and write, question worker (outgoing connections only), health check every 30 min
Claudewrites the briefing, answers questions, streamed
Gemma 4 12Bfallback writer, local on an RTX 4080 via Ollama
Kokorolocal text to speech, sentence by sentence
timeline, newest first
  1. Oct 26 Setup screen: every model, schedule and health check on one read-only page
  2. Oct 25 Answers streamed and recorded sentence by sentence: first audio in 3.4 to 6.2 s instead of about 10
  3. Oct 24 A freeze on the iPhone traced with a timeline logged from the phone for every question
  4. Oct 20 Ask about this: questions out loud, answered in the briefing's voice
  5. Oct 19 First scheduled briefing; interests, skip review and "already heard" filtering
  6. Oct 18 Listening from anywhere behind a sign-in; settings stay home-only
  7. Oct 17 Claude picked as the writer, Gemma as the automatic fallback, Kokoro as the voice
  8. Oct 16 Writer bake-off on the same pull: Claude about 90 s, Gemma 39 s, gpt-oss 191 s
gallery · live page
what i'd do differently
I'd test the voice features on the phone from the first day. The desktop test suite passed while asking a question froze on my iPhone, and the server and worker logs showed a finished answer every time. What found it was a timeline logged from the phone itself. I'd also stream the answer from the start: waiting for the whole answer before recording any of it cost several seconds on every question.