PAZATOR DOCS
TIMELN
FEATURE — v0.May1526

Entity
Timeline.

Why it exists

Before TIMELN, every piece of data about a person lived in its own section of the slide panel. Relationships in one box, cases in another, chats further down, tracker data somewhere else, the analysis tab a whole separate click away. If you wanted to figure out the sequence of events involving someone, you had to piece it together manually by jumping between sections.

That's the kind of friction that makes you miss things. TIMELN pulls everything into one chronological feed so you can scroll through a person's history without context-switching.

How It Works

When you open the slide panel for a human or entity, the app runs buildEntityTimeline(id, type), which queries every data source that has a timestamp and an association with that entity. Each source returns a list of events, the function merges them all into one array, sorts descending by timestamp, and hands it to renderEntityTimeline() to draw the feed.

The timeline lives at the bottom of the slide panel, after Cases. If there's nothing to show, it just says "No timeline events" — no empty containers wasting space.

Event Sources

Six data sources feed into the timeline, each with its own color and icon:

  • Relationships — every relationship involving the entity, pulled from pazatorRelationships.getForEntity(). Uses the relationship type's native color and icon. Shows the direction with the other party's name.
  • Cases — case creation events when the entity is linked to a case. Also picks up case timeline entries that specifically mention the entity (entity-added, entity-removed, or notes that contain the entity's name or ID).
  • Chats — each chat linked to a human via human.chats[] appears with its source label and timestamp. Suspicious chats are flagged inline.
  • Tracker — when a human has a linked LCTX tracker alias, the trackerLinkedAt timestamp creates a single event marking when the alias was linked. Full location history would require querying the Supabase locations table, which isn't done yet.
  • AI Analysis — entries in analysesStore where the title or findings text contains the entity's name or ID. This is a loose match and can miss or over-catch depending on how the analysis was generated.
  • Noteshuman.extraNotes or other.note if present. Notes carry no timestamp, so they always appear at the bottom of the feed.

Click Behavior

Each event is clickable. What happens depends on the source:

  • Case / Case Activity — switches to the Cases tab and selects that case.
  • Chat — opens the chat's slide panel.
  • Tracker — scrolls the slide panel to the LCTX Tracker section.
  • Analysis — switches to the Analysis tab.
  • Note — scrolls the slide panel to the bottom where notes are shown.
  • Relationship — scrolls to the Relationships section.

What's Missing

No change tracking on entity fields. If someone's threat level changes or their credit score updates, there's no record of that in the current data model — it just overwrites. Field-level change history would need a formal audit log, which doesn't exist yet.

Tracker location history is also limited. Right now we only log when the alias was linked, not the individual location pings. Showing actual GPS breadcrumbs would mean querying the Supabase locations table for every alias and feeding those into the timeline, which is doable but hasn't been built.

AI analysis matching is text-based and fragile. If an entity's name changes or the analysis uses a different reference to the same person, it won't match. The analyses store doesn't have a structured entity reference field, so we're stuck with substring search for now.


Future Plans

Bind the timeline to the pazatorStore change events so it auto-updates when relationships are added or cases are modified without reopening the panel. Also want to add inline location data from the tracker history and maybe a visual indicator for clusters of activity around the same date.