AI was not used in the ideation or drafting phases for any work. The idea for the project was formed over pasta on a Thursday night and refined through meetings with our advisors (shout out to Serdar Tumgoren and Janine Zacharia!). The design for the website was collaged over and over again in Canva and critiqued by dear friends. The script was drafted in a Word document and hotly debated in Ella's living room. The video edits came straight from Brianna's noggin.
The images on this site come from a combination of Adobe Stock (thanks for the wood), Nano Bananana (thanks for the tea, the notebook, the titles, and the watercolors), and our camera rolls + ProCreate skills.
The episode summary was AI-generated using the transcript from our final cut. We asked it to give us 5 options for summaries, each about 100 words. We edited the final version.
Ella used Claude to make all the HTML. After 10 weeks of vibe coding, Ella has gained a loose understanding of HTML.
Claude and spaCy worked together to make the Money, Vibes, and Decisions tabs possible. This process was also a long journey of trial and error. Details of this workflow and the fact-checking elements can be found here:
This product is designed for low-code journalists. They will need to spend 30 minutes setting up their Python and AI tools and links to their account. This should only have to happen once. After that, the interactions should primarily happen through Google Sheets.
This tool is designed to assist a journalist who sat through a city council meeting, is extremely familiar with the content, and is able to quickly check the tool's output. It adheres to a human centered ethos.
Code was written with the help of Claude Code in VSCode.
Full code can be found here: github.com/jinxjax19/citygossip
General
Quality of audio impacted the quality of the transcript: screen recording was lower quality than recording to a Zoom recorder.
Time stamps were key for fact checking. Numbers and policy decisions and public comments came in large chunks. The fastest way to fact check was to listen through that chunk at 2x speed.
This process works best on meetings with one big controversy.
Public Comment Extraction
Individual comment extraction was by far the most difficult part. This ended up requiring significant edits and hand-checking. This process could likely be improved with additional prompting or with prompting baked into transcription so that comment separation happens with both audio and textual cues.
Theme identification worked seamlessly for the overall meeting.
Pro/con sentiment analysis was seamless and the AI outperformed the human in multiple tests.
For the pro/con public comment themes, the theme analysis sometimes picked up irrelevant themes. For example, many of the pro-bike lane commenters mentioned that they "understood the parking concerns" which led parking to incorrectly be a theme in the pro-bike lane content.
Number Extraction
Number extraction was much spottier than public comment and required a scoped ask. For this meeting we used money because the budget was a major point of content. We could have also looked at the number of people surveyed and number of public meetings held. We could have made a timeline of events. We could have made notes of the numbers of bikers reported using the bike lanes by different groups. The sky is the limit here as long as the ask is narrow.
After running the pipeline, it takes about an hour to do a final fact-check. While there were not hallucinations in the final product, there were four main errors: (1) missing numbers that were on the slides but not spoken into the transcript, (2) missing numbers where speakers stumbled and an "um" split the sentence, (3) insufficient details in the final summaries, at least for my editorial desires, (4) no differentiation between new numbers added and numbers that public commenters were paraphrasing to make a point. The final fact check took about 45 minutes and resulted in less than 10 corrections.
Sometimes the timestamp ended up 5-10 seconds behind the number it was citing.