Reply rate by persona-cohort and outbound channel. Darker orange means more meetings booked per touch. Useful for deciding what to scale, what to kill, and where the unexpected wins are.
Inline SVG, no D3 dependency. Edit ROWS, COLS, and VALUES
to repurpose for any 2-axis matrix — fund × strategy returns, custodian × admin coverage,
deal-stage × sponsor heat, etc.
const ROWS = ["RIA Founder", "RIA Ops", "Family Office", ...]; const COLS = ["Cold email", "LinkedIn", "Spotlight", ...]; const VALUES = [ [0.08, 0.12, 0.22, 0.05, 0.14, 0.02], [0.04, 0.07, 0.11, 0.03, 0.08, 0.01], // ... one row of values per persona ];
You have a 2-axis matrix and the story is "which cell wins." Color encodes magnitude. Skip when you have >15 rows or >15 columns — the cells get small and the labels get noisy. Switch to a clustered bar or table.
Cell number is the reply rate; subscript is touch volume. Persona rows are sorted by total replies (descending). Channel columns are sorted by overall winrate. Hover a cell to read the absolute meeting count.