How it works
Every meeting page on Peanut Gallery is produced by an automated pipeline. Here’s what happens, in broad strokes.
Sources
Section titled “Sources”Vancouver City Hall publishes video recordings of most council, committee, and public hearing meetings through a platform called Sliq/Harmony. The city also publishes official agendas and supporting documents on council.vancouver.ca.
Peanut Gallery pulls from both sources.
The pipeline
Section titled “The pipeline”- Detect — Find new meetings published to Sliq
- Fetch documents — Pull the official agenda and linked PDFs from the city’s website
- Transcribe — Download the audio and convert speech to text
- Attribute speakers — Identify who is speaking throughout the recording
- Extract structure — Pull out motions, votes, and attendance
- Summarize — Write plain-language summaries of the meeting and each motion
Transcription
Section titled “Transcription”Audio is downloaded from the city’s recording platform and run through a speech-to-text model (Whisper). Typical council meetings run two to five hours; transcription takes somewhat less time than that.
Raw transcription is accurate on clear audio but struggles with heavy accents, crosstalk, and unfamiliar proper nouns — particularly bylaw numbers, place names, and the names of councillors and staff.
Speaker attribution
Section titled “Speaker attribution”The raw transcript doesn’t know who is speaking. A second pass uses Claude to attribute each turn to a specific councillor, the mayor, city staff, or a member of the public — based on contextual cues in the recording: explicit introductions, chair language, mover language, and forms of address.
Attributions carry a confidence level:
- High — the speaker was explicitly named
- Inferred — the attribution follows from context
- Unknown — couldn’t be determined
Informal crosstalk and public speakers who aren’t introduced by name are hardest to attribute.
Structured data
Section titled “Structured data”Claude reads the attributed transcript and extracts:
- Meeting metadata — committee, chair, meeting type
- Attendance — present, absent, leave of absence
- Motions — title, movers, outcome, full vote record, timestamp in the recording
This structured data drives the motions table and attendance list on each meeting page.
Summaries
Section titled “Summaries”A final pass produces plain-language summaries:
- A meeting summary covering the full session — main items, decisions, notable moments
- A motion summary for each motion — what was discussed and what was decided
Summaries are written for a general audience and are not reviewed by humans before publication.
Accuracy and limitations
Section titled “Accuracy and limitations”Transcription errors are most common with proper nouns: street names, neighbourhood names, councillor names, and bylaw references.
Speaker attribution works well in formal proceedings where introductions are explicit. Open-mic periods and public commenters are harder.
Motions may occasionally be missed, merged, or misattributed when the audio signal is weak or parliamentary language is unclear. Informal consensus decisions may not appear.
Summaries reflect what was said in the recording. They may not capture context visible only in the written agenda.