DEV Community

gbetibienvenu
gbetibienvenu

Posted on

Overnight Catch-Up: the WhatsApp card that never makes things up

Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission 🦥

*This is a submission for the [Hacktoberfest Open-Source AI Challenge Week 3:

What I Built

Overnight Catch-Up turns a long WhatsApp group chat you missed overnight into one short card: what needs you, plans and times, money mentioned, links, and a short summary of what happened.

I built it for the moment I wake up to 300 unread messages in my class group. Somewhere in there is a deadline or a question for me. Reading it all costs minutes, and skipping it costs me. Now I read one card.

The key idea: code finds the facts, an open-weight model writes the summary, and a guard checks it.

  • Plain Python finds mentions of my name, unanswered questions, times and deadlines, money and links, and copies them straight from the chat. No model is involved.
  • A model writes the short "what happened" summary, in chunks for long chats.
  • A guard rejects any summary that adds numbers, links, money words or names that are not in the chat. If it rejects, the card shows facts only. The app always works, even with no model.

Demo

Live demo: https://overnight-catch-up.onrender.com/

The public demo accepts only three built-in made-up chats (a busy class group, a small class group, a family group), so nobody's real chat can reach a hosted model. It may take about a minute to wake up on the first visit. Try the Busy class group (300 messages) and press Make my catch-up card.

Code

Overnight Catch-Up

Turn a long WhatsApp group chat you missed overnight into a short card: what needs you, plans and times, money, links, and a short summary.

How it works: code finds the facts, an open-weight model writes the summary, a guard checks it.

  • Plain code finds mentions of you, unanswered questions, times and deadlines, money and links, and copies them from the chat. No model is involved.
  • A model writes a short "what happened" summary of long chats, in chunks.
  • A guard rejects any summary that adds numbers, links, money words or names that are not in the chat. If it rejects, the card shows facts only. The app always works without a model.

Features

  • Reads Android and iPhone WhatsApp exports (day/month or month/day, 12/24 hour, multi-line messages, media and deleted placeholders).
  • "Needs you", plans and times, money, links, with who said it and when.
  • The…

Python standard library only, MIT license, 47 tests.

How I Built It

  • Parser: reads Android and iPhone WhatsApp exports (day/month or month/day, 12 or 24 hour, multi-line messages, media and deleted placeholders).
  • Facts (no AI): mentions of me, questions nobody answered within 10 minutes, times and deadlines, money, links, with who said it and when.
  • Summary: long chats are split into chunks of about 3,000 characters (newest 6 kept), each chunk is summarized, then the pieces are combined.
  • Guard: every summary is checked against the chat text. Anything with new numbers, links, currency words or unknown names is thrown away.
  • Models: the public demo uses a hosted model through Backboard (moonshotai/kimi-k2.6). On my own computer it can run a local open-weight model through Ollama (qwen2.5:1.5b), where the chat never leaves my machine.
  • Hosting: Render, with the API key set only in Render's environment settings.

Privacy: nothing is stored. The demo refuses real chats. A hosted model only sees a user's own chat if the user ticks a consent box, and the local model never sends anything out.

Why Does Open Innovation Matter?

A chat is private. The people in my class group did not agree to have their messages sent to a closed API. With an open-weight model running through Ollama, I can summarize a real chat on my own laptop, offline, and nothing leaves it. A closed API could not offer that. Open code also lets anyone read exactly how the guard works and check that nothing is stored.

The Lazy Payoff

For the 300-message made-up chat, the app estimates about 5.5 minutes to read the chat versus about 1 minute for the card (an estimate at 200 words per minute). For very short chats the card can take longer than the chat, and the app says so honestly instead of pretending.

So far I have tested it on made-up chats only.

Limits: small local models can write weak summaries, and the strict guard then drops them so you see facts only. Only the newest part of a very long chat is summarized, though the facts cover the whole chat. "Needs you" depends on the name you type.

Prize Categories

  • Best use of Render (the demo is deployed there)
  • Backboard (the hosted summary runs through Backboard)

](https://dev.to/challenges/hacktoberfest-week3-2026-10-19)*

What I Built

Demo

Code

How I Built It

Why Does Open Innovation Matter?

My Agent Session

The Lazy Payoff

Prize Categories

Top comments (0)