Geekbot

geekbot.comcontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

Runs asynchronous standups in chat: it asks each person the same questions on a schedule and posts the answers to a channel.

Promptfree, for everyone, and the only version there is
Build me an asynchronous standup bot that replaces Geekbot: the same questions on a schedule, in everyone's own time zone, posted where the team reads.

STACK
- Node 20+ with Fastify
- SQLite through better-sqlite3, WAL mode
- A worker for the schedule, separate from the web process
- One chat platform adapter to begin with
- Caddy in front

THE DATA MODEL
- standups: id, name, questions_json, schedule_json, channel, timezone_mode, reminder_minutes, is_active, anonymous_summary
- participants: id, standup_id, user_external_id, timezone, weekdays_json, local_time, is_paused, paused_until
- runs: id, standup_id, participant_id, due_at_utc, asked_at, completed_at, skipped_at, reminded_at, status
- answers: id, run_id, question_index, body, answered_at
- posts: id, run_id, channel, external_message_id, posted_at
- moods: id, run_id, value, at — one optional number, if the standup asks for it
- Every run recorded, including the skipped ones. Participation over time is a real signal and it cannot be reconstructed later

SCHEDULING IN EVERYONE'S OWN TIME
- Each participant has their own zone and their own local time, so 09:30 means 09:30 where they are
- The worker computes the next due instant per participant from their schedule and stores it; it wakes every minute and asks whoever is due
- Weekdays per participant, so a four-day week is respected
- Holidays and pauses, with an end date rather than indefinitely
- Daylight saving handled by storing instants and recomputing from the rule, with tests for both transitions. A standup bot that asks at the wrong hour twice a year is a bot people mute

ASKING
- A direct message with the first question; the next comes after the answer, one at a time. A wall of five questions gets one-line replies
- Answers accepted in any order if somebody wants to reply in one message — parse it, and confirm what was recorded
- Skip, snooze for an hour, or answer later from a link
- One reminder, at a configurable offset, and never a second. The bot that nags is the bot that gets removed
- Editing an answer before the post goes out, and after it with the post updated in place

POSTING
- One message to the channel per participant, or one combined summary — chosen per standup
- Formatted so it is readable at a glance: name, then each question with its answer, with blockers made visually distinct
- Threaded, so discussion of an answer does not fill the channel
- If nobody has answered, post nothing rather than a message saying nobody answered

THE PLATFORM ADAPTER
- One interface: send a direct message, receive a reply, post to a channel, update a message, list members
- Each platform needs its own application, its own permission scopes and, on some, a review before it can message people. Say this at the top of the README — it is the wall this project hits, and it is administrative rather than technical
- Events received by webhook with signature verification and idempotency by delivery id
- Rate limits respected with backoff; every platform has them and they are stricter for direct messages
- Keep the adapter thin so the rest of the code never knows which platform it is talking to

REPORTS
- Participation rate per person and per standup over time, computed at query time
- Answer length and response delay, which together say whether the standup is still useful or has become a chore
- Mood over time if it is being collected, aggregated and never shown per person unless the standup says it is not anonymous — a mood question that identifies the answerer collects politeness rather than mood
- A weekly digest to the channel

BEYOND STANDUPS
- The same machinery runs retrospectives, polls, and a one-off question to a group
- A survey mode where answers are collected and only the aggregate is posted

OPERATIONS
- .env: DATABASE_PATH, BASE_URL, PLATFORM_TOKEN, SIGNING_SECRET, SESSION_SECRET
- Migrations on boot, each once
- The worker is idempotent: asking twice for the same run is impossible because the run row records that it was asked
- Nightly backup off the machine, restore script
- Health endpoint reporting the worker's last tick and the oldest overdue run

WHAT MATTERS MOST
Per-participant time zones and the single reminder. Build the schedule computation with its daylight-saving tests first, and be disciplined about the nagging — the whole value of an asynchronous standup is that it costs less attention than a meeting, and a bot that pings four times has spent the saving.

Give me the repository, one platform adapter, migrations, .env.example, a seed standup, and a README with deploy steps behind Caddy and the application setup for the platform.

What you lose

  • Integrations with each chat platform, maintained as their APIs change
  • Reports on participation and mood over time
  • Timezone-aware scheduling per participant

If you would rather not build

  • A scheduled message and a thread, which is free
  • Any chat platform's workflow builder
  • A shared document updated daily

What it costs

read from their page 15 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$2.50/mo—15 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

Mattermost

$0

Self-hosted chat with a plugin system for building the bot into it.

mattermost/mattermostfree · open source

n8n

$0

Schedules the questions and posts the digest with no bot code.

n8n-io/n8nfree · open source

Why this verdict

our own opinion · changed only by a person

89/100

Verdict yes at 89. A cron job and a chat API. Asking at the participant's local time and only reminding once are the two decisions that matter.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 2/day
views01230 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Geekbot

answered from the record above

Is Geekbot free?

No — the plan we track is $2.50 a month. Around $2.50 per participant per month billed monthly, cheaper annually.

Can you replace Geekbot by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 89 out of 100, build time one session. Read what you lose before you decide.

How much does Geekbot cost?

$2.50 a month on Standard — $30 a year. Recorded 10 Aug 2026.

What do you lose by replacing Geekbot?

Integrations with each chat platform, maintained as their APIs change; Reports on participation and mood over time; Timezone-aware scheduling per participant. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Geekbot?

Yes: Mattermost, n8n. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 33 in Tasks & project management

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc