← AcademyAnalyze · Mentee trajectory
How to Measure a Mentee's Growth Across Every Session
Stale blockers carried for months are the real mentoring signal. This shows how to trace a mentee's trajectory across every session in Sopact Sense — in date order, with momentum and aging blockers.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
@keyframes pulseDot{0%,100%{opacity:1}50%{opacity:.35}}
*{box-sizing:border-box}
body{margin:0;font-family:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,sans-serif;background:#EEF2F9;padding:26px;display:flex;justify-content:center}
.card{width:600px;max-width:100%;background:#FFFFFF;border:1px solid #E3E9F4;border-radius:20px;box-shadow:0 26px 64px -32px rgba(15,30,70,.34),0 2px 4px rgba(15,30,70,.05);overflow:hidden}
.hdr{display:flex;align-items:center;gap:11px;padding:16px 20px;border-bottom:1px solid #EEF1F7;background:#F5F8FE}
.hdr .ic{display:inline-flex;width:30px;height:30px;align-items:center;justify-content:center;border:2px solid #155DFC;border-radius:50%;color:#155DFC;font-size:15px;font-weight:800;flex-shrink:0}
.hdr .t{min-width:0}
.hdr .t .n{font-weight:800;font-size:14.5px;color:#0F172A;letter-spacing:-.2px}
.hdr .t .s{font-size:12px;color:#64748B}
.hdr .pill{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;color:#155DFC;background:#E6EEFF;padding:5px 10px;border-radius:20px;white-space:nowrap}
.hdr .pill .d{width:6px;height:6px;border-radius:50%;background:#155DFC;animation:pulseDot 2s infinite}
.tabs{display:flex;gap:0;padding:12px 16px 0;background:#F5F8FE}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;cursor:pointer;font-family:inherit;font-size:11.5px;font-weight:700;color:#64748B;background:transparent;border:none;border-bottom:2px solid transparent;padding:8px 4px 10px}
.tab.on{font-weight:800;color:#155DFC;border-bottom-color:#155DFC}
.tab .num{display:inline-flex;width:20px;height:20px;align-items:center;justify-content:center;border-radius:50%;font-size:11px;font-weight:800;color:#64748B;background:#EEF1F7}
.tab.on .num{color:#fff;background:#155DFC}
.divider{height:1px;background:#EEF1F7}
.body{padding:20px}
.eyebrow{font-size:10.5px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:#155DFC;margin-bottom:5px}
.eyebrow.g{color:#15884F}
.headline{font-family:'Inter',Georgia,serif;font-size:18.5px;font-weight:600;line-height:1.25;color:#0F172A;margin-bottom:12px}
.lede{font-size:12.5px;line-height:1.55;color:#475569;margin:0 0 14px}
.rows{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
.row{display:flex;align-items:center;gap:11px;background:#F5F8FE;border:1px solid #EEF1F7;border-radius:11px;padding:11px 13px}
.row .emoji{font-size:17px}
.row .rt{flex:1;min-width:0}
.row .rt .n{font-size:13px;font-weight:700;color:#0F172A}
.row .rt .s{font-size:12px;color:#64748B}
.pillsm{font-size:11px;font-weight:800;color:#155DFC;background:#E6EEFF;padding:4px 9px;border-radius:6px;flex-shrink:0}
.pillsm.gray{font-weight:700;color:#64748B;background:#EEF1F7}
/* chain / timeline */
.chainwrap{position:relative;padding-left:26px}
.chainline{position:absolute;left:8px;top:8px;bottom:8px;width:2px;background:#E3E9F4}
.cnode{position:relative;margin-bottom:14px}
.cdot{position:absolute;left:-26px;top:4px;width:16px;height:16px;border-radius:50%;background:#fff;border:3px solid #94A3B8}
.clabel{font-size:9.5px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:#64748B;margin-bottom:4px}
.cbox{background:#F5F8FE;border:1px solid #EEF1F7;border-radius:11px;padding:10px 12px;font-size:12px;line-height:1.5;color:#334155}
.cbox.graded{display:flex;align-items:flex-start;gap:9px;border-left-width:3px;border-left-style:solid}
.cnote{margin:0 0 14px 4px;font-size:11px;line-height:1.5}
.cnote .plus{display:inline-flex;width:16px;height:16px;align-items:center;justify-content:center;background:#155DFC;color:#fff;border-radius:4px;font-size:10px;font-weight:800;flex-shrink:0;margin-right:6px}
.csummary{display:flex;align-items:center;gap:12px;background:#0A1B3D;border-radius:13px;padding:11px 15px;margin-top:4px}
.csummary .t{flex:1;font-size:11.5px;color:#CBD8F5}
.csummary .t b{color:#F1F5FF}
/* matrix */
.mxwrap{border:1px solid #EEF1F7;border-radius:12px;overflow:hidden;margin-bottom:10px}
.mxhead{display:grid;grid-template-columns:118px 1fr 1fr;background:#F5F8FE;border-bottom:1px solid #EEF1F7}
.mxhead div{font-size:9px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:#64748B;padding:7px 9px}
.mxrow{display:grid;grid-template-columns:118px 1fr 1fr;border-bottom:1px solid #EEF1F7}
.mxrow:last-child{border-bottom:none}
.mxrow>div{padding:9px;font-size:11.5px;line-height:1.4;color:#334155;display:flex;align-items:center;flex-wrap:wrap;gap:5px}
.mxrow .mxlabel{font-weight:700;color:#0F172A;background:#FAFBFE}
.mxchip{font-size:9px;font-weight:800;letter-spacing:.3px;text-transform:uppercase;padding:3px 6px;border-radius:5px;white-space:nowrap}
.promptwrap{padding:0 20px 18px}
.promptlbl{font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:#94A3B8;margin-bottom:7px}
.prompt{display:flex;align-items:flex-start;gap:9px;font-family:ui-monospace,'SF Mono',Menlo,monospace;font-size:11px;line-height:1.5;color:#1E293B;background:#F5F8FE;border:1px solid #EEF1F7;border-left:3px solid #155DFC;border-radius:9px;padding:11px 12px}
.prompt .car{color:#155DFC;font-weight:800;flex-shrink:0}
.flagrow{display:flex;align-items:flex-start;gap:10px;background:#F5F8FE;border:1px solid #EEF1F7;border-radius:11px;padding:10px 12px;border-left-width:3px;border-left-style:solid;margin-bottom:8px}
.flagtag{font-size:9.5px;font-weight:800;letter-spacing:.4px;text-transform:uppercase;padding:4px 8px;border-radius:5px;white-space:nowrap;flex-shrink:0}
.flagtxt{font-size:12px;line-height:1.45;color:#334155}
.lp{display:flex;align-items:center;gap:12px;background:#0A1B3D;border-radius:13px;padding:14px 16px;margin-top:6px}
.lp .ic{display:inline-flex;width:34px;height:34px;align-items:center;justify-content:center;background:#14295C;border:1px solid #26407A;border-radius:9px;color:#7FA8FF;font-size:16px;flex-shrink:0}
.lp .rt{flex:1;min-width:0}
.lp .rt .n{font-size:13px;font-weight:800;color:#F1F5FF}
.lp .rt .s{font-size:11.5px;color:#9DB2D9}
.lp .open{font-size:11px;font-weight:800;color:#0A1B3D;background:#7FA8FF;padding:6px 11px;border-radius:7px;white-space:nowrap}
</style>
</head>
<body>
<div class="card">
<div class="hdr">
<span class="ic">📈</span>
<div class="t">
<div class="n">Mentorship & LMS program · Mentee Trajectory</div>
<div class="s">DEMO-09 · Sopact Sense · Mentorship</div>
</div>
<span class="pill"><span class="d"></span>Tracking</span>
</div>
<div class="tabs" id="tabs"></div>
<div class="divider"></div>
<div class="body" id="body"></div>
<div class="promptwrap">
<div class="promptlbl">The prompt behind this step</div>
<div class="prompt"><span class="car">></span><span id="promptTxt"></span></div>
</div>
</div>
<script>
(function(){
var TABS = ["Setup", "Track", "Fix", "Report"];
var CONTENT = [{"eyebrow": "Step 1 · Load the Decision Brief", "headline": "Stale blockers are the real mentoring signal.", "lede": "The Assistant works only from the Mentorship & LMS dataset (DEMO-09), tracing one mentee's sessions in date order.", "prompt": "You are the Sopact Sense Assistant working over the [DEMO] dataset (clean data + persistent contact IDs). Load my Decision Brief (decision, audience, outcomes, indicators, evidence standard) first, then wait for my task."}, {"eyebrow": "Step 2 · Trace progress across sessions", "headline": "Momentum, not snapshots.", "lede": "Each session is graded <strong style=\"color:#15884F\">green</strong>, <strong style=\"color:#C9820A\">amber</strong>, <strong style=\"color:#C63E2B\">red</strong> — with any blocker carried 3+ sessions flagged.", "prompt": "For mentee [ID], trace progress across sessions in date order: trajectory on [GOAL_AREAS], momentum; flag blockers carried 3+ sessions. Grade green/amber/red."}, {"eyebrow": "Step 3 · One-fix follow-up", "headline": "Clear the stale blocker.", "lede": "The transport blocker has carried across 3 sessions unresolved. The Assistant names the single data point that moves it to green.", "prompt": "Take the lowest-graded element above and fix it using only what the program could realistically measure. Show the before → after grade and the single indicator/edit that moves it to green."}, {"eyebrow": "Step 4 · Missing & incomplete report", "headline": "Is this mentee progressing? Yes, then flat on an unresolved blocker.", "lede": "Every amber or red item becomes one named ask — the report leads with the decision it informs.", "prompt": "Create a 'missing & incomplete' report from this analysis in Sopact branding [or paste your website URL / brand guideline to apply your own]. List every element graded amber or red, what is missing, and the one input that fixes each. Lead with the decision this report informs."}];
var BODIES = {
setup: "<div class=\"row\"><span class=\"emoji\">📝</span><div class=\"rt\"><div class=\"n\">Decision Brief</div><div class=\"s\">Decision, audience, outcomes, indicators, evidence standard loaded first</div></div><span class=\"pillsm\">Pasted</span></div><div class=\"row\"><span class=\"emoji\">📋</span><div class=\"rt\"><div class=\"n\">Five elements</div><div class=\"s\">Dataset · date-ordered trajectory · momentum · stale blockers · grade G/A/R</div></div><span class=\"pillsm gray\">Structure</span></div><div class=\"row\"><span class=\"emoji\">🔒</span><div class=\"rt\"><div class=\"n\">No hallucination rule</div><div class=\"s\">Only what the program states; infer = flagged</div></div><span class=\"pillsm gray\">Required</span></div>",
build: "<div class=\"chainwrap\"><div class=\"chainline\"></div><div class=\"cnode\"><div class=\"cdot\" style=\"border-color:#94A3B8\"></div><div class=\"clabel\" style=\"color:#64748B\">S1</div><div class=\"cbox\">Goals set — baseline</div></div><div class=\"cnode\"><div class=\"cdot\" style=\"border-color:#15884F\"></div><div class=\"clabel\" style=\"color:#15884F\">S2</div><div class=\"cbox graded\" style=\"background:#E4F3EA;border-color:#C6E7D1;border-left-color:#15884F\"><span style=\"flex:1;color:#0F3D24\">Portfolio progress — improving</span><span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div></div><div class=\"cnode\"><div class=\"cdot\" style=\"border-color:#C9820A\"></div><div class=\"clabel\" style=\"color:#C9820A\">S3</div><div class=\"cbox graded\" style=\"background:#FBF0DA;border-color:#F0DBA8;border-left-color:#C9820A\"><span style=\"flex:1;color:#5C3E08\">Same transport blocker — flat</span><span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div></div><div class=\"cnote\" style=\"color:#C9820A\"><strong>Gap:</strong> Momentum stalled at S3.</div><div class=\"cnode\"><div class=\"cdot\" style=\"border-color:#C63E2B\"></div><div class=\"clabel\" style=\"color:#C63E2B\">Carried 3+</div><div class=\"cbox graded\" style=\"background:#FCE9E7;border-color:#F6C9C2;border-left-color:#C63E2B\"><span style=\"flex:1;color:#7A2A1E\">Transport to interviews — unresolved</span><span class=\"mxchip\" style=\"background:#C63E2B;color:#fff\">RED</span></div></div><div class=\"cnote\" style=\"color:#C63E2B\"><strong>Gap:</strong> Blocker carried across 3+ sessions without resolution.</div></div>",
fix: "<div class=\"chainwrap\"><div class=\"chainline\"></div><div class=\"cnode\"><div class=\"cdot\" style=\"border-color:#94A3B8\"></div><div class=\"clabel\" style=\"color:#64748B\">S1</div><div class=\"cbox\">Goals set — baseline</div></div><div class=\"cnode\"><div class=\"cdot\" style=\"border-color:#15884F\"></div><div class=\"clabel\" style=\"color:#15884F\">S2</div><div class=\"cbox graded\" style=\"background:#E4F3EA;border-color:#C6E7D1;border-left-color:#15884F\"><span style=\"flex:1;color:#0F3D24\">Portfolio progress — improving</span><span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div></div><div class=\"cnode\"><div class=\"cdot\" style=\"border-color:#C9820A\"></div><div class=\"clabel\" style=\"color:#C9820A\">S3</div><div class=\"cbox graded\" style=\"background:#FBF0DA;border-color:#F0DBA8;border-left-color:#C9820A\"><span style=\"flex:1;color:#5C3E08\">Same transport blocker — flat</span><span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div></div><div class=\"cnote\" style=\"color:#C9820A\"><strong>Gap:</strong> Momentum stalled at S3.</div><div class=\"cnode\"><div class=\"cdot\" style=\"border-color:#15884F\"></div><div class=\"clabel\" style=\"color:#15884F\">Carried 3+</div><div class=\"cbox graded\" style=\"background:#E4F3EA;border-color:#C6E7D1;border-left-color:#15884F\"><span style=\"flex:1;color:#0F3D24\">Transport to interviews — unresolved</span><span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div></div><div class=\"cnote\" style=\"color:#15884F\"><span class=\"plus\">+</span><strong>Indicator added:</strong> Escalate transport support with a deadline — moves the stale blocker from AMBER (unresolved, stalling momentum) to GREEN (resolved).</div></div>",
reportFlags: "<div class=\"flagrow\" style=\"border-left-color:#C9820A\"><span class=\"flagtag\" style=\"color:#C9820A;background:#FBF0DA\">AMBER</span><div class=\"flagtxt\">Momentum stalled: flat at S3. Fix: revisit goals; remove the blocker.</div></div><div class=\"flagrow\" style=\"border-left-color:#C63E2B\"><span class=\"flagtag\" style=\"color:#C63E2B;background:#FCE9E7\">RED</span><div class=\"flagtxt\">Stale blocker: transport, 3+ sessions. Fix: escalate support with a deadline.</div></div>",
lpTitle: "Missing & incomplete report · shareable link",
lpSub: "Decision-first · Sopact branding · Mentorship & LMS program · Mentee Trajectory",
summaryBefore: "Grade: 1 green · 1 amber · 1 red. improving, then flat at S3",
summaryAfter: "Grade: 2 green · 1 amber · 0 red. blocker escalated with a deadline"
};
var phase = 1;
var tabsEl = document.getElementById('tabs');
var bodyEl = document.getElementById('body');
var promptEl = document.getElementById('promptTxt');
function renderTabs(){
tabsEl.innerHTML = '';
TABS.forEach(function(label, i){
var b = document.createElement('button');
b.type = 'button';
b.className = 'tab' + (i === phase ? ' on' : '');
b.innerHTML = '<span class="num">' + (i+1) + '</span><span>' + label + '</span>';
b.addEventListener('click', function(){ phase = i; render(); });
tabsEl.appendChild(b);
});
}
function renderBody(){
var c = CONTENT[phase];
var eyebrowClass = (phase===2) ? 'eyebrow g' : 'eyebrow';
var out = '<div class="' + eyebrowClass + '">' + c.eyebrow + '</div><div class="headline">' + c.headline + '</div><p class="lede">' + c.lede + '</p>';
if (phase === 0) {
out += '<div class="rows">' + BODIES.setup + '</div>';
} else if (phase === 1) {
out += BODIES.build;
out += '<div class="csummary"><div class="t"><b>' + BODIES.summaryBefore + '</b></div></div>';
} else if (phase === 2) {
out += BODIES.fix;
out += '<div class="csummary"><div class="t"><b>' + BODIES.summaryAfter + '</b></div></div>';
} else {
out += BODIES.reportFlags;
out += '<div class="lp"><span class="ic">📄</span><div class="rt"><div class="n">' + BODIES.lpTitle + '</div><div class="s">' + BODIES.lpSub + '</div></div><span class="open">Open →</span></div>';
}
bodyEl.innerHTML = out;
promptEl.textContent = c.prompt;
}
function render(){ renderTabs(); renderBody(); }
render();
})();
</script>
</body>
</html>
In short: A mentee can attend every session and still be stuck. In Sopact Sense the trajectory analysis traces progress in date order, reads momentum per goal area, and flags any blocker carried three or more sessions — because the blocker no one resolved is the real signal, not the attendance.
1 · Set up over your data
Point the Assistant at clean session notes with persistent contact IDs so every session for a mentee links to the same person in date order. Load your Decision Brief first — the decision, the audience, the goal areas, and your evidence standard — so the trajectory tracks what the program is actually trying to move.
2 · Write the prompt
For mentee [ID], trace progress across sessions in date order: trajectory on [GOAL_AREAS], momentum; flag blockers carried 3+ sessions. Grade green/amber/red.
The prompt carries five elements. The dataset is the loaded session notes. Date-ordered trajectory walks the sessions in sequence. Momentum reads whether each goal area is moving. Stale blockers flag anything carried three or more sessions. Grade G/A/R rates each goal area's progress.
3 · What Sense produces
Run on the Mentorship & LMS dataset (DEMO 09) already loaded in Sopact Sense.
GRADE: green | 1 | Improving session; amber | 1 | Flat momentum; red | 1 | 3+ session blocker
Sense returns the trajectory per goal area. A goal area improving session over session comes back green. A goal area with no movement comes back amber — flat momentum that's easy to miss in a single note. A blocker recurring across three or more sessions with no escalation comes back red: the mentee is carrying something the program never resolved.
4 · Turn a weak link green
Take the lowest-graded element above and fix it using only what the program could realistically measure. Show the before → after grade and the single indicator/edit that moves it to green.
For the stale-blocker red, the fix is an escalation rule: auto-flag any blocker unresolved after two sessions for mentor-lead review. That single trigger stops a months-old blocker from quietly riding along session after session.
5 · Make the report and share it
Create a 'missing & incomplete' report from this analysis in Sopact branding [or paste your website URL / brand guideline to apply your own]. List every element graded amber or red, what is missing, and the one input that fixes each. Lead with the decision this report informs.
Create a shareable link for this report and open it in a new tab.
Tricks, tips, and troubleshooting
Order by date, always. Trajectory only means something in sequence. If sessions aren't reliably dated, the momentum read is noise.
Flat is a finding, not a blank. No movement on a goal area is information — surface it as amber rather than leaving the cell empty.
Age your blockers. A blocker is only a red flag once it's old. Count how many sessions it has survived, not just that it exists.
Escalate on time, not on severity alone. Some blockers stall quietly.
Auto-flag any blocker unresolved after two sessions, even a small one — duration is the signal mentoring programs miss most.
Frequently asked questions
How do you measure mentoring program outcomes?
Trace each mentee's progress across sessions in date order, read momentum on the goal areas the program targets, and flag blockers carried three or more sessions. Sopact Sense does this in one prompt so trajectory — not attendance — becomes the outcome you report.
Why are stale blockers the real mentoring signal?
Because a blocker carried for months means the program saw a problem and never moved it. It matters more than any single positive session, which is why a three-plus-session blocker grades red and triggers review.
What does flat momentum mean for a goal area?
Flat momentum is a goal area showing no movement session over session. It grades amber because it's easy to miss in one note but signals a stall — worth a one-line progress rating each session to catch it early.
Ready to try it for yourself?
Open Sopact Sense, paste your program description, and put it to work.
Try in Sopact