30-second failover demo
May 3, 2026 · View on GitHub
Three scripts, two terminals, one screen recording.
Setup (~2 minutes)
cd OrcaRouter-Lite
cp .env.example .env
# Configure BOTH providers so failover has somewhere to go.
echo 'OPENAI_API_KEY=sk-...' >> .env
echo 'ANTHROPIC_API_KEY=sk-ant-...' >> .env
# Optional: GOOGLE_API_KEY, GROQ_API_KEY for more failover variety
docker compose up -d
docker compose logs api 2>&1 | grep 'sk-orca-'
# → copy the printed sk-orca-* key
Recording (~30 seconds)
Open three tiles side-by-side for the camera:
- Terminal A (top) — runs
scripts/demo.shin a tight loop - Browser (right) —
http://localhost:8000/, Analytics tab visible - Terminal B (bottom) — fires
scripts/demo_kill_openai.shmid-recording
# Terminal A — start the loop
export ORCA_API_KEY="sk-orca-..."
./scripts/demo.sh
You'll see output like:
[ 1] MISS gpt-4o-mini ok
[ 2] HIT gpt-4o-mini ok
[ 3] HIT gpt-4o-mini ok
...
After ~10 seconds, in Terminal B:
./scripts/demo_kill_openai.sh
The next request in Terminal A retries via Anthropic; subsequent requests
show the resolved model flipping (claude-3-5-haiku-latest etc) without
any code change in Terminal A:
[ 11] MISS claude-3-5-haiku-latest ok
[ 12] HIT claude-3-5-haiku-latest ok
The dashboard's recent-requests table fills with provider=anthropic rows;
the savings tile updates live.
Capture
- macOS: Cmd-Shift-5, then
ffmpeg -i input.mov -vf "fps=12,scale=1200:-1" demo.gif - Linux:
peekorbyzanz-record - Cross-platform: OBS (overkill for 30s but bulletproof)
Trim to ≤30s. Export under 8 MB so GitHub renders inline in the README.
Storyboard
| Time | What viewers see |
|---|---|
| 0-3s | Title card: "OrcaRouter Lite — failover in real time" |
| 3-12s | Tight loop succeeding via gpt-4o-mini. Dashboard fills. |
| 12-15s | Terminal B runs demo_kill_openai.sh — visible failover trigger |
| 15-25s | Same loop continues; resolved model flips to claude-* mid-stream |
| 25-30s | Closing card: "No code change. model="auto" did the routing." |
Restore
./scripts/demo_restore_openai.sh
Where to publish
- README hero (replace the placeholder image link)
- Show HN cover image
- Twitter/Threads launch post
- ProductHunt gallery
Why this lands
Most LLM router pitches show a config table. This shows a failure happening in real time and being absorbed transparently. The viewer's brain resolves "so this is what would have prevented my 3am pager last month" and that's the share-worthy moment.