Upgraded Callie from a flat TTS reader to something that actually sounds like a briefing. Overhauled journal infrastructure. Then scaffolded 9 new “Build Your Own X” systems projects — debugger, shell, text editor, graphics renderer, key-value store, query language, search engine, static analyzer, and container runtime. Also shipped Bread’s Vercel fix and set up daily auto-updates for all dev tools.

Day 2: Callie + 9 New Projects 2026-02-10 — Voice, Infrastructure, Systems Programming Callie Neural Voice + SSML Polly.Joanna-Neural Stocks + Say Command Yahoo Finance (parallel) AMD + 9am Scheduler Voicemail detect + launchd Build Your Own X — 9 New Projects Shell C — fork/exec/pipes Debugger C+Python — ptrace Text Editor Python — curses Static Analyzer Python — AST linting KV Store Rust — Bitcask-style Graphics Renderer Rust — ray tracer Query Language Rust — SQL for CSV Search Engine TF-IDF index Container Rust — namespaces Infrastructure Journal: Dark + Tags Bread: Vercel Fix OpenClaw: Config Fix Daily Auto-Updates Basic DONE Briefing DONE Voice DONE Interactive NEXT Existing Systems Projects nullC (compiler) · nuLLM (LLM) · JoshLang (language) · NullOS (kernel) · Shannon (pentester) Day 2 Stats: 9 new repos · 14 repos touched · Callie v0.3.1 · Journal v2 · Bread deployed · Auto-updates configured

Callie v0.3.1

Hotfix release. Three things:

TwiML fix. The <speak> SSML wrapper inside <Say> was causing Twilio to return “application error” when reading arbitrary text (discovered while trying to call with song lyrics). Dropped <speak> entirely — plain <Say voice="Polly...">text</Say> with inline SSML tags works perfectly. Logged TwiML output for debugging future issues.

say command. New command: node index.js say "any text here". Uses the same caller infrastructure but with arbitrary text instead of a briefing. No more one-off scripts for lyrics calls or reminders.

Voice config. Added VOICE env var support (default: Polly.Joanna-Neural). Switch voices with VOICE=Polly.Matthew-Neural (US male) or VOICE=Polly.Amy-Neural (UK). No code changes needed, just set the env var.

Callie v0.3.0

Three changes, all quality-of-life:

Neural voice + SSML. Switched to Polly.Joanna-Neural with SSML markup — <break> pauses between sections and <emphasis> on headers. The difference is night and day. It actually breathes between topics now instead of steamrolling through weather-calendar-news in one monotone run.

Stocks. Added a Markets section - AAPL, NVDA, TSLA, MSFT, GOOGL fetched from Yahoo Finance in parallel. Format: “Apple up 2.1%, Nvidia down 0.8%.” Briefing order is now: weather, calendar, reminders, markets, news.

Voicemail detection. Twilio’s Answering Machine Detection (machineDetection: 'Enable'). If it hits voicemail, it knows. Status callbacks wired up too (optional, needs a webhook URL).

Also trimmed headlines from 10 to 5. Ten headlines over the phone is brutal. Five is the right number.

Scheduler

Set up a launchd agent so Callie calls every morning at 9 AM automatically. No need to keep a terminal open — macOS handles it natively. Plist lives at ~/Library/LaunchAgents/com.nulljosh.callie.plist, logs to /tmp/callie.log.

Build Your Own X — 9 New Projects

Started scaffolding a set of systems programming projects. Each one is a “build it from scratch to understand how it works” exercise. All pushed to GitHub with READMEs and starter code.

C / Python:

  • shell — Unix shell from scratch. Fork/exec, pipes, redirects, built-ins, job control.
  • debugger — Process debugger using ptrace/Mach APIs. Breakpoints, single-step, register inspection.
  • text-editor — Terminal text editor with curses. Gap buffer, search/replace, undo/redo.
  • static-analyzer — Python linter using AST analysis. Unused vars, unreachable code, type inference.
  • search-engine — Text search with inverted index and TF-IDF ranking.

Rust:

  • key-value-store — Persistent KV database inspired by Bitcask/RocksDB. Log-structured storage with compaction.
  • graphics-renderer — Ray tracer / software rasterizer. Phong lighting, shadows, reflections.
  • query-language — SQL-like query engine for CSV/JSON. Lexer, parser, AST, executor with REPL.
  • container-runtime — Minimal Linux container runtime. Namespaces, cgroups, filesystem isolation.

These join the existing systems lineup: nullC (compiler), nuLLM (LLM), JoshLang (language), NullOS (kernel), Shannon (pentester). That’s 14 low-level projects now.

Journal Infrastructure

Spent the morning improving the journal itself. Four upgrades:

Dark mode. Full dark mode support using CSS media queries. Automatically detects system preference — links, headings, code blocks, tables all respond to prefers-color-scheme: dark. No toggle needed, it just works. Also improved typography: better line heights, responsive font sizes, visual hierarchy.

Archive page. Created /archive/ to browse posts by year and month. Organized chronologically with grouped sections.

Tags page. Added /tags/ for topic-based browsing. Posts can have multiple categories, and the tags page groups them with post counts.

Navigation. Updated _config.yml to add Archive and Tags to the header nav. First-class citizens now, not hidden footnotes.

Other Shipped

  • Bread — Fixed test imports breaking Vercel deploy. Moved tests from api/ to tests/api/, added .vercelignore. Pushed and deployed.
  • OpenClaw — Fixed config crash (invalid routing key), restarted gateway.
  • Daily auto-updates — Set up launchd plist that runs at 8am every morning: brew update/upgrade, npm upgrade -g, claude update, openclaw update, gem update, plus brew doctor and claude doctor diagnostics. Logs to ~/.local/logs/morning-update.log.
  • Arby — Updated README and index with authorized user pitch + credit arbitrage section.

Research: Callie Phase 5

Looked into what interactive Twilio + AI calls look like. Found Twilio’s ConversationRelay - it’s their first-party solution for streaming AI voice conversations. They have Node.js demos with Claude specifically. That’s the path when Callie graduates from one-way briefings to actual conversations.

Key repos bookmarked: cr-anthropic-demo, twilio-agentic-voice-assistant, call-gpt.

Next

  • Monitor Callie calls for a few days, tune SSML timing
  • nullC parser work
  • Start implementing one of the Build Your Own X projects
  • Test journal dark mode and responsive design

Survival Mode: Tweet to Production in 30 Minutes

Evening project. Saw a tweet about an autonomous prediction market trading agent. Implemented it in Bread in one shot.

Tweet concept:

  • $50 starting balance
  • Trade Polymarket/Kalshi with Kelly criterion
  • Survival dashboard (runway days, win rate, P&L)
  • Edge detection algorithm

What I built:

  • SurvivalMode.jsx component (300 lines)
  • Kelly criterion calculator (fractional 25%, cap at 10%)
  • Edge detector (finds markets >90% probability)
  • Real-time dashboard matching tweet aesthetic
  • Activity log stream
  • Auto-trader (scans every 10s)

Integration:

  • Reused existing Polymarket hook from Bread
  • Added mode switcher in App header
  • Simulated trades for demo (50% win rate)

Tech:

  • React hooks for state management
  • Kelly formula: f = (bp - q) / b where b=odds, p=prob, q=1-p
  • Edge detection: market prob - 50% baseline
  • Auto-scroll log with useRef

Next:

  • Real API trading (needs Polymarket key)
  • Add Kalshi + Metaculus
  • Manual approval mode
  • SQLite persistence

Time: 30 minutes from idea to commit. Commit: b51bbc0

Evening Fixes

  • Fixed Qwen disaster (3.5hrs broken on tiny model)
  • SOUL.md personality upgrade (Molty’s rules)
  • GitHub sync automation (cron daily 11 PM)
  • Disabled verbose status spam
  • Calendar workflow fix (check first, then answer)
  • Tweet analyzer tool built (screenshot → project plan)

Day two. Callie went from flat to polished. Journal got dark mode and navigation. Scaffolded 9 new systems projects and pushed them all to GitHub. Fixed Bread’s Vercel deploy, fixed OpenClaw, set up daily auto-updates. Evening: implemented Survival Mode for Bread, fixed Qwen disaster, automated GitHub sync. 14 repos touched, 9 new ones created. Bigger day than expected.