TK

HookPilot · Internal Brief

TK, this one's yours.

A new build for HookPilot. Read the scope, then tell me what you think.

Latest Update · 2026-09-08

Every card needs a reason, not just a number.

Feedback on the hero demo hasn't changed: a dashboard full of stats "comes standard in CRMs." What's new is that it's now a concrete build item, not a note on the site.

Right now one card on the demo dashboard has a written recommendation under it, "Needs Attention" says "Recommended: personal outreach to lapsing donors this week." That line is hand-written for the mockup. Every other card, Donors Renewed, Goal Progress, just shows a number. Carol's point, restated plainly: a number and a percentage is what a standard CRM report already gives someone. A number plus a specific action plus a stated comparison to what that CRM report would have missed is what nothing else gives them. That third piece doesn't exist anywhere yet.

The Ask

Extend the Claude API job, don't build a second system.

Extend the Claude API job already in the original brief, don't build a second system. Per dashboard card: pull the real numbers behind it from Postgres (trend, relevant donor IDs, goal numbers, all deterministic, no model involved in that step), then one Claude API call turns those facts into a single line covering trend, a specific recommendation, and a named comparison to what a standard CRM report would and wouldn't show. Store it against the card and the refresh timestamp, don't regenerate on every page load. Same no-PII rule as everything else, donor ID and geographic prefix only, never a name.

Two Calls We Need From You Before You Build

Two decisions that shape the build.

Two open questions:

  1. 1.One API call per card, or one batched call per dashboard refresh. Batched is cheaper, per-card is safer against a wrong number landing on the wrong card. My default is per-card, tell me if that's wrong for cost reasons at our scale.
  2. 2.Is the CRM-comparison line static per card type, or generated fresh each time. Static is nearly free and never drifts. Fresh is more specific and costs a call every time. My default is static for the MVP.

Full Technical Breakdown

Read this tab for the fast read, the spec doc for the build.

Full technical breakdown (data contract, pipeline placement, fallback behavior) is in the spec doc I'm sending alongside this link, this tab is the version for a fast read, that doc is the version for when you're actually building it.

HookPilot Inc. is based in Ontario, Canada 🇨🇦