Changelog
What's new in Levee. Click the version pill anywhere in the app to come back here.
This is the public changelog — only changes a user would notice (new features, UX improvements, bug fixes they'd feel). Engineering notes, admin tooling, infrastructure work, and refactors live in the internal changelog and aren't shown here.
v0.24.4 — 2026-05-23
Fixed
- Restored the styling of the paginated dashboard tables (Follow-ups, Risks, Stuck, Overdue) after the v0.24.3 security update inadvertently blocked a stylesheet they rely on.
v0.24.3 — 2026-05-23
Security
- Added a Content-Security-Policy and other protective HTTP headers across the app (including clickjacking protection), and rate-limited sign-in, sign-up, and password-reset requests to guard against automated abuse. Continued hardening from the internal security review.
v0.24.2 — 2026-05-23
Security
- Tightened account security: signup now validates email addresses more strictly, and the admin panel uses safer confirmation prompts. Routine hardening from an internal security review.
v0.24.0 — 2026-05-23
New
- Agents — your own recurring assistants. A new Agents page lets you set up agents that run on a schedule and do a small job for you: watch a Jira issue, a Jira (JQL) search, or a Slack channel, write a short briefing, and deliver it — post to a Slack channel, comment on a Jira issue, or email you. Describe what you want in plain English ("every morning at 8, check DMS1-2098 and post status to #dms-security"), review the spec it drafts, and switch it on. Agents run on Levee using the Slack and Jira you've already connected — nothing extra to set up. You can run any agent on demand, stop and resume it, edit it, and see its run history. Jira comments post only when something actually changes (so the ticket doesn't get spammed), and an agent can retire itself once its ticket is Done. Deliver options include posting to a Slack channel, sending a Slack DM to a teammate, commenting on Jira, or email — with searchable people and channel pickers so you don't have to look up IDs.
v0.23.1 — 2026-05-21
Changed
- The daily digest now arrives once a day at noon, instead of twice (12:00 and 18:00). Existing schedules that were on the old twice-daily default move to noon automatically. Want a different time, or more than one? Set it on the Profile page.
v0.23.0 — 2026-05-21
New
- Self-monitoring. Levee now runs an automatic health and sanity check every 15 minutes and right after each deploy — verifying the site is up, key data is correct (including that bots stay out of your Slack queues), and known past bugs haven't crept back. If anything breaks, it DMs you on Slack and records it in the admin errors page, so problems get caught before you notice them.
v0.22.3 — 2026-05-21
Fixed
- Bots are now reliably kept out of your Slack queues and digest. The previous filter missed them because Slack's search results don't consistently flag bot authors — so the @Levee digest and the Jira app were still slipping into your DMs list and the daily digest. Levee now confirms each sender against Slack directly and drops anyone that's a bot/app. Your queues and digest show only real people.
v0.22.2 — 2026-05-21
Fixed
- Bots no longer show up in your Slack queues. Messages from bots and apps — the @Levee digest bot, the Jira app, Slackbot — are now filtered out of the Mentions and DMs lists, the dashboard counts, and the daily digest. Slack's search doesn't reliably exclude them on its own, so Levee now drops them after the fact. Your reply queues only show real people.
v0.22.1 — 2026-05-14
New
- "Suggest reply" is now on every Jira issue, not just "Needs your reply". Every row in every Jira queue (Approval, Risks, Stuck, Overdue, Follow-ups, Done/Discarded) has a Suggest reply button. It opens a modal with the deep-context draft, the "Context Levee used" panel, and a Post button — so you can draft and post a grounded comment on any ticket without leaving the dashboard.
v0.22.0 — 2026-05-14
Improved
- Suggested Jira comments now read the whole picture, not just the ticket. When you click "Suggest reply" on a Jira issue, Levee now builds a full dependency dossier first — linked issues (including the ones already done, because a resolved blocker is the key signal), sub-tasks (what work is still ahead), the parent epic, the last comments on anything blocking it, any attachments (designs / requirements / scenarios — text ones are read in full), the transition history, and the complete conversation. The draft is written as if the context were already in your head: it references the actual blockers and remaining sub-tasks, notes when a dependency has cleared, and answers the latest question. A collapsible "Context Levee used" panel shows exactly what informed the draft.
v0.21.2 — 2026-05-14
Improved
- Footer tidy + BetaList badge. Landing-page footer now links to Features and to the Install hub (instead of pointing straight at Add-to-Slack), matching the same set of links on the install / features pages. Both footers also carry the BetaList "Featured" badge.
v0.21.1 — 2026-05-14
New
- Done / Discarded queue under Follow-ups. When a follow-up issue closes (status moves to Done, or it's discarded/won't-do), it slides into a new "Done / Discarded" table so you can confirm the resolution. Rows stay visible for 4 days from the close date, then disappear automatically. Each row has a Snooze button if you want to drop it sooner.
v0.21.0 — 2026-05-14
New
- Pick which Jira issues to triage instead of taking the whole table. Every row in every Jira queue (Needs reply, Approval, Risks, Stuck, Overdue, Follow-ups) now has a checkbox. Check some — or all — and a "N selected · Triage selected →" bar slides up at the bottom. Clicking opens Compose with just those issues pre-loaded. Your selection persists across tab switches.
v0.20.1 — 2026-05-14
Fixed
- Recipient typeahead is readable in dark mode. The user-suggestion dropdown on the Compose tab was using a hardcoded white background and grey text — which rendered as low-contrast grey-on-dark inside the dark theme. The dropdown now uses the theme's surface and text colours, so names are clearly visible regardless of light/dark mode.
v0.20.0 — 2026-05-14
New
- Help center. Sidebar now has a Help entry that opens
/help — a searchable manual with task-oriented articles for Triage, Jira, Slack, Dashboard, and Setup. Type into the search box to filter; click any article for step-by-step instructions. Five starter articles to ship: Getting started, Generate your first Triage briefing, How the daily Slack digest works, Six Jira queues explained, Reading the Dashboard. More articles are dropped in as .md files — no code changes needed.
v0.19.4 — 2026-05-14
Fixed
- Fewer false alarms on the admin errors page. Two specific signals from the live errors panel addressed: the AI rate limit was triggering on normal admin usage (a Triage page-load can easily fire 5+ AI calls), so the default is now 20/min (up from 10) and admins get 3× of that. And Slack's
users.list rate-limit error in the typeahead is now handled gracefully — Levee honours Slack's Retry-After header, dedupes concurrent fetches, and caches the result for 30 min instead of 10.
v0.19.3 — 2026-05-14
Improved (admin)
- Users table now shows last login + connection status. Two new columns on the admin Users page: a green/grey Jira and Slack pill per user (struck-through when not connected), and the time of their last sign-in. Quickly see who's actively using Levee and who has a half-finished setup.
v0.19.2 — 2026-05-14
Fixed
- Slack tab no longer shows the daily digest as a "DM awaiting reply". The bot's own messages were getting picked up by the Mentions / DMs search and counted as conversations needing a response. Every Slack query — on the Slack page, in the briefing, and in the digest — now excludes anything sent by the Levee bot.
v0.19.1 — 2026-05-14
New
- Social-share preview image. When someone shares a leveehub.com link in Slack, Twitter, LinkedIn, iMessage, or any other modern app, it now renders with a proper 1200×630 preview card — navy background, big italic LEVEE wordmark with the signature water-cut, tagline, and the four module names. Replaces the previous tiny favicon thumbnail.
v0.19.0 — 2026-05-14
New
- SEO basics across all public pages.
robots.txt and sitemap.xml are now served at the root so Google can crawl Levee properly. Every public page now declares its canonical URL, has an explicit index, follow robots tag, and ships richer Open Graph metadata (larger Twitter card, og:image:alt, locale). The landing page also carries structured data (SoftwareApplication + Organization + WebSite) and feature pages include BreadcrumbList + Article blocks so search results can show a breadcrumb trail. Privacy / Terms / Changelog now have proper canonical URLs and unique descriptions instead of generic boilerplate.
v0.18.0 — 2026-05-14
New
- AI cost protection. Three layers prevent abuse if a session is hijacked or if something runs away: a per-user daily cap (default $2, admin can raise per-user), a global daily kill-switch ($20 by default — pauses all AI for the day if hit), and a 10-call-per-minute rate limit on every AI-fronting endpoint. Cap trips and rate-limit hits show up in the admin errors panel under
ai:user_cap, ai:global_cap, and ai:rate_limit so abuse is visible fast.
v0.17.3 — 2026-05-14
Fixed
- Feedback form is now readable. The Title input had no visible border or background — it looked like floating text. Custom radio buttons replace the browser default so all three Type options (Feature request / Bug report / General) show the same blue-bordered, blue-dot active state when selected. The Send feedback button is now a brighter, bolder blue with a hover lift.
v0.17.2 — 2026-05-14
Fixed
- /admin/emails page now renders. Was wrapped in a plain
<main> element that the dark theme positions to zero-width, hiding the content under the sidebar. Now uses the same app-shell / main-pane / wrap structure as every other admin page, so the template list, action buttons, and Run-tick panel are visible.
v0.17.1 — 2026-05-14
Fixed
- Server now boots after the v0.17.0 lifecycle-email shipment. A missing
export on one helper inside the mailer was crashing Node at startup. No functional change beyond restoring the server.
v0.17.0 — 2026-05-14
New
- Lifecycle emails. Levee can now send three feature-walkthrough emails — one each for Triage, Slack, and Jira — to keep new users discovering features and to re-engage anyone who's been away. The emails include action-card mockups so they look like the in-app experience, not a wall of text. One email per user per week, max, and every email has a one-click unsubscribe.
v0.16.1 — 2026-05-14
Improved
- The errors page now surfaces what's new. Brand-new error signatures (first seen in the last 24h) are pinned to the top of the list with a yellow "NEW" pill. A "New today" tile + a one-line banner make it obvious at a glance whether anything broke recently — you don't have to dig through history to spot regressions.
New
- Anthropic circuit-breaker. If Anthropic returns 5xx/429 (or times out) three times in a row, Levee short-circuits AI calls for 60 seconds instead of piling on retries. Calls during the cool-down return immediately with a clear "Anthropic temporarily unavailable" message. First successful call after cool-down closes the circuit. Each trip is logged once to
/admin/errors as ai:circuit_breaker.
v0.16.0 — 2026-05-14
Improved
- The admin errors page now actually catches bugs. Until now most server-side errors — API route crashes, AI call failures, daily-digest send errors, Slack/Jira API blow-ups — only printed to the server console and never made it to
/admin/errors. The wrap helper that handles every /api/* route now records the error to error_logs before returning the 500, so the next time something silently breaks you'll see it in the admin panel instead of having to SSH and tail logs.
v0.15.3 — 2026-05-14
Fixed
- Action-card buttons on the feature pages now render correctly. The Send / Post comment buttons on Triage / Jira / Slack feature pages were appearing as oversized white boxes with huge icons because the CSS that styles them never made it into the file. They now show as the intended compact blue/amber pill buttons with 12px icons.
v0.15.2 — 2026-05-14
Improved
- Feature pages now show the action — not just the AI summary. Triage, Jira, and Slack pages each include interactive mockups with editable draft boxes and visible Send to Slack / Post comment / Send reply / Send DM buttons. Recipient pills with the right icon (Slack avatar or Jira diamond), an Edit button, and a hint line under each card make it obvious these are one-click actions, not static text.
v0.15.1 — 2026-05-14
Fixed
- Module cards on the home page are now visible. The "Tour the four modules" cards were styled for a dark background but the section sits between two cream sections, so the cards appeared cream-on-cream (invisible). They now match the existing "What you get" cards — white on cream, navy headings, with a navy icon plate.
v0.15.0 — 2026-05-14
New
- Features pages. New public
/features section with a dedicated page per module — Triage, Jira, Slack, Dashboard — each with stylised mockups and a per-feature walkthrough. Linked from the home page (four hero cards under "Tour the four modules") and the topbar. Same look-and-feel as /install.
v0.14.2 — 2026-05-14
Fixed
- Mentions / DMs KPI counts now match what you see in the list. They were counting individual messages instead of conversations — so when one person sent 15 DMs, the KPI tile said 15+ but the list only showed 1 card. Now the tile counts conversations (one per DM partner, one per thread for mentions) so it lines up with what's on screen.
- "Already replied" now applies at the conversation level. Previously if someone sent 15 DMs and you replied to one, only that single message was filtered — the other 14 still inflated the count. Now if you've sent anything in the conversation after their most recent message, the whole conversation is treated as handled.
v0.14.1 — 2026-05-14
Fixed
- "Mentions awaiting reply" and "DMs awaiting reply" KPIs on the Dashboard now match the Slack page. They were diverging because the Dashboard counted raw search hits while the Slack page counted what's left after filtering out conversations you've already replied to. Both tiles now read from the same server-side source — same search, same reply filtering, same number.
- "Follow-ups awaiting" KPI on the Dashboard now matches the Jira page. A subtle bug in v0.14.0 used the oldest of your comments per issue as the "stale" cutoff, which under-counted follow-ups. Now uses the most recent comment, like the Jira page has always done.
v0.14.0 — 2026-05-14
Improved
- Dashboard KPI counts now never drift between pages. Needs-reply, approval, risk, stuck, overdue, and follow-ups — the same six tiles that appear on the main Dashboard and on the Slack/Jira tabs page — now read from a single backend source. If you tune one query, both pages update at once. Side effect: page loads are slightly snappier because the six queries run in parallel server-side instead of six round trips from the browser.
v0.13.1 — 2026-05-14
Fixed
- "Last digest" card on the Dashboard now actually shows when the digest ran. It was reading a field that didn't exist on the connections-status endpoint, so it stayed blank no matter what. Both the Dashboard card and the Slack page card now read the same data and render identically — fix one, fix both, forever.
v0.13.0 — 2026-05-14
Improved
- Triage Compose drafts now read the conversation on each issue. Before clicking Generate, Levee pulls the last 4 comments on every issue you pasted in and feeds them to the AI alongside the metadata. The draft now reflects what's actually being said — references the specific blocker, hand-off, or decision in the comment thread — instead of being a generic ping with just the issue summary. Works for both single-recipient drafts and the "route by assignee" multi-mode flow.
v0.12.1 — 2026-05-14
Fixed
- "Generate digest" empty state now tells you what actually happened. Instead of always saying "No conversations needing your reply in the last 48 hours", the card now surfaces the real Slack response — raw counts of mentions and DMs found, or the actual error if Slack search failed (e.g. token expired, missing
search:read scope). A "Reconnect Slack" button appears when the message looks like an auth/scope issue.
v0.12.0 — 2026-05-14
New
- Daily digest now arrives from @Levee. Until now the digest was sent from your own Slack account — a DM from you to you — because the Slack connection didn't include a bot token. Levee now requests bot scopes during install so the digest posts under the Levee app's identity. If your Slack connection was made before this update, the Slack tab will show a banner inviting you to reconnect.
- "Last digest" card now shows when it actually ran. Instead of the meaningless "(On open)" label, the Slack page shows the real timestamp of the most recent digest (e.g. "today, 7:02 AM", "yesterday, 6:30 AM") with a link to the message and the status (ok / failed).
v0.11.1 — 2026-05-14
Fixed
- Slack mentions and links now read naturally in the Mentions / DMs tabs and full-conversation view. A message like
<@U044A7FMNLC|Khalid Alomar> can you check this <#C123|general> now renders as @Khalid Alomar can you check this #general — no more raw Slack ID tokens leaking through. Same cleanup applies to user-group mentions (@devops), @channel / @here / @everyone, and hyperlinks.
v0.11.0 — 2026-05-14
Improved
- Suggested replies and comments now sound like you. When you first connect Slack + Jira, Levee quietly studies your recent writing — last ~100 Slack messages (DMs + channels) and ~100 Jira comments — to learn your tone, openers, closers, and the way you push decisions through. Every AI draft after that (briefing actions, Slack DMs, Jira comments) is steered to match your voice instead of sounding like a stock LLM.
v0.10.3 — 2026-05-14
Fixed
- @mentions in briefing-sent Jira comments now actually tag the user. When the AI draft says "@Omar Nabil" and you click Send, Levee now resolves each name to a Jira account and posts a proper mention pill — not plain text. Same effect as typing @Omar in Jira directly.
v0.10.1 — 2026-05-14
Improved
- Comment enrichment now applies to every issue in the briefing, not just stuck / risks / overdue. The AI now reads the conversation for everything it surfaces — needs-reply, approvals, active work — so summaries reflect what's actually going on, not just metadata. Capped at 30 issues per briefing to keep costs predictable.
v0.10.0 — 2026-05-12
New
- Briefings now read the actual conversation on at-risk issues. For every issue in risks / stuck / overdue (and the target's active queue in user-mode briefings), Levee fetches the last 4 Jira comments and feeds them to the AI. The summary now reflects what's actually happening — "Sara pushed Q2P-20 to next sprint waiting on data team" instead of just "Q2P-20 is in In Progress".
v0.9.1 — 2026-05-12
Improved
- Jira issue keys in briefings are now clickable. Anywhere a key appears (situation summary, focus, suggested actions, follow-ups table) clicking it opens the issue in Jira in a new tab.
v0.9.0 — 2026-05-12
New
- Briefings about a specific teammate. The Triage Briefing tab now has a third mode: pick "Specific user (Jira)" and start typing a name to scope the AI briefing to a single teammate. Useful before a 1:1, or any time you want a third-person view of what's on someone else's plate. Pulls their Jira queue (active, approval, risks, stuck, overdue, recently active) plus your recent DM history with them and flags any of your follow-ups to them that are still awaiting reply.
v0.8.7 — 2026-05-12
Fixed
- "Today's read" is now visible immediately when the Dashboard loads, with a "pulling your data to summarise…" placeholder. Previously it popped in after several seconds.
- The AI summary now sees real numbers. Generation triggers after Jira and Slack data finishes loading, so the briefing reflects today's actual queue rather than the placeholder values that were there a moment earlier.
v0.8.6 — 2026-05-12
Improved
- "Today's read" narrative card moved to the Dashboard, right under the greeting and tip-of-the-day. Removed from the Jira / Slack tabs page where it didn't belong.
v0.8.4 — 2026-05-12
Improved
- Greeting and tip-of-the-day are back on the Dashboard. They previously lived on the Jira/Slack tabs page; now they're with the header banner on the main Dashboard where they belong.
Removed
- The "today's AI usage" badge from the Dashboard header. AI cost is tracked internally only; not surfaced to users.
v0.8.3 — 2026-05-12
Improved
- Today's AI usage now appears in the header banner on the Dashboard: number of AI calls you've made today and how much they've cost.
- Cleaner Dashboard header. The Anthropic indicator was removed — Levee manages AI for you, so there's no per-user connection to show. Only Jira and Slack status remain.
v0.8.1 — 2026-05-12
New
- Changelog — this page. The version pill in the top-right of every page now opens it.
Improved
- Click target for the version pill is bigger and easier to spot on hover.
v0.8.0 — 2026-05-12
New
- Levee now manages the AI for you. No more pasting Anthropic API keys. AI features — briefings, suggested replies, daily digests — all run on Levee's shared key.
- Faster onboarding. Setup is now four steps (Welcome → Profile → Jira → Slack → Done) instead of five.
Improved
- The "AI" section on
/connections is now a one-line status card instead of an input form.
- Significant cost savings under the hood: repeated AI requests (like generating briefings minutes apart) reuse cached prompt prefixes.
v0.7.1 — 2026-05-12
Fixed
- No more redundant nudges. If someone you're following up with already responded before you sent the follow-up, the briefing now recognises the conversation is resolved and won't suggest pinging them again. ("Yara sent the ITBA Excel 3 days ago; your follow-up was redundant.")
v0.7.0 — 2026-05-12
New
- Edit & Send on suggested actions. Every action card on a briefing is now executable: edit the draft inline, then click Send to post it to Jira or Slack — no copy/paste to other tabs.
- Multiple recipients on Slack DMs. Suggested Slack DM actions can be fanned out to several people at once. The AI's recipient is pre-loaded; click
+ Add to include more people.
Improved
- Editable channel input on Slack-channel suggested actions, in case you want to redirect a post.
v0.6.2 — 2026-05-12
Fixed
- Briefing now knows when Jira tickets are closed. Follow-ups for Jira comments are checked against the issue's current status — if it's been resolved (Done / Closed) or another author commented after you, the briefing won't suggest a re-ping.
v0.6.1 — 2026-05-12
Fixed
- Threaded Slack replies are detected reliably. When you replied inside someone else's thread, the briefing previously couldn't find subsequent replies. Now it looks at the full thread.
v0.6.0 — 2026-05-12
New
- Soft delete on the Briefing History tab. Hide briefings you don't want cluttering the list. Deleted briefings stay in Levee's memory so the AI can still reference patterns across past briefings. A "Forget permanently" option removes them from memory entirely.
- AI memory across briefings. When generating a new briefing, the AI now sees compact summaries of your last 30 days of briefings. Helps it spot recurring blockers and persistent themes.
v0.5.3 — 2026-05-12
New
- Open follow-ups now show reply status. The follow-ups table in each briefing shows ✓ replied / ⏳ awaiting per row, with an excerpt of the reply when found.
v0.5.2 — 2026-05-12
Fixed
- Briefing output card now renders correctly in dark mode (was previously a white card on a dark page).
v0.5.1 — 2026-05-12
New
- Briefing tab on the Triage page. Three tabs: Compose / Briefing / History. Generate a one-click summary of your Jira + Slack queue with suggested next actions. Pick "Specific project" mode to scope the briefing to one Jira project.
- Slack recipients in briefings now resolve to display names instead of raw user IDs.
v0.4.1 — 2026-05-11
Fixed
www.leveehub.com is now reachable (301 → leveehub.com).
v0.4.0 — 2026-05-11
New
/install is now a hub with separate pages for Slack and Atlassian install flows.
v0.3.5 — 2026-05-11
Fixed
- No more daily Atlassian re-connect. Access tokens are automatically refreshed when they expire — your Jira connection now lasts indefinitely as long as you use Levee at least every 90 days.
v0.3.4 — 2026-05-11
Fixed
- Clicking Slack or Jira in the sidebar no longer occasionally redirects to the Dashboard after a few seconds.
v0.3.2 — 2026-05-11
Improved
- Sign out moved into the Profile page. Sidebar is cleaner; sign-out is now a labelled button at the bottom of
/profile.
v0.3.1 — 2026-05-11
New
- Sidebar can be collapsed to an icon rail. Click the chevron at the top of the sidebar (or anywhere on the rail when collapsed) to toggle. Keyboard shortcuts:
[ collapses, ] expands. Your preference is remembered per browser.
v0.2.2 — 2026-05-11
New
- Light / dark theme. Pick your preferred theme on the Profile page. Defaults to dark.
Fixed
- Jira "needs your reply" results scoped correctly when you have a project filter set.
- Slack reply detection now works for regular channels (was DM-only before).
Improved
- Dismiss buttons added to Slack reply cards and digest items.
v0.2.1 — 2026-05-10
New
- Unified sidebar across all authenticated pages. Cleaner navigation, fewer surprises.