On April 18, the Charlottesville City Council approved a housing development at 240 Stribling Avenue. The project has been on the city agenda since 2019, and the Daily Progress has covered the topic extensively—although so far I haven't found any coverage there of the final vote approving the rezoning. But it's not easy to find a history of the project as it's wound through city government.

Try searching the city website: as of this writing, no results. A Google site search turns up a few hits, but none related to the rezoning. A site search of the content management system that the city uses for public meetings returns three results, covering two Planning Commission meetings. But there were more than two city meetings about this project! Finally, the city meetings website has a basic search feature that actually yields some useful results—but without previews, it's hard to tell which documents are relevant. And this search tool only exists within the CMS, so it can't be discovered by Google:

I wanted a collection of city meetings that would be easy to search without proprietary tools, so I wrote a program to collect all the documents from the city meetings website, convert PDF files to text, and search documents by content. The result is https://agendas.cvilledata.org, and if you use the search bar at the top of the page to look for "240 stribling", you'll find multiple City Council and Planning Commission meetings, as well as the original Planning Commission work session at which the idea for the development was first discussed. Or if you don't want to be subjected to my limited web design skills, the content is also indexed by Google, so a site search works as usual.

Ideally this project wouldn't exist, and the city website would be easy to search. Failing that, the city could provide documents for public meetings on a public FTP server for easy access. But City Hall is short-staffed, so for now I'll use my own project to search meeting documents. Hopefully I can retire the code I wrote someday, because it's sort of a mess. In particular, it uses Selenium to crawl the city's meeting portal, since I couldn't figure out how to paginate the meetings table without executing javascript. One silver lining is that it's fun to watch the program navigate the city website automatically, so I'll end this writeup with a video:

This is a project I made mostly for myself, but let me know if you find it useful.