Council Meeting Monitor


A freelance project from 2025 for a regional news site.

Problem

The newsroom wanted to keep up with council meetings without sitting through hours of livestreams.

How it works

A server checks 14 municipalities every 10 minutes, picks up new recordings, gets them transcribed with Azure Speech and has GPT-4.1 write a summary per topic plus a draft article. For the articles it pulls two of the newsroom’s own older pieces from a Chroma database as examples, so the drafts sound like them.

Collecting meetings

Municipalities use a few different meeting platforms, so a lot of the work was writing a reader for each one. One player had playlists full of empty placeholder segments that broke the download, and I ended up rewriting the playlist before handing it to FFmpeg.

Dashboard

Editors read everything in a Next.js dashboard, export to PDF and can tweak the prompts themselves.

Stack

TypeScript, Express, PostgreSQL, FFmpeg, Azure Speech, OpenAI, LangChain, Chroma, Next.js, Docker.