diff --git a/.okf/design/house-visual-spec.md b/.okf/design/house-visual-spec.md index bdcd04fbb..1d0b9dbc0 100644 --- a/.okf/design/house-visual-spec.md +++ b/.okf/design/house-visual-spec.md @@ -233,3 +233,57 @@ scale with the measured >=9px @390px floor formula - plus the exhibit grammar and the O1/O2 rubric. Nothing in the ADR's Phase-A spec requirement was left aspirational; the floor is a formula (basis 17px @ W=720 -> 9.21px) and every dimension is a number an SVG author can render from. + +## Refactoring.fm illustration style (2026-08-13, Paul - the new exhibit bar) + +Paul's north star for course exhibits: the refactoring.fm (Luca Rossi) illustration +look (reference set: `docs/projects/2605-.../10-19-research/images/`). Redraw +exhibits to THIS, not the muted #faf7f2 O2 cards: +- **Clean white bg**, generous whitespace, minimal text, BIG labels. +- **Big bold hand-drawn Caveat labels** with a **soft colored drop-shadow glow** + (SVG feDropShadow, the label's own colour, opacity ~0.5) so they pop. +- **Saturated semantic per-element colours** (NOT muted): blue #2b7fff structure, + red #f2635a/#e5484d, green, amber, purple - each category its own colour. +- **Soft tinted rounded pills** behind labels (very light tint of the label colour, + rx ~18) with a subtle grey drop-shadow for depth + a slight wobble rotation + (~0.4-0.6deg) for the hand-drawn feel. +- **Bold blue connector arrows** (stroke ~3.5, blue arrowhead marker); purple + dashed arrows for callout annotations. +- **NO emoji** (Paul 2026-08-13: "emojis look not so good, avoid them"). +- **Wobble is layout-dependent (2026-08-13 correction):** the ~0.4-0.6deg wobble + reads "hand-drawn/playful" in a **flow or vertical stack** - but in a **grid of + aligned cards it reads as MISALIGNMENT, not craft.** Drop the wobble in grids; + keep clean edges. (This exact rule caused the friday-demo-timeline clunkiness - + see the render-gate checklist below.) +- Legibility unchanged: min font >=20px Caveat, W=720, ZERO overflow (render-check + every one at 390 + desktop). +Template exhibit: `five-tech-words-stop-nodding-at/jargon-translator.svg`. + +### Render-gate clunkiness checklist (2026-08-13 - itemize, don't vibe-check) + +**Why this exists (decision record):** friday-demo-timeline was render-verified at +390, judged "legible + no overflow + on-style" -> stamped PASS -> handed back. Paul +then caught 3 clunky defects that were all VISIBLE in that same screenshot: grid +wobble reading as misalignment, a crowded odd-one-out STOP card, and hollow +badge-to-label gaps. **Root cause: a legibility/overflow gate is structurally BLIND +to composition.** Binary defect gates are necessary but NOT sufficient. + +**The rule:** after the binary gate (legible / no overflow / on-style) passes, run +these 6 as an EXPLICIT ticked checklist - stance = "assume clunky, find 3 things to +fix" (assuming PASS is why the 3 were missed). A render is not PASS until all 6 are +ticked, not glanced: + +1. **Alignment** - repeated elements on a clean grid, or does wobble/offset read jagged? +2. **Odd-one-out balance** - does the different cell (STOP, total row, hero) match its + siblings' internal rhythm, or crowd/diverge? +3. **Whitespace / hollowness** - dead gaps inside boxes? content floating with no anchor? +4. **Sibling consistency** - do all repeated cards share ONE internal layout (badge, label pos)? +5. **Edge breathing room** - any text CROWDING the container edge (not overflow, just tight)? +6. **Weight / emphasis** - is the one thing that should dominate actually dominant? + +**Backstop for batches:** a self-checklist still relies on the author's eye, which +rationalizes its own choices as intentional. Before a PR merge, run one INDEPENDENT +critic pass on the renders (impeccable `critique` or a fresh reviewer that didn't +draw them) - the only reliable catch for author-blind clunkiness (matches the +CLAUDE.md content cold-eyes gate). Per-exhibit: the 6-item checklist. Per-batch: the +critic pass. diff --git a/.okf/log.md b/.okf/log.md index 167b125f5..2a80b3911 100644 --- a/.okf/log.md +++ b/.okf/log.md @@ -93,6 +93,21 @@ CTR that `content-strategy/content-plan.md` was built from. * **Not in the repo**: all credential files live under `~/.config/` and `~/Library/Application Support/`. Nothing was committed but the bundle. +## 2026-08-13 (exhibit clunkiness) - render-gate needs a composition pass + +* **Update**: `.okf/design/house-visual-spec.md` gains a **render-gate + clunkiness checklist** (6 items: alignment, odd-one-out balance, whitespace/ + hollowness, sibling consistency, edge breathing room, weight/emphasis) plus a + per-batch independent-critic backstop. +* **Wobble rule corrected**: the ~0.4-0.6deg hand-drawn wobble reads as craft + in a flow/stack but as MISALIGNMENT in a grid of aligned cards - drop it in + grids. This exact spec rule caused the friday-demo-timeline clunkiness. +* **Root cause recorded**: a legibility/overflow gate is structurally BLIND to + composition. friday-demo-timeline passed the binary gate (legible/no-overflow/ + on-style) with 3 clunky defects visible in the same screenshot; Paul caught + them. Binary gates necessary, not sufficient - stance "assume clunky, find 3" + is the lever. Redraw shipped on `course-svg-per-image-fixes` (7e87b1a7 draw, + c0df99a1 de-clunk). ## 2026-08-12 (item16 landing migration) - below-fold coverage gap confirmed diff --git a/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/scorecard-at-a-glance.svg b/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/scorecard-at-a-glance.svg index dd39bbedd..fc1abea0d 100644 --- a/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/scorecard-at-a-glance.svg +++ b/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/scorecard-at-a-glance.svg @@ -1,66 +1,62 @@ - - The five agency AI questions on one card: the pass signal beside the fail signal for each, scored 0 or 1 + + Five agency-AI questions on one card. For each, a green pass signal scores 1 point and a red fail signal scores 0. Score 2 or below out of 5 and do not sign. + Scorecard. Five questions, each with a green PASS signal (1 point) and a red FAIL signal (0 points). Q1 Workflow: pass is tools by version plus a real PR; fail is senior decides, no PR. Q2 Cost: pass is a dollar range plus pass-through in the SOW; fail is included in the rate. Q3 Verify: pass is opens a real PR and names checks; fail is we trust the model or CI. Q4 Slopsquatting: pass is allowlist or scanner and says the word; fail is our devs know the packages. Q5 Accountability: pass is a dated incident plus root cause; fail is never had one, not my job. Footer: score 2 or below out of 5, do not sign, no matter how good the pitch. + + + - Score the call from this card - Give 1 point when the answer lands on the Pass side, 0 when it lands on Fail. Full criteria below. - - - - - - - Question - PASS = 1 point - FAIL = 0 points - - - - - Q1 - Workflow: ticket to code - Tools by version + a real PR - “Senior decides,” no PR - - - - Q2 - Cost: $/dev/mo, who pays - $ range + pass-through in SOW - “Included in the rate” - - - - Q3 - Verify: reviewer checks - Opens real PR, names checks - “We trust the model / CI” - - - - Q4 - Slopsquatting defense - Allowlist/scanner + says word - “Our devs know packages” - - - - Q5 - Accountability: owned it - Dated incident + root cause - “Never had one” / not my job - - - Score in real time. A total of 2 or below out of 5 - do not sign, no matter how good the pitch. + Five Agency-AI Questions + One point when the answer lands on Pass, zero on Fail + + PASS = 1 + FAIL = 0 + + + + Q1Workflow + Tools by version+ a real PR + "Senior decides,"no PR + + + Q2Cost + A $ range +pass-through in SOW + "Included in the rate" + + + Q3Verify + Opens a real PR,names the checks + "We trust the model / CI" + + + Q4Packages + Allowlist / scanner,says the word + "Our devs knowthe packages" + + + Q5Owned it + A dated incident+ root cause + "Never had one" /not my job + + + + + 2 or below out of 5? + Do not sign - no matter how good the pitch. diff --git a/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/invoice-loop.svg b/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/invoice-loop.svg index 01d066d69..9bf84a897 100644 --- a/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/invoice-loop.svg +++ b/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/invoice-loop.svg @@ -1,93 +1,43 @@ - - The month-2 invoice loop: sign the SOW with the 3 clauses, predict the bill, compare the invoice. Within plus-or-minus 20 percent, pay it and mark the baseline. 20 percent or more over, demand the itemized breakdown - a hard ticket updates the budget alert, margin or padding gets pushed back citing Clause 1. Quarterly, review the dashboards under Clause 3. - Three numbered step cards in a row: sign the SOW, predict the bill with the formula devs times average times margin, month-2 invoice arrives. The invoice card forks into two outcome cards: a green card for within 20 percent - pay it, mark it the baseline - and an amber card for 20 percent or more over - demand the itemized breakdown, with two inner lines: a check for a hard ticket that updates the budget alert, and a cross for margin or padding that gets pushed back under Clause 1. A dashed loop arrow returns to the predict step with the caption: quarterly, review the dashboards under Clause 3. + + The month-2 invoice loop. Predict the bill first, then the invoice is just a comparison. Within plus-or-minus 20 percent of your prediction, pay it and set the baseline. 20 percent or more over, demand the itemized breakdown - a real ticket is fine, padding gets cited under Clause 1. Quarterly, re-predict from the usage dashboards under Clause 3. + A single gauge split at the plus-20-percent threshold. A wide green segment, within 20 percent, means pay it and set the baseline. A narrower amber segment past the threshold, 20 percent or more over, means demand the itemized breakdown; a real ticket is fine, padding gets cited under Clause 1. Footer: quarterly, re-predict from the dashboards under Clause 3. - - - - - - + + + - - The month-2 invoice loop - Predict the bill first - then the invoice is a comparison, not a surprise. + The Month-2 Invoice Loop + Predict the bill first - then it's just a comparison. - - - - - 1 - Sign the SOW - with the 3 clauses below + + + + + + +20% - - - - - 2 - Predict the bill - devs × avg AI cost × margin - - - - - - - 3 - The invoice lands - compare it to the prediction - - - - - + ✓ PAY IT + Within ±20%. + Set the baseline. - - - - - - - - Within ±20% of the prediction - Pay it. Mark it as the baseline - for every month after. - - - - - - 20%+ over: demand the breakdown - One dev hit a hard ticket → raise the - budget alert and carry on. - Margin or padding → push back, cite Clause 1. - + ✗ DEMAND + Get the + breakdown. - - - Quarterly: open the usage dashboards yourself (Clause 3), then re-predict next month's bill. + A real ticket is fine - padding gets cited under Clause 1. + Quarterly, re-predict from the dashboards (Clause 3). diff --git a/content/course/tech-for-non-technical-founders-2026/fake-stripe-pre-sale-pieter-levels/dollar-presale-flow.svg b/content/course/tech-for-non-technical-founders-2026/fake-stripe-pre-sale-pieter-levels/dollar-presale-flow.svg index 5a4c10ed9..90a6ddd70 100644 --- a/content/course/tech-for-non-technical-founders-2026/fake-stripe-pre-sale-pieter-levels/dollar-presale-flow.svg +++ b/content/course/tech-for-non-technical-founders-2026/fake-stripe-pre-sale-pieter-levels/dollar-presale-flow.svg @@ -1,54 +1,57 @@ - - The $1 pre-sale flow, from button to proof + + The $1 pre-sale flow, from button to proof. A real $1 charge beats a free email signup with the same visitors and a sharper signal. 1 the button: reserve your spot, $1 now, refundable if we don't ship, same Stripe Payment Link as Lesson 1.5. 2 the charge: a real charge is a wallet decision, conversion drops 3-5x but the signal is truer. 3 the promise: a full refund within 7 days if we don't ship, every charge refunded within 30 days. 4 what it proved: 0 sales means price or hypothesis wrong, 1-10 sales means iterate headline and targeting, 50+ sales is a PMF signal to start building. + Four numbered steps. 1 the button: reserve your spot, $1 now, refundable if we don't ship; same Stripe Payment Link as Lesson 1.5. 2 the charge: a real charge is a wallet decision not a free email click; conversion drops 3-5x but the signal is truer. 3 the promise: a full refund within 7 days if we don't ship, and every charge refunded within 30 days. 4 what it proved: 0 sales means price or hypothesis wrong, 1-10 sales means iterate headline and targeting, 50 or more sales is a product-market-fit signal to start building. Footer: the click proves demand, not a business yet. + + - The $1 pre-sale flow - A real $1 charge beats a free email signup - same visitors, sharper signal. + The $1 Pre-Sale Flow + A real $1 charge beats a free email signup - sharper signal. - - - 1. THE BUTTON - "Reserve your spot - $1 today, - refundable if we don't ship by [DATE]." - Same Stripe Payment Link setup as Lesson 1.5. + + + 1 + The button + Reserve your spot: $1 now, refundable. + Same Stripe Payment Link as Lesson 1.5. - - - 2. THE CHARGE - A real $1 Stripe charge - a wallet - decision, not a free email click. - Conversion drops 3-5x - fewer clicks, truer signal. + + + 2 + The charge + A real charge, not a free email click. + Conversion drops 3-5x - but the signal is truer. - - - 3. THE PROMISE - Thank-you page promises a full refund - within 7 days if we don't ship by [DATE]. - Non-negotiable: refund every charge within 30 days. + + + 3 + The promise + Full refund within 7 days if we don't ship. + Every charge refunded within 30 days. Non-negotiable. - - - 4. WHAT THE CLICK PROVED - 0 sales: hypothesis or price is wrong. - 1-10 sales: iterate headline + targeting. - 50+ sales: PMF signal - start building. + + + 4 + What the click proved + 0 sales → price or hypothesis is wrong. + 1-10 sales → iterate headline + targeting. + 50+ sales → PMF signal, start building. - - - The click proves demand. Not a business. - Retention (5.1) and unit economics are separate, later tests. + The click proves demand - not a business (yet). diff --git a/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/kit-sample-row.svg b/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/kit-sample-row.svg index bb86c76f6..fe7ba1b85 100644 --- a/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/kit-sample-row.svg +++ b/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/kit-sample-row.svg @@ -1,100 +1,68 @@ - - Sample row from the First 10 Customers Google Sheet tracker + + Sample rows from the First 10 Customers tracker. + A four-column table from the Google Sheet tracker: Name, Bucket, Progress, and Deposit. Priya Shah, a Champion (purple pill), paid May 10, deposit 2,400 dollars. Marcus Liu, Hot (ruby pill), demo scheduled May 12, no deposit yet. Sarah Okafor, Warm (amber pill), replied no fit, no deposit. Ana Reyes, a Champion, paid May 9, deposit 1,800 dollars. Color-coded bucket pills, date-stamped progress, and a Deposit column that sums to your live ARR. Names are illustrative composites. - First 10 Customers tracker - sample rows from the Google Sheet template + + - - - Name - Company - Bucket - Loom sent - Reply - Demo - DPA sent - Deposit + First 10 Customers tracker + Sample rows from the Google Sheet template + + + + Name + Bucket + Progress + Deposit - - Priya Shah - Quanta Marketing - - CHAMPION - May 6 - Yes - May 7 - May 9 - May 10 - $2,400 + + Priya Shah + + CHAMPION + Paid May 10 + $2,400 - - Marcus Liu - Beacon Analytics - - HOT - May 6 - Yes - May 8 - May 12 scheduled - - - - + + Marcus Liu + + HOT + Demo May 12 + - - - Sarah Okafor - Mesa Systems - - WARM - May 7 - Yes - no fit - - - - - - - - - - Devon Park - Cohort Health - - HOT - May 6 - Maybe · 5/9 - F/u sent - - - - + + Sarah Okafor + + WARM + Replied - no fit + - - - - Ana Reyes - Northwall Studio - - CHAMPION - May 6 - Yes - May 6 - May 8 - May 9 - $1,800 + + + Ana Reyes + + CHAMPION + Paid May 9 + $1,800 - - Color-coded bucket pills. Date-stamped progress. Deposit column sums to your live ARR. - Friday afternoon review: how many in each column, which rows stalled, what is your next move. + Color-coded buckets, date-stamped progress - Deposit sums to live ARR. - - - Names in this sample are illustrative composites. + + + Names in this sample are illustrative composites. diff --git a/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/architecture-comparison.svg b/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/architecture-comparison.svg index 4ffb25d4a..32786356e 100644 --- a/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/architecture-comparison.svg +++ b/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/architecture-comparison.svg @@ -1,102 +1,69 @@ - - Healthy Rails monolith vs over-engineered microservice mess for a pre-Series-A startup + + "We need to fix the architecture": a healthy Rails monolith - one cohesive unit holding Hotwire, ActiveRecord, Postgres, Sidekiq and Kamal deploy, shipped by one developer - versus an over-engineered microservice sprawl of nine services wired into a tangle, run by two platform engineers who ship zero features. DHH calls the left the one-person framework. + Left, green: one cohesive box, a Rails monolith, containing Hotwire UI, ActiveRecord, Postgres, Sidekiq and Kamal deploy - one repo, one full-stack dev ships a feature idea-to-production. Right, red: nine separate service boxes - React, Node API, Auth, Elasticsearch, Kafka, service mesh, three Redis clusters, Vault, and a platform team - wired together into a tangle of connections; two platform engineers ship zero features. The left is one simple unit; the right is a web nobody can hold in their head. Footer: the boring choice ships features, the exciting one ships plumbing; DHH calls the left the one-person framework. + + + - HEALTHY (Rails monolith) - - - - Rails monolith · one repo - - - Hotwire UI - (no separate SPA) - - - ActiveRecord - (business logic) - - - Postgres - (one DB) - - - Sidekiq - (background jobs) - - - Kamal deploy to - Hetzner / Heroku - - 1 repo · 1 full-stack dev ships - a feature idea-to-production - - OVER-ENGINEERED - - - - React - frontend - - - Node API - gateway - - - Auth - microservice - - - Elasticsearch - cluster - - - Kafka - event bus - - - "Platform team" - (2 FTE) - - - Service mesh - (Istio) - - - Redis - (3 clusters) - - - Vault for - secrets - - - - - - - - - - - 2 platform engineers · 0 features shipped - "We need to fix the architecture" - - - - Pre-Series-A, < $1M revenue: the boring choice on the left ships features. The exciting choice on the right ships plumbing. - DHH calls the left "the one-person framework." Founders we rescue arrived from the right. + "Fix the architecture" + Pre-Series-A - which one ships features? + + ✓ HEALTHY + ✗ OVER-ENGINEERED + + + + Rails monolith + + Hotwire UI + ActiveRecord + Postgres + Sidekiq + Kamal deploy + one repo + + + + + + + + + + + + React + Node API + Auth + Elasticsearch + Kafka + Mesh + Redis ×3 + Vault + + + 1 dev ships a feature. + 2 engineers, 0 features. + + The boring choice ships features. The exciting one ships plumbing. + DHH calls the left "the one-person framework." diff --git a/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/jargon-translator.svg b/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/jargon-translator.svg index 83b6b742a..4ebfdb8cc 100644 --- a/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/jargon-translator.svg +++ b/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/jargon-translator.svg @@ -1,65 +1,69 @@ - - Jargon Translator: What Your Dev Shop Says vs What It Usually Means + + Jargon Translator: what your dev shop says vs what it usually means. Five phrases, each with its real meaning. + A translation table. Left column, red, "What they say"; right column, blue, "What it means". Five rows: refactoring the order flow means rewriting code we shipped before, on your dime, called tidy-up. A Docker upgrade means something on the server broke and they can't reproduce it locally. Tech debt to pay down means we wrote it badly, pay us to fix what you already paid us to write. Ship the MVP first means the cheapest scope they can finish inside the budget you have left. Fix the architecture means they want resume-building tech the senior dev has not tried yet. Footer: five words, five invoices - take the meaning column to standup. + + + + + + - WHAT THEY SAY - WHAT IT USUALLY MEANS + The Jargon Translator + What your dev shop says vs what it usually means - - "We're refactoring - the order flow" - - - - Rewriting code we shipped before, - on your dime, calling it tidy-up + WHAT THEY SAY + WHAT IT MEANS - - "We need a - Docker upgrade" - - - - Something on the server broke; - we can't reproduce locally + + + "We're refactoringthe order flow" + + + Rewriting code we shippedbefore, on your dime -called "tidy-up". + + + + "We need aDocker upgrade" + + + Something on the serverbroke; they can'treproduce it locally. + + + + "Lots of tech debtto pay down" + + + We wrote it badly. Pay usto fix what you alreadypaid us to write. + + + + "Let's just shipthe MVP first" + + + The cheapest scope theycan finish inside thebudget you have left. + + + + "We need to fixthe architecture" + + + They want resume-buildingtech the senior devhasn't tried yet. + - - "There's a lot of - tech debt to pay down" - - - - We wrote it badly. Pay us to fix - what you already paid us to write - - - "Let's just ship - the MVP first" - - - - The cheapest scope we can finish - inside the budget you have left - - - "We need to fix - the architecture" - - - - We want resume-building tech - the senior dev hasn't tried yet - - Five words. Five invoices. Bring the question column to your next standup. + Five words, five invoices - take the meaning column to standup. diff --git a/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/refactor-check.svg b/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/refactor-check.svg index c02b72d07..f7c22df4e 100644 --- a/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/refactor-check.svg +++ b/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/refactor-check.svg @@ -1,103 +1,71 @@ - - Refactoring, real versus fake: one messy 400-line controller either splits into small controllers behind the same Stripe webhook with tests still green (a real refactor), or gets rewritten into a 3,800-line v2 with the Stripe secret hard-coded that broke checkout at the board demo and cost a 9,000-dollar invoice (a fake refactor). + + Refactoring, real versus fake. One messy 400-line OrdersController either splits into small controllers behind the same Stripe webhook with tests still green - a real refactor - or gets rewritten into a 3,800-line v2 with the Stripe secret hard-coded that broke checkout at the board demo and cost a $9,000 invoice - a fake refactor. + A messy 400-line OrdersController forks two ways. Green, REAL REFACTOR: split into Cart 120 lines, Checkout 140 lines, Receipt 130 lines, behind the same Stripe webhook, tests stay green, same behavior, cleaner structure, capped at 3-line commits. Red, FAKE REFACTOR: OrdersController v2 at 3,800 lines with no tests, the Stripe secret hard-coded in the controller, checkout broke at the board demo, a $9,000 invoice for the rewrite. Footer: a real refactor leaves a working feature untouched; a fake one rewrites it on your dime. - - - + + + + + - Refactoring: real vs fake - One messy controller. Two ways the word lands on your invoice. - - - - - OrdersController - 400 lines, messy, - hard to read - - - - - - - - REAL REFACTOR ✓ - - - - Cart · 120 lines - - - - Checkout · 140 lines - - - - Receipt · 130 lines - - - - - - - Same Stripe webhook - Tests stay green - - - - - - - ✓ Same behavior - Cleaner structure - 3-line commit cap - - - - FAKE REFACTOR ✗ - - - - OrdersController v2 - 3,800 lines, no tests - - - - - - - Stripe secret - hard-coded in controller - - - - - - - ✗ Checkout broke - at the board demo - $9K for the rewrite - - - A real refactor leaves a working feature untouched. A fake one rewrites it on your dime. + Refactoring: real vs fake + One messy controller. Two ways the word lands on your invoice. + + + + OrdersController + 400 lines, messy, hard to read + + + + + + + + ✓ REAL REFACTOR + Cart · 120 lines + Checkout · 140 lines + Receipt · 130 lines + Same Stripe webhook + Tests stay green + Same behavior, cleaner + 3-line commit cap + Working feature, + untouched. + + + + ✗ FAKE REFACTOR + OrdersController v2 + 3,800 lines, no tests + Stripe secret + hard-coded in controller + Checkout broke + at the board demo + $9K for the rewrite + Rewritten on + your dime. + + A real refactor leaves a working feature untouched. + A fake one rewrites it on your dime. diff --git a/content/course/tech-for-non-technical-founders-2026/form-your-founding-hypothesis-90-minute-sprint/hypothesis-mad-libs.svg b/content/course/tech-for-non-technical-founders-2026/form-your-founding-hypothesis-90-minute-sprint/hypothesis-mad-libs.svg index 99c27d79d..51a49ceaa 100644 --- a/content/course/tech-for-non-technical-founders-2026/form-your-founding-hypothesis-90-minute-sprint/hypothesis-mad-libs.svg +++ b/content/course/tech-for-non-technical-founders-2026/form-your-founding-hypothesis-90-minute-sprint/hypothesis-mad-libs.svg @@ -1,58 +1,51 @@ - - Fill five specific blanks and the hypothesis becomes one testable sentence. - A fill-in-the-blank sentence with five outlined placeholder chips: customer, problem, approach, competition and differentiation, stitched by the connecting words "If we help ... solve ... with ..., they'll choose it over ... because ...". Below, the customer blank is filled two ways to show what specific means: the vague fill "small businesses" gets a shrug, the specific fill "solo chiropractors" (marked in ruby) gets "that's me". Basis: the founding-hypothesis frame from Click by Knapp and Zeratsky, 2025. + + Fill five specific blanks and the founding hypothesis becomes one testable sentence: if we help CUSTOMER solve PROBLEM with APPROACH, they'll choose it over COMPETITION because DIFFERENTIATION. Categories get a polite nod; specifics get pushback - "small businesses" gets a shrug, "solo chiropractors" gets "that's me". Basis: the founding-hypothesis frame from Click by Knapp and Zeratsky, 2025. + A fill-in-the-blank sentence with five outlined placeholder chips - customer, problem, approach, competition, differentiation - stitched by connecting words: if we help CUSTOMER solve PROBLEM with APPROACH, they'll choose it over COMPETITION because DIFFERENTIATION. Below, the customer blank filled two ways: the vague fill "small businesses" gets a shrug; the specific fill "solo chiropractors", in ruby, gets "that's me". Basis: Click by Knapp and Zeratsky, 2025. + - - - - - - Five specific blanks, one testable sentence - Categories get a polite nod; specifics get pushback - - - If we help - - CUSTOMER - solve - - PROBLEM - with - - APPROACH - - - they'll choose it over - - COMPETITION - because - - DIFFERENTIATION - - - - Fill it vague: - - small businesses - - - solo chiropractors - = "that's me" - - - Basis: the founding-hypothesis frame from Click (Knapp & Zeratsky, 2025) + Five blanks, one testable sentence + Categories get a polite nod - specifics get pushback. + + + If we help + CUSTOMER + solve + PROBLEM + + with + APPROACH + , they'll choose it over + + COMPETITION + because + DIFFERENTIATION + + + + Fill the CUSTOMER blank: + + small businesses + → a polite nod + + solo chiropractors + → "that's me!" + + Basis: Click (Knapp & Zeratsky, 2025) diff --git a/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/catching-the-lie.svg b/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/catching-the-lie.svg index 73ab8ab91..c594ab7e9 100644 --- a/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/catching-the-lie.svg +++ b/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/catching-the-lie.svg @@ -1,145 +1,61 @@ - - One Loom for a small full-stack team versus five Looms for a microservice-detached team + + One Loom from a small full-stack team versus five Looms from a microservice-detached team. The full-stack team shows one 90-second Loom of the whole checkout flow end-to-end; the detached team sends five separate service Looms and asks you to sync about them next week. That is what you are paying for. + Left, green, a small full-stack team's ONE Loom, 9 minutes 42, of the checkout flow on staging: sign up, add to cart, checkout, $1 Stripe charge, receipt with email sent - one developer narrates end-to-end in 90 seconds while the founder clicks along. Right, red, a microservice-detached team's FIVE Looms: order-service, billing-service, notifications, front-end, and infra gateway, each a separate video, with "watch these five videos and we can sync about them next week". Footer: this is what you are paying for. - - - - - - + + + - - - SMALL FULL-STACK TEAM · ONE LOOM - - - - - - - Loom · 9:42 - - - - - checkout flow · v1 - - - - staging.acme.app - /signup → /checkout → /receipt - - - - - - - sign up - user enters - - - add to cart - click button - - - checkout - $1 stripe charge - - - - receipt - email sent ✓ - - - one developer narrates end-to-end · 90 seconds · founder clicks along - - - - MICROSERVICE-DETACHED TEAM · FIVE LOOMS - - - - - - - - Loom · 6:18 - - - order-service - orders.api.acme - - - - - - - Loom · 4:51 - - - billing-service - billing.api.acme - - - - - - - Loom · 7:33 - - - notifications - notify.api.acme - - - - - - - Loom · 8:02 - - - front-end - app.acme.dev - - - - - - - Loom · 5:47 - - - infra · gateway - gw.k8s.acme - - - - - - - - - - - - - "watch these five videos and we can sync about them next week" - this is what you are paying for + One Loom vs Five Looms + The Friday demo: one story, or five you must stitch? + + + + ✓ ONE LOOM + small full-stack team + + ▶ 9:42 · checkout flow + + + sign up + add to cart + checkout + $1 Stripe charge + receipt · email ✓ + One dev, end-to-end. + 90 seconds. + + + + ✗ FIVE LOOMS + detached team + ▶ 6:18 order-service + ▶ 4:51 billing-service + ▶ 7:33 notifications + ▶ 8:02 front-end + ▶ 5:47 infra · gateway + Watch five videos, + sync next week. + + This is what you're paying for. diff --git a/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/demo-rule.svg b/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/demo-rule.svg index e1464c0f1..c02a930fd 100644 --- a/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/demo-rule.svg +++ b/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/demo-rule.svg @@ -1,137 +1,55 @@ - - The Friday Demo Rule: 15 minutes, working software only, no slides or Jira screenshots + + The Friday Demo Rule: 15 minutes, working software only, no slides or Jira screenshots. Allowed in the room: the checkout on staging, a $1 test charge processed, order 1284 paid, webhook fired, receipt shown live, a real login. Not allowed: a Jira screenshot, a Figma frame, a slide deck, a burndown chart. If a demo is not ready, say so on Wednesday. + Two columns of chips. Green, ALLOWED, working software: staging checkout, $1 test charge, order 1284 paid, webhook fired, receipt shown live, real login - you click along live. Red, NOT ALLOWED, theatre: a Jira screenshot, a Figma frame, a slide deck, a burndown chart. Footer: 15 minutes, Loom or live, working software only; if a demo is not ready, say so on Wednesday. + + + - - FRIDAY 4PM · ALLOWED IN THE ROOM - - - - - - - - - - - - - - - 15:00 - hard stop - - - - - - - - - - - - - - - - staging.acme.app/checkout - - - - ✓ $1 test charge processed - order #1284 → paid - webhook fired ✓ - receipt → demo@example.com - - - stripe sandbox - - - - - - - - login (one message, one paste) - demo@example.com / example-pass-123 - - - - Working software only. - click everything they show you, during the call - - - - - - NOT ALLOWED IN THE ROOM - - - - - Jira screenshot - - - - - To Do - In Progress - Done ×11 - - + The Friday Demo Rule + 15 min · working software only · Friday 4pm hard stop + + ✓ ALLOWED + working software + ✗ NOT ALLOWED + theatre + + + + ✓ staging.acme/checkout + ✓ $1 test charge processed + ✓ order #1284 → paid + ✓ webhook fired + ✓ receipt shown live + ✓ real login (one paste) - - - - - Figma frame - - - - - - + You click along, live. + + + + ✗ Jira screenshot · 11 done + ✗ Figma frame + ✗ Slide deck + ✗ Burndown chart + Not ready? Say so Wednesday. - - - - Slide deck · burndown chart - - - - - - - - - - If a demo is not ready, - say so on Wednesday. - - - - Friday Demo Rule · 15 minutes · Loom or live · working software only + 15 minutes · Loom or live · working software only. diff --git a/content/course/tech-for-non-technical-founders-2026/friday-demo-template/friday-demo-timeline.svg b/content/course/tech-for-non-technical-founders-2026/friday-demo-template/friday-demo-timeline.svg index 7b013ad67..17d2fb5c2 100644 --- a/content/course/tech-for-non-technical-founders-2026/friday-demo-template/friday-demo-timeline.svg +++ b/content/course/tech-for-non-technical-founders-2026/friday-demo-template/friday-demo-timeline.svg @@ -1,75 +1,59 @@ - - The 15-minute Friday demo: 7 questions in order, then the hard stop + + The 15-minute Friday demo: 7 questions in the same order every week, then a hard stop. + Seven numbered demo questions in a two-row grid, then a hard-stop card. 1 shipped, 2 what did a user do, 3 is it live here, 4 what got cut, 5 is it in review, 6 blocked on anything, 7 what worries you next - then a hard stop. Footer rules: working software only, no slides, no mockups; no Figma, no Jira screenshots; if a demo is not ready, say so Wednesday; you click the staging URL yourself, live, while they talk. + + - The 15-minute Friday demo - Same 7 questions, same order, every week - 4pm, hard stop. - - - - Q1 - SHIPPED? - - - - - Q2 - USER DID? - - - - - Q3 - LIVE HERE? - - - - - Q4 - WHAT CUT? - - - - - Q5 - IN REVIEW? - - - - - Q6 - BLOCKED? - - - - - Q7 - WORRY NEXT? - - - - - - STOP - 15 MIN - HARD - - - - Working software only. No slides, no mockups. - No Figma, no Jira screenshots. If a demo isn't ready, say so Wednesday. - You click the staging URL yourself, live, while they talk. + The 15-Minute Friday Demo + Same 7 questions, same order, every week - 4pm, hard stop. + + + + 1 + SHIPPED? + + 2 + USER DID? + + 3 + LIVE HERE? + + 4 + WHAT CUT? + + + + 5 + IN REVIEW? + + 6 + BLOCKED? + + 7 + WORRY NEXT? + + + HARD STOP + + + + Working software only. No slides, no mockups. + No Figma, no Jira screenshots. If a demo isn't ready, say so Wednesday. + You click the staging URL yourself, live, while they talk. diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/23033e11-c879-4cbf-a078-0fc2817a8633_1678x1138.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/23033e11-c879-4cbf-a078-0fc2817a8633_1678x1138.webp new file mode 100644 index 000000000..ea3020da6 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/23033e11-c879-4cbf-a078-0fc2817a8633_1678x1138.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/23a086a0-7264-4a27-bff8-11f651ab1562_1520x968.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/23a086a0-7264-4a27-bff8-11f651ab1562_1520x968.webp new file mode 100644 index 000000000..1d5dd701e Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/23a086a0-7264-4a27-bff8-11f651ab1562_1520x968.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.webp new file mode 100644 index 000000000..6ec419bdd Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/27d20d91-ec83-43b2-bbd8-23155b8f008f_1914x1382.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/27f70b46-353b-46e3-ad30-db8f426a9fb8_1630x1086.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/27f70b46-353b-46e3-ad30-db8f426a9fb8_1630x1086.webp new file mode 100644 index 000000000..bbc0460f7 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/27f70b46-353b-46e3-ad30-db8f426a9fb8_1630x1086.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/43cda95e-8adf-459c-9807-5faac3c2fb9d_1636x726.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/43cda95e-8adf-459c-9807-5faac3c2fb9d_1636x726.webp new file mode 100644 index 000000000..15ec884b1 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/43cda95e-8adf-459c-9807-5faac3c2fb9d_1636x726.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/481f20e7-d9be-42c2-9e1d-4009bed26a32_1706x1136.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/481f20e7-d9be-42c2-9e1d-4009bed26a32_1706x1136.webp new file mode 100644 index 000000000..09e913357 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/481f20e7-d9be-42c2-9e1d-4009bed26a32_1706x1136.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/5e947eb7-82b9-4ab1-a39c-03c32547b53a_2100x1398.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/5e947eb7-82b9-4ab1-a39c-03c32547b53a_2100x1398.webp new file mode 100644 index 000000000..60986d15a Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/5e947eb7-82b9-4ab1-a39c-03c32547b53a_2100x1398.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/64e9368b-a6ff-4f87-9173-1d84077710cf_1802x1200.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/64e9368b-a6ff-4f87-9173-1d84077710cf_1802x1200.webp new file mode 100644 index 000000000..7350eaff0 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/64e9368b-a6ff-4f87-9173-1d84077710cf_1802x1200.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/6c3bb61f-fc24-4ba7-b4d9-4c54256d81df_3068x2034.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/6c3bb61f-fc24-4ba7-b4d9-4c54256d81df_3068x2034.webp new file mode 100644 index 000000000..b1ad54d32 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/6c3bb61f-fc24-4ba7-b4d9-4c54256d81df_3068x2034.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/8d6bf270-b67b-4082-9af9-bf011f3239a4_2188x1456.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/8d6bf270-b67b-4082-9af9-bf011f3239a4_2188x1456.webp new file mode 100644 index 000000000..a2100eb37 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/8d6bf270-b67b-4082-9af9-bf011f3239a4_2188x1456.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/99a9c756-8add-411a-b733-8608f910a416_1802x1198.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/99a9c756-8add-411a-b733-8608f910a416_1802x1198.webp new file mode 100644 index 000000000..d5c6ec663 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/99a9c756-8add-411a-b733-8608f910a416_1802x1198.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/bcdf5bd1-2bce-4b88-ae47-2e5e43c373b9_1274x1154.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/bcdf5bd1-2bce-4b88-ae47-2e5e43c373b9_1274x1154.webp new file mode 100644 index 000000000..d032fd419 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/bcdf5bd1-2bce-4b88-ae47-2e5e43c373b9_1274x1154.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/c618e379-f95f-453c-86ca-970e245b8546_2070x1372.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/c618e379-f95f-453c-86ca-970e245b8546_2070x1372.webp new file mode 100644 index 000000000..6b3753a9f Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/c618e379-f95f-453c-86ca-970e245b8546_2070x1372.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/c69b13c2-e3d6-4d74-a60e-e0673ae75421_4248x1860.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/c69b13c2-e3d6-4d74-a60e-e0673ae75421_4248x1860.webp new file mode 100644 index 000000000..ba813a9b2 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/c69b13c2-e3d6-4d74-a60e-e0673ae75421_4248x1860.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/df040445-0757-4574-8be1-7ee85f619d14_1200x800.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/df040445-0757-4574-8be1-7ee85f619d14_1200x800.webp new file mode 100644 index 000000000..4d111f359 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/df040445-0757-4574-8be1-7ee85f619d14_1200x800.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/e769dbfe-186f-440f-b11a-6c0a37004fbf_1888x1280.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/e769dbfe-186f-440f-b11a-6c0a37004fbf_1888x1280.webp new file mode 100644 index 000000000..f0d4c3ab2 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/e769dbfe-186f-440f-b11a-6c0a37004fbf_1888x1280.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/f7e42d1a-5d84-421f-ad1c-25517ae5a3fe_2072x1372.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/f7e42d1a-5d84-421f-ad1c-25517ae5a3fe_2072x1372.webp new file mode 100644 index 000000000..433b7c17d Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/f7e42d1a-5d84-421f-ad1c-25517ae5a3fe_2072x1372.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/f852daca-55b9-4111-b471-eea4479132fb_3750x2500.webp b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/f852daca-55b9-4111-b471-eea4479132fb_3750x2500.webp new file mode 100644 index 000000000..cdcc905a7 Binary files /dev/null and b/docs/projects/2605-tech-for-non-technical-founders/10-19-research/images/f852daca-55b9-4111-b471-eea4479132fb_3750x2500.webp differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/50-59-execution/50.02-aug14-metrics-read.md b/docs/projects/2605-tech-for-non-technical-founders/50-59-execution/50.02-aug14-metrics-read.md new file mode 100644 index 000000000..44c3d5494 --- /dev/null +++ b/docs/projects/2605-tech-for-non-technical-founders/50-59-execution/50.02-aug14-metrics-read.md @@ -0,0 +1,106 @@ +# 50.02 - Aug-14 Metrics Read (run 2026-08-13, one day early) + +**Purpose**: first evidence read of the GA4 campaign window against the week-0 +baseline ([50.01](50.01-week0-metrics-baseline.md)). The board's standing rule +compares before/after; this is the AFTER for the first window. Clarity was +waived by Paul - GA4 is the measurement stack. + +## Data source (correction for future readers) + +Live jetthoughts.com traffic is on GA4 property **328508492 "Home Page - GA4"** +(`G-T1N27FC30F`, tz Europe/Kiev). The "Blog-GA4" (315618854) and +"jetthoughts-blog" (332322607) properties return zero course rows - do not use +them. GSC property: `sc-domain:jetthoughts.com`. + +## Windows compared (identical filter: landingPage/pagePath CONTAINS `/course/tech-for-non-technical`) + +- Pre / baseline: **2026-07-17 -> 07-30** (14 days, pre-launch) +- Campaign: **2026-07-31 -> 08-13** (14 days, post-launch) + +## Finding 1 - No measurable lift in course-landing volume + +| Course-landing sessions | Pre (Jul 17-30) | Campaign (Jul 31-Aug 13) | +|---|---|---| +| Total | 84 | 75 | +| Direct | 82 | 70 | +| Organic Search | 1 | 3 | +| Referral / Unassigned | 1 | 2 | + +Flat-to-slightly-down. The Wave-G blog publishes (6 deep-linking posts) + the +landing critique fixes did **not** move course-landing volume in the first +window. This is the headline the read exists to surface. + +## Finding 2 - Course is ~93% Direct; invisible in organic search + +- Campaign landing channel split: 70 Direct / 3 Organic / 2 Unassigned. LinkedIn + + newsletters strip the referrer -> GA4 buckets them Direct, so the campaign + reaches the course through its intended path, not search. +- GSC 28-day (whole site): 140 clicks / 104,562 impressions / 0.13% CTR / avg + pos 18.5. **Zero course pages in the GSC top-25.** Only 3 organic sessions hit + the entire course cluster in 14 days. Organic footprint is entirely the + Rails/Ruby + AI-agent blog cluster + brand queries. SEO for 2-week-old course + content has not started - expected, not a failure. + +## Finding 3 - Landers read deeply, but the funnel decays down-module + +Engagement, campaign window (property 328508492): + +| Page | Views | Total engagement (s) | Avg session (s) | Bounce | +|---|---|---|---|---| +| Landing | 48 | 781 | 239.8 | 3.2% | +| M1.1 form-your-founding-hypothesis | 11 | 699 | 166.9 | 0% | +| M1 one-page-product-brief | 16 | 302 | 47.3 | 23.5% | +| M2 smoke-test-build-page | 8 | 238 | 35.4 | 0% | +| M5 paid-pilot-charge-before-ship | 8 | 11 | 33.6 | 37.5% | +| should-you-hire-2026-decision-tree | 8 | 76 | 9.2 | 12.5% | +| stop-specifying-features-start-outcomes | 7 | 67 | 8.4 | 14.3% | + +Top-of-funnel (landing, M1.1) genuinely holds attention (167-240s, near-zero +bounce). M5 / reference / hiring lessons get 2-12s skims. Classic leakage: +strong top, thin bottom. + +## Finding 4 - The interactive funnel mechanics are effectively dead + +Custom event counts, campaign window (14 days): + +| Event | Fires | +|---|---| +| `course_checkpoint_reveal` (q1-q6) | 4 | +| `course_branch_click` | 2 | +| `course_start_course` (primary CTA) | 1 | +| `course_pdf_download` | 0 (absent) | +| `course_copy_share_link` | 0 (absent) | +| glossary-click / quickstart | 0 (absent) | + +The primary funnel CTA fired **once** in 14 days. Every interactive mechanic is +at or near zero. + +## Decisions gated by this read + +1. **Blog->course bridge is not converting.** Volume flat, `start_course`=1. + Before adding more funnel posts, inspect whether the in-post course CTAs are + clicked at all (they are not, per Finding 4). Adding more Wave-G posts on the + current bridge design is not justified by evidence. +2. **Remove the unused mechanics (per 50.01's standing removal rule - mechanics + that don't move the funnel get removed, not iterated):** + - checkpoint reveals q1-q6 (4 fires) -> REMOVE + - copy-share-link (0) -> REMOVE + - pdf-download (0) -> REMOVE / investigate wiring (0 is suspicious for a + download beacon - confirm it fires before deleting) + - branch-click (2), glossary-click (0), quickstart (0) -> REMOVE candidates +3. **Down-funnel content (M4/M5, hiring, reference) gets skims, not reads.** The + L3 landing restructure (item 13, W4) should prioritise getting landers deeper + into M2-M3, where read-depth is still healthy, before investing in M4/M5 pages + almost no one reaches. + +## Method note / caveat + +- The 50.01 "13 sessions / 14 days, 45% scroll, 11.27s" R3 figure measured a + narrower slice (a specific landing variant / scroll-tracked subset), NOT the + whole course-landing session count - do not compare it to the 75/84 totals + here. The clean apples-to-apples is the two GA4 windows above, same filter. +- Direct dominates BOTH windows (~93-97%), so a chunk of "course traffic" may be + internal/team/bot views; the campaign's incremental Direct is not separable + from baseline Direct in GA4 without UTM tagging. **Action for next campaign + push: UTM-tag LinkedIn/newsletter course links** so lift becomes measurable + instead of collapsing into Direct. diff --git a/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md b/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md index 9cdc657db..284026d76 100644 --- a/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md +++ b/docs/projects/2605-tech-for-non-technical-founders/TASK-TRACKER.md @@ -6,10 +6,12 @@ ## ⏱ Next dated event -**Aug-14 metrics read** — first evidence read of the GA4/Clarity campaign window against the week-0 baseline (`50-59-execution/50.01-week0-metrics-baseline.md`). It gates items 13 and the post-freeze window; nothing else waits on it. +**Aug-14 metrics read — DONE 2026-08-13 (run a day early).** Full read: [`50-59-execution/50.02-aug14-metrics-read.md`](50-59-execution/50.02-aug14-metrics-read.md). Headline: NO course-landing lift vs pre-launch (84→75 sessions/14d, ~93% Direct, course absent from GSC top-25) and the interactive funnel is dead (`start_course`=1, checkpoint-reveal=4, pdf/copy-share/glossary=0 in 14 days). Gates: (1) blog→course bridge unproven — do NOT ship more Wave-G funnel posts on the current bridge design; (2) remove the unused mechanics per 50.01's standing removal rule; (3) item 13 (W4) should prioritise driving landers into M2-M3 (read-depth still healthy) over M4/M5 pages almost no one reaches. Next-campaign action: UTM-tag LinkedIn/newsletter course links so lift stops collapsing into Direct. ## Open queue (in execution order) +0. **Sprint "Prove ICP Arrival" (validation) — ACTIVE, set 2026-08-13.** Manager panel (growth + learning + lean lenses, `/brainstorm`+vote) UNANIMOUS: with no traffic lift (84→75 sessions/14d, ~93% Direct, course absent from GSC) AND a dead funnel (start_course=1, mechanics=0), the constraint is **arrival/reach, not polish**. **Audit correction (premise was stale):** the campaign for this is ALREADY BUILT and READY — `linkedin-posts/icp-validation/POSTING-PACKET.md`, 10 posts drafted, zero posted, UTM scheme defined (`utm_campaign=icp_validation_`), **▶ POST #1 SCHEDULED 2026-08-13** on Paul's LinkedIn for Thu Aug 13 3:30 PM CEST (9:30am ET peak) via claude-in-chrome, verified in Scheduled posts — 2-week kill-clock starts on publish today. Post #1 is a **reply-CTA** post (validates ICP *presence*/language on LinkedIn, H1-H5), which is the correct **cheapest FIRST test** — upstream of course *arrival*. **Step 2 (backlog, manager-prepped): UTM'd course-link posts** to test click-through/arrival, drafted only if step-1 engagement appears (contradicts H5's no-link-CTA design, so gated on step-1 signal). **Manager autonomous work while Paul-gated:** verify packet still valid post-Aug-14 (✅ story post evergreen, passed 5 critic passes), prep step-2 arrival posts + the 5-day measurement/kill-criteria read. **Panel parked, data-justified:** rest of W4 (item 13) dead-mechanic removal → opportunistic; 36-image SVG migration → opportunistic; item 7 → BLOCKED by gate #1. + 1. **Item 16 — Landing full-migration to the shuffle2 reference. ✅ DONE, MERGED (PR #444, squash `902686f3`, 2026-08-12).** Paul approved the render + flagged `bin/check-landing-parity` as redundant → removed (YAGNI). Design panel (conversion/taste/UX) decided Fork A = Option 2 + embedded CTA (dark NOT-cover, endcap merged into the dark base, no light sliver), Fork B = relocate all 4 off-reference sections, section reorder to reference order. Shipped T1-T6 (relocate 4 sections + 5 anchor repoints, reorder, gradient H1, 3-col mistakes, hero stat cells, dark band + merged endcap + 4 dead-selector cleanup, de-farmed chapter links). Linux baselines re-recorded via CI `update-baselines` (40-file env-drift re-sync incl. the intended `desktop/course/landing`) and rode the merge. Result render: `40-49-review/40.32-item16-result-full.jpeg`. Both reviewer agents failed on Fable quota → all blocking checks self-run with grep evidence. **Landing is live.** 2. **Item 18 — Course SVG corpus → O2. ❌ ABANDONED 2026-08-13, PR #445 CLOSED unmerged.** Over-engineering: the 9px mobile-legibility floor forced 46 wide/dense hand-drawn (Caveat, O1) reference exhibits into 720-wide re-layouts that Paul judged WORSE than the originals - both the flat O2 pass (squared corners, lost per-module color-coding + ✓/✗ markers, overflow) AND careful style-preserving re-fits (elegant single-row strips became grids). Root lesson: a floor gate that FORCES redesign of good desktop-first exhibits is over-engineering; original design quality > a 9px mobile floor for reference diagrams. Master keeps the originals (never merged, live site unaffected). `bin/check-svg-floor` stays a REPORT-ONLY advisory of the mobile-legibility tech-debt - NEVER wire it blocking. See [[feedback-legibility-fix-not-redesign]]. @@ -20,6 +22,8 @@ ## Parked / postponed (not blocking, revisit on trigger) +- **Course SVG mobile-style migration (report-only backlog, NOT a sweep).** `bin/check-svg-floor` (report-only advisory, NEVER blocking) lists old-style 900-1000-wide small-font exhibits that render illegibly at 390 — **36 candidates as of 2026-08-13** (run the script for the live list). These are the same family as `friday-demo-template/friday-demo-timeline.svg`, redrawn to the refactoring.fm 2-row-grid style on `course-svg-per-image-fixes` (PR #447, commit 7e87b1a7). **Policy (see [[feedback-legibility-fix-not-redesign]]): render-gate per image, NOT metric-gate — the floor list is a "go render + eyeball" candidate set, not 36 scheduled redraws** (many `reference/*-full/*` deep-dives are desktop-first + pinch-zoomable and may be fine as-is). Migrate opportunistically, one at a time with the taste gate, when a chapter is touched for another reason. Quick win when picked up: the 5 `module-{1-5}-walkthrough-mia/artifact-trail.svg` share one layout → one redraw pattern clears all 5. Do NOT batch-convert (that was item 18, ABANDONED). + - **Item 14 — reader-mode readability research** (POSTPONED by Paul 2026-08-02; also tracked as the 2604 reader-mode item — 2605 owns it). Archive @L819. - **External validation pilot** — post-course-completion only; kit at `40-49-review/40.18-external-validation-pilot-kit.md`. "Pilot" in-session = INTERNAL template review (see editing policies). diff --git a/linkedin-posts/icp-validation/POSTING-PACKET.md b/linkedin-posts/icp-validation/POSTING-PACKET.md index 287b49cec..38f0e626e 100644 --- a/linkedin-posts/icp-validation/POSTING-PACKET.md +++ b/linkedin-posts/icp-validation/POSTING-PACKET.md @@ -1,4 +1,6 @@ -# Posting Packet — ICP post #1 (ready to publish) +# Posting Packet — ICP post #1 (SCHEDULED) + +> **STATUS: SCHEDULED on Paul's LinkedIn for Thu 2026-08-13, 3:30 PM CEST (9:30am ET, US-morning B2B peak)** — done via claude-in-chrome, verified in LinkedIn "Scheduled posts". The 2-week kill-criteria clock starts on publish (2026-08-13). Next: monitor replies/DMs for ICP symptom-language; agent drafts responses, Paul sends. `week1-tue`/`week1-wed` drafts already written for the 3-4/wk Stream 0 cadence. **For Paul. Total effort: copy the text block below, paste into LinkedIn, post.** Nothing else. This activates the campaign and starts the kill-criteria clock (register C1 addendum, 2026-08-08).