> ## Documentation Index
> Fetch the complete documentation index at: https://docs.buildbetter.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Topics

> Live, real-time groupings of the most active themes in your recent customer signals — accessed as a tab inside Triage

The Topics tab in Triage is BuildBetter's surface for **live topics** — real-time groupings of related customer signals from Slack and Intercom. Topics now lives inside Triage so you can see hot themes alongside individual signals, project decisions, and PRs in one inbox.

<Info>
  Topics is in **early access**. Sources, manual actions, and notification surfaces will continue to grow.
</Info>

## What's a Topic?

A topic is an AI-generated grouping of related conversations about the same underlying issue, request, or theme. Each topic carries:

| Field              | What It Means                                                     |
| ------------------ | ----------------------------------------------------------------- |
| **Name**           | AI-generated topic name (e.g., "Payment processing fails on iOS") |
| **Description**    | Optional elaboration                                              |
| **Type**           | Bug / Complaint / Feature Request / Feedback / Discussion         |
| **Status**         | Active / Stale / Resolved                                         |
| **Priority**       | 1–5 numeric scale                                                 |
| **Categories**     | AI-assigned tags                                                  |
| **Evidence**       | Conversation groups with full message threads                     |
| **Participants**   | Customers and teammates in the conversations                      |
| **Linked tickets** | Jira / Linear / GitHub issues attached                            |

## Lifecycle States

Topics move through these states automatically based on activity.

| State           | When It Applies                                                                           |
| --------------- | ----------------------------------------------------------------------------------------- |
| **Active**      | Recent customer activity or a team response in progress                                   |
| **Stale**       | An unanswered customer message older than your stale threshold (default 240 min)          |
| **Reactivated** | A stale topic that received a team response, returning to active                          |
| **Resolved**    | Manually archived, all linked conversations closed, or no activity for an extended period |

A scheduled job checks staleness every 15–30 minutes and fires an in-app notification on transition to stale.

## How Topics Are Created

Topics ingest from Slack and Intercom — historical backfill on setup, live ingestion afterward. Each new or updated conversation is classified by LLM into segments; each segment lands in a topic via [matching](#matching-and-deduplication).

You don't manually create topics — they emerge from real conversations.

## Matching and Deduplication

BuildBetter prevents duplicate topics with a two-stage pipeline:

<Steps>
  <Step title="Embedding pre-filter">
    The segment text plus its enriched context (speaker names, companies, channel) is embedded and matched against active and stale topic embeddings. The top 3 similar candidates pass forward.
  </Step>

  <Step title="LLM verification">
    The LLM verifier inspects each candidate's name, description, source labels, and sample messages, then returns a confidence score. The bar is **0.6** with channel context present, **0.7** without.
  </Step>

  <Step title="Link or create">
    If the best confidence beats the threshold, the segment links to the existing topic. Otherwise a new topic is created.
  </Step>
</Steps>

**Low-signal filtering:** conversations with under 50 chars of substantive content (after stripping @mentions, HTML, greetings) are skipped.

## The Tab View

The Topics tab in `/triage` lists active and recent topics. Each row shows:

* **Title**
* **Kind badge** — Bug (red), Complaint (orange), Feature Request (blue), Feedback (purple), Discussion (gray)
* **Status badge** — Active (green), Stale (amber), Resolved (gray)
* **Description snippet**

Click any topic to open the detail pane.

## What's Documented Here

<CardGroup cols={2}>
  <Card title="Topic Detail" icon="file-lines" href="/pages/Triage/topic-detail">
    Conversation evidence, participants, linked tickets, lifecycle history, and the route/attach/promote actions.
  </Card>

  <Card title="Manual Actions" icon="hand-pointer" href="/pages/Triage/topic-manual-actions">
    Split a group into a new topic, move a group to another topic, promote to a project, route with AI.
  </Card>

  <Card title="Sources & Settings" icon="gear" href="/pages/Triage/topic-sources-and-settings">
    Slack and Intercom setup, channel purpose context, stale threshold and notification settings.
  </Card>

  <Card title="Linear Evidence Tracker" icon="link" href="/pages/Triage/linear-evidence-tracker">
    Tracked Linear issues receive evidence-backed comments that update as new customer signals arrive.
  </Card>
</CardGroup>

## How Topics Differs from Clusters

|                   | Topics                                  | Clusters                                        |
| ----------------- | --------------------------------------- | ----------------------------------------------- |
| **Source**        | Real-time signal feed (Slack, Intercom) | Embeddings-based grouping of historical signals |
| **Refresh**       | Continuous (live)                       | On demand                                       |
| **Best for**      | Spotting fast-moving issues right now   | Spotting durable themes over time               |
| **Inside Triage** | This tab                                | The [Clusters](./clusters) tab                  |

Both are valuable for different reads on your customer base. Topics is your hot-issue surface; Clusters is your strategic-theme surface.

<Tip>
  If a channel doesn't have a purpose set in Slack, set one — even a short description meaningfully sharpens topic names and matching. The classifier reads it on every ingestion event.
</Tip>
