Kill the daily meeting. Keep the signal.
Slack DM answers, AI-summarized digest, blockers surfaced. $29/mo flat up to 20 users.
The daily standup meeting is the most universally hated 15 minutes in software. Time-zone-spread teams schedule it at 9am somewhere, which means 2am for someone. Every engineer answers the same three questions out loud that could have been written in 60 seconds. The manager takes notes nobody reads. Blockers get buried behind "mostly fine, working on the thing." The meeting ends with everyone nodding and then Slacking each other privately to ask "wait, what did X actually say?"
Async tooling exists. Geekbot has ~20K+ teams paying $2.50–$4/user/mo. Standuply, Status Hero, Troopr, Range, Friday — at least 10 products in this category. The problem is they all charge per-seat, so a 10-person team is at $25–$40/mo before considering overhead. Worse, most of them post raw dumps of everyone's answers to #standup with no summary, so a busy team lead scrolls past 10 identical-looking messages and misses the two blockers buried inside.
The AI opportunity is obvious: read the full dump, extract blockers in one line each, summarize shared themes, surface who's been skipping. A small team does not need Geekbot's fancy dashboards. They need DMs that go out on schedule, responses that get intelligently summarized, and a single digest in the team channel they'll actually read. Priced flat so the third engineer doesn't increase the bill.
A Slack bot that installs in one click. Each user configures their personal standup time (defaults to 10am user-local). Bot DMs three questions: "What did you ship yesterday? What's the plan today? Anything blocking you?" User replies in thread; bot acknowledges with a smile. At the team's configured digest time (default 10:30am team-local), Claude reads all responses and posts a single structured summary to #standup: top themes, individual one-liners, and a clearly flagged Blockers section that @mentions the owner and any relevant teammate.
Bot DMs each user
3 questions at their local time
Collect responses
Stored per-user; follow-up nudge at 1h
AI digest to #standup
Themes, blockers flagged, owners @tagged
The blocker surfacing is the killer feature. Claude reads "waiting for review on PR #742" and automatically writes "Blocker: PR #742 review — @reviewers-of-that-PR." Nobody has to scroll. Managers see blockers at the top. Engineers see their own blockers get acted on, which creates positive feedback and increases standup completion rate — the metric every tool in this category fights over.
Slack has 38M+ daily active users (Salesforce earnings 2024) across hundreds of thousands of paid workspaces. Geekbot's public stats claim 20K+ teams. The async-standup category alone is a $50M+ revenue slice of the broader "meeting reduction" market projected at $5B+ by 2030 (various analyst reports on remote-work tooling).
Stage: mature, per-seat entrenched. Geekbot (acquired by Spectrum Labs 2023) and Standuply dominate the paid tier. Slack Workflow Builder offers a free DIY version that loses signal (no AI summary). Your wedge: AI digest as the differentiator, flat-team pricing (not per-seat) as the pricing hack. Slack App Directory listing + AI-summary demo GIF in the listing header converts.
Four competitor classes: dedicated async standup bots (Geekbot, Standuply), broader remote-management suites (Range, Friday, Status Hero), free Slack Workflow Builder, and "just use a channel" DIY. Your wedge is AI blocker surfacing + flat pricing, neither of which is bundled together elsewhere.
Category leader for async Slack standups. 20K+ teams, acquired by Spectrum Labs 2023. Raw response dumps to channel (no AI summary). Per-user pricing bites at team size 10+.
$2.50–$4/user/mo; free up to 10 users
Direct Geekbot competitor. Adds video responses and meeting transcripts as premium features. Per-user billing, no AI summarization in default plans.
$4–$6/user/mo; complex plan tiers
Broader remote-management platforms. Standups are one of many features. Priced higher ($8–$20/user/mo) because they replace multiple tools. Overkill for teams that just want standups.
Range $8/user, Friday $7.50/user, Status Hero $3–$5/user
Free. Build a form that DMs users, collects responses, posts to a channel. No AI summary, no blocker detection, no analytics. Every team tries this first; most abandon within 60 days because the signal-to-noise is poor.
Free (included with Slack paid plans)
Flat $29/mo up to 20 users. Claude-generated digest with Blockers section as the hero screenshot in the Slack directory listing. 14-day free trial, Slack OAuth install in 30 seconds. Tagline: "The only standup bot that actually reads the responses."
Flat per-team pricing. Free tier captures trials and very small teams. Team tier covers the vast majority of paying customers. Growth tier for larger teams with multiple squads. LLM inference cost per team is bounded (<10 messages/day × ~1K tokens each × Haiku pricing) and trivial compared to ARPU.
$0
1 standup, up to 5 users, 7-day history, basic digest (no AI)
$29/mo
Up to 20 users, unlimited standups, AI summary + blocker detection, 1-year history, Slack & email digest
$79/mo
Up to 100 users, multiple squads, retro questions, Notion/Linear integrations, priority support, 3-year history
LLM cost/team/mo
~$0.60
Gross margin Team
~96%
Target CAC
$30–$60
Free → Team conv.
10–14%
MRR path: 100 Team + 10 Growth = $3.7K/mo. 500 Team + 50 Growth = $18.45K/mo. At 2K Team + 200 Growth = $73.8K/mo ($886K ARR). Slack directory listing with 4.8+ stars drives organic discovery; target CAC stays low because the install is frictionless.
Slack bot + cron + LLM. No UI except a thin settings page. Most of the product lives inside Slack DMs and channels.
OAuth install flow with chat:write, im:write, users:read scopes. Event subscriptions for message.im. Modals for settings.
Billing + settings only. Most configuration happens via Slack slash commands and modals. Admin shows past digests + blocker history for managers who want a web view.
Tables: workspaces, standups, participants, responses, digests, blockers. Slack tokens encrypted via Supabase Vault.
Prompt: take all responses, return JSON with themes, blockers: [{owner_slack_id, summary, suggested_helpers: []}], individual_summaries. Bot posts formatted digest using Slack Block Kit.
Vercel Cron runs every 5 min, checks which users need a DM. QStash schedules the follow-up "hey did you forget?" nudge 1 hour after initial DM if no response. Digest posts fire at team-configured time.
Stripe Checkout for Team/Growth. Slack App Directory listing is the distribution: 3 screenshots (install, DM collection, AI digest), 90-second video, clear pricing.
Copy and paste these into Claude, Cursor, or your favorite AI tool.
Create a Slack bot using @slack/bolt on Node.js hosted on Vercel. OAuth install flow, Supabase backend. Schema: - workspaces(id, slack_team_id, team_name, bot_token_encrypted, installer_user_id, plan, stripe_customer_id, digest_channel_id, digest_time, timezone, created_at) - standups(id, workspace_id, name, questions JSONB, schedule_cron, active) - participants(id, standup_id, slack_user_id, user_timezone, personal_dm_time, active) - responses(id, standup_id, participant_id, date, answers JSONB, submitted_at, latency_seconds) - digests(id, standup_id, date, themes JSONB, individual_summaries JSONB, posted_at, slack_message_ts) - blockers(id, digest_id, owner_slack_id, summary, suggested_helpers JSONB, resolved_at) OAuth flow: /api/slack/install redirects to Slack's OAuth URL with scopes chat:write,im:write,im:history,users:read,channels:read. /api/slack/callback exchanges code, encrypts bot_token via Supabase Vault, creates workspace row. Slash commands: - /standup setup → opens modal to configure questions, times, channel - /standup skip today → participant opts out of today's standup - /standup status → shows today's response state for the team Event handlers: - message.im: if user is in a participant row and responses table has no entry for today, parse their DM reply into the questions JSONB structure. If ambiguous, bot asks a clarifying question.
Build the scheduled DM collection flow via Vercel Cron. Cron job (every 5 min): 1. Query SELECT p.*, s.questions, w.bot_token_encrypted FROM participants p JOIN standups s ON p.standup_id=s.id JOIN workspaces w ON s.workspace_id=w.id WHERE p.active AND s.active AND p.personal_dm_time BETWEEN NOW()-INTERVAL '5 min' AND NOW() AND NOT EXISTS (SELECT 1 FROM responses r WHERE r.participant_id=p.id AND r.date=CURRENT_DATE); 2. For each participant, decrypt bot token, send DM via Slack Web API chat.postMessage: - Opens thread with "Morning! Ready for today's standup?" + 3 questions in a numbered list - Uses Slack Block Kit for a friendly, scannable layout 3. Enqueue Upstash QStash follow-up: if no response row created in 1 hour, send a gentle nudge. Response parsing: - User replies in DM thread with either numbered answers or free-form text. - Try structured parse first (if lines start with "1.", "2.", "3."): map to question indices. - Fallback to Claude Haiku: "Parse this standup response into JSON matching schema {q1, q2, q3}: ..." - Save to responses table. Bot reacts with 👍 emoji on the user's message as ack. Edge cases: - User skips: "/standup skip today" command or replies with "skip" or "off today" — log a response row with answers={skipped: true}. - User responds to yesterday's thread: bot politely ignores (thread timestamp check). - Timezone changes: participant row has user_timezone synced from Slack user profile on DM send.
Generate the AI team digest and post to Slack channel at configured digest_time. Digest cron (fires at workspace.digest_time in workspace.timezone): 1. Collect all today's responses for this standup. 2. Build the prompt: "You are summarizing a team's async standup. Below are responses from N team members. Extract: - themes: 1-3 shared things people are working on (e.g. 'Q2 planning', 'migration sprint') - blockers: any item where someone is explicitly blocked or waiting. For each, identify owner_slack_id and suggest who else on the team might help based on their responses. - individual_summaries: 1-line summary per person, {slack_user_id, one_liner} - skipped: array of slack_user_ids who didn't respond Return strict JSON. Be terse. Use active voice. Responses: {responses_json}" 3. Call Claude Haiku 4.5 with response_format json_schema. 4. Render to Slack Block Kit: - Header: 'Team Standup — {today}' - Themes section: bulleted - Blockers section: each with :warning: emoji, owner @mention, suggested helpers @mention - Individuals section: compact list - Footer: '{N} of {M} responded' + skip list 5. Post to workspace.digest_channel_id, save message_ts to digests table. 6. Email-only option: also send via Resend to a configured CC address for managers who don't live in Slack. Blocker threading: if a digest has blockers, reply in thread 4 hours later asking owner "Still blocked?" and offer to @ help again. Track resolution rate per-user; surface as an analytics metric for Growth tier.
Competitor pricing and user counts shift frequently; verify live pricing pages before marketing claims.
Book a consult and let's turn this idea into your MVP.
Book a Consult (opens in new tab)