presentations / morning-briefing
1 / 8
01 intro

daily morning briefing

system design — an agentic AI pipeline


Every morning at 7:00 AM, an automated pipeline:

  fetches real emails  →  pulls live AI news  →  reads reminders
         ↓
  GPT-4o generates a John Oliver-style monologue
         ↓
  OpenAI TTS converts it to audio  (fable voice)
         ↓
  published to blog  →  Vercel auto-deploys  →  live in <2 min
         ↓
  Kling v3 generates a video version (optional)
02 data sources

three inputs, zero manual work

  emails       AgentMail inbox  (supersalt6@agentmail.to)
               important emails forwarded here
               fetched via AgentMail SDK

  AI news      RSS feeds — parsed with feedparser
               · The Verge / AI
               · VentureBeat / AI
               · Hacker News (AI, 100+ points)

  reminders    Agent River tasks
               gym, appointments, one-off reminders
               set manually or via Agent River API
03 script generation

GPT-4o as a speechwriter

  model       gpt-4o
  prompt      John Oliver — Last Week Tonight style
  rules       · open with date observation
              · treat emails like geopolitical crises
              · mock AI news with genuine incredulity
              · end with exhausted pep talk
              · never mention DSA or interview prep
              · 150-200 words, punchy sentences
              · [PAUSE] markers for TTS pacing

  output      full script  +  clean TTS version
              (bracket markers stripped for audio)
04 audio pipeline

generate_audio.py → publish.py

  primary     OpenAI TTS
               model: tts-1-hd  |  voice: fable
               streams MP3 directly to file

  fallback    ElevenLabs REST API
               voice: Daniel (onwK4e9ZLuTAKqWW03F9)
               model: eleven_turbo_v2_5

  publish.py
    1. generate_audio()        → briefing_YYYY-MM-DD.mp3
    2. copy mp3 to blog        → public/audio/
    3. update briefings.json   → adds date, label, transcript
    4. git commit + push       → Vercel deploys automatically
05 blog

Astro + Vercel static site

  framework    Astro (static site generator)
  host         Vercel  (auto-deploy on push)

  briefings.json   src/data/briefings.json
    [
      {
        "date":       "2026-03-13",
        "label":      "Friday, March 13, 2026",
        "audio":      "/audio/briefing-2026-03-13.mp3",
        "transcript": "Good morning, Rahul..."
      }
    ]

  page         /projects/daily-media-update
               → audio player per entry
               → collapsible transcript
06 video pipeline

generate_video.py — Kling v3

  1. script    GPT-4o (tighter prompt — 120-150 words)
               SCENE_PREFIX prepended to each chunk
               "Late-night studio, British anchor..."

  2. split     split into 25-word chunks
               each chunk → 1 Kling clip
               word count → clip duration (5s or 10s)

  3. Kling     POST /v1/videos/text2video
               model_name: kling-v3
               mode: pro  |  sound: on  |  16:9

  4. concat    ffmpeg -f concat -c copy
               all clips → briefing_final_YYYY-MM-DD.mp4
07 scheduling

Agent River — 7AM daily cron

  Agent River  personal OpenClaw dashboard
               REST API at localhost:3999

  morning briefing task
    schedule:  0 7 * * *   (7am daily)
    type:      recurring
    command:   python3 .../morning-briefing/publish.py
    assignee:  main  (OpenClaw agent)

  other tasks
    gym session         0 7 10 * 1-5   (weekdays 7:10am)
    book flight         one-time  Mar 15 9am
    brother's birthday  one-time  Mar 16 10am
08 full stack

everything used to build this

AI / APIs
GPT-4o OpenAI TTS Kling v3 ElevenLabs AgentMail
data
RSS / feedparser AgentMail SDK Agent River API
infra / tooling
Python ffmpeg Astro Vercel Agent River git
pipeline files
generate_script.py generate_audio.py generate_video.py publish.py
← → arrow keys to navigate