Daily race dashboard
Every morning, the whole race on one screen.

Client details are private. Every screen here is a copy of the real tool running on made-up data.
The situation
A campaign needs to know what is being said, by whom, and where the money is going. Checking social feeds, news, ad libraries, and finance filings by hand every day eats the hours a small team does not have.
What I built
- A scheduled job collected both campaigns' public social posts, news coverage, and ad library entries every day, plus quick refreshes through the day, and flagged posts that looked like new endorsements.
- AI tagged each post by topic (community, policy, endorsement, event, and so on), and ads were matched to posts to compare paid and unpaid reach, so trends showed up as charts instead of a feed to scroll.
- Campaign finance reports were typed in from the filed paperwork, each number read several times and compared. Anything the readings disagreed on got a question mark so a person could check the original.
- Results landed on a dashboard behind a password page and in a short email digest.
What I would do differently: the dashboard stored downloaded media alongside its code, and after the election that folder outgrew the hosting plan's size limit and quietly stopped updating the site. Media now belongs in separate storage from day one.
For your business
Point it at your own market instead: competitor pricing, online reviews, or new listings in your market, collected and summarized every morning.
Why custom
No dashboard product watches the exact sources a local race needs. This one pulled the specific social accounts, news, ad library entries, and campaign finance reports for this race, filtered out news about other districts, and emailed the team a digest every Monday morning. It answered their questions instead of a generic set of metrics.





Built with
Python · GitHub Actions · Claude (tagging) · Chart.js · GitHub Pages
Have a workflow like this?
Most projects scope in a 30-minute call. Tell me where the time goes.