play icon for videos
← Academy
SOPACT ACADEMY · AI SKILLS

Build a Logframe (4×4) That Passes Funder Review

Describe your program and Sopact Sense assembles the 4×4 logframe — narrative, indicators, means of verification, assumptions — grading every cell and flagging the non-SMART indicators and risks-disguised-as-assumptions a funder catches.

<!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">&#128203;</span> <div class="t"> <div class="n">Vista Workforce Collaborative · Logframe</div> <div class="s">DEMO-01 · Sopact Sense · Framework Builder</div> </div> <span class="pill"><span class="d"></span>Building</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">&gt;</span><span id="promptTxt"></span></div> </div> </div> <script> (function(){ var TABS = ["Setup", "Build", "Fix", "Report"]; var CONTENT = [{"eyebrow": "Step 1 · Describe the program", "headline": "The input is your description, nothing else", "lede": "Use only what the program states — anything inferred gets marked, never invented.", "prompt": "You are the Sopact Sense Assistant. Here is my program description: [PASTE PROGRAM DESCRIPTION]. Use only what it states; mark anything you infer as [INFERRED]. Wait for my task."}, {"eyebrow": "Step 2 · Build the logframe", "headline": "A 4×4 matrix, graded cell by cell", "lede": "Every cell is graded <strong style=\"color:#15884F\">green</strong>, <strong style=\"color:#C9820A\">amber</strong>, <strong style=\"color:#C63E2B\">red</strong> — non-SMART indicators and risks disguised as assumptions get flagged, not smoothed over.", "prompt": "Create a Logframe for [PROGRAM] as a 4×4 matrix (rows Goal/Purpose/Outputs/Activities; columns Narrative/Indicators/Means of verification/Assumptions). Flag non-SMART indicators, empty cells, and risks disguised as assumptions. Use only what the program states; mark anything inferred [INFERRED]. Grade every cell green / amber / red."}, {"eyebrow": "Step 3 · One-fix follow-up", "headline": "Make the indicator SMART", "lede": "The lowest-graded element gets one realistic fix — the single edit that moves it from amber or red 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": "Every gap becomes one named ask", "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\">&#128221;</span><div class=\"rt\"><div class=\"n\">Program description</div><div class=\"s\">Vista Workforce Collaborative — 12-week coding bootcamp, ~60 adults/cohort</div></div><span class=\"pillsm\">Pasted</span></div><div class=\"row\"><span class=\"emoji\">&#128203;</span><div class=\"rt\"><div class=\"n\">Logframe structure</div><div class=\"s\">Goal / Purpose / Outputs / Activities × 4 columns</div></div><span class=\"pillsm gray\">Structure</span></div><div class=\"row\"><span class=\"emoji\">&#128274;</span><div class=\"rt\"><div class=\"n\">No hallucination rule</div><div class=\"s\">Only what the program states; infer = flagged [INFERRED]</div></div><span class=\"pillsm gray\">Required</span></div>", build: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Indicator</div><div>Assumption</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Goal</div><div>Wage growth — no target or timeframe<span class=\"mxchip\" style=\"background:#C63E2B;color:#fff\">RED</span></div><div>First job persists</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Purpose</div><div>6-mo placement = 71%, verified<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>Labor demand stays strong</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Outputs</div><div>Completion rate</div><div>Attendance holds</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Activities</div><div>Mentoring hours</div><div>Mentoring builds confidence<span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div></div></div>", fix: "<div class=\"mxwrap\"><div class=\"mxhead\"><div></div><div>Indicator</div><div>Assumption</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Goal</div><div>Target: +15% wage within 24 months, via a follow-up survey (MoV)<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>First job persists</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Purpose</div><div>6-mo placement = 71%, verified<span class=\"mxchip\" style=\"background:#15884F;color:#fff\">GREEN</span></div><div>Labor demand stays strong</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Outputs</div><div>Completion rate</div><div>Attendance holds</div></div><div class=\"mxrow\"><div class=\"mxlabel\">Activities</div><div>Mentoring hours</div><div>Mentoring builds confidence<span class=\"mxchip\" style=\"background:#C9820A;color:#fff\">AMBER</span></div></div></div><div class=\"cnote\" style=\"color:#15884F;margin-left:0\"><span class=\"plus\">+</span><strong>Fix applied:</strong> Target: +15% wage within 24 months, via a follow-up survey (MoV)</div>", reportFlags: "<div class=\"flagrow\" style=\"border-left-color:#C63E2B\"><span class=\"flagtag\" style=\"color:#C63E2B;background:#FCE9E7\">RED</span><div class=\"flagtxt\">Goal — wage growth has no target or timeframe stated; means of verification (follow-up survey) is not yet in place.</div></div><div class=\"flagrow\" style=\"border-left-color:#C9820A\"><span class=\"flagtag\" style=\"color:#C9820A;background:#FBF0DA\">AMBER</span><div class=\"flagtxt\">Activities — mentoring builds confidence is claimed as an assumption, not measured.</div></div>", lpTitle: "Missing & incomplete report · shareable link", lpSub: "Decision-first · Sopact branding · Vista Workforce Collaborative · Logframe", summaryBefore: "Grade: 1 green &middot; 1 amber &middot; 1 red. One red, one amber to fix.", summaryAfter: "Grade: 2 green &middot; 1 amber &middot; 0 red. One target turned red to green." }; 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">&#128196;</span><div class="rt"><div class="n">' + BODIES.lpTitle + '</div><div class="s">' + BODIES.lpSub + '</div></div><span class="open">Open &rarr;</span></div>'; } bodyEl.innerHTML = out; promptEl.textContent = c.prompt; } function render(){ renderTabs(); renderBody(); } render(); })(); </script> </body> </html>

In short: One prompt now builds a funder-ready logframe from nothing but what a program publicly states. It names the decision the reader must make, fills the 4×4 matrix — Goal, Purpose, Outputs, Activities against Narrative, Indicators, Means of verification, Assumptions — grades every cell by evidence, flags the non-SMART indicators and the risks disguised as assumptions, and ends with a prioritized plan. Below, we run it on a real public page and walk through what each part of the prompt produces.

What makes a logframe pass funder review?

A logframe passes when every indicator is SMART, every indicator has a means of verification, and the assumptions column names real risks rather than wishes. A logframe (logical framework) is the 4×4 matrix funders use to check, on one page, that a program is measurable and risk-aware: four levels — Goal, Purpose, Outputs, Activities — against four columns — Narrative, Indicators, Means of verification, and Assumptions. Most logframes fail two ways: an indicator that isn't specific or time-bound, and a risk parked in the assumptions column with no way to verify or manage it.

The prompt below turns that logic into a complete audit. It reads only what your program states publicly, grades every cell Green, Amber, or Red, flags the vague indicators and the unmanaged risks, and tells you the one cell to fix this quarter. We ran it on The Lantern Network's public mentoring-program page — the sections that follow show the prompt for each part, then what came back.

1 · Name the decision, then run one prompt

Every grade depends on who is reading. A board sees "87% placed" as a headline; a renewing funder asks whether each indicator can be verified, and whether the assumptions hide risks that could sink the program. So the prompt's first instruction is a decision frame: before building anything, state in one line who would use this logframe and for what decision. For Lantern, that came back as a corporate sponsor deciding whether to renew its grant. Every judgment below is made from that reader's chair.

Here is the full prompt. Paste it whole, swap in your program name and source, and Sense produces all four parts in one pass:

Build a Logframe for [PROGRAM NAME] using only what the program publicly states at [SOURCE — URL or pasted program description]. Before building, state in one line who would use this logframe and for what decision — then make every judgment from that reader's perspective. PART 1 — Fill the 4×4 matrix: rows Goal / Purpose / Outputs / Activities; columns Narrative summary / Indicators / Means of verification / Assumptions. Every indicator must be SMART (specific, measurable, time-bound) and every indicator must name its means of verification. Flag any non-SMART indicator, any empty cell, and any risk disguised as an assumption. Color every cell: GREEN = specific AND verifiable; AMBER = stated but vague, or an assumption claimed but not managed; RED = missing, not SMART, no means of verification, or exists only as [INFERRED]. Tag anything not explicitly stated as [INFERRED]. Include a legend, program name, source URL, and date. PART 2 — One row per level: Level | Indicator | SMART? (yes/no, why) | Means of verification (or "none") | Grade. PART 3 — List every risk-as-assumption and every AMBER and RED cell, ranked by how much the logic depends on it. For each: why it is weak in one sentence, what fails if the assumption doesn't hold, and whether the fix is a program-design problem or a measurement gap. PART 4 — The top 3–5 fixes, in priority order for the decision named above. For each: current language (or "missing") → proposed rewrite (a SMART indicator with a named means of verification), plus the single data collection step that would move it toward green. CLOSING SUMMARY — 3–4 sentences: overall strength of the logic, the weakest cell a skeptical funder would attack first, and the one action to take this quarter. RULES — Source fidelity is absolute: never invent program content; if the source does not say it, mark it RED or [INFERRED]. Every green grade must be traceable to specific source language.

Example source: https://www.lanternnetwork.org/mentoring-program. The rules do the heavy lifting — no invented content, every green traceable to a quote and a means of verification. The matrix is the claim; the table in Part 2 is its evidence trail.

2 · Part 1 — the 4×4 matrix

Fill the 4×4 matrix: rows Goal / Purpose / Outputs / Activities; columns Narrative summary / Indicators / Means of verification / Assumptions. Every indicator must be SMART and name its means of verification. Flag any non-SMART indicator, any empty cell, and any risk disguised as an assumption. Color every cell green, amber, or red. Tag anything not explicitly stated as [INFERRED]. Include a legend, program name, source URL, and date.

Two disciplines make this different from a matrix that just gets filled in. First, every indicator has to be SMART and carry a means of verification — a number with no way to check it is graded down. Second, the assumptions column is treated as risk management: an assumption that's really an unmanaged risk gets flagged, not waved through. For Lantern, the pattern was immediate — the placement indicator is SMART and verifiable (288 mentees, 251 internships, 87% placed, confirmed by sponsor records) while the Goal-level durable outcomes carry no time-bound indicator and no means of verification.

The rubric is strict on purpose. Green means specific and verifiable — a SMART indicator with a named means of verification ("87% secured internships, jobs, or promotions"). Amber means stated but vague, or an assumption claimed but not managed. Red means missing, not SMART, no means of verification, or existing only as [INFERRED].

GRADE: green | 87% placed | SMART, verified by sponsor placement records; amber | mentoring → confidence | an assumption, claimed but not measured; red | durable outcomes | no time-bound indicator, no means of verification past placement

3 · Part 2 — the indicator & means-of-verification check

For every level, produce one row: Level | Indicator | SMART? (yes/no, why) | Means of verification (or "none") | Grade.

This table is the evidence trail behind the matrix — one row per level, so no indicator floats free of a way to verify it. The SMART and means-of-verification columns are the practical payoff: they show exactly which indicators a reviewer can trust and which can't. For Lantern's weakest cell — the Goal-level durable outcome — the indicator column reads "not time-bound," the means of verification reads "none," and the fix is "share of placed mentees still employed at 12 months, verified by a follow-up survey against a persistent participant ID." That's not a critique; it's a work order.

4 · Part 3 — the assumptions & weak-cell diagnosis

List every risk-as-assumption and every amber and red cell, ranked by how much the logic depends on it. For each: (a) why it is weak in one sentence, (b) what fails if the assumption doesn't hold, (c) whether the fix is a program-design problem or a measurement gap — these require different responses.

The ranking is by dependence, not row order — the question is which weakness takes the most down with it. Lantern's number one was the Goal-level durable-outcome cell: with no time-bound indicator and no means of verification, the top of the matrix can't be checked at all, so the whole logframe rests on the 87% placement number. The mentoring-builds-confidence assumption — claimed but never measured — came second.

The design-versus-measurement tag matters just as much. A measurement gap means the level plausibly holds but has never been verified — the fix is a means of verification. A design problem means an assumption hides a risk the program can't manage — the fix is mitigation, not measurement. Lantern's diagnosis came back mostly measurement gaps: the indicators need to be made SMART and given a means of verification.

5 · Part 4 — the improvement plan

Give the top 3–5 fixes, in priority order for the decision named above. For each: show the current language (or "missing") → a proposed rewrite (a SMART indicator with a named means of verification), plus the single data collection step that would move it toward green.

Each fix is a before-and-after pair. Lantern's first: the Goal-level durable outcome, currently a narrative with no indicator, is rewritten as a SMART indicator — "X% of placed mentees still employed at 12 months" — with a named means of verification: a short follow-up survey against a persistent participant ID. Fixes two through five follow the same shape: give the mentoring assumption a baseline/endline confidence measure, add a means of verification to the completion output, and publish the denominator behind the 87%.

6 · The closing summary — one action this quarter

Close with 3–4 sentences: the overall strength of the logic, the weakest cell a skeptical funder would attack first, and the one action to take this quarter.

The summary is the executive read. Lantern's verdict: the matrix is strong at Purpose level and unverifiable at Goal — the placement indicator is SMART and checked, but the durable outcomes above it carry no time-bound indicator and no means of verification, and the program's central assumption is unmeasured. The one action this quarter: add a 12-month follow-up (the means of verification) against a persistent participant ID, so next year's renewal case rests on a verifiable indicator rather than three stories.

Take the prompt with you. The full prompt pack — the master prompt plus each part as a standalone prompt you can run separately — is available to download: Download the Logframe prompt pack.

Tricks, tips, and troubleshooting

The assumptions column is risk management. A logframe's assumptions column isn't a formality — it's where you list what has to stay true for the logic to hold. Ask Sense to flag any assumption that's really an unmanaged risk; that's the column funders read most closely.

Make every indicator SMART. The fastest way to fail review is a vague indicator. Ask Sense which indicators aren't specific, measurable, and time-bound, and to rewrite them — each needs a matching means of verification.

Turn one cell green per cycle. Fix the reddest cell with the one indicator Sense suggests, collect it next cohort, and re-run the matrix.

Tighten your program page while you're here. Once Sense has graded the matrix, ask it to bring your public claims in line with your evidence:

Based on the grades above, suggest edits to my program page so its claims match the evidence. Flag every sentence that overstates what we can show, and rewrite it to be accurate and specific.

The same prompt works for a Theory of Change, Logic Model, or Results Framework — swap the framework name and keep the parts, rubric, and rules unchanged.

Frequently asked questions

What is a logframe?

A logframe (logical framework) is a 4×4 matrix that summarizes a program: four levels — Goal, Purpose, Outputs, Activities — against four columns — Narrative summary, Indicators, Means of verification, and Assumptions. Funders use it to check, on one page, that each level is measurable, verifiable, and risk-aware.

How do I fill out a logframe matrix?

Work the rows from the bottom up — Activities to Goal — and for each level write the narrative, a SMART indicator, how you'll verify it (the means of verification), and the assumption that has to hold for it to lead to the next level. With AI, describe your program and ask it to fill all sixteen cells, flag any non-SMART indicator or missing verification, and grade each cell so the weak spots are obvious.

What makes a logframe fail funder review?

Two errors show up in almost every weak logframe: indicators that aren't SMART (vague, not time-bound, or with no means of verification), and risks disguised as assumptions (“we assume the economy stays stable” with no mitigation). Naming and fixing those two is usually what moves a logframe from declined to fundable.

Ready to try it for yourself?

Open Sopact Sense, paste your program description, and put it to work.

Try in Sopact