Overview

Heartbeat — what it is, who it's for, how to navigate these docs.

Heartbeat is Satchel's TV cockpit — a single screen that shows the state of the business in red-zones-first order, refreshes itself, and catches silent failures before they cost money. It pulls from every source system Satchel runs on (webbank, AML, PDVS, VSS, card management, currency rates) and surfaces one number per question that matters.

These docs are the single source of truth for the project — product, lifecycle, sources, decisions, operations. Every new feature, product decision, user scenario, or behavioural change updates a page here in the same PR as the code. CLAUDE.md and the repo README are thin pointers into this site; ARCHITECTURE.md has been retired.

Where to start

You want to…Read
Understand the pipeline, data contract, principlesArchitecture
Know what's landed, what's pending, how sources are organisedSources
Add, tune, audit, or retire a metricMetrics
See how a metric goes from idea to a verified tileMetric lifecycle
Understand how the audit pages are builtAudit cuts
Ship a change to the VMOperations › Deploy
Look up a past architectural choiceDecisions
See what's coming nextRoadmap
Browse the live API specAPI reference

How to read the cockpit

The home page (/) is a grid of metric tiles. Each tile shows:

  • a number (today's value),
  • a status pillred, amber, or green against the metric's thresholds,
  • a sparkline of recent history,
  • a methodology hover so you know exactly what's being counted.

Green metrics fade. Red metrics surface. The principle is "show me what's broken, not what's fine".

Tiles ship unverified by default — the dashed border + pill mean a number is computing and visible, but no owner has yet cross-checked it against reality. That's the expected normal state for most tiles; verification happens naturally the first time the tile crosses red.

Two surfaces, one data model

SurfaceWhat it answersLives at
CockpitIs anything red right now?/
AuditWhy is this number what it is?/audit/{revenue,clients,journeys}

Both read from the same Postgres marts (heartbeat.metric_history, heartbeat.audit_cut_snapshot). Audit pages are narrative — they break a topic into cuts, each cut a small chart with prose, so you can scroll the page and understand the story.

Updating these docs

This site is part of the same Next.js app as the cockpit; pages live under dashboard/content/docs/ as MDX. To update a doc, edit the file and ship it through the standard deploy flow (the web service rebuild picks the change up).

Every page should answer one question. When you add a new feature or make a product decision, ask: which existing page does this belong in? If none, add a new page and link it from architecture and the Overview.