/* 95 Forward — Prospect detail. "The whole picture — and the next right move."
Overview (the QPI signature) · Knowledge Base · Strategy · Visits & Asks. */
const PD = window.Ds95ForwardDesignSystem_31a0c4 || {};
/* ---- shared rail used on Overview ---- */
function NextMoveRail({ p, go }) {
const { Icon, Eyebrow } = window.POC;
const { Card, Button } = PD;
const D = window.POC_DATA;
const H = D.hartwell;
return (
The next move
{p.dueSoon ? : null}
{p.dueSoon ? "Follow up by tomorrow" : p.cadence}
{p.id === "p1" ? "Tom can open the door this week. Fast and good beats slow and perfect." : "Keep the relationship warm — the next conversation is what moves this forward."}
}>Log a touch
Recent activity
{(p.id === "p1" ? H.timeline : [
{ when: "Last week", what: "Added to the " + p.initiative.split(" — ")[0] + " initiative.", who: "Dana R." },
{ when: "2 weeks ago", what: "Qualified and scored — entered the ranked list.", who: "Copilot" },
]).map((t, i, arr) => (
{i < arr.length - 1 ? : null}
{t.what}
{t.when} · {t.who}
))}
);
}
/* ---- What we know fact row ---- */
function FactRow({ label, value, source, ai }) {
const { SourceTag } = PD;
return (
{label}
{value ? (
{value}
{ai ? Copilot : null}
{source ? : null}
) : {}} />}
);
}
/* ============================ OVERVIEW ============================ */
function OverviewTab({ p, go }) {
const D = window.POC_DATA;
const { Eyebrow } = window.POC;
const { Card, QPIScore, AISuggestion } = PD;
const H = D.hartwell;
const parts = D.qpiParts[p.id];
const isHart = p.id === "p1";
return (
{/* THE SIGNATURE */}
Qualified Prospect IndexUpdated 6h ago
{}} />
{/* From your copilot */}
{isHart ? (
From your copilot · {H.suggestions.length} to review
No open suggestions right now. The copilot is watching public sources and will propose updates as it finds them — you'll always approve before anything changes.
No research worksheet yet for {p.name}. This is where the case-readiness picture comes together — capacity, the relationship, connectors, and the gaps worth filling.
);
}
return (
The research worksheet
Connectors
{kb.connectors.map((c, i) => (
{c.role}
{c.path}
))}
{/* Research gaps — calm invitations */}
Research gaps
);
}
/* ============================ STRATEGY ============================ */
function StrategyTab({ p }) {
const D = window.POC_DATA;
const { Eyebrow, Icon } = window.POC;
const { Card } = PD;
const isHart = p.id === "p1";
const s = D.hartwell.strategy;
if (!isHart) {
return (
Strategy
No strategy drafted yet for {p.name}. Relationship goals, hooks, likely objections, and the plan to warm the path will live here — the copilot can draft a first pass for you to shape.