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,reopenedstatus_changed,priority_changed,assignee_changedcustomer_changed,sla_set,escalatednote_linked,note_unlinked,ticket_linkedcomment— 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}".