About Centre County Live

Centre County Live is a real-time fire and EMS dispatch monitor for Centre County, Pennsylvania. It listens to local fire and EMS radio frequencies, transcribes dispatch audio using speech recognition, and surfaces structured incident data on this website — automatically, within seconds of a dispatch.

How It Works

1

SDR Radio Capture

A ZimaBoard SBC running at home listens simultaneously to two Centre County dispatch frequencies using two dedicated RTL-SDR Blog V3 dongles and rtl_fm. A custom Go binary monitors both audio streams concurrently, applying a 5th-order Butterworth bandpass filter (300–3000 Hz) and carrier-based VOX detection — recording begins automatically when the RMS level drops to the noise floor characteristic of an active FM carrier.

453.9750 MHz — FIRE460.6125 MHz — EMS
2

Tone Detection

After a recording is saved, Goertzel tone detection scans the audio against all known Centre County two-tone paging sequences to identify the dispatched department. If tones are confirmed, the file is processed through the pipeline. Recordings without detected tones are archived locally for debugging and skipped.

3

Speech-to-Text Transcription

Each tone-confirmed audio file is sent to Cloudflare Workers AI (whisper-large-v3-turbo), which converts the dispatch audio into raw text within a few seconds. Known Whisper hallucinations are stripped before any further processing.

4

AI Cleanup & Extraction

The raw transcript goes through a single agentic LLM pass on Cloudflare Workers AI, using Llama 4 Scout with GLM 5.3 Flash as a fallback. Tool calls validate units and place names against Centre County context, then the model returns incident type, address, dispatched units, and details as JSON.

5

Live Website

Structured incidents are written directly to PostgreSQL by the ZimaBoard and surface on this page within seconds. The web app is built with Next.js and is hosted on Railway. The live feed polls /api/incidents every 5 seconds for new incidents — no page refresh needed. The same public API is available to external consumers.

Pipeline

Radio (453 / 460 MHz)
    ↓
RTL-SDR + ZimaBoard  ──  carrier VOX · bandpass filter · WAV recording
    ↓
Goertzel tone detection  ──  department identification
    ↓
Cloudflare Workers AI (Whisper)  ──  speech-to-text
    ↓
Llama 4 Scout → GLM Flash  ──  cleanup + incident extraction
    ↓
PostgreSQL (Railway)  ──  direct insert from ZimaBoard
    ↓
Next.js (Railway)  ──  public incidents API
    ↓
Your browser  ──  polls every 5 s · live updates

Hardware & Infrastructure

ZimaBoard 832

Single-board server running Debian. Handles SDR capture, audio processing, Cloudflare API calls for transcription and structuring, and direct Postgres writes. Runs headless 24/7 on Starlink.

RTL-SDR Blog V3 × 2

Two USB software-defined radio receivers — one dedicated to each frequency. Both monitor simultaneously so no dispatch is ever missed while the other channel is active.

Cloudflare Workers AI

Whisper transcription plus Llama 4 Scout / GLM 5.3 Flash for cleanup and incident extraction. Called directly from the ZimaBoard.

Railway

Hosts the Next.js web server and PostgreSQL database. Receives structured incident data directly from the ZimaBoard and serves it to browsers and API clients.

Get Alerts on Your Phone

Add Centre County Live to your home screen to get real-time push notifications the moment a new dispatch comes in — no app store required. Works on iPhone and Android. See the setup guide.

Public API

Incident data is available as a public JSON API. External callers are rate-limited to 10 requests per minute per IP. No API key or authentication required.

GET/api/incidents

Returns a JSON array of incidents. By default, returns the 50 most recent incidents ordered newest-first.

Query Parameters

limit

Integer, 1–100. Number of incidents to return. Defaults to 50.

before

Integer incident ID. Returns incidents older than this ID, ordered newest-first. Use for paginating back in time.

after

Integer incident ID. Returns incidents newer than this ID, ordered oldest-first. Use for polling new incidents since your last request.

Response Schema

[
  {
    "id":             1247,
    "timestamp":      "2025-05-12T14:32:00.000Z",
    "channel":        "FIRE",
    "incident_type":  "Structure Fire",
    "location":       "123 Main St, Bellefonte PA",
    "units":          ["Engine 1-1", "Ladder 1-1", "Battalion 1"],
    "details":        "Two-story residential, smoke showing",
    "transcript":     "Engine 1-1, Ladder 1-1, Battalion 1 respond to...",
    "filename":       "2025-05-12_14-32-00_fire.wav"
  }
]

Examples

Latest 10 incidents

/api/incidents?limit=10

Poll for new incidents since ID 1247

/api/incidents?after=1247

Load older incidents before ID 1200

/api/incidents?before=1200&limit=50

Incident data is AI-generated and may contain errors. Locations, unit numbers, and incident types are extracted automatically from fire and EMS radio audio and are not verified. Do not use this site for emergency response or any safety-critical purpose. For emergencies, call 911.

Centre County Live is an independent community project and is not affiliated with or endorsed by Centre County Emergency Services or any government agency.

Centre County Live is free. If it's useful to you, consider buying us a coffee to help cover server costs.

Follow us on Facebook