DEV Community

Cover image for How I Built an AI Standup Bot for Jira with Atlassian Forge
piran aminullah
piran aminullah

Posted on

How I Built an AI Standup Bot for Jira with Atlassian Forge

I got tired of manually writing my daily standup every morning — checking Jira, remembering what I did, typing it up in Slack. So I built an app that does it automatically.

What it does

Auto Standup Bot is a Jira Cloud app that:

  • Reads your assigned tickets (completions, in-progress, blockers, comments)
  • Pulls in GitHub commits and PRs (optional)
  • Uses AI to generate a clean standup message
  • Posts it to Slack or Microsoft Teams on your schedule
  • You can also generate on demand, edit the message, and send manually.

Tech stack

  • Atlassian Forge — serverless backend with Key-Value Store, webtriggers, and scheduled triggers
  • React + TypeScript — Custom UI frontend using Atlaskit (Atlassian's design system)
  • OpenAI GPT-4o-mini — standup generation
  • Slack OAuth + GitHub OAuth — one-click integrations using Forge webtriggers as callback URLs

Things I learned

Forge's api.asUser() can be flaky on page load. The user auth context isn't always ready immediately. I had to add retry logic — if the first Jira API call returns empty, wait 1.5 seconds and try again.

Making AI not hallucinate was harder than expected. The AI kept inventing fake ticket numbers to sound detailed. Fixed it by adding explicit prompt instructions: "ONLY reference ticket keys and PR numbers that appear in the provided data. NEVER fabricate details."

Slack OAuth was worth building. Originally I had users paste webhook URLs, which was painful. Switching to OAuth (one-click "Connect to Slack" button) reduced setup friction massively.

The Marketplace review process is thorough. Security questionnaire, functional testing, branding checks, documentation review. Took about a week but it was a good forcing function to clean everything up.

KVS has no query capabilities. It's purely key-value, so you need to think about your key naming strategy upfront. I use patterns like config:{accountId}, history:{accountId}:{date}, slack-thread:{channelId}:{date}.

Current status

Free on the Atlassian Marketplace, very early stage. Built it for myself and decided to ship it publicly.

If you use Jira daily, I'd love feedback. And if you're thinking about building on Forge, happy to answer questions — there's not a ton of content out there about the developer experience.

Top comments (0)