Why I built Morgenruf in a Tim Hortons in Kitchener
Add to Slack, free Self-host it
I was sitting in a Tim Hortons in Kitchener on a Saturday morning, double-double in hand, reviewing my team's monthly SaaS bill. One line jumped out at me: Geekbot: $2.50/user/month. For a 12-person team, that's $30/month. $360/year. For a bot that DMs people three questions and pastes the answers into a Slack channel.
Don't get me wrong, Geekbot is a solid product. It works. But staring at that line item while sipping mediocre coffee, I had a thought that wouldn't leave me alone:
A standup bot is fundamentally simple. You DM people questions on a schedule, collect their answers, and post a summary. That's it.
The core loop is almost embarrassingly straightforward. A cron job triggers at the right time for each person's timezone, sends them a few questions via Slack DM, waits for replies, and posts the collected answers to a channel. The whole thing could be a weekend project.
So I opened my laptop right there in the Tim Hortons and started building.
The weekend build
I picked the tools I knew would let me move fast: Python with Flask for the web layer, PostgreSQL for storage, and the Slack Bolt SDK for the Slack integration. Bolt is excellent: it handles all the OAuth, event subscriptions, and message formatting so you can focus on actual logic instead of wrestling with Slack's API quirks.
By Saturday evening I had the core working: a Slack app that could DM a list of users a set of questions on a schedule, collect responses, and post a formatted summary to a channel. The bones of a standup bot, running locally.
Sunday was about making it real. I added a web dashboard, persistent scheduling with timezone support, and the ability to customize questions per standup. By the time the Tim Hortons closed, I had something that could genuinely replace Geekbot for my team. That first weekend's loop is still the shape of the standups Morgenruf runs today.
Going beyond the basics
Here's the thing about building your own tool: once the foundation is there, adding features that paid tools charge extra for (or just don't offer) becomes trivial. So I kept going:
- Mood tracking. Each standup response includes an optional mood indicator. Over time you can spot burnout patterns before they become problems.
- Webhooks. Fire standup data to any URL. Pipe it into Notion, Airtable, your own analytics pipeline, whatever. Your data, your rules.
- CSV export. Download raw standup data anytime, without asking anyone.
- MCP server and AI integration. This one's genuinely new. Morgenruf exposes an MCP server so AI tools like Claude can query your standup data directly. Ask "what blockers came up this week?" and get an actual answer from your data.
- Blocker detection. Automatic flagging when someone mentions a blocker, so nothing slips through the cracks.
- Digest emails. A summary of the standup delivered to your inbox, for a lead who does not live in Slack.
Self-hosted means you own your data
This was a non-negotiable for me. With Geekbot, your standup responses, which often contain sensitive information about what your team is working on, what's blocked, and how people are feeling, live on someone else's servers. You're trusting a third party with your team's daily internal communications.
Self-hosted, Morgenruf runs entirely on your infrastructure. Your database. Your servers. Your network. A self-hosted install talks to Slack only, plus Zoom, email (Resend), an AI provider or PostHog analytics if the operator turns those on. For teams working on anything remotely sensitive (which is most teams), this matters.
Production-ready, not just a hobby project
I've seen too many "I built X in a weekend" posts where the project is a barely-working prototype. I didn't want Morgenruf to be that. So I invested the time to make it genuinely production-ready:
- Docker. A single
docker compose upand you're running. - Helm charts. For teams that run Kubernetes, proper Helm charts with all the configuration you'd expect.
- AWS deployment. CloudFormation templates for ECS and RDS, in the aws-deploy repository, if you want a managed setup on AWS.
- Health checks, logging, error handling. The boring stuff that makes the difference between a demo and something you can actually rely on.
Compose on a spare machine and Helm on a cluster are written up step by step on the page that covers installing Morgenruf. The AWS templates carry their own instructions in their repository.
Free forever. Actually.
Morgenruf is MIT licensed. No open-core bait-and-switch where the useful features are behind a paywall. No "free for up to 5 users" limitations. Self-hosted, it talks to Slack only, plus Zoom, email (Resend), an AI provider or PostHog analytics if the operator turns those on. No "we'll figure out monetization later."
The entire codebase is open source. You can read every line, fork it, modify it, run it for a team of 5 or a team of 500. Self-hosted, the only cost is the server you run it on, and a basic VPS or container runtime is a few dollars a month, flat, regardless of how many users you have.
Geekbot today is free for up to 10 users, then $3/user/month, or $2.50 billed annually (prices checked 2026-09-26). For a 50-person engineering org on annual billing, that's $1,500/year you could be saving.
The name
Morgenruf is German for "morning call." It felt right: a standup bot is essentially a morning call that checks in with your team. Plus, most of the good English names for standup bots were already taken.
Try it
If you're paying for Geekbot, Standup & Prosper, or any other standup SaaS, I'd genuinely encourage you to give Morgenruf a shot. The page on Morgenruf as an open-source Geekbot alternative has the detail if you want it before you move. The migration is straightforward, and you might be surprised how good it feels to own your tools.
Ready to ditch per-user pricing?
Add Morgenruf to Slack on the free hosted instance in about two minutes, or self-host it. Free and open source.
It stopped being a standup bot
This post is about one weekend and one line on an invoice, and it was accurate when it was written. It is no longer the whole picture. The same app now runs random coffee chats, which is the job people were paying Donut for, and peer recognition on a daily token budget, which is the job people were paying HeyTaco for. There is an insights page that answers the questions needing two of those datasets at once, such as who answers every standup and is thanked by nobody.
The arithmetic that started it has got worse for the subscriptions, not better: three tools, three bills, three sets of data in three companies. The comparison page works through what each of them still does better, because some of it genuinely is better. More modules are coming, and the changelog is the honest record of what has actually shipped rather than what was announced.