Core

Case management

Momentum treats cases as first-class objects with their own timeline, linked knowledge, and structured metadata. This page covers every field and every workflow.

The case model

Every case has the following fields:

  • Title — short, action-oriented. "Login loop after 2FA reset on mobile."
  • Description — full problem statement. Pasted from the customer's report is fine.
  • Status — open, investigating, waiting, resolved, closed.
  • Priority — low, medium, high, critical. Use sparingly; most cases are medium.
  • Assignee — one person owns it. Round-robin is a feature, not a bug.
  • Customer — links to the customer record. Customers have their own pages with all open/closed cases.
  • External ticket — URL + provider + ID, if synced from Freshdesk or another system.
  • SLA deadline — optional. Set manually or inherited from ticket-system imports.
  • Escalation tier — L1, L2, L3, or custom. Changes logged as activity.

Views

The /cases route has two views:

  • Table view — scannable rows with sortable columns. Best for triage and bulk updates.
  • Kanban view — swim lanes by status. Best for WIP visualization and drag-to-update workflows.

Filter by status, priority, assignee, customer, or free-text search. Filters persist in the URL so you can bookmark or share specific views.

Linking notes and runbooks

Every case has a Linked notes section where you can attach notes (including runbooks). Links are bi-directional — the note shows all cases it's attached to, and the case shows all linked notes.

On case open, Momentum surfaces matched runbooks above the linked-notes panel. The match uses semantic similarity over embeddings, ranked by cosine distance with a symptom-token overlap bonus. Top 3 with match percentages are shown.

When you close a case, press Save as runbook to generate a structured runbook from the full case context (title, description, activity timeline, linked notes). Claude drafts, you edit, save.

Activity timeline

Every state change is logged. Typed events:

  • created, closed, reopened
  • status_changed, priority_changed, assignee_changed
  • customer_changed, sla_set, escalated
  • note_linked, note_unlinked, ticket_linked
  • comment — internal notes, not customer-facing

Customers

The /customers route is the other half of the data layer. Each customer row has:

  • Name, domain, external ID, primary contact
  • Metadata JSON — plan tier, account age, custom fields
  • Open and closed case counts, surfaced on the customer detail page

When you import tickets from Freshdesk, Momentum auto-creates customers from requester emails and domains, deduping by externalId = "freshdesk:{email}".