# Live feed overview

The Live feed (`/live`) is a streaming view of audit events for your tenant — calls, emails, planner decisions, compliance checks, payments, placement transitions. It's powered by Supabase Realtime: every `INSERT` into the `audit_events` table that your tenant can see (via RLS on `app.current_creditor_id`) is pushed to the page as it happens.

## When to use it

Use the Live feed if you want to:

* See what's happening minute-to-minute during a busy day.
* Spot-check that the agent is performing well across a fresh batch of placements.
* Catch an emerging pattern (e.g., a wave of disputes that suggests something's wrong with a batch).

Use the placement detail page instead if you want to dig into a specific account — its Timeline tab uses the same realtime pipe, just scoped to one placement.

## How to open it

In the dashboard left nav, click **Live** (the route is `/live`). There's no keyboard shortcut today.

## What you'll see

A header with a connection indicator (`streaming` in red when the Supabase channel is connected, `connecting…` otherwise) and a pause/resume button.

Below the header, filter chips: **All / Calls / Emails / Planner / Compliance**. The category is derived from the event type prefix (`call.*`, `email.*`, `planner.*`, `compliance.*`).

Below the filters, the event card. Each row shows:

* A colored dot for the category (call → info blue, email → signal, payment → positive green, compliance → warning yellow, planner → ink, placement → ink-3).
* The humanised event name (e.g., "Call · Outcome Coercion Miss").
* Relative timestamp (with the absolute timestamp on hover).
* `actor: <ai_agent|system|creditor|debtor>` and a placement-ID prefix when the event is placement-scoped.
* A one-line detail rendered from the redacted payload, when one is available.

Clicking a row navigates to the placement detail page when the event has a `placement_id`.

The feed buffers the last 250 events client-side (older ones scroll off). The audit log retains everything; the visible window is just capped for performance.

## Pause and resume

Click **Pause** to freeze the visible stream. New events keep arriving in the background; a banner appears showing the pending count ("`N` new events — click to show"). Click the banner or **Resume** to flush the buffered events into view.

Useful when you want to read something before it scrolls out of view.

## Filtering

Filter chips switch the visible category. There are no per-placement, per-outcome, or starred-placement filters today. Tagging and starring placements are planned but not yet available.

Filters do not persist across sessions today.

## Color coding

Categories use colors directly (per `categoryDot` in `dashboard/src/pages/LiveFeed.tsx`):

* **Blue (info)** — calls
* **Signal** — emails
* **Green (positive)** — payments
* **Yellow (warning)** — compliance events; rows are tinted yellow
* **Ink** — planner; rows have a left-bar indicator
* **Ink-3 / gray** — placement transitions and anything uncategorized

There is no per-event "positive / yellow-attention / red-escalation" semantic coloring (e.g., dispute-raised is in the `placement` or `call` category, not flagged red).

## Listening in to active calls

Listen-in audio and read-along live transcripts for in-progress calls are **planned but not yet available** in the creditor dashboard. The admin-only LivePage (admin host, `/admin/live`) does show a live-calls list and a call drawer, but that's gated to internal admin users via Clerk role check — it's not the same surface as the creditor Live feed.

## What's NOT in the feed

* Background system housekeeping (cost-log writes, scheduler ticks).
* Other tenants' activity — strictly tenant-isolated via Postgres RLS.
* Events for which no `audit_events` row was written. Anything that the platform tracks elsewhere (planner runtime state, raw Stripe webhook bodies, etc.) won't appear here unless it has been logged via `services/audit.py::write_audit_event`.

## TODO

* Screenshot: live feed full view.
* Screenshot: event row with each color category visible.
* Build / document listen-in surface for active calls.
* Build per-placement and per-outcome filters.

***

Last reviewed: 2026-05-24 by Customer Success.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.moderncollections.io/for-creditor-partners/creditor-operations/live-feed-overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
