Inspiration

Volunteer board secretaries write the minutes the night after the meeting, from scribbled notes. A motion needs a mover, a seconder and a vote, and those are exactly the details that get lost. Fixing it later means emailing the board president to ask who seconded the fence motion.

What it does

Paste your notes or your draft minutes. Motion Tracker finds every motion and lays it out in a table: what was moved, who moved it, who seconded it, the vote and the result. Anything missing shows up in red with a tip on what to add. If a vote adds up to more people than were present, or the mover is listed as absent, it flags that too. Fix the notes, check again, and when every row is complete you get a green "Ready for minutes" banner and a clean summary to paste in.

It reads quick typed notes and formal minutes: "Upon a motion by Director Okafor, seconded by Director Brennan", "M/S/C", AYES and NOES lists, roll calls, even a meeting transcript. If it isn't sure, it never says Ready. It flags the line instead.

Why not just ask a chatbot?

A chatbot can sound sure and still invent a seconder. That's the one mistake minutes can't have. Motion Tracker runs on plain rules, so the same notes always get the same answer. It shows you exactly which motion is missing what, and nothing you paste is stored or sent anywhere else.

How we built it

I planned it with the Devpost Learn Skill Pack. The scope, PRD and spec are in the repo under devpost/.

The app is one Cloudflare Worker serving a page and POST /api/check. The parser is plain pattern rules: no AI calls, no keys, no storage. If the API can't be reached, the page runs the same rules in the browser.

To make it hold up on real minutes, I built a test set: 46 excerpts from real public minutes (towns, city councils, school boards, HOAs, libraries, nonprofits; sources in the repo), plus 147 made-up tricky cases. It now gets all 193 right, with zero false Readys. npm test runs 19 tests, including the whole set.

Challenges we ran into

Real minutes are messy. My first version only knew a few typed-note forms like "Motion to" and "Moved by", and on real public minutes it got 4 of 46 right. Formal minutes say "A motion was made by", "Upon a motion by", "It was moved by", or just "M/S Lee/Ruiz 5-0". Ordinary English uses "moved" all the time ("the item was moved to next month"), and times like 8:15-8:30 look like votes.

So I kept throwing new minutes at it. Each round was 20 to 25 cases it had never seen. I logged the misses, fixed them and added them to the set. First-try scores went 8/20, 8/20, 11/25, 10/25, 17/25, then 23/25.

What we learned

The hard part is knowing when not to answer. A confident green "Ready" on bad notes is worse than showing nothing, so the rule became: if anything looks off, flag it and say why.

What's next

A roster check so names match the board list, export to Word, and a mode for checking a whole year of minutes at once.

Built With

Share this project:

Updates

Submission history