About Windowbox
A clearer view of City Hall.
Public meetings belong to everyone. Windowbox makes Portland City Council easier to follow, one searchable transcript at a time.
A searchable public record
Council meetings can run for hours. Finding a particular exchange should take minutes. Windowbox brings recordings, searchable transcripts, and meeting agendas together so you can find what was said and hear it in context.
Search for a word or phrase, open a passage, and follow its timestamp to the recording. The archive is built for anyone trying to understand a decision: journalists, advocates, neighbors, and the simply curious.
Ask questions in your AI app
You can connect Windowbox to Claude Desktop or ChatGPT to find discussions and read transcripts in a conversation. Our setup guide walks you through the app’s menus and gives you a first question to try.
Listen as a podcast
Meeting audio is also available as a podcast feed.
Add https://portland.windowbox.app/podcast.xml to your podcast app
to get each meeting with chapters for agenda items and a transcript.
In most apps, you can paste this address under Add show by URL or Follow a show by URL.
Follow on Bluesky
Windowbox posts each new meeting on Bluesky as @portland.windowbox.app, with the opening of its summary and a link to the transcript.
Grounded in public information
Recordings and agendas come from Portland City Council. We check for new meetings automatically and process the City’s YouTube recordings once they are available after the livestream ends.
We maintain a directory of officials and recurring staff from public City information, including names, roles, districts, pronouns, and dated terms of service. The workflow selects roles for the meeting’s date and uses committee membership where our records cover that period. City neighborhood names and local government terminology help with speech recognition. When the City publishes a matching testimony sign-up list, we also use it to help spell and identify public commenters’ names. Agendas supply official item numbers, titles, and amounts.
This context helps the models recognize people and places and connect discussion to the public record. It does not establish what someone said or how they voted — that evidence must come from the meeting.
How transcripts are generated
Our current speech recognition model is AssemblyAI Universal-3.5 Pro. It transcribes the recording’s audio with timestamps and speaker labels — AssemblyAI’s speaker identification also matches voices against the meeting’s roster. Recordings longer than five hours are split into overlapping audio segments, then joined into one transcript with timestamps aligned to the original video.
Anthropic’s Claude Sonnet 5.5 performs additional passes to resolve speaker labels, repair attributions around roll-call votes, and check for turns assigned to the wrong person. Those suggestions are combined with rules that use evidence such as self-introductions, named handoffs, and the sequence of a roll call. Unresolved labels appear as “Unidentified speaker.”
This refinement preserves the transcribed wording and timing, apart from capitalization corrections and removal of suspected speech-recognition artifacts during roll calls, such as repeated text or text too long for its allotted audio. We retain the transcript before refinement and a record of corrections and removals so we can review changes and rerun refinement from the original output.
After publication, a maintainer may correct a misrecognized name or word, a speaker label, or the summary. Each correction records the original text, the replacement, the reason, the date, and, when there is one, the source that confirms the replacement. A corrected meeting lists its corrections in a Corrections tab beside the agenda and summary.
How summaries and navigation are generated
Anthropic’s Claude Opus 5.5 writes meeting summaries from the full refined transcript, with its timestamps, the official agenda when available, and context about officials and the structure of City government. The summary workflow first extracts a timestamped record of facts, then drafts the summary and checks it against that record using the same model. It is designed to distinguish discussion and proposals from decisions, and committee recommendations from final Council action. Vote results, figures, and quotations link to moments in the recording so readers can check them in context.
Anthropic’s Claude Sonnet 5.5 creates the meeting’s navigation outline by matching the agenda to timestamped excerpts sampled across the transcript. Those section boundaries are automatically estimated. If summary generation fails, the transcript can still be published without a summary.
When these models are unavailable, a step may run on another model instead, such as an earlier Claude model or Google’s Gemini. Meetings processed in the past may also have used different models.
Always return to the source
Transcripts, speaker labels, timestamps, outlines, and summaries are generated automatically. Public-source context and automated checks reduce some errors, but they do not make these outputs an independently verified account. Words, names, vote attributions, and summary claims can still be wrong or miss context.
Use Windowbox to find the passage. Check the recording before quoting it, and consult official City records for the authoritative account.
Why the donut?
A bakery box has a window so you can see what’s inside. We think public information should work that way, too. And being in Portland, we love our donuts.
Reuse and citation
The transcripts, summaries, and agenda outlines that Windowbox produces are licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You may quote, republish, and adapt them, including for commercial use, as long as you credit Windowbox.
Credit each use with the line Transcripts by Windowbox, linked to the meeting page you quote. On the web, that looks like this:
<a href="https://portland.windowbox.app/meetings/2026-09-23-1">Transcripts by Windowbox</a>
In print or plain text, write the line followed by the meeting’s address:
Transcripts by Windowbox, https://portland.windowbox.app/meetings/2026-09-23-1
The same terms apply to every format we publish:
Markdown, plain text, JSON, and WebVTT files for each meeting,
the meeting index at /meetings/index.json,
and results from the MCP server.
The meeting recordings and agendas are the City of Portland’s public record. They are not ours to license. As with any generated transcript, check the recording before you quote it.
Who’s behind Windowbox
Windowbox is an independent project operated by Form Follows Function, LLC. It is not affiliated with or endorsed by the City of Portland.