What inspired it
We have done a couple internships as undergraduates now and one thing that hit me immediately both times was how many meetings there were. Not just a lot — a lot a lot. Stand-ups that were basically the same as the weekly sync. Five people invited to a 30-minute decision that two people could've made over Slack. Recurring meetings that nobody knew why they existed anymore.
The funny part is everyone knew it was bad. People would joke about it. But nothing changed because it's hard to point at a calendar and say "this specific cluster of meetings is costing us X per week." It's all fuzzy.
So we built the MeetLedger — upload your calendar, get a clear picture of what's redundant, who's a bottleneck, and what it's actually costing you.
What We learned
- Graph algorithms are surprisingly useful outside of textbook problems. Modeling attendees as nodes and shared meetings as edges made the "who's getting pulled in too many directions" question really easy to answer with betweenness centrality.
- NLP for title similarity (using spaCy) is genuinely good at catching meetings that are basically the same thing with slightly different names.
- Putting dollar costs on abstract problems makes people pay attention. Saying "you have 3 redundant meetings" lands differently than "these 3 meetings cost your team $1,200/week."
- Privacy matters even in a hackathon. We added a PII scrubber so names and emails get anonymized before anything gets sent to the AI.
How we built it
Backend: Python + FastAPI. The core is a pipeline:
- Parse and anonymize calendar events (ICS or JSON)
- Build an attendee co-occurrence graph with NetworkX
- Run three detectors: redundant meetings (cosine similarity on titles + attendee overlap), bottleneck detection (between-es centrality), and consolidation clusters (Louvain community detection)
- Attach weekly dollar costs to each issue based on attendee count × hourly rate × duration
- Optionally call Claude AI to generate plain-English explanations and fix suggestions
Frontend: Next.js + TypeScript. Dashboard with an upload zone (drag and drop .ics or .json), KPI cards showing total waste, an issues list with suggestion cards, an attendee graph visualization, and charts.
Challenges
- Getting the redundancy detection right was tricky. Simple overlap wasn't enough — you'd get false positives from recurring meetings being flagged against themselves on different weeks. Had to add a check to skip same-series recurrences.
- The graph visualization gets messy with large calendars. Still a work in progress.
- Balancing AI explanations gracefully degrading when no API key is set — wanted the core tool to work without requiring Claude, with AI as an enhancement.
Built With
- fastapi
- networkx
- next-js
- python
- python-louvain
- spacy
- tailwind-css
- uv
Log in or sign up for Devpost to join the conversation.