Uni Chat Monitor

Local AI · Self-hosted

My noisy uni group chat, quietly read by a local AI that pulls out the deadlines and lets me search the rest.

messenger-bot illustration

A university Messenger group is a firehose — announcements, deadlines and links buried under hundreds of off-topic messages. This is a fully self-hosted watcher that reads the chat, keeps the signal, and throws away the noise — all on my own machine.

100%local · self-hosted
RAGask-it-anything search
dailyauto summaries
0ports exposed

The problem

Important things — a moved deadline, a submission link, a room change — get posted once and then immediately buried. Scrolling back to find them is the worst, and missing them is expensive. I wanted something that read the chat so I didn't have to.

The pipeline

MessengerFB uni group
Bridgemautrix-meta → Synapse
AI Botclassify · extract · summarise
ChromaDBvector memory
DashboardFastAPI + React

Messenger doesn't have a friendly API, so the chat is bridged into open infrastructure first:

  • Bridgemautrix-meta bridges the Facebook Messenger group into a Matrix room on a self-hosted Synapse server.
  • Understand — a Python bot listens to that room, classifies each message, and extracts deadlines, links and announcements with a local LLM.
  • Remember — everything is embedded into ChromaDB, and the bot posts a daily summary of what mattered.
  • Show — a FastAPI + React dashboard surfaces the extracted info and search.

Ask it anything

Because every message is embedded in a local vector database, the chat becomes queryable. Ask "when's the database assignment due?" and a local Ollama model answers from the actual messages — retrieval-augmented over the group history, no cloud involved.

Private by design

The whole stack runs in a Podman pod that shares a dedicated Tailscale node's network namespace. Nothing listens on the host — zero ports exposed — and I reach the dashboard from my phone over the tailnet at http://uni-chat:8080 via MagicDNS, with ACLs controlling who else can. My machine's own Tailscale identity stays untouched.

Built with

Python bot (classification, extraction, daily summaries, RAG), mautrix-meta + Synapse for the Messenger→Matrix bridge, Ollama for the local LLM, ChromaDB for vector storage, FastAPI + React for the dashboard, and Tailscale + Podman for zero-exposure self-hosting.