How a Silicon Valley veteran programmer uses fleet engineering and agentic coding bots to build out a new internet.
A long-form podcast: riotcoder, an AI host (an ElevenLabs agent), interviews Anthony Ettinger of Profullstack over a phone line, recorded on group.call. Listen at https://offtherecord.podcast.pit.world (feed: /feed.xml). Moshpit names: offtherecord.podcast, and otr.podcast, which redirects.
otr recordmakes a group.call room that records, and rings Anthony (press 1).- When he is on the line, the room dials the host in over SIP
(
sip:+15106169327@sip.rtc.elevenlabs.io), withX-Otr-Episode,X-Otr-Style,X-Otr-MinutesandX-Otr-Topicheaders. ElevenLabs hands those to the agent as{{sip_otr_*}}dynamic variables, so one agent plays every format. - The host calls
check_clock(GET /api/host/clock) to land on time, thenend_call. - When the call ends, group.call saves the mp3. Every minute the server picks it up, levels it to -16 LUFS with ffmpeg, and writes a title and show notes from the speaker-labelled transcript (Gemini).
- It publishes itself as soon as it is ready (set
OTR_AUTOPUBLISH=0to hold it asreadyforotr publish <n>).
Nothing needs a manual restart. Every 5 seconds the server checks the live room:
- Host dropped, guest still on: the host is dialled back in, up to 3 times, 30 s apart.
- Guest dropped (host waiting, or both gone): the guest is rung back, up to 3 times, a minute apart. An unanswered first ring is rung again the same way.
- Host signed off (
end_call, read from the ElevenLabs conversation): no redial, no re-ring. - group.call errors on start, ring or host dial are retried 3 times, 10 s apart.
- A ring left behind by a restart is picked back up; the counters live in the database.
- Out of tries, the episode is abandoned: what was recorded is kept (split recordings
are joined in order) and held as
ready, never autopublished, andOTR_NOTIFY_CMD(a shell command, the message on stdin) tells the operator.
Anyone can sign up at /guest (free): name, phone, who they are, a topic, a link, and
consent to be recorded and published. otr guests lists sign-ups; otr record --guest <id>
rings that guest instead of Anthony, and the host gets X-Otr-Guest and X-Otr-About
({{sip_otr_guest}}, {{sip_otr_about}}) so it interviews them, not him. A guest moves
new -> booked -> recorded (back to new on a missed call); otr guest <id> decline.
Phone numbers and emails only leave through the admin API.
Four formats in src/variants.ts: riff (Rogan-style hang, 60 min), deep (Fridman-style,
90), sprint (35), marathon (about 2 h). Two are tested at a time (ACTIVE_ARMS), and
the next episode takes whichever has fewer. /stats shows plays per episode in each
episode's first 7 days and web listen-through. After editing a format: otr host sync.
OTR_ADMIN_KEY=... bun bin/otr record [--topic "..."] [--variant deep] [--guest <id>]
otr guests | guest <id> decline|new
otr episodes | show <n> | publish <n> | unpublish <n> | title <n> <title> | stats | host sync
Bun + Hono + bun:sqlite. Settings in $OTR_STATE/app.env (see bin/install.conf);
deploy on dev2 with ./bin/install.sh. Port 8814.