four30.co Book a conversation
All projects

App

RADIO1

Push-to-talk radio in the browser for volunteer and field teams, with team chat, transcribed transmissions and an AI ops assistant.

Type
App
Year
2026
Our role
Concept, spec and build
Stack
React, TypeScript, WebRTC, Convex, Claude, Groq Whisper, Playwright
RADIO1: Push-to-talk radio in the browser for volunteer and field teams, with team chat, transcribed transmissions and an AI ops assistant.

RADIO1 is a push-to-talk radio for volunteer and field teams, like security staff, parking crews and ushers, who need to reach each other on their own phones. A member opens a link, enters a call sign and access code, picks a channel, then holds a big TALK key while the whole channel hears them live. The voice travels phone to phone over WebRTC, and a Convex backend decides who has the channel.

Why it exists

The project spec names three things a field team needs: live voice, team text and an ops assistant. It says they live in three different apps today. RADIO1 puts them in one, opened from a link, with no accounts and no app store.

Version 1, open-sourced on July 11, 2026, was the radio alone. The spec records a pilot team replacing a commercial push-to-talk app with it.

What it does

It works like a walkie-talkie. One person talks at a time per channel, and anyone who presses while it's taken sees BUSY on the key.

Team Radio join screen on a phone: a call sign field, channels CH1 Security, CH2 Parking Lot and CH3 General, an access code field and a GO ON DUTY button
The join screen. Inside the app, RADIO1 goes by Team Radio.

About a week later, version 2 added team chat, direct messages, private one-to-one radio calls, push alerts, and a replayable log of transmissions with transcripts. In the spec's words: "If you didn't hear it, you can still know what they said."

The optional OPS tab is a Claude assistant with eight tools for reading team data and updating the team checklist. Ask "who's on duty?" and it checks live team data, then answers in native blocks like stats, charts and checklists. An admin can turn it off without a redeploy.

How it works

Each phone connects to every other phone on the channel at join time, mic attached and switched off. Pressing TALK asks Convex for the channel and, once it's granted, flips the mic on. Nothing has to connect on the press, so keying feels close to instant.

Convex grants the channel inside a transaction, so two people pressing at once can't both get it:

convex/floor.ts
if (current) {
  if (current.expiresAt > now && current.sessionId !== sessionId) {
    return { granted: false, holder: current.name };
  }
  // Expired hold, or re-acquire by same session: replace it.
  await ctx.db.delete(current._id);
}

A hold expires after 10 seconds without renewal, and no transmission runs past 60 seconds, so a phone that dies mid-sentence can't jam a channel.

On release, the app cuts the mic first. Only the sender's phone records, and only while it holds the channel. The clip uploads afterward, and Whisper, running on Groq, transcribes it.

Tony built it spec-first with Claude Code. Playwright tests run two browsers with fake microphones and check that the listener receives audio only while the key is held.

What the field trial changed

Tony's first field trial turned up five problems. Whisper transcribed a one-second clip as Icelandic. OPS counted two team channels while the app listed five or more. And on an iPhone, the web app can't send or reliably receive audio once the screen locks.

Version 2.1 shipped eight changes on July 20, 2026. Transcription now pins the language, skips sub-second clips and flags low-confidence results. OPS searches transcripts and sees the app's own channel list. A call sign in active use can't be claimed twice, and clips got one-tap COPY acknowledgments.

The locked screen remains a limit. NATIVE.md in the repo points real deployments to a native build on Apple's PushToTalk framework. Each channel's mesh is also sized for about 12 members at once.

Where it stands

Production runs version 2.1 for a volunteer team. A version 3 redesign with a desktop layout and channel agents waits in an open pull request. The production app sits behind its team's access code, so to try RADIO1, deploy your own copy from the MIT-licensed repo.