Thunder Citizen puts Thunder Bay’s public data in one place: transit performance, council votes, city budgets, and more. The information is already public, but it’s scattered across feeds, PDFs, and meeting minutes that most people will never open. We collect it, organize it, and present it.
Thunder Citizen is also a software project. The backend uses Go for ingestion, parsing, indexing, and serving; the frontend uses HTMX for progressive enhancement on server-rendered pages, so it stays fast and works without JavaScript. The source code is open. Follow along on GitHub.
Transit data comes from Thunder Bay Transit’s real-time feeds. Council votes are scraped from the city’s published minutes. Budget figures reference specific pages in official documents.
Transit pulls live GTFS-RT feeds for vehicle positions and delays, and budget flows are rendered as Sankey diagrams so revenue and expenditure can be traced end to end.
Raw feeds and PDFs aren’t built for humans. We translate them: bus arrivals become “3 min late” instead of a Unix timestamp, line items become labelled categories, motions get plain-language summaries with the official wording one click away. The goal is to make the answer to a question take seconds, not an afternoon.
Every figure stays traceable to its source. Budget numbers cite their FIR page, council votes link back to the minutes, transit metrics show the formula. Friendly on the surface, auditable underneath.
Other local sites we like
No affiliation. Just other locals building useful things for Thunder Bay.
Thunder Citizen is an independent project. It is not affiliated with the City of Thunder Bay.
Provided “as is”, without representations or warranties (express or implied), including accuracy, completeness, timeliness, merchantability, or fitness for a particular purpose. No liability is assumed for errors, omissions, or any loss arising from use.
For official information and authoritative records, refer to the City of Thunder Bay or other responsible agencies.
Thunder Citizen does not use tracking cookies, analytics pixels, or third-party advertising networks. No user accounts are required.
We do process standard request metadata (IP address, user agent, request path, timestamp) for security, abuse prevention, operational stability, and to understand roughly how the site is used. Raw logs are kept only as long as reasonably necessary for these purposes; any longer-term figures are aggregate, cookieless counts that hold no personal data.
Outbound links (e.g. to the City of Thunder Bay, open data portal, or other local sites) are subject to the privacy policies of those destinations.