diff --git a/.gitignore b/.gitignore index fcad1ceb2..8fe973de8 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,16 @@ claude-flow.config.json .swarm/ .hive-mind/ .claude-flow/ +# claude-flow init scaffolding (generated by `claude-flow init`, local tooling +# only - regenerate with /ruflo-core:init-project; hand-authored skills/agents +# elsewhere under .claude/ stay tracked) +.claude/helpers/ +.claude/skills/ +.claude/commands/claude-flow-*.md +.claude/agents/browser/ +.claude/agents/consensus/ +.claude/agents/sparc/ +.claude/agents/testing/ memory/ coordination/ memory/claude-flow-data.json @@ -99,17 +109,17 @@ docs/projects/2509-css-migration/50-59-execution/ .cache _workspace .claude/scheduled_tasks.lock -.stitch/designs/ -.stitch/prototypes/ -.stitch/loop-status.md -.stitch/next-prompt.md -.stitch/stitch-mockup.html -.stitch/SITE.md - -# Sprint coordinator/verification reports — working notes only, not project docs. -# User policy 2026-04-30: write to /tmp/ instead, or restore-staged before commit. -docs/projects/**/sprint-*-coordinator-report.md -docs/projects/**/sprint-*-verification-report.md -docs/projects/**/*-coordinator-report.md -docs/projects/**/*-verification-report.md -.grepai/ +.stitch/designs/ +.stitch/prototypes/ +.stitch/loop-status.md +.stitch/next-prompt.md +.stitch/stitch-mockup.html +.stitch/SITE.md + +# Sprint coordinator/verification reports — working notes only, not project docs. +# User policy 2026-04-30: write to /tmp/ instead, or restore-staged before commit. +docs/projects/**/sprint-*-coordinator-report.md +docs/projects/**/sprint-*-verification-report.md +docs/projects/**/*-coordinator-report.md +docs/projects/**/*-verification-report.md +.grepai/ diff --git a/bin/generate-template-pdfs b/bin/generate-template-pdfs new file mode 100755 index 000000000..22b952ae7 --- /dev/null +++ b/bin/generate-template-pdfs @@ -0,0 +1,95 @@ +#!/usr/bin/env bash +# +# generate-template-pdfs - render printable PDFs for the course template +# companion pages using headless Chrome. +# +# SINGLE SOURCE OF TRUTH: the page markdown under content/course/... . The PDFs +# committed into each page's bundle are DERIVED artifacts. Regenerate them +# whenever any of the 5 pages below (or the print CSS in single-post.css) +# changes, so the paper version stays in sync with the web page. +# +# Usage: +# bin/hugo-build # build the site into _dest/public-dev FIRST +# bin/generate-template-pdfs +# +# Each PDF is written INTO the page's own Hugo page-bundle as .pdf, so +# Hugo copies it out as a bundle resource on the next build and the on-page +# "Download the PDF" link resolves. + +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +BUILT_DIR="${REPO_ROOT}/_dest/public-dev/course/tech-for-non-technical-founders-2026" +CONTENT_DIR="${REPO_ROOT}/content/course/tech-for-non-technical-founders-2026" +CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" + +# Seconds to let Chrome render before the watchdog kills it. Chrome writes the +# PDF well within this window but often will NOT exit on its own (the site's JS +# keeps timers alive under --virtual-time-budget), so we reap it ourselves. +RENDER_TIMEOUT=25 + +# The 5 template companion pages that get a printable PDF. Edit this list when +# the set of printable templates changes. +SLUGS=( + build-path-decision-worksheet + mom-test-interview-script + ownership-checklist + validated-problem-statement-template + first-paying-customer-operating-kit +) + +if [[ ! -x "${CHROME}" ]]; then + echo "ERROR: Google Chrome not found at: ${CHROME}" >&2 + exit 1 +fi + +if [[ ! -d "${BUILT_DIR}" ]]; then + echo "ERROR: built site not found at ${BUILT_DIR}. Run bin/hugo-build first." >&2 + exit 1 +fi + +fail=0 +for slug in "${SLUGS[@]}"; do + src="${BUILT_DIR}/${slug}/index.html" + out="${CONTENT_DIR}/${slug}/${slug}.pdf" + + if [[ ! -f "${src}" ]]; then + echo "MISSING source HTML: ${src}" >&2 + fail=1 + continue + fi + + # Own throwaway profile dir so we never touch the shared MCP browser profile. + profile="$(mktemp -d)" + + # --virtual-time-budget lets client-rendered content (e.g. Mermaid diagrams) + # finish before capture. Run in the background with a watchdog so a Chrome + # that renders the PDF but never exits cannot stall the whole batch. + "${CHROME}" \ + --headless \ + --disable-gpu \ + --no-sandbox \ + --user-data-dir="${profile}" \ + --no-pdf-header-footer \ + --virtual-time-budget=8000 \ + --print-to-pdf="${out}" \ + "file://${src}" >/dev/null 2>&1 & + chrome_pid=$! + ( sleep "${RENDER_TIMEOUT}"; kill -9 "${chrome_pid}" 2>/dev/null ) & + watchdog_pid=$! + wait "${chrome_pid}" 2>/dev/null || true + kill "${watchdog_pid}" 2>/dev/null || true + wait "${watchdog_pid}" 2>/dev/null || true + + rm -rf "${profile}" + + if [[ -f "${out}" ]]; then + size=$(wc -c < "${out}") + printf 'OK %-40s %8d bytes\n' "${slug}.pdf" "${size}" + else + echo "FAILED to render: ${slug}" >&2 + fail=1 + fi +done + +exit "${fail}" diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml index 69bd90b60..519b57e1b 100644 --- a/config/_default/hugo.toml +++ b/config/_default/hugo.toml @@ -61,7 +61,6 @@ disableKinds = [] email="info@jetthoughts.com" phone="+1 754 216 9568" description="JetThoughts's expert team of developers and consultants has helped clients launch highly tailored projects, and we'd love to help you, too." - copyright="© 2024 JetThoughts. All Rights Reserved." testimonials_heading = "Most clients stay over 3 years. Some stayed beyond 6." testimonials_description = "Don't just take our word for it. See what our clients say about our services." diff --git a/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/cover.png b/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/cover.png index e035650a9..fbafbc590 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/cover.png and b/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/index.md b/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/index.md index 477d9523d..41794c6b1 100644 --- a/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/index.md +++ b/content/course/tech-for-non-technical-founders-2026/agency-ai-five-questions/index.md @@ -1,5 +1,5 @@ --- -title: '"We Use AI": 5 Follow-Up Questions for Your Agency' +title: 'The "We Use AI" 5-Question Script' aliases: ["/blog/agency-ai-five-questions/"] description: "Five questions that catch AI theatre in 30 minutes. Hand them to your next agency call before you sign anything. Score 0-5; below 3 means walk." date: 2026-05-18 diff --git a/content/course/tech-for-non-technical-founders-2026/agency-uses-ai-follow-up-questions/cover.png b/content/course/tech-for-non-technical-founders-2026/agency-uses-ai-follow-up-questions/cover.png index fd1e773e9..5ae05be05 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/agency-uses-ai-follow-up-questions/cover.png and b/content/course/tech-for-non-technical-founders-2026/agency-uses-ai-follow-up-questions/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/index.md b/content/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/index.md index 1fb6a74a7..b5c2afe7a 100644 --- a/content/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/index.md +++ b/content/course/tech-for-non-technical-founders-2026/ai-persona-pre-validation-mom-test-prep/index.md @@ -36,12 +36,10 @@ related_posts: false > > **Output:** a sharpened question list (5-7 solid questions) + top 3 objections, ready to take into Ch 2.3-2.4 recruitment and real interviews > -> **Progress:** M2 · 2 of 6 · Results so far: draft question list · Skip if you have interviewed customers before - 2.1 is the core +> **Progress:** M2 · 2 of 6 · Results so far: draft question list · Interviewed customers before? Skip straight to [Ch 2.3: Find 10 People](/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/) - 2.1 is the core > > **Cost:** $0 (free tier on Claude or ChatGPT) -> **Skip this if you've interviewed before.** If you've run customer interviews in the past and your questions produced concrete past-tense answers, go straight to [Ch 2.3: Find 10 People](/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/). This chapter catches broken question shapes before they waste real interview slots - useful for first-timers, unnecessary if you've already calibrated your question technique. - > **TL;DR:** A 90-minute AI rehearsal catches broken questions before you spend real interview slots on them. Claude personas expose hypothetical phrasing that generates polite yeses from anyone. > **Already using Perplexity Pro / Claude / ChatGPT Deep Research for Module 1?** The same tools work here for objection rehearsal - swap the deep-research prompts for the in-character persona prompts below; the cost line is already paid. @@ -232,7 +230,7 @@ If your ICP description is wrong - the wrong role, the wrong company size, the w This is the other reason real interviews stay irreplaceable: a real customer can tell you your ICP description is wrong, while Claude can only simulate the ICP you described. -> **Module 2 AI critic/simulator block** - This chapter IS the block. +> **What this AI rehearsal can and cannot do for you.** > > **What AI can help with at this stage:** > - Simulate 3 ICP personas answering your draft Mom Test questions in-character diff --git a/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/cover.png b/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/cover.png index 03578ed22..63ff6b7f5 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/cover.png and b/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/index.md b/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/index.md index 2719b9631..ce5fd0f98 100644 --- a/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/index.md +++ b/content/course/tech-for-non-technical-founders-2026/ai-token-bill-dev-shop-pass-through-cost/index.md @@ -114,6 +114,7 @@ The trade-off you are accepting: ±20% is a wide band. AI usage is genuinely var Paste these into your next SOW under "Pricing and Pass-Through Costs." If the agency redlines all three, that tells you something. If they accept all three with a shrug, that also tells you something useful. ```mermaid +%%{init: {'theme':'base', 'themeVariables': {'fontFamily':'Caveat, Patrick Hand, cursive', 'primaryColor':'#fff5f5', 'primaryBorderColor':'#cc342d', 'lineColor':'#333', 'primaryTextColor':'#1a1a1a'}}}%% flowchart TD A[Sign SOW with the 3 clauses] --> B[Predict bill: devs x avg x margin] B --> C{Month-2 invoice arrives} diff --git a/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/build-path-decision-worksheet.pdf b/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/build-path-decision-worksheet.pdf new file mode 100644 index 000000000..4a1ef50f6 Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/build-path-decision-worksheet.pdf differ diff --git a/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/cover.png b/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/cover.png index a8dd3ff34..c506980db 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/cover.png and b/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/index.md b/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/index.md index fd00395f5..b79d23a39 100644 --- a/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/index.md +++ b/content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/index.md @@ -30,6 +30,8 @@ related_posts: false *Print one side of paper. Pen. 30 minutes alone. Walk out with a defensible build decision and the next module to read.* +*Prefer paper? Download the PDF - same content, print-ready.* + ## Why this exists A wellness-coaching founder who came to us in early 2026 had spent four months building a Lovable MVP, then panicked and signed a $24K-per-month agency contract because three advisors told her "you need a real team now." Two of the advisors had never seen her validation data. The third had not asked. @@ -118,7 +120,9 @@ VERDICT: [ ] 2-3 boxes checked = MID backend [ ] 4 or more checked = HEAVY backend -If HEAVY -> Path 4 (Hire a team - see [hire-track reference](/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/)). +If HEAVY -> Path 4 (Hire a team - see the hire-track + supplementary reference, linked in the + verdict table below). Read the SOW guide before kickoff. If LIGHT or MID -> go to Q3. @@ -169,7 +173,9 @@ If $1.6K-$4K -> go to Q5. If $5K-$30K -> Path 3 (Fractional CTO) until problem complexity demands more. -If $30K+ -> Path 4 (Hire a team - see [hire-track reference](/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/)). +If $30K+ -> Path 4 (Hire a team - see the hire-track + supplementary reference, linked in the + verdict table below). ``` ### Q5: Senior engineer in your network for 1 hour of architecture review per month? @@ -210,7 +216,7 @@ your Notion doc) | **4. Hire a team** ([hire-track reference](/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/)) | Q2 heavy (any budget), or Q4 = $30K+/mo | Read draft SOW clause-by-clause. Confirm GitHub/AWS/domain ownership before kickoff. | $30K - $80K / month | **Failure mode to watch for each path** -> -- Path 1 -> 0 of 35 click. Pivot the pitch or the problem. +- Path 1 -> 0 of 30 click. Pivot the pitch or the problem. - Path 2 -> Hits architectural ceiling at ~5K users. Route to the [hire-track reference](/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/) for the next layer. - Path 3 -> CTO drifts into coder. 90-day review on hour allocation. - Path 4 -> Spaceship for the wrong moon. Friday demo + Org Chart audit catch it in week 3. @@ -223,7 +229,7 @@ your Notion doc) > Good: *"I ran 12 Mom Test calls (May 2026 sample). 9 of 12 described the exact problem in past-tense with a number attached (hours per week, dollars per month). My smoke-test page converted 8% of visitors to email sign-ups, above the 6% 'Promising' bar. 4 of 5 prototype testers reached the sign-up screen without me coaching them."* -The good answer is countable: 12 calls, 9 strong signals, an 8% smoke-test click rate, 4 of 5 testers through the prototype. The bad answer is a vibe metric (likes) and a hypothetical (love the idea). Likes are not behavior. The matrix routes the bad answer to Path 1 regardless of how confident the founder feels, because the data is not there. +The good answer is countable: 12 calls, 9 strong signals, an 8% smoke-test sign-up rate, 4 of 5 testers through the prototype. The bad answer is a vibe metric (likes) and a hypothetical (love the idea). Likes are not behavior. The matrix routes the bad answer to Path 1 regardless of how confident the founder feels, because the data is not there. **Q4 - Monthly engineering budget** diff --git a/content/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.md b/content/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.md index 04c9fef2b..05b3819fb 100644 --- a/content/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.md +++ b/content/course/tech-for-non-technical-founders-2026/channel-selection-before-outbound/index.md @@ -100,11 +100,10 @@ At this stage you are choosing from four options. Here is what each one actually | **Cold email** | Any B2B with verified work emails; cheaper at volume | Separate sending domain; free tool ([Instantly](https://instantly.ai) / [Smartlead](https://smartlead.ai)); 30-50 emails from [Apollo](https://apollo.io) / [Hunter](https://hunter.io) (free tier available) | Open rate (share of recipients who open your email) <20% after first batch = domain rep or subject lines broken; fix before scale | | **Community outreach** | B2B and prosumer where buyers already gather in Slack/Discord/forum | Must be a genuine participant first; one signal-quality post per sprint (not per week); spend 2 weeks commenting before posting product or get banned permanently | Joining this week then immediately selling = permanent ban from the community | | **Social organic** | B2C and prosumer, visual products (apps, productivity tools, demos); buyer discovery from peers/influencers | A sustained posting cadence; format shows product working (screen recordings, before/after, results) | Never posted before AND can't commit to the early low-visibility stretch | -| **Engineering as Marketing** | Any B2B or prosumer where your ICP searches for tactical solutions; zero-CAC organic SEO | One free no-code micro-tool (calculator, checklist, grader, template) that solves one micro-problem for your ICP; build it on Carrd/Tally/Notion in an afternoon | Your ICP doesn't search for tactical tooling (they buy via referral or sales call); the micro-tool solves a toy problem nobody actually has | Pick the one that matches your buyer type, your price point, and your honest time budget - then commit. -> **Engineering as Marketing: the zero-CAC (Customer Acquisition Cost - what you spend to land one customer) channel.** Building a free micro-tool (a pricing calculator, a checklist generator, a "which plan is right for you" grader) on a free no-code stack (Carrd + Tally + Notion) attracts targeted organic search traffic. Users who find the tool useful are pre-warmed leads for your main product. The tool ranks for long-tail SEO keywords your competitors ignore. One afternoon to build, zero monthly cost, and the traffic compounds over months. Unlike content marketing (blog posts), a functional tool has a different backlink profile and ranks for different intent - someone searching "SaaS pricing calculator for [vertical]" is closer to buying than someone searching "how to price SaaS." The tool is not your product - it's a free side door that feeds your product's waitlist. +> **A fifth play: Engineering as Marketing - a slower-burn, zero-CAC (Customer Acquisition Cost - what you spend to land one customer) option, not one of the four channels you score above.** Building a free micro-tool (a pricing calculator, a checklist generator, a "which plan is right for you" grader) on a free no-code stack (Carrd + Tally + Notion) attracts targeted organic search traffic. Users who find the tool useful are pre-warmed leads for your main product. The tool ranks for long-tail SEO keywords your competitors ignore. One afternoon to build, zero monthly cost, and the traffic compounds over months. Unlike content marketing (blog posts), a functional tool has a different backlink profile and ranks for different intent - someone searching "SaaS pricing calculator for [vertical]" is closer to buying than someone searching "how to price SaaS." The tool is not your product - it's a free side door that feeds your product's waitlist. ## AI-augmented channel research @@ -133,9 +132,9 @@ The prompt is a forcing function, not a crystal ball. The real data comes from r > **Fast-path exit: skip the worksheet if your interviews already named a channel.** If your Ch 2.3-2.4 interview transcripts pointed to a clear channel (e.g., 7+ of 10 interviewees found tools through LinkedIn, or 5+ named a specific Slack community), jump to Part 3: The Commitment at the bottom of the worksheet. Write your commitment statement and move to Ch 5.3. The full worksheet is for founders still deciding between channels. It's a diagnostic, not a gate. -> **Module 5 AI critic/simulator block** +> **What the Claude prompt above can and cannot tell you.** > -> The Claude prompt in the section above is the Module 5 critic layer. It pressure-tests your channel hypothesis against interview evidence, surfaces assumptions behind each choice, and flags contradictions between what your transcripts said and what your gut says. +> The prompt in the section above is your channel-choice pressure-test. It pressure-tests your channel hypothesis against interview evidence, surfaces assumptions behind each choice, and flags contradictions between what your transcripts said and what your gut says. > > **What AI cannot prove or substitute:** > - Which channel will actually convert (only a real send/reply/follow-up arc can) diff --git a/content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md b/content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md index 41f9dff34..ee1cb10f6 100644 --- a/content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md +++ b/content/course/tech-for-non-technical-founders-2026/clickable-prototype-validation-2-hour-lovable/index.md @@ -127,8 +127,8 @@ What the user sees after the core action succeeds. A confirmation message, a sum > **📋 Save this template.** Copy the prompt below into your notes. You'll reuse the same structure in [Module 4's real MVP build](/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/) - same Lovable tool, same 3-screen skeleton, but with real auth, real database, and real Stripe. > **Practical Lovable onramp.** [Lovable](https://lovable.dev) is an AI app builder that generates a working web app from a prompt - you type what you want in English, it ships the screens. The **free trial** gives you a small number of messages per day with no credit card required, which is enough to ship this 3-screen throwaway prototype. **Paid plans lift the cap - check Lovable's pricing page.** They only become worth it if you later need higher message volume - not required for this chapter. - -> **If you hit Lovable's free-tier daily message cap (check current limits):** save your work-in-progress (Lovable auto-saves to your account, but copy the prompt + the current screen output to a note), come back tomorrow when the cap resets, OR upgrade to a paid plan if you want to ship in one focused session. The 3-screen prototype rarely needs more than 10 total messages once your prompt is well-formed - the cap usually bites only on poorly-scoped first attempts. +> +> If you hit the daily message cap mid-build: save your work-in-progress (Lovable auto-saves to your account, but copy the prompt + the current screen output to a note), come back tomorrow when the cap resets, or upgrade if you want to ship in one focused session. The 3-screen prototype rarely needs more than 10 total messages once your prompt is well-formed - the cap usually bites only on poorly-scoped first attempts. Open [Lovable](https://lovable.dev), create a new project, and paste the following. Replace all `[PLACEHOLDERS]` with your specific problem and solution. diff --git a/content/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/index.md b/content/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/index.md index 4388c11b6..4e82932d5 100644 --- a/content/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/index.md +++ b/content/course/tech-for-non-technical-founders-2026/customers-leaving-churn-triage-not-acquisition/index.md @@ -7,6 +7,14 @@ draft: false course_chapter: true author: "JetThoughts Team" slug: customers-leaving-churn-triage-not-acquisition +course_nav_prev: + url: "/course/tech-for-non-technical-founders-2026/#going-further-after-first-paying-customer" + module: "Going further" + title: "All Going-further chapters" +course_nav_next: + slug: pivot-or-persevere-decision-framework + module: "Going further" + title: "Pivot or Persevere: The Decision Framework" keywords: - founder churn triage - non technical founder customer churn @@ -55,7 +63,7 @@ The fix was not a better Meta Ads brief. The fix was to stop the ads, run a 90-m Bucket holds **32 paying users at $29 / month**. Stop the ads. Run the 90-minute cohort triage. Decide: fix the product, change the segment, or kill the SKU. -This chapter is the one Module 5 does not cover. Modules 6.1 through 6.5 teach you how to land your first paying customers. This chapter teaches you what to do when the customers you already have are leaving faster than the funnel can replace them. It is the chapter for the messy middle - the founder who hit Module 5 once, got customers, and watched them slip away faster than the spreadsheet predicted. +Module 5 (Lessons 5.1-5.7) teaches you how to land your first paying customers. This chapter covers what Module 5 does not - what to do when the customers you already have are leaving faster than the funnel can replace them. It is the chapter for the messy middle - the founder who hit Module 5 once, got customers, and watched them slip away faster than the spreadsheet predicted. The KISS rule for this chapter: if your churn is above 30% in a 30-day window, every dollar you spend on acquisition is wasted until you triage. Read on. diff --git a/content/course/tech-for-non-technical-founders-2026/engineering-org-chart-non-technical-founder/cover.png b/content/course/tech-for-non-technical-founders-2026/engineering-org-chart-non-technical-founder/cover.png index b8f05a9ea..e3b1780f7 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/engineering-org-chart-non-technical-founder/cover.png and b/content/course/tech-for-non-technical-founders-2026/engineering-org-chart-non-technical-founder/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/engineering-org-chart-non-technical-founder/index.md b/content/course/tech-for-non-technical-founders-2026/engineering-org-chart-non-technical-founder/index.md index 7937ef15a..a736103d8 100644 --- a/content/course/tech-for-non-technical-founders-2026/engineering-org-chart-non-technical-founder/index.md +++ b/content/course/tech-for-non-technical-founders-2026/engineering-org-chart-non-technical-founder/index.md @@ -1,5 +1,5 @@ --- -title: "6.2 · The Org Chart Your Dev Shop Won't Draw" +title: "The Org Chart Your Dev Shop Won't Draw" aliases: ["/blog/engineering-org-chart-non-technical-founder/"] description: "The 5-person team your agency pitched is rarely the team writing your code. Six questions to surface who actually ships, who reviews, and who is on-call." date: 2026-05-18 @@ -22,7 +22,7 @@ categories: ["Founders"] cover_image: cover.png metatags: image: cover.png - og_title: "6.2 · The Org Chart Your Dev Shop Won't Draw" + og_title: "The Org Chart Your Dev Shop Won't Draw" og_description: "The 5-person team your agency pitched is rarely the team writing your code. Six questions to surface who actually ships, who reviews, and who is on-call." cover_image_alt: "JetThoughts blog cover showing a redacted org chart with question marks over four boxes and one named senior reviewer" canonical_url: "https://jetthoughts.com/course/tech-for-non-technical-founders-2026/engineering-org-chart-non-technical-founder/" @@ -103,42 +103,18 @@ A real answer names a person, their familiarity with your repo, and their existi This catches what the first five missed. A team that ships well can replay a PR in a minute: "Marcos opened a 40-line change in the `OrdersController`, Priya pushed back on the missing test for the refund branch, Marcos added the test, she approved, CI went green, we merged at 3pm Wednesday." A team that does not ship well will describe a process instead of a transaction. JT's note on [small PRs as the unit of team productivity](/blog/how-small-pr-improves-team-productivity-development/) explains why the transaction is the trust signal; if your team cannot point at one, the unit does not exist. -```mermaid - -%%{init: {'theme':'base', 'themeVariables': {'fontFamily':'Caveat, Patrick Hand, cursive', 'primaryColor':'#f5f5f5', 'primaryBorderColor':'#666', 'lineColor':'#333', 'primaryTextColor':'#1a1a1a'}}}%% - -flowchart TD - - Start(["Run on your next status call.
Six questions, in order."]) - Start --> Q1{1. Who reviewed
the last 5 PRs?} - Q1 -->|Named humans| Q2{2. How many other
clients this week?} - Q1 -->|'the senior team'| F1[Single point of failure
or no clear owner] - Q2 -->|1-2| Q3{3. Anyone
subcontracted?} - Q2 -->|3+| F2[15 min per PR
= skim and approve] - Q3 -->|No, all in-house| Q4{4. On-call for
midnight outages?} - Q3 -->|Pause / 'sometimes'| F3[Hidden labor layer
at junior rate, senior bill] - Q4 -->|Named rotation + SLA| Q5{5. If senior quits Friday,
who replaces by Monday?} - Q4 -->|'best effort'| F4[Sentry hits Monday morning
not Tuesday at 3am] - Q5 -->|Named person, familiar| Q6{6. Walk me through
one PR from last week} - Q5 -->|'we have bench depth'| F5[You will pay for
the scramble] - Q6 -->|Replays in 60 sec| Pass[✓ Real org chart visible
Continue with team] - Q6 -->|Describes process,
not transaction| F6[Unit of trust missing] - F1 --> Audit[3+ flags fire
= time to audit your team
cross-check PRs, AWS bill, names on commits] - F2 --> Audit - F3 --> Audit - F4 --> Audit - F5 --> Audit - F6 --> Audit - classDef good fill:#f0f9f0,stroke:#2e7d32,stroke-width:2.5px,color:#1a1a1a - classDef bad fill:#fff5f5,stroke:#cc342d,stroke-width:2.5px,color:#1a1a1a - classDef neutral fill:#f5f5f5,stroke:#666,stroke-width:2px,color:#1a1a1a - classDef start fill:#e8f4f8,stroke:#0277bd,stroke-width:2.5px,color:#1a1a1a - class Start start - class Q1,Q2,Q3,Q4,Q5,Q6 neutral - class Pass good - class F1,F2,F3,F4,F5,F6,Audit bad - -``` +Run the six on your next status call, in order. Every answer in the right column is a flag: + +| Question, in order | Healthy answer | Red-flag answer = 1 flag | +|---|---|---| +| 1. Who reviewed the last 5 PRs? | Named humans | "the senior team" - single point of failure or no clear owner | +| 2. How many other clients this week? | 1-2 | 3+ - 15 min per PR means skim and approve | +| 3. Anyone subcontracted? | No, all in-house | Pause / "sometimes" - hidden labor layer at junior rate, senior bill | +| 4. On-call for midnight outages? | Named rotation + SLA | "Best effort" - Sentry hits Monday morning, not Tuesday at 3am | +| 5. Senior quits Friday - who replaces by Monday? | Named person, familiar with your repo | "We have bench depth" - you will pay for the scramble | +| 6. Walk me through one PR from last week | Replays it in 60 seconds | Describes a process, not a transaction - the unit of trust is missing | + +**Zero to two flags**: the real org chart is visible - continue with the team. **Three or more flags fire**: time to audit your team - cross-check PRs, the AWS bill, and the names on commits. ## What to do tomorrow @@ -158,3 +134,5 @@ If the answers came back vague, contradictory, or missing, that is the signal. T - Will Larson (interviewed by First Round Review), [Engineering leadership anti-patterns from Stripe, Uber, Carta](https://review.firstround.com/unexpected-anti-patterns-for-engineering-leaders-lessons-from-stripe-uber-carta/) - on review processes and the PR funnel as the productivity signal. - TechTIQ Solutions, [IT Staff Augmentation Cost Breakdown 2026](https://techtiqsolutions.com/it-staff-augmentation-cost-breakdown-and-pricing-models/) - hidden costs of staff-augmented teams. - DataToBiz, [The Strategic Advantage of Subcontracting in IT Staff Augmentation](https://www.datatobiz.com/blog/subcontracting-in-it-staff-augmentation/) - plain description of the subcontracting layers founders rarely see. + +*Built by [JetThoughts](https://jetthoughts.com) as part of the [From Idea to First Paying Customer](/course/tech-for-non-technical-founders-2026/) curriculum.* diff --git a/content/course/tech-for-non-technical-founders-2026/faq/index.md b/content/course/tech-for-non-technical-founders-2026/faq/index.md index dc2ceea80..6d227a3c3 100644 --- a/content/course/tech-for-non-technical-founders-2026/faq/index.md +++ b/content/course/tech-for-non-technical-founders-2026/faq/index.md @@ -47,7 +47,7 @@ Don't skip - sign up for Stripe tonight and let it verify in the background whil **Q: Which landing page builder should I use?** -Mixo (free tier, ~60 seconds from idea to page). If the templates don't fit, Carrd (no-code drag-drop). Don't comparison-shop for a week - you're testing demand, not builders. [Ch 1.2](/course/tech-for-non-technical-founders-2026/smoke-test-build-page/) has the workflow for both. +Mixo (~60 seconds from idea to page). If the templates don't fit, Carrd (no-code drag-drop). Don't comparison-shop for a week - you're testing demand, not builders. [Ch 1.2](/course/tech-for-non-technical-founders-2026/smoke-test-build-page/) has the workflow for both. --- diff --git a/content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md b/content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md index a2a5f8a29..8d30338ad 100644 --- a/content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md +++ b/content/course/tech-for-non-technical-founders-2026/find-10-people-where-to-look/index.md @@ -141,7 +141,7 @@ When you're done you should have 30 real sentences and 30 named people. Don't pa **Where to search (the AI gave you specifics; here are the common starting points):** -- **Reddit** - subreddits in your vertical. Sort by Top → Past Month. The 1% willing to complain in public are usually willing to take a 20-minute call. Free tool [Keyworddit](https://keyworddit.com) surfaces the keywords a given subreddit is currently using, so you can search those phrases back into Reddit and find the named complainers. +- **Reddit** - subreddits in your vertical. Sort by Top → Past Month. The 1% willing to complain in public are usually willing to take a 20-minute call. [Keyworddit](https://keyworddit.com) surfaces the keywords a given subreddit is currently using, so you can search those phrases back into Reddit and find the named complainers. - **LinkedIn** - paste the problem in quotes into search, filter to Posts → Past Week. - **Industry Slack and Discord** - Indie Hackers, Lovable, No Code Founders, and the vertical-specific communities your AI map named. - **[G2](https://www.g2.com/) and [Capterra](https://www.capterra.com/) reviews (the two big business-software review sites)** - pull every 2-star and 3-star review of the closest competitor. Pain a stranger typed for free, organized by feature. @@ -200,7 +200,7 @@ These are skip-by-default. The main chapter works without any of them. **Offline-heavy verticals - paid panel as Plan A.** If your ICP lives in trades, nursing, in-store retail, elderly users, or regulated B2B, the Reddit / LinkedIn / G2 flow returns nothing useful. Use a paid panel instead. [UserInterviews](https://www.userinterviews.com/) and [Respondent](https://www.respondent.io/) have screened participants across these verticals; pricing is per completed interview - check the panel's current rates. Decision rule: if your ICP description names an offline trade, an over-60 user, or a regulated profession, budget for a paid panel as Plan A. -**Monitoring tools that cut the manual reading load.** [Keyworddit](https://keyworddit.com) (free, no signup) surfaces the high-frequency keywords inside any subreddit. [F5Bot](https://f5bot.com) (free) sends email alerts when your keywords appear on Reddit, Hacker News, or Lobste.rs. [Reddinbox](https://reddinbox.com) watches Reddit for your keywords and collects the matching conversations in one inbox so you can reply from there. These tools surface the threads faster - you still read them yourself. +**Monitoring tools that cut the manual reading load.** [Keyworddit](https://keyworddit.com) (no signup) surfaces the high-frequency keywords inside any subreddit. [F5Bot](https://f5bot.com) sends email alerts when your keywords appear on Reddit, Hacker News, or Lobste.rs. [Reddinbox](https://reddinbox.com) watches Reddit for your keywords and collects the matching conversations in one inbox so you can reply from there. These tools surface the threads faster - you still read them yourself. ## Further reading @@ -216,7 +216,7 @@ These are skip-by-default. The main chapter works without any of them. > **Next:** [2.4 · Find 10 People: What to Say](/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/) - the message templates, cadence, and follow-up sequence. > **If blocked:** If the AI returned "NOT FOUND" for every community, your hypothesis is too vague. Go back to Ch 1.1 and rewrite the customer sentence with a specific role, company size, and the moment in their week when the pain happens. -> **Stuck here?** Your name list stops at 3 people. **Fix:** search a related keyword - "boarding costs" instead of "pet sitter," "claim denial appeal" instead of "medical billing." The second-degree search surfaces people with the same problem but different vocabulary. 30 minutes of keyword variation turns 3 names into 12. Not "License Apollo Pro." +> **Stuck here?** Your name list stops at 3 people. **Fix:** search a related keyword - "boarding costs" instead of "pet sitter," "claim denial appeal" instead of "medical billing." The second-degree search surfaces people with the same problem but different vocabulary. 30 minutes of keyword variation turns 3 names into 12 - not jumping to a paid Apollo plan. --- diff --git a/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/cover.png b/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/cover.png index 5f4b2db5f..383c498ec 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/cover.png and b/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/first-paying-customer-operating-kit.pdf b/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/first-paying-customer-operating-kit.pdf new file mode 100644 index 000000000..19a3353e8 Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/first-paying-customer-operating-kit.pdf differ diff --git a/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/index.md b/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/index.md index 7fb34c669..af3f7633c 100644 --- a/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/index.md +++ b/content/course/tech-for-non-technical-founders-2026/first-paying-customer-operating-kit/index.md @@ -30,17 +30,19 @@ canonical_url: "https://jetthoughts.com/course/tech-for-non-technical-founders-2 related_posts: false --- -📋 Template companion to [Module 5 of the From Idea to First Paying Customer course](/course/tech-for-non-technical-founders-2026/). Six artifacts that take you from live MVP to signed paid pilot in 4 weeks. +📋 Template companion to [Module 5 of the From Idea to First Paying Customer course](/course/tech-for-non-technical-founders-2026/). Six artifacts that take you from live MVP to signed paid pilot in 4 weeks - the Design Partner Agreement is live below; the other five ship as they are ready. > **Status: shipping.** The DPA template (component 3) is live below - copy and paste into Google Docs. The other 5 components are described here and shipping as each is ready. There is no email signup; when a template is downloadable, the link appears inline below. Bookmark and check back. +*Prefer paper? Download the PDF - same content, print-ready.* + # The First-Paying-Customer Operating Kit *From live MVP to signed paid pilot in 4 weeks - the templates Module 5 runs on.* ## What this kit covers -Module 5 of this course walks five chapters: the Sean Ellis 40% test, the personal-network outreach, the paid-pilot contract, and the cold-outbound pipeline. Each chapter references a template. This page hosts them as each one ships. The DPA template is live below (component 3); the remaining 5 are described and shipping next. +Module 5 of this course runs seven lessons (5.1-5.7): the Sean Ellis 40% test, channel choice, the personal-network outreach arc, the paid-pilot contract, and the cold-outbound pipeline. The lessons reference these templates. This page hosts them as each one ships. The DPA template is live below (component 3); the remaining 5 are described and shipping next. ```mermaid %%{init: {'theme':'base', 'themeVariables': {'fontFamily':'Caveat, Patrick Hand, cursive', 'primaryColor':'#fff5f5', 'primaryBorderColor':'#cc342d', 'lineColor':'#333', 'primaryTextColor':'#1a1a1a'}}}%% @@ -175,7 +177,7 @@ The Airtable base from [Chapter 5.7](/course/tech-for-non-technical-founders-202 The payoff: turns Friday afternoon into a 10-minute "what shipped this week" review instead of a 90-minute scroll through Gmail. -### 7. Pilot kickoff call agenda (60-minute template) +### Bonus: the pilot kickoff call agenda (60-minute template) The Stripe deposit cleared on Friday. The pilot starts Monday. Your customer is asking "so what happens next?" - and the course's [Charge Before You Ship](/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/) chapter taught you how to get to the deposit, not what to run after it. This is the 60-minute kickoff call that turns a deposit into an operating pilot: @@ -216,15 +218,15 @@ The DPA template (component 3) is copy-pasteable inline above. When the remainin ## Where this fits in the course -This is the lead magnet for Module 5 of the [From Idea to First Paying Customer](/course/tech-for-non-technical-founders-2026/) course - the chapter that lands the first paying customer right after the MVP ships. Module 5 runs in four chapters: +This kit is the template companion to Module 5 of the [From Idea to First Paying Customer](/course/tech-for-non-technical-founders-2026/) course - the module that lands the first paying customer right after the MVP ships. The lessons it serves: -- 7.1 [Your First Customer Is Not a Marketing Problem](/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/) - run the Sean Ellis 40% test against your 10-30 MVP users. -- 7.2 [Build Your 50-Name Network List](/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/) - 50-name list, 4 buckets; the [outreach message](/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/) and [send-and-track sequence](/course/tech-for-non-technical-founders-2026/first-ten-customers-send-track/) follow. -- 7.3 [Charge Before You Ship](/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/) - one-page Design Partner Agreement plus Stripe Checkout setup. -- 7.4 [Going Outbound Without a Sales Team](/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/) - filtered cold outbound for customers 11-20. +- 5.1 [Your First Customer Is Not a Marketing Problem](/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/) - run the Sean Ellis 40% test against your 10-30 MVP users. +- 5.3 [Build Your 50-Name Network List](/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/) - 50-name list, 4 buckets; the [5.4 outreach message](/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/) and [5.5 send-and-track sequence](/course/tech-for-non-technical-founders-2026/first-ten-customers-send-track/) follow. +- 5.6 [Charge Before You Ship](/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/) - one-page Design Partner Agreement plus Stripe Checkout setup. +- 5.7 [Going Outbound Without a Sales Team](/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/) - filtered cold outbound for customers 11-20. Module 5 ends here. The kit ships alongside Module 5 as each artifact is ready. ## Built by -[JetThoughts](https://jetthoughts.com), a Rails-first dev shop that has rescued non-technical founders' codebases for 20 years. We published this course because the same five mistakes kept showing up in the rescue calls. The kit ships free for the same reason. +[JetThoughts](https://jetthoughts.com), a Rails-first dev shop that has rescued non-technical founders' codebases for 20 years. We published this course because the same five mistakes kept showing up in the rescue calls. The kit ships open for the same reason. 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 7ef406ad3..c1df70ffa 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 @@ -2,18 +2,18 @@ Sample row from the First 10 Customers Airtable tracker @@ -73,7 +73,7 @@ HOT May 6 - Maybe - May 9 + Maybe · 5/9 F/u sent - - diff --git a/content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md b/content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md index 0f597768e..3ed57317d 100644 --- a/content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md +++ b/content/course/tech-for-non-technical-founders-2026/first-ten-customers-network-list/index.md @@ -6,6 +6,7 @@ draft: false course_chapter: true author: "JetThoughts Team" slug: first-ten-customers-network-list +aliases: ["/course/tech-for-non-technical-founders-2026/first-ten-customers-personal-network/"] keywords: - first 10 b2b customers - personal network outreach founder diff --git a/content/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/index.md b/content/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/index.md index 38cc3b261..69d71c273 100644 --- a/content/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/index.md +++ b/content/course/tech-for-non-technical-founders-2026/first-ten-customers-outreach-message/index.md @@ -56,7 +56,7 @@ If no real reference exists for a cold-bucket name, move them to [Ch 5.7 cold ou **Part 2: One line on the problem, in their language.** Use the verbatim Q3 answers from your [Chapter 5.1 survey](/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/). "I am building a tool that lets B2B marketers run an end-to-end attribution model without an analyst." -**Part 3: A Loom video, not a paragraph.** Record one 90-second Loom. The free tier covers this batch. Show your product in 60 seconds, you on camera for the other 30. The Loom script comes directly from your Ch 5.1 verbatims. Read the Q2-Q3 quotes aloud, then point at the product feature that addresses the pain they describe. +**Part 3: A Loom video, not a paragraph.** Record one 90-second Loom. Show your product in 60 seconds, you on camera for the other 30. The Loom script comes directly from your Ch 5.1 verbatims. Read the Q2-Q3 quotes aloud, then point at the product feature that addresses the pain they describe. **Part 4: A specific ask.** "15 minutes to walk you through it and see if it solves [the problem]? Open to a paid pilot if it does. Calendly: [link]." (Calendly is a free scheduling page that lets people pick a call slot without the email back-and-forth.) The "paid pilot" teaser is load-bearing. Full mechanic lives in [5.6](/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/). 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 8e62ee29d..b8535686a 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 @@ -15,8 +15,8 @@ - HEALTHY (Rails monolith) - + HEALTHY (Rails monolith) + Rails monolith · one repo @@ -44,8 +44,8 @@ 1 repo · 1 full-stack dev ships a feature idea-to-production - OVER-ENGINEERED - + OVER-ENGINEERED + React diff --git a/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/cover.png b/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/cover.png index 96a4e634f..05d0554c9 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/cover.png and b/content/course/tech-for-non-technical-founders-2026/five-tech-words-stop-nodding-at/cover.png differ 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 9e49cf6e9..1f1123feb 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 @@ -42,8 +42,8 @@ - staging.acme.app - /signup → /checkout → /receipt + staging.acme.app + /signup → /checkout → /receipt diff --git a/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/cover.png b/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/cover.png index 3391cb30b..5ce9e37b5 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/cover.png and b/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/cover.png differ 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 a37097fd4..bfe9da6ec 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 @@ -55,8 +55,8 @@ - - staging.acme.app/checkout + + staging.acme.app/checkout @@ -65,17 +65,17 @@ webhook fired ✓ receipt → demo@example.com - - stripe sandbox + + stripe sandbox - - login (one message, one paste) - demo@example.com / example-pass-123 + + login (one message, one paste) + demo@example.com / example-pass-123 diff --git a/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/index.md b/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/index.md index 87953107d..9463f69ce 100644 --- a/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/index.md +++ b/content/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/index.md @@ -1,5 +1,5 @@ --- -title: "6.3 · The Friday Demo Rule: 15 Min Truth Test" +title: "The Friday Demo Rule: 15 Min Truth Test" aliases: ["/blog/friday-demo-rule-founder-progress/"] description: "The 15-minute Friday ritual that surfaces fake progress in 4 weeks flat. Loom or live, working software only, no Jira screenshots, no slides, hard stop." date: 2026-05-18 @@ -21,7 +21,7 @@ categories: ["Founders"] cover_image: cover.png metatags: image: cover.png - og_title: "6.3 · The Friday Demo Rule: 15 Min Truth Test" + og_title: "The Friday Demo Rule: 15 Min Truth Test" og_description: "The 15-minute Friday ritual that surfaces fake progress in 4 weeks flat. Loom or live, working software only, no Jira screenshots, no slides, hard stop." cover_image_alt: "JetThoughts blog cover for The Friday Demo Rule showing a kitchen-timer set to 15 minutes next to a laptop screen with a clickable staging URL and a struck-through Jira screenshot" canonical_url: "https://jetthoughts.com/course/tech-for-non-technical-founders-2026/friday-demo-rule-founder-progress/" @@ -53,7 +53,7 @@ One meeting per week. 15 minutes. Friday at 4pm in your timezone. Loom (a record **You attend with one question in your head.** Can I click everything they show me? You open your laptop, paste each staging URL into your browser as the developer mentions it, and try to reach the screen they just described. If the URL throws a 500 or asks for a login you do not have, interrupt and ask why. Do not save the question for Monday. The point of the recording is so you have proof; the point of the live attendance is so you catch the lie in real time. -**Hard stop at 15 minutes.** Founders we have rescued who let the demo drift to 45 minutes lose the discipline within a month. The cap is what forces the team to pre-stage clickable URLs instead of debugging on the call. If the team needs longer than 15 minutes to show one week of work, something is wrong - and it is usually that nothing is on staging. +**Hard stop at 15 minutes.** When the demo drifts to 45 minutes, the discipline is gone within a month. The cap is what forces the team to pre-stage clickable URLs instead of debugging on the call. If the team needs longer than 15 minutes to show one week of work, something is wrong - and it is usually that nothing is on staging. ![Kitchen-timer set to 15:00 next to a laptop displaying a clickable staging URL with admin login credentials and a passing $1 Stripe test transaction; struck-through icons of a Jira board, a Figma frame, and a slide deck stacked on the right with the caption "not allowed in the room"](demo-rule.svg) @@ -87,7 +87,7 @@ A founder we worked with sat through six weeks of "I will send the URL after the %%{init: {'theme':'base', 'themeVariables': {'fontFamily':'Caveat, Patrick Hand, cursive', 'primaryColor':'#f5f5f5', 'primaryBorderColor':'#666', 'lineColor':'#333', 'primaryTextColor':'#1a1a1a'}}}%% -flowchart LR +flowchart TD Mon([Monday 9am
Founder posts the
7-question template
in #dev Slack]) --> Tue([Tuesday-Thursday
Team builds + reviews
against the questions]) Tue --> Wed{Wednesday EOD
Anything not
going to be ready?} diff --git a/content/course/tech-for-non-technical-founders-2026/friday-demo-template/cover.png b/content/course/tech-for-non-technical-founders-2026/friday-demo-template/cover.png index e505047e5..49edc2e05 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/friday-demo-template/cover.png and b/content/course/tech-for-non-technical-founders-2026/friday-demo-template/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/hiring-interview-script/cover.png b/content/course/tech-for-non-technical-founders-2026/hiring-interview-script/cover.png index 598d6e8d0..e36dfe684 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/hiring-interview-script/cover.png and b/content/course/tech-for-non-technical-founders-2026/hiring-interview-script/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/how-this-course-works/index.md b/content/course/tech-for-non-technical-founders-2026/how-this-course-works/index.md index ef1ff1747..bbf200915 100644 --- a/content/course/tech-for-non-technical-founders-2026/how-this-course-works/index.md +++ b/content/course/tech-for-non-technical-founders-2026/how-this-course-works/index.md @@ -181,7 +181,7 @@ These are the tools the course references - AI research tools, no-code builders, ## The Course's Rule: Kill Bad Ideas Fast -Every module has a gate. If the data doesn't support your hypothesis, you stop and either pivot or kill the idea. The gate sends you back if the data doesn't support the hypothesis. +Every module has a gate. If the data doesn't support your hypothesis, you stop and either pivot or kill the idea. | Module | The Gate | Signal to Proceed | |---|---|---| diff --git a/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/artifact-trail.svg b/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/artifact-trail.svg new file mode 100644 index 000000000..16f91a5d9 --- /dev/null +++ b/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/artifact-trail.svg @@ -0,0 +1,85 @@ + + Mia's Module 1 artifact trail: Founding Hypothesis to smoke-test page to tracking to a 6.5% demand signal to 6 paying customers + + + + + + + + What Mia produced in Module 1 + + + + + + 1.1 + Founding + Hypothesis + 15 / 20 + one soft blank flagged + + + + + + + 1.2 + Smoke-test + page live + tutormatch.mixo.io + passed 3-second test + + + + + + + 1.3 + Tracking + wired + Clarity · GA4 · Pixel + who is visiting, verified + + + + + + + 1.4 + Smoke test + run + 6.5% + 300 visits · Promising + + + + + + + 1.5 + Price test + 6 buyers + $99 each + $594 before product + + + + + + + + + Five outputs, zero product code - each one filed in her Founder OS folder. + diff --git a/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/cover.png b/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/cover.png new file mode 100644 index 000000000..4f0f22013 Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/index.md b/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/index.md index 7fe44c2b3..e43bc4b00 100644 --- a/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/index.md +++ b/content/course/tech-for-non-technical-founders-2026/module-1-walkthrough-mia/index.md @@ -4,6 +4,11 @@ description: "Follow Mia through Module 1 as she writes a Founding Hypothesis, b date: 2026-06-11 draft: false slug: module-1-walkthrough-mia +cover_image: cover.png +cover_image_alt: "JetThoughts cover showing Mia's Module 1 run - from a founding hypothesis to a smoke-test page to six paying customers before any product code" +metatags: + image: cover.png + og_title: "Module 1 Walkthrough: Mia Builds TutorMatch" course_nav_prev: slug: price-hypothesis-on-smoke-test-page module: "Chapter 1.5" @@ -26,6 +31,8 @@ Tonight she was going to find out if anyone else cared. --- +![Mia's Module 1 artifact trail - Founding Hypothesis, smoke-test page, tracking wired, a 6.5% demand signal, and six paying customers before any product code](artifact-trail.svg) + ## [Lesson 1.1: Form Your Founding Hypothesis](/course/tech-for-non-technical-founders-2026/form-your-founding-hypothesis-90-minute-sprint/) The lesson asked for one sentence with five specific blanks. Mia opened a blank doc and typed: *"If we help parents find tutors, they will choose us over Google."* diff --git a/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/artifact-trail.svg b/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/artifact-trail.svg new file mode 100644 index 000000000..b4af11c69 --- /dev/null +++ b/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/artifact-trail.svg @@ -0,0 +1,86 @@ + + Mia's Module 2 artifact trail: a Mom-Test script to a 30-name list to 10 scored interviews to a BUILD verdict to a Money answer to prototype feedback + + + + + + + + What Mia produced in Module 2 + + + + + + 2.1-2.2 + Mom-Test + script + 5 past-tense Qs + no product mentioned + + + + + + + 2.3-2.4 + 30-name + list + 10 calls + booked in 2 weeks + + + + + + + 2.5 + 10 scored + transcripts + BUILD + 8 of 10 cleared gate + + + + + + + 2.5 + Money + answer + $70-120 + per session, receipts + + + + + + + 2.6 + Clickable + prototype + 4 of 5 + price goes on profile + + + + + + + + + Ten real conversations turned two notebook questions into evidence. + diff --git a/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/cover.png b/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/cover.png new file mode 100644 index 000000000..7f80e84c0 Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/index.md b/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/index.md index a029a8db4..c1bb80b71 100644 --- a/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/index.md +++ b/content/course/tech-for-non-technical-founders-2026/module-2-walkthrough-mia/index.md @@ -4,6 +4,11 @@ description: "Follow Mia through Module 2 as she drafts Mom Test questions, rehe date: 2026-07-09 draft: false slug: module-2-walkthrough-mia +cover_image: cover.png +cover_image_alt: "JetThoughts cover showing Mia's Module 2 run - from a Mom-Test script to ten scored parent interviews to a BUILD verdict and prototype feedback" +metatags: + image: cover.png + og_title: "Module 2 Walkthrough: Mia Interviews Ten Parents" course_nav_prev: slug: clickable-prototype-validation-2-hour-lovable module: "Chapter 2.6" @@ -24,6 +29,8 @@ Module 2 was where those questions stopped being notebook entries and became int --- +![Mia's Module 2 artifact trail - a Mom-Test script, a 30-name list, ten scored interviews, a BUILD verdict, a Money answer, and prototype feedback](artifact-trail.svg) + ## [Lesson 2.1: The Mom Test](/course/tech-for-non-technical-founders-2026/mom-test-ask-about-past-not-future/) Her first draft question list took ten minutes and felt great: "Would you use a marketplace that matches you with a specialist tutor in 48 hours?" She read the lesson's table of tempting-but-broken questions and found hers in the first row - a hypothetical with the product baked in, engineered to produce a polite yes from any parent alive. diff --git a/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/artifact-trail.svg b/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/artifact-trail.svg new file mode 100644 index 000000000..2a129cabc --- /dev/null +++ b/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/artifact-trail.svg @@ -0,0 +1,72 @@ + + Mia's Module 3 artifact trail: a one-page Product Brief to a no-go list to an outcome rewrite to a passed quality check + + + + + + + + What Mia produced in Module 3 + + + + + + 3.1 + One-page + Product Brief + Section 1 copied verbatim + from the problem statement + + + + + + + 3.1 + No-go + list + longer than the build list + scope locked before code + + + + + + + 3.2 + Outcome + rewrite + features to parent outcomes + every line from a transcript + + + + + + + 3.2 + Quality + check + PASS + 1 fail · 1 fix · 1 clean run + + + + + + + + One evening and one lunch break - the fuzziness caught on paper, not in a build. + diff --git a/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/cover.png b/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/cover.png new file mode 100644 index 000000000..e108adda0 Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/index.md b/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/index.md index 80b7c434b..8d60304d4 100644 --- a/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/index.md +++ b/content/course/tech-for-non-technical-founders-2026/module-3-walkthrough-mia/index.md @@ -4,6 +4,11 @@ description: "Follow Mia through Module 3 as she turns ten scored transcripts an date: 2026-07-09 draft: false slug: module-3-walkthrough-mia +cover_image: cover.png +cover_image_alt: "JetThoughts cover showing Mia's Module 3 run - from ten scored transcripts to a quality-checked one-page product brief" +metatags: + image: cover.png + og_title: "Module 3 Walkthrough: Mia Writes the One-Page Brief" course_nav_prev: slug: stop-specifying-features-start-outcomes module: "Chapter 3.2" @@ -24,6 +29,8 @@ Module 3 was one evening and one lunch break: draft the brief, then try to break --- +![Mia's Module 3 artifact trail - a one-page Product Brief, a no-go list, an outcome rewrite, and a passed quality check](artifact-trail.svg) + ## [Lesson 3.1: The One-Page Product Brief](/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/) Section 1 took ninety seconds, because the lesson forbids writing it: she copied the problem paragraph from her validated problem statement word for word - parents of kids with learning differences, 8 of 10 with real past spend, the mother who "called eleven places in March," the $600 generic-center mistake. diff --git a/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/artifact-trail.svg b/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/artifact-trail.svg new file mode 100644 index 000000000..43ba9f537 --- /dev/null +++ b/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/artifact-trail.svg @@ -0,0 +1,85 @@ + + Mia's Module 4 artifact trail: a self-serve build-path decision to locked ownership to a live MVP to a security fix to a scheduled ceiling check + + + + + + + + What Mia produced in Module 4 + + + + + + 4.1 + Build-path + decision + Self-serve + worksheet, not fear + + + + + + + 4.2 + Ownership + locked + domain transferred out + accounts in her name + + + + + + + 4.3-4.4 + Live MVP + 4 phases · 10 weeks + built from her brief + on a domain she owns + + + + + + + 4.3-4.4 + Security + fix + RLS hole caught + on paper, not in prod + + + + + + + 4.5 + Ceiling + check set + 30-day calendar block + first run after launch + + + + + + + + + A one-page brief became a live product - decided by a worksheet, not by a fear. + diff --git a/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/cover.png b/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/cover.png new file mode 100644 index 000000000..4ce42f10d Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/index.md b/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/index.md index 7488beef2..c58ec805b 100644 --- a/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/index.md +++ b/content/course/tech-for-non-technical-founders-2026/module-4-walkthrough-mia/index.md @@ -4,6 +4,11 @@ description: "Follow Mia through Module 4 as she routes herself to the self-serv date: 2026-07-10 draft: false slug: module-4-walkthrough-mia +cover_image: cover.png +cover_image_alt: "JetThoughts cover showing Mia's Module 4 run - from a one-page brief to a live MVP on a domain she owns" +metatags: + image: cover.png + og_title: "Module 4 Walkthrough: Mia Ships TutorMatch" course_nav_prev: slug: vibe-coding-ceiling-signals module: "Chapter 4.5" @@ -22,6 +27,8 @@ Mia arrived at Module 4 with a quality-checked one-page brief and a strong opini --- +![Mia's Module 4 artifact trail - a self-serve build-path decision, locked ownership, a live MVP, a security fix, and a scheduled ceiling check](artifact-trail.svg) + ## [Lesson 4.1: Should You Hire?](/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/) The five questions took her twenty minutes. Q1, validation: ten interviews with eight strong signals, plus six founding members who had already paid $99 - yes, with receipts. Q2, backend weight: her v1 had no real-time anything, no background queues, no regulated data - a curated list, parent accounts, and one request button. Light. Q3 said runway was not forcing her hand. Q4 was the one she had to think about - a senior engineer for one architecture hour a month - until she remembered a former colleague who had offered exactly that over coffee. Q4 = yes, and the worksheet routed her to Path 2 - self-serve. diff --git a/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/artifact-trail.svg b/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/artifact-trail.svg new file mode 100644 index 000000000..64c0e0f5d --- /dev/null +++ b/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/artifact-trail.svg @@ -0,0 +1,73 @@ + + Mia's Module 5 artifact trail: a 40% test niche to a warm 50-name list to a signed paid pilot to a complete Founder OS + + + + + + + + What Mia produced in Module 5 + + + + + + 5.1 + 40% + test + 55% + in her must-have niche + + + + + + + 5.3-5.5 + Warm 50 + list + 22 replies + 9 demos booked + + + + + + + 5.6 + Signed pilot + Design Partner Agreement + deposit cleared via Stripe + first money from the product + + + + + + + 5.1-5.6 + Founder OS + complete + hypothesis to signed pilot + the full evidence pack + + + + + + + + From a notebook sentence to a stranger's money - the whole pack, traceable. + diff --git a/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/cover.png b/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/cover.png new file mode 100644 index 000000000..7511b95cd Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/index.md b/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/index.md index ec5dfef68..5a67c5998 100644 --- a/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/index.md +++ b/content/course/tech-for-non-technical-founders-2026/module-5-walkthrough-mia/index.md @@ -4,6 +4,11 @@ description: "Follow Mia through Module 5 as she runs the 40% test on her first date: 2026-07-10 draft: false slug: module-5-walkthrough-mia +cover_image: cover.png +cover_image_alt: "JetThoughts cover showing Mia's Module 5 run - from a 40% test niche to a signed paid pilot and a complete Founder OS" +metatags: + image: cover.png + og_title: "Module 5 Walkthrough: Mia Gets Paid" course_nav_prev: slug: paid-pilot-charge-before-ship module: "Chapter 5.6" @@ -22,6 +27,8 @@ Mia entered Module 5 with a live product and a number that could embarrass her: --- +![Mia's Module 5 artifact trail - a 40% test niche, a warm 50-name list, a signed paid pilot, and a complete Founder OS](artifact-trail.svg) + ## [Lesson 5.1: The 40% Test](/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/) Two weeks after the invites went out, she sent the one-question survey to everyone who had used the product: how would you feel if TutorMatch went away? Sixteen answered. Across all of them the "very disappointed" count landed at 6 of 16 - 38% - just under the bar, the kind of number that invites self-deception in both directions. diff --git a/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/cover.png b/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/cover.png index 7c78479e3..901a48206 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/cover.png and b/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/index.md b/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/index.md index 0b84b372b..c8b60637f 100644 --- a/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/index.md +++ b/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/index.md @@ -37,6 +37,7 @@ related_posts: false > Q4. On a scale of 1-10, how big a problem is this compared to everything else on your plate? > Q5. Who else on your team feels this? How do they handle it? +*Prefer paper? Download the PDF - same content, print-ready.* Rob Fitzpatrick's book *The Mom Test* (2013) named the technique: ask about past behavior, not future intent. The questions on this page are the script. You keep them open on a second screen during the call, read them as written, and listen for emotional language while you take notes by hand. diff --git a/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/mom-test-interview-script.pdf b/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/mom-test-interview-script.pdf new file mode 100644 index 000000000..31b8212d9 Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/mom-test-interview-script/mom-test-interview-script.pdf differ diff --git a/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md b/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md index a8a960ba6..d05d2a6db 100644 --- a/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md +++ b/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/index.md @@ -156,14 +156,15 @@ flowchart TD class E,F purplebox; ``` -> *Re-run cadence: re-run while the must-have rate is climbing and after every major release once it holds above 40% for two consecutive runs. If a re-run drops, read the "somewhat disappointed" Q2-Q4 verbatims first - the diagnostic is in there.* +Re-run cadence: re-run while the must-have rate is climbing, and after every major release once it holds above 40% for two consecutive runs. If a re-run drops, read the "somewhat disappointed" Q2-Q4 verbatims first - the diagnostic is in there. -> **Sample-size honesty.** The Sean Ellis 40% threshold is statistically directional at **≥ 10 respondents**, useful at **20+**, and segment-sliceable at **30+**. Under 10 respondents your result is a hypothesis, not a verdict. If you have 6 users say "very disappointed" and 4 say "somewhat disappointed", the 40% threshold says PASS - but with a ±40 percentage-point confidence band around that number, you do not know whether real demand is 20% or 80%. Treat any reading under 10 respondents as **directional only**: use it to prioritize the next outreach batch, not to advance into Module 5.3 with confidence. - -> **Sample under 10 respondents (special case):** segment-slice math does not work. Do NOT classify by 25-40% bands. Instead: -> - **0-2 "very disappointed"**: treat as directional NO. Book more user sessions before re-running. +> **Sample-size honesty.** The Sean Ellis 40% threshold is statistically directional at **≥ 10 respondents**, useful at **20+**, and segment-sliceable at **30+**. Under 10 respondents your result is a hypothesis, not a verdict - with 6 "very disappointed" out of 10 the threshold says PASS, but the confidence band is wide enough that real demand could be 20% or 80%. Under 10, segment-slice math does not work and the 25-40% bands do not apply. Read the count directionally instead: +> +> - **0-2 "very disappointed"**: directional NO. Book more user sessions before re-running. > - **3-4 "very disappointed"**: directional MAYBE. Book 5-10 more users, re-run. > - **5+ "very disappointed" out of 6**: directional STRONG YES. Advance to M5.3 but caveat your outreach decisions - the segment language is hypothesis, not verified. +> +> Use an under-10 reading to prioritize the next outreach batch, not to advance into Module 5.3 with confidence. ## What "under 40%" actually means diff --git a/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/sean-ellis-gauge.svg b/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/sean-ellis-gauge.svg index 5b45e37bc..71f04d532 100644 --- a/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/sean-ellis-gauge.svg +++ b/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/sean-ellis-gauge.svg @@ -48,9 +48,9 @@ If you ran ads first: - - you would burn $3K-$5K - finding out the same thing. + you would burn $3K-$5K + finding out the same thing. + diff --git a/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/segment-isolation.svg b/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/segment-isolation.svg index 165ea0b78..79678cab5 100644 --- a/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/segment-isolation.svg +++ b/content/course/tech-for-non-technical-founders-2026/must-have-segment-pmf-test/segment-isolation.svg @@ -38,8 +38,8 @@ 0 of 7. Already have an internal tool. - Now you know: - → Target B2B marketers next. - → Stop chasing solo founders for now. - → Agencies were never your buyer. + Now you know: + → Target B2B marketers next. + → Stop chasing solo founders for now. + → Agencies were never your buyer. diff --git a/content/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/vibe-prd-template-visual.svg b/content/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/vibe-prd-template-visual.svg index 0e7726c36..dd66abf25 100644 --- a/content/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/vibe-prd-template-visual.svg +++ b/content/course/tech-for-non-technical-founders-2026/one-page-product-brief-vibe-prd/vibe-prd-template-visual.svg @@ -75,6 +75,6 @@ 5. What you're NOT building (the no-go list) 5-8 lines of things the agent or contractor will add unprompted: - _______________________________________________________ - Longer list = cheaper build + _______________________________________________________ + Longer list = cheaper build diff --git a/content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.md b/content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.md index 0d6fd1693..e47601242 100644 --- a/content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.md +++ b/content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/index.md @@ -45,8 +45,6 @@ related_posts: false > > Reading this chapter before your network is dry is the most common sequencing mistake founders make in Module 5 - it feels like progress, but you are skipping the higher-converting path for the lower one. The chapter will still be here when your network is done. -> **$0 outbound stack.** Apollo's free tier (Apollo is a B2B contact database that finds prospects' names and work emails; its free tier is credit-based - check the current allowance) + a Google Sheet + a Gmail mail-merge add-on (sends the same email to many recipients at once, free) + Loom + Calendly covers the entire pipeline at zero monthly cost. You ship the same 30-message batch, you just enrich the list manually in a sheet instead of automating it through Smartlead. Upgrade to Apollo's or Smartlead's paid tiers only when you're sending 100+ messages a week and the manual enrichment is the bottleneck. - This chapter is sales outbound asking buyers for money, which is a different motion from the interview-recruitment outreach in [Chapter 2.4](/course/tech-for-non-technical-founders-2026/find-10-people-with-problem-outreach-2026/) where you were asking for 30 minutes of their time. The 10 people you interviewed in Module 2 may or may not become customers, and outreach to them goes through the sales sequence below rather than the recruitment script. @@ -81,6 +79,8 @@ Figma's first customer 11-20 cohort reportedly came from cold DMs to influential You run the whole pipeline in six stages with off-the-shelf tools - no engineer, no $1,200/month sales stack, no Salesforce. +The tooling is a volume choice, and both versions ship the same 30-message batch. The $0 stack - Apollo's free tier (Apollo is a B2B contact database that finds prospects' names and work emails; its free tier is credit-based - check the current allowance), a Google Sheet, a Gmail mail-merge add-on (sends the same email to many recipients at once, free), Loom, and Calendly - covers every stage; you enrich the list by hand in the sheet, which costs your time. The paid version swaps the manual enrichment for automation through Smartlead or Apollo's paid tiers, which costs money and pays off once you're sending 100+ messages a week and the hand-enrichment is the bottleneck. At this chapter's 30-message volume, either works - pick by whether your scarcer resource is hours or dollars. + The cold-outbound pipeline in one glance: 1. **Filter** - LinkedIn Sales Navigator or Apollo.io. Pull 100-150 raw rows, strip to 30 clean names. @@ -109,7 +109,7 @@ If your buyer is a 50-200 person company contact in a specific industry, Apollo > **Pre-flight: warm your sending domain BEFORE batch 1.** A brand-new sending domain (e.g., `yourcompany.com` registered last week, no email history) will land in spam on batch 1 even with a perfect ICP list and a sharp script. The fix is either: > > 1. **Use LinkedIn DM for batch 1.** No domain warmup required. Sales Navigator + 30 personalized DMs gets the same reach as cold email for a B2B founder, and the messages reliably deliver. -> 2. **OR warm the domain for 2-3 weeks first.** Use a tool like [Mailwarm](https://mailwarm.com) or [Smartlead's warmup](https://smartlead.ai) (the same tools mentioned in this chapter's $0 stack section) to send 5-10 low-volume reply-conversation emails per day to seed positive sender reputation. After 2-3 weeks of warmup, send batch 1 from the same domain. +> 2. **OR warm the domain for 2-3 weeks first.** Use a tool like [Mailwarm](https://mailwarm.com) or [Smartlead's warmup](https://smartlead.ai) (the same Smartlead from the tooling choice above) to send 5-10 low-volume reply-conversation emails per day to seed positive sender reputation. After 2-3 weeks of warmup, send batch 1 from the same domain. > > Skip this step and the <5% reply-rate diagnostic below tells you "domain rep is dead" - because the domain never had reputation in the first place. The mechanical cause of your 0 replies is the domain, not the ICP filter or the script. @@ -194,8 +194,8 @@ All three variants follow the same shape: a specific reference earns the open, o ## Stage-by-stage cadence ```mermaid -%%{init: {'theme':'base', 'themeVariables': {'fontFamily':'Caveat, Patrick Hand, cursive', 'primaryColor':'#fff5f5', 'primaryBorderColor':'#cc342d', 'lineColor':'#333', 'primaryTextColor':'#1a1a1a'}}}%% -flowchart TB +%%{init: {'theme':'base', 'themeVariables': {'fontFamily':'Caveat, Patrick Hand, cursive', 'fontSize':'20px', 'primaryColor':'#fff5f5', 'primaryBorderColor':'#cc342d', 'lineColor':'#333', 'primaryTextColor':'#1a1a1a'}}}%% +flowchart LR W1[Stage 1
Send 30 messages
1-4 replies expected] W2[Stage 2
Run 3-5 demos
2-3 DPAs sent] W3[Stage 3
1-2 deposits cleared
Pilot kickoffs scheduled] diff --git a/content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/ph-vs-ih.svg b/content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/ph-vs-ih.svg index 3a9de994b..9cca64cfe 100644 --- a/content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/ph-vs-ih.svg +++ b/content/course/tech-for-non-technical-founders-2026/outbound-without-sales-team/ph-vs-ih.svg @@ -26,18 +26,18 @@ 40% - - 3.1% - Product Hunt - per launch event - 89% of PH founders surveyed - said they would not launch again + Product Hunt + + 3.1% + per launch event + 89% of PH founders surveyed + said they would not launch again - - 23.1% - Indie Hackers - per engaged post + Indie Hackers + + 23.1% + per engaged post diff --git a/content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/cover.png b/content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/cover.png index 33681ce13..7b05b3d0d 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/cover.png and b/content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/index.md b/content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/index.md index 18cb2dd78..48363fd23 100644 --- a/content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/index.md +++ b/content/course/tech-for-non-technical-founders-2026/outreach-sequence-template/index.md @@ -46,12 +46,12 @@ The whole message rests on the first line naming something they actually wrote. ## The Day-3 bump - two variants, pick honestly -**If this is your first research round:** - +> **If this is your first research round:** +> > Bumping this once in case it got buried - I'm at the start of this research and your [POST TOPIC] experience is exactly the kind I'm trying to learn from. 20 minutes, any day this week. - -**If you have already run interviews:** - +> +> **If you have already run interviews:** +> > Bumping once - I've now talked to [TRUE NUMBER] people about this, and your situation ([THEIR DETAIL]) is the one the others kept pointing at. I'd love your 20 minutes before I write up what I've heard. Never claim conversations you have not had. The first-round variant works fine on its own - curiosity about their post is the hook, not your credentials. diff --git a/content/course/tech-for-non-technical-founders-2026/ownership-checklist/cover.png b/content/course/tech-for-non-technical-founders-2026/ownership-checklist/cover.png index 5b5ec18bc..1befbd99a 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/ownership-checklist/cover.png and b/content/course/tech-for-non-technical-founders-2026/ownership-checklist/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/ownership-checklist/index.md b/content/course/tech-for-non-technical-founders-2026/ownership-checklist/index.md index 988dd7319..aa0150375 100644 --- a/content/course/tech-for-non-technical-founders-2026/ownership-checklist/index.md +++ b/content/course/tech-for-non-technical-founders-2026/ownership-checklist/index.md @@ -33,6 +33,8 @@ related_posts: false > - **Path 3 (Fractional CTO bridge)**: run the full 45-minute audit BEFORE you give the FCTO any credential. > - **Path 4 (Hire a team)**: run the full audit BEFORE the contractor's first commit. This is the safety net that prevents the credential trap in the next section. +*Prefer paper? Download the PDF - same content, print-ready.* + # The GitHub / AWS / Database Ownership Checklist A 45-minute audit that tells you whether you own your company's code, cloud, and domain - or someone else does. For Path 2 self-serve founders, this is a 5-minute confirmation; for Path 3 and Path 4 founders, the full 45-minute version. diff --git a/content/course/tech-for-non-technical-founders-2026/ownership-checklist/ownership-checklist.pdf b/content/course/tech-for-non-technical-founders-2026/ownership-checklist/ownership-checklist.pdf new file mode 100644 index 000000000..245bbc75d Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/ownership-checklist/ownership-checklist.pdf differ diff --git a/content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md b/content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md index 7f007261b..10bb1b484 100644 --- a/content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md +++ b/content/course/tech-for-non-technical-founders-2026/paid-pilot-charge-before-ship/index.md @@ -242,7 +242,7 @@ You have a warm lead from [Chapter 5.5](/course/tech-for-non-technical-founders- ### Advanced objections (after customer #5) -The five responses below show up once you start talking to enterprise buyers or repeat prospects. For the first 4-5 pilots, the basic-objection table above covers what you will hear. These render as expandable rows so each long answer doesn't overflow on mobile. +The five responses below show up once you start talking to enterprise buyers or repeat prospects. For the first 4-5 pilots, the basic-objection table above covers what you will hear. **"Can we do it at $300 instead of $1,200?"** diff --git a/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/index.md b/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/index.md index 8bd08cd8b..e8bc84984 100644 --- a/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/index.md +++ b/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/index.md @@ -7,6 +7,14 @@ draft: false course_chapter: true author: "JetThoughts Team" slug: pivot-or-persevere-decision-framework +course_nav_prev: + slug: customers-leaving-churn-triage-not-acquisition + module: "Going further" + title: "When Your Customers Are Leaving: Churn Triage" +course_nav_next: + url: "/course/tech-for-non-technical-founders-2026/#going-further-after-first-paying-customer" + module: "Going further" + title: "All Going-further chapters" keywords: - when to pivot startup - lean startup pivot framework @@ -81,28 +89,17 @@ The skill is not memorizing the six types. The skill is asking which of the five The common pattern is not pivoting too early. It's pivoting too late - watching the cohort numbers, the conversion rates, the ad spend, and the CAC numbers all degrade for two quarters before admitting the signal is real. The trigger conditions below are the numerical thresholds that should override the "let me try one more thing" instinct. -```mermaid -%%{init: {'theme':'base', 'themeVariables': {'fontFamily':'Caveat, Patrick Hand, cursive', 'primaryColor':'#fff5f5', 'primaryBorderColor':'#cc342d', 'lineColor':'#333', 'primaryTextColor':'#1a1a1a'}}}%% -flowchart TD - Start[Pivot trigger detected] --> A{Sean Ellis 40% test} - A -->|Under 25% overall
uniform across segments| P3[Solution pivot
or Customer Need pivot] - A -->|Under 40% overall
one segment over 50%| P1[Customer Segment pivot] - A -->|Above 40%| B{Cohort retention 30-day} - B -->|All segments under 25%| P3b[Solution pivot] - B -->|Above 40% in one segment| C{CAC vs LTV ratio} - C -->|CAC over 3x LTV
customers love product| P6[Revenue Model pivot] - C -->|CAC sustainable| D{Outbound conversion} - D -->|Under 1% after 60 messages| P5[Channel pivot] - D -->|Above 2% in one channel| E{Tech ceiling hit?} - E -->|Yes - cost or performance| P4[Technology pivot] - E -->|No| Persevere[PERSEVERE
You have signal] - - classDef redbox fill:#fff5f5,stroke:#cc342d,stroke-width:2px; - classDef purplebox fill:#fbe9ff,stroke:#a855f7,stroke-width:2px; - classDef goodbox fill:#f0f9f0,stroke:#2e7d32,stroke-width:2.5px; - class P3,P3b,P1,P6,P5,P4 redbox - class Persevere goodbox -``` +Work the five checks in order - the first row whose trigger matches names your pivot type; if none match, you persevere: + +| Check, in order | Trigger threshold | Verdict | +|---|---|---| +| 1. Sean Ellis 40% must-have test | Under 25% in ALL segments | Solution or Customer Need pivot | +| | Under 40% overall, but one segment 50%+ | Customer Segment pivot | +| 2. 30-day cohort retention | All segments under 25% | Solution pivot | +| 3. CAC vs LTV ratio | CAC over 3x LTV while customers love the product | Revenue Model pivot | +| 4. Outbound conversion | Under 1% after 60 personal messages | Channel pivot | +| 5. Tech ceiling | Stack cost or performance ceiling hit | Technology pivot | +| All five clear | - | **Persevere - you have signal** | **Sean Ellis 40% under 25% across all segments** triggers a Solution pivot or a Customer Need pivot. Founders typically react by trying harder on the same product - more features, better onboarding, more polish. The right move is to ask whether the solution shape itself is wrong, or whether you targeted the wrong job. diff --git a/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-ledger.svg b/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-ledger.svg index 10dd64d03..51632f5a1 100644 --- a/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-ledger.svg +++ b/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-ledger.svg @@ -46,7 +46,7 @@ Disconfirmed problem - Chapter 2.3 / 7.5 + Ch 2.3 / churn triage YES (negative) Add to "do not chase" list @@ -74,9 +74,9 @@ Built MVP code - Module 5A / 6B + Ch 4.3-4.4 / hire track DEPENDS - Keep auth/billing, replace core + Keep auth/billing, swap core diff --git a/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-wheel.svg b/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-wheel.svg index 52fc7bcd3..fa3b9e414 100644 --- a/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-wheel.svg +++ b/content/course/tech-for-non-technical-founders-2026/pivot-or-persevere-decision-framework/pivot-wheel.svg @@ -1,4 +1,4 @@ - + The 6 pivot types: customer, need, solution, technology, channel, revenue diff --git a/content/course/tech-for-non-technical-founders-2026/price-hypothesis-on-smoke-test-page/index.md b/content/course/tech-for-non-technical-founders-2026/price-hypothesis-on-smoke-test-page/index.md index 0035ebd62..fa53baa70 100644 --- a/content/course/tech-for-non-technical-founders-2026/price-hypothesis-on-smoke-test-page/index.md +++ b/content/course/tech-for-non-technical-founders-2026/price-hypothesis-on-smoke-test-page/index.md @@ -58,7 +58,7 @@ The copy matters more than the price number. Two framings we keep reaching for o Pick one pattern. Do not A/B test - 150 visits each on a $300 budget can't distinguish 4% from 5%. Ship one button copy. -![Stripe Payment Link flow: dashboard → create link → paste URL on landing page → visitor clicks → card entry → payment intent](stripe-payment-link.svg) +![Same button, two framings side by side - an outcome-framed CTA reading "Stop spending 4 hours on reconciliation - $97" and a risk-reduction-framed CTA reading "Reserve your spot - $97 refundable for 30 days", both showing the identical $97 price](stripe-payment-link.svg) ## Add the Stripe button diff --git a/content/course/tech-for-non-technical-founders-2026/price-hypothesis-on-smoke-test-page/stripe-payment-link.svg b/content/course/tech-for-non-technical-founders-2026/price-hypothesis-on-smoke-test-page/stripe-payment-link.svg index 053c072d1..e81bab8c1 100644 --- a/content/course/tech-for-non-technical-founders-2026/price-hypothesis-on-smoke-test-page/stripe-payment-link.svg +++ b/content/course/tech-for-non-technical-founders-2026/price-hypothesis-on-smoke-test-page/stripe-payment-link.svg @@ -1,31 +1,38 @@ - - - - - Stripe - Dashboard - Payment Link - - - - - Landing Page - CTA: "Reserve - access — $97" - - - - - Stripe - Checkout - Card entry → - - - Thank - You + + Same button, two framings side by side - an outcome-framed CTA and a risk-reduction-framed CTA, both showing the identical $97 price - - - + + + Same button, two framings + The price ($97) is identical on both. Pick one - do not A/B test. + + + + OUTCOME FRAMING + + Stop spending 4 hours on reconciliation - $97 + anchors the price to the problem it replaces + + + + RISK-REDUCTION FRAMING + + Reserve your spot - $97 refundable for 30 days + reduces first-touch risk + + + + Same $97 either way - the frame changes what the visitor feels, not what they pay. diff --git a/content/course/tech-for-non-technical-founders-2026/salvage-vs-rebuild-decision-tree/cover.png b/content/course/tech-for-non-technical-founders-2026/salvage-vs-rebuild-decision-tree/cover.png index 3d2897dd1..31fa72b60 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/salvage-vs-rebuild-decision-tree/cover.png and b/content/course/tech-for-non-technical-founders-2026/salvage-vs-rebuild-decision-tree/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/cover.png b/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/cover.png index 6a5ed669d..748db0c9a 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/cover.png and b/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md b/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md index dd06bc817..123461868 100644 --- a/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md +++ b/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/index.md @@ -23,7 +23,7 @@ metatags: image: cover.png og_title: "4.4 · The Self-Serve MVP Stack: Build Phases" og_description: "The build plan: 4 phases from Lovable UI to live Stripe checkout. Phase exit criteria, 5 green lights, and the Module 5 handoff." -cover_image_alt: "JetThoughts cover showing three hand-drawn stacked layers labeled Lovable, Supabase, and Stripe with arrows linking them, and a sticky note reading Ship by Friday week 4." +cover_image_alt: "JetThoughts cover showing three hand-drawn stacked layers labeled Lovable, Supabase, and Stripe with arrows linking them, and a sticky note reading Weeks 4-10 for the build-phase plan." canonical_url: "https://jetthoughts.com/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-build-phases/" related_posts: false --- diff --git a/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/cover.png b/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/cover.png index 6a5ed669d..748db0c9a 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/cover.png and b/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md b/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md index 2c5e01fb2..ac28a9929 100644 --- a/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md +++ b/content/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/index.md @@ -25,7 +25,7 @@ metatags: image: cover.png og_title: "4.3 · The Self-Serve MVP Stack: Tools & Setup" og_description: "Why Lovable + Supabase + Stripe is the dominant self-serve path. Plain-English roles, vendor pricing, 12 rules, communities. Chapter 4.3 of the course; Chapter 4.4 walks the build." -cover_image_alt: "JetThoughts cover showing three hand-drawn stacked layers labeled Lovable, Supabase, and Stripe with arrows linking them, and a sticky note reading Ship by Friday week 4." +cover_image_alt: "JetThoughts cover showing three hand-drawn stacked layers labeled Lovable, Supabase, and Stripe with arrows linking them, and a sticky note reading Weeks 4-10 for the build-phase plan." canonical_url: "https://jetthoughts.com/course/tech-for-non-technical-founders-2026/self-serve-mvp-stack-lovable-supabase-stripe-2026/" related_posts: false --- @@ -64,7 +64,7 @@ Boring is what you want for an MVP. The boring path lets one non-technical found The cost to disprove your hypothesis is vendor free tiers and the small per-tool monthly fees in the cost table above. The cost to prove it is the same. -> **Alternative: $0 Concierge MVP (no-code "Wizard of Oz" - you fake the automation by hand behind the curtain).** If you want more demand evidence before committing to Lovable code, run a Concierge MVP first: **Tally** (free form) → **Zapier or Make.com** (free routing) → **Airtable or Notion** (free storage). The customer fills the Tally form, Zapier drops the row in Airtable, you process by hand. To the customer it looks automated. Validate willingness-to-pay before committing to the build. All three tools have free tiers. This is a stepping stone, not a replacement; the Lovable + Supabase + Stripe stack is what ships in Chapter 4.4. +How much demand evidence you already have decides the path. With enough of it, you open Lovable and build. Without it, a $0 Concierge MVP - a no-code "Wizard of Oz" where you fake the automation by hand behind the curtain - gets you more evidence before you commit to Lovable code. Wire up Tally (free form) → Zapier or Make.com (free routing) → Airtable or Notion (free storage): the customer fills the Tally form, Zapier drops the row in Airtable, and you process it by hand. To the customer it looks automated, so you validate willingness-to-pay before writing code. The trade-off is that you run it by hand, which makes it a stepping stone, not a replacement. Either way, the Lovable + Supabase + Stripe stack is what ships in Chapter 4.4. ## M2 prototype vs M4 MVP - different artifacts, different rigor @@ -114,7 +114,7 @@ The fee is the standard [per-transaction card processing rate](https://stripe.co Free for solo founders on the Free plan. You will not write much code yourself, but Lovable can sync to a GitHub repo (short for repository - the online folder that stores your code) on every save. Two reasons this matters: (a) you have a backup if Lovable goes down or you cancel the subscription, (b) when you eventually hire a contractor or a Fractional CTO, the code is already in a place they can read. Set this up in Lovable's Settings on day one. Skipping this is the most common reason a founder cannot retrieve the source six months later. -> **Module 4 AI critic/simulator block** +> **Have AI review the build before real users touch it.** > > **What AI can help with at this stage:** > diff --git a/content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/cover.png b/content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/cover.png index 85bcf6256..e2eee42f6 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/cover.png and b/content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md b/content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md index 164fd9491..420798d3d 100644 --- a/content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md +++ b/content/course/tech-for-non-technical-founders-2026/self-serve-stack-walkthrough/index.md @@ -206,6 +206,8 @@ Send the staging URL to your spouse (or one ICP peer). Ask them to sign up with Goal: a user signs up, hits the paywall after the trial, pays $1 in Stripe test mode, lands on the paid dashboard. Phase demo: you walk through your own flow, end to end, with a $1 charge that clears. +This phase looks the most technical on paper - you will see database snippets and function names below. You write none of it by hand: the AI generates each block, you paste it where the step says, and the checklists tell you what "working" looks like. Treat the code the way you treat a boarding pass - you carry it, you do not have to understand the barcode. + ### Session 1 - one product, one price, in Stripe test mode In the Stripe dashboard (Products > Add product): diff --git a/content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/airbnb-test.svg b/content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/airbnb-test.svg index c9d07bb31..7ea10c0ef 100644 --- a/content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/airbnb-test.svg +++ b/content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/airbnb-test.svg @@ -52,7 +52,7 @@ that delivers what you sold. - + If 0 of 30 click: the problem is real, your pitch is wrong. Re-write the page. $0 spent on engineering. 0% sunk cost. 100% information. diff --git a/content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/decision-matrix.svg b/content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/decision-matrix.svg index 9756799c0..a6d6eb327 100644 --- a/content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/decision-matrix.svg +++ b/content/course/tech-for-non-technical-founders-2026/should-you-hire-2026-decision-tree/decision-matrix.svg @@ -1,66 +1,66 @@ - + - + - The 4-Way Build-Path Decision Matrix - Pick the smallest path that answers the next question your investors will ask. + The 4-Way Build-Path Decision Matrix + Pick the smallest path that answers the next question your investors will ask. - more validated above - less validated below + more validated above - less validated below simpler build - backend-heavier build - - 1. Validate without code - When: no MVP. Single hypothesis untested. - First action: post a Carrd page + Stripe link. - Cost: $0-$300. Timeline: 1 week. - Failure mode: 0 buyers. Pivot before you build. - Tools: Carrd, Stripe, Notion, Lovable demo, - Calendly, 1 paid LinkedIn ad ($100-200). - "Sell the solution before you build it." + + 1. Validate without code + When: no MVP. Single hypothesis untested. + First action: post a Carrd page + Stripe link. + Cost: $0-$300. Timeline: 1 week. + Failure mode: 0 buyers. Pivot before you build. + Tools: Carrd, Stripe, Notion, Lovable demo, + Calendly, 1 paid LinkedIn ad ($100-200). + "Sell the solution before you build it." - - 2. Self-serve build (Module 3A) - When: validated. Simple MVP. 4-8 weeks free. - First action: paste Vibe PRD into Lovable. - Cost: $200-$1,200/mo. Timeline: 6-12 weeks. - Failure mode: hits ceiling at 5K users. - Tools: Lovable + Supabase + Stripe. - Architecture review: 1 hour/month with - a senior engineer in your network. + + 2. Self-serve build (Ch 4.3-4.4) + When: validated. Simple MVP. + First action: paste Vibe PRD into Lovable. + Cost: $200-$1,200/mo. Timeline: 6-12 weeks. + Failure mode: hits ceiling at 5K users. + Tools: Lovable + Supabase + Stripe. + Architecture review: 1 hour/month with + a senior engineer in your network. - - 3. Fractional CTO bridge - When: validated. Mid complexity. No $200K+. - First action: hire 5 hrs/wk Fractional CTO. - Cost: $1,600-$4,000/mo. Timeline: 8-16 wks. - Failure mode: CTO becomes a coder, not a guard. - Use them for: architecture review, PR review, - interviewing your first hire, watching costs. - $0 equity. Beats a 50%-equity cofounder. + + 3. Fractional CTO bridge + When: validated. Mid complexity. No $200K+. + First action: hire 5 hrs/wk Fractional CTO. + Cost: $1,600-$4,000/mo. Timeline: 8-16 wks. + Failure mode: CTO becomes a coder, not a guard. + Use them for: architecture review, PR review, + interviewing your first hire, watching costs. + $0 equity. Beats a 50%-equity cofounder. - - 4. Hire a team (Module 3B) - When: backend-heavy. Integrations. Compliance. - First action: read SOW clause-by-clause. - Cost: $30K-$80K/mo. Timeline: 12-26 weeks. - Failure mode: spaceship for the wrong moon. - Stack: Rails / Django / Laravel. - Own: GitHub org, AWS root, domain registrar. - Friday demos start day one. + + 4. Hire a team (hire track) + When: backend-heavy. Integrations. Compliance. + First action: read SOW clause-by-clause. + Cost: $30K-$80K/mo. Timeline: 12-26 weeks. + Failure mode: spaceship for the wrong moon. + Stack: Rails / Django / Laravel. + Own: GitHub org, AWS root, domain registrar. + Friday demos start day one. - Most pre-seed founders belong in box 1 or 2. Most who hire belonged in box 3. + Most pre-seed founders belong in box 1 or 2. Most who hire belonged in box 3. diff --git a/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/attack-chain.svg b/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/attack-chain.svg index d2cdf5dd0..a3d7b02ab 100644 --- a/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/attack-chain.svg +++ b/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/attack-chain.svg @@ -61,6 +61,6 @@ first install logged 11 days after register) - The defense: a 3-line CI gate that blocks ANY new dependency until a human reviews it. + The defense: a 20-line CI gate that blocks ANY new dependency until a human reviews it. See the YAML below. Time to install: 15 minutes. diff --git a/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/cover.png b/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/cover.png index 4b1f00b73..d4280a9bd 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/cover.png and b/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/index.md b/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/index.md index bfca88c90..d025f73dd 100644 --- a/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/index.md +++ b/content/course/tech-for-non-technical-founders-2026/slopsquatting-ai-supply-chain-attack/index.md @@ -40,19 +40,19 @@ course_nav: false **Supplementary content.** This chapter is relevant after you've shipped (Module 4+) and your product touches AI in production. Bookmark and return when needed. -In April 2025, Lasso Security published findings that AI assistants suggested over 200 package names across Rubygems, PyPI, and npm that did not exist. Attackers registered those names and waited. By the time the [Infosecurity Magazine writeup](https://www.infosecurity-magazine.com/news/ai-hallucinations-slopsquatting/) named the technique "slopsquatting" in April 2025, security teams had already logged the first installs of the proof-of-concept packages on real production systems. Your founder paid $34K for an MVP. The most expensive line in the codebase was free. It was the one a model invented and a developer typed into a `Gemfile` without checking that the gem existed. +In April 2025, Lasso Security published findings that AI assistants suggested over 200 package names across Rubygems, PyPI, and npm that did not exist. Attackers registered those names and waited. By the time the [Infosecurity Magazine writeup](https://www.infosecurity-magazine.com/news/ai-hallucinations-slopsquatting/) named the technique "slopsquatting" in April 2025, security teams had already logged the first installs of the proof-of-concept packages on real production systems. You paid $34K for an MVP. The most expensive line in the codebase was free. It was the one a model invented and a developer typed into a `Gemfile` without checking that the gem existed. ![A hand-drawn diagram of the slopsquatting attack chain in five steps: AI hallucinates a package name, attacker watches public prompt logs, attacker registers the name on Rubygems / PyPI / npm with a malicious payload, developer installs without review, damage runs in production. Annotated with the Lasso Security 11-day reproduction window.](attack-chain.svg) ## What slopsquatting is -LLMs invent package names that sound plausible but do not exist. The original [Lasso Security research from March 2025](https://www.lasso.security/blog/ai-package-hallucinations) tested GPT-4, Claude, and the open-source Code Llama against thousands of common developer prompts. About 5.2% of GPT-4's package suggestions and 21.7% of Code Llama's were hallucinated. [Snyk's slopsquatting write-up](https://snyk.io/articles/slopsquatting-mitigation-strategies/) cites follow-up research putting the overall rate at roughly one in five AI-suggested packages across models. Attackers then register the most-suggested hallucinated names as squatted packages, sometimes with a malicious payload (data exfiltration, credential theft, persistence backdoor), sometimes empty until a real victim shows up. Rubygems, PyPI, npm, Composer, and crates.io all have the same exposure. The attack does not need a 0day. It needs a developer who trusts a model. +LLMs invent package names that sound plausible but do not exist. The original [Lasso Security research from March 2025](https://www.lasso.security/blog/ai-package-hallucinations) tested GPT-4, Claude, and the open-source Code Llama against thousands of common developer prompts. About 5.2% of GPT-4's package suggestions and 21.7% of Code Llama's were hallucinated. [Snyk's slopsquatting write-up](https://snyk.io/articles/slopsquatting-mitigation-strategies/) cites follow-up research putting the overall rate at roughly one in five AI-suggested packages across models. Attackers then register the most-suggested hallucinated names as squatted packages, sometimes with a malicious payload (data exfiltration, credential theft, persistence backdoor), sometimes empty until a real victim shows up. Rubygems, PyPI, npm, Composer, and crates.io all have the same exposure. The attack does not need a 0day - just a developer who trusts a model without checking. -## The 3-line CI gate (the simplest defense) +## The 20-line CI gate (the simplest defense) A CI gate that fails the build on any new dependency until a human signs off. Every Rails, Django, and Laravel founder can install this in 15 minutes. -*What this 30-line CI gate actually does: blocks any pull request that adds a new package until you've eyeballed it - cheap protection against the slopsquatting attack pattern above.* +*What this 20-line CI gate actually does: blocks any pull request that adds a new package until you've eyeballed it - cheap protection against the slopsquatting attack pattern above.* ```yaml @@ -120,7 +120,7 @@ flowchart TD ``` -That is it. No Snyk subscription, no Socket.dev license, no signing key infrastructure. A 30-line YAML file and one founder who reads the PR comment when it fires. +That is it. No Snyk subscription, no Socket.dev license, no signing key infrastructure. A 20-line YAML file and one founder who reads the PR comment when it fires. ## The contract clause @@ -141,7 +141,7 @@ The threat data has caught up to the technique. [Snyk's ToxicSkills audit of AI Three actions. None require an engineer to start. - **Tonight: open your `Gemfile.lock` / `package-lock.json` / `requirements.txt` / `composer.lock`.** Read the package names out loud. Any name you cannot identify in 5 seconds, paste it into your registry's search (rubygems.org, pypi.org, npmjs.com). If the package has fewer than 1,000 downloads or was first published in the last 60 days, write its name on a list and ask your dev shop in writing why it is in your codebase. Save the email - it is the start of your audit. -- **This week: drop the 30-line CI gate above into `.github/workflows/dependency-gate.yml`.** Open the PR yourself if your dev shop is slow. The merge protection takes 10 minutes to wire in GitHub repository settings. Reference the [GitHub/AWS/DB ownership checklist](/course/tech-for-non-technical-founders-2026/ownership-checklist/) for repository admin access if your name is not on the org owners list. +- **This week: drop the 20-line CI gate above into `.github/workflows/dependency-gate.yml`.** Open the PR yourself if your dev shop is slow. The merge protection takes 10 minutes to wire in GitHub repository settings. Reference the [GitHub/AWS/DB ownership checklist](/course/tech-for-non-technical-founders-2026/ownership-checklist/) for repository admin access if your name is not on the org owners list. - **Before any new SOW: paste the contract clause from this post into the addendum section.** If the agency strikes the clause, that is the audit finding. The [SOW reading guide](/course/tech-for-non-technical-founders-2026/hire-track-supplementary-reference/#reading-the-sow) covers the rest of the clauses you should be checking on the same pass. ## Wrapping the course diff --git a/content/course/tech-for-non-technical-founders-2026/smoke-test-landing-page-7-day-demand-test/channel-icp-matrix.svg b/content/course/tech-for-non-technical-founders-2026/smoke-test-landing-page-7-day-demand-test/channel-icp-matrix.svg index 8ebfc15b2..64e223393 100644 --- a/content/course/tech-for-non-technical-founders-2026/smoke-test-landing-page-7-day-demand-test/channel-icp-matrix.svg +++ b/content/course/tech-for-non-technical-founders-2026/smoke-test-landing-page-7-day-demand-test/channel-icp-matrix.svg @@ -54,5 +54,5 @@ - Twitter/X: decayed enough that we no longer recommend it for B2B validation in 2026. + Twitter/X: decayed enough that we no longer recommend it for B2B validation in 2026. diff --git a/content/course/tech-for-non-technical-founders-2026/smoke-test-wire-tracking/tracking-snippets.svg b/content/course/tech-for-non-technical-founders-2026/smoke-test-wire-tracking/tracking-snippets.svg index 076ab73b8..b3675bc90 100644 --- a/content/course/tech-for-non-technical-founders-2026/smoke-test-wire-tracking/tracking-snippets.svg +++ b/content/course/tech-for-non-technical-founders-2026/smoke-test-wire-tracking/tracking-snippets.svg @@ -34,7 +34,7 @@ Google Analytics 4 - long-term analytics (optional) + page views · clicks · form submits diff --git a/content/course/tech-for-non-technical-founders-2026/sow-reading-guide/cover.png b/content/course/tech-for-non-technical-founders-2026/sow-reading-guide/cover.png index 6d3a94a6f..fdd0e2b79 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/sow-reading-guide/cover.png and b/content/course/tech-for-non-technical-founders-2026/sow-reading-guide/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/admin-panel-spaceship.svg b/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/admin-panel-spaceship.svg index d92c24d40..1d2bd22e0 100644 --- a/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/admin-panel-spaceship.svg +++ b/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/admin-panel-spaceship.svg @@ -50,7 +50,8 @@ - 10-week build · $15,000 · "interpreted the brief" + 10-week build · $15,000 + "interpreted the brief" What got built diff --git a/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/feature-vs-outcome.svg b/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/feature-vs-outcome.svg index e9e5df0c5..521a66ea6 100644 --- a/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/feature-vs-outcome.svg +++ b/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/feature-vs-outcome.svg @@ -43,7 +43,7 @@ What the engineer builds - + Reporting & Analytics Module v1 diff --git a/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/index.md b/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/index.md index 37bdf8a7f..3332e582b 100644 --- a/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/index.md +++ b/content/course/tech-for-non-technical-founders-2026/stop-specifying-features-start-outcomes/index.md @@ -130,7 +130,7 @@ Three actions, in order. > > FAIL = revise Section 3 outcome-shape and ask a fresh peer. Do NOT advance to Module 4 with a failed brief; the Lovable build will inherit the fuzziness. -> **Module 3 AI critic/simulator block** +> **Test your brief with an AI reviewer.** > > **No peer available? Use Claude or ChatGPT as the peer.** Paste your full Section 3 + Section 5 (no-go list) into Claude, then paste this prompt: > diff --git a/content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/cover.png b/content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/cover.png index 5b7f5c070..2430d0400 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/cover.png and b/content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/index.md b/content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/index.md index 128b7a7c5..06ac3ba69 100644 --- a/content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/index.md +++ b/content/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/index.md @@ -1,5 +1,5 @@ --- -title: "6.4 · Three Questions That Turn Standup Into Proof" +title: "Three Questions That Turn Standup Into Proof" aliases: ["/blog/three-questions-turn-standup-into-proof/"] description: "Three questions a non-technical founder can ask in any daily standup to tell shipping from stalling. Pass/fail signals, follow-ups, the Friday demo pairing." date: 2026-05-18 @@ -23,7 +23,7 @@ course_nav: false cover_image: cover.png metatags: image: cover.png - og_title: "6.4 · Three Questions That Turn Standup Into Proof" + og_title: "Three Questions That Turn Standup Into Proof" og_description: "Three questions a non-technical founder can ask in any daily standup to tell shipping from stalling. Pass/fail signals, follow-ups, the Friday demo pairing." cover_image_alt: "JetThoughts blog cover for Three Questions That Turn a Standup Into Proof showing three numbered question cards on a redacted Jira board" canonical_url: "https://jetthoughts.com/course/tech-for-non-technical-founders-2026/three-questions-turn-standup-into-proof/" @@ -47,7 +47,7 @@ canonical_url: "https://jetthoughts.com/course/tech-for-non-technical-founders-2 ## Why standups stopped working in 2026 -A non-technical founder typically inherit the daily standup ritual without ever being told what good looks like. Their PM or agency lead schedules a fifteen-minute call, the team answers three questions in order, and the founder leaves the call feeling oriented. Whether anything shipped is a separate question, and the standup format does not force it. [Atlassian's own guide to daily standups](https://www.atlassian.com/agile/scrum/standups) flags exactly this risk: standups drift into status theatre unless someone is asking the questions that surface working software. +Non-technical founders typically inherit the daily standup ritual without ever being told what good looks like. Their PM or agency lead schedules a fifteen-minute call, the team answers three questions in order, and the founder leaves the call feeling oriented. Whether anything shipped is a separate question, and the standup format does not force it. [Atlassian's own guide to daily standups](https://www.atlassian.com/agile/scrum/standups) flags exactly this risk: standups drift into status theatre unless someone is asking the questions that surface working software. AI-augmented developers compound the problem. A single developer can land five pull requests a day with no observable feature progress - refactors, dependency bumps, prompt tweaks, generated tests that pass because they test nothing. The founder watching the call sees motion. The product does not move. [Qodo's 2025 State of AI Code Quality report](https://www.qodo.ai/reports/state-of-ai-code-quality/) found AI-generated code produces 1.7x more issues than human-written code at the same line count, and most of those issues hide inside the kind of work that sounds productive in a standup answer. @@ -95,9 +95,9 @@ The question catches **over-engineering** - the failure mode where the team buil ## How this pairs with the Friday demo -The three standup questions are the daily proof. The [Friday demo](/blog/dev-shop-red-flags-checklist/) is the weekly proof. Together they form a single weekly cadence: five standups answer "did anything ship today?" and Friday answers "what is the working software for the week?" Without both, the daily check feels like nagging and the weekly demo feels like theatre. With both, the daily check feeds the demo - by Friday afternoon the founder already knows what should be on staging because she has been clicking the URLs all week. +The three standup questions are the daily proof. The [Friday demo](/course/tech-for-non-technical-founders-2026/friday-demo-template/) is the weekly proof. Together they form a single weekly cadence: five standups answer "did anything ship today?" and Friday answers "what is the working software for the week?" Without both, the daily check feels like nagging and the weekly demo feels like theatre. With both, the daily check feeds the demo - by Friday afternoon the founder already knows what should be on staging because she has been clicking the URLs all week. -[Atlassian's 2024 update on standups](https://www.atlassian.com/agile/scrum/standups) and the [Scrum Alliance's reference on async standups](https://resources.scrumalliance.org/Article/async-standups) both note that the daily ritual works only when it surfaces blockers. The three questions above are how you make blockers visible. The Friday demo is how you make working software visible. Together they replace the founder's anxiety about whether the team is shipping with a record of what shipped, week by week. The companion [Friday Demo Template](/blog/dev-shop-red-flags-checklist/) - the lead magnet for post 4 of this curriculum - holds the full script. +[Atlassian's 2024 update on standups](https://www.atlassian.com/agile/scrum/standups) and the [Scrum Alliance's reference on async standups](https://resources.scrumalliance.org/Article/async-standups) both note that the daily ritual works only when it surfaces blockers. The three questions above are how you make blockers visible. The Friday demo is how you make working software visible. Together they replace the founder's anxiety about whether the team is shipping with a record of what shipped, week by week. The companion [Friday Demo Template](/course/tech-for-non-technical-founders-2026/friday-demo-template/) holds the full script. ## What to do tomorrow diff --git a/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/cover.png b/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/cover.png index df5630865..ed7c26e37 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/cover.png and b/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/index.md b/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/index.md index b78e5e631..9095b39d9 100644 --- a/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/index.md +++ b/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/index.md @@ -40,13 +40,15 @@ related_posts: false > > Fill in order Mon morning. Send to your 2 readers (one advisor, one peer) by Mon EOD. +*Prefer paper? Download the PDF - same content, print-ready.* + ## Why this exists A solo founder I spoke with last month sent 47 cold DMs to Twitter strangers complaining about their CRM. Twelve answered. Of the twelve, two said yes and ten said honest, paragraph-long no's. She had spent six weekends collecting transcripts in a folder labeled `notes`. When she opened the folder to write the problem statement, she realized she had never named the persona, never tallied the strong signals, and never written the why-now. The ten no's looked alike in her memory and contradicted each other on the page. Half of them were not even the persona she was building for. The synthesis took 90 minutes the first time she sat down to do it - and the decision the page produced was *pivot to a different ICP* rather than *build*. She kept the calendar she would have spent prompting Lovable and ran 5 sharper interviews instead. This template is the page she filled in. ## How to use this -Block 90 minutes on a single morning. Print the template (or copy the markdown version below into a Notion doc). Bring all 10 interview transcripts, your handwritten Q4 scores, your emotional-flag counts. +Block 90 minutes on a single morning - about 30 of them go to the writing itself, the rest to re-reading transcripts and scores. Print the template (or copy the markdown version below into a Notion doc). Bring all 10 interview transcripts, your handwritten Q4 scores, your emotional-flag counts. The order matters. Score first, count second, write the page third. Write the page before scoring and you write the page you wished the calls had returned, not the page the transcripts actually support. The friction of writing the score before the prose is what stops you from talking yourself into the build. diff --git a/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/validated-problem-statement-template.pdf b/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/validated-problem-statement-template.pdf new file mode 100644 index 000000000..7bee56078 Binary files /dev/null and b/content/course/tech-for-non-technical-founders-2026/validated-problem-statement-template/validated-problem-statement-template.pdf differ diff --git a/content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/shed-house-skyscraper.svg b/content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/shed-house-skyscraper.svg index 727fd8945..8f0715abd 100644 --- a/content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/shed-house-skyscraper.svg +++ b/content/course/tech-for-non-technical-founders-2026/vibe-coding-ceiling-signals/shed-house-skyscraper.svg @@ -1,5 +1,5 @@ - + @@ -9,14 +9,14 @@ - + - Shed - House - Skyscraper - Different buildings, different talent, different cost ceilings. Pick the one your real load needs. + Shed - House - Skyscraper + Different buildings, different talent, different cost ceilings. Pick the one your real load needs. - + @@ -43,32 +43,32 @@ - - - - - - - - - - + + + + + + + + - + + + - The skyscraper - Hired engineering team - SOC2 / HIPAA - audit-ready - ~$50K+ / mo + The skyscraper + Hired engineering team + SOC2 / HIPAA - audit-ready - ~$50K+ / mo - 2 ceiling signals fire + 2 signals fire - + audit + scale - Most pre-seed B2B SaaS lives in the shed. The 20% that outgrows it is what this post is about. + Most pre-seed B2B SaaS lives in the shed. The 20% that outgrows it is what this post is about. diff --git a/content/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/cover.png b/content/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/cover.png index 8e143d6ae..3d1574508 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/cover.png and b/content/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/cover.png differ diff --git a/content/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/index.md b/content/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/index.md index 35b9e4f5d..6ba49363f 100644 --- a/content/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/index.md +++ b/content/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/index.md @@ -1,5 +1,5 @@ --- -title: "6.5 · The Plain-English Weekly Dev Report" +title: "The Plain-English Weekly Dev Report" aliases: ["/blog/weekly-dev-report-template-founders/"] description: "A one-page weekly dev report you demand from your team every Monday. Five sections, copy-paste, with pass/fail examples for each. No jargon." date: 2026-05-18 @@ -23,7 +23,7 @@ related_posts: false course_nav: false cover_image: cover.png metatags: - og_title: "6.5 · The Plain-English Weekly Dev Report" + og_title: "The Plain-English Weekly Dev Report" og_description: "A one-page weekly dev report you demand from your team every Monday. Five sections, copy-paste, with pass/fail examples for each. No jargon." cover_image_alt: "JetThoughts blog cover for The Plain-English Weekly Dev Report showing two side-by-side email screenshots - a wall of jargon on the left and a one-page five-section report on the right" canonical_url: "https://jetthoughts.com/course/tech-for-non-technical-founders-2026/weekly-dev-report-template-founders/" @@ -41,7 +41,7 @@ Open your inbox on a Monday morning. Two reports landed over the weekend from tw The first is 1,840 words long. It opens with "We made significant progress on the v2 architecture refactor and dependency hardening this sprint, prioritising long-term maintainability." There are seven Jira screenshots, a burndown chart, and a paragraph titled "Tech debt remediation." Nowhere in the report can you find a URL you can click. You read it twice. You still cannot say what shipped. -The second is one page. The first line is a staging URL. The second line says "co flow is live; here is a $1 test charge that hit your Stripe dashboard at 14:02 UTC." The third line names two things the team cut to ship that. The fourth line names one person blocking one decision and the answer she needs from you by Wednesday. The fifth line says "next week we are worried about the migration; it locks the orders table and we want a 6am window." +The second is one page. The first line is a staging URL. The second line says "checkout flow is live; here is a $1 test charge that hit your Stripe dashboard at 14:02 UTC." The third line names two things the team cut to ship that. The fourth line names one person blocking one decision and the answer she needs from you by Wednesday. The fifth line says "next week we are worried about the migration; it locks the orders table and we want a 6am window." Both teams worked the same five days, and the second report gave you everything you needed to run your Monday while the first burned half an hour of it. @@ -148,4 +148,4 @@ The bad report leans on soft verbs, passive voice, and unnamed actors because it - Wes Kao, [How I give the right amount of context](https://newsletter.weskao.com/p/how-i-give-the-right-amount-of-context) - a practitioner reference on the discipline of writing one short, useful update a week. - Eric Ries via Lean Startup Co., [What Is an MVP?](https://leanstartup.co/resources/articles/what-is-an-mvp/) - the validated-learning framing that makes "what did we cut?" a real product question, not a comfort question. -Built by JetThoughts as part of the [From Idea to First Paying Customer](/course/tech-for-non-technical-founders-2026/) curriculum. Authorship credit only - no service pitch. +Built by JetThoughts as part of the [From Idea to First Paying Customer](/course/tech-for-non-technical-founders-2026/) curriculum. diff --git a/content/course/tech-for-non-technical-founders-2026/where-to-hire-developer-2026-map/cover.png b/content/course/tech-for-non-technical-founders-2026/where-to-hire-developer-2026-map/cover.png index 017b4de55..27e3aa5df 100644 Binary files a/content/course/tech-for-non-technical-founders-2026/where-to-hire-developer-2026-map/cover.png and b/content/course/tech-for-non-technical-founders-2026/where-to-hire-developer-2026-map/cover.png differ diff --git a/docs/projects/2605-tech-for-non-technical-founders/40-49-review/_DEFERRED_external-validation-pilot-kit.md b/docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.18-external-validation-pilot-kit.md similarity index 73% rename from docs/projects/2605-tech-for-non-technical-founders/40-49-review/_DEFERRED_external-validation-pilot-kit.md rename to docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.18-external-validation-pilot-kit.md index 18579ca66..94561aeb1 100644 --- a/docs/projects/2605-tech-for-non-technical-founders/40-49-review/_DEFERRED_external-validation-pilot-kit.md +++ b/docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.18-external-validation-pilot-kit.md @@ -1,9 +1,14 @@ -# [DEFERRED] External 5-Sam Validation Pilot Kit +# 40.18 · External 5-Sam Validation Pilot Kit -**Status:** DEFERRED until course complete — DO NOT execute now -**Created:** 2026-06-11 -**Trigger to revive:** v2 micro-lesson migration is fully shipped (all 22 remaining lessons + companions + landing page polish). Course is "done." THEN consider external validation. -**Why deferred:** Course content work is the current focus. Promoting / selling / soliciting external Sams happens after the course is complete, not during template iteration. The 2 pilot lessons (1.2a + 1.2b) are validated INTERNALLY by Paul as the buyer of the migration template, NOT externally by recruited Sams. +**Status:** ACTIVE (revived 2026-07-11 - Sprint A #2). All revival conditions met: full course on v2 (PRs #351-354), landing/quickstart/FAQ/glossary aligned, journey-audited (40.17), template locked. +**Created:** 2026-06-11 (deferred) · **Revived:** 2026-07-11 + +## Revival status - what is already in place (2026-07-11) + +- **Clarity install:** template hook shipped in `themes/beaver/layouts/partials/page/analytics.html`, gated on `microsoftClarity` param. **Paul's action:** create the project at clarity.microsoft.com, then set `microsoftClarity = ""` under `[params]` in `config/_default/hugo.toml`. Note: hook is currently site-wide like GA4, not `/course/`-scoped - scope-limit it in the same commit as the ID if desired. +- **GA4 funnel events:** live on course pages - `course_start_course` / `course_quickstart` (landing hero CTAs), `course_branch_click` (2.4 / 2.5 / 5.1 decision-gate cards, labeled `from→to`), `course_glossary_click`, `course_pdf_download` (printable worksheets). Page-path funnel (landing → 1.1 → 1.4 → 2.x → 5.6) comes from standard GA4 path exploration. +- **Scope update vs the original kit:** the pilot now tests the WHOLE Module 1 core path (landing → 1.1 → 1.5), not just the two 2026-06 pilot lessons - update the participant brief URLs accordingly (welcome email: landing URL only; the course routes from there). +- **Remaining Paul actions before first invite:** Clarity project + param (above), cookie/consent posture decision, budget sign-off ($25 × 5 = $125), ~5 hours calendar across screener/brief/watching/synthesis. --- diff --git a/docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.19-premium-review-full-course-2026-07-12.md b/docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.19-premium-review-full-course-2026-07-12.md new file mode 100644 index 000000000..7f197381f --- /dev/null +++ b/docs/projects/2605-tech-for-non-technical-founders/40-49-review/40.19-premium-review-full-course-2026-07-12.md @@ -0,0 +1,52 @@ +# 40.19 · Premium Full-Course Review — 8 Dimensions × 61 Pages (2026-07-12) + +**Method**: hierarchical review swarm (6 reviewers + coordinator), each page scored on 8 dimensions - text content, voice, structure, engagement, visual UI/UX, typography, media, navigation - plus a "could Sam act on this tonight" practicality check. Inputs per page: markdown source + EVERY rendered scroll view (fresh 1280px captures, 331 slices) + the voice guide. Canon guards per segment (gate thresholds, list sizes, pace, deposit floor, Mia continuity). + +**Headline verdict: the course is at the premium bar.** 54 of 60 live pages scored PREMIUM outright; 6 scored GOOD with specific, surgical fixes (all applied same-day, see §3). Zero P1-severity content defects except one wrong-target link cluster. Notable segment strengths: Mia's number-chain verified contradiction-free across all 5 walkthroughs; canon (7+/4-6/<4 gate, 10 interviews, 30/50-name lists, $500 deposit floor, 6%+ Promising band) held everywhere checked; every page hands Sam a concrete executable artifact. + +## 1. Cross-segment findings (the patterns, not the instances) + +1. **Wrong-target links survive text validators** - three Friday-demo anchors pointed at a blog checklist instead of the course template (P1). The internal-link validator checks existence, not intent. +2. **Editorial scaffolding leaks into reader copy** - "lead magnet for post 4", "Authorship credit only - no service pitch", a callout literally titled "Module 3 AI critic/simulator block", and 5.6's "These render as expandable rows..." meta-narration. Class: notes-to-self shipped to Sam. +3. **Covers/diagrams asserting retired canon** - "WEEKS 4 to ship" badges (full-time pace) on 3 covers; "4-8 weeks free" vs "6-12 weeks" in one SVG card; "Modules 6.1-6.5" ghost in churn prose; "3-line" vs "30-line" CI gate (actual: ~20). Facts inside artwork keep escaping the ratchet. +4. **Count/label drift between adjacent elements** - "The 4 channels" H2 over a 5-row table; near-duplicate frontmatter titles on the two agency pages. +5. **Diagram legibility at natural size** - one LR mermaid squeezed to an unreadable band (friday-demo-rule), one >2×-viewport decision tree (pivot). The LR/TD choice and node count decide legibility. +6. **Price-tag voice rule erosion** - "(free)", "free tier" tags on sub-$100 tools crept back into 4 pages. + +## 2. Per-segment verdict summary + +| Segment (reviewer) | Premium | Good (fix applied) | Notes | +|---|---|---|---| +| 1-10 companions/2.x (prem-1) | 8 | 2 (channel-selection count, churn Module-6 ghost) | ai-token-bill mermaid off-theme | +| 11-20 M2/5.x/1.1 (prem-2) | 8 | 1 (operating-kit over-promise) | +dead slug alias added | +| 21-30 walkthroughs (prem-3) | 9 | 1 (friday-demo-rule LR mermaid) | Mia continuity clean | +| 31-40 mom-test/5.6/pivot (prem-4) | 8 | 2 (5.6 meta-narration, pivot tall mermaid) | canon checks all pass | +| 41-50 build/smoke (prem-5) | 7 | 3 (covers pace badge ×3-as-1, matrix SVG, slopsquatting 3/30) | | +| 51-60 + landing (prem-6) | 10 | 1 (three-questions links) | landing PREMIUM | + +## 3. Fixes applied (same session, branch course-p0-p1-sprints) + +P1: three-questions Friday-demo links repointed (3×). +P2: churn Module-6 ghost; channel-selection 4-vs-5 reconciled (EaM demoted to follow-up note); operating-kit intro honesty ("DPA live, five shipping"); 5.6 "expandable rows" sentence deleted; slopsquatting 20-line unification + "Your founder" POV; decision-matrix.svg single timeline; friday-demo-rule mermaid LR→TD; pivot trigger tree replaced with a 5-row decision TABLE (a compressed-mermaid attempt rendered as an illegible micro-strip - coordinator caught it on re-render; the table + existing bold-led prose carry all logic); 3 covers "WEEKS 4 to ship" → "4-10" + alt texts; agency title dedup; ai-token-bill mermaid house theme; weekly-dev-report footer scaffolding stripped; alias for deleted first-ten-customers-personal-network slug. +P3 (batched where zero-risk): grammar fix (three-questions), duplicated gate sentence (Ch 0), price-tag sweep (4 pages), engineering-org-chart closing line, "co flow" spell-out. + +**Deliberately NOT fixed** (recorded so future passes don't re-litigate): template pages' light footers (intentional pattern); outreach/outbound consecutive artifact callouts (they ARE the artifact); validation-tools price detail (comparison guide exemption); pivot nameless-founder density + footer consistency (P3, optional); 2.1/5.1 borderline slogany lines (trim risks blandness); glossary link absent on companions (strip is sequence-scoped by design); landing "6 artifacts" (shortcode-driven canon). + +## 4. Standing lessons + +- Facts baked into covers/SVG/mermaid need the visual gate's asset pass every sprint - the ratchet cannot see them (three separate incidents this week). +- Reviewer fan-out at 10 pages/agent with ALL slices read is the right granularity: each segment surfaced 1-3 real defects that page-sampling missed. +- The "known-intentional" list in reviewer prompts prevented ~a dozen false-positive "fixes" that would have blandified deliberate design. + +## 5. Reflection round (same day) + +A coordinator self-audit of the triage found five gaps; all fixed: +1. **Missed P2**: engineering-org-chart's staircase mermaid was never routed to a fixer. Diamonds→rects didn't cure the micro-text (staircase layouts scale the whole tree down), so it got the pivot treatment: 6-row decision table + flags rule. This makes it a pattern: **sequential-checklist mermaids convert to decision tables** (pivot, org-chart both). +2. **"Confirm intentional" left unconfirmed**: the "6.3 ·" title prem-3 flagged was an old-spine ghost - FOUR Going-Further pages carried Module-6 prefixes (6.2-6.5); all stripped (titles + og_titles). +3. **Single-instance finding was a pattern**: prem-6's "Module 3 AI critic/simulator block" internal label existed on three MORE pages (M2/M4/M5 variants); all four retitled Sam-facing. +4. **Cheap P3s wrongly parked**: Good/Bad worked-example callouts now render green/red via the blockquote hook (8+ pages benefit; also uncovered and fixed a cascade bug - the brand blockquote rule's border-left was overpainting all accent classes, TL;DR included); 2.2's redundant 4th head callout merged into the Progress line; 2.6's triple callout stack merged to two; Phase-3 "the AI writes it, you paste it" reassurance added to the stack walkthrough; continuation chapters (churn, pivot) got nav strips + glossary links via course_nav frontmatter; Keyworddit "Free tool" tag dropped. +5. **Process**: fixer geometry claims must ship with a coordinator re-render - fixer-c's "legible" pivot diagram was an illegible micro-strip; the raw-headless mobile check produces fake overflow on every page (caveat added to the gate doc). + +Still deliberately open (unchanged from §3): pivot nameless-founder density, borderline slogany lines, template-page light footers, operating-kit's five remaining templates (Sprint D). + +*Swarm: prem-1..6 (review), fixer-a/b/c + covers-pace (fixes), coordinator reflection round. Gates: validators 8/8, build green, test:critical after fix waves.* 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 9bb67335a..95b8f64dc 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 @@ -1,6 +1,6 @@ # Task Tracker - 2605 Tech for Non-Technical Founders -**Last Updated**: 2026-07-11 (PR #354 MERGED as 76acb4ff, deployed, production verified: branch-aware nav live on 2.4/2.5/5.1, M5 walkthrough exits to Going-further, worksheet/stack-walkthrough rewrites live, 10 new covers serving. Also addressed in the same PR: CodeRabbit's 15 review comments + the premium anchor-text class. Execution log: 40.17 §8.) +**Last Updated**: 2026-07-11 (Sprints A+B+C executed on branch course-p0-p1-sprints by a 6-agent swarm + coordinator, cold-eyes review verdict SHIP: GA4 funnel events + Clarity hook + pilot kit revived as 40.18 [Sprint A]; TL;DR accent hook, 5 walkthrough heroes + artifact-trail SVGs, 21 stale cover badges, de-stacks, 1.5 SVG rebuild, 5.7 mermaid LR [Sprint B]; PDF pipeline + 5 printable worksheets [Sprint C]. Paul actions before pilot invites: Clarity project + param, consent posture, budget, calendar - see 40.18 revival section. Earlier same day: PR #354 merged/deployed.) ## Active Phase: external validation pilot (real Sams, kit at 40-49-review/_DEFERRED_external-validation-pilot-kit.md) + funnel instrumentation → distribution prep diff --git a/docs/workflows/visual-scroll-gate.md b/docs/workflows/visual-scroll-gate.md index 496390b85..80d1b3aa6 100644 --- a/docs/workflows/visual-scroll-gate.md +++ b/docs/workflows/visual-scroll-gate.md @@ -21,6 +21,39 @@ 5. Check the console (errors) and network (404s). Dev-server-only artifacts (e.g. webmanifest CORS when browsing via 127.0.0.1 against a localhost baseURL) are excusable - name them explicitly in the report; everything else is a blocker. +### Asset-level SVG pass (MANDATORY - the in-page walk misses these) + +Sampling pages does NOT clear the SVGs: on 2026-07-11 a full asset sweep of all 43 course SVGs found 13 with internal defects (labels under cards, bars drawn over their own captions, right-edge clipping, stale chapter numbers) that months of page-level reviews had sailed past because each review sampled different pages. Rasterize EVERY SVG in scope and look at each one: + +```sh +find content/course/
-name "*.svg" | while read f; do + rsvg-convert -w 1400 "$f" -o "/tmp/svgsweep/$(echo "$f" | awk -F/ '{print $(NF-1)"__"$NF}').png" +done +# then Read every PNG - the defect classes: text crossing its container, +# elements drawn over other elements' text, edge clipping, arrows through +# labels, stale facts baked into the art. +``` + +### No-MCP fallback (headless Chrome) + +When the chrome-devtools MCP is unavailable, the walk still happens - full-height capture + slicing replaces live scrolling: + +```sh +CHROME='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' +"$CHROME" --headless --disable-gpu --user-data-dir=$(mktemp -d) --hide-scrollbars \ + --window-size=1280,16000 --virtual-time-budget=8000 \ + --screenshot=page.png "file://$PWD/_dest/public-dev//index.html" & P=$!; sleep 16; kill $P +magick page.png -trim +repage -crop 1280x2400 +repage slices/page--%02d.png +# Read every slice. Chrome does not exit on its own (site JS keeps timers +# alive) - the kill-after-sleep watchdog is required. +``` + +Caveat: raw headless `--window-size=390,...` does NOT emulate a mobile +device (no viewport-meta scaling) - body text clips at the right edge on +EVERY page, which reads as fake overflow. Mobile checks need the +chrome-devtools MCP resize (or DevTools device emulation); use raw +headless only for desktop-width captures. + ## Per-view checklist | Class | What to look for | Caught before | diff --git a/layouts/course/list.html b/layouts/course/list.html index ab2041730..69497713c 100644 --- a/layouts/course/list.html +++ b/layouts/course/list.html @@ -39,9 +39,9 @@

{{ .Title }}

{{ if .Params.hero_primary_url }} {{ end }} @@ -67,4 +67,5 @@

{{ .Title }}

+ {{ partial "blog/course-analytics.html" . }} {{ end }} diff --git a/themes/beaver/assets/css/single-post.css b/themes/beaver/assets/css/single-post.css index 3aa24ddf5..c1144a5bd 100644 --- a/themes/beaver/assets/css/single-post.css +++ b/themes/beaver/assets/css/single-post.css @@ -252,3 +252,122 @@ .single-content li > input[type="checkbox"] { margin-right: 0.5rem; } + +/* ========================================================================== + PRINT STYLES - course template companion pages (Sprint C) + Drives the printable PDFs generated by bin/generate-template-pdfs. + When you touch this block, regenerate the committed PDFs so the paper + version stays in sync with the on-page markdown (single source = the .md). + Goals: strip site chrome, black-on-white, keep tables/pre intact, never + break inside a table or blockquote, no giant cover image on page one. + ========================================================================== */ +@media print { + /* Hide site chrome: top header, primary nav, footer, course prev/next + strip, and any cookie/consent artifact that JS may inject at runtime. */ + header.top-panel, + nav.navigation, + .js-navigation, + .menu-opener, + .menu-close, + footer#footer, + .footer-component, + .course-prev-next, + .post-cover-figure, + .post-tags, + [class*="cookie"], + [id*="cookie"], + [class*="consent"], + [id*="consent"], + .cc-window, + .cc-banner { + display: none !important; + } + + /* Black-on-white, edge-to-edge content with sensible printer margins. */ + @page { margin: 18mm 16mm; } + + html, + body { + background: #fff !important; + color: #000 !important; + } + + main#main-content, + article.single-content, + .fl-rich-text, + .c-content-block__text { + max-width: 100% !important; + margin: 0 !important; + padding: 0 !important; + color: #000 !important; + } + + .single-content h1, + .single-content h2, + .single-content h3, + .single-content h4, + .single-content p, + .single-content li, + .single-content td, + .single-content th { + color: #000 !important; + } + + a { + color: #000 !important; + text-decoration: underline; + } + + /* Headings stay attached to the content that follows them. */ + h1, h2, h3, h4 { + break-after: avoid; + page-break-after: avoid; + } + + /* Keep tables, code blocks and blockquotes whole across page breaks. */ + table, + pre, + blockquote, + figure, + .mermaid { + break-inside: avoid; + page-break-inside: avoid; + } + + /* Wrap long code so it is not clipped at the right page edge. */ + pre, + code { + white-space: pre-wrap !important; + word-wrap: break-word; + overflow-wrap: break-word; + } + + /* Full-width tables with visible borders read better on paper. */ + table { + width: 100% !important; + border-collapse: collapse; + } + th, + td { + border: 1px solid #999 !important; + } + + /* The "Prefer paper? Download the PDF" line is self-referential on + paper - hide the paragraph that carries the download link. */ + p:has(a[data-course-event="pdf-download"]) { + display: none !important; + } + + /* Neutralize dark-theme callout backgrounds so ink stays readable. */ + blockquote { + background: #f7f7f7 !important; + color: #000 !important; + border-left: 3px solid #999 !important; + } + + img, + svg { + max-width: 100% !important; + height: auto; + } +} diff --git a/themes/beaver/assets/css/style.css b/themes/beaver/assets/css/style.css index 25e7d8dda..bfe00ad8f 100644 --- a/themes/beaver/assets/css/style.css +++ b/themes/beaver/assets/css/style.css @@ -76,6 +76,23 @@ position: relative; } +/* Semantic callout accents (render-blockquote hook adds the classes). + The base "brand-colored blockquote" rule below paints border-left + + background; these override only the colors: purple = TL;DR (lesson-head + hierarchy), green = Good worked example, red stays for Bad/default. */ +.blog blockquote.bq-tldr { + border-left-color: #a855f7; + background: rgba(168, 85, 247, 0.05); +} +.blog blockquote.bq-good { + border-left-color: #2e7d32; + background: rgba(46, 125, 50, 0.05); +} +.blog blockquote.bq-bad { + border-left-color: #cc342d; + background: rgba(204, 52, 45, 0.05); +} + .blog blockquote p { margin-top: 22px; } diff --git a/themes/beaver/layouts/_markup/render-blockquote.html b/themes/beaver/layouts/_markup/render-blockquote.html new file mode 100644 index 000000000..d9394fb29 --- /dev/null +++ b/themes/beaver/layouts/_markup/render-blockquote.html @@ -0,0 +1,28 @@ +{{- /* + Blockquote render hook. Reproduces goldmark's default output, adding + class "bq-tldr" when the quote opens with a bold "TL;DR" label so the + course lesson-head stack reads visually ranked (orientation card vs + TL;DR vs skip-note - 40.17 follow-up, Sprint B #4). + + Notes: .Text is the blockquote context field at Hugo 0.164 (.Content is + not available here; re-check on major Hugo bumps). This hook also + overrides GitHub-style alerts ("> [!NOTE]") - none exist in content + today; add an .AlertType branch if they're ever adopted. +*/ -}} +{{- if strings.HasPrefix .Text "

TL;DR" -}} +

+{{ .Text }} +
+{{- else if or (strings.HasPrefix .Text "

Good:") (strings.HasPrefix .Text "

Good") -}} +

+{{ .Text }} +
+{{- else if or (strings.HasPrefix .Text "

Bad:") (strings.HasPrefix .Text "

Bad") -}} +

+{{ .Text }} +
+{{- else -}} +
+{{ .Text }} +
+{{- end -}} diff --git a/themes/beaver/layouts/course/single.html b/themes/beaver/layouts/course/single.html index 12e85d769..8806d8193 100644 --- a/themes/beaver/layouts/course/single.html +++ b/themes/beaver/layouts/course/single.html @@ -117,6 +117,7 @@

{{ .Title }}

{{/* Course prev/next nav strip */}} {{ partial "blog/course-prev-next.html" . }} + {{ partial "blog/course-analytics.html" . }} {{/* Tags */}} {{ with .Params.tags }} diff --git a/themes/beaver/layouts/partials/blog/course-analytics.html b/themes/beaver/layouts/partials/blog/course-analytics.html new file mode 100644 index 000000000..bbf5f2196 --- /dev/null +++ b/themes/beaver/layouts/partials/blog/course-analytics.html @@ -0,0 +1,23 @@ +{{- /* + Course funnel instrumentation (Sprint A #1, 40.17 follow-up). + + Fires GA4 events for elements carrying data-course-event: + start-course / quickstart - landing hero CTAs + branch-click - decision-gate strip cards (2.4 / 2.5 / 5.1) + glossary-click - glossary utility link under the nav strip + pdf-download - printable worksheet links + + Page-level funnel steps (landing -> 1.1 -> 1.4 -> 2.x -> 5.6) come free + from GA4 page_view path analysis; these events cover the clicks a path + report can't attribute. No-ops when gtag is absent (dev builds, blockers). +*/ -}} + diff --git a/themes/beaver/layouts/partials/blog/course-prev-next.html b/themes/beaver/layouts/partials/blog/course-prev-next.html index db0c9c5a8..f448d07ef 100644 --- a/themes/beaver/layouts/partials/blog/course-prev-next.html +++ b/themes/beaver/layouts/partials/blog/course-prev-next.html @@ -80,7 +80,7 @@ {{- if $branches }}
{{- range $branches }} - + {{ .direction }} {{ .title }} @@ -96,6 +96,6 @@ {{- end }}
-

Tripping on a term? Five Tech Words to Stop Nodding At - the course glossary.

+

Tripping on a term? Five Tech Words to Stop Nodding At - the course glossary.

{{- end -}} diff --git a/themes/beaver/layouts/partials/page/analytics.html b/themes/beaver/layouts/partials/page/analytics.html index ae15c8037..f3ad3b7b5 100644 --- a/themes/beaver/layouts/partials/page/analytics.html +++ b/themes/beaver/layouts/partials/page/analytics.html @@ -1,3 +1,15 @@ +{{ if and (not hugo.IsServer) (site.Params.microsoftClarity) }} + + +{{ end }} {{ if and (not hugo.IsServer) (site.Params.googleAnalytics) }} diff --git a/themes/beaver/layouts/partials/page/footer-content.html b/themes/beaver/layouts/partials/page/footer-content.html index d746ce509..abbc0e3a4 100644 --- a/themes/beaver/layouts/partials/page/footer-content.html +++ b/themes/beaver/layouts/partials/page/footer-content.html @@ -53,6 +53,6 @@ {{ partial "svg" "theme/mini/github" }} -
{{ .Site.Params.copyright }} Privacy Policy
+
© {{ now.Year }} JetThoughts. All Rights Reserved. Privacy Policy
\ No newline at end of file