This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
Meeting notes to action items: paste your notes or a transcript and get a checklist of who does what by when.
Every meeting ends with the same chore. Someone rereads the notes and pulls out the tasks, the owners and the deadlines, then writes the follow-up message. This tool does that in one click. Anyone who sits through a lot of meetings, or gets stuck writing the recap, gets to be a little lazier.
The part I care most about is a trust check. AI summaries sometimes assign tasks to people who were never in the meeting. So the JavaScript verifies that every name the model lists actually appears in your pasted text. If a name doesn't, the task is marked "Unassigned" and a yellow warning lists the names that were removed. The model can't hand work to an invented person.
Other features:
- Tick-off checkboxes for each action item
- A "Copy checklist" button that gives you plain text like
[ ] Send revised budget (Priya, Friday) - "Unassigned" and "No deadline" labels when the notes don't say who or when
- Dark mode and keyboard-visible focus
Demo
https://hack-week3-gamma.vercel.app/
Paste any meeting notes and press Extract action items. To see the trust check, try a note that mentions a task without naming anyone. The first click shows a one-time permission prompt.
Code
HackWeek3
Hacktoberfest week 3 challenge
The whole app is one file, action-items.html, with the HTML, CSS and JavaScript together. There is no backend, no build step and no API key to manage.
How I Built It
- One file: Plain HTML, CSS and vanilla JavaScript. No frameworks, no dependencies.
-
Extraction: The page sends your notes to the model with instructions to return only a JSON array of
{owner, task, due}items. The prompt asks for names exactly as written andnullwhen an owner or deadline isn't stated. - Verification layer: The browser checks each returned owner against your original text, matching whole words and ignoring case. For multi-word names, every word must appear. Names that fail the check are removed and the task becomes "Unassigned". This check is plain code with no model involved, so it doesn't depend on the model behaving well.

Top comments (0)