Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 24 additions & 14 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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/
95 changes: 95 additions & 0 deletions bin/generate-template-pdfs
Original file line number Diff line number Diff line change
@@ -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 <slug>.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}"
1 change: 0 additions & 1 deletion config/_default/hugo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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."

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -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? <a href="build-path-decision-worksheet.pdf" data-course-event="pdf-download">Download the PDF</a> - 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.
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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?
Expand Down Expand Up @@ -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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Update "click" to "sign-up" for metric consistency.

Line 232 changed the smoke-test metric from "click rate" to "sign-up rate," and lines 73-75 define the metric as "the share of visitors who left their email." Line 219 still says "0 of 30 click," which is inconsistent with the updated terminology.

💚 Proposed fix
-- Path 1 -> 0 of 30 click. Pivot the pitch or the problem.
+- Path 1 -> 0 of 30 sign-ups. Pivot the pitch or the problem.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Path 1 -> 0 of 30 click. Pivot the pitch or the problem.
- Path 1 -> 0 of 30 sign-ups. Pivot the pitch or the problem.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@content/course/tech-for-non-technical-founders-2026/build-path-decision-worksheet/index.md`
at line 219, Update the Path 1 metric text in the build-path decision worksheet
from “click” to “sign-up” so it matches the “sign-up rate” terminology and the
defined email-registration metric.

- 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.
Expand All @@ -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**

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
Loading
Loading