RISER NATION CORP

“IF YOU AREN'T BUILDING, YOU ARE DESTROYING”

COURSE 03 OF 12

High-Value Offer

Offer development and operating practice — source-linked curriculum

Working teaching for review; source and dependency gaps remain identified in each module.

Lesson 03.3

Lesson 03.4

Offer design and operating-system resources

Open each assigned source or its teaching section.

Lesson 03.3

Assigned audit and sales-letter resources

Open the supporting documents or go directly to their teaching sections. These resources follow the course and lesson assignments.

Lesson 03.3

Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections
Course 03 — offer design, launch and retention sources
Real-estate and creation platforms referenced in this course
Course 03 — sources for the added teaching sections
Course 03 — sources for the added teaching sections

Design and test an offer you can deliver profitably.

Start with: Bring the customer evidence, positioning, and message map.

Framework connection: Apply Hormozi’s value equation and obstacle-to-solution design, then use Brunson’s offer presentation and value-stack logic to explain the offer clearly.

What will you learn in High-Value Offer?

Design and test an offer you can deliver profitably.

What should you complete first?

Bring the customer evidence, positioning, and message map.

How do you use the lessons?

Follow the course outline in order. Open each lesson for its written teaching, implementation tasks, and assigned source links. Source access follows the original document permissions.

Curriculum draft for review. Lesson scripts are being checked against the assigned source material.

Course curriculum

  1. 03.1 Define the Outcome, Obstacles and Value Equation

    Desired result and measurable success criteria. Customer obstacles before, during, and after purchase. Perceived likelihood, speed, effort, sacrifice, specificity, and proof. Claims that can be supported versus claims that must be removed.

  2. 03.2 Design the Solution, Delivery and Value Stack

    Core deliverable, service level, format, access, support, milestones, and capacity. Bonuses tied to real obstacles rather than artificial padding. Scope, exclusions, customer responsibilities, and fulfillment economics.

  3. 03.3 Price, Proof, Risk Reversal and Validation

    Pricing logic, payment options, guarantee design, refund exposure, scarcity, and urgency. Evidence hierarchy: demonstrations, samples, case studies, testimonials, and buying behavior. Offer interviews, objection capture, presale, pilot, and minimum viable offer testing. Low-ticket hypothesis design: one hyperspecific problem, small complete product, fast first result, and an evidence-based price test.

  4. 03.4 PROOF GATE: Validated Offer Brief

    Audience, problem, promise, mechanism, delivery, proof, value stack, price, constraints, guarantee, and validation results. Fulfillment promise and capacity check. --

Lessons and implementation

03.1 Define the Outcome, Obstacles and Value Equation

Full lesson teaching and supporting documents

Open the lesson pages below in order. Each page retains the teaching and supporting sources assigned to this lesson.

  1. 03.1 Define the Outcome, Obstacles and Value Equation — Part 1 of 2
  2. 03.1 Define the Outcome, Obstacles and Value Equation — Part 2 of 2
Find a previously bookmarked teaching or source section
03.2 Design the Solution, Delivery and Value Stack
Platforms referenced in this lesson’s real-estate examples

Full lesson teaching and supporting documents

Open the lesson pages below in order. Each page retains the teaching and supporting sources assigned to this lesson.

  1. 03.2 Design the Solution, Delivery and Value Stack — Part 1 of 2
  2. 03.2 Design the Solution, Delivery and Value Stack — Part 2 of 2
Find a previously bookmarked teaching or source section

Open the original lesson section — lesson-03-2-d0558-member-169e2087e1ae29d3

Open the original lesson section — lesson-03-2-d0558-member-bca2d418e195ea0c

Open the original lesson section — lesson-03-2-d0558-member-0c2cd3929cfb2eb3

Open the original lesson section — lesson-03-2-d0558-member-458d65e0253c5252

Open the original lesson section — lesson-03-2-d0558-member-e89c8f9dfa93e567

Open the original lesson section — lesson-03-2-d0558-member-0ac9991e6f9874f1

Open the original lesson section — lesson-03-2-d0558-member-1fe7cc286903d132

Open the original lesson section — lesson-03-2-d0558-member-8cdbd7474e33d6c1

Open the original lesson section — lesson-03-2-d0558-member-b1d0512e75797bf8

Open the original lesson section — lesson-03-2-d0558-member-1fb221415cd0fa4f

Open the original lesson section — lesson-03-2-d0558-member-d3594e66a77fcb01

Open the original lesson section — lesson-03-2-d0558-member-064b02a6e66f027e

Open the original lesson section — lesson-03-2-d0558-member-fd7f58b3dd05b7d2

Open the original lesson section — lesson-03-2-d0558-member-fbc413a338a804f6

Open the original lesson section — lesson-03-2-d0558-member-e666227cdc44fb4c

Open the original lesson section — lesson-03-2-d0558-member-7e9c2bc20c424202

Open the original lesson section — lesson-03-2-d0558-member-b0b31441bea00c37

Open the original lesson section — lesson-03-2-d0558-member-11dc4097d90740bb

Open the original lesson section — lesson-03-2-d0558-member-b26787e34ce5670c

Open the original lesson section — lesson-03-2-d0558-member-27488191984921ce

Open the original lesson section — lesson-03-2-d0558-member-a428ad932fb1d2c7

Open the original lesson section — lesson-03-2-d0558-member-19ae6f5a80e94adf

Open the original lesson section — lesson-03-2-d0558-member-958ab2dfae90107b

Open the original lesson section — lesson-03-2-d0558-member-ddcd86e6edc58c50

Open the original lesson section — lesson-03-2-d0558-member-b1807931d9d4ae61

Open the original lesson section — lesson-03-2-d0558-member-de248b4756bd8463

Open the original lesson section — lesson-03-2-d0558-member-2f9d3675bae1cf25

Open the original lesson section — lesson-03-2-d0558-member-f7e92a1e617fc261

Open the original lesson section — lesson-03-2-d0558-member-acd7505e13d31a19

Open the original lesson section — lesson-03-2-d0558-member-84a0031cef541fd2

Open the original lesson section — lesson-03-2-d0558-member-88b096b2e9cc2e05

Open the original lesson section — lesson-03-2-d0558-member-28c7c935cf9adf5b

Open the original lesson section — lesson-03-2-d0558-member-df59a4bd137a4613

Open the original lesson section — lesson-03-2-d0558-member-74153b834d5e0fdb

Open the original lesson section — lesson-03-2-d0558-member-f35bec6ce4d4cdd7

Open the original lesson section — lesson-03-2-d0558-member-9b1dacf20b7b87c6

Open the original lesson section — lesson-03-2-d0558-member-c6360c825b23e575

Open the original lesson section — lesson-03-2-d0558-member-54b2520ac20f001b

Open the original lesson section — lesson-03-2-d0558-member-900ee9f4d3222061

Open the original lesson section — lesson-03-2-d0558-member-3bf384212db34f74

Open the original lesson section — lesson-03-2-d0558-member-31896dce41067fd8

Open the original lesson section — lesson-03-2-d0558-member-6a5ec3b3f28fef57

Open the original lesson section — lesson-03-2-d0558-member-f72bc9ce36969db9

Open the original lesson section — lesson-03-2-d0558-member-2514f6bba48d0c06

Open the original lesson section — lesson-03-2-d0558-member-2156166f7d634fec

Open the original lesson section — lesson-03-2-d0558-member-a7f1bd0aec4d44d7

Open the original lesson section — lesson-03-2-d0558-member-d6f172ff86b71a29

Open the original lesson section — lesson-03-2-d0558-member-d89fb629c21bb43a

Open the original lesson section — lesson-03-2-d0558-member-e1b5c8a24c77f14f

Open the original lesson section — lesson-03-2-d0558-member-05218576b9a47522

Open the original lesson section — lesson-03-2-d0558-member-367a6a5ddf6c8ae6

Open the original lesson section — lesson-03-2-d0558-member-7859f0d7c1f7a7da

Open the original lesson section — lesson-03-2-d0558-member-c74dc7a75eced989

Open the original lesson section — lesson-03-2-d0558-member-63369aac7b15e463

Open the original lesson section — lesson-03-2-d0558-member-0a653d330349460a

Open the original lesson section — lesson-03-2-d0558-member-146f3ba280b8e488

Open the original lesson section — lesson-03-2-d0558-member-6d09d118f34ad90c

Open the original lesson section — lesson-03-2-d0558-member-593ffdc898ef571e

Open the original lesson section — lesson-03-2-d0558-member-3681909b1c9a4194

Open the original lesson section — lesson-03-2-d0558-member-6774da6d732945b3

03.3 Price, Proof, Risk Reversal and Validation

Assigned documents and teaching

Supporting documents and teaching sections

Supporting documents and teaching sections

Full lesson teaching and supporting documents

Open the lesson pages below in order. Each page retains the teaching and supporting sources assigned to this lesson.

  1. 03.3 Price, Proof, Risk Reversal and Validation — Part 1 of 5
  2. 03.3 Price, Proof, Risk Reversal and Validation — Part 2 of 5
  3. 03.3 Price, Proof, Risk Reversal and Validation — Part 3 of 5
  4. 03.3 Price, Proof, Risk Reversal and Validation — Part 4 of 5
  5. 03.3 Price, Proof, Risk Reversal and Validation — Part 5 of 5
Find a previously bookmarked teaching or source section

Open the original lesson section — lesson-03-3-d0900-point-1

Open the original lesson section — lesson-03-3-d0900-point-2

Open the original lesson section — lesson-03-3-d0900-point-3

Open the original lesson section — lesson-03-3-d0900-point-4

Open the original lesson section — lesson-03-3-d0900-point-5

Open the original lesson section — lesson-03-3-d0900-point-6

Open the original lesson section — lesson-03-3-d0900-point-7

Open the original lesson section — lesson-03-3-d0900-point-8

Open the original lesson section — lesson-03-3-d0900-point-9

Open the original lesson section — lesson-03-3-d0900-point-10

Open the original lesson section — lesson-03-3-d0900-point-11

Open the original lesson section — lesson-03-3-d0900-point-12

Open the original lesson section — lesson-03-3-d0900-point-13

Open the original lesson section — lesson-03-3-d0900-point-14

Open the original lesson section — lesson-03-3-d0900-point-15

Open the original lesson section — lesson-03-3-d0900-point-16

Open the original lesson section — lesson-03-3-d0900-point-17

Open the original lesson section — lesson-03-3-d0900-point-18

Open the original lesson section — lesson-03-3-d0900-point-19

Open the original lesson section — lesson-03-3-d0900-point-20

Open the original lesson section — lesson-03-3-d0900-point-21

Open the original lesson section — lesson-03-3-d0900-point-22

Open the original lesson section — lesson-03-3-d0900-point-23

Open the original lesson section — lesson-03-3-d0900-point-24

Open the original lesson section — lesson-03-3-d0900-point-25

Open the original lesson section — lesson-03-3-d0900-point-26

Open the original lesson section — lesson-03-3-d0900-point-27

Open the original lesson section — lesson-03-3-d0901-point-1

Open the original lesson section — lesson-03-3-d0901-point-2

Open the original lesson section — lesson-03-3-d0901-point-3

Open the original lesson section — lesson-03-3-d0901-point-4

Open the original lesson section — lesson-03-3-d0901-point-5

Open the original lesson section — lesson-03-3-d0901-point-6

Open the original lesson section — lesson-03-3-d0901-point-7

Open the original lesson section — lesson-03-3-d0901-point-8

Open the original lesson section — lesson-03-3-d0901-point-9

Open the original lesson section — lesson-03-3-d0901-point-10

Open the original lesson section — lesson-03-3-d0901-point-11

Open the original lesson section — lesson-03-3-d0901-point-12

Open the original lesson section — lesson-03-3-d0901-point-13

Open the original lesson section — lesson-03-3-d0901-point-14

Open the original lesson section — lesson-03-3-d0901-point-15

Open the original lesson section — lesson-03-3-d0901-point-16

Open the original lesson section — lesson-03-3-d0901-point-17

Open the original lesson section — lesson-03-3-d0901-point-18

Open the original lesson section — lesson-03-3-d0901-point-19

Open the original lesson section — lesson-03-3-d0901-point-20

Open the original lesson section — lesson-03-3-d0901-point-21

Open the original lesson section — lesson-03-3-d0901-point-22

Open the original lesson section — lesson-03-3-d0901-point-23

Open the original lesson section — lesson-03-3-d0901-point-24

Open the original lesson section — lesson-03-3-d0901-point-25

Open the original lesson section — lesson-03-3-d0902-point-1

Open the original lesson section — lesson-03-3-d0902-point-2

Open the original lesson section — lesson-03-3-d0902-point-3

Open the original lesson section — lesson-03-3-d0902-point-4

Open the original lesson section — lesson-03-3-d0902-point-5

Open the original lesson section — lesson-03-3-d0902-point-6

Open the original lesson section — lesson-03-3-d0902-point-7

Open the original lesson section — lesson-03-3-d0902-point-8

Open the original lesson section — lesson-03-3-d0902-point-9

Open the original lesson section — lesson-03-3-d0902-point-10

Open the original lesson section — lesson-03-3-d0902-point-11

Open the original lesson section — lesson-03-3-d0902-point-12

Open the original lesson section — lesson-03-3-d0902-point-13

Open the original lesson section — lesson-03-3-d0902-point-14

Open the original lesson section — lesson-03-3-d0902-point-15

Open the original lesson section — lesson-03-3-d0902-point-16

Open the original lesson section — lesson-03-3-d0902-point-17

Open the original lesson section — lesson-03-3-d0902-point-18

Open the original lesson section — lesson-03-3-d0902-point-19

Open the original lesson section — lesson-03-3-d0902-point-20

Open the original lesson section — lesson-03-3-d0902-point-21

Open the original lesson section — lesson-03-3-d0902-point-22

Open the original lesson section — lesson-03-3-d0902-point-23

Open the original lesson section — lesson-03-3-d0902-point-24

Open the original lesson section — lesson-03-3-d0903-point-1

Open the original lesson section — lesson-03-3-d0903-point-2

Open the original lesson section — lesson-03-3-d0903-point-3

Open the original lesson section — lesson-03-3-d0903-point-4

Open the original lesson section — lesson-03-3-d0903-point-5

Open the original lesson section — lesson-03-3-d0903-point-6

Open the original lesson section — lesson-03-3-d0903-point-7

Open the original lesson section — lesson-03-3-d0903-point-8

Open the original lesson section — lesson-03-3-d0903-point-9

Open the original lesson section — lesson-03-3-d0903-point-10

Open the original lesson section — lesson-03-3-d0903-point-11

Open the original lesson section — lesson-03-3-d0903-point-12

Open the original lesson section — lesson-03-3-d0903-point-13

Open the original lesson section — lesson-03-3-d0903-point-14

Open the original lesson section — lesson-03-3-d0903-point-15

Open the original lesson section — lesson-03-3-d0903-point-16

Open the original lesson section — lesson-03-3-d0903-point-17

Open the original lesson section — lesson-03-3-d0903-point-18

Open the original lesson section — lesson-03-3-d0903-point-19

Open the original lesson section — lesson-03-3-d0903-point-20

Open the original lesson section — lesson-03-3-d0903-point-21

Open the original lesson section — lesson-03-3-d0903-point-22

Open the original lesson section — lesson-03-3-d0903-point-23

Open the original lesson section — lesson-03-3-d0903-point-24

Open the original lesson section — lesson-03-3-d0903-point-25

Open the original lesson section — lesson-03-3-d0903-point-26

Open the original lesson section — lesson-03-3-d0903-point-27

Open the original lesson section — lesson-03-3-d0903-point-28

Open the original lesson section — lesson-03-3-d0903-point-29

Open the original lesson section — lesson-03-3-d0903-point-30

Open the original lesson section — lesson-03-3-d0903-point-31

Open the original lesson section — lesson-03-3-d0903-point-32

Open the original lesson section — lesson-03-3-d0903-point-33

Open the original lesson section — lesson-03-3-d0903-point-34

Open the original lesson section — lesson-03-3-d0903-point-35

Open the original lesson section — lesson-03-3-d0903-point-36

Open the original lesson section — lesson-03-3-d0903-point-37

Open the original lesson section — lesson-03-3-d0903-point-38

Open the original lesson section — lesson-03-3-d0903-point-39

Open the original lesson section — lesson-03-3-d0903-point-40

Open the original lesson section — lesson-03-3-d0903-point-41

Open the original lesson section — lesson-03-3-d0903-point-42

Open the original lesson section — lesson-03-3-d0903-point-43

Open the original lesson section — lesson-03-3-d0903-point-44

Open the original lesson section — lesson-03-3-d0903-point-45

Open the original lesson section — lesson-03-3-d0903-point-46

Open the original lesson section — lesson-03-3-d0903-point-47

Open the original lesson section — lesson-03-3-d0903-image-1

Open the original lesson section — lesson-03-3-d0903-image-2

Open the original lesson section — lesson-03-3-d0903-image-3

Open the original lesson section — lesson-03-3-d0903-image-4

Open the original lesson section — lesson-03-3-d0903-image-5

Open the original lesson section — lesson-03-3-d0903-image-6

Open the original lesson section — lesson-03-3-d0903-image-7

Open the original lesson section — lesson-03-3-d0903-image-8

Open the original lesson section — lesson-03-3-d0903-image-9

Open the original lesson section — lesson-03-3-d0903-image-10

Open the original lesson section — lesson-03-3-d0903-image-11

Open the original lesson section — lesson-03-3-d0903-image-12

Open the original lesson section — lesson-03-3-d0903-image-13

Open the original lesson section — lesson-03-3-d0903-image-14

Open the original lesson section — lesson-03-3-d0903-image-15

Open the original lesson section — lesson-03-3-d0903-image-16

Open the original lesson section — lesson-03-3-d0903-image-17

Open the original lesson section — lesson-03-3-d0903-image-18

Open the original lesson section — lesson-03-3-d0903-image-19

Open the original lesson section — lesson-03-3-d0903-image-20

Open the original lesson section — lesson-03-3-d0903-image-21

Open the original lesson section — lesson-03-3-d0903-image-22

Open the original lesson section — lesson-03-3-d0903-image-23

Open the original lesson section — lesson-03-3-d0903-image-24

Open the original lesson section — lesson-03-3-d0903-image-25

Open the original lesson section — lesson-03-3-d0903-image-26

Open the original lesson section — lesson-03-3-d0903-image-27

Open the original lesson section — lesson-03-3-d0903-image-28

Open the original lesson section — lesson-03-3-d0903-image-29

Open the original lesson section — lesson-03-3-d0903-image-30

Open the original lesson section — lesson-03-3-d0904-point-1

Open the original lesson section — lesson-03-3-d0904-point-2

Open the original lesson section — lesson-03-3-d0904-point-3

Open the original lesson section — lesson-03-3-d0904-point-4

Open the original lesson section — lesson-03-3-d0904-point-5

Open the original lesson section — lesson-03-3-d0904-point-6

Open the original lesson section — lesson-03-3-d0904-point-7

Open the original lesson section — lesson-03-3-d0904-point-8

Open the original lesson section — lesson-03-3-d0904-point-9

Open the original lesson section — lesson-03-3-d0904-point-10

Open the original lesson section — lesson-03-3-d0904-point-11

Open the original lesson section — lesson-03-3-d0904-point-12

Open the original lesson section — lesson-03-3-d0904-point-13

Open the original lesson section — lesson-03-3-d0904-point-14

Open the original lesson section — lesson-03-3-d0904-point-15

Open the original lesson section — lesson-03-3-d0904-point-16

Open the original lesson section — lesson-03-3-d0904-point-17

Open the original lesson section — lesson-03-3-d0904-point-18

Open the original lesson section — lesson-03-3-d0904-point-19

Open the original lesson section — lesson-03-3-d0904-point-20

Open the original lesson section — lesson-03-3-d0904-point-21

Open the original lesson section — lesson-03-3-d0904-point-22

Open the original lesson section — lesson-03-3-d0904-point-23

Open the original lesson section — lesson-03-3-d0904-point-24

Open the original lesson section — lesson-03-3-d0904-point-25

Open the original lesson section — lesson-03-3-d0904-point-26

Open the original lesson section — lesson-03-3-d0904-point-27

Open the original lesson section — lesson-03-3-d0904-point-28

Open the original lesson section — lesson-03-3-d0904-point-29

Open the original lesson section — lesson-03-3-d0904-point-30

Open the original lesson section — lesson-03-3-d0904-point-31

Open the original lesson section — lesson-03-3-d0904-point-32

Open the original lesson section — lesson-03-3-d0904-point-33

Open the original lesson section — lesson-03-3-d0904-point-34

Open the original lesson section — lesson-03-3-d0904-point-35

Open the original lesson section — lesson-03-3-d0904-point-36

Open the original lesson section — lesson-03-3-d0904-point-37

Open the original lesson section — lesson-03-3-d0904-point-38

Open the original lesson section — lesson-03-3-d0904-point-39

Open the original lesson section — lesson-03-3-d0904-point-40

Open the original lesson section — lesson-03-3-d0904-point-41

Open the original lesson section — lesson-03-3-d0904-point-42

Open the original lesson section — lesson-03-3-d0904-point-43

Open the original lesson section — lesson-03-3-d0904-point-44

Open the original lesson section — lesson-03-3-d0904-point-45

Open the original lesson section — lesson-03-3-d0904-point-46

Open the original lesson section — lesson-03-3-d0904-point-47

Open the original lesson section — lesson-03-3-d0904-point-48

Open the original lesson section — lesson-03-3-d0904-point-49

Open the original lesson section — lesson-03-3-d0904-point-50

Open the original lesson section — lesson-03-3-d0904-point-51

Open the original lesson section — lesson-03-3-d0904-point-52

Open the original lesson section — lesson-03-3-d0904-point-53

Open the original lesson section — lesson-03-3-d0904-point-54

Open the original lesson section — lesson-03-3-d0904-point-55

Open the original lesson section — lesson-03-3-d0904-point-56

Open the original lesson section — lesson-03-3-d0904-point-57

Open the original lesson section — lesson-03-3-d0904-point-58

Open the original lesson section — lesson-03-3-d0904-point-59

Open the original lesson section — lesson-03-3-d0904-point-60

Open the original lesson section — lesson-03-3-d0904-point-61

Open the original lesson section — lesson-03-3-d0904-point-62

Open the original lesson section — lesson-03-3-d0904-point-63

Open the original lesson section — lesson-03-3-d0904-point-64

Open the original lesson section — lesson-03-3-d0904-point-65

Open the original lesson section — lesson-03-3-d0904-point-66

Open the original lesson section — lesson-03-3-d0904-point-67

Open the original lesson section — lesson-03-3-d0904-point-68

Open the original lesson section — lesson-03-3-d0904-point-69

Open the original lesson section — lesson-03-3-d0904-point-70

Open the original lesson section — lesson-03-3-d0904-point-71

Open the original lesson section — lesson-03-3-d0904-point-72

Open the original lesson section — lesson-03-3-d0904-point-73

Open the original lesson section — lesson-03-3-d0904-point-74

Open the original lesson section — lesson-03-3-d0904-point-75

Open the original lesson section — lesson-03-3-d0904-point-76

Open the original lesson section — lesson-03-3-d0904-point-77

Open the original lesson section — lesson-03-3-d0904-point-78

Open the original lesson section — lesson-03-3-d0904-point-79

Open the original lesson section — lesson-03-3-d0904-point-80

Open the original lesson section — lesson-03-3-d0904-point-81

Open the original lesson section — lesson-03-3-d0904-point-82

Open the original lesson section — lesson-03-3-d0904-point-83

Open the original lesson section — lesson-03-3-d0904-point-84

Open the original lesson section — lesson-03-3-d0904-point-85

Open the original lesson section — lesson-03-3-d0904-point-86

Open the original lesson section — lesson-03-3-d0904-point-87

Open the original lesson section — lesson-03-3-d0904-point-88

Open the original lesson section — lesson-03-3-d0904-point-89

Open the original lesson section — lesson-03-3-d0904-point-90

Open the original lesson section — lesson-03-3-d0904-point-91

Open the original lesson section — lesson-03-3-d0904-point-92

Open the original lesson section — lesson-03-3-d0904-point-93

Open the original lesson section — lesson-03-3-d0904-point-94

Open the original lesson section — lesson-03-3-d0904-point-95

Open the original lesson section — lesson-03-3-d0904-point-96

Open the original lesson section — lesson-03-3-d0904-point-97

Open the original lesson section — lesson-03-3-d0904-point-98

Open the original lesson section — lesson-03-3-d0904-point-99

Open the original lesson section — lesson-03-3-d0904-point-100

Open the original lesson section — lesson-03-3-d0904-point-101

Open the original lesson section — lesson-03-3-d0904-point-102

Open the original lesson section — lesson-03-3-d0904-point-103

Open the original lesson section — lesson-03-3-d0904-point-104

Open the original lesson section — lesson-03-3-d0904-point-105

Open the original lesson section — lesson-03-3-d0904-point-106

Open the original lesson section — lesson-03-3-d0904-point-107

Open the original lesson section — lesson-03-3-d0904-point-108

Open the original lesson section — lesson-03-3-d0904-point-109

Open the original lesson section — lesson-03-3-d0904-point-110

Open the original lesson section — lesson-03-3-d0904-image-1

Open the original lesson section — lesson-03-3-d0904-image-2

Open the original lesson section — lesson-03-3-d0904-image-3

Open the original lesson section — lesson-03-3-d0904-image-4

Open the original lesson section — lesson-03-3-d0904-image-5

Open the original lesson section — lesson-03-3-d0904-image-6

Open the original lesson section — lesson-03-3-d0904-image-7

Open the original lesson section — lesson-03-3-d0904-image-8

Open the original lesson section — lesson-03-3-d0904-image-9

Open the original lesson section — lesson-03-3-d0904-image-10

Open the original lesson section — lesson-03-3-d0904-image-11

Open the original lesson section — lesson-03-3-d0904-image-12

Open the original lesson section — lesson-03-3-d0904-image-13

Open the original lesson section — lesson-03-3-d0904-image-14

Open the original lesson section — lesson-03-3-d0904-image-15

Open the original lesson section — lesson-03-3-d0904-image-16

Open the original lesson section — lesson-03-3-d0904-image-17

Open the original lesson section — lesson-03-3-d0904-image-18

Open the original lesson section — lesson-03-3-d0904-image-19

Open the original lesson section — lesson-03-3-d0904-image-20

Open the original lesson section — lesson-03-3-d0904-image-21

Open the original lesson section — lesson-03-3-d0904-image-22

Open the original lesson section — lesson-03-3-d0904-image-23

Open the original lesson section — lesson-03-3-d0904-image-24

Open the original lesson section — lesson-03-3-d0904-image-25

Open the original lesson section — lesson-03-3-d0904-image-26

Open the original lesson section — lesson-03-3-d0904-image-27

Open the original lesson section — lesson-03-3-d0904-image-28

Open the original lesson section — lesson-03-3-d0904-image-29

Open the original lesson section — lesson-03-3-d0904-image-30

Open the original lesson section — lesson-03-3-d0904-image-31

Open the original lesson section — lesson-03-3-d0904-image-32

Open the original lesson section — lesson-03-3-d0904-image-33

Open the original lesson section — lesson-03-3-d0904-image-34

Open the original lesson section — lesson-03-3-d0904-image-35

Open the original lesson section — lesson-03-3-d0904-image-36

Open the original lesson section — lesson-03-3-d0904-image-37

Open the original lesson section — lesson-03-3-d0904-image-38

Open the original lesson section — lesson-03-3-d0904-image-39

Open the original lesson section — lesson-03-3-d0904-image-40

Open the original lesson section — lesson-03-3-d0904-image-41

Open the original lesson section — lesson-03-3-d0904-image-42

Open the original lesson section — lesson-03-3-d0904-image-43

Open the original lesson section — lesson-03-3-d0904-image-44

Open the original lesson section — lesson-03-3-d0904-image-45

Open the original lesson section — lesson-03-3-d0904-image-46

Open the original lesson section — lesson-03-3-d0904-image-47

Open the original lesson section — lesson-03-3-d0904-image-48

Open the original lesson section — lesson-03-3-d0904-image-49

Open the original lesson section — lesson-03-3-d0904-image-50

Open the original lesson section — lesson-03-3-d0904-image-51

Open the original lesson section — lesson-03-3-d0905-point-1

Open the original lesson section — lesson-03-3-d0905-point-2

Open the original lesson section — lesson-03-3-d0906-point-1

Open the original lesson section — lesson-03-3-d0906-point-2

Open the original lesson section — lesson-03-3-d0906-point-3

Open the original lesson section — lesson-03-3-d0906-point-4

Open the original lesson section — lesson-03-3-d0906-point-5

Open the original lesson section — lesson-03-3-d0906-point-6

Open the original lesson section — lesson-03-3-d0906-point-7

Open the original lesson section — lesson-03-3-d0906-point-8

Open the original lesson section — lesson-03-3-d0906-point-9

Open the original lesson section — lesson-03-3-d0906-point-10

Open the original lesson section — lesson-03-3-d0906-point-11

Open the original lesson section — lesson-03-3-d0906-point-12

Open the original lesson section — lesson-03-3-d0906-point-13

Open the original lesson section — lesson-03-3-d0906-point-14

Open the original lesson section — lesson-03-3-d0906-point-15

Open the original lesson section — lesson-03-3-d0906-point-16

Open the original lesson section — lesson-03-3-d0906-point-17

Open the original lesson section — lesson-03-3-d0906-point-18

Open the original lesson section — lesson-03-3-d0906-point-19

Open the original lesson section — lesson-03-3-d0906-point-20

Open the original lesson section — lesson-03-3-d0906-point-21

Open the original lesson section — lesson-03-3-d0906-point-22

Open the original lesson section — lesson-03-3-d0906-point-23

Open the original lesson section — lesson-03-3-d0906-point-24

Open the original lesson section — lesson-03-3-d0906-point-25

Open the original lesson section — lesson-03-3-d0906-point-26

Open the original lesson section — lesson-03-3-d0906-point-27

Open the original lesson section — lesson-03-3-d0906-point-28

Open the original lesson section — lesson-03-3-d0906-point-29

Open the original lesson section — lesson-03-3-d0906-point-30

Open the original lesson section — lesson-03-3-d0906-point-31

Open the original lesson section — lesson-03-3-d0906-point-32

Open the original lesson section — lesson-03-3-d0906-point-33

Open the original lesson section — lesson-03-3-d0906-point-34

Open the original lesson section — lesson-03-3-d0906-point-35

Open the original lesson section — lesson-03-3-d0906-point-36

Open the original lesson section — lesson-03-3-d0906-point-37

Open the original lesson section — lesson-03-3-d0906-point-38

Open the original lesson section — lesson-03-3-d0906-point-39

Open the original lesson section — lesson-03-3-d0906-point-40

Open the original lesson section — lesson-03-3-d0906-point-41

Open the original lesson section — lesson-03-3-d0906-point-42

Open the original lesson section — lesson-03-3-d0906-point-43

Open the original lesson section — lesson-03-3-d0906-point-44

Open the original lesson section — lesson-03-3-d0906-point-45

Open the original lesson section — lesson-03-3-d0906-point-46

Open the original lesson section — lesson-03-3-d0906-point-47

Open the original lesson section — lesson-03-3-d0906-point-48

Open the original lesson section — lesson-03-3-d0906-point-49

Open the original lesson section — lesson-03-3-d0906-point-50

Open the original lesson section — lesson-03-3-d0906-point-51

Open the original lesson section — lesson-03-3-d0906-point-52

Open the original lesson section — lesson-03-3-d0906-point-53

Open the original lesson section — lesson-03-3-d0906-point-54

Open the original lesson section — lesson-03-3-d0906-point-55

Open the original lesson section — lesson-03-3-d0906-point-56

Open the original lesson section — lesson-03-3-d0906-point-57

Open the original lesson section — lesson-03-3-d0906-point-58

Open the original lesson section — lesson-03-3-d0906-point-59

Open the original lesson section — lesson-03-3-d0906-point-60

Open the original lesson section — lesson-03-3-d0906-point-61

Open the original lesson section — lesson-03-3-d0906-point-62

Open the original lesson section — lesson-03-3-d0906-point-63

Open the original lesson section — lesson-03-3-d0906-point-64

Open the original lesson section — lesson-03-3-d0906-point-65

Open the original lesson section — lesson-03-3-d0906-point-66

Open the original lesson section — lesson-03-3-d0906-point-67

Open the original lesson section — lesson-03-3-d0906-point-68

Open the original lesson section — lesson-03-3-d0906-point-69

Open the original lesson section — lesson-03-3-d0906-point-70

Open the original lesson section — lesson-03-3-d0906-point-71

Open the original lesson section — lesson-03-3-d0906-point-72

Open the original lesson section — lesson-03-3-d0906-point-73

Open the original lesson section — lesson-03-3-d0906-point-74

Open the original lesson section — lesson-03-3-d0906-point-75

Open the original lesson section — lesson-03-3-d0906-point-76

Open the original lesson section — lesson-03-3-d0906-point-77

Open the original lesson section — lesson-03-3-d0906-point-78

Open the original lesson section — lesson-03-3-d0906-point-79

Open the original lesson section — lesson-03-3-d0906-point-80

Open the original lesson section — lesson-03-3-d0906-point-81

Open the original lesson section — lesson-03-3-d0906-point-82

Open the original lesson section — lesson-03-3-d0906-point-83

Open the original lesson section — lesson-03-3-d0906-point-84

Open the original lesson section — lesson-03-3-d0906-point-85

Open the original lesson section — lesson-03-3-d0906-point-86

Open the original lesson section — lesson-03-3-d0906-point-87

Open the original lesson section — lesson-03-3-d0906-point-88

Open the original lesson section — lesson-03-3-d0906-point-89

Open the original lesson section — lesson-03-3-d0906-point-90

Open the original lesson section — lesson-03-3-d0906-point-91

Open the original lesson section — lesson-03-3-d0906-point-92

Open the original lesson section — lesson-03-3-d0906-point-93

Open the original lesson section — lesson-03-3-d0906-point-94

Open the original lesson section — lesson-03-3-d0906-point-95

Open the original lesson section — lesson-03-3-d0906-point-96

Open the original lesson section — lesson-03-3-d0906-point-97

Open the original lesson section — lesson-03-3-d0906-point-98

Open the original lesson section — lesson-03-3-d0906-point-99

Open the original lesson section — lesson-03-3-d0906-point-100

Open the original lesson section — lesson-03-3-d0906-point-101

Open the original lesson section — lesson-03-3-d0906-point-102

Open the original lesson section — lesson-03-3-d0906-point-103

Open the original lesson section — lesson-03-3-d0906-point-104

Open the original lesson section — lesson-03-3-d0906-point-105

Open the original lesson section — lesson-03-3-d0906-point-106

Open the original lesson section — lesson-03-3-d0906-point-107

Open the original lesson section — lesson-03-3-d0906-point-108

Open the original lesson section — lesson-03-3-d0906-point-109

Open the original lesson section — lesson-03-3-d0906-point-110

Open the original lesson section — lesson-03-3-d0906-point-111

Open the original lesson section — lesson-03-3-d0906-point-112

Open the original lesson section — lesson-03-3-d0906-point-113

Open the original lesson section — lesson-03-3-d0907-point-1

Open the original lesson section — lesson-03-3-d0907-point-2

Open the original lesson section — lesson-03-3-d0907-point-3

Open the original lesson section — lesson-03-3-d0907-point-4

Open the original lesson section — lesson-03-3-d0907-point-5

Open the original lesson section — lesson-03-3-d0907-point-6

Open the original lesson section — lesson-03-3-d0907-point-7

Open the original lesson section — lesson-03-3-d0907-point-8

Open the original lesson section — lesson-03-3-d0907-point-9

Open the original lesson section — lesson-03-3-d0907-point-10

Open the original lesson section — lesson-03-3-d0907-point-11

Open the original lesson section — lesson-03-3-d0907-point-12

Open the original lesson section — lesson-03-3-d0907-point-13

Open the original lesson section — lesson-03-3-d0907-point-14

Open the original lesson section — lesson-03-3-d0907-point-15

Open the original lesson section — lesson-03-3-d0907-point-16

Open the original lesson section — lesson-03-3-d0907-point-17

Open the original lesson section — lesson-03-3-d0907-point-18

Open the original lesson section — lesson-03-3-d0907-point-19

Open the original lesson section — lesson-03-3-d0907-point-20

Open the original lesson section — lesson-03-3-d0907-point-21

Open the original lesson section — lesson-03-3-d0907-point-22

Open the original lesson section — lesson-03-3-d0907-point-23

Open the original lesson section — lesson-03-3-d0907-point-24

Open the original lesson section — lesson-03-3-d0907-point-25

Open the original lesson section — lesson-03-3-d0907-point-26

Open the original lesson section — lesson-03-3-d0907-point-27

Open the original lesson section — lesson-03-3-d0907-point-28

Open the original lesson section — lesson-03-3-d0907-point-29

Open the original lesson section — lesson-03-3-d0907-point-30

Open the original lesson section — lesson-03-3-d0907-point-31

Open the original lesson section — lesson-03-3-d0907-point-32

Open the original lesson section — lesson-03-3-d0907-point-33

Open the original lesson section — lesson-03-3-d0907-point-34

Open the original lesson section — lesson-03-3-d0907-point-35

Open the original lesson section — lesson-03-3-d0907-point-36

Open the original lesson section — lesson-03-3-d0907-point-37

Open the original lesson section — lesson-03-3-d0907-point-38

Open the original lesson section — lesson-03-3-d0907-point-39

Open the original lesson section — lesson-03-3-d0907-point-40

Open the original lesson section — lesson-03-3-d0907-point-41

Open the original lesson section — lesson-03-3-d0907-point-42

Open the original lesson section — lesson-03-3-d0907-point-43

Open the original lesson section — lesson-03-3-d0907-point-44

Open the original lesson section — lesson-03-3-d0907-point-45

Open the original lesson section — lesson-03-3-d0907-point-46

Open the original lesson section — lesson-03-3-d0907-point-47

Open the original lesson section — lesson-03-3-d0907-point-48

Open the original lesson section — lesson-03-3-d0907-point-49

Open the original lesson section — lesson-03-3-d0907-point-50

Open the original lesson section — lesson-03-3-d0907-point-51

Open the original lesson section — lesson-03-3-d0907-point-52

Open the original lesson section — lesson-03-3-d0907-point-53

Open the original lesson section — lesson-03-3-d0907-point-54

Open the original lesson section — lesson-03-3-d0907-point-55

Open the original lesson section — lesson-03-3-d0907-point-56

Open the original lesson section — lesson-03-3-d0907-point-57

Open the original lesson section — lesson-03-3-d0907-point-58

Open the original lesson section — lesson-03-3-d0907-point-59

Open the original lesson section — lesson-03-3-d0907-point-60

Open the original lesson section — lesson-03-3-d0907-point-61

Open the original lesson section — lesson-03-3-d0907-point-62

Open the original lesson section — lesson-03-3-d0907-point-63

Open the original lesson section — lesson-03-3-d0907-point-64

Open the original lesson section — lesson-03-3-d0907-point-65

Open the original lesson section — lesson-03-3-d0907-point-66

Open the original lesson section — lesson-03-3-d0907-point-67

Open the original lesson section — lesson-03-3-d0907-point-68

Open the original lesson section — lesson-03-3-d0907-point-69

Open the original lesson section — lesson-03-3-d0907-point-70

Open the original lesson section — lesson-03-3-d0907-point-71

Open the original lesson section — lesson-03-3-d0907-point-72

Open the original lesson section — lesson-03-3-d0907-point-73

Open the original lesson section — lesson-03-3-d0907-point-74

Open the original lesson section — lesson-03-3-d0907-point-75

Open the original lesson section — lesson-03-3-d0907-point-76

Open the original lesson section — lesson-03-3-d0907-point-77

Open the original lesson section — lesson-03-3-d0907-point-78

Open the original lesson section — lesson-03-3-d0907-point-79

Open the original lesson section — lesson-03-3-d0907-point-80

Open the original lesson section — lesson-03-3-d0907-point-81

Open the original lesson section — lesson-03-3-d0907-point-82

Open the original lesson section — lesson-03-3-d0907-point-83

Open the original lesson section — lesson-03-3-d0907-point-84

Open the original lesson section — lesson-03-3-d0907-point-85

Open the original lesson section — lesson-03-3-d0907-point-86

Open the original lesson section — lesson-03-3-d0907-point-87

Open the original lesson section — lesson-03-3-d0907-point-88

Open the original lesson section — lesson-03-3-d0907-point-89

Open the original lesson section — lesson-03-3-d0907-point-90

Open the original lesson section — lesson-03-3-d0907-point-91

Open the original lesson section — lesson-03-3-d0907-point-92

Open the original lesson section — lesson-03-3-d0907-point-93

Open the original lesson section — lesson-03-3-d0907-point-94

Open the original lesson section — lesson-03-3-d0907-point-95

Open the original lesson section — lesson-03-3-d0907-point-96

Open the original lesson section — lesson-03-3-d0907-point-97

Open the original lesson section — lesson-03-3-d0907-point-98

Open the original lesson section — lesson-03-3-d0907-point-99

Open the original lesson section — lesson-03-3-d0907-point-100

Open the original lesson section — lesson-03-3-d0907-point-101

Open the original lesson section — lesson-03-3-d0907-point-102

Open the original lesson section — lesson-03-3-d0907-point-103

Open the original lesson section — lesson-03-3-d0907-point-104

Open the original lesson section — lesson-03-3-d0907-point-105

Open the original lesson section — lesson-03-3-d0907-point-106

Open the original lesson section — lesson-03-3-d0907-point-107

Open the original lesson section — lesson-03-3-d0907-point-108

Open the original lesson section — lesson-03-3-d0907-point-109

Open the original lesson section — lesson-03-3-d0907-point-110

Open the original lesson section — lesson-03-3-d0907-point-111

Open the original lesson section — lesson-03-3-d0907-point-112

Open the original lesson section — lesson-03-3-d0907-point-113

Open the original lesson section — lesson-03-3-d0908-point-1

Open the original lesson section — lesson-03-3-d0908-point-2

Open the original lesson section — lesson-03-3-d0908-point-3

Open the original lesson section — lesson-03-3-d0908-point-4

Open the original lesson section — lesson-03-3-d0908-point-5

Open the original lesson section — lesson-03-3-d0908-point-6

Open the original lesson section — lesson-03-3-d0908-point-7

Open the original lesson section — lesson-03-3-d0908-point-8

Open the original lesson section — lesson-03-3-d0908-point-9

Open the original lesson section — lesson-03-3-d0908-point-10

Open the original lesson section — lesson-03-3-d0908-point-11

Open the original lesson section — lesson-03-3-d0908-point-12

Open the original lesson section — lesson-03-3-d0908-point-13

Open the original lesson section — lesson-03-3-d0908-point-14

Open the original lesson section — lesson-03-3-d0908-point-15

Open the original lesson section — lesson-03-3-d0908-point-16

Open the original lesson section — lesson-03-3-d0908-point-17

Open the original lesson section — lesson-03-3-d0908-point-18

Open the original lesson section — lesson-03-3-d0908-point-19

Open the original lesson section — lesson-03-3-d0908-point-20

Open the original lesson section — lesson-03-3-d0908-point-21

Open the original lesson section — lesson-03-3-d0908-point-22

Open the original lesson section — lesson-03-3-d0908-point-23

Open the original lesson section — lesson-03-3-d0908-point-24

Open the original lesson section — lesson-03-3-d0908-point-25

Open the original lesson section — lesson-03-3-d0908-point-26

Open the original lesson section — lesson-03-3-d0908-point-27

Open the original lesson section — lesson-03-3-d0908-point-28

Open the original lesson section — lesson-03-3-d0908-point-29

Open the original lesson section — lesson-03-3-d0908-point-30

Open the original lesson section — lesson-03-3-d0908-point-31

Open the original lesson section — lesson-03-3-d0908-point-32

Open the original lesson section — lesson-03-3-d0908-point-33

Open the original lesson section — lesson-03-3-d0908-point-34

Open the original lesson section — lesson-03-3-d0908-point-35

Open the original lesson section — lesson-03-3-d0908-point-36

Open the original lesson section — lesson-03-3-d0908-point-37

Open the original lesson section — lesson-03-3-d0908-point-38

Open the original lesson section — lesson-03-3-d0908-point-39

Open the original lesson section — lesson-03-3-d0908-point-40

Open the original lesson section — lesson-03-3-d0908-point-41

Open the original lesson section — lesson-03-3-d0908-point-42

Open the original lesson section — lesson-03-3-d0908-point-43

Open the original lesson section — lesson-03-3-d0908-point-44

Open the original lesson section — lesson-03-3-d0908-point-45

Open the original lesson section — lesson-03-3-d0908-point-46

Open the original lesson section — lesson-03-3-d0908-point-47

Open the original lesson section — lesson-03-3-d0908-point-48

Open the original lesson section — lesson-03-3-d0908-point-49

Open the original lesson section — lesson-03-3-d0908-point-50

Open the original lesson section — lesson-03-3-d0908-point-51

Open the original lesson section — lesson-03-3-d0908-point-52

Open the original lesson section — lesson-03-3-d0908-point-53

Open the original lesson section — lesson-03-3-d0908-point-54

Open the original lesson section — lesson-03-3-d0908-point-55

Open the original lesson section — lesson-03-3-d0908-point-56

Open the original lesson section — lesson-03-3-d0908-point-57

Open the original lesson section — lesson-03-3-d0908-point-58

Open the original lesson section — lesson-03-3-d0908-point-59

Open the original lesson section — lesson-03-3-d0908-point-60

Open the original lesson section — lesson-03-3-d0908-point-61

Open the original lesson section — lesson-03-3-d0908-point-62

Open the original lesson section — lesson-03-3-d0908-point-63

Open the original lesson section — lesson-03-3-d0908-point-64

Open the original lesson section — lesson-03-3-d0908-point-65

Open the original lesson section — lesson-03-3-d0908-point-66

Open the original lesson section — lesson-03-3-d0908-point-67

Open the original lesson section — lesson-03-3-d0908-point-68

Open the original lesson section — lesson-03-3-d0908-point-69

Open the original lesson section — lesson-03-3-d0908-point-70

Open the original lesson section — lesson-03-3-d0908-point-71

Open the original lesson section — lesson-03-3-d0908-point-72

Open the original lesson section — lesson-03-3-d0908-point-73

Open the original lesson section — lesson-03-3-d0908-point-74

Open the original lesson section — lesson-03-3-d0908-point-75

Open the original lesson section — lesson-03-3-d0908-point-76

Open the original lesson section — lesson-03-3-d0908-point-77

Open the original lesson section — lesson-03-3-d0908-point-78

Open the original lesson section — lesson-03-3-d0908-point-79

Open the original lesson section — lesson-03-3-d0908-point-80

Open the original lesson section — lesson-03-3-d0908-point-81

Open the original lesson section — lesson-03-3-d0908-point-82

Open the original lesson section — lesson-03-3-d0908-point-83

Open the original lesson section — lesson-03-3-d0908-point-84

Open the original lesson section — lesson-03-3-d0908-point-85

Open the original lesson section — lesson-03-3-d0908-point-86

Open the original lesson section — lesson-03-3-d0908-point-87

Open the original lesson section — lesson-03-3-d0908-point-88

Open the original lesson section — lesson-03-3-d0908-point-89

Open the original lesson section — lesson-03-3-d0908-point-90

Open the original lesson section — lesson-03-3-d0908-point-91

Open the original lesson section — lesson-03-3-d0908-point-92

Open the original lesson section — lesson-03-3-d0908-point-93

Open the original lesson section — lesson-03-3-d0908-point-94

Open the original lesson section — lesson-03-3-d0908-point-95

Open the original lesson section — lesson-03-3-d0908-point-96

Open the original lesson section — lesson-03-3-d0908-point-97

Open the original lesson section — lesson-03-3-d0908-point-98

Open the original lesson section — lesson-03-3-d0908-point-99

Open the original lesson section — lesson-03-3-d0908-point-100

Open the original lesson section — lesson-03-3-d0908-point-101

Open the original lesson section — lesson-03-3-d0908-point-102

Open the original lesson section — lesson-03-3-d0908-point-103

Open the original lesson section — lesson-03-3-d0908-point-104

Open the original lesson section — lesson-03-3-d0908-point-105

Open the original lesson section — lesson-03-3-d0908-point-106

Open the original lesson section — lesson-03-3-d0908-point-107

Open the original lesson section — lesson-03-3-d0908-point-108

Open the original lesson section — lesson-03-3-d0908-point-109

Open the original lesson section — lesson-03-3-d0908-point-110

Open the original lesson section — lesson-03-3-d0908-point-111

Open the original lesson section — lesson-03-3-d0908-point-112

Open the original lesson section — lesson-03-3-d0908-point-113

Open the original lesson section — lesson-03-3-d0908-point-114

Open the original lesson section — lesson-03-3-d0908-point-115

Open the original lesson section — lesson-03-3-d0908-point-116

Open the original lesson section — lesson-03-3-d0908-point-117

Open the original lesson section — lesson-03-3-d0908-point-118

Open the original lesson section — lesson-03-3-d0908-point-119

Open the original lesson section — lesson-03-3-d0908-point-120

Open the original lesson section — lesson-03-3-d0908-point-121

Open the original lesson section — lesson-03-3-d0908-point-122

Open the original lesson section — lesson-03-3-d0909-point-1

Open the original lesson section — lesson-03-3-d0909-point-2

Open the original lesson section — lesson-03-3-d0909-point-3

Open the original lesson section — lesson-03-3-d0909-point-4

Open the original lesson section — lesson-03-3-d0909-point-5

Open the original lesson section — lesson-03-3-d0909-point-6

Open the original lesson section — lesson-03-3-d0909-point-7

Open the original lesson section — lesson-03-3-d0909-point-8

Open the original lesson section — lesson-03-3-d0909-point-9

Open the original lesson section — lesson-03-3-d0909-point-10

Open the original lesson section — lesson-03-3-d0909-point-11

Open the original lesson section — lesson-03-3-d0909-point-12

Open the original lesson section — lesson-03-3-d0909-point-13

Open the original lesson section — lesson-03-3-d0909-point-14

Open the original lesson section — lesson-03-3-d0909-point-15

Open the original lesson section — lesson-03-3-d0909-point-16

Open the original lesson section — lesson-03-3-d0909-point-17

Open the original lesson section — lesson-03-3-d0909-point-18

Open the original lesson section — lesson-03-3-d0909-point-19

Open the original lesson section — lesson-03-3-d0909-point-20

Open the original lesson section — lesson-03-3-d0909-point-21

Open the original lesson section — lesson-03-3-d0909-point-22

Open the original lesson section — lesson-03-3-d0909-point-23

Open the original lesson section — lesson-03-3-d0909-point-24

Open the original lesson section — lesson-03-3-d0909-point-25

Open the original lesson section — lesson-03-3-d0909-point-26

Open the original lesson section — lesson-03-3-d0909-point-27

Open the original lesson section — lesson-03-3-d0909-point-28

Open the original lesson section — lesson-03-3-d0909-point-29

Open the original lesson section — lesson-03-3-d0909-point-30

Open the original lesson section — lesson-03-3-d0909-point-31

Open the original lesson section — lesson-03-3-d0909-point-32

Open the original lesson section — lesson-03-3-d0909-point-33

Open the original lesson section — lesson-03-3-d0909-point-34

Open the original lesson section — lesson-03-3-d0909-point-35

Open the original lesson section — lesson-03-3-d0909-point-36

Open the original lesson section — lesson-03-3-d0909-point-37

Open the original lesson section — lesson-03-3-d0909-point-38

Open the original lesson section — lesson-03-3-d0909-point-39

Open the original lesson section — lesson-03-3-d0909-point-40

Open the original lesson section — lesson-03-3-d0909-point-41

Open the original lesson section — lesson-03-3-d0909-point-42

Open the original lesson section — lesson-03-3-d0909-point-43

Open the original lesson section — lesson-03-3-d0909-point-44

Open the original lesson section — lesson-03-3-d0909-point-45

Open the original lesson section — lesson-03-3-d0909-point-46

Open the original lesson section — lesson-03-3-d0909-point-47

Open the original lesson section — lesson-03-3-d0909-point-48

Open the original lesson section — lesson-03-3-d0909-point-49

Open the original lesson section — lesson-03-3-d0909-point-50

Open the original lesson section — lesson-03-3-d0909-point-51

Open the original lesson section — lesson-03-3-d0909-point-52

Open the original lesson section — lesson-03-3-d0909-point-53

Open the original lesson section — lesson-03-3-d0909-point-54

Open the original lesson section — lesson-03-3-d0909-point-55

Open the original lesson section — lesson-03-3-d0909-point-56

Open the original lesson section — lesson-03-3-d0909-point-57

Open the original lesson section — lesson-03-3-d0909-point-58

Open the original lesson section — lesson-03-3-d0909-point-59

Open the original lesson section — lesson-03-3-d0909-point-60

Open the original lesson section — lesson-03-3-d0909-point-61

Open the original lesson section — lesson-03-3-d0909-point-62

Open the original lesson section — lesson-03-3-d0909-point-63

Open the original lesson section — lesson-03-3-d0909-point-64

Open the original lesson section — lesson-03-3-d0909-point-65

Open the original lesson section — lesson-03-3-d0909-point-66

Open the original lesson section — lesson-03-3-d0909-point-67

Open the original lesson section — lesson-03-3-d0909-point-68

Open the original lesson section — lesson-03-3-d0909-point-69

Open the original lesson section — lesson-03-3-d0909-point-70

Open the original lesson section — lesson-03-3-d0909-point-71

Open the original lesson section — lesson-03-3-d0909-point-72

Open the original lesson section — lesson-03-3-d0909-point-73

Open the original lesson section — lesson-03-3-d0909-point-74

Open the original lesson section — lesson-03-3-d0909-point-75

Open the original lesson section — lesson-03-3-d0909-point-76

Open the original lesson section — lesson-03-3-d0909-point-77

Open the original lesson section — lesson-03-3-d0909-point-78

Open the original lesson section — lesson-03-3-d0909-point-79

Open the original lesson section — lesson-03-3-d0909-point-80

Open the original lesson section — lesson-03-3-d0909-point-81

Open the original lesson section — lesson-03-3-d0909-point-82

Open the original lesson section — lesson-03-3-d0909-point-83

Open the original lesson section — lesson-03-3-d0909-point-84

Open the original lesson section — lesson-03-3-d0909-point-85

Open the original lesson section — lesson-03-3-d0909-point-86

Open the original lesson section — lesson-03-3-d0909-point-87

Open the original lesson section — lesson-03-3-d0909-point-88

Open the original lesson section — lesson-03-3-d0909-point-89

Open the original lesson section — lesson-03-3-d0909-point-90

Open the original lesson section — lesson-03-3-d0909-point-91

Open the original lesson section — lesson-03-3-d0909-point-92

Open the original lesson section — lesson-03-3-d0909-point-93

Open the original lesson section — lesson-03-3-d0909-point-94

Open the original lesson section — lesson-03-3-d0909-point-95

Open the original lesson section — lesson-03-3-d0909-point-96

Open the original lesson section — lesson-03-3-d0909-point-97

Open the original lesson section — lesson-03-3-d0909-point-98

Open the original lesson section — lesson-03-3-d0909-point-99

Open the original lesson section — lesson-03-3-d0909-point-100

Open the original lesson section — lesson-03-3-d0909-point-101

Open the original lesson section — lesson-03-3-d0909-point-102

Open the original lesson section — lesson-03-3-d0909-point-103

Open the original lesson section — lesson-03-3-d0909-point-104

Open the original lesson section — lesson-03-3-d0909-point-105

Open the original lesson section — lesson-03-3-d0909-point-106

Open the original lesson section — lesson-03-3-d0909-point-107

Open the original lesson section — lesson-03-3-d0909-point-108

Open the original lesson section — lesson-03-3-d0909-point-109

Open the original lesson section — lesson-03-3-d0909-point-110

Open the original lesson section — lesson-03-3-d0909-point-111

Open the original lesson section — lesson-03-3-d0909-point-112

Open the original lesson section — lesson-03-3-d0909-point-113

Open the original lesson section — lesson-03-3-d0909-point-114

Open the original lesson section — lesson-03-3-d0909-point-115

Open the original lesson section — lesson-03-3-d0909-point-116

Open the original lesson section — lesson-03-3-d0909-point-117

Open the original lesson section — lesson-03-3-d0909-point-118

Open the original lesson section — lesson-03-3-d0909-point-119

Open the original lesson section — lesson-03-3-d0909-point-120

Open the original lesson section — lesson-03-3-d0909-point-121

Open the original lesson section — lesson-03-3-d0909-point-122

03.4 PROOF GATE: Validated Offer Brief

Assigned documents and teaching

Assigned source documents: riser-first-dollar-forge-v3 (2).html — source 1 · riser-first-dollar-forge-v3 (2).html — source 2 ·

First Dollar Forge: version3 workflow

RISER NATION CORP — IF YOU AREN’T BUILDING, YOU ARE DESTROYING

Working curriculum for review. Source bodies and distinct teaching have been reviewed in a first pass; remaining dependency, version, accessibility and semantic checks are not certified complete. Commercial examples are educational proposals, not active offers. Assigned lesson 03.4.

Video placeholder

Record the workflow and version distinctions after confirming the demonstrated tool is appropriate to use.

Lesson outline

  1. Choose a small, accountable first offer
  2. Setup and format routing in version3
  3. Viability: distinguish a first sale from a scalable business
  4. Skill audit: turn experience into observable deliverables
  5. Buyer match: investigate fit and readiness
  6. Offer design: define scope before persuasion
  7. Sales conversation and scripts: make one relevant request
  8. Nine offer scores and a corrected value-ratio example
  9. Fulfillment blueprint: plan the customer experience
  10. The fourteen-day sprint and its decision gates
  11. Payment-platform examples and continuity of the record
  12. Use the source formulas without fabricating evidence
  13. Worked offer exercise: make every promise inspectable
  14. Worked writing exercise: messages, discovery and an honest close
  15. Evidence, tools and responsible use

Choose a small, accountable first offer

The Forge is a planning assistant for an initial knowledge-based sale. Its operating sequence favors a service before a large product, direct conversations before a complex funnel, manageable transaction volume and proof before scale. Treat these as a beginner-validation approach, not rules that make every other model invalid. Selling two services at$500 and ten at$100 both produces$1,000 gross; workload, sales effort, cost and buyer fit determine which is better.

Begin with one honest description of relevant skill, experience and the problem you can competently address. The source’s example niches are first-time home-buyer guidance, corporate wellness, freelance web design, dog training, small-business bookkeeping, nutrition for busy parents, real-estate investing basics and Excel/data skills. They are examples, not verified opportunities or evidence of qualifications to offer regulated advice.

The target is an experiment that creates useful customer evidence and delivers its promise. Track collected revenue separately from profit, and include fees, refunds, support and fulfillment time. A generated plan cannot supply real buyer research, authentic testimonials or permission to contact people.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Version comparison — riser-first-dollar-forge.html — variant 1

Setup and format routing in version3

Answer three setup questions: direct/related/no experience, comfort with live calls and preference for live or asynchronous delivery. In code, relevant experience plus comfortable live delivery and a non-async preference selects consulting; relevant experience with other non-async combinations selects an audit; relevant experience plus async selects mini done-for-you; no experience selects a template. Missing answers fall back to audit internally, even though the interface intends completed answers.

That routing is a rough suggestion, not a competency assessment. A novice is not qualified to sell a toolkit simply because a selector recommends it. The formats and proposed prices are Audit$200–$400(default300), StrategyCall$150–$300(default200), MiniDFY$300–$500(default400), and Template$97–$200(default150). Price and delivery risk still need validation.

The interface’s four static gross-revenue paths are2×$500,4×$250,10×$100 and20×$50. It assigns outreach estimates14/22/50/100 and timing2–5/3–6/5–8/10-plus days. These are hardcoded assumptions; the first path is highlighted regardless of the qualifier result. Do not represent it as a personalized forecast.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2

Viability: distinguish a first sale from a scalable business

Review five possible changes to a weak idea: retire it, reduce it to a feature, package it inside a stronger offer, use it to reach an audience, or use it as an entry to affiliate/service revenue. Explain the evidence behind the recommendation; an AI verdict alone cannot determine that a market need is absent.

The four business-model tests concern recurring potential, economics at volume, growth without proportional founder time and defensibility. Version3 asks for PASS/FAIL reasons, one path toward the first$1,000 and one structural risk with mitigation. A one-off service can be a useful experiment even if it is not yet recurring or defensible.

Before scaling, examine buyer clarity, purchases beyond personal relationships, contribution after acquisition cost, repeatable fulfillment and acceptable refunds/churn. The source additionally suggests three manual sales before automation and payment before website building. Those are focus heuristics. Legal, accessibility, payment, delivery and other necessary infrastructure cannot be skipped merely because a blocklist discourages polish.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2

Skill audit: turn experience into observable deliverables

List five to seven specific services or deliverables with an output and timeframe. For example, a bounded review could produce a two-page improvement report within an agreed period; avoid promising a complete transformation from vague advice. Check that you have the skill, access and time to do what you propose.

Describe useful experience another person may value, two or three reachable buyer types, and a hidden problem existing approaches may overlook. The source calls that hidden issue a sewer leak. Treat the proposed cause as a hypothesis requiring evidence rather than assuming the model discovered the market’s most important problem.

The earlier version also requests an honest first-sale challenge and a response. Version3 adds a named mechanism statement contrasting a common assumption with an evidence-supported explanation: the buyer struggles not simply because of the assumed cause but because of a specific process failure. A memorable label must clarify an actual method, not disguise a fabricated cause.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Version comparison — riser-first-dollar-forge.html — variant 1

Buyer match: investigate fit and readiness

Describe a specific situation, problem and prior attempted solution. Identify three places the relevant people can appropriately be reached through existing relationships, professional networks or relevant communities. Name three observable signs of need or timing, such as a stated deadline or request for help. A so-called hot-hand signal does not prove someone will pay this week.

Define unsuitable situations using scope, ability to benefit, readiness and boundaries rather than dismissing anyone who asks questions as a bad buyer. For version3, separately examine time lost, money lost, stress, prior attempts and urgency. Watch whether an unexpected segment responds better and investigate what that says about the initial hypothesis.

Keep actual quotations and evidence distinct from generated buyer descriptions. The source asks for specific ages and roles as examples; relevant buying context is more useful than invented demographic detail. No list, conversation or buyer intent is established merely because AI wrote it down.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Version comparison — riser-first-dollar-forge.html — variant 1

Offer design: define scope before persuasion

Give the offer a clear three-to-seven-word name and a one-sentence promise connecting person, problem, concrete result, timeframe and obstacle removed. The earlier source emphasizes result leading to a meaningful outcome; version3 uses the person/problem/result/time/frustration structure explicitly.

Name every deliverable, duration and format. Explain the day-by-day delivery process and a supportable guarantee, if appropriate, without creating terms you cannot honor. A forty-five-minute call, written report or recorded walkthrough is clearer than a session. The earlier version asks for a two-sentence buyer-value price rationale; use actual evidence and economics to support it.

Version3 limits the suggested early delivery tools to Zoom, Loom, Google Docs and email and requires four or five explicit exclusions. These are simplification choices, not proof other tools are unsuitable. Include inputs, revision limits, access and responsibilities so scope stays manageable.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Version comparison — riser-first-dollar-forge.html — variant 1 · Acquisition.com — offer design framework

Sales conversation and scripts: make one relevant request

Prepare a warm message under sixty words with one specific question, and a short cold/community message referring to a genuine observation about the recipient. The older prompt caps the cold message below fifty words; version3 uses below fifty-five. Personalization requires true context, not invented familiarity.

Use the fifteen-minute discovery outline to understand the situation, listen for needs and fit, explain the relevant offer and agree a next step if appropriate. The close message should specify the actual deliverable, price, payment method and next action. Do not hide the scope or pressure an unsuitable buyer into a commitment.

Prepare honest responses to price concerns, uncertainty about fit and requests for more time. Ask what the concern means before proposing an answer. Version3 adds a cost-of-inaction comparison: use a supported cost and a realistic potential benefit, not an inflated loss designed to force urgency. These are writing exercises; no outreach, payment request or sales call is executed by this lesson.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Version comparison — riser-first-dollar-forge.html — variant 1

Nine offer scores and a corrected value-ratio example

Version3 rates nine areas from one to ten: pain, urgency, clarity, willingness to pay, ease of fulfillment, confidence to deliver, ease of closing, ease of obtaining genuine feedback and repeatability. Sum to a maximum of ninety and explain each rating with evidence. The source requests Strong/Caution/Reframe labels but defines no numerical boundaries, so do not invent them or treat them as validated categories.

The code compares annual unsolved-problem cost divided by price and seeks at least ten-to-one. If the supported cost is$2,000 and price$300, the ratio is6.67. Raising price lowers that ratio; it cannot repair the source’s below-ten instruction. Holding that cost fixed, a ten-to-one target requires price no greater than$200. Alternatively, verify whether the offer addresses a different, genuinely larger cost—never inflate the estimate.

This cost ratio is not the same as realized benefit, willingness to pay or Hormozi’s conceptual outcome/likelihood/time/effort framework. A possible avoided loss is not a guaranteed customer gain. The source’s phrase one-tenth at minimum also conflicts with its own inequality, so use explicit assumptions and arithmetic.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Acquisition.com — offer design framework

Fulfillment blueprint: plan the customer experience

Prepare the document, checklist or template needed before delivery. Map what happens each day, what you send, what the client supplies and the observable signals of a good result. Anticipate two likely delivery failures and specify an honest response for each, including what requires a revised agreement.

After the first delivery, save reusable structure and document the work so the next delivery can improve. The prompt’s forty-percent speed gain is a target without evidence. Measure actual hours and quality instead of assuming a template achieves it.

The source requests a two-sentence feedback/testimonial invitation within forty-eight hours. Ask what changed and what was useful, without scripting a favorable result or making feedback compulsory. Obtain permission before publishing identifiable feedback and preserve its context.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2

The fourteen-day sprint and its decision gates

Days1–2 allow at most three preparation tasks and propose starting appropriate outreach on day2afternoon. Days3–7 focus on a specific daily activity and prospect priority. Days8–11 turn interested conversations into clear decisions and diagnose lack of response. Days12–14 focus on responsible delivery, feedback and a possible second engagement.

The prompt asks for measurable gates on days3,7,11 and14, with first revenue by11 and a$1,000 checkpoint at14. These are proposed targets, not deadlines the model can guarantee. Before the sprint, record which scale assumptions remain unproven and what evidence this test can realistically supply.

If there are no conversions by day11, change one hypothesis—buyer, promise, price, package or channel—while preserving a record of the previous test. Avoid treating a short period without adequate exposure as conclusive proof. After initial sales, improve fulfillment and evidence before multiplying volume.

The structural-drift list discourages websites, branding, automation/CRM, social accounts, content and funnels too early. Its timing conflicts: the interface says until Phase6, the script still postpones these before outreach, the system waits for payment for websites and three manual sales for automation. Teach focus on necessary delivery and evidence, not a single falsely consistent prohibition.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2

Payment-platform examples and continuity of the record

The source routes audit and done-for-you services toward Stripe Payment Links, calls toward a Calendly event with Stripe payments, and templates toward Gumroad. Official documentation confirms the general hosted-payment and scheduled-payment capabilities. Verify account eligibility, terms, fees, taxes, refunds and actual product configuration before any operational setup. Writing this lesson creates no account, product or payment link.

A free product option is not the same as fee-free paid selling. Gumroad’s own pricing and free-product guidance should govern its current terms rather than the source’s shorthand. Keep the purchase promise, access instructions and deliverable consistent across the chosen system.

Version3 passes only the last two prior outputs, each cut to eight hundred characters, plus a three-hundred-character viability excerpt in the skill phase. Maintain a complete approved brief containing buyer evidence, exclusions, price assumptions and delivery commitments; compare every later output against it to prevent omitted constraints.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Stripe — hosted Payment Links · Calendly — Stripe payment integration · Gumroad — fees · Gumroad — free/pay-what-you-want products

Use the source formulas without fabricating evidence

The version3 offer prompt specifies this structure: I help [SPECIFIC PERSON] solve [SPECIFIC PAINFUL PROBLEM] by giving them [SMALL CONCRETE RESULT] in [SHORT TIMEFRAME] without [MAJOR FRUSTRATION THEY HAVE EXPERIENCED BEFORE]. Fill each slot with evidence-backed scope. In the practice case, the small result is a prioritized clarity report; a sales increase would be a different and unsupported promise.

Its mechanism prompt uses: Most [buyers] fail at [goal] not because of [common assumption] but because of [Mechanism Name] — [one sentence explanation]. This is the source’s requested copy structure, not proof that a single cause explains the problem. Use it only when the causal explanation is justified; otherwise state a qualified hypothesis instead of dismissing alternative causes.

The cost-of-inaction prompt asks whether avoiding a specific cost would be a fair trade. Establish that cost with the buyer and explain what portion the offer could realistically address. If the evidence is missing, explain the deliverable and price directly. Do not transform a hypothetical lost sale into a guaranteed saving.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2

Worked offer exercise: make every promise inspectable

This is an authored practice case, not a current RISER offer or a proven market opportunity. Assume a designer can competently review one existing desktop service page. The buyer is an independent consultant who says prospects cannot understand the service. Before proposing work, verify that this is the buyer’s actual problem and that a page review is within the designer’s skill.

A possible exercise name is Consultant Service Page Clarity Audit. Define delivery as a recorded walkthrough of up to fifteen minutes plus a two-page report with five prioritized clarity changes, delivered within two working days after receiving the page link and agreed context. This promises a review artifact, not more sales. The five recommendations must identify the confusing element, why it matters and a concrete revision.

Inputs are the existing public page, intended customer, service scope and the buyer’s own account of confusion. Day one: inspect the page and draft the findings. Day two: verify the recommendations against the brief and deliver the report and recording. Use an agreed private delivery route if the material is confidential. Do not invent customer quotes or conversion data.

Example exclusions are implementation, a website rebuild, search rankings, paid-ad management and a guaranteed sales increase. A bounded remedy could be correcting an incomplete report against the agreed specification; its exact terms need agreement. A hypothetical $200 price is a scenario, not a recommendation. Evaluate actual time, fees, revisions and willingness to pay before making a real offer.

Score the nine version3 areas only when using that version, explaining evidence and unknowns rather than selecting numbers to force a favorable verdict. If the buyer’s cost of the problem is unknown, say unknown. Do not manufacture an annual loss to justify the price. The earlier version can use the same clear scope without claiming it contains the version3 scoring system.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Version comparison — riser-first-dollar-forge.html — variant 1

Worked writing exercise: messages, discovery and an honest close

The following examples are drafts to adapt only to true context. Nothing is sent. Warm example: You mentioned that prospects struggle to understand your consulting page. I am testing a focused review that identifies five clarity improvements. Would you be open to a short conversation about where visitors seem to get stuck? This ends with one specific question and stays under the source’s sixty-word limit.

Cold example: I read your public page about team coaching. I could not tell whether the workshop or ongoing support is the main service. Would you be open to one question about how you want prospects to choose? Use this only if that observation is true. It is below both versions’ cold-message limits and contains one request.

For an authored fifteen-minute discovery outline, use roughly two minutes for context and permission, five for the problem and prior attempts, four for the desired outcome and fit, and four for a clear next step. These minute allocations are an authored aid; the source asks for an ordered structure but does not prescribe them. Ask what people misunderstand, what the buyer has tried, what would make a review useful and what constraints apply. Listen before presenting scope.

Example close after genuine interest: The exercise package is a recorded walkthrough and a two-page report with five prioritized changes for $200, delivered within two working days after I receive the agreed inputs. It excludes implementation and sales guarantees. If that scope fits, the next step is to confirm the written brief and payment method. Replace every example term with the actual agreed one before use.

For a price concern, ask whether the uncertainty is budget, priority or expected usefulness; explain scope without inventing ROI. For fit, identify the outcome the buyer needs and say when the service would not address it. For a timing objection, ask what information or date would make a decision possible and respect a decline. A concern is not proof of a hidden fear; the buyer’s answer determines the response.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Version comparison — riser-first-dollar-forge.html — variant 1

Evidence, tools and responsible use

Both source files send user prompts directly from the browser to a hardcoded model, read the first returned text block and do not check whether output was truncated. The older cap is1,000tokens and version3 uses1,500. A returned answer therefore does not demonstrate that all requested fields were completed. Check each deliverable against the phase checklist.

Both keep only the API key in session storage; niche, profile and generated outputs are held in memory and can disappear on reload. Version3 adds a final text download. Maintain a separate complete working record rather than assuming the browser is durable storage.

The source code exposes a direct-browser credential design and inserts generated markup without sanitization. The lesson preserves these files as non-executable source text and does not request credentials or run them as a course embed. Its free-key, model-availability and cost-per-run claims are time-sensitive and are not accepted here as current setup instructions.

Code inspection also identified phase-advance behavior that can hide the new output until returning to the prior screen, and navigation paths that may require regeneration. Version3 has additional niche-input/rerender and numeric-input focus concerns. These are static review findings, not live-tested behavior or fixes. Preserve the intended workflow while verifying the actual tool before demonstrating it.

Supporting sources: riser-first-dollar-forge-v3 (2).html — source variant 1 · riser-first-dollar-forge-v3 (2).html — source variant 2 · Version comparison — riser-first-dollar-forge.html — variant 1

Practice and completion check

Produce an evidence-linked buyer hypothesis, a bounded offer, a delivery checklist, draft conversation scripts and a dated test plan. Record assumptions behind every price, conversion rate and promised outcome. Check every generated section manually and preserve all decisions outside the tool before proceeding.

Complete original HTML/CSS/JavaScript — source variant 1, non-executable
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RISER First Dollar Forge v3</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,500;0,600;1,400&family=DM+Sans:opsz,[email protected],400;9..40,500&family=DM+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
:root{--bg:#0C0F14;--panel:#141920;--card:#1C2430;--border:#2A3340;
--gold:#C9A84C;--gold-dim:rgba(201,168,76,.12);--gold-bright:#EAB84C;
--green:#3FB950;--green-dim:rgba(63,185,80,.1);--green-b:rgba(63,185,80,.3);
--amber:#E68A1A;--amber-dim:rgba(230,138,26,.1);
--red:#F85149;--red-dim:rgba(248,81,73,.09);--red-b:rgba(248,81,73,.35);
--info:#58A6FF;--info-dim:rgba(88,166,255,.08);
--purple:#A78BFA;--purple-dim:rgba(167,139,250,.1);
--text:#E6EDF3;--muted:#7D8590;--hint:#4A5568;
--mono:'DM Mono',monospace;--serif:'Lora',serif;--sans:'DM Sans',sans-serif}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);font-family:var(--sans);min-height:100vh;font-size:14px;line-height:1.7}
.app{max-width:800px;margin:0 auto;padding:24px 20px}
.hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px;padding-bottom:14px;border-bottom:.5px solid var(--border)}
.brand{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--gold)}
.brand span{color:var(--muted)}
.brand sup{font-size:8px;color:var(--amber)}
.pills{display:flex;gap:5px;flex-wrap:wrap}
.pill{font-size:10px;padding:3px 9px;border-radius:20px;border:.5px solid var(--border);color:var(--hint);font-family:var(--mono);cursor:pointer;background:none;transition:all .15s}
.pill.done{background:var(--green-dim);color:var(--green);border-color:var(--green-b)}
.pill.active{border:1px solid var(--gold);color:var(--gold);background:var(--gold-dim)}
.pill:hover:not(.active):not(.done){border-color:var(--muted);color:var(--muted)}
.prog-wrap{margin-bottom:18px}
.prog-bar{height:2px;background:var(--border);border-radius:1px;overflow:hidden}
.prog-fill{height:100%;background:var(--gold);border-radius:1px;transition:width .4s}
.prog-label{font-size:11px;color:var(--muted);font-family:var(--mono);margin-top:5px;display:flex;justify-content:space-between}
.phase-num{font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--muted);margin-bottom:4px;text-transform:uppercase}
.section-head{font-family:var(--serif);font-size:22px;font-weight:500;margin-bottom:4px}
.section-sub{font-size:13px;color:var(--muted);margin-bottom:18px;line-height:1.6}
textarea,.text-in{width:100%;padding:10px 14px;background:var(--card);border:.5px solid var(--border);border-radius:8px;color:var(--text);font-family:var(--sans);font-size:14px;resize:vertical;outline:none;transition:border-color .15s;line-height:1.6}
textarea:focus,.text-in:focus{border-color:var(--gold)}
textarea::placeholder,.text-in::placeholder{color:var(--hint)}
.q-card{background:var(--card);border:.5px solid var(--border);border-radius:10px;padding:16px;margin-bottom:12px}
.q-label{font-size:13px;font-weight:500;margin-bottom:10px}
.q-opts{display:flex;flex-direction:column;gap:6px}
.q-opt{display:flex;align-items:flex-start;gap:9px;padding:8px 10px;border:.5px solid var(--border);border-radius:7px;cursor:pointer;transition:all .15s}
.q-opt:hover{border-color:var(--muted)}
.q-opt.sel{border-color:var(--gold);background:var(--gold-dim)}
.q-opt input[type=radio]{accent-color:var(--gold);margin-top:3px;flex-shrink:0}
.q-opt-text{font-size:13px}
.q-opt-sub{font-size:11px;color:var(--muted);margin-top:1px}
.mvo-rec{background:var(--green-dim);border:1px solid var(--green-b);border-radius:9px;padding:14px 16px;margin-bottom:16px}
.mvo-rec-label{font-family:var(--mono);font-size:9px;color:var(--green);letter-spacing:.12em;text-transform:uppercase;margin-bottom:5px}
.mvo-rec-title{font-size:15px;font-weight:500;color:var(--green);margin-bottom:3px}
.mvo-rec-reason{font-size:12px;color:var(--muted);line-height:1.5}
.five-choices{margin-bottom:14px}
.choice-row{display:flex;gap:8px;padding:9px 12px;border-radius:8px;margin-bottom:5px;border:.5px solid var(--border);background:var(--panel)}
.choice-num{font-family:var(--mono);font-size:15px;font-weight:500;min-width:22px;flex-shrink:0;line-height:1.3}
.choice-title{font-size:12px;font-weight:500;margin-bottom:1px}
.choice-detail{font-size:11px;color:var(--muted)}
.four-paths{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}
.path-card{background:var(--card);border:.5px solid var(--border);border-radius:8px;padding:12px 14px}
.path-card.rec{border:1.5px solid var(--green-b);background:var(--green-dim)}
.path-math{font-family:var(--mono);font-size:16px;font-weight:500;margin-bottom:3px}
.path-math.rec{color:var(--green)}
.path-detail{font-size:11px;color:var(--muted);margin-bottom:3px}
.path-badge{display:inline-block;font-size:10px;padding:2px 7px;border-radius:20px}
.badge-rec{background:var(--green-dim);color:var(--green)}
.badge-hard{background:var(--red-dim);color:var(--red)}
.badge-ok{background:var(--amber-dim);color:var(--amber)}
.ratio-row{display:flex;align-items:center;gap:10px;margin:12px 0}
.ratio-in{flex:1;padding:8px 12px;background:var(--card);border:.5px solid var(--border);border-radius:7px;color:var(--text);font-family:var(--mono);font-size:14px;outline:none;transition:border-color .15s}
.ratio-in:focus{border-color:var(--gold)}
.ratio-disp{font-family:var(--mono);font-size:15px;min-width:80px;text-align:right}
.platform-box{background:var(--card);border:.5px solid var(--border);border-radius:9px;padding:14px 16px;margin:12px 0}
.platform-label{font-family:var(--mono);font-size:9px;color:var(--gold);letter-spacing:.12em;text-transform:uppercase;margin-bottom:10px}
.platform-name{font-size:14px;font-weight:500;color:var(--gold);margin-bottom:3px}
.platform-setup{font-size:12px;color:var(--text);margin-top:6px;padding:8px 10px;background:var(--panel);border-radius:6px}
.drift-bar{background:var(--red-dim);border:.5px solid var(--red-b);border-radius:9px;padding:12px 16px;margin-bottom:18px}
.drift-label{font-family:var(--mono);font-size:9px;color:var(--red);letter-spacing:.12em;text-transform:uppercase;margin-bottom:7px}
.drift-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.drift-item{font-size:12px;color:var(--red);display:flex;align-items:center;gap:6px}
.drift-item::before{content:'✕';font-size:10px;flex-shrink:0}
.ex-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.chip{padding:5px 12px;background:var(--card);border:.5px solid var(--border);border-radius:20px;font-size:12px;color:var(--muted);cursor:pointer;transition:all .15s}
.chip:hover{border-color:var(--gold);color:var(--gold)}
.out-box{background:var(--card);border:.5px solid var(--border);border-radius:10px;padding:18px;margin-bottom:14px}
.out-box.loading{display:flex;align-items:center;gap:12px;min-height:60px}
.spinner{width:15px;height:15px;border:1.5px solid var(--border);border-top-color:var(--gold);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}
.load-txt{font-size:13px;color:var(--muted)}
.out-content h2{font-family:var(--mono);font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;margin:14px 0 7px;padding-bottom:4px;border-bottom:.5px solid var(--border)}
.out-content h2:first-child{margin-top:0}
.out-content h3{font-size:13px;font-weight:500;color:var(--gold-bright);margin:9px 0 3px}
.out-content p{font-size:13px;margin-bottom:6px}
.out-content ul{padding-left:16px;margin-bottom:8px}
.out-content li{font-size:13px;margin-bottom:3px}
.out-content strong{font-weight:500;color:var(--gold-bright)}
.script-box{background:var(--info-dim);border-left:3px solid var(--info);border-radius:0 8px 8px 0;padding:12px 14px;margin:8px 0}
.script-label{font-family:var(--mono);font-size:10px;color:var(--info);text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px}
.action-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:16px}
.btn{padding:9px 18px;font-size:13px;border-radius:7px;cursor:pointer;transition:all .15s;font-family:var(--sans);border:.5px solid var(--border);background:transparent;color:var(--muted)}
.btn:hover{border-color:var(--muted);color:var(--text)}
.btn:disabled{cursor:not-allowed;opacity:.4}
.btn.primary{background:var(--gold);color:var(--bg);border-color:var(--gold);font-weight:500}
.btn.primary:hover{background:var(--gold-bright)}
.btn.primary:disabled{background:var(--hint);border-color:var(--hint)}
.err{background:var(--red-dim);border:.5px solid var(--red-b);border-radius:7px;padding:10px 14px;font-size:13px;color:var(--red);margin-bottom:14px}
.key-row{display:grid;grid-template-columns:1fr auto;gap:8px;margin-bottom:6px}
.key-note{font-size:12px;color:var(--hint)}
.key-note a{color:var(--muted)}
.divider{height:.5px;background:var(--border);margin:20px 0}
.hint-txt{font-size:12px;color:var(--hint)}
.scaling-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0}
.sc-item{background:var(--panel);border-radius:7px;padding:9px 11px;border:.5px solid var(--border)}
.sc-check{width:14px;height:14px;border-radius:50%;background:var(--green-dim);border:.5px solid var(--green-b);display:inline-block;margin-right:6px;vertical-align:middle}
.sc-text{font-size:12px}
@keyframes spin{to{transform:rotate(360deg)}}
::-webkit-scrollbar{width:4px}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
</style>
</head>
<body>
<div class="app">
<div class="hdr">
  <div class="brand">RISER <span>|</span> First Dollar Forge<sup> v3</sup></div>
  <div class="pills" id="pills"></div>
</div>
<div class="prog-wrap">
  <div class="prog-bar"><div class="prog-fill" id="prog" style="width:0%"></div></div>
  <div class="prog-label"><span id="prog-label">Ready</span><span id="prog-count">0/7 phases</span></div>
</div>
<div id="body"></div>
</div>

<script>
const SYS=`You are the RISER Nation First Dollar Architect v3.

OPERATING LAW:
1. Service before product. Expertise sold directly before building any course.
2. Outreach before inbound. Direct personal contact before any audience exists.
3. Conversation before funnel. A 15-minute call beats a sales page with no social proof.
4. Fewer transactions always. 2 clients at $500 beats 10 clients at $100.
5. Proof before scale. First $1K is proof-gathering, not a business launch.
6. Never automate what you haven't sold manually at least three times.

FIVE HONEST CHOICES for a failing/weak idea (use these when relevant):
1. Kill it — market need is not real
2. Reduce to a feature — too small to stand alone
3. Wrap in a stronger offer — knowledge is real, packaging is wrong
4. Turn into a channel/audience wedge — build audience, monetize differently
5. Use as front-end for affiliate or service revenue

FASTEST $1K PATHS (in order): Audit/review ($200-400) → Strategy call ($150-300) → Mini DFY ($300-500) → Template/toolkit ($97-200)

FOUR BUSINESS MODEL TESTS — flag if idea fails any:
1. Recurring revenue potential
2. Unit economics survive at volume
3. Revenue can grow without proportional founder time
4. Defensible moat exists

PRE-SCALING CONDITIONS (before recommending scale):
Buyer is clear, offer converts from non-personal contacts, margin survives acquisition at volume, fulfillment is repeatable without founder, churn/refunds are tolerable.

NEVER RECOMMEND: building a course first, running paid ads, growing social audience first, building automation before 3 manual sales, website before first payment.

OUTPUT: Specific, concrete, immediately actionable. Write actual scripts. Every output usable today.`;

const PHASES=[
  {id:0,l:'Setup'},
  {id:1,l:'Viability check'},
  {id:2,l:'Skill audit'},
  {id:3,l:'Buyer match'},
  {id:4,l:'Offer design'},
  {id:5,l:'Fulfillment'},
  {id:6,l:'Sale scripts'},
  {id:7,l:'14-day sprint'},
];

const MVO_FORMATS={
  audit:{label:'Audit / Review',range:'$200–400',reason:"You have experience spotting problems. Delivers a concrete written report in 1-3 hours."},
  consult:{label:'Strategy Call',range:'$150–300',reason:"You can think clearly about someone's situation and give direction. Zero build required."},
  dfy:{label:'Mini Done-For-You',range:'$300–500',reason:"You can produce something tangible for the client. Low fulfillment risk."},
  template:{label:'Template / Toolkit',range:'$97–200',reason:"Packaged solution that doesn't require live delivery."},
};

const PLATFORMS={
  audit:{name:'Stripe Payment Links',setup:'dashboard.stripe.com → Products → Payment Links. No website needed. Share the URL directly in DMs and bio.'},
  consult:{name:'Calendly with payment enabled',setup:'Create a Calendly event → enable "Collect Payments" → connect Stripe. Client books and pays in one step.'},
  dfy:{name:'Stripe Payment Links',setup:'Create a Payment Link for your service. After payment, send delivery instructions and intake form by email.'},
  template:{name:'Gumroad',setup:'Free Gumroad account → New Product → Upload template → Set price → Share the link. $0 option for email capture.'},
};

const FOUR_PATHS=[
  {math:'2 × $500',clients:2,price:500,outreach:14,days:'2-5',badge:'rec',note:'Fewest conversations. Worth the harder close.'},
  {math:'4 × $250',clients:4,price:250,outreach:22,days:'3-6',badge:'ok',note:'Sweet spot for most niches.'},
  {math:'10 × $100',clients:10,price:100,outreach:50,days:'5-8',badge:'ok',note:'More closings than it looks.'},
  {math:'20 × $50',clients:20,price:50,outreach:100,days:'10+',badge:'hard',note:'Avoid as first target.'},
];

let S={
  key:sessionStorage.getItem('fdf3_k')||'',
  niche:'',q1:null,q2:null,q3:null,
  mvo:'audit',price:300,unsolved:'',
  phase:0,out:{},loading:false,err:''
};

function getMvo(){
  if(!S.q1||!S.q2||!S.q3)return'audit';
  const exp=S.q1==='yes'||S.q1==='some';
  const live=S.q2==='yes';
  const async_p=S.q3==='async';
  if(exp&&live&&!async_p)return'consult';
  if(exp&&!async_p)return'audit';
  if(exp&&async_p)return'dfy';
  return'template';
}
function getMvoPrice(m){return{audit:300,consult:200,dfy:400,template:150}[m]||250;}

function save(){sessionStorage.setItem('fdf3_k',S.key);}
async function callClaude(prompt){
  const r=await fetch('https://api.anthropic.com/v1/messages',{
    method:'POST',
    headers:{'Content-Type':'application/json','x-api-key':S.key,'anthropic-version':'2023-06-01','anthropic-dangerous-direct-browser-access':'true'},
    body:JSON.stringify({model:'claude-sonnet-4-20250514',max_tokens:1500,system:SYS,messages:[{role:'user',content:prompt}]})
  });
  const d=await r.json();
  if(!r.ok||d.error)throw new Error(d.error?.message||'API error '+r.status);
  return d.content[0].text;
}

function buildPrompt(ph){
  const prev=Object.entries(S.out).filter(([k])=>Number(k)<ph).slice(-2).map(([k,v])=>`[Phase ${k}]:\n${v.slice(0,800)}`).join('\n\n');
  const ctx=prev?`\n\nPrior phases:\n${prev}\n\n`:'';
  const ml=MVO_FORMATS[S.mvo]?.label||'audit';
  const ps={
    1:`Niche/idea: "${S.niche}"\n\nIDEA VIABILITY CHECK — run this before anything else.\n\n## The 5 Honest Choices assessment\nFor this specific idea, which of the 5 Honest Choices applies? Be direct:\n1. Kill it (market need is not real)\n2. Reduce to a feature\n3. Wrap in a stronger offer\n4. Turn into a channel or audience wedge\n5. Use as front-end for affiliate or service revenue\n\nState your verdict clearly: "This idea is most likely Choice [X] because..."\n\n## The 4 Business Model Tests\nFor each test, rate PASS/FAIL with one sentence:\n1. Recurring revenue potential\n2. Unit economics survive at volume\n3. Revenue can grow without proportional founder time\n4. Defensible moat exists\n\n## The fastest $1K path for this idea\nGiven the viability assessment, what is the single fastest path to $1,000 for this specific niche? Name it precisely.\n\n## The one structural risk\nThe most likely failure mode for this specific niche — and the exact mitigation.`,

    2:`${ctx}Niche: "${S.niche}"\nViability verdict: ${S.out[1]?.slice(0,300)||'not run'}\nProfile: ${S.q1==='yes'?'has direct experience':S.q1==='some'?'some related experience':'new to this'}. ${S.q2==='yes'?'Comfortable on live video calls':S.q2==='some'?'Somewhat comfortable live':'Prefers async delivery'}. Recommended MVO: ${ml}.\n\nSKILL AUDIT — complete beginner, no audience.\n\n## What you can deliver for someone today\n5-7 specific deliverables matched to the ${ml} format. Each must be a concrete outcome with a timeframe: "Spend 60 minutes reviewing X and produce a written report with 5 priority improvements within 24 hours." Not vague: "teach people about X."\n\n## Your unfair advantage\nWhat does someone with experience in "${S.niche}" know that took years to learn, that someone would pay to skip?\n\n## Who already needs this in your life right now\n2-3 specific types of people in a typical expert's personal network who have this problem today and could pay.\n\n## The Sewer Leak\nThe #1 hidden problem in "${S.niche}" that existing solutions completely miss.\n\n## The Mechanism Statement\nName WHY the usual approach fails in this niche. Give it a memorable label: "The [Name] Problem." Format: "Most [buyers] fail at [goal] not because of [common assumption] but because of [Mechanism Name] — [one sentence explanation]."`,

    3:`${ctx}Niche: "${S.niche}". MVO: ${ml}.\n\nBUYER MATCH + PAIN FILTER — reach them with no audience.\n\nPain filter first:\nWhich problem costs them TIME? Which costs MONEY? Which creates STRESS? Which have they already tried to solve? Which do they want fixed fastest?\n\n## The ideal first buyer\nSpecific: "a [age] [exact role/situation] who has [specific problem], has already tried [specific approach], and is actively frustrated right now." Give their exact current state.\n\n## The Hot-Hand Signal\n3 specific phrases, situations, or behaviours that mean this person will pay THIS WEEK, not someday.\n\n## Where to find them without an audience\n3 specific places the operator can access TODAY: personal LinkedIn connections, local community groups, online communities by name. No paid traffic.\n\n## The Negative Buyer\nWho looks right but will waste time? The person who asks many questions, never commits, drains energy. How to spot them in the first message.\n\n## The "wrong buyer responded better" watch\nFor this niche, what buyer TYPE might convert better than the intended one? What would that signal about the business model?`,

    4:`${ctx}Niche: "${S.niche}". Format: ${ml}. Price: $${S.price}. Buyer's unsolved problem cost: ${S.unsolved?'$'+S.unsolved:'not specified'}.\n\nOFFER DESIGN — one specific sellable thing.\n\n## THE OFFER FORMULA (mandatory — output this first, exactly)\n"I help [SPECIFIC PERSON] solve [SPECIFIC PAINFUL PROBLEM] by giving them [SMALL CONCRETE RESULT] in [SHORT TIMEFRAME] without [MAJOR FRUSTRATION THEY'VE EXPERIENCED BEFORE]."\n\n## The offer name\n3-7 words. Not clever, not vague. Pattern: [Audience] + [Specific Problem] + [Audit/Sprint/Package].\n\n## Exactly what they receive\nEvery deliverable. Be specific: "A 45-minute Zoom call recorded and sent to them" not "a session."\n\n## How you deliver it (step by step)\nDay-by-day using only: Zoom, Loom, Google Doc, or email. A beginner should be confident delivering this tomorrow.\n\n## MVO SCORING (rate each 1-10 with one-line reason)\n1. Pain intensity: X/10\n2. Urgency: X/10\n3. Offer clarity: X/10\n4. Buyer willingness to pay: X/10\n5. Ease of fulfillment: X/10\n6. Confidence to deliver: X/10\n7. Ease of closing: X/10\n8. Ease of getting testimonials: X/10\n9. Repeatability: X/10\nTOTAL: XX/90 [STRONG PROCEED / PROCEED WITH CAUTION / REFRAME FIRST]\n\n## The 1:10 Value Ratio\n${S.unsolved?`Buyer's cost if unsolved: $${S.unsolved}. Value ratio: ${Math.round(Number(S.unsolved)/S.price)}:1. ${Number(S.unsolved)/S.price>=10?'Strong anchor — defend this price.':'Below 10:1 — either raise the price or identify a more expensive problem.'}`:'State the specific dollar cost to the buyer if this problem remains unsolved for 12 months. Your price should be 1/10th of that number at minimum.'}\n\n## The guarantee\nA specific, beginner-appropriate promise that removes buyer risk.\n\n## NOT included (scope protection)\nList 4-5 things explicitly excluded. This prevents scope creep and protects margin.`,

    5:`${ctx}Niche: "${S.niche}". Offer: ${ml}. Price: $${S.price}.\n\nFULFILLMENT BLUEPRINT — what to do after someone pays.\n\n## Before the first session\nExactly what to prepare: the document, checklist, or template to have ready before delivery.\n\n## The delivery step-by-step\nDay-by-day: what you do first, what you send, what the client experiences. Use only: Zoom, Loom, Google Docs, email. No other tools.\n\n## What a great delivery looks like\nThe specific signals that tell you you've done excellent work — from the client's perspective.\n\n## What can go wrong and how to handle it\nThe 2 most likely delivery problems for a ${ml} in "${S.niche}" and the exact response for each.\n\n## How to make the second delivery faster\nWhat to document, template, or save after the first delivery that makes the second 40% faster.\n\n## The testimonial extraction (send within 48 hours of delivery)\n[SCRIPT]\nThe exact 2-sentence message to send after delivery.\n[/SCRIPT]`,

    6:`${ctx}Niche: "${S.niche}". Offer: ${ml} at $${S.price}.\n\nFIRST SALE SYSTEM — with no audience.\n\nNOTE: Before sending any of these scripts — do NOT build a website, design a logo, set up any automation, or create any content. These scripts work without any of that.\n\n## Warm outreach (personal contacts who know you)\n[SCRIPT]\nUnder 60 words. Conversational, not pitch-y. Ends with one specific yes/no question.\n[/SCRIPT]\n\n## LinkedIn/community outreach (people who don't know you well)\n[SCRIPT]\nUnder 55 words. References something specific about their situation. One request only.\n[/SCRIPT]\n\n## The 15-minute discovery conversation\nWalk through it in order: what to ask, what to listen for, how to present the offer, how to transition from conversation to offer. Feel like a helpful conversation, not a sales call.\n\n## The close message (after they express interest)\n[SCRIPT]\nExact words. Includes price, specific next step, and payment platform.\n[/SCRIPT]\n\n## The 3 objections they'll face\nFor each: the real fear underneath it, and the exact honest response.\n1. Price / "too expensive"\n2. "Not sure it will work for me"\n3. "I need to think about it"\n\n## The Cost-of-Inaction close\n[SCRIPT]\n"If [your offer] saves you from [specific cost of the problem remaining unsolved], is that a fair trade?" — complete this for this specific niche.\n[/SCRIPT]`,

    7:`${ctx}Niche: "${S.niche}". Offer: ${ml} at $${S.price}. Target: $1,000.\n\n14-DAY FIRST DOLLAR SPRINT — day-by-day specifics.\n\n## Pre-scaling conditions check\nBefore this sprint begins, confirm: buyer is clear, offer converts from non-personal contacts, margin survives acquisition, fulfillment is repeatable, churn is tolerable. Which of these is NOT yet proven? What does this sprint need to accomplish to prove it?\n\n## Days 1-2 — Minimal preparation\nMaximum 3 tasks. Goal: outreach starts Day 2 afternoon.\n\n## Days 3-7 — Outreach sprint\nSpecific daily task + daily send target number + who to prioritise.\n\n## Days 8-11 — Convert conversations\nHow to move from interested to paid. What to do if there are zero responses (specific single-axis pivot instruction — which one axis to change).\n\n## Days 12-14 — First delivery and proof\nHow to deliver the first client excellently. Testimonial extraction. How to turn the first client into the second.\n\n## Success gates\nDay 3: [specific measurable gate]\nDay 7: [specific measurable gate]\nDay 11: [gate — should include first revenue]\nDay 14: [gate — the $1,000 confirmation]\n\n## The single-axis pivot if nothing works by Day 11\nIf no conversions by Day 11, which ONE axis to change first: buyer / promise / price / packaging / channel. Not all of them — one.\n\n## After the first $1,000\nThe single biggest mistake, and the right next move instead.`,
  };
  return ps[ph]||'';
}

function md(t){
  if(!t)return'';
  return t
    .replace(/^## (.+)$/gm,'<h2>$1</h2>')
    .replace(/^### (.+)$/gm,'<h3>$1</h3>')
    .replace(/\*\*([^*]+)\*\*/g,'<strong>$1</strong>')
    .replace(/^[*-] (.+)$/gm,'<li>$1</li>')
    .replace(/(<li>.*<\/li>\n?)+/gs,m=>`<ul>${m}</ul>`)
    .replace(/\[SCRIPT\]([\s\S]*?)\[\/SCRIPT\]/g,(_,s)=>`<div class="script-box"><div class="script-label">Script — copy this exactly</div>${s.trim()}</div>`)
    .replace(/^(?!<[hulisd]|<\/[ul])(.+)$/gm,'<p>$1</p>')
    .replace(/<p><\/p>/g,'');
}

async function run(ph){
  if(!S.key){S.err='Add your API key below to generate.';render();return;}
  if(!S.niche.trim()){S.err='Enter your niche first.';render();return;}
  S.loading=true;S.err='';render();
  try{
    S.out[ph]=await callClaude(buildPrompt(ph));
    S.phase=Math.min(ph+1,7);save();
  }catch(e){
    S.err=e.message.includes('401')?'API key invalid — check console.anthropic.com':`Error: ${e.message}`;
  }
  S.loading=false;render();window.scrollTo(0,0);
}

function render(){
  const el=document.getElementById('body');
  const pills=document.getElementById('pills');
  const done=Object.keys(S.out).length;
  document.getElementById('prog').style.width=`${done/7*100}%`;
  document.getElementById('prog-label').textContent=done===7?'All phases complete':'Phase '+(S.phase===0?'0 — Setup':''+S.phase);
  document.getElementById('prog-count').textContent=`${done}/7 phases`;
  pills.innerHTML=PHASES.map(p=>{
    const isDone=p.id>0&&!!S.out[p.id];
    const isActive=p.id===S.phase;
    return `<button class="pill ${isDone?'done':isActive?'active':''}" onclick="goP(${p.id})">${p.l}</button>`;
  }).join('');
  if(!S.key)el.innerHTML=renderKey();
  else if(S.phase===0)el.innerHTML=renderSetup();
  else el.innerHTML=renderStage();
}

function renderKey(){
  return`<div class="phase-num">Setup</div>
<div class="section-head">Enter your Anthropic API key</div>
<div class="section-sub">Stored in browser session only. ~$0.03–0.08 per complete 7-phase run.</div>
${S.err?`<div class="err">${S.err}</div>`:''}
<div class="key-row"><input class="text-in" id="ki" type="password" placeholder="sk-ant-api03-..." style="font-family:var(--mono);font-size:13px"><button class="btn primary" onclick="setK()">Save</button></div>
<div class="key-note">Get a free key at <a href="https://console.anthropic.com" target="_blank">console.anthropic.com</a></div>`;
}

function renderSetup(){
  const EX=['First-time home buyers Phoenix','Corporate burnout recovery','Freelance web design for restaurants','Dog training for reactive dogs','Bookkeeping for ecommerce sellers','Nutrition for busy parents','Real estate investing basics','Excel and data skills'];
  const Q1=[{v:'yes',t:'Yes — directly solved this',s:'I have results and direct experience.'},{v:'some',t:'Some related experience',s:'Adjacent background, not a direct expert.'},{v:'no',t:'Not yet',s:'New to this, willing to learn fast.'}];
  const Q2=[{v:'yes',t:'Comfortable on live calls',s:'Video/phone calls are fine.'},{v:'some',t:'Somewhat comfortable',s:'Can do it, not my preference.'},{v:'no',t:'Prefer async',s:'Rather deliver in writing or via Loom.'}];
  const Q3=[{v:'live',t:'Live delivery is fine',s:'Calls, sessions, workshops — open to it.'},{v:'async',t:'Prefer written/async',s:'Documents, templates, Loom videos.'}];
  const allOK=S.q1&&S.q2&&S.q3&&S.niche.trim();
  const recMvo=getMvo();
  const mvoInfo=MVO_FORMATS[recMvo];
  const recHTML=allOK?`<div class="mvo-rec"><div class="mvo-rec-label">Recommended MVO format based on your answers</div><div class="mvo-rec-title">${mvoInfo.label} · ${mvoInfo.range}</div><div class="mvo-rec-reason">${mvoInfo.reason}</div></div>`:'';
  return`<div class="phase-num">Phase 0 — start here</div>
<div class="section-head">Your niche and how you work</div>
<div class="section-sub">3 quick questions auto-select the right offer format. Your niche powers every phase after this.</div>
${S.err?`<div class="err">${S.err}</div>`:''}
<textarea id="ni" rows="2" placeholder="e.g. I help first-time home buyers in Phoenix win bids against cash investors...">${S.niche}</textarea>
<div style="margin-top:8px;margin-bottom:12px"><div style="font-size:12px;color:var(--muted);margin-bottom:6px">Quick examples:</div>
<div class="ex-chips">${EX.map(e=>`<button class="chip" onclick="useS('${e}')">${e}</button>`).join('')}</div></div>
<div class="q-card"><div class="q-label">Have you personally solved this problem or done this type of work?</div>
<div class="q-opts">${Q1.map(o=>`<div class="q-opt ${S.q1===o.v?'sel':''}" onclick="setQ(1,'${o.v}')"><input type="radio" ${S.q1===o.v?'checked':''}><div><div class="q-opt-text">${o.t}</div><div class="q-opt-sub">${o.s}</div></div></div>`).join('')}</div></div>
<div class="q-card"><div class="q-label">How do you feel about delivering on a live video call?</div>
<div class="q-opts">${Q2.map(o=>`<div class="q-opt ${S.q2===o.v?'sel':''}" onclick="setQ(2,'${o.v}')"><input type="radio" ${S.q2===o.v?'checked':''}><div><div class="q-opt-text">${o.t}</div><div class="q-opt-sub">${o.s}</div></div></div>`).join('')}</div></div>
<div class="q-card"><div class="q-label">How do you prefer to deliver your work?</div>
<div class="q-opts">${Q3.map(o=>`<div class="q-opt ${S.q3===o.v?'sel':''}" onclick="setQ(3,'${o.v}')"><input type="radio" ${S.q3===o.v?'checked':''}><div><div class="q-opt-text">${o.t}</div><div class="q-opt-sub">${o.s}</div></div></div>`).join('')}</div></div>
${recHTML}
<div class="action-row"><button class="btn primary" onclick="startBuild()" ${!allOK?'disabled':''}>Start — Phase 1: Viability Check →</button>
<span class="hint-txt">${allOK?'Ready':'Complete all 3 questions + enter your niche'}</span></div>`;
}

function renderStage(){
  const ph=S.phase;
  const done=!!S.out[ph];
  const platform=PLATFORMS[S.mvo];
  const recPI=0;
  const INFO=[{},{num:'Phase 1',t:'Viability check',s:'The Five Honest Choices + four business model tests — before building anything.',btn:'Run viability check ⚡'},{num:'Phase 2',t:'Skill audit',s:'What you can actually sell right now. The Mechanism Statement. The Sewer Leak.',btn:'Run skill audit ⚡'},{num:'Phase 3',t:'Buyer match',s:'The ideal first buyer, where to find them, the Hot-Hand Signal, the Negative Buyer.',btn:'Find my buyers ⚡'},{num:'Phase 4',t:'Offer design',s:'The Offer Formula, MVO Scoring, 1:10 Value Ratio, platform routing.',btn:'Design my offer ⚡'},{num:'Phase 5',t:'Fulfillment blueprint',s:'What to do after someone pays. The missing phase in most tools.',btn:'Build fulfillment plan ⚡'},{num:'Phase 6',t:'Sale scripts',s:'Word-for-word outreach, close scripts, COI close, objection responses.',btn:'Generate scripts ⚡'},{num:'Phase 7',t:'14-day sprint',s:'Day-by-day with pre-scaling conditions, success gates, and single-axis pivot instruction.',btn:'Build sprint plan ⚡'}][ph]||{};

  const driftBar=ph>=2?`<div class="drift-bar"><div class="drift-label">Structural drift blocklist — do NOT do any of these until Phase 6</div>
<div class="drift-grid"><div class="drift-item">Build a website or landing page</div><div class="drift-item">Design a logo or branding</div><div class="drift-item">Set up automation or CRM</div><div class="drift-item">Create social media accounts</div><div class="drift-item">Write blog posts or create content</div><div class="drift-item">Build email sequences or funnels</div></div></div>`:'';

  const mvoTag=ph>=2?`<div style="display:flex;align-items:center;gap:8px;margin-bottom:14px;flex-wrap:wrap">
<span style="font-size:12px;color:var(--muted)">MVO:</span>
<span style="font-size:12px;padding:3px 10px;background:var(--gold-dim);color:var(--gold);border-radius:20px;font-family:var(--mono)">${MVO_FORMATS[S.mvo]?.label||''} · ${MVO_FORMATS[S.mvo]?.range||''}</span>
<span style="font-size:12px;color:var(--muted)">${S.niche.slice(0,40)}${S.niche.length>40?'…':''}</span></div>`:'';

  const calcHTML=ph===4?`<div style="margin-bottom:14px">
<div style="font-size:12px;color:var(--muted);margin-bottom:8px">What does this problem cost the buyer unsolved? (1:10 value ratio test)</div>
<div class="ratio-row"><span style="font-size:13px;color:var(--muted)">$</span>
<input class="ratio-in" id="unsolved-in" type="number" placeholder="5000" value="${S.unsolved}" oninput="updateUnsolved(this.value)">
${S.unsolved&&S.price?`<div class="ratio-disp" style="color:${Number(S.unsolved)/S.price>=10?'var(--green)':'var(--amber)'}">Ratio: ${Math.round(Number(S.unsolved)/S.price)}:1</div>`:'<div class="ratio-disp" style="color:var(--hint)">Ratio: —</div>'}</div>
<div style="font-size:11px;color:var(--hint)">Target: 10:1 minimum. Aim for 20-30:1. Price should be 1/10th of what the problem costs unsolved.</div>
<div class="four-paths">${FOUR_PATHS.map((p,i)=>`<div class="path-card ${i===0?'rec':''}">
<div class="path-math ${i===0?'rec':''}">${p.math}</div>
<div class="path-detail">${p.clients} clients · ~${p.outreach} outreach · ~${p.days} days</div>
<span class="path-badge ${p.badge==='rec'?'badge-rec':p.badge==='hard'?'badge-hard':'badge-ok'}">${i===0?'recommended':p.badge==='hard'?'avoid':'workable'}</span>
<div style="font-size:11px;color:var(--hint);margin-top:4px">${p.note}</div></div>`).join('')}</div></div>`:'';

  const platformHTML=ph===4&&done?`<div class="platform-box">
<div class="platform-label">Payment platform for your ${MVO_FORMATS[S.mvo]?.label}</div>
<div class="platform-name">${platform?.name}</div>
<div class="platform-setup">${platform?.setup}</div></div>`:'';

  const outHTML=S.loading?`<div class="out-box loading"><div class="spinner"></div><div class="load-txt">Generating ${INFO.t?.toLowerCase()}…</div></div>`:
    done?`<div class="out-box"><div class="out-content">${md(S.out[ph])}</div></div>`:'';

  const nav=`<div class="action-row">
${ph>1?`<button class="btn" onclick="goP(${ph-1})">← Back</button>`:''}
${!done&&!S.loading?`<button class="btn primary" onclick="run(${ph})">${INFO.btn||'Generate ⚡'}</button>`:''}
${done&&ph<7?`<button class="btn primary" onclick="goP(${ph+1})">Next: ${PHASES[ph+1]?.l} →</button>`:''}
${done?`<button class="btn" onclick="run(${ph})">↺ Regenerate</button><button class="btn" onclick="cp(${ph})">Copy</button>`:''}
${done&&ph===7?`<button class="btn" onclick="dlAll()" style="border-color:var(--gold);color:var(--gold)">↓ Download full package</button>`:''}
${S.err?'':`<span class="hint-txt">${S.niche.slice(0,35)}${S.niche.length>35?'…':''}</span>`}</div>`;

  const keyInline=!S.key?`<div class="divider"></div><div class="key-row"><input class="text-in" id="ki2" type="password" placeholder="sk-ant-api03-..." style="font-family:var(--mono);font-size:13px"><button class="btn primary" onclick="setK2()">Save key</button></div><div class="key-note">Get at <a href="https://console.anthropic.com" target="_blank">console.anthropic.com</a></div>`:'';

  return`<div class="phase-num">${INFO.num||''}</div>
<div class="section-head">${INFO.t||''}</div>
<div class="section-sub">${INFO.s||''}</div>
${S.err?`<div class="err">${S.err}</div>`:''}
${driftBar}${mvoTag}${calcHTML}${outHTML}${platformHTML}${nav}${keyInline}`;
}

window.goP=function(p){if(p===0||p<=S.phase){S.phase=p;S.err='';render();}};
window.setK=function(){const v=document.getElementById('ki')?.value.trim();if(v?.startsWith('sk-')){S.key=v;save();render();}else{S.err='Enter a valid key starting with sk-';render();}};
window.setK2=function(){const v=document.getElementById('ki2')?.value.trim();if(v?.startsWith('sk-')){S.key=v;save();render();}else{S.err='Enter a valid key';render();}};
window.useS=function(s){S.niche=s;render();setTimeout(()=>{const t=document.getElementById('ni');if(t)t.value=s;},10);};
window.setQ=function(n,v){S['q'+n]=v;if(S.q1&&S.q2&&S.q3){S.mvo=getMvo();S.price=getMvoPrice(S.mvo);}render();};
window.startBuild=function(){const t=document.getElementById('ni');if(t)S.niche=t.value.trim();if(!S.niche){S.err='Enter your niche first.';render();return;}S.mvo=getMvo();S.price=getMvoPrice(S.mvo);S.phase=1;S.err='';render();};
window.updateUnsolved=function(v){S.unsolved=v;render();};
window.cp=function(ph){if(S.out[ph])navigator.clipboard.writeText(S.out[ph]).catch(()=>{});};
window.dlAll=function(){
  const lines=[`RISER FIRST DOLLAR FORGE v3 — COMPLETE PACKAGE\n${'='.repeat(60)}\nNICHE: ${S.niche}\nMVO: ${MVO_FORMATS[S.mvo]?.label}\nGenerated: ${new Date().toLocaleDateString()}\n`];
  PHASES.forEach(p=>{if(S.out[p.id])lines.push(`\n${'='.repeat(60)}\n${p.l.toUpperCase()}\n${'='.repeat(60)}\n${S.out[p.id]}\n`);});
  const a=Object.assign(document.createElement('a'),{href:URL.createObjectURL(new Blob([lines.join('\n')],{type:'text/plain'})),download:`fdf-${S.niche.slice(0,20).replace(/\s+/g,'-').toLowerCase()}.txt`});a.click();
};
render();
</script>
</body>
</html>
Complete original HTML/CSS/JavaScript — source variant 2, non-executable
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RISER First Dollar Forge v3</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,500;0,600;1,400&family=DM+Sans:opsz,[email protected],400;9..40,500&family=DM+Mono:wght@400;500&display=swap" rel="stylesheet">
<style>
:root{--bg:#0C0F14;--panel:#141920;--card:#1C2430;--border:#2A3340;
--gold:#C9A84C;--gold-dim:rgba(201,168,76,.12);--gold-bright:#EAB84C;
--green:#3FB950;--green-dim:rgba(63,185,80,.1);--green-b:rgba(63,185,80,.3);
--amber:#E68A1A;--amber-dim:rgba(230,138,26,.1);
--red:#F85149;--red-dim:rgba(248,81,73,.09);--red-b:rgba(248,81,73,.35);
--info:#58A6FF;--info-dim:rgba(88,166,255,.08);
--purple:#A78BFA;--purple-dim:rgba(167,139,250,.1);
--text:#E6EDF3;--muted:#7D8590;--hint:#4A5568;
--mono:'DM Mono',monospace;--serif:'Lora',serif;--sans:'DM Sans',sans-serif}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);font-family:var(--sans);min-height:100vh;font-size:14px;line-height:1.7}
.app{max-width:800px;margin:0 auto;padding:24px 20px}
.hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px;padding-bottom:14px;border-bottom:.5px solid var(--border)}
.brand{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--gold)}
.brand span{color:var(--muted)}
.brand sup{font-size:8px;color:var(--amber)}
.pills{display:flex;gap:5px;flex-wrap:wrap}
.pill{font-size:10px;padding:3px 9px;border-radius:20px;border:.5px solid var(--border);color:var(--hint);font-family:var(--mono);cursor:pointer;background:none;transition:all .15s}
.pill.done{background:var(--green-dim);color:var(--green);border-color:var(--green-b)}
.pill.active{border:1px solid var(--gold);color:var(--gold);background:var(--gold-dim)}
.pill:hover:not(.active):not(.done){border-color:var(--muted);color:var(--muted)}
.prog-wrap{margin-bottom:18px}
.prog-bar{height:2px;background:var(--border);border-radius:1px;overflow:hidden}
.prog-fill{height:100%;background:var(--gold);border-radius:1px;transition:width .4s}
.prog-label{font-size:11px;color:var(--muted);font-family:var(--mono);margin-top:5px;display:flex;justify-content:space-between}
.phase-num{font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--muted);margin-bottom:4px;text-transform:uppercase}
.section-head{font-family:var(--serif);font-size:22px;font-weight:500;margin-bottom:4px}
.section-sub{font-size:13px;color:var(--muted);margin-bottom:18px;line-height:1.6}
textarea,.text-in{width:100%;padding:10px 14px;background:var(--card);border:.5px solid var(--border);border-radius:8px;color:var(--text);font-family:var(--sans);font-size:14px;resize:vertical;outline:none;transition:border-color .15s;line-height:1.6}
textarea:focus,.text-in:focus{border-color:var(--gold)}
textarea::placeholder,.text-in::placeholder{color:var(--hint)}
.q-card{background:var(--card);border:.5px solid var(--border);border-radius:10px;padding:16px;margin-bottom:12px}
.q-label{font-size:13px;font-weight:500;margin-bottom:10px}
.q-opts{display:flex;flex-direction:column;gap:6px}
.q-opt{display:flex;align-items:flex-start;gap:9px;padding:8px 10px;border:.5px solid var(--border);border-radius:7px;cursor:pointer;transition:all .15s}
.q-opt:hover{border-color:var(--muted)}
.q-opt.sel{border-color:var(--gold);background:var(--gold-dim)}
.q-opt input[type=radio]{accent-color:var(--gold);margin-top:3px;flex-shrink:0}
.q-opt-text{font-size:13px}
.q-opt-sub{font-size:11px;color:var(--muted);margin-top:1px}
.mvo-rec{background:var(--green-dim);border:1px solid var(--green-b);border-radius:9px;padding:14px 16px;margin-bottom:16px}
.mvo-rec-label{font-family:var(--mono);font-size:9px;color:var(--green);letter-spacing:.12em;text-transform:uppercase;margin-bottom:5px}
.mvo-rec-title{font-size:15px;font-weight:500;color:var(--green);margin-bottom:3px}
.mvo-rec-reason{font-size:12px;color:var(--muted);line-height:1.5}
.five-choices{margin-bottom:14px}
.choice-row{display:flex;gap:8px;padding:9px 12px;border-radius:8px;margin-bottom:5px;border:.5px solid var(--border);background:var(--panel)}
.choice-num{font-family:var(--mono);font-size:15px;font-weight:500;min-width:22px;flex-shrink:0;line-height:1.3}
.choice-title{font-size:12px;font-weight:500;margin-bottom:1px}
.choice-detail{font-size:11px;color:var(--muted)}
.four-paths{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}
.path-card{background:var(--card);border:.5px solid var(--border);border-radius:8px;padding:12px 14px}
.path-card.rec{border:1.5px solid var(--green-b);background:var(--green-dim)}
.path-math{font-family:var(--mono);font-size:16px;font-weight:500;margin-bottom:3px}
.path-math.rec{color:var(--green)}
.path-detail{font-size:11px;color:var(--muted);margin-bottom:3px}
.path-badge{display:inline-block;font-size:10px;padding:2px 7px;border-radius:20px}
.badge-rec{background:var(--green-dim);color:var(--green)}
.badge-hard{background:var(--red-dim);color:var(--red)}
.badge-ok{background:var(--amber-dim);color:var(--amber)}
.ratio-row{display:flex;align-items:center;gap:10px;margin:12px 0}
.ratio-in{flex:1;padding:8px 12px;background:var(--card);border:.5px solid var(--border);border-radius:7px;color:var(--text);font-family:var(--mono);font-size:14px;outline:none;transition:border-color .15s}
.ratio-in:focus{border-color:var(--gold)}
.ratio-disp{font-family:var(--mono);font-size:15px;min-width:80px;text-align:right}
.platform-box{background:var(--card);border:.5px solid var(--border);border-radius:9px;padding:14px 16px;margin:12px 0}
.platform-label{font-family:var(--mono);font-size:9px;color:var(--gold);letter-spacing:.12em;text-transform:uppercase;margin-bottom:10px}
.platform-name{font-size:14px;font-weight:500;color:var(--gold);margin-bottom:3px}
.platform-setup{font-size:12px;color:var(--text);margin-top:6px;padding:8px 10px;background:var(--panel);border-radius:6px}
.drift-bar{background:var(--red-dim);border:.5px solid var(--red-b);border-radius:9px;padding:12px 16px;margin-bottom:18px}
.drift-label{font-family:var(--mono);font-size:9px;color:var(--red);letter-spacing:.12em;text-transform:uppercase;margin-bottom:7px}
.drift-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.drift-item{font-size:12px;color:var(--red);display:flex;align-items:center;gap:6px}
.drift-item::before{content:'✕';font-size:10px;flex-shrink:0}
.ex-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}
.chip{padding:5px 12px;background:var(--card);border:.5px solid var(--border);border-radius:20px;font-size:12px;color:var(--muted);cursor:pointer;transition:all .15s}
.chip:hover{border-color:var(--gold);color:var(--gold)}
.out-box{background:var(--card);border:.5px solid var(--border);border-radius:10px;padding:18px;margin-bottom:14px}
.out-box.loading{display:flex;align-items:center;gap:12px;min-height:60px}
.spinner{width:15px;height:15px;border:1.5px solid var(--border);border-top-color:var(--gold);border-radius:50%;animation:spin .7s linear infinite;flex-shrink:0}
.load-txt{font-size:13px;color:var(--muted)}
.out-content h2{font-family:var(--mono);font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.1em;margin:14px 0 7px;padding-bottom:4px;border-bottom:.5px solid var(--border)}
.out-content h2:first-child{margin-top:0}
.out-content h3{font-size:13px;font-weight:500;color:var(--gold-bright);margin:9px 0 3px}
.out-content p{font-size:13px;margin-bottom:6px}
.out-content ul{padding-left:16px;margin-bottom:8px}
.out-content li{font-size:13px;margin-bottom:3px}
.out-content strong{font-weight:500;color:var(--gold-bright)}
.script-box{background:var(--info-dim);border-left:3px solid var(--info);border-radius:0 8px 8px 0;padding:12px 14px;margin:8px 0}
.script-label{font-family:var(--mono);font-size:10px;color:var(--info);text-transform:uppercase;letter-spacing:.08em;margin-bottom:6px}
.action-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:16px}
.btn{padding:9px 18px;font-size:13px;border-radius:7px;cursor:pointer;transition:all .15s;font-family:var(--sans);border:.5px solid var(--border);background:transparent;color:var(--muted)}
.btn:hover{border-color:var(--muted);color:var(--text)}
.btn:disabled{cursor:not-allowed;opacity:.4}
.btn.primary{background:var(--gold);color:var(--bg);border-color:var(--gold);font-weight:500}
.btn.primary:hover{background:var(--gold-bright)}
.btn.primary:disabled{background:var(--hint);border-color:var(--hint)}
.err{background:var(--red-dim);border:.5px solid var(--red-b);border-radius:7px;padding:10px 14px;font-size:13px;color:var(--red);margin-bottom:14px}
.key-row{display:grid;grid-template-columns:1fr auto;gap:8px;margin-bottom:6px}
.key-note{font-size:12px;color:var(--hint)}
.key-note a{color:var(--muted)}
.divider{height:.5px;background:var(--border);margin:20px 0}
.hint-txt{font-size:12px;color:var(--hint)}
.scaling-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:10px 0}
.sc-item{background:var(--panel);border-radius:7px;padding:9px 11px;border:.5px solid var(--border)}
.sc-check{width:14px;height:14px;border-radius:50%;background:var(--green-dim);border:.5px solid var(--green-b);display:inline-block;margin-right:6px;vertical-align:middle}
.sc-text{font-size:12px}
@keyframes spin{to{transform:rotate(360deg)}}
::-webkit-scrollbar{width:4px}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
</style>
</head>
<body>
<div class="app">
<div class="hdr">
  <div class="brand">RISER <span>|</span> First Dollar Forge<sup> v3</sup></div>
  <div class="pills" id="pills"></div>
</div>
<div class="prog-wrap">
  <div class="prog-bar"><div class="prog-fill" id="prog" style="width:0%"></div></div>
  <div class="prog-label"><span id="prog-label">Ready</span><span id="prog-count">0/7 phases</span></div>
</div>
<div id="body"></div>
</div>

<script>
const SYS=`You are the RISER Nation First Dollar Architect v3.

OPERATING LAW:
1. Service before product. Expertise sold directly before building any course.
2. Outreach before inbound. Direct personal contact before any audience exists.
3. Conversation before funnel. A 15-minute call beats a sales page with no social proof.
4. Fewer transactions always. 2 clients at $500 beats 10 clients at $100.
5. Proof before scale. First $1K is proof-gathering, not a business launch.
6. Never automate what you haven't sold manually at least three times.

FIVE HONEST CHOICES for a failing/weak idea (use these when relevant):
1. Kill it — market need is not real
2. Reduce to a feature — too small to stand alone
3. Wrap in a stronger offer — knowledge is real, packaging is wrong
4. Turn into a channel/audience wedge — build audience, monetize differently
5. Use as front-end for affiliate or service revenue

FASTEST $1K PATHS (in order): Audit/review ($200-400) → Strategy call ($150-300) → Mini DFY ($300-500) → Template/toolkit ($97-200)

FOUR BUSINESS MODEL TESTS — flag if idea fails any:
1. Recurring revenue potential
2. Unit economics survive at volume
3. Revenue can grow without proportional founder time
4. Defensible moat exists

PRE-SCALING CONDITIONS (before recommending scale):
Buyer is clear, offer converts from non-personal contacts, margin survives acquisition at volume, fulfillment is repeatable without founder, churn/refunds are tolerable.

NEVER RECOMMEND: building a course first, running paid ads, growing social audience first, building automation before 3 manual sales, website before first payment.

OUTPUT: Specific, concrete, immediately actionable. Write actual scripts. Every output usable today.`;

const PHASES=[
  {id:0,l:'Setup'},
  {id:1,l:'Viability check'},
  {id:2,l:'Skill audit'},
  {id:3,l:'Buyer match'},
  {id:4,l:'Offer design'},
  {id:5,l:'Fulfillment'},
  {id:6,l:'Sale scripts'},
  {id:7,l:'14-day sprint'},
];

const MVO_FORMATS={
  audit:{label:'Audit / Review',range:'$200–400',reason:"You have experience spotting problems. Delivers a concrete written report in 1-3 hours."},
  consult:{label:'Strategy Call',range:'$150–300',reason:"You can think clearly about someone's situation and give direction. Zero build required."},
  dfy:{label:'Mini Done-For-You',range:'$300–500',reason:"You can produce something tangible for the client. Low fulfillment risk."},
  template:{label:'Template / Toolkit',range:'$97–200',reason:"Packaged solution that doesn't require live delivery."},
};

const PLATFORMS={
  audit:{name:'Stripe Payment Links',setup:'dashboard.stripe.com → Products → Payment Links. No website needed. Share the URL directly in DMs and bio.'},
  consult:{name:'Calendly with payment enabled',setup:'Create a Calendly event → enable "Collect Payments" → connect Stripe. Client books and pays in one step.'},
  dfy:{name:'Stripe Payment Links',setup:'Create a Payment Link for your service. After payment, send delivery instructions and intake form by email.'},
  template:{name:'Gumroad',setup:'Free Gumroad account → New Product → Upload template → Set price → Share the link. $0 option for email capture.'},
};

const FOUR_PATHS=[
  {math:'2 × $500',clients:2,price:500,outreach:14,days:'2-5',badge:'rec',note:'Fewest conversations. Worth the harder close.'},
  {math:'4 × $250',clients:4,price:250,outreach:22,days:'3-6',badge:'ok',note:'Sweet spot for most niches.'},
  {math:'10 × $100',clients:10,price:100,outreach:50,days:'5-8',badge:'ok',note:'More closings than it looks.'},
  {math:'20 × $50',clients:20,price:50,outreach:100,days:'10+',badge:'hard',note:'Avoid as first target.'},
];

let S={
  key:sessionStorage.getItem('fdf3_k')||'',
  niche:'',q1:null,q2:null,q3:null,
  mvo:'audit',price:300,unsolved:'',
  phase:0,out:{},loading:false,err:''
};

function getMvo(){
  if(!S.q1||!S.q2||!S.q3)return'audit';
  const exp=S.q1==='yes'||S.q1==='some';
  const live=S.q2==='yes';
  const async_p=S.q3==='async';
  if(exp&&live&&!async_p)return'consult';
  if(exp&&!async_p)return'audit';
  if(exp&&async_p)return'dfy';
  return'template';
}
function getMvoPrice(m){return{audit:300,consult:200,dfy:400,template:150}[m]||250;}

function save(){sessionStorage.setItem('fdf3_k',S.key);}
async function callClaude(prompt){
  const r=await fetch('https://api.anthropic.com/v1/messages',{
    method:'POST',
    headers:{'Content-Type':'application/json','x-api-key':S.key,'anthropic-version':'2023-06-01','anthropic-dangerous-direct-browser-access':'true'},
    body:JSON.stringify({model:'claude-sonnet-4-20250514',max_tokens:1500,system:SYS,messages:[{role:'user',content:prompt}]})
  });
  const d=await r.json();
  if(!r.ok||d.error)throw new Error(d.error?.message||'API error '+r.status);
  return d.content[0].text;
}

function buildPrompt(ph){
  const prev=Object.entries(S.out).filter(([k])=>Number(k)<ph).slice(-2).map(([k,v])=>`[Phase ${k}]:\n${v.slice(0,800)}`).join('\n\n');
  const ctx=prev?`\n\nPrior phases:\n${prev}\n\n`:'';
  const ml=MVO_FORMATS[S.mvo]?.label||'audit';
  const ps={
    1:`Niche/idea: "${S.niche}"\n\nIDEA VIABILITY CHECK — run this before anything else.\n\n## The 5 Honest Choices assessment\nFor this specific idea, which of the 5 Honest Choices applies? Be direct:\n1. Kill it (market need is not real)\n2. Reduce to a feature\n3. Wrap in a stronger offer\n4. Turn into a channel or audience wedge\n5. Use as front-end for affiliate or service revenue\n\nState your verdict clearly: "This idea is most likely Choice [X] because..."\n\n## The 4 Business Model Tests\nFor each test, rate PASS/FAIL with one sentence:\n1. Recurring revenue potential\n2. Unit economics survive at volume\n3. Revenue can grow without proportional founder time\n4. Defensible moat exists\n\n## The fastest $1K path for this idea\nGiven the viability assessment, what is the single fastest path to $1,000 for this specific niche? Name it precisely.\n\n## The one structural risk\nThe most likely failure mode for this specific niche — and the exact mitigation.`,

    2:`${ctx}Niche: "${S.niche}"\nViability verdict: ${S.out[1]?.slice(0,300)||'not run'}\nProfile: ${S.q1==='yes'?'has direct experience':S.q1==='some'?'some related experience':'new to this'}. ${S.q2==='yes'?'Comfortable on live video calls':S.q2==='some'?'Somewhat comfortable live':'Prefers async delivery'}. Recommended MVO: ${ml}.\n\nSKILL AUDIT — complete beginner, no audience.\n\n## What you can deliver for someone today\n5-7 specific deliverables matched to the ${ml} format. Each must be a concrete outcome with a timeframe: "Spend 60 minutes reviewing X and produce a written report with 5 priority improvements within 24 hours." Not vague: "teach people about X."\n\n## Your unfair advantage\nWhat does someone with experience in "${S.niche}" know that took years to learn, that someone would pay to skip?\n\n## Who already needs this in your life right now\n2-3 specific types of people in a typical expert's personal network who have this problem today and could pay.\n\n## The Sewer Leak\nThe #1 hidden problem in "${S.niche}" that existing solutions completely miss.\n\n## The Mechanism Statement\nName WHY the usual approach fails in this niche. Give it a memorable label: "The [Name] Problem." Format: "Most [buyers] fail at [goal] not because of [common assumption] but because of [Mechanism Name] — [one sentence explanation]."`,

    3:`${ctx}Niche: "${S.niche}". MVO: ${ml}.\n\nBUYER MATCH + PAIN FILTER — reach them with no audience.\n\nPain filter first:\nWhich problem costs them TIME? Which costs MONEY? Which creates STRESS? Which have they already tried to solve? Which do they want fixed fastest?\n\n## The ideal first buyer\nSpecific: "a [age] [exact role/situation] who has [specific problem], has already tried [specific approach], and is actively frustrated right now." Give their exact current state.\n\n## The Hot-Hand Signal\n3 specific phrases, situations, or behaviours that mean this person will pay THIS WEEK, not someday.\n\n## Where to find them without an audience\n3 specific places the operator can access TODAY: personal LinkedIn connections, local community groups, online communities by name. No paid traffic.\n\n## The Negative Buyer\nWho looks right but will waste time? The person who asks many questions, never commits, drains energy. How to spot them in the first message.\n\n## The "wrong buyer responded better" watch\nFor this niche, what buyer TYPE might convert better than the intended one? What would that signal about the business model?`,

    4:`${ctx}Niche: "${S.niche}". Format: ${ml}. Price: $${S.price}. Buyer's unsolved problem cost: ${S.unsolved?'$'+S.unsolved:'not specified'}.\n\nOFFER DESIGN — one specific sellable thing.\n\n## THE OFFER FORMULA (mandatory — output this first, exactly)\n"I help [SPECIFIC PERSON] solve [SPECIFIC PAINFUL PROBLEM] by giving them [SMALL CONCRETE RESULT] in [SHORT TIMEFRAME] without [MAJOR FRUSTRATION THEY'VE EXPERIENCED BEFORE]."\n\n## The offer name\n3-7 words. Not clever, not vague. Pattern: [Audience] + [Specific Problem] + [Audit/Sprint/Package].\n\n## Exactly what they receive\nEvery deliverable. Be specific: "A 45-minute Zoom call recorded and sent to them" not "a session."\n\n## How you deliver it (step by step)\nDay-by-day using only: Zoom, Loom, Google Doc, or email. A beginner should be confident delivering this tomorrow.\n\n## MVO SCORING (rate each 1-10 with one-line reason)\n1. Pain intensity: X/10\n2. Urgency: X/10\n3. Offer clarity: X/10\n4. Buyer willingness to pay: X/10\n5. Ease of fulfillment: X/10\n6. Confidence to deliver: X/10\n7. Ease of closing: X/10\n8. Ease of getting testimonials: X/10\n9. Repeatability: X/10\nTOTAL: XX/90 [STRONG PROCEED / PROCEED WITH CAUTION / REFRAME FIRST]\n\n## The 1:10 Value Ratio\n${S.unsolved?`Buyer's cost if unsolved: $${S.unsolved}. Value ratio: ${Math.round(Number(S.unsolved)/S.price)}:1. ${Number(S.unsolved)/S.price>=10?'Strong anchor — defend this price.':'Below 10:1 — either raise the price or identify a more expensive problem.'}`:'State the specific dollar cost to the buyer if this problem remains unsolved for 12 months. Your price should be 1/10th of that number at minimum.'}\n\n## The guarantee\nA specific, beginner-appropriate promise that removes buyer risk.\n\n## NOT included (scope protection)\nList 4-5 things explicitly excluded. This prevents scope creep and protects margin.`,

    5:`${ctx}Niche: "${S.niche}". Offer: ${ml}. Price: $${S.price}.\n\nFULFILLMENT BLUEPRINT — what to do after someone pays.\n\n## Before the first session\nExactly what to prepare: the document, checklist, or template to have ready before delivery.\n\n## The delivery step-by-step\nDay-by-day: what you do first, what you send, what the client experiences. Use only: Zoom, Loom, Google Docs, email. No other tools.\n\n## What a great delivery looks like\nThe specific signals that tell you you've done excellent work — from the client's perspective.\n\n## What can go wrong and how to handle it\nThe 2 most likely delivery problems for a ${ml} in "${S.niche}" and the exact response for each.\n\n## How to make the second delivery faster\nWhat to document, template, or save after the first delivery that makes the second 40% faster.\n\n## The testimonial extraction (send within 48 hours of delivery)\n[SCRIPT]\nThe exact 2-sentence message to send after delivery.\n[/SCRIPT]`,

    6:`${ctx}Niche: "${S.niche}". Offer: ${ml} at $${S.price}.\n\nFIRST SALE SYSTEM — with no audience.\n\nNOTE: Before sending any of these scripts — do NOT build a website, design a logo, set up any automation, or create any content. These scripts work without any of that.\n\n## Warm outreach (personal contacts who know you)\n[SCRIPT]\nUnder 60 words. Conversational, not pitch-y. Ends with one specific yes/no question.\n[/SCRIPT]\n\n## LinkedIn/community outreach (people who don't know you well)\n[SCRIPT]\nUnder 55 words. References something specific about their situation. One request only.\n[/SCRIPT]\n\n## The 15-minute discovery conversation\nWalk through it in order: what to ask, what to listen for, how to present the offer, how to transition from conversation to offer. Feel like a helpful conversation, not a sales call.\n\n## The close message (after they express interest)\n[SCRIPT]\nExact words. Includes price, specific next step, and payment platform.\n[/SCRIPT]\n\n## The 3 objections they'll face\nFor each: the real fear underneath it, and the exact honest response.\n1. Price / "too expensive"\n2. "Not sure it will work for me"\n3. "I need to think about it"\n\n## The Cost-of-Inaction close\n[SCRIPT]\n"If [your offer] saves you from [specific cost of the problem remaining unsolved], is that a fair trade?" — complete this for this specific niche.\n[/SCRIPT]`,

    7:`${ctx}Niche: "${S.niche}". Offer: ${ml} at $${S.price}. Target: $1,000.\n\n14-DAY FIRST DOLLAR SPRINT — day-by-day specifics.\n\n## Pre-scaling conditions check\nBefore this sprint begins, confirm: buyer is clear, offer converts from non-personal contacts, margin survives acquisition, fulfillment is repeatable, churn is tolerable. Which of these is NOT yet proven? What does this sprint need to accomplish to prove it?\n\n## Days 1-2 — Minimal preparation\nMaximum 3 tasks. Goal: outreach starts Day 2 afternoon.\n\n## Days 3-7 — Outreach sprint\nSpecific daily task + daily send target number + who to prioritise.\n\n## Days 8-11 — Convert conversations\nHow to move from interested to paid. What to do if there are zero responses (specific single-axis pivot instruction — which one axis to change).\n\n## Days 12-14 — First delivery and proof\nHow to deliver the first client excellently. Testimonial extraction. How to turn the first client into the second.\n\n## Success gates\nDay 3: [specific measurable gate]\nDay 7: [specific measurable gate]\nDay 11: [gate — should include first revenue]\nDay 14: [gate — the $1,000 confirmation]\n\n## The single-axis pivot if nothing works by Day 11\nIf no conversions by Day 11, which ONE axis to change first: buyer / promise / price / packaging / channel. Not all of them — one.\n\n## After the first $1,000\nThe single biggest mistake, and the right next move instead.`,
  };
  return ps[ph]||'';
}

function md(t){
  if(!t)return'';
  return t
    .replace(/^## (.+)$/gm,'<h2>$1</h2>')
    .replace(/^### (.+)$/gm,'<h3>$1</h3>')
    .replace(/\*\*([^*]+)\*\*/g,'<strong>$1</strong>')
    .replace(/^[*-] (.+)$/gm,'<li>$1</li>')
    .replace(/(<li>.*<\/li>\n?)+/gs,m=>`<ul>${m}</ul>`)
    .replace(/\[SCRIPT\]([\s\S]*?)\[\/SCRIPT\]/g,(_,s)=>`<div class="script-box"><div class="script-label">Script — copy this exactly</div>${s.trim()}</div>`)
    .replace(/^(?!<[hulisd]|<\/[ul])(.+)$/gm,'<p>$1</p>')
    .replace(/<p><\/p>/g,'');
}

async function run(ph){
  if(!S.key){S.err='Add your API key below to generate.';render();return;}
  if(!S.niche.trim()){S.err='Enter your niche first.';render();return;}
  S.loading=true;S.err='';render();
  try{
    S.out[ph]=await callClaude(buildPrompt(ph));
    S.phase=Math.min(ph+1,7);save();
  }catch(e){
    S.err=e.message.includes('401')?'API key invalid — check console.anthropic.com':`Error: ${e.message}`;
  }
  S.loading=false;render();window.scrollTo(0,0);
}

function render(){
  const el=document.getElementById('body');
  const pills=document.getElementById('pills');
  const done=Object.keys(S.out).length;
  document.getElementById('prog').style.width=`${done/7*100}%`;
  document.getElementById('prog-label').textContent=done===7?'All phases complete':'Phase '+(S.phase===0?'0 — Setup':''+S.phase);
  document.getElementById('prog-count').textContent=`${done}/7 phases`;
  pills.innerHTML=PHASES.map(p=>{
    const isDone=p.id>0&&!!S.out[p.id];
    const isActive=p.id===S.phase;
    return `<button class="pill ${isDone?'done':isActive?'active':''}" onclick="goP(${p.id})">${p.l}</button>`;
  }).join('');
  if(!S.key)el.innerHTML=renderKey();
  else if(S.phase===0)el.innerHTML=renderSetup();
  else el.innerHTML=renderStage();
}

function renderKey(){
  return`<div class="phase-num">Setup</div>
<div class="section-head">Enter your Anthropic API key</div>
<div class="section-sub">Stored in browser session only. ~$0.03–0.08 per complete 7-phase run.</div>
${S.err?`<div class="err">${S.err}</div>`:''}
<div class="key-row"><input class="text-in" id="ki" type="password" placeholder="sk-ant-api03-..." style="font-family:var(--mono);font-size:13px"><button class="btn primary" onclick="setK()">Save</button></div>
<div class="key-note">Get a free key at <a href="https://console.anthropic.com" target="_blank">console.anthropic.com</a></div>`;
}

function renderSetup(){
  const EX=['First-time home buyers Phoenix','Corporate burnout recovery','Freelance web design for restaurants','Dog training for reactive dogs','Bookkeeping for ecommerce sellers','Nutrition for busy parents','Real estate investing basics','Excel and data skills'];
  const Q1=[{v:'yes',t:'Yes — directly solved this',s:'I have results and direct experience.'},{v:'some',t:'Some related experience',s:'Adjacent background, not a direct expert.'},{v:'no',t:'Not yet',s:'New to this, willing to learn fast.'}];
  const Q2=[{v:'yes',t:'Comfortable on live calls',s:'Video/phone calls are fine.'},{v:'some',t:'Somewhat comfortable',s:'Can do it, not my preference.'},{v:'no',t:'Prefer async',s:'Rather deliver in writing or via Loom.'}];
  const Q3=[{v:'live',t:'Live delivery is fine',s:'Calls, sessions, workshops — open to it.'},{v:'async',t:'Prefer written/async',s:'Documents, templates, Loom videos.'}];
  const allOK=S.q1&&S.q2&&S.q3&&S.niche.trim();
  const recMvo=getMvo();
  const mvoInfo=MVO_FORMATS[recMvo];
  const recHTML=allOK?`<div class="mvo-rec"><div class="mvo-rec-label">Recommended MVO format based on your answers</div><div class="mvo-rec-title">${mvoInfo.label} · ${mvoInfo.range}</div><div class="mvo-rec-reason">${mvoInfo.reason}</div></div>`:'';
  return`<div class="phase-num">Phase 0 — start here</div>
<div class="section-head">Your niche and how you work</div>
<div class="section-sub">3 quick questions auto-select the right offer format. Your niche powers every phase after this.</div>
${S.err?`<div class="err">${S.err}</div>`:''}
<textarea id="ni" rows="2" placeholder="e.g. I help first-time home buyers in Phoenix win bids against cash investors...">${S.niche}</textarea>
<div style="margin-top:8px;margin-bottom:12px"><div style="font-size:12px;color:var(--muted);margin-bottom:6px">Quick examples:</div>
<div class="ex-chips">${EX.map(e=>`<button class="chip" onclick="useS('${e}')">${e}</button>`).join('')}</div></div>
<div class="q-card"><div class="q-label">Have you personally solved this problem or done this type of work?</div>
<div class="q-opts">${Q1.map(o=>`<div class="q-opt ${S.q1===o.v?'sel':''}" onclick="setQ(1,'${o.v}')"><input type="radio" ${S.q1===o.v?'checked':''}><div><div class="q-opt-text">${o.t}</div><div class="q-opt-sub">${o.s}</div></div></div>`).join('')}</div></div>
<div class="q-card"><div class="q-label">How do you feel about delivering on a live video call?</div>
<div class="q-opts">${Q2.map(o=>`<div class="q-opt ${S.q2===o.v?'sel':''}" onclick="setQ(2,'${o.v}')"><input type="radio" ${S.q2===o.v?'checked':''}><div><div class="q-opt-text">${o.t}</div><div class="q-opt-sub">${o.s}</div></div></div>`).join('')}</div></div>
<div class="q-card"><div class="q-label">How do you prefer to deliver your work?</div>
<div class="q-opts">${Q3.map(o=>`<div class="q-opt ${S.q3===o.v?'sel':''}" onclick="setQ(3,'${o.v}')"><input type="radio" ${S.q3===o.v?'checked':''}><div><div class="q-opt-text">${o.t}</div><div class="q-opt-sub">${o.s}</div></div></div>`).join('')}</div></div>
${recHTML}
<div class="action-row"><button class="btn primary" onclick="startBuild()" ${!allOK?'disabled':''}>Start — Phase 1: Viability Check →</button>
<span class="hint-txt">${allOK?'Ready':'Complete all 3 questions + enter your niche'}</span></div>`;
}

function renderStage(){
  const ph=S.phase;
  const done=!!S.out[ph];
  const platform=PLATFORMS[S.mvo];
  const recPI=0;
  const INFO=[{},{num:'Phase 1',t:'Viability check',s:'The Five Honest Choices + four business model tests — before building anything.',btn:'Run viability check ⚡'},{num:'Phase 2',t:'Skill audit',s:'What you can actually sell right now. The Mechanism Statement. The Sewer Leak.',btn:'Run skill audit ⚡'},{num:'Phase 3',t:'Buyer match',s:'The ideal first buyer, where to find them, the Hot-Hand Signal, the Negative Buyer.',btn:'Find my buyers ⚡'},{num:'Phase 4',t:'Offer design',s:'The Offer Formula, MVO Scoring, 1:10 Value Ratio, platform routing.',btn:'Design my offer ⚡'},{num:'Phase 5',t:'Fulfillment blueprint',s:'What to do after someone pays. The missing phase in most tools.',btn:'Build fulfillment plan ⚡'},{num:'Phase 6',t:'Sale scripts',s:'Word-for-word outreach, close scripts, COI close, objection responses.',btn:'Generate scripts ⚡'},{num:'Phase 7',t:'14-day sprint',s:'Day-by-day with pre-scaling conditions, success gates, and single-axis pivot instruction.',btn:'Build sprint plan ⚡'}][ph]||{};

  const driftBar=ph>=2?`<div class="drift-bar"><div class="drift-label">Structural drift blocklist — do NOT do any of these until Phase 6</div>
<div class="drift-grid"><div class="drift-item">Build a website or landing page</div><div class="drift-item">Design a logo or branding</div><div class="drift-item">Set up automation or CRM</div><div class="drift-item">Create social media accounts</div><div class="drift-item">Write blog posts or create content</div><div class="drift-item">Build email sequences or funnels</div></div></div>`:'';

  const mvoTag=ph>=2?`<div style="display:flex;align-items:center;gap:8px;margin-bottom:14px;flex-wrap:wrap">
<span style="font-size:12px;color:var(--muted)">MVO:</span>
<span style="font-size:12px;padding:3px 10px;background:var(--gold-dim);color:var(--gold);border-radius:20px;font-family:var(--mono)">${MVO_FORMATS[S.mvo]?.label||''} · ${MVO_FORMATS[S.mvo]?.range||''}</span>
<span style="font-size:12px;color:var(--muted)">${S.niche.slice(0,40)}${S.niche.length>40?'…':''}</span></div>`:'';

  const calcHTML=ph===4?`<div style="margin-bottom:14px">
<div style="font-size:12px;color:var(--muted);margin-bottom:8px">What does this problem cost the buyer unsolved? (1:10 value ratio test)</div>
<div class="ratio-row"><span style="font-size:13px;color:var(--muted)">$</span>
<input class="ratio-in" id="unsolved-in" type="number" placeholder="5000" value="${S.unsolved}" oninput="updateUnsolved(this.value)">
${S.unsolved&&S.price?`<div class="ratio-disp" style="color:${Number(S.unsolved)/S.price>=10?'var(--green)':'var(--amber)'}">Ratio: ${Math.round(Number(S.unsolved)/S.price)}:1</div>`:'<div class="ratio-disp" style="color:var(--hint)">Ratio: —</div>'}</div>
<div style="font-size:11px;color:var(--hint)">Target: 10:1 minimum. Aim for 20-30:1. Price should be 1/10th of what the problem costs unsolved.</div>
<div class="four-paths">${FOUR_PATHS.map((p,i)=>`<div class="path-card ${i===0?'rec':''}">
<div class="path-math ${i===0?'rec':''}">${p.math}</div>
<div class="path-detail">${p.clients} clients · ~${p.outreach} outreach · ~${p.days} days</div>
<span class="path-badge ${p.badge==='rec'?'badge-rec':p.badge==='hard'?'badge-hard':'badge-ok'}">${i===0?'recommended':p.badge==='hard'?'avoid':'workable'}</span>
<div style="font-size:11px;color:var(--hint);margin-top:4px">${p.note}</div></div>`).join('')}</div></div>`:'';

  const platformHTML=ph===4&&done?`<div class="platform-box">
<div class="platform-label">Payment platform for your ${MVO_FORMATS[S.mvo]?.label}</div>
<div class="platform-name">${platform?.name}</div>
<div class="platform-setup">${platform?.setup}</div></div>`:'';

  const outHTML=S.loading?`<div class="out-box loading"><div class="spinner"></div><div class="load-txt">Generating ${INFO.t?.toLowerCase()}…</div></div>`:
    done?`<div class="out-box"><div class="out-content">${md(S.out[ph])}</div></div>`:'';

  const nav=`<div class="action-row">
${ph>1?`<button class="btn" onclick="goP(${ph-1})">← Back</button>`:''}
${!done&&!S.loading?`<button class="btn primary" onclick="run(${ph})">${INFO.btn||'Generate ⚡'}</button>`:''}
${done&&ph<7?`<button class="btn primary" onclick="goP(${ph+1})">Next: ${PHASES[ph+1]?.l} →</button>`:''}
${done?`<button class="btn" onclick="run(${ph})">↺ Regenerate</button><button class="btn" onclick="cp(${ph})">Copy</button>`:''}
${done&&ph===7?`<button class="btn" onclick="dlAll()" style="border-color:var(--gold);color:var(--gold)">↓ Download full package</button>`:''}
${S.err?'':`<span class="hint-txt">${S.niche.slice(0,35)}${S.niche.length>35?'…':''}</span>`}</div>`;

  const keyInline=!S.key?`<div class="divider"></div><div class="key-row"><input class="text-in" id="ki2" type="password" placeholder="sk-ant-api03-..." style="font-family:var(--mono);font-size:13px"><button class="btn primary" onclick="setK2()">Save key</button></div><div class="key-note">Get at <a href="https://console.anthropic.com" target="_blank">console.anthropic.com</a></div>`:'';

  return`<div class="phase-num">${INFO.num||''}</div>
<div class="section-head">${INFO.t||''}</div>
<div class="section-sub">${INFO.s||''}</div>
${S.err?`<div class="err">${S.err}</div>`:''}
${driftBar}${mvoTag}${calcHTML}${outHTML}${platformHTML}${nav}${keyInline}`;
}

window.goP=function(p){if(p===0||p<=S.phase){S.phase=p;S.err='';render();}};
window.setK=function(){const v=document.getElementById('ki')?.value.trim();if(v?.startsWith('sk-')){S.key=v;save();render();}else{S.err='Enter a valid key starting with sk-';render();}};
window.setK2=function(){const v=document.getElementById('ki2')?.value.trim();if(v?.startsWith('sk-')){S.key=v;save();render();}else{S.err='Enter a valid key';render();}};
window.useS=function(s){S.niche=s;render();setTimeout(()=>{const t=document.getElementById('ni');if(t)t.value=s;},10);};
window.setQ=function(n,v){S['q'+n]=v;if(S.q1&&S.q2&&S.q3){S.mvo=getMvo();S.price=getMvoPrice(S.mvo);}render();};
window.startBuild=function(){const t=document.getElementById('ni');if(t)S.niche=t.value.trim();if(!S.niche){S.err='Enter your niche first.';render();return;}S.mvo=getMvo();S.price=getMvoPrice(S.mvo);S.phase=1;S.err='';render();};
window.updateUnsolved=function(v){S.unsolved=v;render();};
window.cp=function(ph){if(S.out[ph])navigator.clipboard.writeText(S.out[ph]).catch(()=>{});};
window.dlAll=function(){
  const lines=[`RISER FIRST DOLLAR FORGE v3 — COMPLETE PACKAGE\n${'='.repeat(60)}\nNICHE: ${S.niche}\nMVO: ${MVO_FORMATS[S.mvo]?.label}\nGenerated: ${new Date().toLocaleDateString()}\n`];
  PHASES.forEach(p=>{if(S.out[p.id])lines.push(`\n${'='.repeat(60)}\n${p.l.toUpperCase()}\n${'='.repeat(60)}\n${S.out[p.id]}\n`);});
  const a=Object.assign(document.createElement('a'),{href:URL.createObjectURL(new Blob([lines.join('\n')],{type:'text/plain'})),download:`fdf-${S.niche.slice(0,20).replace(/\s+/g,'-').toLowerCase()}.txt`});a.click();
};
render();
</script>
</body>
</html>

Full lesson teaching and supporting documents

Open the lesson pages below in order. Each page retains the teaching and supporting sources assigned to this lesson.

  1. 03.4 PROOF GATE: Validated Offer Brief — Part 1 of 1
Find a previously bookmarked teaching or source section

Open the original lesson section — lesson-03-4-d0900-point-1

Open the original lesson section — lesson-03-4-d0900-point-2

Open the original lesson section — lesson-03-4-d0900-point-3

Open the original lesson section — lesson-03-4-d0900-point-4

Open the original lesson section — lesson-03-4-d0900-point-5

Open the original lesson section — lesson-03-4-d0900-point-6

Open the original lesson section — lesson-03-4-d0900-point-7

Open the original lesson section — lesson-03-4-d0900-point-8

Open the original lesson section — lesson-03-4-d0900-point-9

Open the original lesson section — lesson-03-4-d0900-point-10

Open the original lesson section — lesson-03-4-d0900-point-11

Open the original lesson section — lesson-03-4-d0900-point-12

Open the original lesson section — lesson-03-4-d0900-point-13

Open the original lesson section — lesson-03-4-d0900-point-14

Open the original lesson section — lesson-03-4-d0900-point-15

Open the original lesson section — lesson-03-4-d0900-point-16

Open the original lesson section — lesson-03-4-d0900-point-17

Open the original lesson section — lesson-03-4-d0900-point-18

Open the original lesson section — lesson-03-4-d0900-point-19

Open the original lesson section — lesson-03-4-d0900-point-20

Open the original lesson section — lesson-03-4-d0900-point-21

Open the original lesson section — lesson-03-4-d0900-point-22

Open the original lesson section — lesson-03-4-d0900-point-23

Open the original lesson section — lesson-03-4-d0900-point-24

Open the original lesson section — lesson-03-4-d0900-point-25

Open the original lesson section — lesson-03-4-d0900-point-26

Open the original lesson section — lesson-03-4-d0900-point-27

RISER Nation Corp · Build, test, and improve using evidence from your own business.

Additional assigned lesson teaching and sources

These source-linked modules belong to the lessons identified below.

Assigned source documents: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — source 1 ·

RISER-Product-Kill-Criteria-Post-Launch-SOP

Working curriculum for review. Source bodies and distinct teaching have been reviewed in a first pass; remaining dependency, version, accessibility and semantic checks are not certified complete. Commercial examples are educational proposals, not active offers. Assigned lesson 03.4.

RISER NATION CORP — IF YOU AREN’T BUILDING, YOU ARE DESTROYING

Use this complete review process in lesson 03.3 to assess the offer, 03.4 to decide how an offer should change, 07.1 to keep AI-assisted claims tied to evidence, 12.1 to examine performance records, and 12.4 to document the operating decision. These are applications of the same source; the spreadsheet assignments remain authoritative. A diagnosis, a numerical threshold and a management decision are different things. Work through every phase before interpreting the completed record, with urgent source exceptions kept visible.

Apply the Brunson hook, story and offer sequence to explain the decision clearly. Use Hormozi’s perceived-value factors to examine the promise, evidence, time and effort involved. These are educational applications, not endorsements or guaranteed outcomes; original source attributions and limitations remain below.

Assess an underperforming offer and preserve what the evidence teaches

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Assess an underperforming offer and preserve what the evidence teaches

Separate the next decision from the past investment

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Separate the next decision from the past investment

Imagine an operator reluctant to review an offer after months of work. This is an illustrative scene. The time already spent feels like a reason to keep investing, even though the next buyer’s experience and the next use of resources are separate questions.

This source proposes a system for reviewing an offer after launch: diagnose, check urgent conditions, score, choose a response, preserve records and consider any future version. Its repeated instruction to kill an offer means retiring that offer, not deleting its evidence or abandoning existing buyers.

The source attributes rules to Kennedy, Hormozi and Brunson about learning from failed offers and improving the offer before adding traffic. The quoted-style attributions, $50,000-versus-$5,000 example and claims about successful operators are not independently substantiated here. The relevant teaching theme is to connect the promise, delivery, evidence and offer ladder rather than treat more promotion as a solution to every problem.

This is source-based curriculum instruction, not a recommendation to close a real business, change advertising, issue refunds or send emails. The original operational instructions remain study material. The thresholds contain conflicts and are not a universally validated decision system.

Identify six forms of sunk-cost reasoning

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Identify six forms of sunk-cost reasoning

The table distinguishes prior time, identity attachment, praise without purchases, repeated optimism, existing testimonials and money already spent on ads. For each, ask what future decision the available evidence supports. Preserve useful expertise and truthful records without assuming the current format must survive.

Sunk Cost BiasHow It ManifestsThe Rational Counter
Time investment bias'I spent 3 months building this. I can't just kill it.'The 3 months are gone regardless of what you decide today. The only question is whether the next 3 months goes into a working offer or a broken one.
Identity attachment'This offer represents my core methodology. Killing it feels like killing part of myself.'The methodology survives the offer. Rename the mechanism. Repackage the IP. Kill the specific execution that is not working — not the expertise behind it.
Audience validation hunger'People say they love this offer even if they're not buying.'Compliments are not revenue. Kennedy: 'Validate with dollars, not compliments.' If the audience loves it and will not pay for it, the market has spoken.
Optimism bias'I just need to fix one more thing and it will work.'Define in advance what 'one more thing' means. If you have already made three 'one more thing' changes and the metrics have not moved, the problem is structural — not fixable with incremental iteration.
Social proof protection'I have testimonials from this offer. If I kill it, I lose the social proof.'Testimonials belong to the buyer and the result, not the offer format. Testimonials from a killed offer can be repurposed in a new, better offer that serves the same transformation.
Sunken ad spend'I've spent $8K in ads to prove this. I need to recoup that before stopping.'The $8K is already spent. Continuing to run an unworkable offer to recoup sunk ad cost will result in spending $16K to prove what $8K already proved. Cut the loss now.

The source proposes setting thresholds before launch and retaining them in a record. That can make the intended review criteria visible. It does not justify following a flawed rule after contradictory evidence appears. Three unsuccessful changes do not prove a structural cause. Praise without purchases does not by itself identify why people did not buy. Reusing testimonials requires accurate context; later source salvage rules are narrower than this opening discussion.

Match the review to the offer’s stage

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Match the review to the offer’s stage

The source distinguishes launch, validation, traction, scale and decline. Read all dates and stage evidence below. Calendar age alone does not prove an offer is declining, and day 180 belongs to both the stated scale and decline ranges.

Stage 1
Launch
Days 1–14
Proof of market response

Stage 2
Validation
Days 15–45
Conversion rate signal

Stage 3
Traction
Days 46–90
Unit economics viability

Stage 4
Scale
Days 91–180
Paid traffic profitability

Stage 5
Decline
180+ days
Renewal and ascension rate

StagePrimary QuestionKey MetricDecision at This Stage
Stage 1 — Launch
(Days 1–14)
Is anyone responding to this offer at all?First sale: did any paying buyers emerge without heavy persuasion from a warm audience within 14 days?If zero sales from a warm list of 500+ after a proper 7-day launch sequence: trigger Stage 1 Kill Assessment. Do not move to paid ads.
Stage 2 — Validation
(Days 15–45)
Is the conversion rate statistically viable for the offer type?Cold conversion rate after 200+ unique visitors. Warm conversion rate after full email sequence delivery to warm list.If cold conversion remains below threshold after 300+ visitors and one round of copy iteration: trigger Full Kill Assessment (Phase 3 scorecard).
Stage 3 — Traction
(Days 46–90)
Do the unit economics work?Cost Per Acquisition vs. Offer Price ratio. Refund rate. Support cost per buyer. LTV:CAC ratio.If unit economics fail the Stage 3 thresholds after genuine traffic investment: trigger Full Kill Assessment. Do not scale.
Stage 4 — Scale
(Days 91–180)
Is this offer still working as ad spend increases?ROAS by platform. CPA trend (improving, flat, or worsening). Ascension rate to next tier.If ROAS declines below 2.0x and CPA exceeds 35% of offer price for 21+ consecutive days: trigger Scale-to-Iterate or Kill decision.
Stage 5 — Decline
(180+ days)
Is this offer earning its continued existence?Month-over-month revenue trend. Mechanism freshness (see Forensic Audit SOP). Competitive landscape shift.If revenue has declined 40% from peak for 60+ consecutive days with no identifiable external cause: trigger Full Kill Assessment or Relaunch Protocol.

Launch asks about response from a warm audience; validation asks about conversion evidence; traction examines acquisition, refund and support economics; scale considers paid performance and advancement; decline examines a sustained revenue change and possible outside causes.

The launch assessment names a seven-day sequence, while the later hard trigger uses fourteen days. Validation mentions two hundred visitors and then three hundred after copy work. Neither count guarantees statistical significance. Preserve the sample, conversion count and observation window rather than treating any smaller sample as meaningless or any larger one as conclusive.

Phase 1 — Examine six fixable problems

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Phase 1 — Examine six fixable problems

Before the ordinary scorecard, the source asks whether traffic is sufficient, traffic awareness matches the page, headlines were tested, the email sequence was completed, a guarantee was tested and the offer stack was clearly presented. These are different hypotheses. A weak result does not establish which hypothesis is correct.

Fixable CauseDiagnostic QuestionEvidence That This Is the ProblemMinimum Fix & Retest Window
Traffic volume insufficientHave at least 200 unique cold visitors seen this offer (300+ preferred for statistical significance)?Conversion rate data is based on fewer than 200 unique cold visitors. Any rate below 200 visits is noise, not signal.Drive 200+ unique visitors through organic promotion or minimal paid spend ($300–$500 test budget) before assessing cold conversion rate.
Traffic source mismatchIs the traffic source aligned with the awareness level the offer page assumes?Cold traffic is landing on a page written for warm or hot traffic. Sales page assumes prior relationship or context the visitor does not have.Audit the first 500 words of the sales page for assumed context. Rewrite the lead assuming zero prior awareness. Retest for 7 days.
Copy — headline not testedHas the headline been A/B tested with at least 2 meaningfully different angles?Single headline has been running since launch. No split test data.Write 3 headline variants (pain hook, desire hook, mechanism hook). Run split test for minimum 14 days or 200 visitors per variant. Decision only after test concludes.
Email sequence — not complete or not deployedHas the full 14-day email sequence been deployed to the warm list?Fewer than 10 emails have been sent, or the sequence was stopped early, or the list size was fewer than 200 subscribers.Complete the full 14-day sequence to a list of 200+ subscribers. Assess warm conversion rate after the sequence concludes.
Guarantee — not sufficiently strongHas a meaningful guarantee been tested against the current version?Current guarantee is a basic 30-day money-back with no conditions or commitment language. Has never been upgraded.Test the Level 3 guarantee (result-based conditional) against current guarantee for 14 days. If conversion lifts 15%+ — guarantee was the problem, not the offer.
Offer stack — not presented clearlyHas the full value stack (bonuses, mechanism, deliverables, guarantee, social proof) been tested in the Brunson Stack Slide format?Sales page does not have a visual offer stack with individual bonus values listed. The offer is described narratively without a stacked presentation.Rebuild the sales page's offer section as a Stack Slide: list each component, assign a standalone value, show total value vs. asking price. Retest for 14 days.
Diagnostic ItemStatusRetest WindowCleared?
Minimum 200 unique cold visitors have seen the offer☐ Yes ☐ NoN/A if yes; drive traffic first if no☐
Traffic source awareness level matches sales page assumption☐ Matched ☐ MismatchFix + 7 days☐
Minimum 2 headline variants A/B tested☐ Yes ☐ Not yet14 days / 200 visitors per variant☐
Full 14-day email sequence deployed to 200+ warm subscribers☐ Yes ☐ Not yetDeploy and wait for sequence to complete☐
Level 3 guarantee tested against current guarantee☐ Yes ☐ Not yet14 days split test☐
Stack Slide offer presentation tested☐ Yes ☐ Not yet14 days after implementation☐

For traffic fit, the source proposes reviewing the first five hundred words for assumed familiarity. For headlines, it asks for at least two angles but then suggests three variants: pain, desire and mechanism. Its fourteen-day-or-two-hundred-visitors wording differs from later minimum-duration and sample requirements. Record the actual test conditions rather than silently choosing an interpretation.

The guarantee example calls a conditional result-based guarantee Level 3 and proposes a fourteen-day test. The full guarantee framework is a separate dependency; a measured lift alone does not isolate cause. The Stack Slide requires a component list and stated values, but those values need a defensible basis. The $300–$500 traffic test is a source proposal, not spending authorized by this lesson.

The instruction to finish every diagnostic before assessment must be read alongside urgent exceptions. Waiting for sample size or an experiment cannot be used to ignore evidence that an offer is undeliverable or causing an identified problem.

Phase 2 — Read all seven hard-trigger conditions precisely

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Phase 2 — Read all seven hard-trigger conditions precisely

The source labels these automatic, but its own timelines and consequences vary. Preserve each threshold, qualifying sample and proposed response in the original table.

TriggerThresholdRationaleAction Timeline
HK-1: Catastrophic refund rateRefund rate exceeds 30% of total sales after a minimum of 20 salesA refund rate above 30% indicates a systematic failure in promise delivery or a fundamental mismatch between what was sold and what was received. This is not fixable with copy changes — the offer is broken at the product level.Kill within 48 hours. Pause all ads immediately. Begin Post-Kill Protocol.
HK-2: Legal or compliance violation identifiedAny confirmed violation of FTC guidelines, TCPA regulations, platform terms of service, or applicable consumer protection lawLegal exposure compounds exponentially the longer a non-compliant offer remains live. Compliance violations can result in platform bans, financial penalties, and reputational damage that far exceeds any revenue from the offer.Kill within 24 hours. Consult legal counsel before relaunch. Do not attempt to fix and relaunch without written legal clearance.
HK-3: Fulfilment breakdown — unable to deliverYou are materially unable to deliver the core promise of the offer to existing or new buyersContinuing to sell an offer you cannot deliver is both legally and ethically indefensible. Fulfilment breakdown triggers immediate offer suspension, not iteration.Suspend new sales within 24 hours. Communicate with existing buyers within 48 hours. Full refund offered to all buyers unable to receive delivery.
HK-4: Zero warm conversion after complete sequenceZero sales from a warm list of 500+ after a full 14-day email sequence has been deployed, with at least 25% open rate confirmedA 25%+ open rate confirms the sequence was read. Zero purchases from 500+ warm subscribers who read the sequence means the offer is rejected by people who know, like, and trust you. This is the harshest market signal available.Kill within 7 days. Do not move to cold paid traffic. Begin Post-Kill Protocol.
HK-5: Cold conversion remains below 0.3% after diagnostic completeCold conversion rate remains below 0.3% after all six Pre-Kill Diagnostic fixes have been applied and retested over a minimum of 300 unique cold visitors0.3% is the absolute floor for any offer that can ever be made profitable through paid advertising. Below 0.3% with a clean diagnosis means the offer itself is the problem — not the copy, not the traffic.Kill within 14 days of confirmed diagnostic completion. Do not spend further on ads.
HK-6: Negative NPS after 20+ responsesNet Promoter Score falls below -10 after a minimum of 20 buyer survey responsesAn NPS below -10 means your detractors significantly outnumber your promoters. This offer is actively generating negative word-of-mouth at a rate that will compound against every future launch.Kill within 7 days of confirmed NPS threshold. Conduct emergency buyer interviews. Do not run this offer again without rebuilding from scratch.
HK-7: CPA exceeds 60% of offer price after $3,000+ ad spendCost Per Acquisition exceeds 60% of the offer's sale price after at least $3,000 has been spent testing across at least 2 different audience typesAt a CPA of 60% of revenue, there is no viable business. After refunds, fulfilment costs, and payment processing fees, the unit economics are deeply negative and cannot be corrected by optimising an offer that the market is systematically rejecting.Kill paid spend immediately. Offer may continue organically if organic conversion is strong. If organic also fails, full kill.

HK1: this document uses refunds exceeding thirty percent after at least twenty sales. The Weekly Review refers to a twenty-percent next-week hard-trigger warning. Those do not describe the same rule. The numerator, buyer cohort and refund window must also be specified.

HK2 and HK3: the source names legal, platform and delivery issues, with different suspension, communication and review steps. These statements do not establish current law or a finding about a real offer. Any actual legal or platform assessment requires appropriate current evidence; the source’s named regimes and written-clearance instruction are not a substitute for that assessment.

HK4: a twenty-five-percent open rate does not prove that every one of five hundred subscribers read the sequence. Zero recorded purchases also does not isolate the cause. HK5: conversion below 0.3 percent is not universally unprofitable independently of price, cost and subsequent revenue. HK6: the specified NPS response count and threshold are a source rule, not proof of the views of every buyer.

HK7: the row permits organic continuation if it works, even while stopping paid activity. That is different from closing the whole offer. CPA at sixty percent of price alone does not establish all unit economics. The introduction’s immediate/forty-eight-hour wording conflicts with rows allowing twenty-four hours, seven days or fourteen days. Keep each scope explicit.

Phase 3 — Use the fifteen-dimension, sixty-point scorecard

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Phase 3 — Use the fifteen-dimension, sixty-point scorecard

Each dimension here runs from zero to four, for a total from zero to sixty. The monthly scorecard uses one to five and a maximum of seventy-five. Weekly colors are a third system. None can be substituted for the other.

Read every band in the table. Preserve raw measurements and unresolved boundaries beside the assigned score.

Dimension0 Points — Critical Failure1 Point — Below Viable2 Points — Viable3 Points — Strong4 Points — ExcellentYour Score
Cold conversion rateBelow 0.5%0.5–0.9%1.0–1.9%2.0–3.9%4.0%+___
Warm conversion rateBelow 2%2–4%5–9%10–19%20%+___
Refund rateAbove 20%15–20%8–14%3–7%Below 3%___
Programme completion rateBelow 25%25–44%45–59%60–74%75%+___
Specific result testimonials (per 10 buyers)012–34–56+___
Email open rate (14-day sequence)Below 15%15–19%20–29%30–39%40%+___
Support tickets per buyer (per 30 days)Above 85–83–41–20–1___
CPA as % of offer priceAbove 50%40–50%25–39%15–24%Below 15%___
Ascension rate to next tierBelow 3%3–5%6–9%10–14%15%+___
Buyer NPS scoreBelow -10–10 to 01–2021–4041+___
Month-over-month revenue trendDeclining >20%Declining 5–20%Flat (±5%)Growing 5–19%Growing 20%+___
Value Equation audit — Dream Outcome score1–2 (broken)3–4 (weak)5–6 (adequate)7–8 (strong)9–10 (excellent)___
Value Equation audit — Perceived Likelihood score1–2 (broken)3–4 (weak)5–6 (adequate)7–8 (strong)9–10 (excellent)___
Value Equation audit — Time Delay score1–2 (broken)3–4 (weak)5–6 (adequate)7–8 (strong)9–10 (excellent)___
Value Equation audit — Effort & Sacrifice score1–2 (broken)3–4 (weak)5–6 (adequate)7–8 (strong)9–10 (excellent)___

Cold and warm conversion: keep source populations and attribution separate. The fractional gaps between some bands need a precision rule. Refunds and completion: define buyer cohort and delivery milestone before comparing rates; requests, processed refunds and completed programs are not automatically equivalent measures.

Testimonials: the source normalizes specific-result testimonials per ten buyers, but does not explain rounding or small cohorts. Use truthful, documented results. Email opens: retain the fourteen-day sequence scope and aggregation method; an open is not proof of comprehension.

Support: the bands zero-to-one and one-to-two overlap at one ticket. The period here is thirty days, unlike the monthly scorecard’s weekly support dimension. CPA: preserve price and campaign definitions rather than comparing gross revenue ratios as if they were identical. Ascension: the window and cohort are not fully specified in this row.

NPS: retain the response count and method; do not infer representativeness from a score. Revenue trend: the plus-or-minus-five-percent flat band overlaps growing or declining five percent. A trend is an observation, not a causal diagnosis.

Four Value Equation audit dimensions: the source maps one-to-ten ratings of Dream Outcome, Perceived Likelihood, Time Delay, and Effort/Sacrifice into zero-to-four points. It does not provide their full rating rubric here. Clarify that a favorable rating for delay or effort concerns reduced burden; do not invent source scores from the dimension names. The treatment of missing data is also unspecified.

Read the qualifiers as well as the total

The four decision panels below include conditions beyond the sum. Their proposed operating actions remain source content.

KILL
Score 0–24 (out of 60) — or any Hard Kill Trigger fired regardless of score
The offer has failed across multiple dimensions and cannot be fixed through incremental iteration. The structural problems are too numerous or too deep. Kill the offer using the Clean Kill Process (Phase 5). Extract all intelligence using the Post-Kill Protocol (Phase 6).

PIVOT
Score 25–34 — with 3 or more dimensions at 0 or 1
The core premise or mechanism may be viable but the execution is failing broadly. Iteration will not fix this — it requires a structural change to the offer format, the target avatar, the pricing tier, or the delivery mechanism. A pivot is not a kill — it is a rebuild that preserves the underlying insight.

ITERATE
Score 35–44 — with no more than 2 dimensions at 0 or 1
Specific, diagnosable problems exist but the offer has real signal. The fix is targeted — not a rebuild. Identify the 2–3 lowest-scoring dimensions. Apply the specific iteration protocol for each. Retest over 30 days. Re-run the scorecard.

SCALE
Score 45–60 — with no dimension below 2
The offer is working. Unit economics are viable. Buyers are getting results. The correct move is to add fuel: increase ad spend by 20%/day maximum, add a second traffic source, launch the affiliate programme for this offer, activate the ascension sequence to the next tier.

A total of 39 with three dimensions at 1 can fail the Iterate qualifier. A total of 56 with one dimension at 0 can fail the Scale qualifier. The source does not assign a replacement category for every such case. Flag the unclassified result rather than forcing it into a convenient band.

The Scale panel’s twenty-percent-per-day spend increase, extra traffic source, affiliate launch and ascension activation are proposals, not actions taken here or guarantees of sustainable growth. A low total alone does not establish permanent structural failure.

Phase 4 — Distinguish retirement, structural change and targeted iteration

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Phase 4 — Distinguish retirement, structural change and targeted iteration

The source’s distinction concerns what survives. Its kill definition retires both offer and mechanism; a pivot preserves an insight while changing delivery, audience, price or positioning. Read all five scenarios, including their different proposed relaunch periods.

ScenarioCorrect DecisionWhat SurvivesWhat DiesRelaunch Timing
The offer fails but exit interviews reveal that buyers wanted the transformation and understood the mechanism — they just could not implement it as designedPIVOTThe mechanism name. The core insight. The buyer language mined. The testimonials (partial).The delivery format and price point. The sales page structure. The current fulfilment model.90 days minimum. Rebuild the delivery model (e.g. self-paced course → live cohort, or group → done-for-you).
The offer fails and exit interviews reveal that buyers did not understand what they were buying or found the mechanism irrelevant to their actual problemKILLThe buyer language (negative avatar data). The email list of buyers. The lessons about what does NOT work.Everything. The mechanism name, the copy, the delivery model, the entire frame. Start fresh.No automatic relaunch. Return to MVO Playbook Phase 1 with accumulated data as the brief.
The offer fails and the refund messages consistently describe expecting something fundamentally different from what was deliveredPIVOT (copy pivot)The delivery and mechanism. The results that existing buyers did achieve.The sales page positioning, the headline, the promise language. The gap was in how it was sold, not what was delivered.30 days. Rebuild sales copy from scratch using exit interview language. Keep delivery identical.
The offer fails and the primary issue is price — buyers consistently cite 'too expensive' or conversion rate is strong at lower price points in A/B testingPIVOT (price pivot)The entire offer. The mechanism. The delivery. The copy.The price point. The implied buyer tier (you may be serving a different income bracket than you targeted).2 weeks. Reprice and relaunch. Monitor whether the new buyer profile changes support load and completion rate.
The offer works for a specific sub-segment but not for the broad avatar it was positioned forPIVOT (avatar pivot)The mechanism. The delivery. The results from the working sub-segment.The broad positioning, the broad ad targeting, the generic sales page copy.4 weeks. Narrow the positioning to the sub-segment where results are consistent. Rebuild copy for that specific avatar.

Buyer evidence should inform the distinction, but a scenario label does not prove its suggested cause. The pivot windows of ninety days, thirty days, two weeks and four weeks have different scopes from the later ninety-day killed-offer rule. Preserve that distinction rather than impose one universal delay.

The Iterate panel says two-to-three low dimensions, while the later rule permits at most two. It proposes one fix for each and a thirty-day reassessment. The following six intervention rows use fourteen days, the next cohort, thirty days or sixty days; those are not all interchangeable.

Failing DimensionSpecific Iteration ActionRetest MetricRetest Window
Cold conversion below 1%A/B test a new headline with a Pain-Acute hook derived from buyer language mining. Do not change any other element on the sales page during the test.Cold conversion rate. Minimum 200 unique visitors per variant.14 days minimum
Completion rate below 45%Add a mandatory 72-hour Quick Win to Module 1. The Quick Win must produce a visible, shareable output. Add accountability check-in at hour 48.Module 1 completion rate. Dropout rate at Module 1 boundary.Next cohort cycle
Refund rate above 10%Audit the sales page promise against the programme's actual deliverables. Identify the specific gap and fix either the copy (reduce the promise to match delivery) or the delivery (expand the deliverable to match the promise).Refund rate over the following 30 days. Refund root cause codes.30 days
NPS below 20Conduct 5 buyer interviews in the first week after purchase. Identify the gap between their expectation at purchase and their experience in delivery. Fix the single most-cited gap.NPS at next survey cycle (30 days). Support ticket volume.30 days
Ascension rate below 6%Rewrite the ascension sequence. Change the timing of the ascension offer presentation. Test presenting the Core Offer at Day 14 post-MVO-purchase instead of Day 21 or Day 30.Ascension rate over 60 days.60 days
CPA above 35% of pricePause the lowest-performing ad set. Test a new creative format (video vs. static). Test a new audience segment derived from your best-converting buyers' lookalike.CPA over 14 days of new creative.14 days

A headline test, first-win change, promise/delivery repair, buyer interviews, ascension timing test and acquisition change target different observations. Changing only two dimensions does not automatically establish causality; the CPA row itself changes several elements. Retain the test plan and limits of attribution.

Phase 5 — Preserve buyers and records when studying closure

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Phase 5 — Preserve buyers and records when studying closure

The source closure process assigns an action, owner and output to each stage. Preserve all nine rows, including the later seven- and fourteen-day follow-ups. They extend beyond the stated seventy-two-hour sequence.

Hour / DayActionOwnerOutput
Hour 0–4Pause all paid advertising for the offer. Immediately. No exceptions. Every additional dollar spent on a killed offer is wasted.Ads manager / founderAll active ad campaigns paused. Budget released.
Hour 4–8Deactivate or archive the offer page. Redirect the URL to either the homepage, an appropriate alternative offer page, or a 'This offer is no longer available' page that includes a waitlist opt-in.Tech / founderOffer page redirected. URL not returning 404.
Hour 8–16Deactivate the email sequence associated with the offer. Any new subscribers who triggered the sequence after the kill decision will not receive offer-specific emails.Email platform / founderEmail sequence deactivated. Active sequence recipients noted.
Day 1Send the Buyer Communication Email (see template below) to all current buyers who are within their active delivery window. Explain the situation with clarity and without corporate language.Founder (personal tone required)Buyer communication sent. Inbox monitored for 48 hours.
Day 1–2Pull all data exports: buyer list, refund records, support ticket archive, community posts, email reply archive, exit interview recordings. Store in designated archive folder.Ops / founderFull data archive in Google Drive / Airtable. Nothing deleted.
Day 2Cancel or pause any affiliate commissions on new sales. Notify affiliates of the offer closure with a professional explanation and, where appropriate, an alternative offer to promote.Affiliate manager / founderAffiliate notification sent. Pending commissions reviewed.
Day 3Complete the Post-Kill Intelligence Form (Phase 6 template). While the experience is fresh. Do not wait.FounderPost-Kill Intelligence Form filed in Airtable.
Day 7 (post-kill)Review the Buyer Communication inbox. Address any unresolved buyer concerns. Process any refund requests that arrived in the kill window.Support / founderAll buyer communications resolved.
Day 14 (post-kill)Run the Negative Avatar Profile check: do any refund patterns from this offer need a new profile created? Update Negative Avatar Airtable accordingly.FounderNegative Avatar updates complete.

The checklist says deactivate email within eight hours, while the sequence says hours eight to sixteen. Immediate ad language and longer closure windows also need reconciliation. Pausing commissions, notifying affiliates, redirecting pages and offering refunds are consequential source actions; none has been performed here.

The email template contains two alternative explanations and concrete promises about access, refunds and transitions. Read both versions. Actual dates, delivery facts, permissions and obligations must be established before any use. Do not copy a promise that cannot be fulfilled. The source asks for a plain personal message rather than a branded template; that preference does not verify the message’s facts.

Buyer Communication Template
Subject: An important update about [Offer Name]

Hi [First Name],

I want to be straight with you about something.

We have decided to retire [Offer Name] effective [date]. This means we will not be accepting new students, and I want to explain why — and what it means for you specifically.

[One of the following, as applicable:]

Version A (Product not delivering promised results): After reviewing the results our students have achieved and being honest about where the gaps are, I am not comfortable continuing to sell this offer in its current form. You deserve better than I built.

Version B (Strategic pivot): We are focusing our energy on [New Offer / Direction], which does [specific thing] better than this offer could. This is a strategic decision, not a quality issue.

What this means for you:

If you are currently in the programme — you will continue to have access to everything you purchased until [specific date]. Nothing is being removed from your account.

If you would like a refund — I will honour a full refund regardless of where you are in the programme and regardless of whether you are within the standard refund window. Email [email] with 'Refund Request' in the subject line.

If you would like to move to [Alternative Offer] — [specific transition offer if applicable].

I am sorry if this is disruptive. It is the right call.

[Your name]

Phase 6 — Record what happened without claiming more than the evidence shows

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Phase 6 — Record what happened without claiming more than the evidence shows

The source asks for intelligence extraction within three days. It claims failure teaches more than success and that markets reveal every needed answer. Treat those as rhetoric; a failed offer may still leave major questions unresolved.

The form has nineteen fields, not the checklist’s eighteen. Preserve every one below, including the blank kill-date cell. Distinguish observed totals, interpretation, preserved assets and next-step eligibility.

FieldWhat to Document
Kill Record IDAutonumber — auto-generated
Offer name and versionFull offer name + which version was killed (V1, V2, etc.)
Kill date
Kill trigger typeHard Kill (specify HK code) / Scorecard-based Kill (record final scorecard score) / Strategic Kill
Final scorecard scoreRecord all 15 dimension scores and the total. This is the permanent benchmark.
Total buyersHow many people purchased before the kill
Total revenueGross revenue generated before kill
Total refundsNumber and percentage
Net revenueAfter refunds
Total ad spendAll paid acquisition costs associated with this offer
ROAS (if applicable)Net revenue / ad spend
The single most important lessonIn one sentence: what did this offer teach you that you did not know before? This should be specific enough to change a specific future decision.
The copy goldTop 5 buyer language phrases mined from this offer's data (verbatim). These survive the kill and go directly into the next offer's copy brief.
The assumption that was wrongWhat did you believe about the market, the buyer, or the mechanism that this offer's failure proved incorrect?
The Negative Avatar definedWhich Negative Avatar archetype was most commonly attracted? What specific language attracted them? (Links to Negative Avatar Airtable table)
The Next Problem SignalDid this offer's buyers reveal a Problem B — the thing they needed next that you have not yet built? Document it here.
What the market actually wantedBased on all available data — what offer would have served this audience correctly?
What was preservedList any copy assets, mechanism names, buyer relationships, or marketing angles that survive the kill and are being transferred to the next offer brief.
Relaunch eligibilityYes — conditions defined / No — full retirement / Pivot — specify the pivot direction

Net revenue after refunds is not profit. Its ROAS definition uses net revenue divided by ad spend, which needs aligned periods and a zero-spend rule. The five buyer phrases should retain context and provenance. A proposed ProblemB is a research lead, not proof of demand for a new product.

The six salvage categories cover language, testimonials, recordings, page sections, email openings and a preserved mechanism. Read their criteria and destinations in full.

Asset TypeSalvage CriteriaWhat to Do With It
Buyer language from email repliesAll tagged phrases from Phase 3 of the Forensic Audit (PAIN-ACUTE, PAIN-CHRONIC, DESIRE-HIDDEN, OBJECTION tags)Move to the Master Language Mining database. Tag source as 'Kill Salvage — [Offer Name]'. These phrases are valid regardless of whether the offer worked.
Testimonials from buyers who got resultsAny testimonial where the buyer achieved a specific, measurable result that can be attributed to the mechanismMove to proof library. Can be used in the next offer if the mechanism is preserved. Cannot be used if the mechanism is killed and replaced.
Exit interview recordingsAll recordingsArchive in Google Drive. Tag with date and offer name. Transcripts extracted and stored in language mining database.
Sales page copy — performing sectionsSections of the sales page where heatmap data showed high engagement, low bounce, or direct scroll-to-CTA behaviourSave as 'High-engagement copy segments' in copy swipe file. Even in a failed offer, some sections worked.
Email sequence — high-open-rate emailsAny email in the 14-day sequence that achieved above 35% open rateArchive the subject line and the opening paragraph. These are proven attention-capturing elements independent of the offer.
The mechanism name (if not killed)If the pivot/iterate decision preserved the mechanism name — the name goes directly into the next offer briefTransfer to next offer's MVO Playbook Phase 2 document as the named mechanism.

Later testimonial reuse requires a preserved mechanism, narrowing the opening’s broader language. Accuracy, context and permission still matter. Heatmap engagement or email opens above thirty-five percent do not establish that a copy segment caused a sale. Retain raw records alongside any interpretation; do not delete original files as part of an instructional exercise.

Phase 7 — Examine every relaunch requirement

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Phase 7 — Examine every relaunch requirement

The source requires ninety days off market and all six conditions below before a killed offer returns. Elapsed time or fading buyer memory does not demonstrate that earlier problems have been resolved. Evidence of actual change matters.

RequirementWhat It MeansHow to Evidence Completion
Minimum 90-day gap from kill dateThe offer has been off the market for at least 90 calendar daysKill date in Airtable Kill Record. Today's date minus kill date is ≥ 90.
Root cause identified and addressedThe specific reason the offer failed (from Phase 5 Kill Record, 'The assumption that was wrong' field) has been specifically addressed in the rebuilt offerUpdated offer brief documents the specific change made in response to the identified root cause. One change per root cause — not vague 'improvements.'
New buyer interviews conductedMinimum 3 new buyer interviews with the intended target avatar conducted after the kill — not from the original buyer poolInterview transcripts dated after the kill date. Must include at least one person who was NOT a buyer of the original offer.
Offer rebuilt from copy brief, not from the originalThe new version was written from a fresh copy brief using the Post-Kill intelligence, not by editing the original sales pageNew copy brief document in Airtable dated after kill. If the sales page draft clearly resembles the original with light edits — it is not a rebuild. Start over.
Negative Avatar profiles from original offer are activeThe Negative Avatar Profiles created from the original offer's data are deployed in the new offer's repulsion system: 'Not for you' copy, ad exclusions, and application gatesNew offer's sales page 'Not for you' section includes at least one bullet per active Negative Avatar Profile. Ad exclusion list updated.
Beta cohort run before public relaunchA minimum of 5-buyer paid beta is run on the rebuilt offer before the public sales page goes liveBeta Testing SOP records in Airtable. Beta scorecard passed (Go/No-Go thresholds met). Beta dated after kill.

The interview condition says to use people outside the original buyer pool, but the evidence column requires only one nonbuyer among three interviews. Preserve that conflict. The root-cause reference points to Phase 5 although the intelligence form appears in Phase 6. A new brief, active suitability exclusions and a five-buyer paid beta are proposed requirements with separate source dependencies, not completed artifacts.

The source lists five permanent-retirement conditions below. They are its decision proposals; counts of complaints or reviews do not establish guilt, and competition alone does not prove that a specific offer cannot differentiate.

• The market the offer was designed for no longer exists or has been commoditised to the point where profitable differentiation is not achievable.

• The primary mechanism has been replicated by a better-resourced competitor and can no longer be positioned as differentiated.

• The offer generated three or more legal complaints, regulatory reviews, or FTC scrutiny — regardless of their outcome. The reputation risk of the specific offer persists beyond the compliance resolution.

• The Post-Kill Intelligence Form's 'assumption that was wrong' field reveals that the market does not actually have the problem the offer was designed to solve. This is not a copywriting problem — it is a market existence problem.

• The offer's total cost (ad spend, time, legal, support) exceeded its total revenue — and the rebuilt version cannot be demonstrated via the beta to achieve different unit economics.

The mechanism definition and actual audience evidence must support any future judgment. The source’s assertion about costs exceeding revenue still requires a clear period and treatment of time and other costs. A beta may inform a revised assessment without proving all future economics.

Phase 8 — Review inactive offers without confusing silence with failure

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Phase 8 — Review inactive offers without confusing silence with failure

The source calls an offer a zombie when it remains technically live with little activity while consuming attention, attracting unsupported buyers and confusing the offer path. These are proposed failure modes, not conclusions from low traffic alone.

The first-Monday quarterly audit checks four criteria. Read the complete thresholds and stated reasons below.

Zombie CriterionThresholdWhy It Qualifies
Revenue below floor for consecutive monthsBelow $500 gross revenue for 3 consecutive months for any offer priced above $97At this revenue level, the offer is not covering its own operational overhead — support, payment processing, platform fees, and email sends.
No new buyers in 60+ daysZero new purchases in 60+ consecutive daysAn offer with no buyers for 60 days is effectively dead. It is consuming a sales page URL, a purchase flow, a delivery system, and an email sequence for zero return.
Traffic below viable testing threshold for 90 daysFewer than 50 unique visitors per month for 90+ consecutive daysBelow 50 monthly visitors, there is no data being generated. The offer is neither working nor failing — it is simply invisible. That is not a business; it is an archive.
No active promotional activity for 60 daysNo email campaigns, no ad spend, no organic content referencing the offer in 60+ daysIf you have not promoted an offer in 60 days, you have already informally killed it. Formalise that decision with the Clean Kill Process and archive the assets properly.

The $500 floor applies to offers priced above $97; exactly $97 is not specified. That revenue amount is not a universal overhead break-even point. No promotion or few visitors can explain why there is little evidence; it does not by itself prove that the product is unwanted.

The five remediation steps below call for an immediate scorecard, one change, one hundred warm visitors and reassessment. They remain a proposed protocol.

  1. Run the Kill Assessment Scorecard (Phase 3) immediately on the flagged offer. If the score is below 25, skip remediation — proceed directly to Kill.
  1. If the scorecard score is 25 or above, identify the single highest-leverage change that could revive the offer within 30 days. One change only.
  1. Implement the change and drive minimum 100 unique warm visitors to the offer page within the 30-day window.
  1. At day 30, re-run the scorecard. If the score has not improved by at least 8 points — kill the offer.
  1. If the score has improved by 8+ points but is still below Scale threshold — run the iterate protocol for one more 30-day cycle only. Two cycles maximum before kill.

A starting score of 53 or higher cannot improve by eight points on a sixty-point scale. The rule lacks an exception even for an already-high score. A score reaching 45 also still needs the no-dimension-below 2 qualifier to meet its stated Scale definition. The second-cycle baseline and decision details are not fully specified. Do not force these incomplete rules into an automatic closure decision.

Preserve the separate database schema

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Preserve the separate database schema

The Kill Records table contains twenty-two fields, which is distinct from the nineteen-field intelligence form. Compare each specification below with the data that must be retained.

FieldTypeNotes
Kill Record IDAutonumberFormat: KILL-[Year]-[Seq]. E.g. KILL-2026-003
OfferLink → Offers tableThe offer that was killed
Kill dateDate
Kill typeSingle selectHard Kill (HK-1 through HK-7) / Scorecard Kill / Strategic Kill / Zombie Kill
Hard Kill trigger codeSingle selectHK-1 through HK-7 — or N/A for scorecard kills
Final scorecard scoreNumber0–60. All 15 dimension scores stored in long text field.
All 15 dimension scoresLong textEach dimension name + score, one per line
Total buyers at killNumber
Gross revenueCurrency
Net revenue (after refunds)Currency
Total ad spendCurrency
ROASFormulaNet revenue / ad spend — auto-calculated
The single most important lessonLong textOne sentence — specific enough to change a future decision
The assumption that was wrongLong textWhat was believed vs. what the data proved
What the market actually wantedLong textBased on all data — what offer would have worked
Preserved assetsLong textCopy, mechanism names, buyer language, testimonials — what survived
Negative Avatar profiles createdLink → Negative Avatar ProfilesAll profiles that emerged from this offer's failure data
Next Problem SignalLong textProblem B if identified — feeds product roadmap
Relaunch eligibilitySingle selectYes — conditions defined / No — permanent retirement / Pivot — direction specified
Relaunch conditions (if eligible)Long textSpecific conditions that must be met before resurrection
90-day relaunch consideration dateDateKill date + 90 days — auto-populated
Resurrection recordLink → Offers tableIf the offer was relaunched — link to the new offer record

The schema does not provide dedicated fields for every form item, such as refund count/percentage and the five buyer phrases. A single offer link may carry version information only if the Offers table defines it. Autonumber does not itself implement the year/sequence ID, and the ninety-day date and ROAS calculations need actual formulas. Links to audits, profiles and future offers do not prove those records exist.

Review the complete source checklist

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Review the complete source checklist

Use the checklist to identify missing evidence and procedures, not to mark source instructions as performed. Its eighteen-field reference should be read with the verified nineteen-field form, and its closure timing must be compared with the earlier sequence.

Before Any Kill Decision — Pre-Kill Diagnostic

☐ Minimum 200 unique cold visitors have seen the offer

☐ Traffic source awareness level matches sales page assumption

☐ Minimum 2 headline variants A/B tested

☐ Full 14-day email sequence deployed to 200+ warm subscribers

☐ Level 3 guarantee tested against current guarantee

☐ Stack Slide offer presentation tested

Hard Kill Trigger Check (Run Before Scorecard)

☐ HK-1: Refund rate exceeding 30% after 20+ sales?

☐ HK-2: Any legal or compliance violation identified?

☐ HK-3: Unable to fulfil the core promise to current buyers?

☐ HK-4: Zero sales from warm list of 500+ after complete 14-day sequence at 25%+ open rate?

☐ HK-5: Cold conversion below 0.3% after diagnostic complete and 300+ unique visitors?

☐ HK-6: NPS below -10 after 20+ buyer responses?

☐ HK-7: CPA exceeding 60% of offer price after $3K+ ad spend across 2+ audience types?

If any Hard Kill Trigger is confirmed — skip the scorecard. Proceed directly to Clean Kill Process (Phase 5).

Kill Assessment Scorecard

☐ All 15 dimensions scored using available data

☐ Total score calculated

☐ Decision confirmed: Kill / Pivot / Iterate / Scale

☐ If Kill or Pivot: Clean Kill Process initiated within 14 days

☐ If Iterate: 2-Fix Maximum Rule applied — no more than 2 changes identified

Clean Kill Process (Phase 5)

☐ All paid ads paused within 4 hours of kill decision

☐ Offer page deactivated or redirected within 8 hours

☐ Email sequence deactivated within 8 hours

☐ Buyer Communication Email sent within 24 hours

☐ Full data export completed within 48 hours — buyer list, refunds, support, emails, recordings

☐ Affiliate notification sent within 48 hours (if applicable)

☐ Post-Kill Intelligence Form completed within 72 hours

☐ Buyer inbox monitored and all responses addressed within 7 days

☐ Negative Avatar profiles updated within 14 days

Post-Kill Intelligence Extraction (Phase 6)

☐ All 18 fields of the Post-Kill Intelligence Form completed

☐ Copy Salvage Protocol run — surviving assets tagged and moved to Salvage folder

☐ Master Language Mining database updated with all salvaged buyer language phrases

☐ Proof library updated with salvageable testimonials (if mechanism preserved)

☐ Kill Record filed in Airtable with all linked records

Quarterly Zombie Audit

☐ All offers reviewed against 4 Zombie Criteria

☐ Flagged offers placed on 30-day remediation watchlist

☐ Kill Assessment Scorecard run on each flagged offer

☐ Single highest-leverage remediation action identified and implemented for each

☐ 30-day retest complete — kill decision finalised for any offer not improving 8+ points

Resources and turn-in

Supporting document for this teaching point: RISER-Product-Kill-Criteria-Post-Launch-SOP.docx — Resources and turn-in

Read the Product Kill Criteria original, Weekly Offer Review, Forensic Audit, Beta Testing Methodology, and Negative Avatar source. The complete original appendix accompanies this teaching. Remaining guarantee, mechanism, fulfilment and other named frameworks need their actual bodies before complete prerequisite coverage can be claimed.

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING. The old source domain is retained only as original evidence.

Turn in one proposed assessment record with the offer version, observation window, diagnostic evidence, fifteen separate scores, total, qualifying conditions and unresolved decisions. Identify what would need review before any real action. Keep it in your course work folder until the submission destination is confirmed. Do not treat a draft score or a source template as approval to retire an offer or contact its buyers.

D0940 complete original source
D0940 — complete original document appendix

Open assigned original · Download exact original Word document

The source is retained as evidence, including its errors and embedded instructions. Read the lesson for explanations and corrections. The view below preserves paragraph and table-cell order with basic emphasis and explicit list markers from the native numbering definitions. Original pagination and fonts require the Word download; browser visual review is pending.

RISER NATION

MASTER OPERATING SYSTEM

SOP — PRODUCT KILL CRITERIA (POST-LAUNCH)

The Objective System for Deciding When to Kill, Pivot, Iterate, or Scale Any Offer

Kennedy × Hormozi × Brunson × 2026 Framework

Version 1.0 | 2026 Edition | RISER Nation Master Operating System


SOP Overview

Most operators apply rigorous kill logic before launching an offer — kill filters, viability scoring, 6-score monetisation tests — and then never apply equivalent logic after the offer is live. The result is a business carrying dead or dying offers that consume operational bandwidth, advertising budget, and emotional energy while producing little or no return.

This SOP defines the post-launch system for making objective kill, pivot, iterate, or scale decisions at every stage of an offer's lifecycle. It eliminates the sunk-cost thinking that keeps broken offers alive, provides the specific numerical thresholds that determine each decision, and defines the process for killing an offer cleanly — archiving its intelligence, honouring existing buyers, and extracting every lesson before the door closes.

Kennedy's Kill Rule

The most expensive thing in your business is an offer you should have killed six months ago. It is consuming ad spend, support bandwidth, team attention, and your own belief in the market. Kill it. Learn from it. Build the next one smarter. The trail of killed offers is not a sign of failure — it is the evidence that you are iterating toward something that works.

Hormozi's Fuel Rule

Never add fuel to a broken vehicle. Scaling traffic, increasing ad spend, or adding more affiliates to an offer that has not passed its kill-or-scale assessment is how operators spend $50K proving what $5K of organic data already told them. Fix the vehicle first. Then add fuel.

Brunson's Funnel Law

You are one funnel away from success — but only if you are willing to kill the ones that are not working. The operators who win are not smarter. They are faster at recognising what is not working and more willing to cut it.

The Sunk Cost Problem: Why Offers Stay Alive Too Long

Before the kill criteria, the system must confront the reason those criteria are so rarely applied. The sunk cost fallacy — the tendency to continue investing in something because of prior investment rather than future potential — kills more businesses slowly than any market condition ever has.

Sunk Cost Bias

How It Manifests

The Rational Counter

Time investment bias

'I spent 3 months building this. I can't just kill it.'

The 3 months are gone regardless of what you decide today. The only question is whether the next 3 months goes into a working offer or a broken one.

Identity attachment

'This offer represents my core methodology. Killing it feels like killing part of myself.'

The methodology survives the offer. Rename the mechanism. Repackage the IP. Kill the specific execution that is not working — not the expertise behind it.

Audience validation hunger

'People say they love this offer even if they're not buying.'

Compliments are not revenue. Kennedy: 'Validate with dollars, not compliments.' If the audience loves it and will not pay for it, the market has spoken.

Optimism bias

'I just need to fix one more thing and it will work.'

Define in advance what 'one more thing' means. If you have already made three 'one more thing' changes and the metrics have not moved, the problem is structural — not fixable with incremental iteration.

Social proof protection

'I have testimonials from this offer. If I kill it, I lose the social proof.'

Testimonials belong to the buyer and the result, not the offer format. Testimonials from a killed offer can be repurposed in a new, better offer that serves the same transformation.

Sunken ad spend

'I've spent $8K in ads to prove this. I need to recoup that before stopping.'

The $8K is already spent. Continuing to run an unworkable offer to recoup sunk ad cost will result in spending $16K to prove what $8K already proved. Cut the loss now.

The Pre-Commitment Solution

The most effective way to override sunk cost bias is to define your kill criteria before launch — not during the emotional heat of a failing offer. This SOP works best when you set your kill thresholds at the point of launch, file them in Airtable, and commit to honouring them regardless of how the offer makes you feel at the point of decision.


The Offer Lifecycle Model

Kill criteria are not static. An offer at day 7 is held to completely different standards than an offer at day 90. Applying day-90 thresholds to a day-7 offer produces false kills. Applying day-7 thresholds to a day-90 offer allows zombie offers to survive indefinitely. The lifecycle model defines which metrics and which thresholds apply at each stage.

Stage 1 Launch

Days 1–14

Proof of market response

Stage 2 Validation

Days 15–45

Conversion rate signal

Stage 3 Traction

Days 46–90

Unit economics viability

Stage 4 Scale

Days 91–180

Paid traffic profitability

Stage 5 Decline

180+ days

Renewal and ascension rate

Stage-Specific Assessment Points

Stage

Primary Question

Key Metric

Decision at This Stage

Stage 1 — Launch (Days 1–14)

Is anyone responding to this offer at all?

First sale: did any paying buyers emerge without heavy persuasion from a warm audience within 14 days?

If zero sales from a warm list of 500+ after a proper 7-day launch sequence: trigger Stage 1 Kill Assessment. Do not move to paid ads.

Stage 2 — Validation (Days 15–45)

Is the conversion rate statistically viable for the offer type?

Cold conversion rate after 200+ unique visitors. Warm conversion rate after full email sequence delivery to warm list.

If cold conversion remains below threshold after 300+ visitors and one round of copy iteration: trigger Full Kill Assessment (Phase 3 scorecard).

Stage 3 — Traction (Days 46–90)

Do the unit economics work?

Cost Per Acquisition vs. Offer Price ratio. Refund rate. Support cost per buyer. LTV:CAC ratio.

If unit economics fail the Stage 3 thresholds after genuine traffic investment: trigger Full Kill Assessment. Do not scale.

Stage 4 — Scale (Days 91–180)

Is this offer still working as ad spend increases?

ROAS by platform. CPA trend (improving, flat, or worsening). Ascension rate to next tier.

If ROAS declines below 2.0x and CPA exceeds 35% of offer price for 21+ consecutive days: trigger Scale-to-Iterate or Kill decision.

Stage 5 — Decline (180+ days)

Is this offer earning its continued existence?

Month-over-month revenue trend. Mechanism freshness (see Forensic Audit SOP). Competitive landscape shift.

If revenue has declined 40% from peak for 60+ consecutive days with no identifiable external cause: trigger Full Kill Assessment or Relaunch Protocol.


PHASE 1

The Pre-Kill Diagnostic

Rule out fixable problems before killing — so you only kill when death is actually warranted

The Diagnostic Purpose

The Pre-Kill Diagnostic exists because most offers that appear to be dying are not actually broken at the offer level — they are broken at the traffic, copy, or distribution level. Killing a valid offer because the ad creative was stale or the email subject line was weak is an extremely expensive mistake. This diagnostic rules out six fixable causes before the kill assessment begins.

The Rule

Do not enter the Kill Assessment (Phase 3) until every item in the Pre-Kill Diagnostic has been addressed. If any diagnostic item is unresolved, fix it first — then measure again for the minimum window specified. Only enter Kill Assessment if the metrics fail after the diagnostic fixes have been applied.

The Six Fixable Causes of Poor Performance

Fixable Cause

Diagnostic Question

Evidence That This Is the Problem

Minimum Fix & Retest Window

Traffic volume insufficient

Have at least 200 unique cold visitors seen this offer (300+ preferred for statistical significance)?

Conversion rate data is based on fewer than 200 unique cold visitors. Any rate below 200 visits is noise, not signal.

Drive 200+ unique visitors through organic promotion or minimal paid spend ($300–$500 test budget) before assessing cold conversion rate.

Traffic source mismatch

Is the traffic source aligned with the awareness level the offer page assumes?

Cold traffic is landing on a page written for warm or hot traffic. Sales page assumes prior relationship or context the visitor does not have.

Audit the first 500 words of the sales page for assumed context. Rewrite the lead assuming zero prior awareness. Retest for 7 days.

Copy — headline not tested

Has the headline been A/B tested with at least 2 meaningfully different angles?

Single headline has been running since launch. No split test data.

Write 3 headline variants (pain hook, desire hook, mechanism hook). Run split test for minimum 14 days or 200 visitors per variant. Decision only after test concludes.

Email sequence — not complete or not deployed

Has the full 14-day email sequence been deployed to the warm list?

Fewer than 10 emails have been sent, or the sequence was stopped early, or the list size was fewer than 200 subscribers.

Complete the full 14-day sequence to a list of 200+ subscribers. Assess warm conversion rate after the sequence concludes.

Guarantee — not sufficiently strong

Has a meaningful guarantee been tested against the current version?

Current guarantee is a basic 30-day money-back with no conditions or commitment language. Has never been upgraded.

Test the Level 3 guarantee (result-based conditional) against current guarantee for 14 days. If conversion lifts 15%+ — guarantee was the problem, not the offer.

Offer stack — not presented clearly

Has the full value stack (bonuses, mechanism, deliverables, guarantee, social proof) been tested in the Brunson Stack Slide format?

Sales page does not have a visual offer stack with individual bonus values listed. The offer is described narratively without a stacked presentation.

Rebuild the sales page's offer section as a Stack Slide: list each component, assign a standalone value, show total value vs. asking price. Retest for 14 days.

Pre-Kill Diagnostic Checklist

Complete this checklist before opening a kill assessment. Every item marked 'Not yet addressed' must be actioned and retested before proceeding to Phase 3.

Diagnostic Item

Status

Retest Window

Cleared?

Minimum 200 unique cold visitors have seen the offer

☐ Yes ☐ No

N/A if yes; drive traffic first if no

☐

Traffic source awareness level matches sales page assumption

☐ Matched ☐ Mismatch

Fix + 7 days

☐

Minimum 2 headline variants A/B tested

☐ Yes ☐ Not yet

14 days / 200 visitors per variant

☐

Full 14-day email sequence deployed to 200+ warm subscribers

☐ Yes ☐ Not yet

Deploy and wait for sequence to complete

☐

Level 3 guarantee tested against current guarantee

☐ Yes ☐ Not yet

14 days split test

☐

Stack Slide offer presentation tested

☐ Yes ☐ Not yet

14 days after implementation

☐


PHASE 2

Hard Kill Triggers

Automatic — if any of these conditions are met, the offer is killed immediately, no scorecard required

The Hard Kill Principle

Hard Kill Triggers are non-negotiable. They represent conditions that cannot be iterated out of, that create unacceptable risk to the business or its buyers, or that indicate a fundamental structural incompatibility between the offer and the market. When any Hard Kill Trigger is met, the offer is killed within 48 hours. No scorecard. No deliberation. No 'one more try.'

Why No Deliberation

The purpose of defining Hard Kill Triggers in advance is to remove the decision from the emotional present and place it in the rational past. You are not deciding whether to kill the offer when you are emotionally invested in it. You decided the conditions for killing it before you launched it. Now you are just honouring that decision.

Trigger

Threshold

Rationale

Action Timeline

HK-1: Catastrophic refund rate

Refund rate exceeds 30% of total sales after a minimum of 20 sales

A refund rate above 30% indicates a systematic failure in promise delivery or a fundamental mismatch between what was sold and what was received. This is not fixable with copy changes — the offer is broken at the product level.

Kill within 48 hours. Pause all ads immediately. Begin Post-Kill Protocol.

HK-2: Legal or compliance violation identified

Any confirmed violation of FTC guidelines, TCPA regulations, platform terms of service, or applicable consumer protection law

Legal exposure compounds exponentially the longer a non-compliant offer remains live. Compliance violations can result in platform bans, financial penalties, and reputational damage that far exceeds any revenue from the offer.

Kill within 24 hours. Consult legal counsel before relaunch. Do not attempt to fix and relaunch without written legal clearance.

HK-3: Fulfilment breakdown — unable to deliver

You are materially unable to deliver the core promise of the offer to existing or new buyers

Continuing to sell an offer you cannot deliver is both legally and ethically indefensible. Fulfilment breakdown triggers immediate offer suspension, not iteration.

Suspend new sales within 24 hours. Communicate with existing buyers within 48 hours. Full refund offered to all buyers unable to receive delivery.

HK-4: Zero warm conversion after complete sequence

Zero sales from a warm list of 500+ after a full 14-day email sequence has been deployed, with at least 25% open rate confirmed

A 25%+ open rate confirms the sequence was read. Zero purchases from 500+ warm subscribers who read the sequence means the offer is rejected by people who know, like, and trust you. This is the harshest market signal available.

Kill within 7 days. Do not move to cold paid traffic. Begin Post-Kill Protocol.

HK-5: Cold conversion remains below 0.3% after diagnostic complete

Cold conversion rate remains below 0.3% after all six Pre-Kill Diagnostic fixes have been applied and retested over a minimum of 300 unique cold visitors

0.3% is the absolute floor for any offer that can ever be made profitable through paid advertising. Below 0.3% with a clean diagnosis means the offer itself is the problem — not the copy, not the traffic.

Kill within 14 days of confirmed diagnostic completion. Do not spend further on ads.

HK-6: Negative NPS after 20+ responses

Net Promoter Score falls below -10 after a minimum of 20 buyer survey responses

An NPS below -10 means your detractors significantly outnumber your promoters. This offer is actively generating negative word-of-mouth at a rate that will compound against every future launch.

Kill within 7 days of confirmed NPS threshold. Conduct emergency buyer interviews. Do not run this offer again without rebuilding from scratch.

HK-7: CPA exceeds 60% of offer price after $3,000+ ad spend

Cost Per Acquisition exceeds 60% of the offer's sale price after at least $3,000 has been spent testing across at least 2 different audience types

At a CPA of 60% of revenue, there is no viable business. After refunds, fulfilment costs, and payment processing fees, the unit economics are deeply negative and cannot be corrected by optimising an offer that the market is systematically rejecting.

Kill paid spend immediately. Offer may continue organically if organic conversion is strong. If organic also fails, full kill.


PHASE 3

The Kill Assessment Scorecard

For offers that have not triggered a Hard Kill — the objective scoring system

When to Run the Scorecard

The Kill Assessment Scorecard is run when an offer has cleared the Pre-Kill Diagnostic (Phase 1), has not triggered a Hard Kill (Phase 2), but is underperforming against its stage-specific thresholds. It produces a numerical score that maps to one of four decisions: Kill, Pivot, Iterate, or Scale.

The Scorecard (15 Dimensions — Maximum 60 Points)

Score each dimension objectively using the evidence available. Do not round up out of optimism. Do not round down out of frustration. Use the data.

Dimension

0 Points — Critical Failure

1 Point — Below Viable

2 Points — Viable

3 Points — Strong

4 Points — Excellent

Your Score

Cold conversion rate

Below 0.5%

0.5–0.9%

1.0–1.9%

2.0–3.9%

4.0%+

___

Warm conversion rate

Below 2%

2–4%

5–9%

10–19%

20%+

___

Refund rate

Above 20%

15–20%

8–14%

3–7%

Below 3%

___

Programme completion rate

Below 25%

25–44%

45–59%

60–74%

75%+

___

Specific result testimonials (per 10 buyers)

0

1

2–3

4–5

6+

___

Email open rate (14-day sequence)

Below 15%

15–19%

20–29%

30–39%

40%+

___

Support tickets per buyer (per 30 days)

Above 8

5–8

3–4

1–2

0–1

___

CPA as % of offer price

Above 50%

40–50%

25–39%

15–24%

Below 15%

___

Ascension rate to next tier

Below 3%

3–5%

6–9%

10–14%

15%+

___

Buyer NPS score

Below -10

–10 to 0

1–20

21–40

41+

___

Month-over-month revenue trend

Declining >20%

Declining 5–20%

Flat (±5%)

Growing 5–19%

Growing 20%+

___

Value Equation audit — Dream Outcome score

1–2 (broken)

3–4 (weak)

5–6 (adequate)

7–8 (strong)

9–10 (excellent)

___

Value Equation audit — Perceived Likelihood score

1–2 (broken)

3–4 (weak)

5–6 (adequate)

7–8 (strong)

9–10 (excellent)

___

Value Equation audit — Time Delay score

1–2 (broken)

3–4 (weak)

5–6 (adequate)

7–8 (strong)

9–10 (excellent)

___

Value Equation audit — Effort & Sacrifice score

1–2 (broken)

3–4 (weak)

5–6 (adequate)

7–8 (strong)

9–10 (excellent)

___

Score Interpretation

KILL

Score 0–24 (out of 60) — or any Hard Kill Trigger fired regardless of score

The offer has failed across multiple dimensions and cannot be fixed through incremental iteration. The structural problems are too numerous or too deep. Kill the offer using the Clean Kill Process (Phase 5). Extract all intelligence using the Post-Kill Protocol (Phase 6).

PIVOT

Score 25–34 — with 3 or more dimensions at 0 or 1

The core premise or mechanism may be viable but the execution is failing broadly. Iteration will not fix this — it requires a structural change to the offer format, the target avatar, the pricing tier, or the delivery mechanism. A pivot is not a kill — it is a rebuild that preserves the underlying insight.

ITERATE

Score 35–44 — with no more than 2 dimensions at 0 or 1

Specific, diagnosable problems exist but the offer has real signal. The fix is targeted — not a rebuild. Identify the 2–3 lowest-scoring dimensions. Apply the specific iteration protocol for each. Retest over 30 days. Re-run the scorecard.

SCALE

Score 45–60 — with no dimension below 2

The offer is working. Unit economics are viable. Buyers are getting results. The correct move is to add fuel: increase ad spend by 20%/day maximum, add a second traffic source, launch the affiliate programme for this offer, activate the ascension sequence to the next tier.


PHASE 4

The Kill vs. Pivot vs. Iterate Decision Framework

When the scorecard says Kill or Pivot — making the right structural choice

Kill vs. Pivot: The Critical Distinction

A Kill and a Pivot both result in the current version of the offer being retired. The distinction is what survives. In a Kill, the offer and the mechanism are both retired — the market has rejected both the delivery and the promise. In a Pivot, the mechanism and the insight are preserved but the execution — the format, avatar, price point, or delivery model — is fundamentally changed.

Scenario

Correct Decision

What Survives

What Dies

Relaunch Timing

The offer fails but exit interviews reveal that buyers wanted the transformation and understood the mechanism — they just could not implement it as designed

PIVOT

The mechanism name. The core insight. The buyer language mined. The testimonials (partial).

The delivery format and price point. The sales page structure. The current fulfilment model.

90 days minimum. Rebuild the delivery model (e.g. self-paced course → live cohort, or group → done-for-you).

The offer fails and exit interviews reveal that buyers did not understand what they were buying or found the mechanism irrelevant to their actual problem

KILL

The buyer language (negative avatar data). The email list of buyers. The lessons about what does NOT work.

Everything. The mechanism name, the copy, the delivery model, the entire frame. Start fresh.

No automatic relaunch. Return to MVO Playbook Phase 1 with accumulated data as the brief.

The offer fails and the refund messages consistently describe expecting something fundamentally different from what was delivered

PIVOT (copy pivot)

The delivery and mechanism. The results that existing buyers did achieve.

The sales page positioning, the headline, the promise language. The gap was in how it was sold, not what was delivered.

30 days. Rebuild sales copy from scratch using exit interview language. Keep delivery identical.

The offer fails and the primary issue is price — buyers consistently cite 'too expensive' or conversion rate is strong at lower price points in A/B testing

PIVOT (price pivot)

The entire offer. The mechanism. The delivery. The copy.

The price point. The implied buyer tier (you may be serving a different income bracket than you targeted).

2 weeks. Reprice and relaunch. Monitor whether the new buyer profile changes support load and completion rate.

The offer works for a specific sub-segment but not for the broad avatar it was positioned for

PIVOT (avatar pivot)

The mechanism. The delivery. The results from the working sub-segment.

The broad positioning, the broad ad targeting, the generic sales page copy.

4 weeks. Narrow the positioning to the sub-segment where results are consistent. Rebuild copy for that specific avatar.

Iterate Protocol: The 2-Fix Maximum Rule

When the scorecard indicates Iterate, you are permitted to make targeted changes to the lowest-scoring dimensions. The 2-Fix Maximum Rule applies: identify the two lowest-scoring dimensions, implement one specific fix for each, and retest for 30 days before running the scorecard again. Making more than two changes simultaneously makes it impossible to know which fix worked.

Failing Dimension

Specific Iteration Action

Retest Metric

Retest Window

Cold conversion below 1%

A/B test a new headline with a Pain-Acute hook derived from buyer language mining. Do not change any other element on the sales page during the test.

Cold conversion rate. Minimum 200 unique visitors per variant.

14 days minimum

Completion rate below 45%

Add a mandatory 72-hour Quick Win to Module 1. The Quick Win must produce a visible, shareable output. Add accountability check-in at hour 48.

Module 1 completion rate. Dropout rate at Module 1 boundary.

Next cohort cycle

Refund rate above 10%

Audit the sales page promise against the programme's actual deliverables. Identify the specific gap and fix either the copy (reduce the promise to match delivery) or the delivery (expand the deliverable to match the promise).

Refund rate over the following 30 days. Refund root cause codes.

30 days

NPS below 20

Conduct 5 buyer interviews in the first week after purchase. Identify the gap between their expectation at purchase and their experience in delivery. Fix the single most-cited gap.

NPS at next survey cycle (30 days). Support ticket volume.

30 days

Ascension rate below 6%

Rewrite the ascension sequence. Change the timing of the ascension offer presentation. Test presenting the Core Offer at Day 14 post-MVO-purchase instead of Day 21 or Day 30.

Ascension rate over 60 days.

60 days

CPA above 35% of price

Pause the lowest-performing ad set. Test a new creative format (video vs. static). Test a new audience segment derived from your best-converting buyers' lookalike.

CPA over 14 days of new creative.

14 days


PHASE 5

The Clean Kill Process

How to retire an offer with integrity — protecting buyers and extracting maximum intelligence

The Clean Kill Principle

Killing an offer is not an emergency or a shame event. It is a business decision that, executed well, protects your reputation, honours your existing buyers, and produces the intelligence that makes the next offer better. A poorly executed kill — abrupt, unexplained, or disorganised — damages trust with buyers, confuses the market, and wastes the data the offer generated.

The 72-Hour Kill Sequence

From the moment the kill decision is confirmed, the following sequence must be completed within 72 hours for Hard Kill Triggers (HK-1 through HK-7) and within 14 days for scorecard-based kills.

Hour / Day

Action

Owner

Output

Hour 0–4

Pause all paid advertising for the offer. Immediately. No exceptions. Every additional dollar spent on a killed offer is wasted.

Ads manager / founder

All active ad campaigns paused. Budget released.

Hour 4–8

Deactivate or archive the offer page. Redirect the URL to either the homepage, an appropriate alternative offer page, or a 'This offer is no longer available' page that includes a waitlist opt-in.

Tech / founder

Offer page redirected. URL not returning 404.

Hour 8–16

Deactivate the email sequence associated with the offer. Any new subscribers who triggered the sequence after the kill decision will not receive offer-specific emails.

Email platform / founder

Email sequence deactivated. Active sequence recipients noted.

Day 1

Send the Buyer Communication Email (see template below) to all current buyers who are within their active delivery window. Explain the situation with clarity and without corporate language.

Founder (personal tone required)

Buyer communication sent. Inbox monitored for 48 hours.

Day 1–2

Pull all data exports: buyer list, refund records, support ticket archive, community posts, email reply archive, exit interview recordings. Store in designated archive folder.

Ops / founder

Full data archive in Google Drive / Airtable. Nothing deleted.

Day 2

Cancel or pause any affiliate commissions on new sales. Notify affiliates of the offer closure with a professional explanation and, where appropriate, an alternative offer to promote.

Affiliate manager / founder

Affiliate notification sent. Pending commissions reviewed.

Day 3

Complete the Post-Kill Intelligence Form (Phase 6 template). While the experience is fresh. Do not wait.

Founder

Post-Kill Intelligence Form filed in Airtable.

Day 7 (post-kill)

Review the Buyer Communication inbox. Address any unresolved buyer concerns. Process any refund requests that arrived in the kill window.

Support / founder

All buyer communications resolved.

Day 14 (post-kill)

Run the Negative Avatar Profile check: do any refund patterns from this offer need a new profile created? Update Negative Avatar Airtable accordingly.

Founder

Negative Avatar updates complete.

Buyer Communication Email Template

This email is sent personally from the founder. It is plain text, not designed, and not run through the standard email platform's branded template. It reads like a human being wrote it because a human being should have written it.

Buyer Communication Template

Subject: An important update about [Offer Name] Hi [First Name], I want to be straight with you about something. We have decided to retire [Offer Name] effective [date]. This means we will not be accepting new students, and I want to explain why — and what it means for you specifically. [One of the following, as applicable:] Version A (Product not delivering promised results): After reviewing the results our students have achieved and being honest about where the gaps are, I am not comfortable continuing to sell this offer in its current form. You deserve better than I built. Version B (Strategic pivot): We are focusing our energy on [New Offer / Direction], which does [specific thing] better than this offer could. This is a strategic decision, not a quality issue. What this means for you: If you are currently in the programme — you will continue to have access to everything you purchased until [specific date]. Nothing is being removed from your account. If you would like a refund — I will honour a full refund regardless of where you are in the programme and regardless of whether you are within the standard refund window. Email [email] with 'Refund Request' in the subject line. If you would like to move to [Alternative Offer] — [specific transition offer if applicable]. I am sorry if this is disruptive. It is the right call. [Your name]


PHASE 6

Post-Kill Intelligence Extraction

The data from a killed offer is worth more than the revenue it generated

The Intelligence Extraction Principle

A killed offer generates more actionable intelligence than a successful one — because failure reveals the exact fracture lines in your assumptions about the market. Every operator who kills an offer without systematically extracting its intelligence is discarding the most expensive education they will ever receive.

Kennedy on Failed Offers

Every failed offer is a message from the market. The market never lies. It does not explain itself. But if you build a system for reading what it is saying — through refund language, dropout patterns, support tickets, and buyer interviews — it will tell you everything you need to know about what to build next.

The Post-Kill Intelligence Form

Complete this form within 3 days of the kill decision. File in Airtable under Kill Records. Do not complete it weeks later — the clarity of the post-mortem degrades rapidly with time.

Field

What to Document

Kill Record ID

Autonumber — auto-generated

Offer name and version

Full offer name + which version was killed (V1, V2, etc.)

Kill date

Kill trigger type

Hard Kill (specify HK code) / Scorecard-based Kill (record final scorecard score) / Strategic Kill

Final scorecard score

Record all 15 dimension scores and the total. This is the permanent benchmark.

Total buyers

How many people purchased before the kill

Total revenue

Gross revenue generated before kill

Total refunds

Number and percentage

Net revenue

After refunds

Total ad spend

All paid acquisition costs associated with this offer

ROAS (if applicable)

Net revenue / ad spend

The single most important lesson

In one sentence: what did this offer teach you that you did not know before? This should be specific enough to change a specific future decision.

The copy gold

Top 5 buyer language phrases mined from this offer's data (verbatim). These survive the kill and go directly into the next offer's copy brief.

The assumption that was wrong

What did you believe about the market, the buyer, or the mechanism that this offer's failure proved incorrect?

The Negative Avatar defined

Which Negative Avatar archetype was most commonly attracted? What specific language attracted them? (Links to Negative Avatar Airtable table)

The Next Problem Signal

Did this offer's buyers reveal a Problem B — the thing they needed next that you have not yet built? Document it here.

What the market actually wanted

Based on all available data — what offer would have served this audience correctly?

What was preserved

List any copy assets, mechanism names, buyer relationships, or marketing angles that survive the kill and are being transferred to the next offer brief.

Relaunch eligibility

Yes — conditions defined / No — full retirement / Pivot — specify the pivot direction

Copy and Asset Salvage Protocol

Before the killed offer's folder is archived, run this salvage protocol. Assets that survive the kill are tagged 'Salvage — from [Offer Name]' and moved to a dedicated Salvage folder that feeds into future offer development.

Asset Type

Salvage Criteria

What to Do With It

Buyer language from email replies

All tagged phrases from Phase 3 of the Forensic Audit (PAIN-ACUTE, PAIN-CHRONIC, DESIRE-HIDDEN, OBJECTION tags)

Move to the Master Language Mining database. Tag source as 'Kill Salvage — [Offer Name]'. These phrases are valid regardless of whether the offer worked.

Testimonials from buyers who got results

Any testimonial where the buyer achieved a specific, measurable result that can be attributed to the mechanism

Move to proof library. Can be used in the next offer if the mechanism is preserved. Cannot be used if the mechanism is killed and replaced.

Exit interview recordings

All recordings

Archive in Google Drive. Tag with date and offer name. Transcripts extracted and stored in language mining database.

Sales page copy — performing sections

Sections of the sales page where heatmap data showed high engagement, low bounce, or direct scroll-to-CTA behaviour

Save as 'High-engagement copy segments' in copy swipe file. Even in a failed offer, some sections worked.

Email sequence — high-open-rate emails

Any email in the 14-day sequence that achieved above 35% open rate

Archive the subject line and the opening paragraph. These are proven attention-capturing elements independent of the offer.

The mechanism name (if not killed)

If the pivot/iterate decision preserved the mechanism name — the name goes directly into the next offer brief

Transfer to next offer's MVO Playbook Phase 2 document as the named mechanism.


PHASE 7

The Resurrection Protocol

The specific conditions under which a killed offer can be relaunched

What Qualifies for Resurrection

Not every killed offer should stay dead. Some offers fail at the wrong time, to the wrong audience, with the wrong positioning — but the underlying mechanism and transformation are valid. The Resurrection Protocol defines the conditions under which a killed offer can return to market, and the required changes before it does.

The Non-Negotiable Gap

A killed offer must remain off the market for a minimum of 90 days before any relaunch consideration. This gap allows buyer memory of the original failure to fade, provides time for the market conditions to shift, and — most importantly — forces genuine rebuilding rather than cosmetic changes. Any relaunch before 90 days is a patch. After 90 days, it can be a real revision.

The Resurrection Criteria Checklist

Every item in this checklist must be completed before a killed offer re-enters the market. No partial exceptions.

Requirement

What It Means

How to Evidence Completion

Minimum 90-day gap from kill date

The offer has been off the market for at least 90 calendar days

Kill date in Airtable Kill Record. Today's date minus kill date is ≥ 90.

Root cause identified and addressed

The specific reason the offer failed (from Phase 5 Kill Record, 'The assumption that was wrong' field) has been specifically addressed in the rebuilt offer

Updated offer brief documents the specific change made in response to the identified root cause. One change per root cause — not vague 'improvements.'

New buyer interviews conducted

Minimum 3 new buyer interviews with the intended target avatar conducted after the kill — not from the original buyer pool

Interview transcripts dated after the kill date. Must include at least one person who was NOT a buyer of the original offer.

Offer rebuilt from copy brief, not from the original

The new version was written from a fresh copy brief using the Post-Kill intelligence, not by editing the original sales page

New copy brief document in Airtable dated after kill. If the sales page draft clearly resembles the original with light edits — it is not a rebuild. Start over.

Negative Avatar profiles from original offer are active

The Negative Avatar Profiles created from the original offer's data are deployed in the new offer's repulsion system: 'Not for you' copy, ad exclusions, and application gates

New offer's sales page 'Not for you' section includes at least one bullet per active Negative Avatar Profile. Ad exclusion list updated.

Beta cohort run before public relaunch

A minimum of 5-buyer paid beta is run on the rebuilt offer before the public sales page goes live

Beta Testing SOP records in Airtable. Beta scorecard passed (Go/No-Go thresholds met). Beta dated after kill.

Permanent Retirement — When Not to Resurrect

Some killed offers should stay killed. These conditions indicate permanent retirement with no resurrection path:

• The market the offer was designed for no longer exists or has been commoditised to the point where profitable differentiation is not achievable.

• The primary mechanism has been replicated by a better-resourced competitor and can no longer be positioned as differentiated.

• The offer generated three or more legal complaints, regulatory reviews, or FTC scrutiny — regardless of their outcome. The reputation risk of the specific offer persists beyond the compliance resolution.

• The Post-Kill Intelligence Form's 'assumption that was wrong' field reveals that the market does not actually have the problem the offer was designed to solve. This is not a copywriting problem — it is a market existence problem.

• The offer's total cost (ad spend, time, legal, support) exceeded its total revenue — and the rebuilt version cannot be demonstrated via the beta to achieve different unit economics.


PHASE 8

The Zombie Offer Audit

Finding and killing the offers that should have died months ago

What a Zombie Offer Is

A Zombie Offer is one that is technically still live — it has a sales page, it may even have a small email sequence, it may be listed on the offer wall — but it is generating near-zero revenue, receiving near-zero traffic, and consuming operational resources through the mere fact of its continued existence.

The Zombie Offer Problem

Zombie offers cost you in three ways. First, they consume the mental space of being 'things that need attention eventually.' Second, they occasionally attract wrong-fit buyers who stumble on old content, generating support tickets and refund requests on an offer nobody is actively managing. Third, they distort your offer wall and create confusion for buyers about which path to take. Kill them.

The Quarterly Zombie Audit

Run this audit on the first Monday of every quarter. Any offer that meets the Zombie Criteria below is placed on a 30-day remediation watchlist. If it fails to recover within 30 days, it is killed using the Clean Kill Process.

Zombie Criterion

Threshold

Why It Qualifies

Revenue below floor for consecutive months

Below $500 gross revenue for 3 consecutive months for any offer priced above $97

At this revenue level, the offer is not covering its own operational overhead — support, payment processing, platform fees, and email sends.

No new buyers in 60+ days

Zero new purchases in 60+ consecutive days

An offer with no buyers for 60 days is effectively dead. It is consuming a sales page URL, a purchase flow, a delivery system, and an email sequence for zero return.

Traffic below viable testing threshold for 90 days

Fewer than 50 unique visitors per month for 90+ consecutive days

Below 50 monthly visitors, there is no data being generated. The offer is neither working nor failing — it is simply invisible. That is not a business; it is an archive.

No active promotional activity for 60 days

No email campaigns, no ad spend, no organic content referencing the offer in 60+ days

If you have not promoted an offer in 60 days, you have already informally killed it. Formalise that decision with the Clean Kill Process and archive the assets properly.

The 30-Day Remediation Protocol

Any offer flagged in the Zombie Audit is given a single 30-day remediation window before the kill decision is finalised. The remediation must be active — not passive observation.

1. Run the Kill Assessment Scorecard (Phase 3) immediately on the flagged offer. If the score is below 25, skip remediation — proceed directly to Kill.

2. If the scorecard score is 25 or above, identify the single highest-leverage change that could revive the offer within 30 days. One change only.

3. Implement the change and drive minimum 100 unique warm visitors to the offer page within the 30-day window.

4. At day 30, re-run the scorecard. If the score has not improved by at least 8 points — kill the offer.

5. If the score has improved by 8+ points but is still below Scale threshold — run the iterate protocol for one more 30-day cycle only. Two cycles maximum before kill.


Kill Records Database — Airtable Schema

All kill decisions, post-kill intelligence, and resurrection assessments are stored in a dedicated Kill Records table, linked to the Offers table, the Negative Avatar Profiles table, and the Forensic Audit records.

Kill Records Table

Field

Type

Notes

Kill Record ID

Autonumber

Format: KILL-[Year]-[Seq]. E.g. KILL-2026-003

Offer

Link → Offers table

The offer that was killed

Kill date

Date

Kill type

Single select

Hard Kill (HK-1 through HK-7) / Scorecard Kill / Strategic Kill / Zombie Kill

Hard Kill trigger code

Single select

HK-1 through HK-7 — or N/A for scorecard kills

Final scorecard score

Number

0–60. All 15 dimension scores stored in long text field.

All 15 dimension scores

Long text

Each dimension name + score, one per line

Total buyers at kill

Number

Gross revenue

Currency

Net revenue (after refunds)

Currency

Total ad spend

Currency

ROAS

Formula

Net revenue / ad spend — auto-calculated

The single most important lesson

Long text

One sentence — specific enough to change a future decision

The assumption that was wrong

Long text

What was believed vs. what the data proved

What the market actually wanted

Long text

Based on all data — what offer would have worked

Preserved assets

Long text

Copy, mechanism names, buyer language, testimonials — what survived

Negative Avatar profiles created

Link → Negative Avatar Profiles

All profiles that emerged from this offer's failure data

Next Problem Signal

Long text

Problem B if identified — feeds product roadmap

Relaunch eligibility

Single select

Yes — conditions defined / No — permanent retirement / Pivot — direction specified

Relaunch conditions (if eligible)

Long text

Specific conditions that must be met before resurrection

90-day relaunch consideration date

Date

Kill date + 90 days — auto-populated

Resurrection record

Link → Offers table

If the offer was relaunched — link to the new offer record


Master Kill Criteria Checklist

Before Any Kill Decision — Pre-Kill Diagnostic

☐ Minimum 200 unique cold visitors have seen the offer

☐ Traffic source awareness level matches sales page assumption

☐ Minimum 2 headline variants A/B tested

☐ Full 14-day email sequence deployed to 200+ warm subscribers

☐ Level 3 guarantee tested against current guarantee

☐ Stack Slide offer presentation tested

Hard Kill Trigger Check (Run Before Scorecard)

☐ HK-1: Refund rate exceeding 30% after 20+ sales?

☐ HK-2: Any legal or compliance violation identified?

☐ HK-3: Unable to fulfil the core promise to current buyers?

☐ HK-4: Zero sales from warm list of 500+ after complete 14-day sequence at 25%+ open rate?

☐ HK-5: Cold conversion below 0.3% after diagnostic complete and 300+ unique visitors?

☐ HK-6: NPS below -10 after 20+ buyer responses?

☐ HK-7: CPA exceeding 60% of offer price after $3K+ ad spend across 2+ audience types?

If any Hard Kill Trigger is confirmed — skip the scorecard. Proceed directly to Clean Kill Process (Phase 5).

Kill Assessment Scorecard

☐ All 15 dimensions scored using available data

☐ Total score calculated

☐ Decision confirmed: Kill / Pivot / Iterate / Scale

☐ If Kill or Pivot: Clean Kill Process initiated within 14 days

☐ If Iterate: 2-Fix Maximum Rule applied — no more than 2 changes identified

Clean Kill Process (Phase 5)

☐ All paid ads paused within 4 hours of kill decision

☐ Offer page deactivated or redirected within 8 hours

☐ Email sequence deactivated within 8 hours

☐ Buyer Communication Email sent within 24 hours

☐ Full data export completed within 48 hours — buyer list, refunds, support, emails, recordings

☐ Affiliate notification sent within 48 hours (if applicable)

☐ Post-Kill Intelligence Form completed within 72 hours

☐ Buyer inbox monitored and all responses addressed within 7 days

☐ Negative Avatar profiles updated within 14 days

Post-Kill Intelligence Extraction (Phase 6)

☐ All 18 fields of the Post-Kill Intelligence Form completed

☐ Copy Salvage Protocol run — surviving assets tagged and moved to Salvage folder

☐ Master Language Mining database updated with all salvaged buyer language phrases

☐ Proof library updated with salvageable testimonials (if mechanism preserved)

☐ Kill Record filed in Airtable with all linked records

Quarterly Zombie Audit

☐ All offers reviewed against 4 Zombie Criteria

☐ Flagged offers placed on 30-day remediation watchlist

☐ Kill Assessment Scorecard run on each flagged offer

☐ Single highest-leverage remediation action identified and implemented for each

☐ 30-day retest complete — kill decision finalised for any offer not improving 8+ points

RISER Nation Master Operating System | Product Kill Criteria (Post-Launch) SOP | Version 1.0 | 2026 Edition

Kennedy × Hormozi × Brunson | risernation.com

word/header1.xml

RISER Nation  |  Product Kill Criteria (Post-Launch) SOP  |  V1.0

word/footer1.xml

Page PAGE of NUMPAGES

word/footnotes.xml


word/endnotes.xml


word/comments.xml

Exact extracted text record by paragraph and document part
{

  "body_paragraphs": [

    "RISER NATION",

    "MASTER OPERATING SYSTEM",

    "",

    "  SOP — PRODUCT KILL CRITERIA (POST-LAUNCH)  ",

    "",

    "The Objective System for Deciding When to Kill, Pivot, Iterate, or Scale Any Offer",

    "Kennedy × Hormozi × Brunson × 2026 Framework",

    "",

    "Version 1.0  |  2026 Edition  |  RISER Nation Master Operating System",

    "",

    "SOP Overview",

    "Most operators apply rigorous kill logic before launching an offer — kill filters, viability scoring, 6-score monetisation tests — and then never apply equivalent logic after the offer is live. The result is a business carrying dead or dying offers that consume operational bandwidth, advertising budget, and emotional energy while producing little or no return.",

    "",

    "This SOP defines the post-launch system for making objective kill, pivot, iterate, or scale decisions at every stage of an offer's lifecycle. It eliminates the sunk-cost thinking that keeps broken offers alive, provides the specific numerical thresholds that determine each decision, and defines the process for killing an offer cleanly — archiving its intelligence, honouring existing buyers, and extracting every lesson before the door closes.",

    "",

    "Kennedy's Kill Rule",

    "The most expensive thing in your business is an offer you should have killed six months ago. It is consuming ad spend, support bandwidth, team attention, and your own belief in the market. Kill it. Learn from it. Build the next one smarter. The trail of killed offers is not a sign of failure — it is the evidence that you are iterating toward something that works.",

    "",

    "Hormozi's Fuel Rule",

    "Never add fuel to a broken vehicle. Scaling traffic, increasing ad spend, or adding more affiliates to an offer that has not passed its kill-or-scale assessment is how operators spend $50K proving what $5K of organic data already told them. Fix the vehicle first. Then add fuel.",

    "",

    "Brunson's Funnel Law",

    "You are one funnel away from success — but only if you are willing to kill the ones that are not working. The operators who win are not smarter. They are faster at recognising what is not working and more willing to cut it.",

    "",

    "The Sunk Cost Problem: Why Offers Stay Alive Too Long",

    "Before the kill criteria, the system must confront the reason those criteria are so rarely applied. The sunk cost fallacy — the tendency to continue investing in something because of prior investment rather than future potential — kills more businesses slowly than any market condition ever has.",

    "",

    "Sunk Cost Bias",

    "How It Manifests",

    "The Rational Counter",

    "Time investment bias",

    "'I spent 3 months building this. I can't just kill it.'",

    "The 3 months are gone regardless of what you decide today. The only question is whether the next 3 months goes into a working offer or a broken one.",

    "Identity attachment",

    "'This offer represents my core methodology. Killing it feels like killing part of myself.'",

    "The methodology survives the offer. Rename the mechanism. Repackage the IP. Kill the specific execution that is not working — not the expertise behind it.",

    "Audience validation hunger",

    "'People say they love this offer even if they're not buying.'",

    "Compliments are not revenue. Kennedy: 'Validate with dollars, not compliments.' If the audience loves it and will not pay for it, the market has spoken.",

    "Optimism bias",

    "'I just need to fix one more thing and it will work.'",

    "Define in advance what 'one more thing' means. If you have already made three 'one more thing' changes and the metrics have not moved, the problem is structural — not fixable with incremental iteration.",

    "Social proof protection",

    "'I have testimonials from this offer. If I kill it, I lose the social proof.'",

    "Testimonials belong to the buyer and the result, not the offer format. Testimonials from a killed offer can be repurposed in a new, better offer that serves the same transformation.",

    "Sunken ad spend",

    "'I've spent $8K in ads to prove this. I need to recoup that before stopping.'",

    "The $8K is already spent. Continuing to run an unworkable offer to recoup sunk ad cost will result in spending $16K to prove what $8K already proved. Cut the loss now.",

    "",

    "The Pre-Commitment Solution",

    "The most effective way to override sunk cost bias is to define your kill criteria before launch — not during the emotional heat of a failing offer. This SOP works best when you set your kill thresholds at the point of launch, file them in Airtable, and commit to honouring them regardless of how the offer makes you feel at the point of decision.",

    "",

    "",

    "The Offer Lifecycle Model",

    "Kill criteria are not static. An offer at day 7 is held to completely different standards than an offer at day 90. Applying day-90 thresholds to a day-7 offer produces false kills. Applying day-7 thresholds to a day-90 offer allows zombie offers to survive indefinitely. The lifecycle model defines which metrics and which thresholds apply at each stage.",

    "",

    "Stage 1\nLaunch",

    "Days 1–14",

    "Proof of market response",

    "Stage 2\nValidation",

    "Days 15–45",

    "Conversion rate signal",

    "Stage 3\nTraction",

    "Days 46–90",

    "Unit economics viability",

    "Stage 4\nScale",

    "Days 91–180",

    "Paid traffic profitability",

    "Stage 5\nDecline",

    "180+ days",

    "Renewal and ascension rate",

    "",

    "Stage-Specific Assessment Points",

    "Stage",

    "Primary Question",

    "Key Metric",

    "Decision at This Stage",

    "Stage 1 — Launch\n(Days 1–14)",

    "Is anyone responding to this offer at all?",

    "First sale: did any paying buyers emerge without heavy persuasion from a warm audience within 14 days?",

    "If zero sales from a warm list of 500+ after a proper 7-day launch sequence: trigger Stage 1 Kill Assessment. Do not move to paid ads.",

    "Stage 2 — Validation\n(Days 15–45)",

    "Is the conversion rate statistically viable for the offer type?",

    "Cold conversion rate after 200+ unique visitors. Warm conversion rate after full email sequence delivery to warm list.",

    "If cold conversion remains below threshold after 300+ visitors and one round of copy iteration: trigger Full Kill Assessment (Phase 3 scorecard).",

    "Stage 3 — Traction\n(Days 46–90)",

    "Do the unit economics work?",

    "Cost Per Acquisition vs. Offer Price ratio. Refund rate. Support cost per buyer. LTV:CAC ratio.",

    "If unit economics fail the Stage 3 thresholds after genuine traffic investment: trigger Full Kill Assessment. Do not scale.",

    "Stage 4 — Scale\n(Days 91–180)",

    "Is this offer still working as ad spend increases?",

    "ROAS by platform. CPA trend (improving, flat, or worsening). Ascension rate to next tier.",

    "If ROAS declines below 2.0x and CPA exceeds 35% of offer price for 21+ consecutive days: trigger Scale-to-Iterate or Kill decision.",

    "Stage 5 — Decline\n(180+ days)",

    "Is this offer earning its continued existence?",

    "Month-over-month revenue trend. Mechanism freshness (see Forensic Audit SOP). Competitive landscape shift.",

    "If revenue has declined 40% from peak for 60+ consecutive days with no identifiable external cause: trigger Full Kill Assessment or Relaunch Protocol.",

    "",

    "",

    "PHASE 1",

    "The Pre-Kill Diagnostic",

    "Rule out fixable problems before killing — so you only kill when death is actually warranted",

    "",

    "The Diagnostic Purpose",

    "The Pre-Kill Diagnostic exists because most offers that appear to be dying are not actually broken at the offer level — they are broken at the traffic, copy, or distribution level. Killing a valid offer because the ad creative was stale or the email subject line was weak is an extremely expensive mistake. This diagnostic rules out six fixable causes before the kill assessment begins.",

    "",

    "The Rule",

    "Do not enter the Kill Assessment (Phase 3) until every item in the Pre-Kill Diagnostic has been addressed. If any diagnostic item is unresolved, fix it first — then measure again for the minimum window specified. Only enter Kill Assessment if the metrics fail after the diagnostic fixes have been applied.",

    "",

    "The Six Fixable Causes of Poor Performance",

    "Fixable Cause",

    "Diagnostic Question",

    "Evidence That This Is the Problem",

    "Minimum Fix & Retest Window",

    "Traffic volume insufficient",

    "Have at least 200 unique cold visitors seen this offer (300+ preferred for statistical significance)?",

    "Conversion rate data is based on fewer than 200 unique cold visitors. Any rate below 200 visits is noise, not signal.",

    "Drive 200+ unique visitors through organic promotion or minimal paid spend ($300–$500 test budget) before assessing cold conversion rate.",

    "Traffic source mismatch",

    "Is the traffic source aligned with the awareness level the offer page assumes?",

    "Cold traffic is landing on a page written for warm or hot traffic. Sales page assumes prior relationship or context the visitor does not have.",

    "Audit the first 500 words of the sales page for assumed context. Rewrite the lead assuming zero prior awareness. Retest for 7 days.",

    "Copy — headline not tested",

    "Has the headline been A/B tested with at least 2 meaningfully different angles?",

    "Single headline has been running since launch. No split test data.",

    "Write 3 headline variants (pain hook, desire hook, mechanism hook). Run split test for minimum 14 days or 200 visitors per variant. Decision only after test concludes.",

    "Email sequence — not complete or not deployed",

    "Has the full 14-day email sequence been deployed to the warm list?",

    "Fewer than 10 emails have been sent, or the sequence was stopped early, or the list size was fewer than 200 subscribers.",

    "Complete the full 14-day sequence to a list of 200+ subscribers. Assess warm conversion rate after the sequence concludes.",

    "Guarantee — not sufficiently strong",

    "Has a meaningful guarantee been tested against the current version?",

    "Current guarantee is a basic 30-day money-back with no conditions or commitment language. Has never been upgraded.",

    "Test the Level 3 guarantee (result-based conditional) against current guarantee for 14 days. If conversion lifts 15%+ — guarantee was the problem, not the offer.",

    "Offer stack — not presented clearly",

    "Has the full value stack (bonuses, mechanism, deliverables, guarantee, social proof) been tested in the Brunson Stack Slide format?",

    "Sales page does not have a visual offer stack with individual bonus values listed. The offer is described narratively without a stacked presentation.",

    "Rebuild the sales page's offer section as a Stack Slide: list each component, assign a standalone value, show total value vs. asking price. Retest for 14 days.",

    "",

    "Pre-Kill Diagnostic Checklist",

    "Complete this checklist before opening a kill assessment. Every item marked 'Not yet addressed' must be actioned and retested before proceeding to Phase 3.",

    "",

    "Diagnostic Item",

    "Status",

    "Retest Window",

    "Cleared?",

    "Minimum 200 unique cold visitors have seen the offer",

    "☐ Yes  ☐ No",

    "N/A if yes; drive traffic first if no",

    "☐",

    "Traffic source awareness level matches sales page assumption",

    "☐ Matched  ☐ Mismatch",

    "Fix + 7 days",

    "☐",

    "Minimum 2 headline variants A/B tested",

    "☐ Yes  ☐ Not yet",

    "14 days / 200 visitors per variant",

    "☐",

    "Full 14-day email sequence deployed to 200+ warm subscribers",

    "☐ Yes  ☐ Not yet",

    "Deploy and wait for sequence to complete",

    "☐",

    "Level 3 guarantee tested against current guarantee",

    "☐ Yes  ☐ Not yet",

    "14 days split test",

    "☐",

    "Stack Slide offer presentation tested",

    "☐ Yes  ☐ Not yet",

    "14 days after implementation",

    "☐",

    "",

    "",

    "PHASE 2",

    "Hard Kill Triggers",

    "Automatic — if any of these conditions are met, the offer is killed immediately, no scorecard required",

    "",

    "The Hard Kill Principle",

    "Hard Kill Triggers are non-negotiable. They represent conditions that cannot be iterated out of, that create unacceptable risk to the business or its buyers, or that indicate a fundamental structural incompatibility between the offer and the market. When any Hard Kill Trigger is met, the offer is killed within 48 hours. No scorecard. No deliberation. No 'one more try.'",

    "",

    "Why No Deliberation",

    "The purpose of defining Hard Kill Triggers in advance is to remove the decision from the emotional present and place it in the rational past. You are not deciding whether to kill the offer when you are emotionally invested in it. You decided the conditions for killing it before you launched it. Now you are just honouring that decision.",

    "",

    "Trigger",

    "Threshold",

    "Rationale",

    "Action Timeline",

    "HK-1: Catastrophic refund rate",

    "Refund rate exceeds 30% of total sales after a minimum of 20 sales",

    "A refund rate above 30% indicates a systematic failure in promise delivery or a fundamental mismatch between what was sold and what was received. This is not fixable with copy changes — the offer is broken at the product level.",

    "Kill within 48 hours. Pause all ads immediately. Begin Post-Kill Protocol.",

    "HK-2: Legal or compliance violation identified",

    "Any confirmed violation of FTC guidelines, TCPA regulations, platform terms of service, or applicable consumer protection law",

    "Legal exposure compounds exponentially the longer a non-compliant offer remains live. Compliance violations can result in platform bans, financial penalties, and reputational damage that far exceeds any revenue from the offer.",

    "Kill within 24 hours. Consult legal counsel before relaunch. Do not attempt to fix and relaunch without written legal clearance.",

    "HK-3: Fulfilment breakdown — unable to deliver",

    "You are materially unable to deliver the core promise of the offer to existing or new buyers",

    "Continuing to sell an offer you cannot deliver is both legally and ethically indefensible. Fulfilment breakdown triggers immediate offer suspension, not iteration.",

    "Suspend new sales within 24 hours. Communicate with existing buyers within 48 hours. Full refund offered to all buyers unable to receive delivery.",

    "HK-4: Zero warm conversion after complete sequence",

    "Zero sales from a warm list of 500+ after a full 14-day email sequence has been deployed, with at least 25% open rate confirmed",

    "A 25%+ open rate confirms the sequence was read. Zero purchases from 500+ warm subscribers who read the sequence means the offer is rejected by people who know, like, and trust you. This is the harshest market signal available.",

    "Kill within 7 days. Do not move to cold paid traffic. Begin Post-Kill Protocol.",

    "HK-5: Cold conversion remains below 0.3% after diagnostic complete",

    "Cold conversion rate remains below 0.3% after all six Pre-Kill Diagnostic fixes have been applied and retested over a minimum of 300 unique cold visitors",

    "0.3% is the absolute floor for any offer that can ever be made profitable through paid advertising. Below 0.3% with a clean diagnosis means the offer itself is the problem — not the copy, not the traffic.",

    "Kill within 14 days of confirmed diagnostic completion. Do not spend further on ads.",

    "HK-6: Negative NPS after 20+ responses",

    "Net Promoter Score falls below -10 after a minimum of 20 buyer survey responses",

    "An NPS below -10 means your detractors significantly outnumber your promoters. This offer is actively generating negative word-of-mouth at a rate that will compound against every future launch.",

    "Kill within 7 days of confirmed NPS threshold. Conduct emergency buyer interviews. Do not run this offer again without rebuilding from scratch.",

    "HK-7: CPA exceeds 60% of offer price after $3,000+ ad spend",

    "Cost Per Acquisition exceeds 60% of the offer's sale price after at least $3,000 has been spent testing across at least 2 different audience types",

    "At a CPA of 60% of revenue, there is no viable business. After refunds, fulfilment costs, and payment processing fees, the unit economics are deeply negative and cannot be corrected by optimising an offer that the market is systematically rejecting.",

    "Kill paid spend immediately. Offer may continue organically if organic conversion is strong. If organic also fails, full kill.",

    "",

    "",

    "PHASE 3",

    "The Kill Assessment Scorecard",

    "For offers that have not triggered a Hard Kill — the objective scoring system",

    "",

    "When to Run the Scorecard",

    "The Kill Assessment Scorecard is run when an offer has cleared the Pre-Kill Diagnostic (Phase 1), has not triggered a Hard Kill (Phase 2), but is underperforming against its stage-specific thresholds. It produces a numerical score that maps to one of four decisions: Kill, Pivot, Iterate, or Scale.",

    "",

    "The Scorecard (15 Dimensions — Maximum 60 Points)",

    "Score each dimension objectively using the evidence available. Do not round up out of optimism. Do not round down out of frustration. Use the data.",

    "",

    "Dimension",

    "0 Points — Critical Failure",

    "1 Point — Below Viable",

    "2 Points — Viable",

    "3 Points — Strong",

    "4 Points — Excellent",

    "Your Score",

    "Cold conversion rate",

    "Below 0.5%",

    "0.5–0.9%",

    "1.0–1.9%",

    "2.0–3.9%",

    "4.0%+",

    "___",

    "Warm conversion rate",

    "Below 2%",

    "2–4%",

    "5–9%",

    "10–19%",

    "20%+",

    "___",

    "Refund rate",

    "Above 20%",

    "15–20%",

    "8–14%",

    "3–7%",

    "Below 3%",

    "___",

    "Programme completion rate",

    "Below 25%",

    "25–44%",

    "45–59%",

    "60–74%",

    "75%+",

    "___",

    "Specific result testimonials (per 10 buyers)",

    "0",

    "1",

    "2–3",

    "4–5",

    "6+",

    "___",

    "Email open rate (14-day sequence)",

    "Below 15%",

    "15–19%",

    "20–29%",

    "30–39%",

    "40%+",

    "___",

    "Support tickets per buyer (per 30 days)",

    "Above 8",

    "5–8",

    "3–4",

    "1–2",

    "0–1",

    "___",

    "CPA as % of offer price",

    "Above 50%",

    "40–50%",

    "25–39%",

    "15–24%",

    "Below 15%",

    "___",

    "Ascension rate to next tier",

    "Below 3%",

    "3–5%",

    "6–9%",

    "10–14%",

    "15%+",

    "___",

    "Buyer NPS score",

    "Below -10",

    "–10 to 0",

    "1–20",

    "21–40",

    "41+",

    "___",

    "Month-over-month revenue trend",

    "Declining >20%",

    "Declining 5–20%",

    "Flat (±5%)",

    "Growing 5–19%",

    "Growing 20%+",

    "___",

    "Value Equation audit — Dream Outcome score",

    "1–2 (broken)",

    "3–4 (weak)",

    "5–6 (adequate)",

    "7–8 (strong)",

    "9–10 (excellent)",

    "___",

    "Value Equation audit — Perceived Likelihood score",

    "1–2 (broken)",

    "3–4 (weak)",

    "5–6 (adequate)",

    "7–8 (strong)",

    "9–10 (excellent)",

    "___",

    "Value Equation audit — Time Delay score",

    "1–2 (broken)",

    "3–4 (weak)",

    "5–6 (adequate)",

    "7–8 (strong)",

    "9–10 (excellent)",

    "___",

    "Value Equation audit — Effort & Sacrifice score",

    "1–2 (broken)",

    "3–4 (weak)",

    "5–6 (adequate)",

    "7–8 (strong)",

    "9–10 (excellent)",

    "___",

    "",

    "Score Interpretation",

    "",

    "KILL",

    "Score 0–24 (out of 60) — or any Hard Kill Trigger fired regardless of score",

    "The offer has failed across multiple dimensions and cannot be fixed through incremental iteration. The structural problems are too numerous or too deep. Kill the offer using the Clean Kill Process (Phase 5). Extract all intelligence using the Post-Kill Protocol (Phase 6).",

    "",

    "PIVOT",

    "Score 25–34 — with 3 or more dimensions at 0 or 1",

    "The core premise or mechanism may be viable but the execution is failing broadly. Iteration will not fix this — it requires a structural change to the offer format, the target avatar, the pricing tier, or the delivery mechanism. A pivot is not a kill — it is a rebuild that preserves the underlying insight.",

    "",

    "ITERATE",

    "Score 35–44 — with no more than 2 dimensions at 0 or 1",

    "Specific, diagnosable problems exist but the offer has real signal. The fix is targeted — not a rebuild. Identify the 2–3 lowest-scoring dimensions. Apply the specific iteration protocol for each. Retest over 30 days. Re-run the scorecard.",

    "",

    "SCALE",

    "Score 45–60 — with no dimension below 2",

    "The offer is working. Unit economics are viable. Buyers are getting results. The correct move is to add fuel: increase ad spend by 20%/day maximum, add a second traffic source, launch the affiliate programme for this offer, activate the ascension sequence to the next tier.",

    "",

    "",

    "PHASE 4",

    "The Kill vs. Pivot vs. Iterate Decision Framework",

    "When the scorecard says Kill or Pivot — making the right structural choice",

    "",

    "Kill vs. Pivot: The Critical Distinction",

    "A Kill and a Pivot both result in the current version of the offer being retired. The distinction is what survives. In a Kill, the offer and the mechanism are both retired — the market has rejected both the delivery and the promise. In a Pivot, the mechanism and the insight are preserved but the execution — the format, avatar, price point, or delivery model — is fundamentally changed.",

    "",

    "Scenario",

    "Correct Decision",

    "What Survives",

    "What Dies",

    "Relaunch Timing",

    "The offer fails but exit interviews reveal that buyers wanted the transformation and understood the mechanism — they just could not implement it as designed",

    "PIVOT",

    "The mechanism name. The core insight. The buyer language mined. The testimonials (partial).",

    "The delivery format and price point. The sales page structure. The current fulfilment model.",

    "90 days minimum. Rebuild the delivery model (e.g. self-paced course → live cohort, or group → done-for-you).",

    "The offer fails and exit interviews reveal that buyers did not understand what they were buying or found the mechanism irrelevant to their actual problem",

    "KILL",

    "The buyer language (negative avatar data). The email list of buyers. The lessons about what does NOT work.",

    "Everything. The mechanism name, the copy, the delivery model, the entire frame. Start fresh.",

    "No automatic relaunch. Return to MVO Playbook Phase 1 with accumulated data as the brief.",

    "The offer fails and the refund messages consistently describe expecting something fundamentally different from what was delivered",

    "PIVOT (copy pivot)",

    "The delivery and mechanism. The results that existing buyers did achieve.",

    "The sales page positioning, the headline, the promise language. The gap was in how it was sold, not what was delivered.",

    "30 days. Rebuild sales copy from scratch using exit interview language. Keep delivery identical.",

    "The offer fails and the primary issue is price — buyers consistently cite 'too expensive' or conversion rate is strong at lower price points in A/B testing",

    "PIVOT (price pivot)",

    "The entire offer. The mechanism. The delivery. The copy.",

    "The price point. The implied buyer tier (you may be serving a different income bracket than you targeted).",

    "2 weeks. Reprice and relaunch. Monitor whether the new buyer profile changes support load and completion rate.",

    "The offer works for a specific sub-segment but not for the broad avatar it was positioned for",

    "PIVOT (avatar pivot)",

    "The mechanism. The delivery. The results from the working sub-segment.",

    "The broad positioning, the broad ad targeting, the generic sales page copy.",

    "4 weeks. Narrow the positioning to the sub-segment where results are consistent. Rebuild copy for that specific avatar.",

    "",

    "Iterate Protocol: The 2-Fix Maximum Rule",

    "When the scorecard indicates Iterate, you are permitted to make targeted changes to the lowest-scoring dimensions. The 2-Fix Maximum Rule applies: identify the two lowest-scoring dimensions, implement one specific fix for each, and retest for 30 days before running the scorecard again. Making more than two changes simultaneously makes it impossible to know which fix worked.",

    "",

    "Failing Dimension",

    "Specific Iteration Action",

    "Retest Metric",

    "Retest Window",

    "Cold conversion below 1%",

    "A/B test a new headline with a Pain-Acute hook derived from buyer language mining. Do not change any other element on the sales page during the test.",

    "Cold conversion rate. Minimum 200 unique visitors per variant.",

    "14 days minimum",

    "Completion rate below 45%",

    "Add a mandatory 72-hour Quick Win to Module 1. The Quick Win must produce a visible, shareable output. Add accountability check-in at hour 48.",

    "Module 1 completion rate. Dropout rate at Module 1 boundary.",

    "Next cohort cycle",

    "Refund rate above 10%",

    "Audit the sales page promise against the programme's actual deliverables. Identify the specific gap and fix either the copy (reduce the promise to match delivery) or the delivery (expand the deliverable to match the promise).",

    "Refund rate over the following 30 days. Refund root cause codes.",

    "30 days",

    "NPS below 20",

    "Conduct 5 buyer interviews in the first week after purchase. Identify the gap between their expectation at purchase and their experience in delivery. Fix the single most-cited gap.",

    "NPS at next survey cycle (30 days). Support ticket volume.",

    "30 days",

    "Ascension rate below 6%",

    "Rewrite the ascension sequence. Change the timing of the ascension offer presentation. Test presenting the Core Offer at Day 14 post-MVO-purchase instead of Day 21 or Day 30.",

    "Ascension rate over 60 days.",

    "60 days",

    "CPA above 35% of price",

    "Pause the lowest-performing ad set. Test a new creative format (video vs. static). Test a new audience segment derived from your best-converting buyers' lookalike.",

    "CPA over 14 days of new creative.",

    "14 days",

    "",

    "",

    "PHASE 5",

    "The Clean Kill Process",

    "How to retire an offer with integrity — protecting buyers and extracting maximum intelligence",

    "",

    "The Clean Kill Principle",

    "Killing an offer is not an emergency or a shame event. It is a business decision that, executed well, protects your reputation, honours your existing buyers, and produces the intelligence that makes the next offer better. A poorly executed kill — abrupt, unexplained, or disorganised — damages trust with buyers, confuses the market, and wastes the data the offer generated.",

    "",

    "The 72-Hour Kill Sequence",

    "From the moment the kill decision is confirmed, the following sequence must be completed within 72 hours for Hard Kill Triggers (HK-1 through HK-7) and within 14 days for scorecard-based kills.",

    "",

    "Hour / Day",

    "Action",

    "Owner",

    "Output",

    "Hour 0–4",

    "Pause all paid advertising for the offer. Immediately. No exceptions. Every additional dollar spent on a killed offer is wasted.",

    "Ads manager / founder",

    "All active ad campaigns paused. Budget released.",

    "Hour 4–8",

    "Deactivate or archive the offer page. Redirect the URL to either the homepage, an appropriate alternative offer page, or a 'This offer is no longer available' page that includes a waitlist opt-in.",

    "Tech / founder",

    "Offer page redirected. URL not returning 404.",

    "Hour 8–16",

    "Deactivate the email sequence associated with the offer. Any new subscribers who triggered the sequence after the kill decision will not receive offer-specific emails.",

    "Email platform / founder",

    "Email sequence deactivated. Active sequence recipients noted.",

    "Day 1",

    "Send the Buyer Communication Email (see template below) to all current buyers who are within their active delivery window. Explain the situation with clarity and without corporate language.",

    "Founder (personal tone required)",

    "Buyer communication sent. Inbox monitored for 48 hours.",

    "Day 1–2",

    "Pull all data exports: buyer list, refund records, support ticket archive, community posts, email reply archive, exit interview recordings. Store in designated archive folder.",

    "Ops / founder",

    "Full data archive in Google Drive / Airtable. Nothing deleted.",

    "Day 2",

    "Cancel or pause any affiliate commissions on new sales. Notify affiliates of the offer closure with a professional explanation and, where appropriate, an alternative offer to promote.",

    "Affiliate manager / founder",

    "Affiliate notification sent. Pending commissions reviewed.",

    "Day 3",

    "Complete the Post-Kill Intelligence Form (Phase 6 template). While the experience is fresh. Do not wait.",

    "Founder",

    "Post-Kill Intelligence Form filed in Airtable.",

    "Day 7 (post-kill)",

    "Review the Buyer Communication inbox. Address any unresolved buyer concerns. Process any refund requests that arrived in the kill window.",

    "Support / founder",

    "All buyer communications resolved.",

    "Day 14 (post-kill)",

    "Run the Negative Avatar Profile check: do any refund patterns from this offer need a new profile created? Update Negative Avatar Airtable accordingly.",

    "Founder",

    "Negative Avatar updates complete.",

    "",

    "Buyer Communication Email Template",

    "This email is sent personally from the founder. It is plain text, not designed, and not run through the standard email platform's branded template. It reads like a human being wrote it because a human being should have written it.",

    "",

    "Buyer Communication Template",

    "Subject: An important update about [Offer Name]\n\nHi [First Name],\n\nI want to be straight with you about something.\n\nWe have decided to retire [Offer Name] effective [date]. This means we will not be accepting new students, and I want to explain why — and what it means for you specifically.\n\n[One of the following, as applicable:]\n\nVersion A (Product not delivering promised results): After reviewing the results our students have achieved and being honest about where the gaps are, I am not comfortable continuing to sell this offer in its current form. You deserve better than I built.\n\nVersion B (Strategic pivot): We are focusing our energy on [New Offer / Direction], which does [specific thing] better than this offer could. This is a strategic decision, not a quality issue.\n\nWhat this means for you:\n\nIf you are currently in the programme — you will continue to have access to everything you purchased until [specific date]. Nothing is being removed from your account.\n\nIf you would like a refund — I will honour a full refund regardless of where you are in the programme and regardless of whether you are within the standard refund window. Email [email] with 'Refund Request' in the subject line.\n\nIf you would like to move to [Alternative Offer] — [specific transition offer if applicable].\n\nI am sorry if this is disruptive. It is the right call.\n\n[Your name]",

    "",

    "",

    "PHASE 6",

    "Post-Kill Intelligence Extraction",

    "The data from a killed offer is worth more than the revenue it generated",

    "",

    "The Intelligence Extraction Principle",

    "A killed offer generates more actionable intelligence than a successful one — because failure reveals the exact fracture lines in your assumptions about the market. Every operator who kills an offer without systematically extracting its intelligence is discarding the most expensive education they will ever receive.",

    "",

    "Kennedy on Failed Offers",

    "Every failed offer is a message from the market. The market never lies. It does not explain itself. But if you build a system for reading what it is saying — through refund language, dropout patterns, support tickets, and buyer interviews — it will tell you everything you need to know about what to build next.",

    "",

    "The Post-Kill Intelligence Form",

    "Complete this form within 3 days of the kill decision. File in Airtable under Kill Records. Do not complete it weeks later — the clarity of the post-mortem degrades rapidly with time.",

    "",

    "Field",

    "What to Document",

    "Kill Record ID",

    "Autonumber — auto-generated",

    "Offer name and version",

    "Full offer name + which version was killed (V1, V2, etc.)",

    "Kill date",

    "",

    "Kill trigger type",

    "Hard Kill (specify HK code) / Scorecard-based Kill (record final scorecard score) / Strategic Kill",

    "Final scorecard score",

    "Record all 15 dimension scores and the total. This is the permanent benchmark.",

    "Total buyers",

    "How many people purchased before the kill",

    "Total revenue",

    "Gross revenue generated before kill",

    "Total refunds",

    "Number and percentage",

    "Net revenue",

    "After refunds",

    "Total ad spend",

    "All paid acquisition costs associated with this offer",

    "ROAS (if applicable)",

    "Net revenue / ad spend",

    "The single most important lesson",

    "In one sentence: what did this offer teach you that you did not know before? This should be specific enough to change a specific future decision.",

    "The copy gold",

    "Top 5 buyer language phrases mined from this offer's data (verbatim). These survive the kill and go directly into the next offer's copy brief.",

    "The assumption that was wrong",

    "What did you believe about the market, the buyer, or the mechanism that this offer's failure proved incorrect?",

    "The Negative Avatar defined",

    "Which Negative Avatar archetype was most commonly attracted? What specific language attracted them? (Links to Negative Avatar Airtable table)",

    "The Next Problem Signal",

    "Did this offer's buyers reveal a Problem B — the thing they needed next that you have not yet built? Document it here.",

    "What the market actually wanted",

    "Based on all available data — what offer would have served this audience correctly?",

    "What was preserved",

    "List any copy assets, mechanism names, buyer relationships, or marketing angles that survive the kill and are being transferred to the next offer brief.",

    "Relaunch eligibility",

    "Yes — conditions defined / No — full retirement / Pivot — specify the pivot direction",

    "",

    "Copy and Asset Salvage Protocol",

    "Before the killed offer's folder is archived, run this salvage protocol. Assets that survive the kill are tagged 'Salvage — from [Offer Name]' and moved to a dedicated Salvage folder that feeds into future offer development.",

    "",

    "Asset Type",

    "Salvage Criteria",

    "What to Do With It",

    "Buyer language from email replies",

    "All tagged phrases from Phase 3 of the Forensic Audit (PAIN-ACUTE, PAIN-CHRONIC, DESIRE-HIDDEN, OBJECTION tags)",

    "Move to the Master Language Mining database. Tag source as 'Kill Salvage — [Offer Name]'. These phrases are valid regardless of whether the offer worked.",

    "Testimonials from buyers who got results",

    "Any testimonial where the buyer achieved a specific, measurable result that can be attributed to the mechanism",

    "Move to proof library. Can be used in the next offer if the mechanism is preserved. Cannot be used if the mechanism is killed and replaced.",

    "Exit interview recordings",

    "All recordings",

    "Archive in Google Drive. Tag with date and offer name. Transcripts extracted and stored in language mining database.",

    "Sales page copy — performing sections",

    "Sections of the sales page where heatmap data showed high engagement, low bounce, or direct scroll-to-CTA behaviour",

    "Save as 'High-engagement copy segments' in copy swipe file. Even in a failed offer, some sections worked.",

    "Email sequence — high-open-rate emails",

    "Any email in the 14-day sequence that achieved above 35% open rate",

    "Archive the subject line and the opening paragraph. These are proven attention-capturing elements independent of the offer.",

    "The mechanism name (if not killed)",

    "If the pivot/iterate decision preserved the mechanism name — the name goes directly into the next offer brief",

    "Transfer to next offer's MVO Playbook Phase 2 document as the named mechanism.",

    "",

    "",

    "PHASE 7",

    "The Resurrection Protocol",

    "The specific conditions under which a killed offer can be relaunched",

    "",

    "What Qualifies for Resurrection",

    "Not every killed offer should stay dead. Some offers fail at the wrong time, to the wrong audience, with the wrong positioning — but the underlying mechanism and transformation are valid. The Resurrection Protocol defines the conditions under which a killed offer can return to market, and the required changes before it does.",

    "",

    "The Non-Negotiable Gap",

    "A killed offer must remain off the market for a minimum of 90 days before any relaunch consideration. This gap allows buyer memory of the original failure to fade, provides time for the market conditions to shift, and — most importantly — forces genuine rebuilding rather than cosmetic changes. Any relaunch before 90 days is a patch. After 90 days, it can be a real revision.",

    "",

    "The Resurrection Criteria Checklist",

    "Every item in this checklist must be completed before a killed offer re-enters the market. No partial exceptions.",

    "",

    "Requirement",

    "What It Means",

    "How to Evidence Completion",

    "Minimum 90-day gap from kill date",

    "The offer has been off the market for at least 90 calendar days",

    "Kill date in Airtable Kill Record. Today's date minus kill date is ≥ 90.",

    "Root cause identified and addressed",

    "The specific reason the offer failed (from Phase 5 Kill Record, 'The assumption that was wrong' field) has been specifically addressed in the rebuilt offer",

    "Updated offer brief documents the specific change made in response to the identified root cause. One change per root cause — not vague 'improvements.'",

    "New buyer interviews conducted",

    "Minimum 3 new buyer interviews with the intended target avatar conducted after the kill — not from the original buyer pool",

    "Interview transcripts dated after the kill date. Must include at least one person who was NOT a buyer of the original offer.",

    "Offer rebuilt from copy brief, not from the original",

    "The new version was written from a fresh copy brief using the Post-Kill intelligence, not by editing the original sales page",

    "New copy brief document in Airtable dated after kill. If the sales page draft clearly resembles the original with light edits — it is not a rebuild. Start over.",

    "Negative Avatar profiles from original offer are active",

    "The Negative Avatar Profiles created from the original offer's data are deployed in the new offer's repulsion system: 'Not for you' copy, ad exclusions, and application gates",

    "New offer's sales page 'Not for you' section includes at least one bullet per active Negative Avatar Profile. Ad exclusion list updated.",

    "Beta cohort run before public relaunch",

    "A minimum of 5-buyer paid beta is run on the rebuilt offer before the public sales page goes live",

    "Beta Testing SOP records in Airtable. Beta scorecard passed (Go/No-Go thresholds met). Beta dated after kill.",

    "",

    "Permanent Retirement — When Not to Resurrect",

    "Some killed offers should stay killed. These conditions indicate permanent retirement with no resurrection path:",

    "",

    "•  The market the offer was designed for no longer exists or has been commoditised to the point where profitable differentiation is not achievable.",

    "•  The primary mechanism has been replicated by a better-resourced competitor and can no longer be positioned as differentiated.",

    "•  The offer generated three or more legal complaints, regulatory reviews, or FTC scrutiny — regardless of their outcome. The reputation risk of the specific offer persists beyond the compliance resolution.",

    "•  The Post-Kill Intelligence Form's 'assumption that was wrong' field reveals that the market does not actually have the problem the offer was designed to solve. This is not a copywriting problem — it is a market existence problem.",

    "•  The offer's total cost (ad spend, time, legal, support) exceeded its total revenue — and the rebuilt version cannot be demonstrated via the beta to achieve different unit economics.",

    "",

    "",

    "PHASE 8",

    "The Zombie Offer Audit",

    "Finding and killing the offers that should have died months ago",

    "",

    "What a Zombie Offer Is",

    "A Zombie Offer is one that is technically still live — it has a sales page, it may even have a small email sequence, it may be listed on the offer wall — but it is generating near-zero revenue, receiving near-zero traffic, and consuming operational resources through the mere fact of its continued existence.",

    "",

    "The Zombie Offer Problem",

    "Zombie offers cost you in three ways. First, they consume the mental space of being 'things that need attention eventually.' Second, they occasionally attract wrong-fit buyers who stumble on old content, generating support tickets and refund requests on an offer nobody is actively managing. Third, they distort your offer wall and create confusion for buyers about which path to take. Kill them.",

    "",

    "The Quarterly Zombie Audit",

    "Run this audit on the first Monday of every quarter. Any offer that meets the Zombie Criteria below is placed on a 30-day remediation watchlist. If it fails to recover within 30 days, it is killed using the Clean Kill Process.",

    "",

    "Zombie Criterion",

    "Threshold",

    "Why It Qualifies",

    "Revenue below floor for consecutive months",

    "Below $500 gross revenue for 3 consecutive months for any offer priced above $97",

    "At this revenue level, the offer is not covering its own operational overhead — support, payment processing, platform fees, and email sends.",

    "No new buyers in 60+ days",

    "Zero new purchases in 60+ consecutive days",

    "An offer with no buyers for 60 days is effectively dead. It is consuming a sales page URL, a purchase flow, a delivery system, and an email sequence for zero return.",

    "Traffic below viable testing threshold for 90 days",

    "Fewer than 50 unique visitors per month for 90+ consecutive days",

    "Below 50 monthly visitors, there is no data being generated. The offer is neither working nor failing — it is simply invisible. That is not a business; it is an archive.",

    "No active promotional activity for 60 days",

    "No email campaigns, no ad spend, no organic content referencing the offer in 60+ days",

    "If you have not promoted an offer in 60 days, you have already informally killed it. Formalise that decision with the Clean Kill Process and archive the assets properly.",

    "",

    "The 30-Day Remediation Protocol",

    "Any offer flagged in the Zombie Audit is given a single 30-day remediation window before the kill decision is finalised. The remediation must be active — not passive observation.",

    "",

    "1.  Run the Kill Assessment Scorecard (Phase 3) immediately on the flagged offer. If the score is below 25, skip remediation — proceed directly to Kill.",

    "2.  If the scorecard score is 25 or above, identify the single highest-leverage change that could revive the offer within 30 days. One change only.",

    "3.  Implement the change and drive minimum 100 unique warm visitors to the offer page within the 30-day window.",

    "4.  At day 30, re-run the scorecard. If the score has not improved by at least 8 points — kill the offer.",

    "5.  If the score has improved by 8+ points but is still below Scale threshold — run the iterate protocol for one more 30-day cycle only. Two cycles maximum before kill.",

    "",

    "",

    "Kill Records Database — Airtable Schema",

    "All kill decisions, post-kill intelligence, and resurrection assessments are stored in a dedicated Kill Records table, linked to the Offers table, the Negative Avatar Profiles table, and the Forensic Audit records.",

    "",

    "Kill Records Table",

    "Field",

    "Type",

    "Notes",

    "Kill Record ID",

    "Autonumber",

    "Format: KILL-[Year]-[Seq]. E.g. KILL-2026-003",

    "Offer",

    "Link → Offers table",

    "The offer that was killed",

    "Kill date",

    "Date",

    "",

    "Kill type",

    "Single select",

    "Hard Kill (HK-1 through HK-7) / Scorecard Kill / Strategic Kill / Zombie Kill",

    "Hard Kill trigger code",

    "Single select",

    "HK-1 through HK-7 — or N/A for scorecard kills",

    "Final scorecard score",

    "Number",

    "0–60. All 15 dimension scores stored in long text field.",

    "All 15 dimension scores",

    "Long text",

    "Each dimension name + score, one per line",

    "Total buyers at kill",

    "Number",

    "",

    "Gross revenue",

    "Currency",

    "",

    "Net revenue (after refunds)",

    "Currency",

    "",

    "Total ad spend",

    "Currency",

    "",

    "ROAS",

    "Formula",

    "Net revenue / ad spend — auto-calculated",

    "The single most important lesson",

    "Long text",

    "One sentence — specific enough to change a future decision",

    "The assumption that was wrong",

    "Long text",

    "What was believed vs. what the data proved",

    "What the market actually wanted",

    "Long text",

    "Based on all data — what offer would have worked",

    "Preserved assets",

    "Long text",

    "Copy, mechanism names, buyer language, testimonials — what survived",

    "Negative Avatar profiles created",

    "Link → Negative Avatar Profiles",

    "All profiles that emerged from this offer's failure data",

    "Next Problem Signal",

    "Long text",

    "Problem B if identified — feeds product roadmap",

    "Relaunch eligibility",

    "Single select",

    "Yes — conditions defined / No — permanent retirement / Pivot — direction specified",

    "Relaunch conditions (if eligible)",

    "Long text",

    "Specific conditions that must be met before resurrection",

    "90-day relaunch consideration date",

    "Date",

    "Kill date + 90 days — auto-populated",

    "Resurrection record",

    "Link → Offers table",

    "If the offer was relaunched — link to the new offer record",

    "",

    "",

    "Master Kill Criteria Checklist",

    "",

    "Before Any Kill Decision — Pre-Kill Diagnostic",

    "☐  Minimum 200 unique cold visitors have seen the offer",

    "☐  Traffic source awareness level matches sales page assumption",

    "☐  Minimum 2 headline variants A/B tested",

    "☐  Full 14-day email sequence deployed to 200+ warm subscribers",

    "☐  Level 3 guarantee tested against current guarantee",

    "☐  Stack Slide offer presentation tested",

    "",

    "Hard Kill Trigger Check (Run Before Scorecard)",

    "☐  HK-1: Refund rate exceeding 30% after 20+ sales?",

    "☐  HK-2: Any legal or compliance violation identified?",

    "☐  HK-3: Unable to fulfil the core promise to current buyers?",

    "☐  HK-4: Zero sales from warm list of 500+ after complete 14-day sequence at 25%+ open rate?",

    "☐  HK-5: Cold conversion below 0.3% after diagnostic complete and 300+ unique visitors?",

    "☐  HK-6: NPS below -10 after 20+ buyer responses?",

    "☐  HK-7: CPA exceeding 60% of offer price after $3K+ ad spend across 2+ audience types?",

    "If any Hard Kill Trigger is confirmed — skip the scorecard. Proceed directly to Clean Kill Process (Phase 5).",

    "",

    "Kill Assessment Scorecard",

    "☐  All 15 dimensions scored using available data",

    "☐  Total score calculated",

    "☐  Decision confirmed: Kill / Pivot / Iterate / Scale",

    "☐  If Kill or Pivot: Clean Kill Process initiated within 14 days",

    "☐  If Iterate: 2-Fix Maximum Rule applied — no more than 2 changes identified",

    "",

    "Clean Kill Process (Phase 5)",

    "☐  All paid ads paused within 4 hours of kill decision",

    "☐  Offer page deactivated or redirected within 8 hours",

    "☐  Email sequence deactivated within 8 hours",

    "☐  Buyer Communication Email sent within 24 hours",

    "☐  Full data export completed within 48 hours — buyer list, refunds, support, emails, recordings",

    "☐  Affiliate notification sent within 48 hours (if applicable)",

    "☐  Post-Kill Intelligence Form completed within 72 hours",

    "☐  Buyer inbox monitored and all responses addressed within 7 days",

    "☐  Negative Avatar profiles updated within 14 days",

    "",

    "Post-Kill Intelligence Extraction (Phase 6)",

    "☐  All 18 fields of the Post-Kill Intelligence Form completed",

    "☐  Copy Salvage Protocol run — surviving assets tagged and moved to Salvage folder",

    "☐  Master Language Mining database updated with all salvaged buyer language phrases",

    "☐  Proof library updated with salvageable testimonials (if mechanism preserved)",

    "☐  Kill Record filed in Airtable with all linked records",

    "",

    "Quarterly Zombie Audit",

    "☐  All offers reviewed against 4 Zombie Criteria",

    "☐  Flagged offers placed on 30-day remediation watchlist",

    "☐  Kill Assessment Scorecard run on each flagged offer",

    "☐  Single highest-leverage remediation action identified and implemented for each",

    "☐  30-day retest complete — kill decision finalised for any offer not improving 8+ points",

    "",

    "",

    "",

    "RISER Nation Master Operating System  |  Product Kill Criteria (Post-Launch) SOP  |  Version 1.0  |  2026 Edition",

    "Kennedy × Hormozi × Brunson  |  risernation.com"

  ],

  "other_parts": [

    {

      "part": "word/header1.xml",

      "paragraphs": [

        "RISER Nation  |  Product Kill Criteria (Post-Launch) SOP  |  V1.0"

      ]

    },

    {

      "part": "word/footer1.xml",

      "paragraphs": [

        "Page PAGE of NUMPAGES"

      ]

    },

    {

      "part": "word/footnotes.xml",

      "paragraphs": [

        "",

        ""

      ]

    },

    {

      "part": "word/endnotes.xml",

      "paragraphs": [

        "",

        ""

      ]

    },

    {

      "part": "word/comments.xml",

      "paragraphs": []

    }

  ]

}

Offer development and operating practice — source-linked curriculum

Working teaching for review; source and dependency gaps remain identified in each module.

Lesson 03.3

Lesson 03.4

Assigned documents and teaching

Additional assigned lesson teaching and sources

These source-linked modules belong to the lessons identified below.

Supporting document for lesson 03.4: SOP-3-Channel-Performance-Validation.yaml

Validate a channel before scaling it

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Local teaching draft for review. Assigned lessons: 03.3, 03.4, 05.4, 07.1 and 07.4. Video placeholder: a channel evidence review. This lesson teaches a review process; it does not activate a grading service or database.

Curriculum outline

  1. Separate the explanation for one sale from evidence of repeatable channel performance.
  2. Define the review window and gather four dimensions of observations.
  3. Compare quality measures with their baselines and distinguish meaningful activity from vanity.
  4. Make a supported channel decision, including uncertainty and negative findings.
  5. Reconcile the worksheet, reviewer and timing-reference differences.
  6. Submit a reusable evidence record with its sources and open questions.

Assigned source: Channel Performance Validation SOP

1. Does one customer prove that the channel can scale?

One conversion can tell you something useful about one customer's path. It cannot, by itself, show that a channel will reliably attract several more suitable customers. The SOP separates conversion analysis from channel validation for that reason. Ask both questions: what contributed to this purchase, and what evidence supports continued investment in the channel?

The source's prerequisites are an operating quality dashboard with a baseline, an accessible original channel commitment, at least four months of channel history, and a submitted conversion analysis. It says the analysis need not already have a PASS. These are its curriculum gates, not universal statistical rules. Keep the original C11–C14 and M14 references for traceability; they do not replace our twelve-course assignments.

Bring the original commitment and any decommissioning history, baseline and current observations, the validation rubric and the timing reference. If those records are missing, say which are missing. Do not reconstruct an original expectation from what you now know and pretend it was written before the result.

Source for purpose, prerequisites, inputs and legacy workflow references

2. What window and observations are we reviewing?

Step one defines a start, end and elapsed months to one decimal place. The SOP chooses the earlier of a channel commitment or backlog publication date, with submission as the end. Its timing companion uses a different starting event: consistent public publishing in the operator's voice. Keep both dates when they differ. A decision to use a channel is not the same as sustained operation on it.

Step two gathers four empirical dimensions per channel: reach, engagement, depth and conversion. Reach can include subscribers or list size. Engagement can include replies and shares. Depth includes substantive direct messages, sales conversations and saves. Conversion includes channel-acquired customers and relevant inquiries. Retain available platform-specific measures, with their definitions and windows.

The SOP prefers window averages or growth rates over isolated snapshots. Keep the underlying counts too. A rise from one inquiry to two is a hundred-percent increase but still only one additional inquiry. Missing analytics is a measurement gap, not automatically zero demand.

One source inconsistency matters: the steps require four empirical dimensions, but the later quality bar allows at least three and omits depth from its minimum list. Use the fuller four-dimension record where available and state any unavailable measurement. Do not omit depth merely to satisfy the shorter checklist.

Source for steps one and two and the three-versus-four-dimension discrepancy

3. Which metrics represent quality for this offer?

Step three names four quality dimensions: direct-message-to-subscriber rate or a channel equivalent, content resonance, audience quality and conversion rate. For each, retain baseline, current measurement and improving, stable or declining trend. The SOP does not supply every formula. Define the numerator, denominator, eligible audience and measurement method before comparing periods.

Step four asks you to explain vanity versus quality in your own channel and offer. A large audience can matter, but its size alone may say little about suitability. A smaller number of relevant questions from people who fit the offer may be more useful than a large reaction count from unrelated viewers. Neither observation proves a sale; it changes what you should investigate next.

For a hypothetical coaching offer, you might find follower growth slowing while qualified preparation questions increase. Record both. Explain why the questions are relevant and how you classified the accounts. “Engagement is vanity and conversion is quality” is too generic because the meaning of an observation depends on the decision.

Step five assigns a judgment score from zero to ten. The source bands are eight–ten for strong evidence and relevant engagement, five–seven for mixed quality, two–four for concern despite reach growth, and zero–one for absent or strongly declining quality. This is an operator judgment, not a computed aggregate. Explain it; do not imply a validated scientific scale. The bands leave fractional boundaries unspecified, so use an explicitly defined convention rather than silently assigning a 7.5 to a category.

Source for quality baselines, channel-specific interpretation and scoring bands

4. What decision does the evidence support?

Step six offers four viability decisions. Viable continue means the source's first channel-acquired customer and the broader quality evidence support more investment. Viable with changes means a sale occurred but a specific operational change is needed, such as format, frequency or audience positioning. Marginal evaluate means the next thirty-to-sixty-day period needs a named piece of evidence. Not viable pivot means the sale appears situational and the available evidence does not support continuing on the same basis.

Each source definition assumes a first customer. It supplies no equivalent verdict for a channel with no sale. Do not force a zero-sale case into an invented completed-conversion history. Record its observations and uncertainty, then use the companion worksheet's per-channel Continue, Adjust, Pause or Sunset decision with a clear explanation of the difference.

Step seven optionally compares actual performance with Stage 2 expectations: what was confirmed, what differed and what was learned. This reflection is recommended but not mandatory in the SOP. Do not retroactively improve the original prediction.

As authored applications of our broader themes, ask whether a Brunson-style hook, story and offer attracted the intended customer, and whether the delivered outcome and effort support the value a Hormozi-style offer communicates. Those applications help frame a test. They do not turn an encouraging reach metric into verified demand.

Source for the four viability verdicts, optional reflection and downstream decisions

5. How does the companion worksheet add context?

The rubric has five parts. First restate each original channel, rationale and projected role. Next give every channel its own retrospective: yes, no or partial contribution; evidence; repeatable patterns; predicted patterns that did not appear; an informal cost-to-yield judgment; and a four-to-six-sentence justification for the decision. An informal judgment is not a financial ratio unless you actually define and calculate one.

Third, examine the channels as a system. Did one introduce the customer and another help them decide? Was an unexpected channel important? Did a selected channel produce no documented contribution? The rubric offers four possible explanations for that last outcome: more time needed, poor fit, insufficient execution or contributions not visible in analytics. Those are alternatives to investigate, not a menu from which to select the most comforting answer.

Fourth, recommend the next action per channel, including new or sunset channels and reasons. Fifth, answer six anti-rationalization questions. The first five ask whether you made an attribution or avoidance error; the sixth asks whether you were honest about execution limitations. Their answer directions differ. A uniform Yes or No is not a sensible success criterion. Attach evidence and uncertainty to each answer.

Supporting worksheet: five-part Channel Performance Validation Rubric

6. What does the proposed reviewer check?

The reviewer checks fourteen items across those five parts. These include fidelity to original choices, evidence and replicable mechanics, missing predictions, reasoned cost-to-yield judgments, supported verdicts, cross-channel touchpoints, unexpected channels, zero-contribution explanations, aligned recommendations, reasons for additions and sunsets, and the six self-check responses with acknowledged uncertainty.

Its warning patterns are keeping channels only because you invested in them, merely repeating a conversion narrative without channel analysis, asking for more time without a mechanism to observe, proposing vague adjustments, and reporting no critical findings. It separately warns against excessive self-criticism. You do not need to manufacture failure or abandon a working channel to look reflective.

The files disagree about review states. The SOP uses PASS and NEEDS_REVISION; the rubric uses PASS, REVISIONS_REQUESTED and FAIL; the reviewer also includes COUNT_MARGINAL_FLAG. Its JSON output includes five part reviews, per-channel evidence quality, detected patterns, remediation and a message. Preserve these as source versions until an actual implementation defines the accepted states. The rubric's hesitant-No instruction and reviewer's discussion of hesitant-No also conflict; evaluate the substance of each answer.

The reviewer names a model, database table and no-HITL setting. Those describe a proposed workflow. They do not prove a deployed service, permission to remove appropriate oversight, or a guaranteed automated approval. Its downstream graduation reference is Part 4, while the SOP says Section 7; keep that unresolved version difference visible.

Supporting specification: Channel Validation Reviewer, including all fourteen checks and output format

7. How should we interpret the timing reference?

The timing document claims an approximately nine-month median and a five-to-fourteen-month tenth-to-ninetieth-percentile range to first channel-acquired customer. It defines the start as visible, sustained, approximately weekly publishing in a recognizable operator voice. It excludes account creation, the decision to start and an unsustained posting burst. It distinguishes customers discovered through channel content from people with a prior relationship and awareness of the offer.

Its offer-category estimates are consulting above $5,000 at ten–eleven months with a four–eighteen range; $500–$5,000 programs at nine with five–thirteen; subscriptions at seven–eight with four–twelve; and productized offers at six–eight with three–eleven. It reports single-channel medians of ten–twelve, two-channel medians of eight–nine and three-plus medians of seven–eight, with burnout risk. Prior-audience estimates are nine–ten for effectively zero, seven–nine for a small network and five–seven for 1,000-plus, with a warning about warm-network misclassification.

These are source claims, not verified benchmarks. The document names broad operator data, independent surveys and cohort tracking but provides no inspectable studies, sample sizes or dataset links. An unnamed research repository is not verification. More channels cannot be credited as the cause of faster conversion from these summaries alone.

It also claims that twenty-five to thirty percent exceed twelve months, describing delayed channel selection, emerging editorial position, offer-fit changes and limited operating time. It gives three–six months for channel selection, six–twelve for editorial emergence and four–eight after crystallization. Preserve these as unverified context, not personal deadlines. The document rejects automatic conclusions that month six requires a pivot, month twelve proves a bad offer, or an early sale proves exceptional skill. Its month-four warm-contact and month-eleven resubmission case is an instructional example, not a measured result for you.

Supporting timing reference, definitions, subgroup figures and stated evidence limitations

8. What must be ready for the handoff?

Step eight submits the evidence record and repairs specific gaps. The six source quality bars cover the window, empirical dimensions, all four quality dimensions, a specific vanity distinction, an evidence-consistent score and a supported viability decision. The six failure examples concern a short window, missing quality measures, generic interpretation, inconsistent score, unsupported continuation and an unjustified nine-or-ten score despite flat engagement. Flat aggregate engagement alone does not erase improving customer-fit evidence; explain the distinction.

The proposed output is a validation row with empirical and quality fields, interpretation, score, viability evidence and a reviewer state. If no platform exists, retain the same information in a structured document rather than pretending it has been submitted. The SOP says mastery synthesis may proceed alongside review and recommends reconsidering channel selection before scaling a channel assessed as nonviable.

Its step estimates total six active hours with optional reflection and five-and-a-half without it. Elsewhere it says six–eight hours, a week of work, twenty-four-to-forty-eight-hour review and five–ten days elapsed. These are source estimates, not a promise about this project or an operating service.

Your exercise is a complete per-channel evidence record with links, definitions and uncertainties. Include the four-dimensional observations, quality comparison, justified judgment, next action and the evidence that would change it. Keep unresolved baseline, classification and research dependencies explicit. A PASS label is useful only when the underlying record deserves it.

Source for submission, six quality bars, six failure cases, timing estimates and handoff

Original document links and supporting resources

These links preserve the assigned document and its native references. A reference is not an endorsement or confirmation that its destination is currently accessible. Original tracking redirects remain identifiable as source links; no tracking code is installed by this resource list.

Complete assigned source appendix

Read the complete original source text
# SOP: Channel Performance Validation
# C14 First Dollar — RISER Nation Maritime Academy
# Version: 1.0.0

metadata:
  id: sop-c14-channel-performance-validation
  course: C14
  module_anchor: M14.4
  sop_type: student_facing_process
  version: 1.0.0
  hitl_required: false
  estimated_active_hours: 6.0

purpose: |
  Standard operating procedure for validating channel performance in M14.4.
  The conversion analysis (M14.3) addresses what produced ONE customer; the
  channel validation (M14.4) addresses whether the CHANNEL is viable for
  Stage 4 multi-customer work. The two analyses answer different questions
  and require different evidence. Channel validation looks at empirical
  metrics across the full Stage 3 timeline (typically 4-14 months) and
  distinguishes vanity metrics from quality metrics. Used by the student
  during M14.4 and by the channel-validation-reviewer Sonnet prompt.

prerequisites:
  - C13 quality metrics dashboard operational (C13 M13.6 baseline established)
  - C11 channel commitment record accessible
  - At least 4 months of channel operating history (most operators have 9-14 months by M14.4)
  - M14.3 conversion analysis submitted (PASS not strictly required, but the channel-specific lessons inform M14.4)

inputs:
  - C13 c13_quality_metrics dashboard (baseline + current measurements)
  - C11 c11_channel_commitments record (the original commitment + decommissioning history)
  - Channel-Performance-Validation-Rubric.md (02_Resources/) — viability rubric
  - Empirical-Channel-Timing-Reference-2026.md (02_Resources/) — empirical channel-by-channel benchmarks

outputs:
  - Completed Channel Performance Validation row in c14_channel_validations
  - Empirical metrics jsonb populated for the validation window
  - Quality metrics tracked (4 dimensions per C13 standard)
  - Vanity metric distinction articulated
  - Channel viability assessment with one of four verdicts
  - Reviewer verdict PASS

steps:
  - step: 1
    name: Define the validation window (15 minutes)
    actions:
      - validation_window_start - typically the C11 channel commitment date or C12 backlog publication date (whichever is earlier)
      - validation_window_end - the date you submit M14.4
      - validation_window_months - the elapsed duration in months (numeric, one decimal place)
      - The window must be at least 4 months for meaningful empirical analysis; below 4 months, the channel has not had time to demonstrate viability
    output: validation_window_start, validation_window_end, validation_window_months

  - step: 2
    name: Pull empirical metrics across the window (90 minutes)
    actions:
      - From your channel analytics and C13 dashboard, pull metrics covering the validation window
      - Required dimensions per channel - reach (followers, subscribers, list size), engagement (engagement rate, reply rate, share rate), depth (DM conversations, sales conversations, content saves), conversion (channel-acquired customer count, channel-driven inquiry count from C13)
      - Metric values should be window-averages or growth-rates, not single point-in-time snapshots
      - Most channels have additional native metrics (Instagram saves, podcast downloads-per-episode, LinkedIn dwell time) - record what is measurable
    output: empirical_metrics jsonb populated

  - step: 3
    name: Track quality metrics (60 minutes)
    actions:
      - From C13 quality metrics framework, ensure all 4 quality dimensions are tracked - dm_to_subscriber_rate (or channel-equivalent), content_resonance, audience_quality, conversion_rate
      - For each quality metric record - baseline (C13 M13.6 measurement), current (M14.4 measurement), trend ('improving', 'stable', 'declining')
      - Quality metrics distinguish channel work that compounds from channel work that accumulates without compounding (the distinction C13 made central)
    output: quality_metrics_tracked jsonb populated for all 4 dimensions

  - step: 4
    name: Articulate vanity vs quality distinction for THIS channel (45 minutes)
    actions:
      - The vanity_metric_distinction text answers - on this specific channel, which metrics are vanity for the operator's offer, and which are quality?
      - Examples - "On Instagram for my segment, follower count is vanity; saves and DMs from ICP-fit accounts are quality. My engagement rate has been declining (vanity-metric trend) but my DM-from-ICP rate has been climbing (quality-metric trend)."
      - This articulation is specific to the operator's channel, ICP, and offer; generic answers ("engagement is vanity, conversion is quality") do not pass review
    output: vanity_metric_distinction text written

  - step: 5
    name: Score channel engagement quality (30 minutes)
    actions:
      - On a 0-10 scale, score the operator's channel engagement quality based on quality-metric trends and the vanity-vs-quality distinction
      - The score is the operator's own honest assessment, not an aggregation; the reviewer evaluates whether the score is consistent with the evidence
      - 8-10 - channel engagement quality is high; quality metrics trending upward; clear ICP-fit engagement
      - 5-7 - channel engagement quality is mixed; some quality metrics improving, others stable or declining
      - 2-4 - channel engagement quality is concerning; quality metrics flat or declining despite reach/follower growth
      - 0-1 - channel engagement quality is poor; quality metrics absent or declining significantly
    output: channel_engagement_quality_score numeric

  - step: 6
    name: Channel viability assessment (60 minutes)
    actions:
      - Select one of four viability verdicts and write supporting evidence
      - viable_continue - channel produced channel-acquired First Dollar AND quality metrics support continued investment for Stage 4
      - viable_with_changes - channel produced channel-acquired First Dollar BUT specific operational changes are needed for Stage 4 (e.g., format pivot, posting frequency change, audience repositioning)
      - marginal_evaluate - channel produced channel-acquired First Dollar BUT viability for Stage 4 is uncertain; operator should document the specific evidence the next 30-60 days of work will need to produce
      - not_viable_pivot - channel produced ONE channel-acquired First Dollar but evidence indicates the conversion was situational and the channel cannot sustain Stage 4 multi-customer work; operator should consider channel pivot before Stage 4
      - The verdict is grounded in the evidence; "viable_continue" without supporting empirical metrics fails review
      - channel_viability_evidence text articulates the evidence supporting the verdict
    output: channel_viability_assessment + channel_viability_evidence text

  - step: 7
    name: Compare to Stage 2 baseline (30 minutes — optional but recommended)
    actions:
      - At Stage 2 (C9-C10), the operator's channel was selected and committed to but had not yet been validated by sustained operation
      - Articulate how the channel's actual performance compares to the operator's Stage 2 expectations - what was confirmed, what was different, what was learned
      - This comparison is the operator's empirical-vs-expected reflection; it surfaces channel selection lessons for the cohort
    output: comparison_to_stage_2_baseline text (optional)

  - step: 8
    name: Submit for review (30 minutes)
    actions:
      - Submit to Build 6 - the channel-validation-reviewer (Claude Sonnet 4.6) evaluates within 24 hours
      - Reviewer returns PASS or NEEDS_REVISION
      - On NEEDS_REVISION - typically a missing quality metric dimension, vanity-vs-quality articulation that defaults to generic theory, or a viability verdict not grounded in evidence; address and resubmit
    output: PASS verdict recorded

quality_bars:
  - Validation window is at least 4 months
  - Empirical metrics populated across at least 3 dimensions (reach, engagement, conversion at minimum)
  - All 4 quality dimensions tracked with baseline + current + trend
  - Vanity-vs-quality distinction is specific to operator's channel and offer
  - Channel engagement quality score is consistent with the quality-metric evidence
  - Channel viability assessment is grounded in the evidence (not aspirational)

failure_modes:
  - Validation window under 4 months — NEEDS_REVISION
  - Quality metrics absent for one or more of the 4 dimensions — NEEDS_REVISION
  - Vanity-vs-quality articulation is generic theory rather than channel-specific — NEEDS_REVISION
  - Channel engagement quality score inconsistent with the evidence (e.g., 9/10 score with declining quality metrics) — NEEDS_REVISION
  - Channel viability assessment "viable_continue" without supporting empirical evidence — NEEDS_REVISION
  - Operator scoring 9-10 on a channel where engagement metrics are flat over 9 months — NEEDS_REVISION (suggests Premature Gate Trap pattern; reviewer flags for self-reflection)

duration_estimate:
  - Total active hours - 6-8 hours across 1 week
  - Reviewer turnaround - 24 hours typical, 48 on revision
  - Total elapsed time including review - 5-10 days

unlock_consequence: |
  PASS on M14.4 produces the channel viability evidence used in M14.5
  mastery synthesis and M14.8 graduation document Section 7. The viability
  verdict (viable_continue / viable_with_changes / marginal_evaluate /
  not_viable_pivot) shapes the M14.6 Stage 4 sub-stage recommendation —
  operators with not_viable_pivot verdicts should reconsider entering
  Stage 4 on the same channel without first restarting C11 channel
  selection. M14.5 may proceed in parallel with M14.4 review.
Complete supporting source D0045
# Channel Performance Validation Rubric

> **Module:** M14.4 — Channel Performance Validation
> **Output:** Channel Performance Validation Document
> **Submission:** `c14_channel_validations`

---

## Purpose

This rubric structures the M14.4 retrospective: a per-channel validation of which C11 channel selections produced the conversion mechanics observed at M14.3, which did not, and whether your original channel selection should be recalibrated for Stage 4.

This is **Evaluate**-level work. The honest answer may be that your initial channel selection was correct and is now validated; or that it was partially correct; or that one channel performed and others did not; or that none of your selected channels produced the conversion and you converted via a path you did not plan. All four answers are acceptable submissions if they are honest.

---

## Part 1 — Channel Selection Restatement (from C11)

Restate, for the record, the channels you selected in C11 and the rationale at the time. This is not graded; it establishes the baseline against which performance is validated.

| Channel | C11 selection rationale (1–2 sentences) | Original projected role |
|---|---|---|
| _ | _ | _ |
| _ | _ | _ |
| _ | _ | _ |

---

## Part 2 — Per-Channel Performance

For each channel selected in C11, complete a performance retrospective.

### Channel 1: _

**Did this channel produce a documented contribution to a channel-acquired customer's conversion? (Yes / No / Partial)**
_

**Evidence — cite specific data points from M14.3 conversion analysis that involved this channel:**
_

**Channel-specific patterns observed (replicable mechanics this channel produced):**
_

**Channel-specific patterns NOT observed (predicted mechanics that did not materialize):**
_

**Channel cost-to-yield ratio (informal — not a metric, a judgment): does the channel justify continued investment given what you've now seen?**
_

**Verdict for this channel (Continue / Continue with adjustments / Pause / Sunset):**
_

**Justification (4–6 sentences):**
_

---

### Channel 2: _

(Repeat the same structure for each additional channel.)

---

## Part 3 — Cross-Channel Synthesis

Beyond per-channel performance, what does the analysis as a whole reveal?

### 3.1 — Did your channels perform as a system, or as isolated surfaces?

The C13 doctrine of compounding loops suggests channels reinforce each other. Did yours? Cite specific cross-channel touchpoints from M14.2/M14.3 (e.g., "podcast appearance drove newsletter signups, which produced reply that converted").

_

### 3.2 — Was there a channel that appeared in the conversion path but was not selected in C11?

Sometimes operators discover, in the retrospective, that a non-selected channel was actually the inflection. (Example: an operator who selected LinkedIn and newsletter but whose customer first found them via a podcast appearance the operator did as a one-off.)

If yes, how do you account for this in Stage 4 channel strategy?

_

### 3.3 — Was there a channel selected in C11 that produced **zero** documented contribution to conversion?

If yes, why? Possible explanations:

- The channel needs more time before producing
- The channel was wrong for this offer/audience
- The operator's execution on this channel was insufficient
- The channel produced contributions that are not yet visible in analytics (latent compounding)

_

---

## Part 4 — Recalibration Recommendation

Based on Parts 2 and 3, what is your recommendation for Stage 4 channel strategy?

| Channel | C14 verdict | Stage 4 recommendation |
|---|---|---|
| _ | _ | Continue / Adjust / Pause / Sunset |
| _ | _ | Continue / Adjust / Pause / Sunset |
| _ | _ | Continue / Adjust / Pause / Sunset |

**New channels to consider for Stage 4 (with rationale):**
_

**Sunset channels (with rationale):**
_

---

## Part 5 — Anti-Rationalization Self-Check

Six questions. Answer each honestly.

| # | Question | Yes/No |
|---|---|---|
| 1 | Have I classified a channel as "successful" without specific evidence from M14.3 data points? | _ |
| 2 | Have I classified a channel as "needing more time" to avoid a difficult sunset decision? | _ |
| 3 | Have I taken credit (channel "performed") for an outcome that may have been circumstantial? | _ |
| 4 | Have I avoided sunsetting a channel I emotionally invested in that has not produced? | _ |
| 5 | Have I attributed conversion to my "favorite" channel rather than the one with the strongest evidence? | _ |
| 6 | Have I been honest about channels where my execution (not the channel itself) was the limiting factor? | _ |

If any answer is "No" with hesitation, return to Parts 2–4 and revise.

---

## Submission

When all five parts are complete:

1. Save the validation document as a single file.
2. Submit per the HITL Review Submission Guide.
3. Auto-reviewer responds within 48 hours with one of: PASS / REVISIONS_REQUESTED / FAIL.

---

*Rubric version 1.0.0. Bound to C14 v2.0.*
Complete supporting source D0047
# Channel Validation Reviewer
# Module: M14.4 (Channel Performance Validation)
# Model: Claude Sonnet 4.6
# Version: 1.0.0

metadata:
  id: channel-validation-reviewer-v1.0.0
  course: C14 First Dollar
  module: M14.4
  model: claude-sonnet-4-6
  build: build-6
  supabase_table: c14_channel_validations
  hitl_gated: false
  output_format: structured_json

system_prompt: |
  You are the Channel Validation Reviewer for the RISER Nation
  Maritime Academy C14 First Dollar course, Module M14.4 (Channel
  Performance Validation).

  Your job is to evaluate the operator's per-channel retrospective —
  the validation of which C11 channel selections produced the
  conversion mechanics surfaced at M14.3, and the recalibration
  recommendation for Stage 4.

  M14.4 is anti-rationalization-heavy. The Stage 3 operator who walks
  away from a non-performing channel is doing harder work than the
  one who quietly continues. Your review supports the harder work.

  ## What you check

  ### Part 1 — Channel Selection Restatement (from C11)

  1. **Restatement integrity.** The operator's restatement of C11
     channel selections matches the c11_channel_selections record (if
     accessible) or operator's own archive citation. Discrepancies
     between restated and original selections are a flag.

  ### Part 2 — Per-Channel Performance

  Each channel selected at C11 receives a performance retrospective.
  For each channel:

  2. **Evidence-anchored verdict.** "Did this channel produce a
     documented contribution to channel-acquired conversion?" — answer
     supported by specific cross-references to M14.3 data points.
     Verdicts without M14.3 evidence anchors are flagged.

  3. **Replicable mechanics surfaced.** The channel's specific
     replicable patterns (per M14.3 Part 3) are listed if applicable.

  4. **Predicted-but-not-materialized mechanics named.** The channel's
     gaps relative to the original C11 thesis are named. Operators
     who report only positive findings are flagged for selective
     reporting.

  5. **Cost-to-yield judgment.** The operator makes a judgment on
     whether the channel justifies continued investment. The judgment
     is supported by reasoning, not vibes.

  6. **Verdict (Continue/Adjust/Pause/Sunset) with justification.**
     The verdict is one of four options with a 4–6 sentence
     justification. Generic justifications ("It's working") are
     flagged.

  ### Part 3 — Cross-Channel Synthesis

  7. **Channel-system question.** The operator addresses whether
     channels operated as a system or as isolated surfaces. Concrete
     cross-channel touchpoints from M14.2/M14.3 are cited if
     applicable.

  8. **Non-selected channel surfacing.** If the conversion path
     touched a channel not selected in C11, the operator addresses
     this. Operators who missed an actual conversion-contributing
     channel and do not address it are flagged.

  9. **Zero-contribution channels.** If a C11-selected channel
     produced no documented contribution, the operator names this and
     classifies the explanation (needs more time / wrong for offer /
     execution gap / latent compounding). Operators who avoid the
     question are flagged.

  ### Part 4 — Recalibration Recommendation

  10. **Stage 4 recommendation per channel.** Each channel has a
      Continue / Adjust / Pause / Sunset recommendation. The
      recommendation aligns with the per-channel verdict from Part 2
      (or, where it differs, the divergence is explained).

  11. **New channels considered.** If the operator proposes new
      channels for Stage 4, the rationale is specified. Wishful
      additions ("I should try TikTok") without rationale are flagged.

  12. **Sunset recommendations.** If the operator recommends
      sunsetting a channel, this is the strongest move under
      anti-rationalization. Confirm the sunset is supported by
      evidence; do not flag operators who sunset honestly.

  ### Part 5 — Anti-Rationalization Self-Check

  13. **All six questions answered.** The six questions in the
      worksheet are answered honestly. "No" answers (with
      hesitation noted) are healthy; uniform "Yes" answers across all
      six are flagged for pattern-matching.

  14. **Hesitation acknowledgment.** Operators who answer Yes to all
      six are asked to verify they are not avoiding the spirit of
      the questions. Self-aware hesitation is a strength.

  ## Verdict types

  - **PASS** — validation meets criteria.
  - **REVISIONS_REQUESTED** — specific revisions identified; resubmit.
  - **COUNT_MARGINAL_FLAG** — validation marginally meets criteria
    but has either (a) selective reporting (positive findings only),
    or (b) anti-rationalization self-check answered uniformly Yes
    without evidence. HITL may adjudicate at M14.7.
  - **FAIL** — validation is structurally insufficient (no per-
    channel retrospective, no cross-channel synthesis, no
    recalibration). Operator returns to the M14.4 lesson before
    resubmitting.

  ## Detection patterns

  Be vigilant for:

  - **Channel survivorship bias.** Operators rationalize keeping
    every channel they invested in, regardless of evidence. Look for
    Sunset recommendations; their absence (across multiple
    underperforming channels) is a flag.
  - **Re-narration of M14.3 patterns** without channel-specific
    extraction. If the per-channel sections read like generic
    paraphrases of M14.3, the operator has not done the per-channel
    work.
  - **"More time" explanations for zero-contribution channels.**
    Sometimes correct (latent compounding is real), but often
    rationalization. Probe the specific compounding mechanic the
    operator expects.
  - **"Adjust" verdicts without specifics.** "Adjust by improving
    consistency" is not specificity; "Adjust by shifting from
    podcast guesting to long-form solo episodes monthly" is.
  - **No self-critical findings anywhere in the document.** This is
    nearly always a flag. Real channel work surfaces self-critical
    findings.

  ## Detection of underclaim

  Some operators are brutal in their self-assessment beyond what the
  evidence supports. Confirm what the evidence shows; do not require
  unwarranted self-criticism.

  ## Output format

  Return JSON:

  ```json
  {
    "verdict": "PASS | REVISIONS_REQUESTED | COUNT_MARGINAL_FLAG | FAIL",
    "part_review": {
      "part_1_restatement": {"verdict": "string", "rationale": "string"},
      "part_2_per_channel": {"verdict": "string", "channel_verdicts": [{"channel": "string", "verdict": "string", "evidence_quality": "string"}], "rationale": "string"},
      "part_3_cross_channel": {"verdict": "string", "rationale": "string"},
      "part_4_recalibration": {"verdict": "string", "rationale": "string"},
      "part_5_anti_rationalization": {"verdict": "string", "rationale": "string"}
    },
    "self_critical_findings_present": true | false,
    "detection_patterns_observed": ["pattern 1"],
    "remediation_targets": ["target 1"],
    "operator_message": "string"
  }
  ```

  ## Tone

  Anti-rationalization-supportive, specific, kind. The operator who
  honestly sunsets a channel they've invested in deserves recognition
  of the cost. The operator who avoids the sunset deserves precise,
  non-shaming feedback that supports the harder move.

usage_notes: |
  Runs at end of M14.4 submission. PASS writes to
  c14_channel_validations and is referenced by M14.5 (which
  synthesizes channel performance into Domain 1 and Domain 3 of the
  mastery rubric) and M14.8 (which synthesizes M14.4 in Part 4).

  No HITL gate at M14.4.

  Sonnet 4.6 is sufficient for this reviewer.
Complete supporting source D1699
# Empirical Channel Timing Reference (2026)

> **Used at:** M14.1 (patience reframe); Premature Gate Trap case study; M14.7 self-assessment context.

---

## Purpose

This reference documents what the operator-economy data of 2024–2026 tells us about how long published, consistent channel work takes to produce a first channel-acquired customer. It is provided so that operators reading "9–12 months" in the M14.1 lesson can locate the empirical anchor for that figure rather than treating it as an arbitrary number.

This reference will be updated as the data evolves. Current version is bound to v2.0 of C14.

---

## Headline figures

For operators following the RISER Nation Maritime Academy curriculum (or comparably structured channel-and-audience work) from Stage 1 through Stage 3:

- **Median time from start of published channel work to first channel-acquired customer:** approximately 9 months.
- **Empirically observed range (10th to 90th percentile):** 5 months to 14 months.
- **Cases under 5 months:** present but rare; on inspection, often involve either pre-existing audience the operator did not initially count, or warm-network customers misclassified as channel-acquired.
- **Cases over 14 months:** present and not necessarily diagnostic of operator deficiency. Slow paths to first channel-acquired conversion can produce strong Stage 4 trajectories.

---

## What "start of published channel work" means

The data is anchored to the date of **published, consistent channel work** — defined as:

- Channel content visible to people outside the operator's personal network
- Cadence of at least once-per-week (with or without occasional gaps)
- Content authored in operator voice (not generic listicles or AI-generated filler)
- Identifiable editorial position (M14.5 Domain 2; C12 lineage)

The data is **not** anchored to:

- The date the operator created an account on a platform
- The date the operator decided to start a channel
- The date of an initial flurry of posting that did not sustain

Most operators substantially under-estimate their start date. They count from "I decided to start" rather than from "I started publishing consistently in operator voice." This is the primary source of operators believing they have been at it longer than the data records.

---

## What "first channel-acquired customer" means

The data uses the C14 definition: a customer whose discovery mechanism was channel content, with no pre-existing relationship that included territorial awareness of the offer. See `First-Dollar-Definitions-Reference.md` for the exhaustive enumeration.

---

## Subgroup variations

### By offer category

The 9-month median is a population median across offer categories. Within categories, ranges differ.

- **High-ticket consulting (>$5K per engagement):** median ~10–11 months; range broader (4–18 months). High-ticket purchases require trust accrual that channels build slowly.
- **Mid-ticket courses or programs ($500–$5K):** median ~9 months; range ~5–13 months.
- **Subscription products and ongoing services:** median ~7–8 months; range ~4–12 months. Subscription friction is lower; channel-driven trial is more accessible.
- **Productized services or templated offerings:** median ~6–8 months; range ~3–11 months.

These are population statistics. Individual operators vary substantially.

### By channel type

Channel selection (C11) influences timing. Operators relying on:

- **A single channel only (newsletter or LinkedIn or podcast etc.):** median ~10–12 months. Single-channel paths are slower because compounding loops are limited.
- **Two channels operating as a system:** median ~8–9 months. The C13 compounding-loops doctrine matches the data here.
- **Three or more channels:** median ~7–8 months, but with substantial operator-burnout risk that the median figures understate.

### By prior audience size at start of published channel work

- **Started with effectively zero audience:** median ~9–10 months.
- **Started with small (a few hundred) prior network audience:** median ~7–9 months.
- **Started with mid-sized (1,000+) prior audience:** median ~5–7 months — but the first customer is often warm-network with channel exposure, requiring careful classification work at M14.2.

---

## What slow paths look like (and what they mean)

The 25–30% of operators whose paths exceed 12 months do not, on inspection, share a single deficiency profile. Common patterns include:

- **Slow channel selection** — operators who took 3–6 months to converge on the right channel for their offer. Once converged, channel-acquired conversion follows the standard timing.
- **Editorial position emergence** — operators whose editorial position was diffuse for the first 6–12 months and crystallized later. Channel-acquired conversion typically follows position crystallization within 4–8 months.
- **Offer fit refinement** — operators whose offer was not yet right for the audience the channel was attracting. Once the offer aligned, conversion came quickly.
- **Operator pace constraints** — operators with day-jobs or caregiving responsibilities who operated at sub-weekly cadence. Slow cadence extends timeline; it does not preclude conversion.

The data does **not** show that operators with paths over 12 months produce weaker Stage 4 trajectories. If anything, slower-path operators show steadier compounding curves at Stage 4 because the editorial position and channel system had longer to consolidate.

---

## What the data does **not** support

This reference does not support claims like:

- "If you haven't converted by month 6, you should pivot."
- "12 months without conversion means your offer is wrong."
- "Sub-3-month conversion means you're a star operator."

Each of these is intuitive but not data-anchored. Pivot decisions, offer-rightness assessments, and operator-skill assessments require evidence specific to the operator, not population statistics.

---

## How this reference is used in C14

- **M14.1** — operators encountering the "9–12 month patience reframe" can locate the figure here. The lesson directly cites this reference.
- **M14.7** — operators self-assessing readiness compare their elapsed time against the empirical range. Operators substantially below the 5-month floor are not penalized but are flagged for careful M14.2 classification work (the under-5-month population is where misclassification of warm-network customers most commonly occurs).
- **Premature Gate Trap case study** — the operator in that case study attempts to clear the gate at month 4 with a warm-network customer; the empirical range here helps explain why the gate denied the submission and why the operator's eventual successful resubmission at month 11 fell within the standard timing.

---

## Source basis

The figures here aggregate (a) RISER Nation Maritime Academy operator data 2024–2026 (consenting operators), (b) cross-platform operator-economy surveys 2024–2026 published by independent researchers, and (c) longitudinal cohort tracking from comparable curriculum providers.

Specific source citations are maintained in the platform's data-and-research repository, accessible via the Build 6 dashboard for operators who want to inspect the underlying data. Aggregate figures here are de-identified.

---

*Reference version 1.0.0 (April 2026). Bound to C14 v2.0. Will be updated when 2026 cohort data becomes statistically substantial (expected: Q4 2026).*

Offer development and operating practice — source-linked curriculum

Working teaching for review; source and dependency gaps remain identified in each module.

Lesson 03.3

Lesson 03.4

Additional assigned lesson teaching and sources

These source-linked modules belong to the lessons identified below.

Offer development and operating practice — source-linked curriculum

Working teaching for review; source and dependency gaps remain identified in each module.

Lesson 03.3

Assigned documents and teaching

Additional assigned lesson teaching and sources

These source-linked modules belong to the lessons identified below.

Supporting document for lesson 03.4: World-Class Minimum Viable Offer (MVO) — Standard Action Plan

Build and test a minimum viable offer

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.3, 03.4, 04.1, 07.1 and 08.1. Video recording to be added. The complete original action plan is included in the source appendices; the explanations below distinguish its claims from verified attribution and authored applications.

Phase 1 — Define the market and desired outcome

Begin with one specific audience and a result that matters to them. The source contrasts a broad label such as mothers with single mothers who have toddlers and work from home. The point is specificity about situation and needs, not an assumption that everyone in a demographic shares the same problem.

Write five pains, five desires and five objections. Mark whether each came from an actual conversation, another linked source or your own hypothesis. Then complete the source's positioning sentence: “I help [avatar] achieve [outcome] without [pain].” A useful sentence clarifies whom you serve and what you intend to help them do; it is not evidence that the outcome is guaranteed. The source connects outcome-first thinking to Frank Kern's results-in-advance approach. Its wording is retained as source attribution, not verified as a direct quotation.

Correct two terminology issues before continuing. The source labels “Who, Not How” under Russell Brunson, but the book is by Dan Sullivan and Benjamin Hardy. Publisher attribution for Who Not How. Also, an audience description is not by itself a Dream 100 plan. Keep the customer profile distinct from identifying people or organizations that can connect you with that audience. ClickFunnels' Dream 100 lead-generation explanation.

Assigned source: Phase 1 audience, desire and positioning exercises

Phase 2 — Connect hook, story and offer

Write three hook variations as requested: one emotional, one curiosity-based and one benefit-driven. Each should introduce a relevant reason to pay attention. The source invokes Brendan Kane's Hook Point and a three-second attention window. Treat the exact three seconds as an unverified source heuristic, not a universal platform rule.

Use the story to explain the problem, mechanism or transformation, then present the offer as the next relevant step. Real testimonials, case studies and before/after examples require real supporting evidence; a hypothetical teaching story must be labeled as such. This sequence aligns with ClickFunnels' published Hook, Story, Offer framework. Primary framework explanation.

Evaluate the offer using four conceptual levers: the desired outcome, the buyer's perceived likelihood of achieving it, the time delay, and the effort or sacrifice required. Acquisition.com's checklist presents the value equation as outcome multiplied by perceived likelihood, divided by time delay multiplied by effort and sacrifice. Use it to identify ways to make delivery more credible and useful. It is not a calibrated monetary calculation, probability estimate or guaranteed sales forecast. Acquisition.com pricing and value checklist.

Write the requested one-sentence offer: “Get [result] in [timeframe] without [objection].” Only use a timeframe and promise you can support. Then specify relevant bonuses, guarantee terms and any genuine urgency. The source's examples are a thirty-day roadmap, private support group and refund offer. Explain what each includes and what conditions apply. Do not call an offer risk-free if material costs or conditions remain, and do not manufacture deadlines or inflate bonus values.

Assigned source: Phase 2 messaging, three hooks, value equation and offer components

Phase 3 — Build a useful pre-launch bridge

The source describes an “Invisible Bridge,” attributed there to Amy Porterfield, between the audience's current situation and the paid offer. That exact attribution is not verified here. Teach the practical application as a source-proposed sequence: offer a useful free resource, help the person understand the problem and next step, and make the paid offer relevant without implying the free resource solves everything.

Choose one pre-launch asset from the source's examples: checklist, cheat sheet, webinar or five-day challenge. Give it a clear, honest scope. A mini-tool, template or useful insight can provide an early result; do not deliberately withhold information needed to use the free resource safely or as promised.

Draft three messages. Email one teaches something useful and addresses objection one. Email two teaches and addresses objection two. Email three teaches, addresses objection three and introduces the purchase opportunity. Attach real evidence to any story or testimonial used for credibility. These are drafting exercises; they do not authorize sending messages or launching an email automation.

Assigned source: Phase 3 free asset, results-in-advance premise and three-email sequence

Phase 4 — Build a small offer that can fulfill its promise

Choose a deliverable small enough to produce and support while still delivering the promised value. The source proposes three training videos, a PDF workbook or a two-hour live workshop. These are alternatives, not three simultaneous requirements. It attributes a build-small-first statement to Hormozi without a verifiable quotation; retain it as the source's guidance rather than asserting he said those exact words.

Map the funnel as landing page → order form → thank-you page. The landing page explains the hook and offer, the order step states the purchase terms, and the thank-you step explains delivery and next actions. Consider an upsell or cross-sell only if it is relevant and clearly optional.

The source names Stripe or PayPal for checkout and email, Dropbox or Google Drive for delivery. Those are implementation examples, not a requirement to replace the user's GoHighLevel setup or purchase services. For this curriculum, use the existing authorized GHL workflow and verify the actual payment, access and delivery configuration before claiming it works. A page or video placeholder is not a delivered product.

Assigned source: Phase 4 deliverable choices, funnel skeleton and delivery examples

Phase 5 — Plan pre-launch, launch and follow-up

The source associates the launch sequence with Jeff Walker's Product Launch Formula and Amy Porterfield, and suggests a challenge or webinar funnel under Brunson. This short document does not supply those authors' full methods or verify its quotations. Use its actual action steps as a plan, not a claim of certification in those systems.

For the proposed one-to-two-week pre-launch, prepare three useful pieces of content: emails, posts or short videos. Build understanding and address objections. During launch week, open the offer, explain any real deadline or capacity limit, and use a live or automated webinar if it suits the delivery. An automated presentation should not be represented as a live event when it is not. Use genuine customer evidence rather than fabricated social proof.

The source places “last chance” reminders under post-launch. Clarify the timing: a reminder belongs before a real closing deadline. After a genuine close, do not pretend the offer is still about to close. Collect testimonials where appropriate and survey both buyers and non-buyers. Buyer feedback can reveal delivery friction; non-buyer feedback can reveal fit, timing or clarity issues. Neither group should be pressured to produce a positive endorsement.

Assigned source: Phase 5 timing, launch formats, urgency and feedback

Phase 6 — Measure, improve and decide what comes next

Track all four source metrics: CTR, opt-in percentage, conversion percentage and refund requests. Define the numerator, denominator, event and reporting window before comparing results. CTR relates selected clicks to impressions; opt-in and purchase rates need an explicit opportunity count, such as relevant visitors. Refund requests are different from approved or processed refunds. Record counts alongside rates so a small sample is not disguised by a percentage.

Use the findings to refine hooks and bonuses. A weak result does not identify its cause by itself; examine whether the audience, promise, destination and delivery agree. The source attributes testing and volume statements to Frank Kern and Alex Hormozi without confirming the exact wording. Treat disciplined testing as the practical lesson, not a license to repeat an ineffective or misleading campaign at greater scale.

The proposed value ladder progresses from an entry offer to a core offer and then high-ticket coaching or consulting. Use customer needs and delivery evidence to decide whether a next offer belongs. A higher price or extra rung is not automatically more valuable, and the document supplies no required price points or proof that every business needs all three.

Assigned source: Phase 6 metrics, refinement and three-step value ladder

Your completed action plan

Submit six linked sections: audience and desired outcomes; hook/story/offer and delivery credibility; pre-launch asset and objection sequence; small core deliverable and funnel; launch schedule with truthful closing conditions; and measurement, feedback and improvement plan. These correspond to all six deliverable lines in the source.

For 03.3, emphasize audience-to-offer coherence. For 03.4, define the minimum viable test and feedback rule. For 04.1, map the funnel and fulfillment steps. For 07.1, create content from the same approved promise and objections. For 08.1, connect launch activity to consistent measures. These are authored applications within the spreadsheet assignments, not changes to the course map.

Complete original MVO Standard Action Plan

Complete original document appendices

Complete readable source
World-Class Minimum Viable Offer (MVO) — Standard Action Plan
________________


🎯 Phase 1: Foundation — Define the Market & Core Desire
Frank Kern → “Results in Advance Marketing”
* People don’t want your product, they want the outcome.

* Start with the end result: “What transformation does my customer crave?”

Russell Brunson → “Who, Not How”
   * Define your Dream 100 audience (niche + avatars).

   * Know their pains, desires, and objections inside out.

Action Steps
      1. Pick one hyper-specific audience (not “moms” → “single moms with toddlers who work from home”).

      2. Write down:

         * Top 5 pains

         * Top 5 desires

         * Top 5 objections

            3. Summarize: “I help [avatar] achieve [outcome] without [pain].”

________________


🪝 Phase 2: Hook, Story, Offer — Messaging Engine
Brendan Kane → “Hook Point”
               * People scroll fast. You have 3 seconds.

               * Your offer must have a pattern-interrupt hook.

Russell Brunson → “Hook, Story, Offer”
                  * Hook = grab attention

                  * Story = show transformation (testimonials, case studies, before/after)

                  * Offer = present solution

Alex Hormozi → “$100M Offers”
                     * Craft an irresistible offer:

                        * Dream outcome × perceived likelihood of achievement ÷ (time delay × effort & sacrifice).

Action Steps
                           1. Draft 3 hook variations: emotional, curiosity-based, and benefit-driven.

                           2. Build a 1-sentence offer: “Get [result] in [timeframe] without [objection].”

                           3. Flesh out bonuses, guarantees, urgency.

                              * e.g., 30-day roadmap, private support group, risk-free refund.

________________


🚀 Phase 3: Pre-Launch — The Invisible Bridge
Amy Porterfield → “Invisible Bridge”
                                 * Bridge the gap between where your audience is and your paid offer.

                                 * Educate them just enough to remove objections without solving everything.

Frank Kern → “Give results in advance.”
                                    * Offer free wins (mini-tools, templates, insights) so they already trust you before buying.

Action Steps
                                       1. Create a free pre-launch asset:

                                          * Checklist, cheat sheet, webinar, or 5-day challenge.

                                             2. Sequence:

                                                * Email #1: Teach → bust Objection #1

                                                * Email #2: Teach → bust Objection #2

                                                * Email #3: Teach → bust Objection #3 → open cart

                                                   3. Use stories/testimonials to prove credibility.

________________


🛠 Phase 4: Minimum Viable Offer Build
Alex Hormozi → “Don’t build a full product first.”
                                                      * Validate with a simple, fast-to-deliver MVP.

Russell Brunson → Use a funnel skeleton:
                                                         * Landing page → order form → thank-you page.

                                                         * Add an upsell/cross-sell if possible.

Action Steps
                                                            1. Core deliverable:

                                                               * Could be 3 training videos, a PDF workbook, or a 2-hour live workshop.

                                                                  2. Build lean:

                                                                     * Landing page with clear hook & offer.

                                                                     * Stripe/PayPal checkout.

                                                                     * Delivery via email/Dropbox/Google Drive.

________________


📈 Phase 5: Launch Strategy
Jeff Walker (Product Launch Formula) + Amy Porterfield
                                                                        * Pre-launch → Launch → Post-launch.

Russell Brunson
                                                                           * Use a challenge funnel or webinar funnel.

Action Steps
                                                                              1. Pre-Launch (1–2 weeks):

                                                                                 * Drop 3 pieces of value content (emails, posts, short videos).

                                                                                 * Build anticipation, handle objections.

                                                                                    2. Launch Week:

                                                                                       * Open cart → scarcity/urgency (limited time, limited seats).

                                                                                       * Use live or automated webinar.

                                                                                       * Push testimonials.

                                                                                          3. Post-Launch:

                                                                                             * Send “last chance” reminders.

                                                                                             * Collect testimonials.

                                                                                             * Survey buyers + non-buyers.

________________


🧠 Phase 6: Iterate & Optimize
Frank Kern → “Campaigns that convert are born from testing.”
Alex Hormozi → “Volume before perfection.”
Action Steps
                                                                                                1. Track metrics:

                                                                                                   * CTR, opt-in %, conversion %, refund requests.

                                                                                                      2. Refine hooks and bonuses.

                                                                                                      3. Use feedback to expand into a Value Ladder:

                                                                                                         * Entry offer → core offer → high-ticket coaching/consulting.

________________


✅ Deliverable: Minimal Viable Offer Action Plan 
                                                                                                            1. Audience & Desire → hyper-specific avatar + outcomes.

                                                                                                            2. Offer Crafting → Hook + Story + Irresistible Offer (Hormozi math).

                                                                                                            3. Pre-Launch → Invisible Bridge content busting objections.

                                                                                                            4. MVO Build → Simple landing page + small but high-value deliverable.

                                                                                                            5. Launch → 1–2 week pre-launch → launch → urgency close.

                                                                                                            6. Iterate → Gather data → improve → expand value ladder.
Native document text — lossless original text as JSON
{
  "source_text": "World-Class Minimum Viable Offer (MVO) \u2014 Standard Action Plan\n\n\ud83c\udfaf Phase 1: Foundation \u2014 Define the Market & Core Desire\nFrank Kern \u2192 \u201cResults in Advance Marketing\u201d\nPeople don\u2019t want your product, they want the outcome.\u000b\nStart with the end result: \u201cWhat transformation does my customer crave?\u201d\u000b\nRussell Brunson \u2192 \u201cWho, Not How\u201d\nDefine your Dream 100 audience (niche + avatars).\u000b\nKnow their pains, desires, and objections inside out.\u000b\nAction Steps\nPick one hyper-specific audience (not \u201cmoms\u201d \u2192 \u201csingle moms with toddlers who work from home\u201d).\u000b\nWrite down:\u000b\nTop 5 pains\u000b\nTop 5 desires\u000b\nTop 5 objections\u000b\nSummarize: \u201cI help [avatar] achieve [outcome] without [pain].\u201d\u000b\n\n\ud83e\ude9d Phase 2: Hook, Story, Offer \u2014 Messaging Engine\nBrendan Kane \u2192 \u201cHook Point\u201d\nPeople scroll fast. You have 3 seconds.\u000b\nYour offer must have a pattern-interrupt hook.\u000b\nRussell Brunson \u2192 \u201cHook, Story, Offer\u201d\nHook = grab attention\u000b\nStory = show transformation (testimonials, case studies, before/after)\u000b\nOffer = present solution\u000b\nAlex Hormozi \u2192 \u201c$100M Offers\u201d\nCraft an irresistible offer:\u000b\nDream outcome \u00d7 perceived likelihood of achievement \u00f7 (time delay \u00d7 effort & sacrifice).\u000b\nAction Steps\nDraft 3 hook variations: emotional, curiosity-based, and benefit-driven.\u000b\nBuild a 1-sentence offer: \u201cGet [result] in [timeframe] without [objection].\u201d\u000b\nFlesh out bonuses, guarantees, urgency.\u000b\ne.g., 30-day roadmap, private support group, risk-free refund.\u000b\n\n\ud83d\ude80 Phase 3: Pre-Launch \u2014 The Invisible Bridge\nAmy Porterfield \u2192 \u201cInvisible Bridge\u201d\nBridge the gap between where your audience is and your paid offer.\u000b\nEducate them just enough to remove objections without solving everything.\u000b\nFrank Kern \u2192 \u201cGive results in advance.\u201d\nOffer free wins (mini-tools, templates, insights) so they already trust you before buying.\u000b\nAction Steps\nCreate a free pre-launch asset:\u000b\nChecklist, cheat sheet, webinar, or 5-day challenge.\u000b\nSequence:\u000b\nEmail #1: Teach \u2192 bust Objection #1\u000b\nEmail #2: Teach \u2192 bust Objection #2\u000b\nEmail #3: Teach \u2192 bust Objection #3 \u2192 open cart\u000b\nUse stories/testimonials to prove credibility.\u000b\n\n\ud83d\udee0 Phase 4: Minimum Viable Offer Build\nAlex Hormozi \u2192 \u201cDon\u2019t build a full product first.\u201d\nValidate with a simple, fast-to-deliver MVP.\u000b\nRussell Brunson \u2192 Use a funnel skeleton:\nLanding page \u2192 order form \u2192 thank-you page.\u000b\nAdd an upsell/cross-sell if possible.\u000b\nAction Steps\nCore deliverable:\u000b\nCould be 3 training videos, a PDF workbook, or a 2-hour live workshop.\u000b\nBuild lean:\u000b\nLanding page with clear hook & offer.\u000b\nStripe/PayPal checkout.\u000b\nDelivery via email/Dropbox/Google Drive.\u000b\n\n\ud83d\udcc8 Phase 5: Launch Strategy\nJeff Walker (Product Launch Formula) + Amy Porterfield\nPre-launch \u2192 Launch \u2192 Post-launch.\u000b\nRussell Brunson\nUse a challenge funnel or webinar funnel.\u000b\nAction Steps\nPre-Launch (1\u20132 weeks):\u000b\nDrop 3 pieces of value content (emails, posts, short videos).\u000b\nBuild anticipation, handle objections.\u000b\nLaunch Week:\u000b\nOpen cart \u2192 scarcity/urgency (limited time, limited seats).\u000b\nUse live or automated webinar.\u000b\nPush testimonials.\u000b\nPost-Launch:\u000b\nSend \u201clast chance\u201d reminders.\u000b\nCollect testimonials.\u000b\nSurvey buyers + non-buyers.\u000b\n\n\ud83e\udde0 Phase 6: Iterate & Optimize\nFrank Kern \u2192 \u201cCampaigns that convert are born from testing.\u201d\u000b Alex Hormozi \u2192 \u201cVolume before perfection.\u201d\nAction Steps\nTrack metrics:\u000b\nCTR, opt-in %, conversion %, refund requests.\u000b\nRefine hooks and bonuses.\u000b\nUse feedback to expand into a Value Ladder:\u000b\nEntry offer \u2192 core offer \u2192 high-ticket coaching/consulting.\u000b\n\n\u2705 Deliverable: Minimal Viable Offer Action Plan \nAudience & Desire \u2192 hyper-specific avatar + outcomes.\u000b\nOffer Crafting \u2192 Hook + Story + Irresistible Offer (Hormozi math).\u000b\nPre-Launch \u2192 Invisible Bridge content busting objections.\u000b\nMVO Build \u2192 Simple landing page + small but high-value deliverable.\u000b\nLaunch \u2192 1\u20132 week pre-launch \u2192 launch \u2192 urgency close.\u000b\nIterate \u2192 Gather data \u2192 improve \u2192 expand value ladder.\u000b\n\n"
}
Native document text — display copy; source control characters represented as line breaks or Unicode labels
World-Class Minimum Viable Offer (MVO) — Standard Action Plan

🎯 Phase 1: Foundation — Define the Market & Core Desire
Frank Kern → “Results in Advance Marketing”
People don’t want your product, they want the outcome.

Start with the end result: “What transformation does my customer crave?”

Russell Brunson → “Who, Not How”
Define your Dream 100 audience (niche + avatars).

Know their pains, desires, and objections inside out.

Action Steps
Pick one hyper-specific audience (not “moms” → “single moms with toddlers who work from home”).

Write down:

Top 5 pains

Top 5 desires

Top 5 objections

Summarize: “I help [avatar] achieve [outcome] without [pain].”


🪝 Phase 2: Hook, Story, Offer — Messaging Engine
Brendan Kane → “Hook Point”
People scroll fast. You have 3 seconds.

Your offer must have a pattern-interrupt hook.

Russell Brunson → “Hook, Story, Offer”
Hook = grab attention

Story = show transformation (testimonials, case studies, before/after)

Offer = present solution

Alex Hormozi → “$100M Offers”
Craft an irresistible offer:

Dream outcome × perceived likelihood of achievement ÷ (time delay × effort & sacrifice).

Action Steps
Draft 3 hook variations: emotional, curiosity-based, and benefit-driven.

Build a 1-sentence offer: “Get [result] in [timeframe] without [objection].”

Flesh out bonuses, guarantees, urgency.

e.g., 30-day roadmap, private support group, risk-free refund.


🚀 Phase 3: Pre-Launch — The Invisible Bridge
Amy Porterfield → “Invisible Bridge”
Bridge the gap between where your audience is and your paid offer.

Educate them just enough to remove objections without solving everything.

Frank Kern → “Give results in advance.”
Offer free wins (mini-tools, templates, insights) so they already trust you before buying.

Action Steps
Create a free pre-launch asset:

Checklist, cheat sheet, webinar, or 5-day challenge.

Sequence:

Email #1: Teach → bust Objection #1

Email #2: Teach → bust Objection #2

Email #3: Teach → bust Objection #3 → open cart

Use stories/testimonials to prove credibility.


🛠 Phase 4: Minimum Viable Offer Build
Alex Hormozi → “Don’t build a full product first.”
Validate with a simple, fast-to-deliver MVP.

Russell Brunson → Use a funnel skeleton:
Landing page → order form → thank-you page.

Add an upsell/cross-sell if possible.

Action Steps
Core deliverable:

Could be 3 training videos, a PDF workbook, or a 2-hour live workshop.

Build lean:

Landing page with clear hook & offer.

Stripe/PayPal checkout.

Delivery via email/Dropbox/Google Drive.


📈 Phase 5: Launch Strategy
Jeff Walker (Product Launch Formula) + Amy Porterfield
Pre-launch → Launch → Post-launch.

Russell Brunson
Use a challenge funnel or webinar funnel.

Action Steps
Pre-Launch (1–2 weeks):

Drop 3 pieces of value content (emails, posts, short videos).

Build anticipation, handle objections.

Launch Week:

Open cart → scarcity/urgency (limited time, limited seats).

Use live or automated webinar.

Push testimonials.

Post-Launch:

Send “last chance” reminders.

Collect testimonials.

Survey buyers + non-buyers.


🧠 Phase 6: Iterate & Optimize
Frank Kern → “Campaigns that convert are born from testing.”
 Alex Hormozi → “Volume before perfection.”
Action Steps
Track metrics:

CTR, opt-in %, conversion %, refund requests.

Refine hooks and bonuses.

Use feedback to expand into a Value Ladder:

Entry offer → core offer → high-ticket coaching/consulting.


✅ Deliverable: Minimal Viable Offer Action Plan 
Audience & Desire → hyper-specific avatar + outcomes.

Offer Crafting → Hook + Story + Irresistible Offer (Hormozi math).

Pre-Launch → Invisible Bridge content busting objections.

MVO Build → Simple landing page + small but high-value deliverable.

Launch → 1–2 week pre-launch → launch → urgency close.

Iterate → Gather data → improve → expand value ladder.


Supporting document for lesson 03.4: files (54).zip

Use the RISER operator toolkit with an evidence trail

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lesson 03.4. Video recording to be added. This review combines toolkit procedures, field practice, both catalog entry registers and the original source appendices. Source claims and implementation limitations are explained alongside the teaching. Final coverage review remains open.

Start with the actual contents

The assigned files (54).zip contains a nested riser-suite-v3.zip and three repeated HTML files. There are fourteen leaf-file instances but eleven unique assets. Duplicates are not extra tools or extra source completions. The unique contents are the Suite Index; Operator's Flow in HTML and Markdown; Idea Capture; Buyer Decision Style; MVO Decision Engine; Marketing Plan Generator; Pain Discovery Tool Catalog; Client Acquisition Tool Catalog; Pain Discovery Tools Markdown reference; and the MVO explainer Word document.

The index's “ten artifacts” headline does not match the eleven unique files. Its instructions to deploy HTML or obtain an API key are historical source instructions, not commands performed by this lesson. These assets were reviewed statically; their presence is not proof of an installed, tested live service.

Assigned source archive: complete RISER toolkit

Choose the artifact for the work you are doing

Read Operator's Flow to locate the work and its intended output. Use Idea Capture to describe the business, and Buyer Decision Style to examine hypotheses about how a buyer evaluates it. Use the MVO engine as a structured questioning aid. Use the Marketing Plan Generator to draft a plan, the pain catalog to identify possible research tools, and the acquisition catalog to examine distribution options for professional services. The Word script supports a recorded explanation; it is not a recorded video.

The index proposes a foundation sequence, then asset building, acquisition, and ongoing operations/iteration. It also marks Pain Discovery, Offer Hypothesis and MVP/Service Definition step pages as still to build. Standalone phase-four and phase-five widgets are not supplied. Do not create dead links or describe these planned tools as live.

Numbering conflicts matter: Operator's Flow calls Step 1.2 Pain Discovery, while the standalone Step 1.2 is Buyer Decision Style. The index uses other shifted references. Match the asset by its name and function, retaining the original labels in the appendix, rather than silently changing the twelve-course map.

Source: RISER-Suite-Index.html within the original archive

Transfer outputs explicitly and verify what was saved

The index describes local browser storage, copying output between tools, printing to PDF and optional hosting. The inspected tools do not all use the same storage key. Sharing an origin alone does not make their data structures interchangeable. For a practical handoff, copy the intended output, paste it into the next tool's appropriate input, and check that the content is intact. A save message is not a verified backup; several scripts ignore storage-write failures.

Some tools call Anthropic directly and store a user-supplied API key in browser storage. This review did not enter a key or execute a paid request. The index's model names, per-use cost estimates, provider availability and hosting claims are historical and unverified here. Do not promise those costs or expose a personal key in a public lesson. Preserve source code as an inert appendix, not automatically executing code embedded beneath a training video.

The source's assertion that no generated material can be fabricated is stronger than its code supports. Prompt instructions express an intention, not an enforcement guarantee. Every generated claim, quotation, price and named example still needs human checking.

Source: Suite Index operating notes and underlying tool scripts

Idea Capture — write a business hypothesis that can be checked

The Step 1.1 page asks for five connected elements: who the buyer is, what problem they face, how your solution addresses it, the price tier, and why you are suited to deliver it. Its prompt targets approximately 150–220 words; the index describes about 200. Choose the applicable business-model option and supply the actual context you know. Mark missing information rather than inventing credentials, demand or customer results.

An authored practice exercise is to read the paragraph to another person and ask them to restate the buyer, problem and proposed service. A clear restatement shows communication clarity, not validated demand. Revise vague terms into concrete descriptions supported by your actual experience.

The inspected readiness check accepts thirty characters of idea text, a business-model selection and a key of at least twenty characters. That is a minimum input check, not evaluation of the idea. The code checks for an output paragraph but does not enforce the promised word count or truthfulness. Its progress animation is not evidence that research or validation occurred. Review the returned paragraph before saving or reusing it.

Source: RISER-Step-1.1-Idea-Capture.html, inputs, prompt and validation code

Buyer Decision Style — use the four styles as hypotheses

The Step 1.2 tool proposes Blueprint, Action, Nurturing and Knowledge styles, a dominant and secondary style, and cold/warm/hot communication guidance. It also generates activating and repelling phrases, likely objections, mismatch warnings and caveats. Treat these as hypotheses to compare with buyer conversations, not a psychological diagnosis or proof of how everyone in a segment decides.

For an authored application, ask what evidence a particular buyer requests, how they describe a decision, and what questions remain unresolved. Use the style suggestion to draft alternatives, then check those alternatives against actual responses. Do not turn a generated phrase into a supposedly verbatim customer quotation.

The source claims lineage from DISC, Cialdini and Schwartz and says it is not licensed B.A.N.K. methodology. That statement does not establish that its own style mapping is validated. Brand familiarity and customer awareness are also different concepts; do not collapse them simply because both can be described with stages.

The code validates field presence more than meaning and defaults an unrecognized style to Knowledge. It supplies no actual seller-style input, so its seller/buyer mismatch warning can be hypothetical. Caveats are not guaranteed by every validation path. Review the returned structure and evidence before accepting its profile.

Source: RISER-Step-1.2-Buyer-Decision-Style.html and its complete prompt/code

Marketing Plan Generator — inspect each of the ten outputs

The generator takes a profession and avatar, proposes sharpening choices, asks four questions and drafts a plan. Its four question areas are geography, pricing, acquisition source and bottleneck, with fallback options when question generation fails. The profession autocomplete is a convenience list, not a verified market taxonomy. A minimally accepted input is not a validated business.

Read each output separately: avatar, three pains, four to six gathering places, three ranked channels, lead magnet, hook/headline/body, 30/60/90-day plan, offer angle, three outreach drafts, and caveats. Verify any named place, audience statement or channel claim. The source's outreach formats include LinkedIn, cold email and a Reddit reply; generating draft text does not authorize sending it or establish suitability for those communities.

Its Reddit, Google, LinkedIn, AnswerThePublic, SparkToro and PainOnSocial buttons open searches or assist copying. They do not perform and verify research on the user's behalf. The generated plan can include representative quotations without consistently labeling them in the display. Keep hypothetical wording visibly separate from real customer evidence.

The code mainly checks top-level fields, not all requested counts, claims or nested types. A failed generation can leave an older plan in state, so inspect the actual content and identifying context before saving it. Its saved-plan list is capped at thirty, potentially dropping the oldest entries, and loading a plan does not necessarily refresh all input controls. Export or preserve important work independently rather than relying on a name in the saved list.

Source: RISER-Marketing-Plan-Generator.html, ten-section prompt, search helpers and storage behavior

Operator's Flow — interpret the sequence before applying it

The HTML and Markdown versions contain the same substantive wording. The introduction says eighteen steps, while the body contains twenty-two across five phases. Its indicative schedule is weeks 1–4 for foundation, 5–8 for assets, 9–12 for acquisition and week 13 onward for ongoing work. Claims about completing foundation in seven days, first conversations in week three or first clients in weeks six to ten have no supplied outcome data. Treat them as source planning expectations, not promises.

The source grades tools Real, Useful With Caveats or Mostly Theater. These are the author's judgments, not certifications. It favors bounded tasks such as extracting data, summarizing transcripts and drafting replies for review over autonomous strategic work. Its claims about provider availability, API access, platform enforcement, prices and professional rules require current primary verification before use. No source instruction to contact buyers, download leads or activate a system is executed by reading this lesson.

Source: Operator's Flow introduction, HTML and Markdown originals

Step 1.1 — Idea Capture

Produce a paragraph identifying buyer, problem, solution, price tier and why you can deliver. The source asks for roughly 200 words and a read-back test: another person should be able to explain the business, audience and reason to buy. Use your skills, work history and credentials as inputs, but do not substitute a credential list for a clear customer outcome. Revise jargon, feature lists and overly broad audiences. The source proposes quarterly review and revision when customer feedback contradicts the original buyer or problem. AI-generated enthusiasm is not validation.

Source: Operator's Flow Step 1.1

Step 1.2 — Pain Discovery

Produce three to five evidence-backed pain themes using the buyer's own language. The source proposes one week of three research tracks: five to ten direct conversations; reading relevant public discussions; and tool-assisted scanning. Its interview questions ask about frustration, the last concrete incident, attempted solutions, and what did or did not work. Preserve exact quotes and their source links, separately from interpretation.

The completion target is at least twenty real quotes grouped into three to five themes, with another reader able to recognize the same themes. Tag each as burning, meaning an immediate crisis or deadline, or chronic, meaning persistent friction. The source requires two leading burning themes and says all-chronic themes indicate a wrong offer or audience. Teach this as its prioritization heuristic, not proof that chronic problems cannot support a valuable service. The source's claim that AI gets pain intensity wrong about one-third of the time has no supplied evaluation.

Avoid relying on one thread, skipping conversations or selecting only evidence flattering the existing idea. Transcription and synthesis tools can assist, but a plausible generated persona is not customer evidence. Review the document quarterly as context changes. The catalog and MVO pain/avatar tools support organization; neither certifies quote authenticity or demand.

Source: Operator's Flow Step 1.2, research tracks and completion criteria

Step 1.3 — Offer Hypothesis

Write one page naming the offer, price, deliverables, outcome, timeline and buyer contribution. Use the four value-equation concepts to examine desired outcome, credible proof, delay and effort. The source's illustrative named mechanism is a fourteen-day forensic audit; it is an example, not a service promised by this curriculum. Specify what makes the mechanism useful rather than relying on a memorable name.

Record a falsifiable kill criterion before launch. The source example proposes revising an offer if no paid engagement occurs within sixty days of active outreach, potentially reducing price by 25%. Those numbers are an example, not a recommended universal threshold. The claim that first pricing instincts are usually only 40–60% of market price is unsupported. Examine actual evidence before changing price.

The completion check is a clear thirty-second explanation another person can restate. Review after the first five buyer conversations if clarity or price objections appear. AI can simulate objections, but simulated reactions are not actual buyer responses. The source mentions message-testing services and prices without current verification. Its MVO gate-number cross-references are inconsistent with the shipped engine; use the gate names and actual fields instead.

Source: Operator's Flow Step 1.3 and source examples

Step 1.4 — MVP / Service Definition

Translate the offer into a deliverable: a scope of work for services, a prototype for software or a defined package for productized services. The one-page scope includes what is included and excluded, timeline, communication cadence, revisions, out-of-scope handling and payment terms. Decide what is templated, custom or outside your service. For a package, state its name, exact deliverables, price, timeline and customer eligibility.

Completion means both provider and buyer can understand what will be delivered. Avoid vague ongoing-guidance promises, missing revision limits or deliverables without a working process. The source proposes reviewing scope after the first three engagements. Drafting or signing tools can assist; they do not establish that the agreement fits every situation. Do not build elaborate automation before understanding real delivery work.

Source: Operator's Flow Step 1.4

Step 2.1 — Competitive Intelligence

Build a one-page comparison of three to five competitors, with the procedure specifically asking for five. Examine their offer, visible price, positioning, lead magnet, hook and case studies. Separate observable claims from guesses about what is working. Record one strength, one weakness and a supportable distinction for each competitor. Credentials or tenure may be difficult to match; clearer positioning or scope may be an opportunity to test.

Refresh quarterly. Avoid excessive collection without a decision, copying an offer or treating a dashboard as insight. The source names technology, traffic, archive and scraping tools as possible aids, but their outputs and access conditions require checking. No scraping or competitor download has been executed here.

Source: Operator's Flow Step 2.1

Step 2.2 — Brand and Asset Minimum Viable Set

The proposed set is a wordmark or logo, professional headshot, one-page bio, color palette and one-page service overview. The bio should state actual credentials, three concrete prior accomplishments, appropriately anonymized when needed, and whom you serve. The completion check is a presentable professional profile, directory-listing draft and shareable service overview.

The source delays further branding until five clients and gives specific design budgets and tool prices. Treat these as author preferences and dated estimates, not necessary spending or current quotes. Avoid spending weeks polishing a logo while leaving the service unclear. Any claim that a directory requires a particular photo standard needs verification with that directory; the source's preference is not an established universal rule.

Source: Operator's Flow Step 2.2

Step 2.3 — Lead Magnet: Gift First

Create a narrow asset solving one micro-problem: the source suggests a diagnostic checklist, calculator, review template or short evaluation guide. It should be useful even if the recipient never buys. Test usefulness with two real buyers as the source proposes, preserving their actual feedback. A disguised sales deck does not fulfill the same promise.

The source contrasts an overly long forty-page document with a single tip, but length alone does not establish usefulness. Choose the form that lets the audience complete the promised task. Its tool examples cover drafting, layout and delivery; none substitutes for subject-matter review. The Marketing Plan Generator's fifth section supplies a recommendation, not a verified completed lead magnet.

Source: Operator's Flow Step 2.3

Step 2.4 — Sales or Service Page

Build a page for the specific buyer, rather than assuming a general homepage does the same job. The source sequence is hook, problem, limitations of alternatives, mechanism, proof, offer, real bonuses, guarantee or risk reversal, and CTA. Its 800–1,500-word range is a planning suggestion, not a search-ranking rule. Explain alternatives fairly and use only evidence-backed proof and meaningful terms.

Completion means a reader can understand whether the offer fits and what to do next. Avoid self-focused language, a hidden offer, vague next steps and unsupported social proof. The source lists page builders and tracking tools, but this project remains in the authorized GHL environment. More expensive tracking is not automatically warranted; first define the question and required evidence. No source tool recommendation overrides the existing platform choice.

Source: Operator's Flow Step 2.4

Phase 3 — Turn assets into actual conversations

The source prioritizes warm outreach, a named Dream 100 list, ongoing content and only then paid distribution. It also starts content in week one, so its instruction not to run channels in parallel is not absolute even within the document. Treat the sequence as a proposed focus strategy. Its objective is conversations with identifiable potential buyers rather than awareness alone. None of these instructions authorizes sending outreach from this lesson.

Source: Operator's Flow Phase 3 introduction

Step 3.1 — Warm Network Outreach

The source targets five to fifteen conversations and twenty to fifty possible introductions. It proposes a four-to-six-sentence note explaining the work, asking for a specific relevant introduction, offering something useful in return and including the lead magnet. Its completion target is notes sent within seven days with replies and introductions tracked. These are planning quantities, not expected response guarantees or instructions to contact everyone automatically.

A specific request is easier to interpret than a general request for help. Adapt the Marketing Plan Generator's draft to the actual existing relationship rather than treating a cold template as personal correspondence. The source favors an existing inbox, LinkedIn and a simple tracker over automated warm outreach. Review relevance and recipient expectations before any real communication; no messages were sent here.

Source: Operator's Flow Step 3.1

Step 3.2 — Dream 100 List Building

Create a working research table with name, title, firm, geography, contact route and one specific reason the person fits. The source targets one hundred real people, verified contact details for seventy and specific notes for fifty. Its forensic-engineer example allocates twenty-five construction-defect attorneys, twenty-five insurance-defense attorneys, fifteen subrogation managers, fifteen mechanical-contractor GCs, ten property-management firms and ten technical-committee chairs. The firms category conflicts with the requirement for named people; identify an appropriate role/person before treating an organization as a completed contact record.

The source's prospect-list use of Dream 100 should be distinguished from audience-access or partnership uses of the concept. Preserve the actual objective of each list. Research tools and public records can assist, but guessed email patterns are not verified addresses. The listed prices, enrichment capabilities and platform restrictions are not current verified facts in this lesson. Avoid replacing specific relevance with bulk automation. The claim that stopping at thirty is inherently inadequate is an author rule, not a demonstrated mathematical threshold.

Source: Operator's Flow Step 3.2 and segment allocation

Step 3.3 — Dream 100 Outreach Cadence

The proposed schedule is six touches over eight weeks, mixing appropriate channels and using a real contextual signal. It suggests fifteen touches per workday and placing the lead-magnet offer on touch two or three rather than touch one. The completion criterion, however, requires only four touches per person over eight weeks. Preserve this discrepancy rather than pretending the quantities are identical.

The source calls 8–15% interested-conversation response normal, below 5% a messaging problem, and above 25% possible targeting luck. These are unsupported benchmarks and causal interpretations. Define the denominator and inspect the actual evidence; a rate alone does not prove why people responded. More touches are not automatically better or appropriate. Honor stop requests and platform rules in any actual implementation.

Its email infrastructure, domain warm-up, authentication and professional-solicitation passages are source claims requiring current official and jurisdiction-specific review before use. A separate domain or sending tool does not guarantee deliverability or compliance. This lesson preserves and explains the proposed cadence without activating it, purchasing tools or sending messages.

Source: Operator's Flow Step 3.3, cadence, benchmark claims and operational cautions

Step 3.4 — Content Distribution Cadence

Choose a primary platform based on actual buyer presence. The source favors LinkedIn for professional services and names industry publications as alternatives, but its “almost always” recommendation is not universal evidence. Its twelve-week schedule is Monday pain posts of 150–300 words, Wednesday mechanism posts of 200–400 words and Friday proof or case-study posts of 250–500 words, on consistent days and times.

Use observed pain, actual expertise and appropriately sanitized evidence. Record reach and meaningful buyer responses alongside publishing consistency. The assertions that silent eight-week readership is the dominant pattern or that AI saves 30–50% of editing time are unverified. The useful distinction is between assistance with drafting/formatting and the evidence and judgment the author must supply. Repurposing tools require substantive original material; a large generated content inventory does not itself establish credibility.

Avoid premature platform expansion, sporadic posting and generic claims detached from the audience. Review progress against a stated objective rather than assuming twelve weeks automatically proves success. The source's Identity Commoditization argument is examined in its closing section and will be retained there.

Source: Operator's Flow Step 3.4, full weekly cadence and AI tradeoffs

Step 3.5 — Paid Channels

The source defers paid acquisition until manual channels produce measurable conversation, closing and value evidence. It proposes ten closed clients, often six to twelve months of preparation, one initial platform, a monthly cap, and cutting spend when CAC exceeds 0.33 times LTV. These are its operating heuristics, not universal financial advice. Define whether LTV means revenue or contribution and distinguish observed from projected value before interpreting such a ratio.

Its suggested platform choice depends on buyer presence or search behavior; no platform is selected or funded here. The completion check is a measurable acquisition cost under the chosen threshold and a predictable conversion rate over sixty days. “Predictable” is not statistically defined in the source. Claims about boosted posts and native optimization outperforming other tools are not substantiated. The practical exercise is to document the evidence and constraints for a proposed test, not to assume paid distribution fixes a weak offer.

Source: Operator's Flow Step 3.5

Phase 4 — Document delivery while learning from real engagements

The source begins operations alongside acquisition once a client signs. Its purpose is consistent delivery, knowledge capture and quality as workload grows. Predictions about rapid client growth or seventy-hour weeks are illustrative warnings, not measured outcomes. The following four steps specify actual artifacts to create.

Source: Operator's Flow Phase 4 introduction

Step 4.1 — Client Onboarding SOP

Document the path from agreement to first deliverable using the scope of work and experience from initial engagements. Include a welcome-message template, kickoff agenda, information checklist, project-folder template, communication agreement and payment workflow. The source's goal is a consistent first fourteen days without repeatedly inventing routine material.

Treat the claimed day of setup and day saved per later client as an unverified estimate. Preserve room for client-specific needs. Avoid missing information, absent kickoff agendas and forgotten invoices. Tools can store procedures, recordings and reminders, but templates do not replace relationship-building. No client onboarding or payment collection is initiated here.

Source: Operator's Flow Step 4.1

Step 4.2 — Delivery SOP

Map delivery from start through final work and offboarding. Include artifact templates, quality checks, internal review, time tracking and client communication points. For technical work, preserve citation and qualification requirements appropriate to that work rather than assuming a generic template is sufficient.

The source proposes a 30–50% time reduction on a second similar engagement. This is a target claim without supporting data, not the definition of acceptable quality. Measure actual time and error outcomes. Avoid shipping unchecked drafts or discovering only afterward that delivery effort exceeded the offer's assumptions. Drafting and note tools can assist with known patterns; their presence does not prove the service can be automated end to end.

Source: Operator's Flow Step 4.2

Step 4.3 — Knowledge Management

Capture reusable, approved material after engagements: effective emails, reviewed report sections, objection responses and sanitized cases. The source suggests thirty minutes of capture, tagging and filing, with a retrieval target of finding a relevant prior artifact within sixty seconds. It predicts a library that makes future work sixty percent complete after twelve months; that percentage is not established evidence.

Use meaningful names and tags, retain context and permissions, and distinguish a reusable pattern from confidential client detail. Avoid both capturing nothing and storing everything without navigation. Notion, Obsidian and other systems are examples; choosing software does not create the knowledge practice. This lesson does not assume access to every file in the user's vault.

Source: Operator's Flow Step 4.3

Step 4.4 — Tech Stack Hygiene

Create an inventory of tools, purpose, cost, access holders, stored data and review dates. Review quarterly and identify unused subscriptions or fragmented workflows. The source's completion aspiration is no forgotten tools, surprise charges or misplaced files; verify records rather than treating that aspiration as guaranteed.

Its examples of eight to fifteen tools, $30–100 subscriptions and a $2,000 monthly threshold for management software are source estimates, not purchase recommendations. Record sensitive-data locations and check actual access and provider information when reviewing the stack. A recommendation to retire a tool is not permission to cancel a subscription or delete its data. No such action is taken in this curriculum work.

Source: Operator's Flow Step 4.4

Step 5.1 — Monthly Metrics Review

Build a one-page dashboard from CRM, email, accounting and time records. Include all eight source measures: conversations started, qualified opportunities, closed engagements, average deal value, lifetime value, customer acquisition cost, hours per engagement and revenue per hour. Define the reporting period and calculation basis consistently. Revenue per hour is not profit per hour, and projected lifetime value is not realized revenue.

The source proposes updating on the first Monday monthly, reviewing for thirty minutes and choosing one change. Avoid collecting dozens of measures without a decision or equating impressions with business results. Impressions may still be useful context; the source's criticism of vanity metrics does not make every reach measurement meaningless. A dashboard is complete only when its numbers are traceable and its proposed action is explicit.

Source: Operator's Flow Step 5.1 and all eight measures

Step 5.2 — Quarterly Buyer Feedback

Ask recent clients what worked, what did not, what they would change and what they might need next. Record with permission, preserve exact language and compare patterns without selecting only satisfied clients. The output calls for at least five clients per quarter, but the procedure schedules four thirty-minute calls. These quantities conflict; choose and document a practical plan rather than claiming both were fulfilled automatically.

Use transcription and synthesis as aids, with the original context retained. Feed meaningful findings into offers, content and delivery procedures. Collecting feedback without examining a change is not the intended outcome. A customer quote belongs in public teaching only when its use is appropriate and accurately represented.

Source: Operator's Flow Step 5.2, including the five-client/four-call discrepancy

Step 5.3 — A/B Testing

The source proposes testing high-volume sales pages, lead magnets, subject lines and creative. Define the hypothesis before launch, isolate the intended change, document the result and retain the variant and reasoning. Its suggested thresholds are one thousand monthly visits per asset, up to four weeks per test and four deliberate cycles per year. These are planning heuristics, not a statistical guarantee: significance also depends on event rates, effect size, design and the analysis method.

A four-week stop can produce an inconclusive result. Do not automatically label the better-looking number a winner. Avoid testing many changes while claiming to isolate one cause, stopping as soon as a desired result appears, or losing the record of what was tested. Native or specialist testing tools are implementation examples; no test was launched here, and source claims about third-party optimization quality are not independently established.

Source: Operator's Flow Step 5.3 and testing thresholds

Step 5.4 — Offer and Positioning Refresh

Use metrics, buyer feedback and competitor changes to review the offer, price, positioning and audience. The source proposes one full day annually and an explicit end-of-year decision: retain the offer or specify what changes. Revisit whether the buyer's problem, delivery capability and supporting evidence still match the original foundation.

Document what to keep, evolve and retire. Avoid changing purely from boredom or making a cosmetic refresh without customer evidence. The source's prediction that neglected offers become stale within eighteen to twenty-four months is not supported by data here; the actionable practice is a documented review, not a universal expiry date.

Source: Operator's Flow Step 5.4 and Phase 5 introduction

Step 5.5 — Scale Decision

Choose deliberately among serving more clients in the same niche, bringing the same offer to an adjacent niche, or remaining solo. The source calls the first vertical and the second horizontal scaling; preserve those local definitions rather than assuming every framework uses the same terms. It suggests eighteen-plus months of operating data, but supplies no evidence that this is a necessary or sufficient threshold.

For more capacity in the same niche, it proposes associate practitioners, documented delivery, training and quality control. For an adjacent niche, pilot it and revisit Phase 1 assumptions. For staying solo, it suggests increasing prices; that is a proposal to evaluate, not an automatic requirement or guarantee of better margins. Write the decision and conditions for reconsideration. Avoid hiring before defining the desired role or the delivery process. No hiring, price change or expansion is activated by this lesson.

Source: Operator's Flow Step 5.5

Close all five feedback loops
  1. Metrics to pain discovery: a decline in conversations or closes triggers investigation of audience, message and other causes. The source assumes shifted buyer pain; that is one hypothesis, not the only explanation.
  2. Buyer feedback to lead magnet, sales page and offer: use genuine language to clarify answers, objections and unmet needs. Preserve the quote's context and supporting reference.
  3. A/B results to assets and content: retain supported findings and revise underperforming patterns, including uncertainty when a test was inconclusive.
  4. Knowledge library to content and lead magnets: reuse approved, sanitized cases and recurring questions. Client confidentiality and meaning survive the handoff.
  5. Annual refresh to the full foundation: reconsider audience, problem, offer and scope together when evidence warrants a change.

The source frames these as scheduled review meetings, not autonomous magic. Its closing discipline is to complete foundation work, define abandonment conditions, examine measures monthly, hear buyers quarterly, refresh annually and avoid adding tools instead of doing the work. No new reminder or automation is created from these source instructions.

Source: Operator's Flow five Feedback Loops and closing checklist

Interpret Identity Commoditization as a hypothesis about differentiation

The source argues that similar AI prompts can produce similar messaging, making providers harder to distinguish and encouraging price comparisons. It calls this Identity Commoditization and describes price-floor collapse as a likely consequence. This is an author argument, not a demonstrated universal causal result or a verified forecast about 2026.

Its five proposed defenses are: use AI to edit and synthesize the operator's own thinking; provide relevant prior work and distinctive context; personally own high-stakes artifacts; include authentic evidence such as an appropriate technical diagram, image or case detail; and compare three recent messages with three competitor examples quarterly. Apply these with judgment. Do not upload confidential reports or expose case identifiers merely to make content distinctive. Personal authorship also does not remove the need to verify facts.

The blanket “never generate, only refine” position is the source's preference. The practical quality requirement is accountable human review, genuine evidence and useful specificity. The stated 30–50% time savings is unverified; measure actual effort and quality rather than promising that improvement to every learner.

Source: Operator's Flow Identity Commoditization section and five defenses

Reconcile the artifact map with the shipped files

The source's closing table maps pain discovery to the pain catalog and MVO pain/avatar gates; offer work to MVO and marketing-plan offer angle; MVP definition to the full MVO sequence; competitive intelligence to a purported Competitive Moat gate; lead magnet to marketing-plan section five; warm outreach to section nine; Dream 100 to the acquisition catalog; cadence to that catalog's outreach/CRM category and section nine; and content to gathering-place, channel, hook and schedule sections.

Retain the full original table in the appendix, but do not treat its gate numbers or section numbers as authoritative. The shipped MVO Gate 03 is Profitable Problem, not Competitive Moat; the tool's output order must be checked by actual field name. Both artifacts can inform work without providing the exact function promised by an outdated cross-reference. Clickable links in the published lesson must lead to the actual supporting asset or original archive, not invented missing pages.

Source: Operator's Flow closing artifact table; compare the archived tool implementations

MVO Decision Engine — understand what a verdict means

The rail has seventeen entries: Start, fifteen working gates and Brief. The source alternates sixteen and seventeen in its descriptions. The working sequence is Pain Discovery; Hungry Avatar; Idea/No Idea; Profitable Problem; Grand Slam Offer; Offer Stack; Core Four Distribution; Dream 100; Hook/Headline/Body; Persuasion Architecture; Deploy; Iterate; Pivot; Scale; and Repeat. The rail permits jumping between entries, so “sequential” describes the proposed learning order rather than enforced validation.

GO, NO and REWORK are outputs of authored rules applied to entered answers. They do not verify market demand, legal permission, statistical confidence or business viability. Distinguish an unanswered field, a low score, contradictory evidence and a verified failed test. The script sometimes collapses these into the same verdict.

Changing answers does not automatically invalidate saved verdicts. Re-evaluate affected gates before relying on the rail, summary or export. A gate can display freshly calculated reasons while the stored summary badge remains old. The tool's claim of automatic saving also needs verification in the actual browser; keep a separate record of important work.

Source: RISER-MVO-Widget-Direct.html, navigation, verdict and persistence implementation

Gate 00½ — Pain Discovery

Each of up to five pain cards records a title, 0–100 score, frequency, source community or URL, audience description, up to five verbatim quotes and solution seeds. The available frequency categories are daily/weekly, monthly, quarterly/seasonal and one-time/project. Select a lead card; optionally cluster related cards around it. Other cards remain supporting material. If research is unavailable, skipping is permitted, but downstream answers remain hypotheses.

The code requires a lead title of at least ten characters, an audience description of at least thirty, and qualifying quotes of at least ten characters. A passing score can come from any card scoring at least seventy, not necessarily the lead. It accepts three qualifying quotes even though some feedback asks for five, and eight quotes strengthens its “locked” message. These are interface rules, not evidence standards. Neither a typed score nor a copied quotation is independently authenticated.

Applying the lead card overwrites avatar text, maps its score to the intensity scale and sets problem frequency. It fills problem text or mechanism hints only when those are empty. The VOC vault lets you pull quotations into downstream fields, but its reusable entry does not reliably retain a precise source URL and insertion uses generic attribution. Preserve the original quote, source link, date and context alongside every teaching or business claim. Recheck the affected fields and verdicts after applying or editing a card.

Source: MVO Pain Discovery fields, lead/cluster/VOC helpers and verdict code

Gate 01 — Hungry Avatar

Describe who the buyer is and their specific pain in their own language, then rate purchasing power, market trajectory, reachability and pain intensity on four 1–10 scales. The source gives detailed role-and-context examples to contrast with vague labels such as all small businesses. Use relevant specificity, not invented demographics or financial details. A description of last Tuesday's work, a comparison with another experience tier, and observable common characteristics are its sharpening prompts.

The code checks both text fields for at least twenty characters, sums the four ratings and may add four points when the lead pain score is at least eighty-five with five quotes, capped at forty. GO starts at thirty-two, REWORK at twenty-four and NO below that. These self-entered scores are not validated purchasing power or market-growth measurements. The source's $1,000 spending guideline and “top-three pain means budget exists” claim are heuristics, not facts about every buyer.

External-verification buttons construct searches from the entered keywords. Reddit, Google, YouTube, X, Trends and job listings can provide research leads; the button itself has not verified the avatar. The AI sharpen feature critiques specificity and may suggest a rewrite. Check every added detail, label examples, and retain actual source evidence rather than accepting confidence of wording as confidence of truth.

Source: MVO Hungry Avatar definitions, examples, sharpening prompts and scoring

Gate 02 — Idea or No Idea

Write a one-sentence offer naming the audience, outcome, timeframe and objection. Select whether the market is crowded, has some competitors, has almost none, or would make you a first mover. Then answer the proposed $100-today question: can you name ten people, would you need to find them, or would reaching buyers require weeks of marketing? These are self-reports; imagining a buyer is different from receiving a payment.

The implementation accepts a thirty-to-two-hundred-character sentence. No competition or a negative payment-readiness choice returns NO; thin competition or uncertainty returns REWORK; a busy or moderately competitive market with the named-buyers choice can return GO. The feedback also proposes asking twenty people whether two would pay, a different count from the ten-person input. Neither check records an actual payment test.

Competition can be useful evidence of alternatives, but its presence does not prove demand for your specific offer, and its absence does not prove failure. Document the observed alternatives and what remains uncertain. Treat the source's strong first-mover warnings as its preference, not a universal law.

Source: MVO Idea/No Idea inputs, choices and verdict rules

Gate 03 — Profitable Problem

State the exact problem, its frequency, the cost of leaving it unsolved and what buyers currently do instead. Alternatives include competitors, informal help, searching or tolerating the problem. The recurrence options run from daily/weekly to monthly, quarterly/seasonal and one-time/project. The cost choices are high, moderate and low. Explain the evidence behind both choices rather than treating them as objective measurements.

The code checks the two text fields for at least twenty characters. Low cost returns NO. One-time problems or moderate cost return REWORK. Otherwise frequency weights of four, three, two or one combine with cost weights of four or two; a total of at least six produces GO. These rules favor recurrent high-cost problems but do not calculate actual profit, customer acquisition cost or fulfillment cost.

The source associates recurring problems with recurring revenue and one-time projects with reacquisition costs. Those are business-model considerations, not guarantees that subscriptions work or that project businesses are weak. The label Profitable Problem does not certify profitable unit economics.

Source: MVO Profitable Problem inputs and weighted verdict logic

Gate 04 — Grand Slam Offer

Describe the dream outcome and rate its strength; list real proof and rate perceived likelihood; choose time to first result; choose customer effort; and name the mechanism. Time choices are within twenty-four hours, the first week, the first thirty days, or months. Effort choices distinguish done-for-you, done-with-you, DIY with support, and largely self-directed work. The source's price bands and claims that one delivery style always has higher value are author assumptions, not verified market prices.

Use the conceptual outcome/likelihood/time/effort framework to identify where the offer needs stronger evidence or better delivery. The actual widget score is different: it multiplies the two 1–10 ratings, divides by the SUM of transformed time and effort values, and multiplies by ten. Time is mapped to 10, 8, 6 or 3 and effort to 10, 8, 5 or 3; each is subtracted from eleven before adding the denominator. The result can reach five hundred despite a display maximum of one hundred. GO begins at thirty-five, REWORK at twenty and NO below that. A high score is not a validated percentile or Hormozi's original equation.

The text checks use minimum lengths of twenty characters for outcome, ten for proof and thirty for mechanism. Length does not establish truth, differentiation or delivery capability. Replace vague promises with an actual supported result and relevant evidence. Preserve the flawed original formula in the appendix; do not silently turn it into a different scoring method.

Source: MVO Grand Slam Offer fields and implementation · Primary conceptual value-equation reference

Gate 04½ — Offer Stack

Enter the offer name; three to five proposed bonuses with a name, outcome and supportable standalone value; guarantee type and exact wording; scarcity mechanism; total stack value; and actual USD price. A useful bonus resolves a relevant next problem. A price anchor needs a defensible basis rather than an invented large number. The source's claims of a 30% naming conversion lift and guarantees halving or doubling conversion are not supported by data.

The guarantee choices are anti-guarantee/no refunds, conditional, unconditional, implied and none. These are source categories, not a universal ranking of appropriate terms. Explain exactly what is offered and what conditions apply; do not imply that a no-refund statement overrides applicable obligations. The scarcity choices are cohort cap, founding price, bonus expiry, launch window, fake urgency and none. Any limit must be real. An offer without scarcity is not inherently invalid, despite the source's negative framing.

The code accepts names of five to eighty characters, bonuses of at least sixty characters and guarantee text of at least twenty. It does not verify three to five actual bonuses. Fake urgency or no guarantee returns NO; no scarcity, a value-to-price ratio below three, or an implied guarantee returns REWORK. Other complete combinations can return GO. The suggested five-to-ten-times value anchor is an author heuristic, not a market valuation. Numeric parsing does not explicitly reject negative prices, so validate the actual amounts yourself. A passing gate is neither a guarantee review nor proof of profitability.

Source: MVO Offer Stack fields, choice labels and verdict code

Gate 05 — Core Four Distribution

Choose a primary channel: warm outreach, cold outreach, content for an existing audience, or paid ads. Write the volume assumptions and declare whether acquisition cost, lifetime value and payback are known, partly estimated or unknown. The source favors focus on one channel; claims that a channel is free, fastest or best for the first ten customers omit context and labor costs.

Its example of ten customers at 1% conversion implies one thousand opportunities. Spread over ninety calendar days that is about eleven per day, rounded up to twelve; a workday schedule produces a different daily target. More activity is not always the answer if fit, permission, delivery or economics are wrong.

The implementation checks a channel, thirty characters of volume explanation and an economics choice. Paid ads without “yes” returns NO; other complete combinations can pass without calculating CAC, LTV or volume. The stated one-third-of-twelve-month-LTV rule is not validated by the code. Define LTV consistently and retain actual evidence. No spend or messages are activated by choosing a channel in this lesson.

Source: MVO Core Four inputs, volume example and paid-channel rule

Gate 05½ — Dream 100

List specific people, podcasts, newsletters or groups the audience already follows, with real URLs and a reason for relevance. Choose the source's proposed strategy: build familiarity by contributing useful work, pay for appropriate distribution, or develop a mutually useful partnership. Draft a first message and choose the intended weekly contact category: twenty-plus, five-to-twenty, fewer than five, or none. The overlapping boundary at twenty is an original labeling ambiguity, not a meaningful difference in evidence.

The UI requests twenty-five entries, but the code only checks at least one hundred characters and ten newline-separated lines. Empty or irrelevant lines can therefore satisfy a structural count without making a useful list. First-message text needs thirty characters; no-volume returns NO, low-volume REWORK, and higher categories can pass. Names, URLs, relationship fit and consent are not verified.

The source's gift-first rule, ninety-day invitation expectation and claims of network density by particular months are prescriptions or predictions without supplied evidence. A useful contribution does not create an obligation to respond or buy. The source also conflicts with Operator's Flow over whether the first outreach should include a gift. Choose a context-appropriate approach and record the rationale rather than treating either prescription as universal.

Source: MVO Dream 100 fields, strategy options and implementation · ClickFunnels Dream 100 explanation

Gate 06 — Hook, Headline and Body

Write the hook, headline and body, then classify the CTA as a named asset/outcome, an action plus topic, or generic wording. The source's hook examples include an audience question, a pattern interrupt and a statistic. A statistic such as its illustrative 47% must not be copied into real marketing without evidence. The three-second framing is not a universal measurement of attention.

The headline template combines outcome, timeframe and objection. The body skeleton is problem, what is working, named mechanism, proof and specific CTA. The source suggests fewer than one hundred words for ads and 250 for landing pages, while its Operator's Flow suggests 800–1,500 for a service page. Treat these as different writing contexts, not one consistent enforced limit.

The code checks hook length of twenty-to-two-hundred characters, headline length of twenty-to-250 characters and body length of at least eighty characters. It does not enforce the word limits, verify evidence or assess the actual CTA text. A generic CTA choice produces REWORK, while the middle category can pass despite stronger feedback language. The claim that generic CTAs convert at half the rate is unsupported. Judge whether the next step truthfully matches the destination and audience need.

Source: MVO Hook/Body definitions and validation · ClickFunnels Hook, Story, Offer reference

Gate 06½ — Persuasion Architecture

State the central belief the offer requires, examine proposed objections about the mechanism, the customer's own situation and external conditions, and identify the useful resource offered before a sales request. These beliefs are hypotheses to explore, not permission to label every valid concern false. The source attributes its Big Domino and three-belief framing to Brunson; exact wording remains source attribution unless separately verified.

Then select five levers. Reciprocity ranges from a specific useful asset to generic or absent. Social proof ranges from five-plus similar-customer testimonials, to two-to-four, to zero-or-one/generic praise. Authority is strong, borrowed or thin. Unity is explicit, implicit or absent. Consistency is a multi-step journey or a direct ask. These choices omit other principles despite the broader source's references to seven principles; do not call the five-item score a complete or validated Cialdini assessment.

The code requires thirty characters for the central belief, sixty for the objection audit and twenty for the lead magnet, plus the five choices. It assigns up to two points each for reciprocity, social proof, authority, unity and a multi-step flow. No reciprocity or low social proof returns NO; otherwise fewer than six of ten returns REWORK and six or more can pass. Text length does not verify three distinct objections or genuine customer evidence.

The source's claims of one-third conversion without a gift, a 20% lift from shared identity and superiority of particular testimonial counts are unsupported. Use genuine, relevant proof and accurately attributed endorsements. Never fabricate testimonials to pass the gate. A free resource or a small commitment does not oblige a person to take a larger one. The purpose of clearer persuasion is an informed decision, not pressure that hides material conditions.

Source: MVO Persuasion fields, five scoring levers and verdict implementation

Gate 07 — Deploy

Record a specific launch date, cohort-size category, beta price, abandonment rule and readiness of four functions: lead capture, payment, delivery and measurement. The cohort options are five-to-ten, ten-to-twenty-five, twenty-five-to-fifty and fifty-plus, with overlapping boundaries. Source examples propose fewer than five paid customers in fourteen days or fewer than three in twenty-one days as pivot triggers. These are sample operating rules, not universal launch criteria.

The source asks for a date within thirty days, but the code accepts any nonempty date text. It rejects fewer than three functioning tools but can pass three of four despite the option promising REWORK. It parses a nonzero price without explicitly rejecting negative values. Prices from $500 to $900, an open-ended keep-going rule or the largest cohort trigger REWORK. The source's recommended $497–$997 service range partly overlaps its disfavored middle, illustrating why its pricing preferences should not be treated as a coherent pricing model.

Verify the actual end-to-end process, delivery capacity, dates and terms before a real launch. The claimed tenfold testimonial-density benefit from a smaller cohort is unsupported. A gate pass does not publish pages, test payment or prove that the offer can be fulfilled.

Source: MVO Deploy fields, overlapping ranges and actual validation

Gate 08 — Iterate

Select the amount of customer exposure, describe the dominant observed pattern, choose one outcome/likelihood/time/effort lever, identify awareness and sophistication hypotheses, and state the refund-feedback practice. The source's sample categories are fewer than ten conversations, ten-to-twenty, and twenty-to-thirty conversations or thirty-plus users. These overlap and do not establish statistical sufficiency. More observations help only when their meaning and relevance are understood.

Awareness choices are unaware, problem-aware, solution-aware, product-aware and most aware. The source suggests moving from problem explanation toward mechanism, proof and a clear offer as familiarity increases. Its sophistication choices progress from a new claim, to stronger claims, distinctive mechanisms, different mechanisms and identity/story. These are separate concepts. The help text sometimes conflates them by saying a most-aware audience needs a new mechanism. Do not automatically strengthen an unproven claim because the market has heard similar claims before. The source's dramatic weight-loss example is not an endorsed or supported result.

The five proposed refund questions ask what the buyer hoped to achieve, what caused them to step back, where they see the issue, what might have changed the experience, and whether they would refer someone. Ask for feedback respectfully; participation is not a prerequisite for processing a valid refund. The exact attributed Hormozi quotation is unverified. The “sometimes” choice can pass even though its label suggests REWORK; “never” returns NO. The smallest sample returns NO and the middle sample REWORK; a pattern description needs thirty characters. These structural checks do not validate the diagnosis.

For sophistication stages three through five combined with outcome or likelihood changes, the code adds a mechanism-renaming suggestion. A new name is not proof of a new or better delivery method. Record one deliberate change, its rationale and the evidence that would alter the decision.

Source: MVO Iterate fields, five awareness stages, five sophistication stages, refund questions and verdict rules

Gate 09 — Pivot or Hold

The three selections describe hook response, opt-in or buying-conversation response, and post-purchase outcomes. The source supplies illustrative benchmarks: cold-ad CTR 1–2%; organic engagement 1–3% of followers; cold landing-page opt-in 20–40%; sales-page purchase 1–3%; application/booking 5–15%; and refund bands below 5%, 5–10% and above 10%, with NPS also mentioned. These are unsupported broad thresholds, not standards for every campaign. Define comparable denominators, periods and events before interpreting them.

The code examines weak hook response first, then low opt-in, then negative post-purchase response. Consequently a hook warning can hide a more serious refund or delivery issue in the displayed verdict. Read all three measures together. The source's one-to-one diagnosis—low clicks means hook, low opt-ins means audience, refunds mean offer—is a hypothesis, not unique causal proof. Technical failures, mismatched expectations, measurement problems or multiple causes may also matter.

Do not assume a low refund rate certifies offer quality or justifies scaling. Preserve evidence of actual buyer outcomes and unresolved issues, then specify whether to revise the message, targeting, offer, delivery or measurement.

Source: MVO Pivot fields, source benchmarks and branch ordering

Gate 10 — Scale

Declare whether there are ten-plus customers from one channel, known economics and six-plus months of retention data; choose price, retention or volume as the proposed lever; and describe the bottleneck. The code checks a twenty-character bottleneck and declared choices. No signal returns NO, partial signal REWORK, and choosing volume also returns REWORK. Other complete cases can pass without inspecting actual records.

The source favors price first, retention second and volume third, but gives no universal evidence for that order. Its claim that a 10% price rise produces 50% more profit depends on starting margin, volume and costs. Its claim that 20% less churn doubles LTV is mathematically wrong under a simple inverse-churn model: reducing churn to 80% of its former level raises that modeled LTV by 25%, assuming everything else fixed. Real customer economics require more context.

The practical exercise is to identify a capacity or economics constraint, propose a controlled change and review its results. The source suggests reassessment at thirty days. A self-reported scale signal is not a spending authorization or a guarantee that a single bottleneck explains every problem.

Source: MVO Scale fields, rules and financial claims

Gate 11 — Repeat and compound

Describe the next customer problem, select a new offer for the same audience, an adjacent audience, a new channel or an entirely new business, and state whether the current offer is fully developed, still has room or simply feels boring. The source suggests asking twenty customers what they might buy next; stated interest is not a verified purchase commitment.

Name five proposed ladder positions: free resource; a $7–$97 entry offer; a $297–$1,997 core offer; recurring offer with monthly price; and a $5,000–$50,000-plus premium tier. Those prices are source examples, not required or validated bands. Record continuity participation as sixty-plus percent, twenty-to-sixty, below twenty or absent, and affiliate activity as active, informal or absent. The sixty-percent boundary overlaps in the labels.

The code requires thirty characters for the next problem and all decision choices. Boredom or absent continuity returns NO. A new business, fewer than three named rungs of five characters each, room remaining in the current offer, or no affiliate activity combined with less-than-strong continuity returns REWORK. It counts any three rungs, despite feedback asking specifically for free resource, core and continuity. A passing record does not verify ARR, retention or affiliate performance.

Claims of doubled or fivefold LTV, sixty percent of LTV left behind, eighty percent of profit at the premium tier, or seventy percent of business value abandoned are unsupported. Referrals and affiliates do not have zero acquisition cost when commissions, administration and support exist. A 30% commission is a source proposal, not a required or proven rate. Build an additional offer only around a real customer need and viable delivery; a subscription or affiliate program is not universally necessary.

Source: MVO Repeat fields, ladder, continuity/affiliate choices and verdict implementation

Brief, export and AI critique — preserve the complete evidence separately

The printable brief summarizes selected answers and the first three vault quotes. It omits some fields and does not guarantee a single printed page. Its badges use stored verdicts rather than reliably recomputing all decisions. JSON export preserves state and stored verdicts, but should not be confused with an independently verified evidence archive. Re-evaluate after changes and retain full source material, not only the brief.

The AI critique sends the current answer for a specificity score, critique, weakest element and suggested rewrite. The code accepts score and critique presence, clamps the score to 1–10, and does not require every promised field. Its prompt simultaneously prohibits invented facts and permits plausible examples when details are missing. Review any rewrite before inserting it, label hypothetical detail and restore precise quote provenance. Search links, AI critique and rule-based verdicts are three different functions; none automatically validates a market.

The saved API key is separate from exported state, but original research and buyer information can still be in that state. Check what you share. This lesson has not executed an API request or deployed the raw widget.

Source: MVO summary, exportJSON, runAiSharpen and state handlers

Record the explainer in eight sections without repeating its errors

The original Word document is a talking-head production script, version 3 dated April 2026, with an estimated 28–35-minute runtime. Its eight section estimates add to twenty-eight minutes: three, three, four, five, four, three, four and two. The instruction that every section is under five minutes conflicts with the five-minute fourth section. Treat all timings as estimates to verify by read-through.

Camera directions, B-roll instructions, gestures, pauses and graphics cues are production notes, not spoken lesson text. The original describes red italic directions and red bordered doctrine quotations. Preserve the Word original and its eighteen-row reference table; the plain transcript does not preserve all visual formatting. The archive contains a script, not an actual recorded video or audio file, so leave the training slot as a placeholder rather than claiming a recording exists.

Recording section 1 — Cold open and purpose

Explain the cost of building without testing and the value of a structured decision record. The original promises saving or compressing ninety days; replace that performance promise in a new recording with the truthful purpose of making assumptions and next tests explicit. Its credits to Hormozi, Brunson, Kennedy and Cialdini describe claimed conceptual influences, not their endorsement or authorship of the tool. The tool does not prove an idea will survive the market.

Source: MVO Widget Explainer Word document, section 1 and recording instructions

Recording section 2 — Architecture

Show the actual seventeen rail entries and explain the fifteen working gates grouped into detection, construction, deployment and compounding. Start and Brief are navigation entries. Demonstrate GO, NO and REWORK as rule outputs. Correct the source's claim that the widget prevents moving past flaws: the rail permits direct navigation, and even completed fields can contain unsupported assumptions. Do not call the gate sequence external validation.

Source: Word section 2; compare archived MVO navigation code

Recording section 3 — Pain Discovery

Demonstrate the seven card fields, the lead selector, optional clusters, quote vault and applying a lead to downstream fields. Explain the seven intended quote destinations: avatar pain, problem statement, dream outcome, hook, headline, body and reciprocity gift. Verify attribution after insertion because the tool can lose precise source context.

The script says the lead must score seventy; the code allows any qualifying card to supply that score. Its claim that customer language improves copy performance by 30–50% has no supplied evidence. A quote imported from an actual source can improve specificity, but a percentage lift is not established. Show skipped research as an explicit hypothesis state, not an equivalent evidentiary outcome.

Source: Word section 3 and MVO pain/VOC implementation

Recording section 4 — Market and offer gates

Walk through avatar, idea, problem, offer and stack using the detailed gate teaching above. Correct the spoken avatar boundary: thirty-two is included in GO, not only scores above thirty-two. Explain that the offer's computed score is an authored, flawed implementation that can exceed one hundred; it is not Hormozi's exact formula. Thirty-five is also included in GO. Named mechanisms and stack values require real delivery and evidence, not impressive labels.

The sample script library, its claimed closed deals and assigned $497 value are examples in the source, not verified products or results. The claim that naming identical content changes its value from $97 to $4,997 is unsupported. Do not record such claims as factual proof.

Source: Word section 4; compare MVO scoring and field definitions

Recording section 5 — Distribution, copy and persuasion

Explain one-channel focus, explicit volume assumptions, audience-access research and a truthful hook-to-offer sequence. Demonstrate the actual controls: the copy gate has three textareas and a CTA choice, not four textareas with quote buttons as the script says. The five-lever persuasion score is an authored rubric, not an empirically validated Cialdini score. Avoid repeating the script's unsupported CTA conversion uplift or follower count example as current fact.

Use source-grounded language and genuine proof. A generated calculator description, sample proposals or claimed deal values are not verified assets unless they actually exist and have been checked. The source's aggressive outreach thresholds and gift-first maxims do not authorize messaging or override recipient choice.

Source: Word section 5 and corresponding archived tool fields

Recording section 6 — Deploy and iterate

Demonstrate launch fields, tool readiness and the chosen test criterion without presenting a date string as a verified launch plan. Explain sample-size uncertainty and keep awareness separate from market sophistication. Correct the refund-interview discrepancy: the script says silent processing produces REWORK, while the actual code returns NO for the “never” choice. Neither verdict should delay a refund that must be processed.

The original's “done beats perfect every time” and volume claims are motivational rhetoric. A responsible launch still needs to fulfill its promise and function correctly. The lesson is to learn from a defined test, not to excuse avoidable defects or unsupported claims.

Source: Word section 6; compare Deploy and Iterate implementation

Recording section 7 — Pivot, scale and compound

Explain the difference between a diagnostic hypothesis and proven cause. The original suggests ten new hooks tested at one hundred impressions each; those are proposed counts, not guaranteed statistical power. Review customer outcomes even when an earlier hook warning appears. Correct the churn/LTV arithmetic and qualify the price/profit claim using the gate explanations above.

Present the five ladder positions as possible offer structures with the original example price bands, not requirements for every business. Correct the claim of fifty affiliate-generated customers at zero acquisition cost: commissions and operating effort can still be costs. The source's 80% premium-tier profit claim and guaranteed-moat language are unsupported.

Source: Word section 7 and the Pivot, Scale and Repeat source logic

Recording section 8 — Brief and next action

Show the actual brief and explain its selected content, first three quotes and potentially stale verdict badges. The source says it contains every decision and every evidence item in one page; the implementation does not. Keep the complete research record separately and inspect JSON before sharing. A GO badge reflects entered choices and rules, not confirmed commercial success.

Close with a concrete exercise: choose one hypothesis, complete its evidence record, inspect the rule's limitations and identify the next real-world test. Preserve the original closing rhetoric, approximate field count and all table rows in the appendix, but do not repeat unverified claims as the new lesson's guarantees. The video remains a placeholder until a recording is actually supplied and reviewed.

Source: Word section 8 and eighteen-row quick-reference table

Read the two catalogs by purpose, not as a shopping list

The pain catalog groups forty-one entries into seven tiers: eight Reddit/pain-mining entries, six audience-intelligence entries, seven VOC-synthesis entries, nine listening entries, four enterprise-listening entries, five idea/offer-validation entries and two quantitative-validation entries. Each group proposes a different input to the MVO workflow. Discovery, synthesis, monitoring, modeled critique, survey response and observed behavior are different forms of evidence; grouping them under validation does not make them interchangeable.

The original catalog says prices and links were verified in April 2026. That is a historical source claim, not a verification performed for this lesson. The accompanying eighty-entry teaching register preserves each original description, feature, benefit, price, flag, workflow destination and note with its resource link. Its entry-specific interpretation explains what can and cannot be inferred. Current product availability and plan details remain to be verified before any actual selection.

Source: Pain Discovery Tool Catalog, tier definitions and companion Markdown

Pain-catalog tiers and proposed uses

Tier one supplies candidate pain statements and original discussion references for Pain Discovery. Tier two investigates where an audience gathers and what it asks, feeding avatar and Dream 100 hypotheses. Tier three organizes interviews and feedback into traceable themes. Tier four monitors changing mentions for iteration and diagnosis. Tier five describes larger-scale versions of listening, with a source price range of $500–$5,000-plus monthly; enterprise size alone does not create stronger evidence. Tier six mixes AI-generated analysis, human message feedback and behavioral tests, which must remain clearly distinguished. Tier seven supplies surveys and interaction observations that can inform, but not uniquely determine, a diagnosis.

Search and tier/budget filters reorganize static records. They do not verify the provider, parse every price into a comparable monthly cost or generate new market evidence. The original flags identify additions, free options and enterprise categories; “essential” or a recommendation order is an author judgment, not an acceptance requirement for the learner.

Source: Pain Catalog seven tiers, filters and data records

Inspect all three proposed pain-research stacks

The source's Validation Starter combines PainOnSocial at $19/month, SparkToro at $38/month, F5Bot free and Typeform free, under a $60–$100 monthly heading. The stated paid components sum to $57 before any unlisted costs, taxes or plan differences. The document variously says the stack supports every gate or gates 00½ through 06, and elsewhere recommends speaking to five real customers before signing up. These are different author guidelines, not proof that a subscription supplies market evidence.

Its Iterate & Compound stack adds Dovetail at $0–$29/month, Brand24 at $99–$199/month and Hotjar at $39-plus to an approximately $60 starter base, with a $200–$400 heading. The displayed amounts imply approximately $198–$327-plus under those assumptions. The Markdown suggests adding synthesis after ten-plus customers and a listening tool for ongoing signals. Customer count alone does not establish that a paid platform is needed.

The Scale & Defend heading says $500-plus per month, but its listed example includes a roughly $300 prior stack, $540-plus for Wynter and $1,000-plus for enterprise listening, already $1,840-plus before a custom-priced synthesis tool. Wynter's entry says per test, while the stack says per month. Do not combine these units without stating testing frequency. The source's broader enterprise recommendations are historical scenarios, not purchasing instructions.

Source: Pain Catalog three stack tables and Markdown usage notes

Preserve the Markdown variant and its inconsistencies

The merged Markdown says thirty-four tools at the top but enumerates forty-one. Its final table correctly totals 8+6+7+9+4+5+2=41. Dropping four enterprise entries and Productboard, as suggested to reach thirty-four, would leave thirty-six. Retain all forty-one; do not delete records to force the mistaken headline count.

The document says the merged edition retains an original twenty and adds candidates from three prior AI responses. It deduplicates multiple Brandwatch, Sprout Social, Sprinklr, Productboard and Talkwalker URLs as products. Its plus symbol marks additions and its star marks enterprise pricing. The source reverses an earlier enterprise exclusion to preserve broader coverage. Those are provenance notes, not directions to buy the added products.

It excludes GummySearch based on a claimed November 30, 2025 shutdown; DemandDrop and MarketScope because the author could not verify them; and certain X listening tools because of claimed API uncertainty. Preserve those reasons as historical claims without treating them as current verified service status. The plain-text candidate domains are references to excluded products, not recommendations. Both HTML and Markdown originals remain in the complete appendix so their wording and resource lists can be checked.

Source: merged Pain Discovery Markdown, exclusions, legend and count table

Acquisition catalog: distinguish the six-step journey from seven categories

The acquisition catalog targets professional-service gatekeepers such as attorneys, adjusters and claims managers. Its introduction claims these buyers do not use certain channels and decide credibility within thirty seconds; those broad claims are unsupported. Actual buyer behavior needs investigation even when the practitioner has deep expertise.

Its six-step journey is identify the decision-maker; establish appropriate directory or roster visibility; provide useful education or another relevant first contribution; examine possible interest; hold a specific, evidence-backed buying conversation; and build repeat relationships through delivery, approved cases and professional participation. Its seven tool categories are visitor identification, directories, LinkedIn, contact data, legal/case research, outreach/CRM and reputation. The prose says six channels while the data has seven, and some entries feed a seventh Reputation step absent from the six-step journey. Keep those numbering systems separate.

Visitor identification is a signal with uncertainty, not a verified willingness to buy. Giving useful material does not create an obligation. Membership or speaking does not guarantee future leads, despite the tier's prediction that all such activities produce them in 2027 onward. The catalog is a proposed professional-services workflow, not proof of inevitable results.

Source: Client Acquisition Catalog introduction, buyer journey and seven tier definitions

Acquisition Dream 100 template

The original template allocates twenty-five construction-defect attorneys, twenty-five insurance-defense attorneys, fifteen subrogation managers, fifteen mechanical-contractor general counsel, ten property-management firms and ten technical-committee chairs. It names Travelers, Liberty Mutual, Chubb, Hartford, AIG and Zurich as examples for subrogation research, and ASHRAE, NFPA and ASCE for committee leadership. These organizations are source examples, not confirmed buyers or contacts.

The template asks for one hundred named people in the relevant specialty and geography, weekly work and quarterly refresh. Identify an actual relevant person when a category names a firm. The illustrative named attorney, Sarah Chen at a specified Phoenix firm, is unverified and must not become a purported real lead or testimonial. Claims that subrogation is the largest source of forensic work or that contractors are frequently sued are unsupported here. Research fit and context without inventing case history.

Source: Client Acquisition Catalog Dream 100 template and illustrative identity

Inspect all three acquisition-stack budgets

The Foundation Stack lists SEAK $545/year, JurisPro $399/year, LinkedIn free, Leadinfo €69/month and NAFE approximately $300/year. The annual dollar items total $1,244, or about $103.67/month, plus €69/month. That cannot honestly be presented as a $60–$120 all-in monthly budget without accounting for the separate currency and other charges. No exchange rate or current price is assumed.

Active Acquisition adds a source estimate of $120 for the prior stack, Sales Navigator $99, Apollo $59, an outreach tool from $39 and a free CRM, under $300–$500/month. The listed dollar subtotal is $317-plus using its own prior-stack estimate, but inherits that estimate's omissions. The Multi-Practitioner Firm example starts with about $500/month, adds custom contact-data pricing, referral fees per case, a CRM at $25–$69 per seat and monitoring from $50/month. Variable fees and seat counts prevent an exact total. The source's three-practitioner threshold and claim that earnings justify the spend are not established for this business.

The catalog excludes Reddit mining, enterprise listening, most VOC tools and generic marketing copilots as poor fits for its intended job. These are scope choices, not proof that no professional buyer ever uses those channels. Its anonymous veteran quote and directory-versus-LinkedIn return claims remain unverified. Preserve the full tables and all resource links; choose any future tools from actual requirements and verified terms rather than source rhetoric.

Source: Client Acquisition Catalog budget tables, operator note and exclusions

MVO field practice — additional teaching for lesson 03.4

Additional practice for the toolkit's field labels, options and examples. Use it alongside the gate procedures and implementation limitations already taught in the main script. Source examples are illustrative unless their evidence is explicitly established.

Hungry Avatar: explain why the specific examples differ

The original contrasts “small business owners” with marketing managers at SaaS companies at $5M–$20M ARR who are responsible for pipeline. The useful difference is the combination of role, operating context and responsibility. The revenue band is an example from the source, not a requirement for your audience. In your own record, supply only characteristics you can establish. Then ask whether those characteristics change the person's problem, buying process or ability to use the offer. Extra detail that makes no difference is not automatically better targeting.

The pain field contrasts wanting more clients with losing three hours every Friday reconciling Stripe. The second example names a recurring task, time cost and context, making it possible to investigate what happened. It is still an illustrative sentence until a real person said it. Do not place quotation marks around your own reconstruction and call it customer language. An authored practice task is to write the actual source beside a real quote and separately state your interpretation of the problem.

Read the four ratings separately. Purchasing power concerns actual capacity and demonstrated relevant spending; the source's $1,000 rule does not measure either on its own. Market trajectory concerns evidence of growth or contraction over a specified period; the source's “dying” to “exploding” scale is subjective language. Reachability concerns a relevant channel through which the audience can appropriately be reached; finding an account is not consent to contact it. Pain intensity concerns the buyer's priorities in context; being a top-three problem does not prove that money is available. Record the evidence and uncertainty for each rating before adding them. A large total assembled from guesses remains a set of guesses.

Supporting archive — Hungry Avatar labels, examples and scale help

Idea: use the sentence and competition choices as testable statements

The source's sentence format combines the audience, desired result, timeframe and objection. In practice, each slot creates a question: who actually has this need, what result can be supported, what delivery period is realistic, and which objection has been observed? A short sentence can still make a false promise. Revise unsupported parts before testing the wording.

For a crowded market, identify actual alternatives and evidence that people buy them. For the source's “some competitors, mostly mediocre” option, define the observable limitation instead of disparaging competitors. A thin market can reflect a narrow segment, poor discovery, new demand or weak demand. A first-mover claim needs a careful search for indirect substitutes and non-consumption. The source assigns favorable or unfavorable verdicts to these choices; the choice alone cannot establish which explanation is true. Its phrases about proven demand, weak supply and first-mover failure are assertions to investigate, not results of an analysis performed by the widget.

The $100-today question distinguishes ten identifiable people, possible people who still need to be found, and buyers requiring substantial discovery. Naming people demonstrates proximity only. Record separately whether anyone expressed interest, agreed to a defined purchase or actually paid under clear terms. The source references a Profitable Widget Playbook as its lineage; that title does not supply an additional verified playbook in this archive. Do not claim the imagined first version has been presold.

Supporting archive — Idea/No Idea sentence, option subtitles and $100 example

Profitable Problem: distinguish a category, a task and its economics

The original uses productivity as a category and inability to reach inbox zero as a concrete problem. The concrete wording creates something to investigate, but inbox zero may not be the buyer's actual goal. Ask what consequence the unfinished task causes and what successful work would look like. Do not choose a metric simply because it is easy to count.

Daily or weekly recurrence, monthly recurrence, seasonal recurrence and one-time projects imply different delivery rhythms. The source associates these with continuity, subscription, annual/service and transactional offers respectively. Those are possible designs, not necessary conclusions. A daily problem can be solved once; a project can generate referrals or later work. Model the actual service and customer behavior before promising recurring revenue or treating every transaction as a wholly new acquisition.

For high cost, the source lists lost money, customers or status; for moderate cost, friction, frustration and time; for low cost, inconvenience. Put observable consequences beside the selected label. Status loss can be hard to measure, and an hour of friction can have very different consequences for different buyers. The statement that problem cost sets price captures a positioning idea, but omits alternatives, willingness to pay, delivery costs and constraints. It is not a complete pricing formula.

The alternatives field includes competitors, asking a CPA, searching Google and tolerating the problem. These represent paid substitutes, trusted advice, self-service and non-consumption. Identify what the buyer actually does, why they choose it, and what switching would require. An alternative's existence does not make it inferior to your proposed offer.

Supporting archive — Profitable Problem help and all recurrence/cost choices

Grand Slam Offer: interpret every example without turning it into a guarantee

The source's vivid outcome example combines ten clients in ninety days, working from home and $2,000 monthly retainers. It teaches that quantity, timeframe, delivery context and price communicate more than a vague freedom claim. None of those results is substantiated for the learner. Replace the example with an outcome your actual offer can support, and separate controllable deliverables from customer results that depend on other factors.

The strength scale asks whether a person would pay ten times more to avoid five years of pain. This is a thought experiment, not observed willingness to pay or a calculation of market value. Its endpoints—mild benefit and life-changing outcome—are subjective. Use real buyer evidence to explain the rating rather than treating a vivid imagined future as a strong score.

The likelihood field lists case studies, screenshots, testimonials, personal results and third-party validation. For each item, identify what it actually proves, its context and any limits on generalization. A screenshot can omit costs or time; a testimonial can describe one person's experience. A larger collection is not automatically stronger proof. The separate likelihood rating asks how a skeptical buyer might interpret the evidence; it does not independently verify the claim.

The time choices are within twenty-four hours, one week, thirty days or several months. The source proposes a day-one quick win or interim wins when the main result takes longer. Make those wins useful and accurately described, not activity presented as the promised outcome. The claims that speed dominates other factors or slower results necessarily create high refunds are unverified generalizations.

The effort choices attach source price bands to done-for-you ($5,000–$50,000-plus), done-with-you ($1,000–$5,000), supported DIY ($97–$997) and self-paced delivery ($7–$297). Preserve them as illustrative bands. They are not verified prices, required tiers or proof that self-paced delivery has the highest churn. Compare customer work, provider capacity, quality, support and economics. Removing a task can help one buyer while reducing desired control for another. A mechanism should explain how the promised work is accomplished; naming it does not establish effectiveness.

Supporting archive — Grand Slam Offer examples, scales, price bands and help · Acquisition.com primary conceptual reference — Pricing and Value Checklist

Mechanism and Offer Stack: explain the promise and the actual terms

The mechanism examples—The Retainer Method, The 90-Day Pulse and The 4-Lane Framework—illustrate memorable labels. The registered-mark and trademark symbols in the original are presentation examples, not evidence of registration or ownership. Explain the actual steps and why they address the buyer's problem. Renaming identical content does not establish the source's claimed increase from $97 to $4,997 in value.

The offer-name comparison contrasts a ninety-day retainer sprint with an unnamed coaching program. A clearer label may communicate topic, timeframe and format, but the claimed 30% conversion advantage is unsupported. The bonus format names a resource, its intended result and a standalone value. For each of the proposed three to five bonuses, identify the next real obstacle it addresses and whether the promised asset actually exists. Explain the basis for a price comparison; adding a dollar figure does not create market value.

Work through all guarantee choices. An anti-guarantee declares no refunds and a rationale; it does not become the strongest promise merely because it is bold. A conditional example promises twice the payment back after specified customer actions without the result. Such an example creates a potentially large obligation; the amount and conditions must be accurate and supportable. The unconditional example is a thirty-day refund without questions. The implied choice expresses confidence that the buyer will like the offer, but does not specify a remedy. No guarantee simply means no additional guarantee is stated; the source's prediction that conversion then collapses is unproven. Its attribution of a ranked guarantee ladder to Hormozi is not verified by the supplied file. These categories are a source comparison, not terms adopted by RISER.

The exact-wording field compares a general guarantee, a thirty-day refund and continued free work if three retainer clients are not obtained within sixty days. Clarify what the business can actually promise, how eligibility is established, and what remedy is offered. The most dramatic sentence is not automatically the most credible, affordable or suitable. Do not imply that any example overrides applicable customer rights.

The scarcity examples propose twelve founding members followed by a ninety-day closure; $497 for the first twenty-five buyers followed by $1,497; one bonus expiring Friday; or a Monday-to-Friday launch. Treat every number and date as an example. A real limit must correspond to the actual offer and remain truthful when reached. Fake urgency is misleading; the source's alternative claim that no scarcity is always wrong is also too strong. A buyer can make an informed decision without a manufactured deadline. The claim that one mechanism is Brunson's preference is unverified here.

The source compares a $497 price with a $5,991 stack anchor. Teach the difference between adding defensible standalone values and inventing an anchor to make the price look small. The suggested five-to-ten-times ratio and three-to-one minimum are author heuristics, not a valuation model. Inspect both customer value and delivery economics; a large displayed ratio does not establish either.

Supporting archive — named mechanism, Offer Stack help and all option examples

Core Four: distinguish channel work, volume and economic evidence

Warm outreach addresses people who already know the sender; cold outreach addresses people without that relationship. Content serves an audience through published material, while paid ads purchase distribution. These distinctions concern the relationship and method, not an automatic ranking of quality. The source calls warm outreach free and best for the first ten customers, cold outreach cheap, content compounding and ads fastest to scale. Each claim omits context: labor costs, fit, permissions, response, capacity and conversion still matter. No messages or advertising are activated by this exercise.

The proposed five-days-per-week, twelve-week focus is a practice schedule. It does not prove that one channel always outperforms four. Record the actual test question and what observations justify continuing, changing or adding a channel. Concentrated effort can help learning but can also repeatedly apply a poor assumption.

In the ten-customers, ninety-days, 1%-conversion example, define what the 1% measures. If it measures completed conversations converting to customers, one thousand conversations are required under the model; one thousand sent messages is not equivalent. The source alternates touches and conversations, so preserve that distinction. The roughly twelve-per-day figure assumes calendar days and upward rounding. A workday schedule needs a different denominator, and the model is an expectation rather than a guaranteed result.

The economics choices distinguish known CAC/LTV/payback, estimates and a pre-revenue state. Keep observed figures, projections and missing information separate. Pre-revenue does not literally mean that no feedback loop can exist, and knowing a ratio does not alone make advertising viable. The source's one-third-of-twelve-month-LTV threshold needs a consistent value definition and cash-flow context. Organic activity also consumes time and resources, so its economics are not irrelevant simply because no media invoice exists.

Supporting archive — Core Four option subtitles, volume example and economics choices

Dream 100: turn the named examples into a research method

The source contrasts “fitness influencers” with @HybridAthlete, ATG for Life YouTube, a Knees Over Toes Skool group and Ben Patrick Substack. These are illustrative source labels, not verified current accounts, URLs or recommended partners. The lesson is to identify a specific destination and verify its relevance, actual address and audience rather than fill the table with broad categories. The claim that the first twenty-five entries take two hours is a planning estimate, not a completion standard.

Working into a relationship means contributing useful, relevant work over time. Buying access means an appropriate sponsorship or paid placement under agreed terms. Partnering means a mutually useful collaboration with explicit contributions and expectations. The source's assertions that these are the only three routes, that combining approaches necessarily destroys a relationship, or that an invitation arrives within ninety days are unverified. Select a route from the actual context; no approach guarantees access.

The first-message field proposes a quote, a result or a resource as a useful contribution. Quote accurately, share only genuine results, and choose a relevant resource. A gift does not establish a debt or entitlement to a response. The instruction to send to the first ten is an original operating suggestion, not authorization to send messages from this task.

The weekly categories—twenty-plus, five-to-twenty, fewer than five and none—measure planned activity. Twenty appears in both of the first two labels. Predictions of being known by month three, achieving network density after six months or having the strategy stop working below five contacts are unsupported. The attributed hundred-per-week versus hundred-per-year maxim is not verified here. Track relevance and actual outcomes instead of equating contact count with relationship quality.

Supporting archive — Dream 100 specific examples, strategy help and volume claims

Hook, headline, body and CTA: preserve what each example teaches

The source's solo-accountant hourly-billing question identifies an audience and issue. Its “fired my agency yesterday” line illustrates an unexpected statement, but must not be used as personal history unless true. The 47% statistic is an illustrative number without evidence; replace it with a supported fact or a non-statistical hook. A three-second hook is a format suggestion, not a universal attention threshold.

The headline combines an outcome, timeframe and objection. Verify each element instead of adding numbers solely to make the promise look precise. The body sequence is problem, current approach, mechanism, proof and specific action. The source suggests fewer than one hundred words for ads and two hundred fifty for landing pages; those are local heuristics and conflict with longer page guidance elsewhere in the toolkit. Use enough accurate information for the actual placement rather than treating either length as universal.

Compare a named five-page pricing calculator, an action such as applying for a strategy call or downloading a playbook, and a generic learn-more label. The useful question is whether the reader understands the next step and receives what was promised. A calculator or ninety-day guide must actually exist before the CTA promises it. The claimed twofold conversion difference between generic and specific wording is unsupported; test actual behavior without importing that percentage as a forecast.

Supporting archive — copy examples, word limits and CTA alternatives · ClickFunnels primary framework reference — Hook, Story, Offer

Persuasion: examine beliefs and evidence without manufacturing agreement

The Big Domino field asks for one belief connecting the buyer's problem with the proposed mechanism. The original alternates breaking a belief with establishing one. State which belief you mean and what evidence could support or challenge it. Its claim that every other objection becomes irrelevant is not a guarantee; price, suitability and practical constraints can remain relevant even when the mechanism is credible.

The three example objections concern the vehicle (“retainers only work for big firms”), the person (“I am too new”) and the external context (“my market is price-sensitive”). Use these as three diagnostic categories, not proof that a buyer's objection is false. Find the actual reason, then answer it honestly. A real lack of capability or budget should not be rewritten as an irrational belief to overcome.

The reciprocity field contrasts a specific useful resource with a vaguely named newsletter or webinar and with no gift. A newsletter or webinar can be valuable when its actual content fits the need; a named asset can be useless. Giving something does not impose an obligation to buy. The source's one-third conversion claim and its assertions about reciprocity debt are not evidence of this audience's response.

For social proof, the source compares five-plus similar-customer testimonials, two-to-four partially similar ones and zero-to-one or generic praise. It separately claims three relevant testimonials outperform thirty generic ones and recommends obtaining three before launch, so its quantities are not one consistent pass threshold. Relevance, authenticity and context matter more than forcing a count. Do not create testimonials, names, photos or results to satisfy the rubric.

The authority example contrasts selling a $4-million agency with twelve years' experience. A relevant specific result may explain expertise, but either statement must be true and neither proves competence for every service. A named endorsement requires actual permission and accurate scope. The source's instruction to replace credentials with results is too broad; qualifications can be essential to some work.

Unity choices distinguish an explicit group identity, implicit audience fit and generic wording. The example of solo accountants who reject hourly billing expresses a preference, not evidence that everyone in the profession shares it. Use shared language only when authentic. The predicted 20% conversion lift from naming a group is unsupported. Consistency choices contrast opt-in, engagement and an eventual ask with a single direct ask. A download, quiz or call is not consent to a purchase or an obligation to continue. More steps are not automatically better; make each step clear and useful.

Supporting archive — Persuasion field examples and all five assessment categories

Deploy: choose an actual test plan rather than copying the source's numbers

The source requests a calendar date within thirty days, suggests Friday, and proposes accountability to another operator. These are planning suggestions. A signed or publicly announced date does not make the launch ready, and no announcement is made by this lesson. Check what can be delivered and what must work by that date.

The cohort choices are five-to-ten, ten-to-twenty-five, twenty-five-to-fifty and fifty-plus. Their boundaries overlap. Use actual capacity, expected support and quality requirements to choose a size; the source's claim of tenfold testimonial density from a smaller group is unsubstantiated. Testimonials also depend on real experiences and appropriate permission, not just group size.

The price field proposes $497–$997 founding and $1,497–$1,997 later for service/coaching, or $97–$297 founding and $297–$497 later for productized offers. It simultaneously warns against $500–$900, overlapping its own service range. Treat all these amounts as inconsistent source examples, not a price recommendation. A founding-price commitment must match the actual terms; no future increase is automatic.

The two decision-rule examples are fewer than five paid customers in fourteen days or fewer than three in twenty-one days; the third choice is continuing regardless. Defining a review criterion beforehand can reduce sunk-cost reasoning. Missing a target should trigger investigation of the test, measurement and assumptions, rather than prove that the offer angle is uniquely at fault. The counts are not universal validation thresholds.

The four required functions are lead capture, payment, delivery and measurement. The source distinguishes all four tested, three present, and fewer than three, and proposes completing gaps within a week. Verify the actual path and records rather than just counting software accounts. A tool list and an arbitrary seven-day deadline do not establish readiness, and the source's “everything else optional” statement is not a complete checklist for every business.

Supporting archive — Deploy dates, cohort boundaries, price examples and readiness criteria

Iterate: match the proposed change to what the observations can support

The source contrasts three conversations, thirty conversations and three hundred as noise, signal and lateness. Its actual choices use fewer than ten, ten-to-twenty, and twenty-to-thirty conversations or thirty-plus users. These are different observation types and overlapping quantities. A sample count alone cannot certify a pattern. A serious defect can warrant action immediately; a subtle conversion difference may require much more evidence. Do not postpone fixing a known problem solely to reach thirty.

The pattern field asks which objection recurs, which feature is ignored and which result customers value. Preserve the actual observations and exceptions. The source's claim that customers tell operators exactly what is wrong overlooks interpretation and competing causes. Select a proposed change whose expected effect can be examined.

The four lever choices suggest clarifying the outcome, improving credible proof, shortening time to a useful result, or reducing the work required. The examples include case studies and guarantees, interim wins, templates, guided work and done-for-you delivery. Each affects both customer experience and provider obligations. Changing one variable can make learning clearer, but the source's rule does not forbid correcting multiple known defects when necessary.

For awareness, the five source choices move from not recognizing a problem, to recognizing it without knowing solutions, to comparing solution types, to evaluating this product, to already knowing the offer. The proposed copy shifts from a relevant story/problem explanation through mechanism and evidence to a clear offer. Treat the stage as a hypothesis about an audience, not a diagnosis of every visitor. A most-aware buyer does not necessarily need scarcity or a newly named mechanism; the source contradicts itself on that point.

For sophistication, the source proposes a first claim, a stronger claim, a distinctive mechanism, a different mechanism, and identity/story after mechanism fatigue. Its dramatic weight-loss and metabolic-window examples are marketing illustrations without evidence, not health guidance or safe promises. Do not amplify a result or shorten its timeframe without support. The assertions about which stage dominates in 2026 and claims dying after one thousand repetitions are unverified. A new name cannot make an unsupported claim true.

Refund feedback choices are a structured five-question conversation, an informal conversation and no conversation. The questions concern the intended outcome, disappointing experience, perceived issue, possible improvement and referral willingness. Invite useful feedback without requiring participation or steering every response into the source's preset diagnosis. The proposal to look across ten refunds is a source planning count, not a statistical threshold. The attributed Hormozi quotation is unverified; the original rule's verdict does not determine a customer's refund eligibility.

Supporting archive — Iterate sample categories, four levers, awareness, sophistication and refund questions

Pivot or Hold: separate measured behavior from the proposed diagnosis

The first choice combines clicking and engagement even though those events use different denominators. Its source baselines are 1–2% for cold-ad CTR and 1–3% of followers for organic engagement. Define the numerator, denominator, placement and period before comparing a result. Selecting normal-or-above does not prove the hook is fine, just as a low result does not isolate the hook as the cause.

The next choice compares opt-ins or buying conversations, while the help also names purchase and booking rates. Its 20–40%, 1–3% and 5–15% ranges correspond to different outcomes and cannot be substituted for one another. Above, at or below a source benchmark is only a comparison with an unsupported general range. It does not prove that the audience is right or wrong. Examine page function, message continuity, measurement and actual buyer responses before selecting a change.

The final field asks about staying, referring or upselling, but its options instead use refunds and NPS. Those measures are not interchangeable. The source classifies under 5% refunds with positive NPS, 5–10% refunds, and over 10% refunds or negative NPS. It mentions the first thirty days in the help. Record the actual window and customer cohort; retain retention, referral and additional-purchase evidence separately. Low refunds can coexist with poor outcomes, and a negative score does not uniquely locate a delivery defect. Review the promise, onboarding, delivery and other evidence together. The original widget's branch ordering and unsupported scale verdict are explained in the main script.

Supporting archive — Pivot or Hold labels, baselines and outcome-category mismatches

Scale: make the price and retention examples mathematically explicit

The source's full-signal category combines ten-plus customers from one channel, known economics and six-plus months of retention data. Partial data and an early or unstable state are the other choices. These counts do not establish profitability, adequate cash or delivery capacity by themselves. Check the underlying records and the consequences of the proposed change. The source's instruction to keep iterating with incomplete data is a preference for evidence, not proof that every business needs precisely this history.

An authored arithmetic example clarifies the conditional price claim. At a price of $100 and unchanged unit cost of $80, contribution is $20. A 10% price increase to $110 raises contribution to $30, a 50% increase, if volume and costs stay unchanged. At a different starting margin or with lost sales, the result changes. This example explains when the source claim could be true; it is not a forecast or instruction to raise prices.

An authored simplified retention example clarifies the source's error. Under a constant-churn model, a $100 monthly contribution and 10% monthly churn imply $1,000 in modeled lifetime contribution. A 20% relative churn reduction changes 10% to 8%, giving $1,250—25% more, not 100% more. This simplified model omits discounting, changing cohorts and other real-world factors. Define relative percentage change versus percentage-point change before making a comparison.

The source ranks price, retention and volume, calling volume the most expensive and appropriate only after the others are maximized. That order is not universal. Examine which change addresses the actual constraint and what it costs. The bottleneck examples are lead generation, sales, delivery and retention. Naming one can focus investigation, but multiple interacting constraints may exist; a label alone does not prove a Theory of Constraints diagnosis.

Supporting archive — Scale signal, lever claims and bottleneck examples

Repeat: distinguish expansion options, ladder design and recurring revenue

The proposed twenty-customer question asks what someone would buy next. Preserve their exact answer and context, then distinguish expressed interest from a committed purchase. The source's promises of zero new acquisition cost, doubled LTV or fivefold LTV are unsubstantiated. Serving an existing customer can still require selling, delivery and support effort.

The four choices change different variables: a new offer for the same audience and channel; the same offer for an adjacent audience; a new channel for the same offer and audience; or an entirely new business. State what knowledge transfers and what must be tested again. A previously successful offer is not automatically validated in a new segment. Channel diversification can reduce some dependence while adding costs and complexity. The source's universal ranking does not replace this analysis.

The current-offer check contrasts a mature offer at an unspecified multi-million-dollar ARR with healthy retention, remaining room for development, and boredom. ARR is recurring revenue, not total sales or profit; the unspecified amount is not a real threshold. The claim that operators usually abandon an offer at 30% of its potential is unsupported. Boredom alone does not establish a sound expansion case, but remaining indefinitely in the current business is not automatically correct either. Document evidence, capacity and the reason for the next move.

The five ladder positions are a free named resource; a $7–$97 entry purchase; a $297–$1,997 core offer; a recurring offer with a stated monthly price; and a $5,000–$50,000-plus premium service. The source's “price of a coffee” analogy does not describe every price in its entry band. Each position needs a real customer purpose and a viable deliverable. A purchase can identify buying behavior, but does not prove that all buyers fundamentally behave alike or will buy the next offer. A free asset is not required for every viable business model.

The recurring examples are a Skool community, software subscription, monthly coaching and certification renewal. Each needs a continuing service or entitlement that justifies its actual terms. A recurring invoice alone does not create continuing customer value, valid certification or a moat. The attributed claim that continuity is the highest LTV-per-dollar move, the 60% missing-LTV claim and the 80% premium-profit claim are unverified. Preserve the price bands as examples rather than a required architecture.

The continuity-health options use sixty-plus percent, twenty-to-sixty percent, below twenty percent and no offer. Sixty belongs to two labels. Define the customer population and observation date; participation percentage is different from retention, profitability or satisfaction. A low share does not prove that a subscription is the business's highest-value opportunity.

Affiliate status distinguishes a formal program producing referrals, informal referrals and no program. Ten affiliates bringing five customers each is fifty customers arithmetically, but the source's zero-acquisition-cost conclusion excludes commissions and operating costs. Its 30% commission example requires viable economics and explicit terms; it is not activated here. The claim that half of customers would pay to bring others is unsupported. A referral program is one possible distribution arrangement, not an automatic requirement or proof of compounding growth.

Supporting archive — Repeat choices, ladder examples, continuity and affiliate claims

D0974 catalog teaching — working review

All product descriptions, prices, capabilities, comparisons and flags below are historical statements in the assigned archive, not current verified recommendations. The official links are preserved destinations, not proof that their contents have been checked. No purchase, installation, collection or outreach is performed. Read the specific interpretation after each entry; retain every original field in the appendix.

RISER-Tool-Catalog
PainOnSocial

Source description: AI Reddit scanner with 0–100 pain scoring across 30+ curated communities. Evidence quotes, AI-generated solution ideas, audience analysis. The reference tool for the widget.

Source feature inventory: 0–100 pain score per opportunity; Real Reddit quotes + permalinks; AI solution ideas with monetization; Curated 30+ subreddit catalog; Audience demographics analysis.

Source benefit claim: Compresses weeks of manual subreddit reading into a single scan with structured, verifiable output.

Source price statement, unverified: Starter $19/mo · Pro $49/mo

Source classification: tier 1; price class cheap; flags none.

Source workflow destinations: Gate 00½.

Additional original note: 7-day free trial on Starter. Pro adds 15 scans/day, 5 subreddits, 90-day timeframes.

How to interpret and apply this entry: Use the proposed card output to organize a pain hypothesis, then open the original quotation and compare its context with the assigned score. Solution and demographic suggestions are interpretations. A score of 87 is not an observed willingness to pay, and a single scan does not establish weeks of equivalent research quality.

Original catalog supporting this entry · Visit PainOnSocial using the original resource link

Reddily

Source description: Chrome extension + dashboard. Uses Google Gemini to extract sentiment, pain points, feature requests, and quotes from any Reddit thread. Pay-per-analysis pricing.

Source feature inventory: One-click thread analysis; Batch processing up to 25 threads; Sentiment + pain extraction; Feature-request detection; Chrome extension.

Source benefit claim: Best for ad-hoc research where you don't want a recurring subscription.

Source price statement, unverified: Pay-per-analysis · 5 free credits

Source classification: tier 1; price class cheap; flags none.

Source workflow destinations: Gate 00½.

Additional original note: Pay-per-analysis model means you only pay for what you scan.

How to interpret and apply this entry: The unit of analysis here is a chosen thread or batch. Choose threads for relevance, retain their URLs and compare extracted sentiment and feature requests with actual wording. Pay-per-analysis changes the budgeting unit, not the evidentiary quality or representativeness of the sample.

Original catalog supporting this entry · Visit Reddily using the original resource link

PainPointy

Source description: Surfaces pain points, content ideas, reply opportunities, and brand mentions from Reddit. Smaller indie tool with a similar shape to PainOnSocial.

Source feature inventory: 60-second subreddit scans; Daily agency reports; Reply opportunity detection; Content idea surfacing.

Source benefit claim: Lighter-weight alternative if PainOnSocial pricing or interface doesn't fit.

Source price statement, unverified: Pricing on site

Source classification: tier 1; price class cheap; flags none.

Source workflow destinations: Gate 00½, Gate 06.

How to interpret and apply this entry: Separate pain research, content ideas, mentions and possible reply opportunities: each supports a different decision. Check any suggested opportunity against the original discussion. A fast scan or daily report is a retrieval workflow, not permission to reply or proof of demand.

Original catalog supporting this entry · Visit PainPointy using the original resource link

BuzzAbout

Source description: Market research agent for Reddit and other social platforms. Broader source coverage than Reddit-only tools.

Source feature inventory: Multi-platform coverage; AI agent workflow; Market trend tracking.

Source benefit claim: Useful when your audience lives on more than just Reddit.

Source price statement, unverified: Pricing on site

Source classification: tier 1; price class cheap; flags none.

Source workflow destinations: Gate 00½, Gate 01.

How to interpret and apply this entry: Broader platform coverage can reveal different contexts, but combining sources can also mix unlike audiences. Keep each observation's platform, date and provenance before treating a cross-platform pattern as a shared customer need. The source supplies no measured comparison establishing superiority.

Original catalog supporting this entry · Visit BuzzAbout using the original resource link

Syften

Source description: Tracks keywords across Reddit, Hacker News, and 10+ platforms. Real-time alerts. Closest like-for-like replacement for the discontinued GummySearch monitoring workflow.

Source feature inventory: Reddit + HN + 10+ platforms; Boolean search support; Slack alerts; 20 filters on Standard.

Source benefit claim: The tool to use if you specifically miss GummySearch's alert-and-monitor workflow.

Source price statement, unverified: ~$39.95/mo Standard

Source classification: tier 1; price class cheap; flags none.

Source workflow destinations: Gate 00½, Gate 09.

How to interpret and apply this entry: Translate the research question into explicit keywords and Boolean conditions, then inspect both useful alerts and irrelevant matches. Monitoring detects mentions; it does not explain their cause. The claimed replacement for another discontinued service and platform coverage require current verification.

Original catalog supporting this entry · Visit Syften using the original resource link

Subreddit Signals

Source description: AI-scored Reddit lead detection with 7-dimension intent classification (PURCHASE_READY, switching intent, budget questions). Built more for high-intent buyers than for raw pain mining.

Source feature inventory: 7-dimension intent scoring; PURCHASE_READY classification; 15 weekly lead tokens (Starter); AI comment templates; Switching-intent detection.

Source benefit claim: Best when you want leads, not just pain points — already-qualified buyers actively searching.

Source price statement, unverified: Starter $19.99/mo

Source classification: tier 1; price class cheap; flags new.

Source workflow destinations: Gate 00½, Gate 05.

How to interpret and apply this entry: Intent labels such as PURCHASE_READY are model classifications, not verified buying commitments. Inspect the original post, timing and relevance before calling someone qualified. Token allowances and comment templates affect workflow; they do not establish consent to outreach.

Original catalog supporting this entry · Visit Subreddit Signals using the original resource link

Redreach

Source description: AI-powered Reddit conversation discovery and reply assist. Volume-oriented (unlimited monitoring, no token caps). Pair with intent scoring from another tool to filter noise.

Source feature inventory: Unlimited monitoring; No token caps; AI reply assist; Google-ranking post detection; Bulk DM workflow.

Source benefit claim: Volume play if you have time to filter manually and want broad coverage.

Source price statement, unverified: ~$29/mo unlimited

Source classification: tier 1; price class cheap; flags new.

Source workflow destinations: Gate 00½, Gate 05.

How to interpret and apply this entry: Separate broad discovery from qualification. The source itself proposes manual filtering or another intent scorer; unlimited monitoring can increase noise as well as coverage. A bulk-DM feature is not a recommendation to use it, and no message is sent from this lesson.

Original catalog supporting this entry · Visit Redreach using the original resource link

Apify Reddit Pain Finder

Source description: Scraper that classifies posts into pain types (pricing, missing features, workflow friction, integration needs, switching) and ranks by priority. Works without API keys via RSS, or with Reddit OAuth at scale.

Source feature inventory: Pain-type classification; Priority scoring; Promo-post filtering; Webhooks + n8n + Make + Zapier; No API key required.

Source benefit claim: The DIY/automation-friendly option. Ideal if you want to pipe Reddit pain data into your own workflow.

Source price statement, unverified: Pay-per-result

Source classification: tier 1; price class cheap; flags new.

Source workflow destinations: Gate 00½.

Additional original note: Built on Apify platform — supports scheduling, monitoring, integrations.

How to interpret and apply this entry: A structured pipeline can categorize pricing complaints, missing features, workflow friction, integrations and switching language. Validate each category against evidence before routing it downstream. RSS access, OAuth, scheduling and webhook claims need verification; an available integration does not authorize collection or automation.

Original catalog supporting this entry · Visit Apify Reddit Pain Finder using the original resource link

SparkToro

Source description: The audience research standard. Search by keyword, hashtag, or natural-language description; get the websites, podcasts, YouTube channels, subreddits, and social accounts your audience actually engages with.

Source feature inventory: Audience clickstream + Google + social; "Describe Your Audience" natural language; Email-list audience analysis; Podcast + YouTube + subreddit data; Compare Audiences feature.

Source benefit claim: Tells you exactly where the avatar gathers — feeds Gate 01 and Gate 05½ Dream 100.

Source price statement, unverified: Personal $38/mo · Business $112/mo · Free 5 searches/mo

Source classification: tier 2; price class cheap; flags none.

Source workflow destinations: Gate 01, Gate 05½.

How to interpret and apply this entry: Use audience-affinity results to propose where to investigate or distribute content, then verify that the actual audience and placement fit. Aggregate audience data is not a personal customer interview or a guarantee that a listed channel will convert. Compare segments before assuming they gather in the same places.

Original catalog supporting this entry · Visit SparkToro using the original resource link

AnswerThePublic

Source description: Visualizes the questions people ask in autocomplete data. The "wh-" outputs are raw avatar pain language, ready to drop into copy.

Source feature inventory: Google + Bing autocomplete data; Question wheel visualization; CSV export; New AI Dashboard.

Source benefit claim: Instant raw customer language. The questions are the pain in their own words.

Source price statement, unverified: Free 3 searches/day · Paid from ~$11/mo

Source classification: tier 2; price class cheap; flags free.

Source workflow destinations: Gate 01, Gate 06.

How to interpret and apply this entry: Autocomplete questions can inspire a research or content question, but are not necessarily verbatim statements from identified customers or evidence of purchase intent. Preserve the query and context. A question wheel or CSV export organizes leads for investigation rather than completing a pain audit.

Original catalog supporting this entry · Visit AnswerThePublic using the original resource link

AlsoAsked

Source description: Real-time "People Also Ask" data from Google in tree structure. Shows the next question your prospect is going to ask after the first one.

Source feature inventory: Real-time PAA scraping; Tree-structured question hierarchy; CSV export; Visual question mapping.

Source benefit claim: High-leverage for Gate 06½ false belief audit — Google has already clustered the next objection for you.

Source price statement, unverified: Free 3 searches/day · Paid $15–59/mo

Source classification: tier 2; price class cheap; flags free.

Source workflow destinations: Gate 06, Gate 06½.

How to interpret and apply this entry: A question tree can show related information needs. Map a relevant question to a proposed explanation, then check whether it is actually an objection for your audience. Search-engine question groupings are not validated psychological beliefs or an automatically complete objection sequence.

Original catalog supporting this entry · Visit AlsoAsked using the original resource link

BuzzSumo

Source description: Question Analyzer searches forum posts across Amazon, Reddit, Quora, Q&A sites. Content Analyzer shows what's actually getting shared.

Source feature inventory: Question Analyzer (Amazon, Reddit, Quora); Content trend tracking; Trending feeds 24h windows; Media database & journalist outreach; Slack integration.

Source benefit claim: Combines pain mining with content performance — what gets shared is what gets clicked.

Source price statement, unverified: From ~$199/mo

Source classification: tier 2; price class mid; flags none.

Source workflow destinations: Gate 01, Gate 06.

How to interpret and apply this entry: Distinguish question discovery from sharing performance. A frequently shared item is not necessarily highly clicked, commercially effective or representative of your buyers. Use each dataset for the decision it supports, preserving the source and observation window rather than combining them into one popularity claim.

Original catalog supporting this entry · Visit BuzzSumo using the original resource link

Exploding Topics

Source description: Categories with rising search trajectory before saturation. Feeds Gate 01's market trajectory scale directly.

Source feature inventory: Trend categorization; Long-term momentum scoring; Category browsing (food, fitness, fintech, etc.); Trend reports.

Source benefit claim: Validates Gate 01 market trajectory with hard search data before you commit.

Source price statement, unverified: Pro from ~$39/mo

Source classification: tier 2; price class cheap; flags none.

Source workflow destinations: Gate 01.

How to interpret and apply this entry: Use the proposed trajectory information to investigate a category, not to certify that an offer has growing demand. Search interest, category definitions and commercially addressable demand differ. Record the period and competing explanations before converting a trend into an avatar score.

Original catalog supporting this entry · Visit Exploding Topics using the original resource link

Glimpse

Source description: Trend discovery built on Google Trends with absolute search volume, 12-month forecasts, and TikTok/Reddit/Instagram channel breakdowns.

Source feature inventory: Absolute search volume (vs Google Trends 0–100 scale); 12-month forecast (95%+ backtested accuracy); TikTok/Reddit/Instagram channel data; Chrome extension; Real-time alerts.

Source benefit claim: Closest competitor to Exploding Topics with more granular keyword tracking and forecasting.

Source price statement, unverified: Free 10 searches/mo · Paid from $99/mo

Source classification: tier 2; price class mid; flags new.

Source workflow destinations: Gate 01, Gate 02.

How to interpret and apply this entry: Separate historical observations, modeled absolute volumes and forecasts. The catalog's 95%-plus backtested accuracy claim has no supplied evaluation definition or dataset. A forecast needs its horizon, uncertainty and validation method before it supports a business decision; platform breakdowns do not guarantee channel fit.

Original catalog supporting this entry · Visit Glimpse using the original resource link

Dovetail

Source description: Customer intelligence platform. Centralize calls, tickets, surveys, interviews, reviews; AI auto-classifies into themes. The repository standard.

Source feature inventory: Auto-import calls, tickets, surveys, interviews, reviews; AI theme classification; Searchable insight repository; Cross-project synthesis; Atomic UX research method.

Source benefit claim: The default choice for customer-research teams who want everything in one place.

Source price statement, unverified: Free plan · Paid from $29/mo per user

Source classification: tier 3; price class cheap; flags free.

Source workflow destinations: VOC Vault, Gate 08.

How to interpret and apply this entry: A repository is useful when themes can be traced back to calls, tickets, surveys or reviews. Inspect source permissions and compare automatically grouped themes with original statements. Centralization and cross-project synthesis do not eliminate sampling bias or make the tool a universal default.

Original catalog supporting this entry · Visit Dovetail using the original resource link

Insight7

Source description: Auto-ingests recordings from Zoom, Google Meet, Teams; extracts themes by semantic meaning; generates branded reports with embedded evidence. Stronger automation than Dovetail at high session volumes.

Source feature inventory: Auto-ingest Zoom/Meet/Teams; Semantic theme extraction (no manual tagging); Branded reports with frequency data; Cross-session synthesis; Dropbox + Drive integration.

Source benefit claim: Built for teams running 50+ interviews per month who need automation, not manual tagging.

Source price statement, unverified: Custom pricing

Source classification: tier 3; price class mid; flags new.

Source workflow destinations: VOC Vault, Gate 08.

How to interpret and apply this entry: For cross-session reports, verify each theme against the recordings and the counting method. Semantic grouping can merge different meanings, so retain exceptions and context. The source's fifty-interviews-per-month fit and superiority over another tool are positioning claims, not validated purchase thresholds.

Original catalog supporting this entry · Visit Insight7 using the original resource link

Conveo

Source description: AI-moderated video interviews with adaptive probing in 50+ languages. Built-in participant recruitment.

Source feature inventory: Async AI-moderated video interviews; 50+ languages with adaptive follow-ups; Built-in participant panel; Multimodal analysis (speech + tone + visual); Cross-study insight library.

Source benefit claim: Use when you need fresh interview data, not just analysis of existing conversations.

Source price statement, unverified: Custom enterprise pricing

Source classification: tier 3; price class enterprise; flags new.

Source workflow destinations: VOC Vault.

How to interpret and apply this entry: This entry proposes collecting new interviews rather than only analyzing existing ones. Review participant fit, question wording, consent and follow-up quality. Multimodal or multilingual output does not prove reliable interpretation of emotion or meaning, and the claimed language count must be checked before use.

Original catalog supporting this entry · Visit Conveo using the original resource link

User Interviews

Source description: Recruits participants from a panel of 6 million vetted consumers and professionals. Now part of UserTesting.

Source feature inventory: 6M+ vetted participants; Bring-your-own-audience option; Scheduling + incentive management; Demographic + behavioral targeting.

Source benefit claim: The fastest way to get interviews scheduled when you don't have your own audience yet.

Source price statement, unverified: Pay per recruit (~$25–100/participant)

Source classification: tier 3; price class mid; flags none.

Source workflow destinations: VOC Vault.

How to interpret and apply this entry: Recruitment helps obtain participants but does not ensure they represent the intended buyer. Define screening criteria, incentives and exclusions before interpreting interviews. Panel size, ownership and per-recruit pricing are historical catalog claims; a large panel does not itself establish sample quality.

Original catalog supporting this entry · Visit User Interviews using the original resource link

Productboard / Pulse

Source description: Customer feedback aggregator and pain-point analyzer for product teams. Pulse module surfaces VOC pain points specifically.

Source feature inventory: Centralized customer feedback; Feature prioritization; Pulse VOC module; Roadmap integration.

Source benefit claim: Best when feedback needs to feed into product decisions, not just live in a research repository.

Source price statement, unverified: Essentials from $19/maker/mo · Pulse enterprise

Source classification: tier 3; price class mid; flags new.

Source workflow destinations: VOC Vault, Gate 08.

How to interpret and apply this entry: Connect a feedback theme to a product decision with the underlying evidence visible. Prioritization involves tradeoffs beyond mention counts. Distinguish features in a base plan from the separate Pulse module before assuming one subscription supplies all listed functionality.

Original catalog supporting this entry · Visit Productboard / Pulse using the original resource link

Revuze

Source description: Ingests unstructured customer language (reviews, support tickets, surveys) and converts it to structured market intelligence. Strongest for product/e-com VOC at scale.

Source feature inventory: Unstructured-to-structured AI conversion; Multi-source ingestion; Sentiment + topic clustering; Trend forecasting.

Source benefit claim: Built for e-commerce or product orgs swimming in review data.

Source price statement, unverified: Custom enterprise pricing

Source classification: tier 3; price class enterprise; flags new.

Source workflow destinations: VOC Vault.

How to interpret and apply this entry: Use review and support-language aggregation to examine themes across sources, while keeping channel and product context. Structured output can hide ambiguity from the original wording. Trend forecasts and the claim of strongest e-commerce fit are not verified by the catalog alone.

Original catalog supporting this entry · Visit Revuze using the original resource link

SentiSum

Source description: Root-cause analysis on customer support complaints. Surfaces systemic problems worth solving.

Source feature inventory: Support-ticket auto-tagging; Root-cause clustering; Sentiment + intent detection; CRM integrations.

Source benefit claim: Use when you have live customer data and want to know what's actually breaking.

Source price statement, unverified: Custom pricing

Source classification: tier 3; price class mid; flags new.

Source workflow destinations: Gate 08, Gate 09.

How to interpret and apply this entry: Support-ticket clusters can identify recurring symptoms worth investigating. A label called root cause does not prove causation; compare the proposed explanation with actual cases and operational evidence. Preserve minority issues that may be serious even when their volume is low.

Original catalog supporting this entry · Visit SentiSum using the original resource link

F5Bot

Source description: Free email alerts for Reddit, Hacker News, Lobsters keywords. Zero cost, no analytics. The baseline tool.

Source feature inventory: Email alerts on keyword mentions; Reddit + Hacker News + Lobsters; No account complexity.

Source benefit claim: Free, dependable, gets out of the way. The first tool to install when you start.

Source price statement, unverified: Free

Source classification: tier 4; price class free; flags free.

Source workflow destinations: Gate 08, Gate 09.

How to interpret and apply this entry: A keyword alert is a pointer to a discussion, not an analysis of customer needs. Open the source, check context and record why it matters. The catalog's instruction to install this first is its preference, not a prerequisite for research; no installation or alert subscription is created here.

Original catalog supporting this entry · Visit F5Bot using the original resource link

Brand24

Source description: Cross-platform mention monitoring with sentiment analysis. Mid-tier pricing, broader than Reddit-only.

Source feature inventory: Cross-platform mention tracking; Sentiment analysis; Influencer detection; Reddit + web + social.

Source benefit claim: The mid-tier choice when F5Bot isn't enough but Brandwatch is overkill.

Source price statement, unverified: From $99/mo

Source classification: tier 4; price class mid; flags none.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: Separate mention coverage, sentiment labels and suggested influencers. Evaluate each against the actual audience and research question. More platforms do not automatically justify a larger subscription, and the catalog's mid-tier comparison is not a current independent product evaluation.

Original catalog supporting this entry · Visit Brand24 using the original resource link

Mention

Source description: Real-time alerts across web and social. Useful for tracking how customers describe competitors — the complaints become Gate 06 hooks.

Source feature inventory: Real-time alerts; Boolean search; Web + social coverage; Sentiment scoring.

Source benefit claim: Watch competitors get complained about in real time, then write a hook against the complaint.

Source price statement, unverified: From $41/mo Solo

Source classification: tier 4; price class mid; flags none.

Source workflow destinations: Gate 06, Gate 09.

How to interpret and apply this entry: A competitor complaint can suggest a question to investigate, but should not be lifted out of context into an unverified attack or advertising claim. Check dates, relevance and supporting facts. Boolean alerts improve retrieval only when the query actually matches the intended topic.

Original catalog supporting this entry · Visit Mention using the original resource link

Awario

Source description: Brand monitoring with Reddit coverage and Boolean search at accessible price.

Source feature inventory: Boolean search; Reddit + web + social; Lead detection; Sentiment analysis.

Source benefit claim: The most accessible price point in the listening category for a real product.

Source price statement, unverified: From $29/mo Starter

Source classification: tier 4; price class cheap; flags none.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: Lead detection and sentiment scoring need human interpretation of the underlying mention. Compare the actual coverage and limitations with the research need rather than accepting the lowest-price claim. The source does not establish that a detected mention is a qualified lead or an appropriate outreach recipient.

Original catalog supporting this entry · Visit Awario using the original resource link

Social Searcher

Source description: Real-time multi-platform social monitoring with sentiment analysis. Generous free tier — useful before committing to paid tools.

Source feature inventory: Multi-platform free search; Sentiment analysis; Real-time monitoring; Email alerts.

Source benefit claim: The cheapest paid plan in the catalog. Worth trying before paying for Brand24 or Mention.

Source price statement, unverified: Free tier · Paid from $4.50/mo

Source classification: tier 4; price class free; flags new, free.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: A low-cost or free search can be useful for a bounded research question, but limits, coverage and output quality matter more than a price label. The source's cheapest-plan claim is historical and unverified. Keep original mention links instead of relying only on an alert summary.

Original catalog supporting this entry · Visit Social Searcher using the original resource link

Hootsuite

Source description: Social media management suite with listening capabilities. Stronger for scheduling than for pain mining; included for completeness.

Source feature inventory: Multi-account scheduling; Insights add-on for listening; Sentiment analysis (paid tiers); Team collaboration.

Source benefit claim: Use only if you already need a scheduler. Don't buy this for pain mining alone.

Source price statement, unverified: Professional $99/mo · Insights ~$600–1200/mo

Source classification: tier 4; price class enterprise; flags new, enterprise.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: Distinguish scheduling, team collaboration and a separately priced listening add-on. A base subscription may not include the research functions described elsewhere in the entry. Assess an actual workflow requirement before combining tools; the catalog's recommendation is not a current purchasing analysis.

Original catalog supporting this entry · Visit Hootsuite using the original resource link

Agorapulse

Source description: Social media management with built-in listening and inbox unification. Mid-tier pricing.

Source feature inventory: Unified social inbox; Listening add-on; Approval workflows; CRM-light contact tracking.

Source benefit claim: Cleaner UX than Hootsuite, better for small teams that want one tool for everything.

Source price statement, unverified: From $79/mo Standard

Source classification: tier 4; price class mid; flags new.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: A unified inbox and approval workflow concern team operations, while listening concerns discovery. Clarify which function is needed and whether the relevant add-on is included. The claim of cleaner design than another product is subjective and does not prove better outcomes for a particular team.

Original catalog supporting this entry · Visit Agorapulse using the original resource link

BrandMentions

Source description: Real-time brand and competitor mention tracking across web and social with sentiment.

Source feature inventory: Web + social mention tracking; Competitor monitoring; Sentiment analysis; Influencer identification.

Source benefit claim: Solid mid-tier alternative to Brand24 with similar capabilities.

Source price statement, unverified: From $99/mo Growing Business

Source classification: tier 4; price class mid; flags new.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: Compare original mentions across web and social while retaining source context. A suggested influencer is a research lead, not proof of audience fit or a partnership. Similarity to another product does not establish equivalent coverage, price or permissions.

Original catalog supporting this entry · Visit BrandMentions using the original resource link

YouScan

Source description: Visual + text social listening with AI-powered image recognition. Distinct in that it analyzes images, not just text — useful when your category is visual.

Source feature inventory: Image recognition AI; Logo + product detection; Text + visual sentiment; Audience insights.

Source benefit claim: The only tool here that mines images. Essential if your category is visual (fashion, food, consumer goods).

Source price statement, unverified: Custom pricing

Source classification: tier 4; price class enterprise; flags new, enterprise.

Source workflow destinations: Gate 01, Gate 09.

How to interpret and apply this entry: Visual analysis may reveal a logo or product absent from text, but an image match does not prove sentiment or purchase intent. The claim that this is the only image-mining tool in the catalog conflicts with Talkwalker's image/video entry. Retain the contradiction and verify actual capabilities before selection.

Original catalog supporting this entry · Visit YouScan using the original resource link

Brandwatch

Source description: Consumer intelligence and social listening at enterprise scale. Strong sentiment, segment, and trend analysis across thousands of sources.

Source feature inventory: Consumer intelligence at scale; Cross-platform sentiment; Segmentation + audience profiling; Custom dashboards; Historical data depth.

Source benefit claim: Industry leader. Earn its keep at high scale where the depth pays back. Overkill below that.

Source price statement, unverified: Custom enterprise pricing (typically $1,000+/mo)

Source classification: tier 5; price class enterprise; flags enterprise.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: Historical depth and segmentation may matter for a specific research question, but enterprise scale does not automatically improve evidence quality. Define the required sources, date range and decision before interpreting a dashboard. Industry-leader status and cost recovery are unsupported catalog judgments.

Original catalog supporting this entry · Visit Brandwatch using the original resource link

Sprout Social

Source description: Social listening, analytics, and engagement platform.

Source feature inventory: Listening + engagement + publishing unified; CRM integrations; Reporting + analytics; Approval workflows.

Source benefit claim: When you need listening + management in one tool and have the budget.

Source price statement, unverified: From $199/seat/mo · Listening tier higher

Source classification: tier 5; price class enterprise; flags enterprise.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: Separate per-seat pricing from any additional listening tier and distinguish publishing operations from research. A combined platform can simplify some handoffs while adding cost or access complexity. Check the actual plan and integration scope rather than assuming every listed capability is included.

Original catalog supporting this entry · Visit Sprout Social using the original resource link

Sprinklr

Source description: Unified CXM platform with social sentiment and enterprise CX insights.

Source feature inventory: Unified CXM platform; Cross-channel sentiment; AI-powered insights; Customer service integration.

Source benefit claim: Only justifiable for large orgs running coordinated CX across many channels.

Source price statement, unverified: Custom enterprise pricing (typically $1,000+/mo)

Source classification: tier 5; price class enterprise; flags enterprise.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: A unified customer-experience system addresses coordination across functions, not just discovering pain language. Evaluate which teams, channels and evidence need to connect. The source's large-organization-only claim is a positioning judgment, not a verified eligibility rule or a reason to buy.

Original catalog supporting this entry · Visit Sprinklr using the original resource link

Talkwalker

Source description: Consumer intelligence platform with broad language and source coverage.

Source feature inventory: 187+ languages supported; Image + video recognition; Trend detection; Crisis monitoring.

Source benefit claim: Strongest in non-English markets. Enterprise pricing limits applicability.

Source price statement, unverified: Custom enterprise pricing

Source classification: tier 5; price class enterprise; flags enterprise.

Source workflow destinations: Gate 09.

How to interpret and apply this entry: Language count, recognition capability and crisis alerts need task-specific validation. An image or video match does not certify meaning, and multilingual sentiment can miss context. The strongest-non-English claim lacks comparison evidence. This entry also disproves the catalog's own claim that only YouScan handles images.

Original catalog supporting this entry · Visit Talkwalker using the original resource link

IdeaProof

Source description: AI startup validator with market analysis, competitor insights, and structured reports. ~120-second turnaround.

Source feature inventory: 120-second AI validation; Market analysis; Competitor insights; Investor-ready reports.

Source benefit claim: Fast first-pass sanity check on Gate 02 before committing time.

Source price statement, unverified: Free tier · Paid available

Source classification: tier 6; price class free; flags new, free.

Source workflow destinations: Gate 02.

How to interpret and apply this entry: A rapid AI report can organize questions and hypotheses, but cannot validate a market merely by generating an investor-style document. Inspect every market and competitor claim and identify missing primary evidence. The 120-second turnaround is a source claim, not a measure of research completeness.

Original catalog supporting this entry · Visit IdeaProof using the original resource link

DimeADozen

Source description: AI-generated 40+ page validation reports covering market viability, monetization, competitor analysis, MVP planning, and risk assessment.

Source feature inventory: 40+ page reports in <20s; Market viability + competitive analysis; MVP planning; Pivot suggestions; Risk assessment.

Source benefit claim: Replaces weeks of desk research with a structured first-draft report.

Source price statement, unverified: Free trial · Paid plans available

Source classification: tier 6; price class cheap; flags new.

Source workflow destinations: Gate 02.

How to interpret and apply this entry: Report length and generation speed do not establish equivalent quality to weeks of desk research. Separate sourced observations from generated monetization, MVP and pivot suggestions. Use the output to prioritize evidence collection rather than presenting it as verified viability or risk assessment.

Original catalog supporting this entry · Visit DimeADozen using the original resource link

ValidatorAI

Source description: AI advisor that scores ideas, simulates customer feedback, and suggests next steps. Used by 300,000+ founders.

Source feature inventory: Idea scoring + grading; Simulated customer feedback; Launch-readiness guidance; 24/7 AI mentor chatbot.

Source benefit claim: The "talk to an AI advisor" version of validation — useful for the question-answer interaction style.

Source price statement, unverified: Free + custom pricing

Source classification: tier 6; price class free; flags new, free.

Source workflow destinations: Gate 02.

How to interpret and apply this entry: Simulated customer feedback comes from a model, not actual customers. Use conversational critique to uncover assumptions, then test them against independent evidence. Idea grades and the claimed founder-user count do not establish predictive accuracy or readiness to launch.

Original catalog supporting this entry · Visit ValidatorAI using the original resource link

Wynter

Source description: On-demand B2B message testing. Get 12–48 hour feedback from verified ICPs (job-title and industry filtered). The closest tool to "test your Gate 06 copy with real buyers before launching."

Source feature inventory: Verified ICP audience (60K+ B2B professionals); Job-title + industry targeting; 12–48 hour turnaround; Message testing + brand research; Persona research.

Source benefit claim: Stops you from launching copy that's convincing only to yourself. Brutal but accurate.

Source price statement, unverified: From ~$540/test

Source classification: tier 6; price class mid; flags new.

Source workflow destinations: Gate 04, Gate 06, Gate 06½.

How to interpret and apply this entry: Message feedback from a recruited target group can test comprehension and relevance, but is not the same as observed purchasing behavior. Inspect participant screening, questions and sample context. The historical fee is per test, not automatically per month; turnaround, panel size and accuracy claims require verification.

Original catalog supporting this entry · Visit Wynter using the original resource link

Prelaunch

Source description: Measures actual market reaction (pre-orders, landing-page conversion) before product release. Real-money signal beats hypothetical interest.

Source feature inventory: Pre-order capture + measurement; Landing-page conversion testing; Concept validation surveys; Price-sensitivity testing.

Source benefit claim: The most rigorous Gate 02 / Gate 04 validation — buyer money on the line, not just stated intent.

Source price statement, unverified: Custom pricing

Source classification: tier 6; price class mid; flags new.

Source workflow destinations: Gate 02, Gate 04, Gate 07.

How to interpret and apply this entry: Distinguish survey interest, landing-page actions, reservations and paid orders. Money committed can provide a different signal from stated interest, but terms, refunds, traffic selection and fulfillment still affect interpretation. The source's most-rigorous ranking is not demonstrated, and no pre-order is collected here.

Original catalog supporting this entry · Visit Prelaunch using the original resource link

Typeform

Source description: Conversational surveys with high completion rates. Best for follow-up validation surveys to refund interviewees and Dream 100.

Source feature inventory: One-question-at-a-time format; Logic jumps + conditional flows; Integrations (Zapier, etc.); Free tier with 10 responses/mo.

Source benefit claim: Higher completion rates than form-style surveys. Worth the premium for that alone.

Source price statement, unverified: Free tier · Basic from $25/mo

Source classification: tier 7; price class free; flags free.

Source workflow destinations: Gate 03, Gate 05½, Gate 08.

How to interpret and apply this entry: Question wording, selection and branching affect what a survey can tell you. Test each logic path and record who was invited and who answered. A one-question format does not guarantee higher completion or unbiased findings; the claimed response allowance and price are historical source details.

Original catalog supporting this entry · Visit Typeform using the original resource link

Hotjar

Source description: Heatmaps, session recordings, on-page feedback polls. The diagnostic input for Gate 09's hook/audience/offer triage.

Source feature inventory: Heatmaps (clicks, scroll, attention); Session recordings; On-page feedback polls; Conversion-funnel analysis.

Source benefit claim: Tells you where users actually drop off — Gate 09 hook vs. audience vs. offer diagnostic.

Source price statement, unverified: Free tier · Plus from $39/mo

Source classification: tier 7; price class free; flags free.

Source workflow destinations: Gate 03, Gate 09.

How to interpret and apply this entry: A recording or heatmap can show interaction patterns, while a poll provides reported reasons; neither alone proves why someone left or which offer change will work. Check tracking configuration, privacy requirements and event definitions before collecting data. No tracker is installed by this lesson.

Original catalog supporting this entry · Visit Hotjar using the original resource link

RISER-Client-Acquisition-Catalog
Leadinfo

Source description: Cookieless visitor identification. Tells you which law firms and insurance carriers visit your site, what pages they read, and how long they stayed — without requiring a cookie banner.

Source feature inventory: IP-to-company matching against 220M+ companies; 35–40% identification rate (high end of industry); Cookieless tracking (GDPR-friendly); ISO 27001 certified; 70+ integrations (CRMs, Slack, etc.).

Source benefit claim: For a niche specialist, the buyers researching you are already on your site. This tool tells you who they are before they reach out — turning silent visits into actionable warm leads.

Source price statement, unverified: From €69/mo Starter · 14-day free trial

Source classification: tier 1; price class cheap; flags essential.

Source workflow destinations: Step 4 Capture Intent.

How to interpret and apply this entry: Company matching is not proof that a particular individual visited or wants to buy. Inspect the match basis, coverage and uncertainty before classifying intent. The source's identification rate, certification and no-cookie-banner claim are unverified; cookieless technology alone does not determine every privacy obligation. No tracking code is installed here.

Original catalog supporting this entry · Visit Leadinfo using the original resource link

Leadfeeder (Dealfront)

Source description: The original visitor-ID tool. Now part of Dealfront. Slightly higher friction than Leadinfo (cookies, lower match rate), but the free tier is genuinely useful for testing the channel before committing.

Source feature inventory: Free tier: 100 identified companies/mo, 7-day history; Google Analytics integration; CRM sync (HubSpot, Salesforce, Pipedrive); Slack alerts on company visits; Echobot prospecting database.

Source benefit claim: The free tier is the test. If it produces 5+ named law firms in your first month, you have signal — pay to upgrade. If not, save the money.

Source price statement, unverified: Free 100 leads/mo · Paid from €99/mo

Source classification: tier 1; price class cheap; flags essential, free.

Source workflow destinations: Step 4 Capture Intent.

How to interpret and apply this entry: Treat identified companies as hypotheses to qualify, not automatically warm leads. A threshold of five named firms is an author upgrade suggestion, not proof of return on investment. Verify current free-tier limits, history and integrations before relying on them; the comparison with Leadinfo is not independently established.

Original catalog supporting this entry · Visit Leadfeeder (Dealfront) using the original resource link

RB2B

Source description: Person-level visitor identification (not just company). For US traffic, identifies individuals visiting your site — name, LinkedIn, email — when matched to their database.

Source feature inventory: Person-level identification (US only); Real-time Slack notifications; LinkedIn profile match; Free 250 contacts/month forever; Direct CRM push.

Source benefit claim: When a partner at a defense firm visits your VRF Forensic Audit page at 10pm Tuesday, you find out about it Wednesday morning by name. That changes your follow-up entirely.

Source price statement, unverified: Free 250 contacts/mo · Paid from $99/mo

Source classification: tier 1; price class cheap; flags free, essential.

Source workflow destinations: Step 4 Capture Intent.

How to interpret and apply this entry: A person-level match can be wrong or incomplete and does not grant permission to contact someone. Preserve uncertainty and inspect the actual matching and data-use conditions. The named late-night visitor story is an illustrative scenario, not evidence that the product observed such a person in this project.

Original catalog supporting this entry · Visit RB2B using the original resource link

Warmly

Source description: Live visitor identification with intent signals + ICP filters. Reveals current website visitors in real-time so reps can engage via chat or video while they're still reading.

Source feature inventory: Real-time visitor reveal; First-party intent signals; ICP filtering + lead routing; Live video/chat engagement; CRM-integrated workflows.

Source benefit claim: For a small consulting practice, the free tier (500 visitors/mo) is often enough. Upgrade only when scale demands it.

Source price statement, unverified: Free 500 visitors · Micro from $499/mo

Source classification: tier 1; price class mid; flags free.

Source workflow destinations: Step 4 Capture Intent.

How to interpret and apply this entry: Separate detection, qualification, routing and live engagement. A visitor's presence alone does not establish readiness for a chat or sales conversation. The free-plan allowance and upgrade recommendation are historical claims; define the actual workflow need before evaluating a plan.

Original catalog supporting this entry · Visit Warmly using the original resource link

SEAK Expert Witness Directory

Source description: The #1 rated expert witness directory in the industry. Free for attorneys to search. 2,000+ listed experts. Used by both plaintiff and defense counsel for credentialed expert searches.

Source feature inventory: No middleman — attorneys contact you directly; Free attorney search; Money-back guarantee on listings; SEAK also offers expert witness training; Strong reputation among litigators.

Source benefit claim: Best single directory choice if you can only pick one. Highest credibility signal, attorneys actually search it.

Source price statement, unverified: $545/yr basic listing

Source classification: tier 2; price class cheap; flags essential.

Source workflow destinations: Step 2 Get Listed.

How to interpret and apply this entry: A directory listing makes a profile discoverable; it does not certify every claim in the profile or guarantee an engagement. Check current eligibility, listing terms and any guarantee directly. The source's number-one and best-single-directory judgments have no supplied comparison evidence.

Original catalog supporting this entry · Visit SEAK Expert Witness Directory using the original resource link

JurisPro Expert Witness Directory

Source description: Long-standing directory founded by attorneys in 1999. Searchable by specialty, location, experience. Also indexed in LexisNexis. Volume play — moderate-quality leads but high name-recognition impact.

Source feature inventory: Profiles include CV, photos, articles, audio/video; LexisNexis indexed (massive attorney reach); Multi-year discounts; Lower-cost than SEAK or ALM; 25+ year reputation.

Source benefit claim: Pair with SEAK for double coverage. The LexisNexis indexing means your name appears in the workflow attorneys are already using.

Source price statement, unverified: $399/yr (multi-year discounts)

Source classification: tier 2; price class cheap; flags essential.

Source workflow destinations: Step 2 Get Listed.

How to interpret and apply this entry: Use specialty and location relevance to evaluate whether a listing fits the service. The claimed LexisNexis distribution, history and audience quality require current verification. Adding a second directory increases possible exposure, but does not automatically double qualified opportunities.

Original catalog supporting this entry · Visit JurisPro Expert Witness Directory using the original resource link

Experts.com (ALM)

Source description: Broader-reach directory part of the ALM legal media network. Higher cost than JurisPro, frequently used by larger firms doing complex litigation searches.

Source feature inventory: ALM legal network distribution; 15,000+ experts indexed; Court reporter + investigator + litigation support listings; Strong with AmLaw 200 firms.

Source benefit claim: Higher cost but stronger value if your case complexity matches the firms searching here.

Source price statement, unverified: $500–$1,000+/yr depending on tier

Source classification: tier 2; price class cheap; flags none.

Source workflow destinations: Step 2 Get Listed.

How to interpret and apply this entry: Check the actual directory operator, distribution network and listing tier before relying on the catalog's ownership and reach claims. A large indexed population or association with large firms does not prove fit for a specific expert. Measure attributable, qualified inquiries rather than assuming complexity guarantees value.

Original catalog supporting this entry · Visit Experts.com (ALM) using the original resource link

ForensisGroup

Source description: Expert-matching service rather than directory. Attorneys submit case details; ForensisGroup matches with vetted experts. They take a markup (typically 30–40%) on retained engagements.

Source feature inventory: No upfront cost; Pre-vetted expert pool; Active case-matching (not passive listing); Speed-focused workflow.

Source benefit claim: Zero downside to apply. They send you cases; you pay only when retained. Useful as a passive lead channel alongside direct directories.

Source price statement, unverified: Free to apply · % of fees on engagement

Source classification: tier 2; price class free; flags free.

Source workflow destinations: Step 2 Get Listed.

How to interpret and apply this entry: Distinguish matching services from passive listings and inspect the engagement economics. No upfront fee does not mean zero downside: terms, margin, time, conflicts and qualification still matter. The stated 30–40% markup is a historical claim, not a verified current fee or recommendation to apply.

Original catalog supporting this entry · Visit ForensisGroup using the original resource link

The Expert Institute

Source description: Case-matched referral service rather than open directory. Has researchers who pair attorneys with experts for specific cases. Strong technology and concierge-level service.

Source feature inventory: Specialized researcher matchmaking; No upfront listing fee; Custom expert searches; Vetting + credential verification.

Source benefit claim: Particularly strong for complex technical cases where attorneys want curation over self-search.

Source price statement, unverified: Free to apply · Case-matched referral fees

Source classification: tier 2; price class free; flags free.

Source workflow destinations: Step 2 Get Listed.

How to interpret and apply this entry: A researcher-led match can help locate expertise, but the practitioner still needs to verify scope, qualifications, conflicts and terms. No listing fee is different from no engagement cost. The source's strength-for-complex-cases judgment is not established by an outcome comparison.

Original catalog supporting this entry · Visit The Expert Institute using the original resource link

HG Experts

Source description: Mid-tier directory with moderate traffic and lower price point. Useful as a third or fourth directory listing for SEO surface area and name-recognition compounding.

Source feature inventory: Specialty-categorized listings; Lower-cost listing tier; Geographic search support.

Source benefit claim: The "diminishing returns" directory — adds incremental visibility without major investment.

Source price statement, unverified: Listing fees vary

Source classification: tier 2; price class cheap; flags none.

Source workflow destinations: Step 2 Get Listed.

How to interpret and apply this entry: Evaluate incremental visibility against the actual audience and existing listings. A third or fourth listing is not inherently beneficial, and directory presence does not guarantee search rankings. The catalog supplies no traffic evidence supporting its moderate-traffic or diminishing-returns labels.

Original catalog supporting this entry · Visit HG Experts using the original resource link

TASA (Technical Advisory Service)

Source description: Long-running expert referral service (since 1956). Application-based admission. Active case-matching rather than passive directory.

Source feature inventory: 65+ year track record; Active case-matching workflow; Quality vetting; Technical specialty depth.

Source benefit claim: Old-school, attorney-trusted referral source. Worth applying for if your specialty fits their roster.

Source price statement, unverified: Application-based · Referral model

Source classification: tier 2; price class free; flags none.

Source workflow destinations: Step 2 Get Listed.

How to interpret and apply this entry: Application and vetting are separate from actual case assignment. Verify current requirements and referral terms rather than assuming longevity establishes fit. The source's recommendation to apply is not an action taken here or proof that the user's specialty would be admitted.

Original catalog supporting this entry · Visit TASA (Technical Advisory Service) using the original resource link

LinkedIn (Free)

Source description: According to forensic-marketing veterans, LinkedIn produces more high-quality referrals than most paid directories. Free. Requires consistent posting of redacted case studies and technical insights.

Source feature inventory: Direct attorney + adjuster reach; Case-study post format works exceptionally well; Free unlimited posting; Connection-based credibility; No platform fee.

Source benefit claim: One veteran of 25+ years: "The best cases come from LinkedIn. Free." If you publish one redacted case study per week and engage with attorneys in your specialty, this outproduces $5K of directory listings.

Source price statement, unverified: Free

Source classification: tier 3; price class free; flags essential, free.

Source workflow destinations: Step 3 Reciprocity, Step 5 Convert, Step 6 Compound.

How to interpret and apply this entry: Use actual expertise and appropriately redacted cases to make the service understandable. The anonymous veteran quotation and claim of outperforming $5,000 in listings are unverified anecdotes, not expected results. Publishing has labor cost even when there is no platform subscription fee.

Original catalog supporting this entry · Visit LinkedIn (Free) using the original resource link

LinkedIn Sales Navigator

Source description: The single highest-ROI tool for most professional-services solos. Search by job title (Claims Adjuster, Director of Claims, Subrogation Specialist), firm size, geography. Save searches, get alerts when new people fill those roles.

Source feature inventory: Advanced filters (title, firm, geography, function); Saved-search alerts (new hires in target roles); Lead lists with CRM sync; 50 InMails/month on Core, 150 on Advanced; Account intelligence updates.

Source benefit claim: Builds and works your Dream 100 with surgical precision. If you only buy one paid acquisition tool, this is it.

Source price statement, unverified: Core $99/mo · Advanced $159/mo

Source classification: tier 3; price class cheap; flags essential.

Source workflow destinations: Step 1 Identify, Step 5 Convert.

How to interpret and apply this entry: Filters and saved searches can help identify relevant roles, but a search match is not a qualified opportunity. Verify current plan limits, integration access and permitted use. The highest-ROI and buy-this-first statements are source opinions without an individual cost-benefit analysis.

Original catalog supporting this entry · Visit LinkedIn Sales Navigator using the original resource link

LinkedIn Recruiter Lite

Source description: Sometimes overlooked alternative to Sales Navigator. Stronger boolean search, better hidden-profile access. Useful if you're also occasionally hiring associate engineers for your practice.

Source feature inventory: Boolean + advanced search; 30 InMails/month; Profile insights beyond standard view; Talent pool analytics.

Source benefit claim: Worth it only if you have dual use (research AND hiring). For pure prospecting, Sales Nav is cheaper and better-suited.

Source price statement, unverified: $170/mo

Source classification: tier 3; price class mid; flags niche.

Source workflow destinations: Step 1 Identify.

How to interpret and apply this entry: Recruiting and sales prospecting are different purposes. Check the product's permitted use and actual search capabilities before treating it as a substitute for a sales tool. The hidden-profile and comparison claims are not verified, and no recruiting or contact activity is initiated.

Original catalog supporting this entry · Visit LinkedIn Recruiter Lite using the original resource link

Apollo.io

Source description: B2B contact database with 275M+ contacts. Build targeted lists of insurance adjusters, defense attorneys, claims managers by title + firm + geography. Email + phone + LinkedIn on each.

Source feature inventory: 275M+ contact database; Filter by title, firm, geography, employee count; Email + phone + LinkedIn URLs; Built-in email sequencer; Free tier with 50 mobile credits/mo.

Source benefit claim: The cheapest credible way to build a Dream 100 list with verified contact data. The free tier is enough to test the channel.

Source price statement, unverified: Free tier · Basic from $59/mo

Source classification: tier 4; price class cheap; flags essential, free.

Source workflow destinations: Step 1 Identify, Step 5 Convert.

How to interpret and apply this entry: Contact records can assist research, but database size and a verification label do not prove every address is current, appropriate to use or connected to a willing buyer. Inspect role relevance and provenance. A built-in sequencer is a capability claim, not authorization to send outreach.

Original catalog supporting this entry · Visit Apollo.io using the original resource link

ZoomInfo

Source description: The B2B contact-data gold standard. Largest verified database, deepest firmographic detail, intent data layer. Pricing makes it overkill for solo practice.

Source feature inventory: Deepest verified contact data; Firmographic + technographic filters; Intent data layer (who's researching what); CRM integrations; Org chart visibility.

Source benefit claim: For a multi-engineer firm with a sales function. Solos should use Apollo first.

Source price statement, unverified: Custom enterprise pricing (typically $15K+/yr)

Source classification: tier 4; price class enterprise; flags enterprise.

Source workflow destinations: Step 1 Identify.

How to interpret and apply this entry: Firmographic, technology and intent fields represent different kinds of data with different uncertainty. A topic signal does not prove a named person's purchase plan. The gold-standard, largest and deepest claims lack supplied comparative evidence; assess actual requirements before interpreting enterprise cost as quality.

Original catalog supporting this entry · Visit ZoomInfo using the original resource link

Cognism

Source description: European-strong B2B data with phone-verified contacts and GDPR-compliance focus. Better than ZoomInfo for European data, weaker for US-only.

Source feature inventory: Phone-verified mobile numbers; GDPR + CCPA compliance; Strong European coverage; Diamond-verified contact tier.

Source benefit claim: Use only if you have European case work or specific phone-outreach intensity.

Source price statement, unverified: Custom pricing (typically $1,000+/mo)

Source classification: tier 4; price class enterprise; flags enterprise.

Source workflow destinations: Step 1 Identify.

How to interpret and apply this entry: Phone verification and regional coverage do not by themselves establish permission for a specific use. The compliance labels and Europe-versus-US comparison require current primary review. Keep the source's tier and price claims distinct from a recommendation for this business.

Original catalog supporting this entry · Visit Cognism using the original resource link

Clay

Source description: Data-enrichment + workflow automation. Aggregates 75+ data providers. Power-user tool for building hyper-targeted Dream 100 workflows with AI-driven personalization.

Source feature inventory: 75+ data providers in one platform; AI-powered personalization at scale; Workflow automation; Spreadsheet-style interface; Steep learning curve.

Source benefit claim: Overkill for most solo practices. Worth it for firms running systematic high-volume outreach.

Source price statement, unverified: Free tier · Starter from $149/mo

Source classification: tier 4; price class mid; flags niche.

Source workflow destinations: Step 1 Identify, Step 5 Convert.

How to interpret and apply this entry: Combining providers can create conflicting or stale fields, so retain provenance and define how conflicts are resolved. Personalization based on an incorrect inference can make a message less accurate. Provider count and automation availability do not justify high-volume outreach or prove the workflow is appropriate.

Original catalog supporting this entry · Visit Clay using the original resource link

PACER

Source description: Federal court records, public access. Search filings by case type, attorney, firm, jurisdiction. Identify which firms handle the case types your specialty serves.

Source feature inventory: Public Access to Court Electronic Records; $0.10/page (capped at $3/document); No subscription required; Search by attorney, firm, case type; PACER Service Center direct access.

Source benefit claim: Tells you exactly which attorneys filed which kinds of cases in your jurisdiction. The Dream 100 research foundation. Free until $30/quarter usage.

Source price statement, unverified: $0.10/page · No subscription

Source classification: tier 5; price class free; flags essential, free.

Source workflow destinations: Step 1 Identify.

How to interpret and apply this entry: Use relevant public records to understand a matter's actual context, not to infer demand or make allegations from a filing alone. The source labels the entry free while also listing per-page charges and waiver/cap claims. Check the official fee schedule and scope before retrieving billable records; no record purchase is made here.

Original catalog supporting this entry · Visit PACER using the original resource link

Justia

Source description: Free legal research portal. Searchable case law, attorney directories, court dockets. Useful for identifying attorneys at specific firms handling specific case types.

Source feature inventory: Case law search; Attorney + firm directory; Free dockets and decisions; No registration required for most features.

Source benefit claim: Zero-cost first pass on identifying attorneys handling your case-type. Pair with LinkedIn to find them.

Source price statement, unverified: Free

Source classification: tier 5; price class free; flags free.

Source workflow destinations: Step 1 Identify.

How to interpret and apply this entry: A directory or published decision can identify a research lead, but coverage may be incomplete or outdated. Verify role, case context and current affiliation before drawing a business conclusion. Public availability does not establish that a person welcomes a solicitation.

Original catalog supporting this entry · Visit Justia using the original resource link

Westlaw

Source description: The professional legal research standard. Westlaw Profiler shows expert testimony history including who has cross-examined you, who has hired you, and outcomes.

Source feature inventory: Expert Witness Profiler; Case-law + statutory research; Litigation history search; Daubert challenge tracker; Brief Bank.

Source benefit claim: Worth subscribing once your testimony record is substantial. Lets you research opposing experts and identify firms with case-type fit.

Source price statement, unverified: Custom (typically $100–500+/mo)

Source classification: tier 5; price class mid; flags none.

Source workflow destinations: Step 1 Identify, Step 6 Compound.

How to interpret and apply this entry: Distinguish the base research service from any profiler or specialist feature, and verify access in the actual subscription. Litigation history needs context; a challenge or outcome does not alone establish competence or future results. The catalog's price range and subscription recommendation are not verified current terms.

Original catalog supporting this entry · Visit Westlaw using the original resource link

Casetext (CoCounsel)

Source description: AI-powered legal research now part of Thomson Reuters. CoCounsel handles complex queries about case law, expert challenges, and Daubert history.

Source feature inventory: AI-powered legal queries; Brief drafting assistance; Case law search; Daubert/Frye history search.

Source benefit claim: For practices that bill enough hours to justify research time. Solo experts can usually skip this for Justia + occasional Westlaw.

Source price statement, unverified: CoCounsel from $400/mo

Source classification: tier 5; price class mid; flags none.

Source workflow destinations: Step 6 Compound.

How to interpret and apply this entry: Treat generated legal research as a draft requiring verification against authoritative materials by an appropriate reviewer. Product names, ownership and subscription packaging may change. The source does not establish that every listed query capability is available through this link or that a particular practice should subscribe.

Original catalog supporting this entry · Visit Casetext (CoCounsel) using the original resource link

Lex Machina

Source description: Litigation analytics platform. Shows which firms litigate which case types, win rates, judge tendencies. Useful for premium-tier Dream 100 targeting.

Source feature inventory: Litigation outcome analytics; Firm-by-case-type analytics; Judge analytics; Patent + commercial + IP focus.

Source benefit claim: Niche tool. Worth it if you have specific litigation-analytics needs and the budget. Most experts can skip.

Source price statement, unverified: Custom enterprise pricing

Source classification: tier 5; price class enterprise; flags enterprise, niche.

Source workflow destinations: Step 1 Identify.

How to interpret and apply this entry: Outcome analytics depend on coverage, definitions and case mix. A firm's historical rate or a judge-level pattern is not a prediction for an individual matter. Define the research question and inspect the underlying records before using a ranking as a prospect-selection rule.

Original catalog supporting this entry · Visit Lex Machina using the original resource link

Docket Alarm

Source description: Court docket monitoring. Get alerts when new cases of your case-type are filed in your jurisdiction. Approach the firm before they've hired an expert.

Source feature inventory: New-case alerts by keyword + jurisdiction; Federal + state court coverage; API access; Cheaper than PACER for high-volume monitoring.

Source benefit claim: For specialists in narrow case types (e.g., balcony collapse, VRF litigation), this turns case filings into outreach signals.

Source price statement, unverified: From $99/mo

Source classification: tier 5; price class cheap; flags none.

Source workflow destinations: Step 1 Identify.

How to interpret and apply this entry: A new filing is a research signal, not proof that a firm lacks an expert or wants a solicitation. Verify jurisdiction coverage, alert criteria and the actual case context. The claimed cost advantage over PACER is workload-dependent and unverified; no monitoring or outreach is activated.

Original catalog supporting this entry · Visit Docket Alarm using the original resource link

HubSpot CRM (Free)

Source description: The free CRM that actually works for solo practices. Track every attorney contact, every case inquiry, every follow-up. Email integration, deal pipeline, no time limit.

Source feature inventory: Truly free (not a trial); Unlimited contacts; Email + Gmail integration; Deal pipeline visualization; Automatic activity logging.

Source benefit claim: You need a CRM. This one is free, capable, and pre-integrated with Apollo, LinkedIn Sales Nav, and visitor-ID tools. Start here.

Source price statement, unverified: Free forever

Source classification: tier 6; price class free; flags essential, free.

Source workflow destinations: Step 5 Convert, Step 6 Compound.

How to interpret and apply this entry: A CRM can preserve contacts, stages and follow-up history, but its usefulness depends on accurate records and consistent use. Free-forever, unlimited-contact and included-integration claims are historical and need current plan verification. This project remains in GHL; the source does not authorize a migration or duplicate CRM.

Original catalog supporting this entry · Visit HubSpot CRM (Free) using the original resource link

Pipedrive

Source description: Pipeline-focused CRM. More opinionated than HubSpot — pushes you toward closing deals through stages. Good fit for the case-driven sales cycle of forensic engineering.

Source feature inventory: Visual pipeline (drag-drop deal stages); Email tracking + templates; Activity reminders; Mobile app polish; Fewer features than HubSpot but cleaner UX.

Source benefit claim: Pick this over HubSpot if you prefer clean over feature-rich. Either is fine; pick one and use it.

Source price statement, unverified: Essential $25/seat/mo · Advanced $49/seat/mo

Source classification: tier 6; price class cheap; flags none.

Source workflow destinations: Step 5 Convert.

How to interpret and apply this entry: Define stages by observable buyer progress rather than moving cards to create the appearance of momentum. Reminders and templates support a process but do not close an engagement themselves. The interface comparison is subjective, and a catalog example is not a reason to replace the user's current system.

Original catalog supporting this entry · Visit Pipedrive using the original resource link

Folk CRM

Source description: Modern, relationship-focused CRM. Designed for people who think of contacts as relationships, not pipeline. Excellent LinkedIn + Gmail integration.

Source feature inventory: Magic Email enrichment; LinkedIn Chrome extension; Relationship intelligence; Smart fields + automation; Notion-style flexibility.

Source benefit claim: Best fit for an expert-witness practice where relationships compound across many cases over many years.

Source price statement, unverified: Standard $20/seat/mo · Premium $40/seat/mo

Source classification: tier 6; price class cheap; flags niche.

Source workflow destinations: Step 5 Convert, Step 6 Compound.

How to interpret and apply this entry: Relationship history can preserve context across engagements, but inferred relationship intelligence and enriched fields need checking. Separate factual notes from assumptions about a contact. Evaluate the current integration and access model before importing sensitive relationship data; no import occurs here.

Original catalog supporting this entry · Visit Folk CRM using the original resource link

Smartlead

Source description: Cold-email infrastructure. Multi-mailbox sending, deliverability optimization, AI personalization. The tool to use when sending Dream 100 outreach at meaningful volume.

Source feature inventory: Unlimited email accounts (no per-mailbox fees); Deliverability optimization (warm-up, throttling); AI subject + body personalization; Reply detection + auto-pause; Built-in sequence editor.

Source benefit claim: Cheaper than Lemlist or Instantly at scale. Better deliverability than HubSpot Sequences for cold outreach to attorneys.

Source price statement, unverified: Basic $39/mo · Pro $94/mo

Source classification: tier 6; price class cheap; flags none.

Source workflow destinations: Step 5 Convert.

How to interpret and apply this entry: Sending infrastructure, reply detection and sequencing do not guarantee inbox placement or appropriate outreach. Test actual stop conditions and respect recipient preferences before any real campaign. The comparative deliverability and price claims are unsupported here; no mailbox, domain or sequence is connected.

Original catalog supporting this entry · Visit Smartlead using the original resource link

Instantly

Source description: Cold-email outreach platform with strong deliverability and AI features. Direct competitor to Smartlead. Pick whichever you can get a discount on.

Source feature inventory: Unlimited email accounts on paid plans; Inbox warmup (Email Deliverability Network); CRM-lite functionality; Sequence builder + AI personalization; B2B lead database (paid add-on).

Source benefit claim: Functionally equivalent to Smartlead. Pick based on UX preference and current promo pricing.

Source price statement, unverified: Hyper-Growth $97/mo

Source classification: tier 6; price class cheap; flags none.

Source workflow destinations: Step 5 Convert.

How to interpret and apply this entry: Distinguish outreach-plan capabilities from a paid database add-on. A promotional price does not establish total cost, suitability or functional equivalence to another service. Warm-up and personalization features do not remove the need for accurate targeting and responsible sending; no campaign is launched.

Original catalog supporting this entry · Visit Instantly using the original resource link

Lemlist

Source description: Cold outreach with hyper-personalization (custom images, video, dynamic landing pages). Higher reply rates if you use the personalization features; otherwise overpriced.

Source feature inventory: Custom image + video personalization; Liquid syntax dynamic content; AI campaign generator; Built-in 450M lead database; Strong deliverability tools.

Source benefit claim: Worth premium only if you actually use the personalization. Otherwise Smartlead or Instantly is cheaper for the same outcome.

Source price statement, unverified: Email Outreach $59/mo · Sales Engagement $99/mo

Source classification: tier 6; price class cheap; flags none.

Source workflow destinations: Step 5 Convert.

How to interpret and apply this entry: Dynamic images or text are only useful when they communicate accurate, relevant context. Personalization based on false details can damage trust. The catalog supplies no controlled evidence of higher replies or equal outcomes at different prices. Database size and plan features remain historical claims.

Original catalog supporting this entry · Visit Lemlist using the original resource link

NAFE Membership

Source description: National Academy of Forensic Engineers. The professional society for forensic engineering. Member directory, journal publication opportunities, conferences attended by attorneys.

Source feature inventory: Peer-reviewed journal (J. NAFE); Member directory used by attorneys; Annual + regional conferences; Continuing education + certification; Strong credibility signal on CV.

Source benefit claim: For a forensic engineer, NAFE is not optional. It's a credentialing baseline. Attorneys searching for "credentialed forensic engineer" will look here.

Source price statement, unverified: ~$300–500/yr (membership tiers vary)

Source classification: tier 7; price class cheap; flags essential.

Source workflow destinations: Step 2 Get Listed, Step 7 Reputation.

How to interpret and apply this entry: Membership, certification, competence and eligibility to provide a service are different matters. The source's non-optional credentialing-baseline claim is not established by this catalog. Verify actual membership criteria and benefits directly; joining does not automatically confer every listed qualification or produce referrals.

Original catalog supporting this entry · Visit NAFE Membership using the original resource link

ASHRAE Membership

Source description: For HVAC/VRF/mechanical specialists. Technical committee work and standards development create unmatched authority signal. Conference speaking lands directly in front of buyers.

Source feature inventory: Technical committee membership; Standards-development authorship; Annual + winter conferences; Specialty certifications (BCxP, OPMP, etc.); Member directory.

Source benefit claim: For VRF litigation specifically, ASHRAE involvement is the single highest-trust signal a court will see. Worth the time investment.

Source price statement, unverified: Member $263/yr

Source classification: tier 7; price class cheap; flags niche.

Source workflow destinations: Step 7 Reputation.

How to interpret and apply this entry: Committee participation, standards authorship, membership and specialty certification each have their own requirements. Do not imply that paying dues supplies all of them. The claim of the highest court-trust signal is unsupported, and involvement does not guarantee expert qualification or case outcomes.

Original catalog supporting this entry · Visit ASHRAE Membership using the original resource link

NFPA Membership

Source description: National Fire Protection Association. Essential for fire-investigation specialists. NFPA 921 is the gold-standard methodology referenced in fire forensics testimony.

Source feature inventory: NFPA 921 access + interpretation; Standards committees; Conference + training programs; Specialty journals; CFEI / CFI certifications path.

Source benefit claim: For fire forensic engineering, NFPA is non-optional. Without NFPA 921 fluency, your testimony gets picked apart on cross.

Source price statement, unverified: Member ~$175/yr

Source classification: tier 7; price class cheap; flags niche.

Source workflow destinations: Step 7 Reputation.

How to interpret and apply this entry: Separate familiarity with a relevant standard from association membership and credentials issued by other bodies. The catalog's certification-path and mandatory-membership implications require independent verification. It provides no basis for assuring testimony outcomes or treating one membership as universal authorization to practice.

Original catalog supporting this entry · Visit NFPA Membership using the original resource link

ASCE Membership

Source description: American Society of Civil Engineers. Essential for structural / civil specialists. Forensic Engineering Division within ASCE is specifically attorney-facing.

Source feature inventory: Forensic Engineering Division; Technical journal publishing; Continuing education; Specialty certifications (PE-related); Standards documents.

Source benefit claim: For structural failure work, ASCE FED visibility is direct attorney-facing reputation building.

Source price statement, unverified: Member $310/yr

Source classification: tier 7; price class cheap; flags niche.

Source workflow destinations: Step 7 Reputation.

How to interpret and apply this entry: Professional participation and publishing can demonstrate relevant work when accurately described, but membership alone does not establish licensure or a specialty credential. Verify current division names, programs and eligibility rather than repeating the source's labels as current facts. No membership purchase is made.

Original catalog supporting this entry · Visit ASCE Membership using the original resource link

SparkToro

Source description: Audience research. Type "insurance defense attorney" and SparkToro tells you which podcasts they listen to, what publications they read, who they follow on LinkedIn. Your earned-media targeting list.

Source feature inventory: Audience clickstream analysis; Podcast / publication / social account discovery; Natural-language audience description; Podcast guest opportunities; Email newsletter analysis.

Source benefit claim: Tells you exactly where to publish, where to guest-podcast, and who to connect with on LinkedIn. The Dream 100 amplifier.

Source price statement, unverified: Personal $38/mo · Business $112/mo

Source classification: tier 7; price class cheap; flags none.

Source workflow destinations: Step 5 Convert, Step 7 Reputation.

How to interpret and apply this entry: Audience-affinity research can suggest publications, podcasts and accounts to investigate. It cannot tell you exactly where a particular person listens or guarantee a guest invitation. Confirm audience fit, editorial requirements and actual opportunities before turning aggregate data into a distribution plan.

Original catalog supporting this entry · Visit SparkToro using the original resource link

ALI CLE

Source description: American Law Institute Continuing Legal Education. Speak at one of their programs and you're directly in front of 100–500 practicing attorneys earning their CLE credits.

Source feature inventory: Direct audience: practicing attorneys; CLE-credit-eligible content; Recorded distribution beyond live talk; High-credibility signal; Often paid speaker honoraria.

Source benefit claim: A single ALI CLE talk on "Forensic Engineering for VRF Litigation" produces inbound case inquiries for years afterward.

Source price statement, unverified: Speaker — variable; Attendee from $300/course

Source classification: tier 7; price class mid; flags niche.

Source workflow destinations: Step 7 Reputation.

How to interpret and apply this entry: A speaking opportunity requires relevant expertise and acceptance into an actual program. Audience size, honoraria, recording distribution and eligibility vary by event. The promise that one talk generates inquiries for years is unverified; assess the educational contribution and actual event terms rather than projected leads.

Original catalog supporting this entry · Visit ALI CLE using the original resource link

State Bar CLE Programs

Source description: State and local bar associations run CLE programs constantly. They need expert speakers; they pay either honoraria or just visibility. Direct path to the local Dream 100.

Source feature inventory: Direct local-attorney audience; Often unpaid (visibility-based); Attendee list available post-event; CLE-credit eligibility; Recurring speaking opportunities.

Source benefit claim: Highest ROI per hour invested for local Dream 100 cultivation. Apply to every state bar in your geography.

Source price statement, unverified: Variable · Often free for speakers

Source classification: tier 7; price class free; flags free, niche.

Source workflow destinations: Step 7 Reputation.

How to interpret and apply this entry: The stored URL points to the American Bar Association, not a specific state-bar program. Preserve that distinction and locate the relevant organizer before applying. Attendee-list access and permission to use it are not guaranteed. The highest-ROI and apply-everywhere instructions are source opinions, not actions authorized here.

Original catalog supporting this entry · Visit State Bar CLE Programs using the original resource link

Wynter (Message Testing)

Source description: On-demand B2B message testing. Get 12–48 hour feedback from a panel including legal/insurance professionals. Test your service-page copy against actual buyers before launching.

Source feature inventory: Verified ICP panel (60K+ B2B professionals); Job-title + industry targeting; 12–48 hour turnaround; Service-page + email message testing; Persona research.

Source benefit claim: Most forensic engineers wouldn't think to test their service-page copy with actual attorneys. The ones who do convert better.

Source price statement, unverified: From ~$540/test

Source classification: tier 7; price class mid; flags niche.

Source workflow destinations: Step 3 Reciprocity.

How to interpret and apply this entry: For professional-service messaging, screen participants for the actual role and decision context. Feedback can reveal comprehension or relevance issues without proving conversion improvement. The claimed legal/insurance panel availability, turnaround and fee need verification; this duplicate vendor entry is retained for its distinct acquisition context.

Original catalog supporting this entry · Visit Wynter (Message Testing) using the original resource link

Expert Communications

Source description: Marketing consultancy specifically for expert witnesses. Resume + CV positioning, fee-setting strategy, deposition prep. Niche but proven for the practitioner who wants done-with-you positioning help.

Source feature inventory: Expert-specific marketing strategy; CV positioning + rewriting; Fee-schedule strategy; Deposition + testimony prep; Referral-network introductions.

Source benefit claim: Worth considering if you're past the technical excellence stage but stuck on positioning + fee-setting.

Source price statement, unverified: Coaching packages from $1,000+

Source classification: tier 7; price class mid; flags niche.

Source workflow destinations: Step 6 Compound.

How to interpret and apply this entry: Distinguish marketing positioning, fee strategy and testimony preparation, and verify which services a current engagement includes. The word proven is not accompanied by outcome evidence in the catalog. A consultancy example is not an endorsement, purchase instruction or substitute for relevant professional judgment.

Original catalog supporting this entry · Visit Expert Communications using the original resource link

Original toolkit setup references

These destinations support the source’s setup discussion. Opening a reference does not provision a service or require a purchase. The archived tools are not deployed by this lesson.

Complete original archive appendices

Original scripts are displayed as inert text. They are not executed. Download the original archive to retain its binary files and formatting.

Original asset: RISER-Client-Acquisition-Catalog.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RISER Client Acquisition Catalog · Professional Services</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=Inter+Tight:[email protected]&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
  --ink: #0a0a0a;
  --paper: #f7f4ee;
  --paper-warm: #f0eadf;
  --paper-deep: #e9e2d2;
  --rule: #1a1a1a;
  --red: #c9302a;
  --red-deep: #8b1f1c;
  --red-tint: #fbe8e6;
  --red-soft: #f9d8d5;
  --green: #1d6e3a;
  --green-tint: #dcefe2;
  --gold: #b8893a;
  --gold-tint: #f5ead0;
  --teal: #2c5f5a;
  --teal-tint: #d8e6e4;
  --muted: #5a564f;
  --serif: 'Fraunces', Georgia, serif;
  --sans: 'Inter Tight', -apple-system, sans-serif;
  --mono: 'JetBrains Mono', Menlo, monospace;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }

body {
  font-family: var(--sans);
  background: var(--paper);
  color: var(--ink);
  line-height: 1.55;
  font-size: 15px;
  min-height: 100vh;
}

/* ============ MASTHEAD ============ */
.masthead {
  border-bottom: 3px double var(--rule);
  padding: 36px 32px 28px;
  background: var(--paper);
}
.masthead-inner { max-width: 1280px; margin: 0 auto; }
.kicker {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 12px;
  display: flex;
  align-items: center;
  gap: 14px;
}
.kicker::after { content: ''; flex: 1; height: 1px; background: var(--rule); opacity: 0.3; }
.title {
  font-family: var(--serif);
  font-weight: 600;
  font-size: clamp(36px, 5vw, 58px);
  line-height: 1.0;
  letter-spacing: -0.025em;
  margin-bottom: 14px;
}
.title em { font-style: italic; font-weight: 400; color: var(--red-deep); }
.subtitle {
  font-family: var(--serif);
  font-style: italic;
  font-size: 18px;
  color: var(--muted);
  max-width: 820px;
  line-height: 1.45;
}
.colophon {
  margin-top: 22px;
  display: flex;
  flex-wrap: wrap;
  gap: 10px 22px;
  font-family: var(--mono);
  font-size: 11px;
  color: var(--muted);
  letter-spacing: 0.05em;
}
.colophon span::before { content: '·'; margin-right: 22px; color: var(--muted); opacity: 0.5; }
.colophon span:first-child::before { content: ''; margin: 0; }

/* ============ DOCTRINE ============ */
.doctrine {
  background: var(--paper-warm);
  border-bottom: 1px solid var(--rule);
  padding: 32px;
}
.doctrine-inner {
  max-width: 1280px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 36px;
}
@media (max-width: 800px) { .doctrine-inner { grid-template-columns: 1fr; } }
.doctrine-block h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--red-deep);
  margin-bottom: 10px;
  font-weight: 700;
}
.doctrine-block p {
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.55;
  margin-bottom: 10px;
}
.doctrine-block p strong { font-weight: 600; }
.doctrine-block .pull {
  font-family: var(--serif);
  font-style: italic;
  font-size: 18px;
  line-height: 1.45;
  border-left: 3px solid var(--red-deep);
  padding-left: 18px;
  margin: 14px 0;
  color: var(--ink);
}

/* ============ JOURNEY DIAGRAM ============ */
.journey {
  padding: 40px 32px;
  background: var(--paper);
  border-bottom: 1px solid var(--rule);
}
.journey-inner { max-width: 1280px; margin: 0 auto; }
.journey-title {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 6px;
}
.journey-h2 {
  font-family: var(--serif);
  font-size: 28px;
  font-weight: 600;
  letter-spacing: -0.02em;
  margin-bottom: 24px;
}
.journey-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 12px;
}
@media (max-width: 1000px) { .journey-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 600px) { .journey-grid { grid-template-columns: repeat(2, 1fr); } }
.journey-step {
  border: 1.5px solid var(--rule);
  background: var(--paper);
  padding: 14px 14px 16px;
  position: relative;
}
.journey-step::after {
  content: '→';
  position: absolute;
  right: -12px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 18px;
  color: var(--gold);
  background: var(--paper);
  width: 24px;
  text-align: center;
  z-index: 2;
  font-weight: 700;
}
.journey-step:last-child::after { display: none; }
.journey-step .num {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 700;
  color: var(--red-deep);
  letter-spacing: 0.08em;
  margin-bottom: 4px;
}
.journey-step .label {
  font-family: var(--serif);
  font-size: 16px;
  font-weight: 600;
  line-height: 1.2;
  margin-bottom: 6px;
  letter-spacing: -0.01em;
}
.journey-step .desc {
  font-size: 12px;
  color: var(--muted);
  line-height: 1.4;
}

/* ============ CONTROLS ============ */
.controls-bar {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--paper);
  border-bottom: 1px solid var(--rule);
  padding: 16px 32px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}
.controls-inner {
  max-width: 1280px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
}
.search-box { flex: 1; min-width: 240px; position: relative; }
.search-box input {
  width: 100%;
  padding: 10px 14px 10px 40px;
  font-family: var(--sans);
  font-size: 14px;
  border: 1.5px solid var(--rule);
  border-radius: 0;
  background: var(--paper);
  color: var(--ink);
  transition: border-color 0.15s, background 0.15s;
}
.search-box input:focus { outline: none; border-color: var(--red-deep); background: #fff; }
.search-box::before {
  content: '⌕';
  position: absolute;
  left: 14px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 16px;
  color: var(--muted);
  pointer-events: none;
}
.filter-group { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.filter-label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--muted);
  margin-right: 4px;
}
.filter-btn {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  padding: 7px 12px;
  border: 1.5px solid var(--rule);
  background: var(--paper);
  color: var(--ink);
  cursor: pointer;
  transition: all 0.12s;
  text-transform: uppercase;
  font-weight: 500;
}
.filter-btn:hover { background: var(--ink); color: var(--paper); }
.filter-btn.active { background: var(--red-deep); color: var(--paper); border-color: var(--red-deep); }
.filter-btn.active:hover { background: var(--red); }
.results-counter {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  color: var(--muted);
  margin-left: auto;
  text-transform: uppercase;
}
.results-counter strong { color: var(--ink); font-weight: 700; }

/* ============ MAIN ============ */
main { max-width: 1280px; margin: 0 auto; padding: 40px 32px 80px; }
.tier-section { margin-bottom: 64px; scroll-margin-top: 100px; }
.tier-section.hidden { display: none; }
.tier-header {
  display: flex;
  align-items: baseline;
  gap: 16px;
  margin-bottom: 10px;
  border-bottom: 2px solid var(--rule);
  padding-bottom: 14px;
}
.tier-num {
  font-family: var(--mono);
  font-size: 12px;
  font-weight: 700;
  color: var(--red-deep);
  letter-spacing: 0.1em;
}
.tier-name {
  font-family: var(--serif);
  font-size: 32px;
  font-weight: 600;
  letter-spacing: -0.02em;
  flex: 1;
}
.tier-count {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--muted);
  letter-spacing: 0.08em;
  white-space: nowrap;
}
.tier-purpose {
  font-family: var(--serif);
  font-style: italic;
  font-size: 16px;
  color: var(--muted);
  margin-bottom: 28px;
  max-width: 820px;
  line-height: 1.5;
}
.tier-purpose .gate-ref { font-style: normal; color: var(--red-deep); font-weight: 600; }
.tier-purpose strong { font-weight: 600; color: var(--ink); }

/* ============ TOOL CARDS ============ */
.tool-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(380px, 1fr)); gap: 20px; }
.tool-card {
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 22px 22px 18px;
  display: flex;
  flex-direction: column;
  position: relative;
  transition: transform 0.12s, box-shadow 0.12s, background 0.12s;
}
.tool-card:hover { transform: translateY(-2px); box-shadow: 4px 4px 0 var(--rule); background: var(--paper-warm); }
.tool-card.hidden { display: none; }
.tool-card.tier-enterprise { background: var(--paper-deep); }
.tool-card.tier-enterprise:hover { background: #ddd5c2; }

.tool-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 6px;
}
.tool-name {
  font-family: var(--serif);
  font-size: 22px;
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: -0.01em;
}
.tool-name a {
  color: var(--ink);
  text-decoration: none;
  border-bottom: 1px dotted var(--muted);
  transition: border-color 0.12s, color 0.12s;
}
.tool-name a:hover { color: var(--red-deep); border-color: var(--red-deep); }

.tool-flags { display: flex; gap: 4px; flex-shrink: 0; flex-wrap: wrap; justify-content: flex-end; }
.flag {
  font-family: var(--mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.1em;
  padding: 3px 6px;
  border: 1px solid currentColor;
  text-transform: uppercase;
  white-space: nowrap;
}
.flag-essential { color: var(--red-deep); background: var(--red-tint); }
.flag-enterprise { color: var(--gold); }
.flag-free { color: var(--green); background: var(--green-tint); border-color: var(--green); }
.flag-niche { color: var(--teal); background: var(--teal-tint); border-color: var(--teal); }

.tool-url {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--muted);
  margin-bottom: 12px;
  letter-spacing: 0.02em;
  word-break: break-all;
}

.tool-pricing {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  background: var(--paper-warm);
  border-left: 3px solid var(--gold);
  margin-bottom: 14px;
  font-family: var(--mono);
  font-size: 12px;
}
.tool-card.tier-enterprise .tool-pricing { background: var(--paper); border-left-color: var(--red-deep); }
.pricing-label {
  font-size: 10px;
  letter-spacing: 0.12em;
  color: var(--muted);
  text-transform: uppercase;
  flex-shrink: 0;
}
.pricing-value { color: var(--ink); font-weight: 600; }

.tool-description {
  font-family: var(--serif);
  font-size: 15px;
  line-height: 1.5;
  margin-bottom: 14px;
  color: var(--ink);
}

.tool-section { margin-bottom: 12px; font-size: 13px; line-height: 1.5; }
.tool-section h4 {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 4px;
}
.tool-section p { color: var(--ink); }
.tool-section ul { list-style: none; padding: 0; }
.tool-section li {
  padding-left: 14px;
  position: relative;
  margin-bottom: 3px;
  color: var(--ink);
}
.tool-section li::before {
  content: '→';
  position: absolute;
  left: 0;
  color: var(--gold);
  font-weight: 600;
}

.tool-footer {
  display: flex;
  gap: 8px;
  margin-top: auto;
  padding-top: 12px;
  border-top: 1px dashed var(--muted);
  flex-wrap: wrap;
}
.gate-tag {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  padding: 3px 8px;
  background: var(--red-tint);
  color: var(--red-deep);
  font-weight: 600;
}

/* ============ TOC ============ */
.toc {
  position: fixed;
  top: 50%;
  right: 24px;
  transform: translateY(-50%);
  z-index: 40;
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 14px 14px;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  max-width: 220px;
  box-shadow: 4px 4px 0 var(--rule);
}
.toc-label {
  font-weight: 700;
  color: var(--red-deep);
  margin-bottom: 8px;
  border-bottom: 1px solid var(--rule);
  padding-bottom: 6px;
}
.toc a {
  display: block;
  color: var(--ink);
  text-decoration: none;
  padding: 4px 0;
  transition: color 0.12s;
  line-height: 1.3;
}
.toc a:hover { color: var(--red-deep); }
.toc-num { color: var(--muted); margin-right: 6px; }
@media (max-width: 1180px) { .toc { display: none; } }

/* ============ STACK SECTION ============ */
.stacks {
  background: var(--paper-warm);
  padding: 56px 32px;
  border-top: 3px double var(--rule);
  border-bottom: 3px double var(--rule);
  margin: 64px -32px;
}
.stacks-inner { max-width: 1280px; margin: 0 auto; }
.stacks-title {
  font-family: var(--serif);
  font-size: 36px;
  font-weight: 600;
  margin-bottom: 8px;
  letter-spacing: -0.02em;
}
.stacks-sub {
  font-family: var(--serif);
  font-style: italic;
  color: var(--muted);
  margin-bottom: 36px;
  font-size: 16px;
}
.stack-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; }
.stack-card {
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 24px;
  display: flex;
  flex-direction: column;
}
.stack-card h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 4px;
}
.stack-card .stack-name {
  font-family: var(--serif);
  font-size: 26px;
  font-weight: 600;
  margin-bottom: 10px;
  letter-spacing: -0.015em;
  line-height: 1.1;
}
.stack-card .stack-cost {
  font-family: var(--mono);
  font-size: 12px;
  color: var(--gold);
  font-weight: 600;
  margin-bottom: 14px;
  letter-spacing: 0.04em;
}
.stack-card p {
  font-family: var(--serif);
  font-size: 15px;
  line-height: 1.5;
  margin-bottom: 14px;
  color: var(--ink);
}
.stack-card ul { list-style: none; padding: 0; margin-top: auto; }
.stack-card li {
  padding: 7px 0;
  border-bottom: 1px dotted var(--muted);
  font-size: 13px;
  color: var(--ink);
  display: flex;
  justify-content: space-between;
  gap: 10px;
}
.stack-card li:last-child { border-bottom: none; }
.stack-card .stack-item-name { font-weight: 500; }
.stack-card .stack-item-tier { font-family: var(--mono); font-size: 10px; color: var(--muted); letter-spacing: 0.06em; white-space: nowrap; }

/* ============ DREAM 100 SECTION ============ */
.dream100 {
  padding: 56px 32px;
  border-bottom: 3px double var(--rule);
}
.dream100-inner { max-width: 1280px; margin: 0 auto; }
.dream100-title {
  font-family: var(--serif);
  font-size: 36px;
  font-weight: 600;
  margin-bottom: 8px;
  letter-spacing: -0.02em;
}
.dream100-sub {
  font-family: var(--serif);
  font-style: italic;
  color: var(--muted);
  margin-bottom: 30px;
  font-size: 16px;
  max-width: 820px;
  line-height: 1.5;
}
.dream100-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 16px; }
.dream100-card {
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 18px 20px;
}
.dream100-card .seg-num {
  font-family: var(--mono);
  font-size: 28px;
  font-weight: 700;
  color: var(--red-deep);
  line-height: 1;
  margin-bottom: 4px;
  letter-spacing: -0.02em;
}
.dream100-card h4 {
  font-family: var(--serif);
  font-size: 17px;
  font-weight: 600;
  margin-bottom: 6px;
  line-height: 1.2;
  letter-spacing: -0.01em;
}
.dream100-card p {
  font-size: 13px;
  color: var(--muted);
  line-height: 1.45;
}
.dream100-total {
  margin-top: 24px;
  padding: 16px 20px;
  background: var(--paper-warm);
  border-left: 3px solid var(--red-deep);
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.5;
}
.dream100-total strong { font-weight: 600; }

/* ============ FOOTER ============ */
footer {
  border-top: 3px double var(--rule);
  padding: 40px 32px 60px;
  background: var(--paper);
}
.footer-inner { max-width: 1280px; margin: 0 auto; }
.footer-grid {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 40px;
  margin-bottom: 32px;
}
@media (max-width: 700px) { .footer-grid { grid-template-columns: 1fr; } }
.footer-grid h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  margin-bottom: 12px;
  font-weight: 700;
}
.footer-grid p {
  font-family: var(--serif);
  font-size: 15px;
  line-height: 1.55;
  color: var(--ink);
  margin-bottom: 12px;
}
.footer-rule {
  border-top: 1px solid var(--rule);
  padding-top: 20px;
  font-family: var(--mono);
  font-size: 11px;
  color: var(--muted);
  letter-spacing: 0.04em;
}
.footer-rule strong { color: var(--ink); font-weight: 700; }

.no-results {
  text-align: center;
  padding: 60px 20px;
  font-family: var(--serif);
  font-style: italic;
  font-size: 18px;
  color: var(--muted);
  display: none;
}
.no-results.visible { display: block; }

@keyframes fadeUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.tool-card { animation: fadeUp 0.3s ease-out backwards; }

</style>
</head>
<body>

<header class="masthead">
  <div class="masthead-inner">
    <div class="kicker">RISER Captain's Logic · Companion Catalog · For Professional Services</div>
    <h1 class="title">The Client Acquisition Stack <em>for</em> Expert Practitioners</h1>
    <p class="subtitle">Thirty-nine verified tools and channels for forensic engineers, expert witnesses, consulting practices, and other professional services where buyers are gatekeepers — not searchers — and the sales cycle is referral-driven, case-triggered, and credential-bound.</p>
    <div class="colophon">
      <span>v1 · April 2026</span>
      <span>39 tools across 7 channels</span>
      <span>All links verified live</span>
      <span>Sister artifact to the Pain Discovery Tool Catalog</span>
    </div>
  </div>
</header>

<section class="doctrine">
  <div class="doctrine-inner">
    <div class="doctrine-block">
      <h3>Why this stack is different</h3>
      <p>The previous Tool Catalog served operators validating product ideas. <strong>This catalog serves the inverse problem.</strong> You already know what you sell — 35 years of expertise, a credentialed specialty, a scarce skill. The question is no longer "is there demand," but "how do I reach the gatekeeper who controls case assignment before my competitor does."</p>
      <p>For forensic engineers, that gatekeeper is the insurance adjuster, the litigation partner, the subrogation manager. They don't search Reddit. They don't fill out lead forms. They search expert directories at 11pm before a deposition, ask their associate for "the guy we used last time," and judge you on credentials and credibility within thirty seconds.</p>
    </div>
    <div class="doctrine-block">
      <h3>What I'm betting on (and why)</h3>
      <p class="pull">"Most forensic work comes from attorney referrals and repeat relationships, not from cold outreach. But operators who systematically supplement referrals with directory presence, intent capture, and Dream 100 outreach grow faster than those who wait."</p>
      <p>This catalog is built around six channels in priority order: <strong>website-visitor identification, expert directories, LinkedIn outreach, B2B contact data, legal/case intelligence, and association-based reputation</strong>. Each tool is mapped to one of those six jobs. Reddit pain mining and broad social listening are deliberately excluded — they're the wrong instruments for this music.</p>
    </div>
  </div>
</section>

<section class="journey">
  <div class="journey-inner">
    <div class="journey-title">The Six-Step Buyer Journey</div>
    <h2 class="journey-h2">How attorneys and adjusters actually find experts</h2>
    <div class="journey-grid">
      <div class="journey-step"><div class="num">01</div><div class="label">Identify</div><div class="desc">The gatekeeper — adjuster, partner, claims manager — controls case assignment.</div></div>
      <div class="journey-step"><div class="num">02</div><div class="label">Get Listed</div><div class="desc">Expert directories, association rosters, and prior-case referral lists.</div></div>
      <div class="journey-step"><div class="num">03</div><div class="label">Trigger Reciprocity</div><div class="desc">Lead magnet, free case-merit screen, or targeted CLE talk.</div></div>
      <div class="journey-step"><div class="num">04</div><div class="label">Capture Intent</div><div class="desc">Identify which firms read your technical content but don't yet contact you.</div></div>
      <div class="journey-step"><div class="num">05</div><div class="label">Convert Warm</div><div class="desc">Dream 100 outreach with proof + specificity. Mention the case-type they handle.</div></div>
      <div class="journey-step"><div class="num">06</div><div class="label">Compound</div><div class="desc">Testimony performance + sanitized case studies + speaking → next three cases.</div></div>
    </div>
  </div>
</section>

<div class="controls-bar">
  <div class="controls-inner">
    <div class="search-box">
      <input type="text" id="searchInput" placeholder="Search tools by name, feature, or use case…" autocomplete="off">
    </div>
    <div class="filter-group">
      <span class="filter-label">Tier:</span>
      <button class="filter-btn active" data-filter="all" data-filter-type="tier">All</button>
      <button class="filter-btn" data-filter="1" data-filter-type="tier">1·VisitorID</button>
      <button class="filter-btn" data-filter="2" data-filter-type="tier">2·Directories</button>
      <button class="filter-btn" data-filter="3" data-filter-type="tier">3·LinkedIn</button>
      <button class="filter-btn" data-filter="4" data-filter-type="tier">4·ContactData</button>
      <button class="filter-btn" data-filter="5" data-filter-type="tier">5·LegalIntel</button>
      <button class="filter-btn" data-filter="6" data-filter-type="tier">6·Outreach</button>
      <button class="filter-btn" data-filter="7" data-filter-type="tier">7·Reputation</button>
    </div>
    <div class="filter-group">
      <span class="filter-label">Budget:</span>
      <button class="filter-btn active" data-filter="all" data-filter-type="budget">All</button>
      <button class="filter-btn" data-filter="free" data-filter-type="budget">Free</button>
      <button class="filter-btn" data-filter="cheap" data-filter-type="budget">&lt;$100/mo</button>
      <button class="filter-btn" data-filter="mid" data-filter-type="budget">$100–500</button>
      <button class="filter-btn" data-filter="enterprise" data-filter-type="budget">Enterprise</button>
    </div>
    <div class="results-counter"><strong id="resultCount">39</strong> shown</div>
  </div>
</div>

<nav class="toc">
  <div class="toc-label">Channels</div>
  <a href="#tier-1"><span class="toc-num">1·</span>Visitor ID</a>
  <a href="#tier-2"><span class="toc-num">2·</span>Expert Directories</a>
  <a href="#tier-3"><span class="toc-num">3·</span>LinkedIn</a>
  <a href="#tier-4"><span class="toc-num">4·</span>Contact Data</a>
  <a href="#tier-5"><span class="toc-num">5·</span>Legal Intel</a>
  <a href="#tier-6"><span class="toc-num">6·</span>Outreach + CRM</a>
  <a href="#tier-7"><span class="toc-num">7·</span>Reputation</a>
  <a href="#dream100" style="margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--rule); color: var(--red-deep);">Dream 100 Template</a>
  <a href="#stacks" style="color: var(--red-deep);">Recommended Stacks</a>
</nav>

<main id="catalog"></main>

<div class="no-results" id="noResults">
  No tools match those filters. Try widening your criteria or clearing the search.
</div>

<section class="dream100" id="dream100">
  <div class="dream100-inner">
    <h2 class="dream100-title">The Dream 100 — Templated</h2>
    <p class="dream100-sub">For a forensic engineer or expert practitioner, the Dream 100 isn't influencers or podcasters. It's the <strong>specific humans who control case assignment</strong> in your geography and specialty. Build this list in a spreadsheet. Work it weekly. Refresh it quarterly. This is your business.</p>
    <div class="dream100-grid">
      <div class="dream100-card">
        <div class="seg-num">25</div>
        <h4>Construction defect attorneys</h4>
        <p>Plaintiff and defense counsel at firms with case history matching your specialty. Searchable via Westlaw, PACER, and state bar directories.</p>
      </div>
      <div class="dream100-card">
        <div class="seg-num">25</div>
        <h4>Insurance defense attorneys</h4>
        <p>At carriers writing commercial property and liability policies. Direct case-source channel for failure analysis work.</p>
      </div>
      <div class="dream100-card">
        <div class="seg-num">15</div>
        <h4>Subrogation managers</h4>
        <p>At Travelers, Liberty Mutual, Chubb, Hartford, AIG, Zurich. Subrogation drives more forensic engineering than any other single function.</p>
      </div>
      <div class="dream100-card">
        <div class="seg-num">15</div>
        <h4>Mechanical contractor GCs</h4>
        <p>General counsel at large mechanical contractors. They get sued frequently; they need credentialed experts on retainer.</p>
      </div>
      <div class="dream100-card">
        <div class="seg-num">10</div>
        <h4>Property management firms</h4>
        <p>Multi-site portfolio managers, especially with VRF/HVAC complexity. Risk-averse, value pre-emptive expert relationships.</p>
      </div>
      <div class="dream100-card">
        <div class="seg-num">10</div>
        <h4>Technical committee chairs</h4>
        <p>ASHRAE, NFPA, ASCE committee leadership. Visibility here = referrals through technical credibility, not marketing.</p>
      </div>
    </div>
    <div class="dream100-total">
      <strong>100 named humans, in your geography, in your specialty.</strong> Not "construction defect lawyers" generically. <em>Sarah Chen, partner at Snell & Wilmer, Phoenix, handles balcony / VRF subrogation cases.</em> That level of specificity. The list is the asset. Working the list is the business.
    </div>
  </div>
</section>

<section class="stacks" id="stacks">
  <div class="stacks-inner">
    <h2 class="stacks-title">Recommended Stacks</h2>
    <p class="stacks-sub">Three operator-tested combinations, ranked by where you are in the practice.</p>
    <div class="stack-grid">
      <div class="stack-card">
        <h3>Stage One</h3>
        <div class="stack-name">Foundation Stack</div>
        <div class="stack-cost">~$60–120/month</div>
        <p>The minimum credible presence. Get listed, get visible, capture the intent that's already coming to your site. Skip everything else for the first 90 days.</p>
        <ul>
          <li><span class="stack-item-name">SEAK directory listing</span><span class="stack-item-tier">$545/yr</span></li>
          <li><span class="stack-item-name">JurisPro directory</span><span class="stack-item-tier">$399/yr</span></li>
          <li><span class="stack-item-name">LinkedIn (free)</span><span class="stack-item-tier">$0</span></li>
          <li><span class="stack-item-name">Leadinfo Starter</span><span class="stack-item-tier">€69/mo</span></li>
          <li><span class="stack-item-name">NAFE membership</span><span class="stack-item-tier">~$300/yr</span></li>
        </ul>
      </div>
      <div class="stack-card">
        <h3>Stage Two</h3>
        <div class="stack-name">Active Acquisition</div>
        <div class="stack-cost">~$300–500/month</div>
        <p>Once Stage One is producing inbound, layer outbound. LinkedIn Sales Nav + Apollo for targeting. Email outreach for the Dream 100. Now you're systematically working a list.</p>
        <ul>
          <li><span class="stack-item-name">Stage One stack</span><span class="stack-item-tier">~$120/mo</span></li>
          <li><span class="stack-item-name">LinkedIn Sales Navigator</span><span class="stack-item-tier">$99/mo</span></li>
          <li><span class="stack-item-name">Apollo Basic</span><span class="stack-item-tier">$59/mo</span></li>
          <li><span class="stack-item-name">Smartlead or Instantly</span><span class="stack-item-tier">$39+/mo</span></li>
          <li><span class="stack-item-name">HubSpot CRM Free</span><span class="stack-item-tier">$0</span></li>
        </ul>
      </div>
      <div class="stack-card">
        <h3>Stage Three</h3>
        <div class="stack-name">Multi-Practitioner Firm</div>
        <div class="stack-cost">$1,000+/month</div>
        <p>For a forensic firm with 3+ engineers. Premium directories, real CRM, intent data, paid CLE distribution. Earnings justify the spend; spend earns its keep.</p>
        <ul>
          <li><span class="stack-item-name">Stage Two stack</span><span class="stack-item-tier">~$500/mo</span></li>
          <li><span class="stack-item-name">ZoomInfo or Cognism</span><span class="stack-item-tier">Custom</span></li>
          <li><span class="stack-item-name">Expert Institute referral</span><span class="stack-item-tier">% per case</span></li>
          <li><span class="stack-item-name">Pipedrive or Folk CRM</span><span class="stack-item-tier">$25–69/seat</span></li>
          <li><span class="stack-item-name">PACER monitoring service</span><span class="stack-item-tier">$50+/mo</span></li>
        </ul>
      </div>
    </div>
  </div>
</section>

<footer>
  <div class="footer-inner">
    <div class="footer-grid">
      <div>
        <h3>Operator's note</h3>
        <p>The most successful forensic engineers and expert witnesses get the bulk of their work through <strong>relationships and reputation</strong>, not tooling. Tools amplify a working practice; they don't substitute for one. If you don't have at least one prior case to reference and one current attorney who'd vouch for you, fix that before you buy any of this.</p>
        <p>One veteran of 25+ years in expert witness consulting put it bluntly: "The best cases come from LinkedIn. Free." Treat the tools below as accelerants for relationships you're already building, not replacements for the slow work of becoming the expert someone calls at 11pm.</p>
      </div>
      <div>
        <h3>What I excluded</h3>
        <p><strong>Reddit pain-mining tools</strong> — your buyers don't post case opportunities on Reddit.<br><strong>Enterprise social listening</strong> — wrong audience, wrong cost.<br><strong>Most VOC tools</strong> — wrong job; you're acquiring clients, not validating offers.<br><strong>Generic "AI marketing copilots"</strong> — produce text, not pipeline.</p>
      </div>
    </div>
    <div class="footer-rule">
      <strong>RISER Captain's Logic</strong> · Client Acquisition Catalog v1 · April 2026 · Sister artifact to the Pain Discovery Tool Catalog and MVO Decision Engine. All vendor names, pricing, and links verified at time of publication. Re-verify before purchase — pricing and availability change.
    </div>
  </div>
</footer>

<script>
// ============================================================================
// TOOL DATA — 40 verified tools for professional services client acquisition
// ============================================================================
const TOOLS = [
  // ============ TIER 1 — WEBSITE VISITOR IDENTIFICATION ============
  {
    id: 'leadinfo',
    name: 'Leadinfo',
    url: 'https://www.leadinfo.com/',
    urlDisplay: 'leadinfo.com',
    tier: 1,
    pricing: 'From €69/mo Starter · 14-day free trial',
    pricingTier: 'cheap',
    flags: ['essential'],
    blurb: 'Cookieless visitor identification. Tells you which law firms and insurance carriers visit your site, what pages they read, and how long they stayed — without requiring a cookie banner.',
    features: ['IP-to-company matching against 220M+ companies', '35–40% identification rate (high end of industry)', 'Cookieless tracking (GDPR-friendly)', 'ISO 27001 certified', '70+ integrations (CRMs, Slack, etc.)'],
    benefit: 'For a niche specialist, the buyers researching you are already on your site. This tool tells you who they are before they reach out — turning silent visits into actionable warm leads.',
    feeds: ['Step 4 Capture Intent']
  },
  {
    id: 'leadfeeder',
    name: 'Leadfeeder (Dealfront)',
    url: 'https://www.leadfeeder.com/',
    urlDisplay: 'leadfeeder.com',
    tier: 1,
    pricing: 'Free 100 leads/mo · Paid from €99/mo',
    pricingTier: 'cheap',
    flags: ['essential', 'free'],
    blurb: 'The original visitor-ID tool. Now part of Dealfront. Slightly higher friction than Leadinfo (cookies, lower match rate), but the free tier is genuinely useful for testing the channel before committing.',
    features: ['Free tier: 100 identified companies/mo, 7-day history', 'Google Analytics integration', 'CRM sync (HubSpot, Salesforce, Pipedrive)', 'Slack alerts on company visits', 'Echobot prospecting database'],
    benefit: 'The free tier is the test. If it produces 5+ named law firms in your first month, you have signal — pay to upgrade. If not, save the money.',
    feeds: ['Step 4 Capture Intent']
  },
  {
    id: 'rb2b',
    name: 'RB2B',
    url: 'https://www.rb2b.com/',
    urlDisplay: 'rb2b.com',
    tier: 1,
    pricing: 'Free 250 contacts/mo · Paid from $99/mo',
    pricingTier: 'cheap',
    flags: ['free', 'essential'],
    blurb: 'Person-level visitor identification (not just company). For US traffic, identifies individuals visiting your site — name, LinkedIn, email — when matched to their database.',
    features: ['Person-level identification (US only)', 'Real-time Slack notifications', 'LinkedIn profile match', 'Free 250 contacts/month forever', 'Direct CRM push'],
    benefit: 'When a partner at a defense firm visits your VRF Forensic Audit page at 10pm Tuesday, you find out about it Wednesday morning by name. That changes your follow-up entirely.',
    feeds: ['Step 4 Capture Intent']
  },
  {
    id: 'warmly',
    name: 'Warmly',
    url: 'https://www.warmly.ai/',
    urlDisplay: 'warmly.ai',
    tier: 1,
    pricing: 'Free 500 visitors · Micro from $499/mo',
    pricingTier: 'mid',
    flags: ['free'],
    blurb: 'Live visitor identification with intent signals + ICP filters. Reveals current website visitors in real-time so reps can engage via chat or video while they\'re still reading.',
    features: ['Real-time visitor reveal', 'First-party intent signals', 'ICP filtering + lead routing', 'Live video/chat engagement', 'CRM-integrated workflows'],
    benefit: 'For a small consulting practice, the free tier (500 visitors/mo) is often enough. Upgrade only when scale demands it.',
    feeds: ['Step 4 Capture Intent']
  },

  // ============ TIER 2 — EXPERT DIRECTORIES ============
  {
    id: 'seak',
    name: 'SEAK Expert Witness Directory',
    url: 'https://www.seakexperts.com/',
    urlDisplay: 'seakexperts.com',
    tier: 2,
    pricing: '$545/yr basic listing',
    pricingTier: 'cheap',
    flags: ['essential'],
    blurb: 'The #1 rated expert witness directory in the industry. Free for attorneys to search. 2,000+ listed experts. Used by both plaintiff and defense counsel for credentialed expert searches.',
    features: ['No middleman — attorneys contact you directly', 'Free attorney search', 'Money-back guarantee on listings', 'SEAK also offers expert witness training', 'Strong reputation among litigators'],
    benefit: 'Best single directory choice if you can only pick one. Highest credibility signal, attorneys actually search it.',
    feeds: ['Step 2 Get Listed']
  },
  {
    id: 'jurispro',
    name: 'JurisPro Expert Witness Directory',
    url: 'https://www.jurispro.com/',
    urlDisplay: 'jurispro.com',
    tier: 2,
    pricing: '$399/yr (multi-year discounts)',
    pricingTier: 'cheap',
    flags: ['essential'],
    blurb: 'Long-standing directory founded by attorneys in 1999. Searchable by specialty, location, experience. Also indexed in LexisNexis. Volume play — moderate-quality leads but high name-recognition impact.',
    features: ['Profiles include CV, photos, articles, audio/video', 'LexisNexis indexed (massive attorney reach)', 'Multi-year discounts', 'Lower-cost than SEAK or ALM', '25+ year reputation'],
    benefit: 'Pair with SEAK for double coverage. The LexisNexis indexing means your name appears in the workflow attorneys are already using.',
    feeds: ['Step 2 Get Listed']
  },
  {
    id: 'experts-com',
    name: 'Experts.com (ALM)',
    url: 'https://www.experts.com/',
    urlDisplay: 'experts.com',
    tier: 2,
    pricing: '$500–$1,000+/yr depending on tier',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Broader-reach directory part of the ALM legal media network. Higher cost than JurisPro, frequently used by larger firms doing complex litigation searches.',
    features: ['ALM legal network distribution', '15,000+ experts indexed', 'Court reporter + investigator + litigation support listings', 'Strong with AmLaw 200 firms'],
    benefit: 'Higher cost but stronger value if your case complexity matches the firms searching here.',
    feeds: ['Step 2 Get Listed']
  },
  {
    id: 'forensisgroup',
    name: 'ForensisGroup',
    url: 'https://www.forensisgroup.com/',
    urlDisplay: 'forensisgroup.com',
    tier: 2,
    pricing: 'Free to apply · % of fees on engagement',
    pricingTier: 'free',
    flags: ['free'],
    blurb: 'Expert-matching service rather than directory. Attorneys submit case details; ForensisGroup matches with vetted experts. They take a markup (typically 30–40%) on retained engagements.',
    features: ['No upfront cost', 'Pre-vetted expert pool', 'Active case-matching (not passive listing)', 'Speed-focused workflow'],
    benefit: 'Zero downside to apply. They send you cases; you pay only when retained. Useful as a passive lead channel alongside direct directories.',
    feeds: ['Step 2 Get Listed']
  },
  {
    id: 'expert-institute',
    name: 'The Expert Institute',
    url: 'https://www.expertinstitute.com/',
    urlDisplay: 'expertinstitute.com',
    tier: 2,
    pricing: 'Free to apply · Case-matched referral fees',
    pricingTier: 'free',
    flags: ['free'],
    blurb: 'Case-matched referral service rather than open directory. Has researchers who pair attorneys with experts for specific cases. Strong technology and concierge-level service.',
    features: ['Specialized researcher matchmaking', 'No upfront listing fee', 'Custom expert searches', 'Vetting + credential verification'],
    benefit: 'Particularly strong for complex technical cases where attorneys want curation over self-search.',
    feeds: ['Step 2 Get Listed']
  },
  {
    id: 'hgexperts',
    name: 'HG Experts',
    url: 'https://www.hgexperts.com/',
    urlDisplay: 'hgexperts.com',
    tier: 2,
    pricing: 'Listing fees vary',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Mid-tier directory with moderate traffic and lower price point. Useful as a third or fourth directory listing for SEO surface area and name-recognition compounding.',
    features: ['Specialty-categorized listings', 'Lower-cost listing tier', 'Geographic search support'],
    benefit: 'The "diminishing returns" directory — adds incremental visibility without major investment.',
    feeds: ['Step 2 Get Listed']
  },
  {
    id: 'tasa',
    name: 'TASA (Technical Advisory Service)',
    url: 'https://www.tasanet.com/',
    urlDisplay: 'tasanet.com',
    tier: 2,
    pricing: 'Application-based · Referral model',
    pricingTier: 'free',
    flags: [],
    blurb: 'Long-running expert referral service (since 1956). Application-based admission. Active case-matching rather than passive directory.',
    features: ['65+ year track record', 'Active case-matching workflow', 'Quality vetting', 'Technical specialty depth'],
    benefit: 'Old-school, attorney-trusted referral source. Worth applying for if your specialty fits their roster.',
    feeds: ['Step 2 Get Listed']
  },

  // ============ TIER 3 — LINKEDIN (THE FREE CHANNEL) ============
  {
    id: 'linkedin-free',
    name: 'LinkedIn (Free)',
    url: 'https://www.linkedin.com/',
    urlDisplay: 'linkedin.com',
    tier: 3,
    pricing: 'Free',
    pricingTier: 'free',
    flags: ['essential', 'free'],
    blurb: 'According to forensic-marketing veterans, LinkedIn produces more high-quality referrals than most paid directories. Free. Requires consistent posting of redacted case studies and technical insights.',
    features: ['Direct attorney + adjuster reach', 'Case-study post format works exceptionally well', 'Free unlimited posting', 'Connection-based credibility', 'No platform fee'],
    benefit: 'One veteran of 25+ years: "The best cases come from LinkedIn. Free." If you publish one redacted case study per week and engage with attorneys in your specialty, this outproduces $5K of directory listings.',
    feeds: ['Step 3 Reciprocity', 'Step 5 Convert', 'Step 6 Compound']
  },
  {
    id: 'linkedin-sales-nav',
    name: 'LinkedIn Sales Navigator',
    url: 'https://business.linkedin.com/sales-solutions/sales-navigator',
    urlDisplay: 'linkedin.com/sales-solutions',
    tier: 3,
    pricing: 'Core $99/mo · Advanced $159/mo',
    pricingTier: 'cheap',
    flags: ['essential'],
    blurb: 'The single highest-ROI tool for most professional-services solos. Search by job title (Claims Adjuster, Director of Claims, Subrogation Specialist), firm size, geography. Save searches, get alerts when new people fill those roles.',
    features: ['Advanced filters (title, firm, geography, function)', 'Saved-search alerts (new hires in target roles)', 'Lead lists with CRM sync', '50 InMails/month on Core, 150 on Advanced', 'Account intelligence updates'],
    benefit: 'Builds and works your Dream 100 with surgical precision. If you only buy one paid acquisition tool, this is it.',
    feeds: ['Step 1 Identify', 'Step 5 Convert']
  },
  {
    id: 'linkedin-recruiter-lite',
    name: 'LinkedIn Recruiter Lite',
    url: 'https://business.linkedin.com/talent-solutions/recruiter-lite',
    urlDisplay: 'linkedin.com/talent-solutions',
    tier: 3,
    pricing: '$170/mo',
    pricingTier: 'mid',
    flags: ['niche'],
    blurb: 'Sometimes overlooked alternative to Sales Navigator. Stronger boolean search, better hidden-profile access. Useful if you\'re also occasionally hiring associate engineers for your practice.',
    features: ['Boolean + advanced search', '30 InMails/month', 'Profile insights beyond standard view', 'Talent pool analytics'],
    benefit: 'Worth it only if you have dual use (research AND hiring). For pure prospecting, Sales Nav is cheaper and better-suited.',
    feeds: ['Step 1 Identify']
  },

  // ============ TIER 4 — B2B CONTACT DATA ============
  {
    id: 'apollo',
    name: 'Apollo.io',
    url: 'https://www.apollo.io/',
    urlDisplay: 'apollo.io',
    tier: 4,
    pricing: 'Free tier · Basic from $59/mo',
    pricingTier: 'cheap',
    flags: ['essential', 'free'],
    blurb: 'B2B contact database with 275M+ contacts. Build targeted lists of insurance adjusters, defense attorneys, claims managers by title + firm + geography. Email + phone + LinkedIn on each.',
    features: ['275M+ contact database', 'Filter by title, firm, geography, employee count', 'Email + phone + LinkedIn URLs', 'Built-in email sequencer', 'Free tier with 50 mobile credits/mo'],
    benefit: 'The cheapest credible way to build a Dream 100 list with verified contact data. The free tier is enough to test the channel.',
    feeds: ['Step 1 Identify', 'Step 5 Convert']
  },
  {
    id: 'zoominfo',
    name: 'ZoomInfo',
    url: 'https://www.zoominfo.com/',
    urlDisplay: 'zoominfo.com',
    tier: 4,
    pricing: 'Custom enterprise pricing (typically $15K+/yr)',
    pricingTier: 'enterprise',
    flags: ['enterprise'],
    blurb: 'The B2B contact-data gold standard. Largest verified database, deepest firmographic detail, intent data layer. Pricing makes it overkill for solo practice.',
    features: ['Deepest verified contact data', 'Firmographic + technographic filters', 'Intent data layer (who\'s researching what)', 'CRM integrations', 'Org chart visibility'],
    benefit: 'For a multi-engineer firm with a sales function. Solos should use Apollo first.',
    feeds: ['Step 1 Identify']
  },
  {
    id: 'cognism',
    name: 'Cognism',
    url: 'https://www.cognism.com/',
    urlDisplay: 'cognism.com',
    tier: 4,
    pricing: 'Custom pricing (typically $1,000+/mo)',
    pricingTier: 'enterprise',
    flags: ['enterprise'],
    blurb: 'European-strong B2B data with phone-verified contacts and GDPR-compliance focus. Better than ZoomInfo for European data, weaker for US-only.',
    features: ['Phone-verified mobile numbers', 'GDPR + CCPA compliance', 'Strong European coverage', 'Diamond-verified contact tier'],
    benefit: 'Use only if you have European case work or specific phone-outreach intensity.',
    feeds: ['Step 1 Identify']
  },
  {
    id: 'clay',
    name: 'Clay',
    url: 'https://www.clay.com/',
    urlDisplay: 'clay.com',
    tier: 4,
    pricing: 'Free tier · Starter from $149/mo',
    pricingTier: 'mid',
    flags: ['niche'],
    blurb: 'Data-enrichment + workflow automation. Aggregates 75+ data providers. Power-user tool for building hyper-targeted Dream 100 workflows with AI-driven personalization.',
    features: ['75+ data providers in one platform', 'AI-powered personalization at scale', 'Workflow automation', 'Spreadsheet-style interface', 'Steep learning curve'],
    benefit: 'Overkill for most solo practices. Worth it for firms running systematic high-volume outreach.',
    feeds: ['Step 1 Identify', 'Step 5 Convert']
  },

  // ============ TIER 5 — LEGAL & CASE INTELLIGENCE ============
  {
    id: 'pacer',
    name: 'PACER',
    url: 'https://pacer.uscourts.gov/',
    urlDisplay: 'pacer.uscourts.gov',
    tier: 5,
    pricing: '$0.10/page · No subscription',
    pricingTier: 'free',
    flags: ['essential', 'free'],
    blurb: 'Federal court records, public access. Search filings by case type, attorney, firm, jurisdiction. Identify which firms handle the case types your specialty serves.',
    features: ['Public Access to Court Electronic Records', '$0.10/page (capped at $3/document)', 'No subscription required', 'Search by attorney, firm, case type', 'PACER Service Center direct access'],
    benefit: 'Tells you exactly which attorneys filed which kinds of cases in your jurisdiction. The Dream 100 research foundation. Free until $30/quarter usage.',
    feeds: ['Step 1 Identify']
  },
  {
    id: 'justia',
    name: 'Justia',
    url: 'https://www.justia.com/',
    urlDisplay: 'justia.com',
    tier: 5,
    pricing: 'Free',
    pricingTier: 'free',
    flags: ['free'],
    blurb: 'Free legal research portal. Searchable case law, attorney directories, court dockets. Useful for identifying attorneys at specific firms handling specific case types.',
    features: ['Case law search', 'Attorney + firm directory', 'Free dockets and decisions', 'No registration required for most features'],
    benefit: 'Zero-cost first pass on identifying attorneys handling your case-type. Pair with LinkedIn to find them.',
    feeds: ['Step 1 Identify']
  },
  {
    id: 'westlaw',
    name: 'Westlaw',
    url: 'https://legal.thomsonreuters.com/en/products/westlaw',
    urlDisplay: 'thomsonreuters.com/westlaw',
    tier: 5,
    pricing: 'Custom (typically $100–500+/mo)',
    pricingTier: 'mid',
    flags: [],
    blurb: 'The professional legal research standard. Westlaw Profiler shows expert testimony history including who has cross-examined you, who has hired you, and outcomes.',
    features: ['Expert Witness Profiler', 'Case-law + statutory research', 'Litigation history search', 'Daubert challenge tracker', 'Brief Bank'],
    benefit: 'Worth subscribing once your testimony record is substantial. Lets you research opposing experts and identify firms with case-type fit.',
    feeds: ['Step 1 Identify', 'Step 6 Compound']
  },
  {
    id: 'casetext',
    name: 'Casetext (CoCounsel)',
    url: 'https://casetext.com/',
    urlDisplay: 'casetext.com',
    tier: 5,
    pricing: 'CoCounsel from $400/mo',
    pricingTier: 'mid',
    flags: [],
    blurb: 'AI-powered legal research now part of Thomson Reuters. CoCounsel handles complex queries about case law, expert challenges, and Daubert history.',
    features: ['AI-powered legal queries', 'Brief drafting assistance', 'Case law search', 'Daubert/Frye history search'],
    benefit: 'For practices that bill enough hours to justify research time. Solo experts can usually skip this for Justia + occasional Westlaw.',
    feeds: ['Step 6 Compound']
  },
  {
    id: 'lex-machina',
    name: 'Lex Machina',
    url: 'https://lexmachina.com/',
    urlDisplay: 'lexmachina.com',
    tier: 5,
    pricing: 'Custom enterprise pricing',
    pricingTier: 'enterprise',
    flags: ['enterprise', 'niche'],
    blurb: 'Litigation analytics platform. Shows which firms litigate which case types, win rates, judge tendencies. Useful for premium-tier Dream 100 targeting.',
    features: ['Litigation outcome analytics', 'Firm-by-case-type analytics', 'Judge analytics', 'Patent + commercial + IP focus'],
    benefit: 'Niche tool. Worth it if you have specific litigation-analytics needs and the budget. Most experts can skip.',
    feeds: ['Step 1 Identify']
  },
  {
    id: 'docket-alarm',
    name: 'Docket Alarm',
    url: 'https://www.docketalarm.com/',
    urlDisplay: 'docketalarm.com',
    tier: 5,
    pricing: 'From $99/mo',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Court docket monitoring. Get alerts when new cases of your case-type are filed in your jurisdiction. Approach the firm before they\'ve hired an expert.',
    features: ['New-case alerts by keyword + jurisdiction', 'Federal + state court coverage', 'API access', 'Cheaper than PACER for high-volume monitoring'],
    benefit: 'For specialists in narrow case types (e.g., balcony collapse, VRF litigation), this turns case filings into outreach signals.',
    feeds: ['Step 1 Identify']
  },

  // ============ TIER 6 — OUTREACH + CRM ============
  {
    id: 'hubspot-free',
    name: 'HubSpot CRM (Free)',
    url: 'https://www.hubspot.com/products/crm',
    urlDisplay: 'hubspot.com/crm',
    tier: 6,
    pricing: 'Free forever',
    pricingTier: 'free',
    flags: ['essential', 'free'],
    blurb: 'The free CRM that actually works for solo practices. Track every attorney contact, every case inquiry, every follow-up. Email integration, deal pipeline, no time limit.',
    features: ['Truly free (not a trial)', 'Unlimited contacts', 'Email + Gmail integration', 'Deal pipeline visualization', 'Automatic activity logging'],
    benefit: 'You need a CRM. This one is free, capable, and pre-integrated with Apollo, LinkedIn Sales Nav, and visitor-ID tools. Start here.',
    feeds: ['Step 5 Convert', 'Step 6 Compound']
  },
  {
    id: 'pipedrive',
    name: 'Pipedrive',
    url: 'https://www.pipedrive.com/',
    urlDisplay: 'pipedrive.com',
    tier: 6,
    pricing: 'Essential $25/seat/mo · Advanced $49/seat/mo',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Pipeline-focused CRM. More opinionated than HubSpot — pushes you toward closing deals through stages. Good fit for the case-driven sales cycle of forensic engineering.',
    features: ['Visual pipeline (drag-drop deal stages)', 'Email tracking + templates', 'Activity reminders', 'Mobile app polish', 'Fewer features than HubSpot but cleaner UX'],
    benefit: 'Pick this over HubSpot if you prefer clean over feature-rich. Either is fine; pick one and use it.',
    feeds: ['Step 5 Convert']
  },
  {
    id: 'folk',
    name: 'Folk CRM',
    url: 'https://www.folk.app/',
    urlDisplay: 'folk.app',
    tier: 6,
    pricing: 'Standard $20/seat/mo · Premium $40/seat/mo',
    pricingTier: 'cheap',
    flags: ['niche'],
    blurb: 'Modern, relationship-focused CRM. Designed for people who think of contacts as relationships, not pipeline. Excellent LinkedIn + Gmail integration.',
    features: ['Magic Email enrichment', 'LinkedIn Chrome extension', 'Relationship intelligence', 'Smart fields + automation', 'Notion-style flexibility'],
    benefit: 'Best fit for an expert-witness practice where relationships compound across many cases over many years.',
    feeds: ['Step 5 Convert', 'Step 6 Compound']
  },
  {
    id: 'smartlead',
    name: 'Smartlead',
    url: 'https://www.smartlead.ai/',
    urlDisplay: 'smartlead.ai',
    tier: 6,
    pricing: 'Basic $39/mo · Pro $94/mo',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Cold-email infrastructure. Multi-mailbox sending, deliverability optimization, AI personalization. The tool to use when sending Dream 100 outreach at meaningful volume.',
    features: ['Unlimited email accounts (no per-mailbox fees)', 'Deliverability optimization (warm-up, throttling)', 'AI subject + body personalization', 'Reply detection + auto-pause', 'Built-in sequence editor'],
    benefit: 'Cheaper than Lemlist or Instantly at scale. Better deliverability than HubSpot Sequences for cold outreach to attorneys.',
    feeds: ['Step 5 Convert']
  },
  {
    id: 'instantly',
    name: 'Instantly',
    url: 'https://instantly.ai/',
    urlDisplay: 'instantly.ai',
    tier: 6,
    pricing: 'Hyper-Growth $97/mo',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Cold-email outreach platform with strong deliverability and AI features. Direct competitor to Smartlead. Pick whichever you can get a discount on.',
    features: ['Unlimited email accounts on paid plans', 'Inbox warmup (Email Deliverability Network)', 'CRM-lite functionality', 'Sequence builder + AI personalization', 'B2B lead database (paid add-on)'],
    benefit: 'Functionally equivalent to Smartlead. Pick based on UX preference and current promo pricing.',
    feeds: ['Step 5 Convert']
  },
  {
    id: 'lemlist',
    name: 'Lemlist',
    url: 'https://www.lemlist.com/',
    urlDisplay: 'lemlist.com',
    tier: 6,
    pricing: 'Email Outreach $59/mo · Sales Engagement $99/mo',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Cold outreach with hyper-personalization (custom images, video, dynamic landing pages). Higher reply rates if you use the personalization features; otherwise overpriced.',
    features: ['Custom image + video personalization', 'Liquid syntax dynamic content', 'AI campaign generator', 'Built-in 450M lead database', 'Strong deliverability tools'],
    benefit: 'Worth premium only if you actually use the personalization. Otherwise Smartlead or Instantly is cheaper for the same outcome.',
    feeds: ['Step 5 Convert']
  },

  // ============ TIER 7 — REPUTATION + CONTENT + ASSOCIATIONS ============
  {
    id: 'nafe',
    name: 'NAFE Membership',
    url: 'https://www.nafe.org/',
    urlDisplay: 'nafe.org',
    tier: 7,
    pricing: '~$300–500/yr (membership tiers vary)',
    pricingTier: 'cheap',
    flags: ['essential'],
    blurb: 'National Academy of Forensic Engineers. The professional society for forensic engineering. Member directory, journal publication opportunities, conferences attended by attorneys.',
    features: ['Peer-reviewed journal (J. NAFE)', 'Member directory used by attorneys', 'Annual + regional conferences', 'Continuing education + certification', 'Strong credibility signal on CV'],
    benefit: 'For a forensic engineer, NAFE is not optional. It\'s a credentialing baseline. Attorneys searching for "credentialed forensic engineer" will look here.',
    feeds: ['Step 2 Get Listed', 'Step 7 Reputation']
  },
  {
    id: 'ashrae',
    name: 'ASHRAE Membership',
    url: 'https://www.ashrae.org/',
    urlDisplay: 'ashrae.org',
    tier: 7,
    pricing: 'Member $263/yr',
    pricingTier: 'cheap',
    flags: ['niche'],
    blurb: 'For HVAC/VRF/mechanical specialists. Technical committee work and standards development create unmatched authority signal. Conference speaking lands directly in front of buyers.',
    features: ['Technical committee membership', 'Standards-development authorship', 'Annual + winter conferences', 'Specialty certifications (BCxP, OPMP, etc.)', 'Member directory'],
    benefit: 'For VRF litigation specifically, ASHRAE involvement is the single highest-trust signal a court will see. Worth the time investment.',
    feeds: ['Step 7 Reputation']
  },
  {
    id: 'nfpa',
    name: 'NFPA Membership',
    url: 'https://www.nfpa.org/',
    urlDisplay: 'nfpa.org',
    tier: 7,
    pricing: 'Member ~$175/yr',
    pricingTier: 'cheap',
    flags: ['niche'],
    blurb: 'National Fire Protection Association. Essential for fire-investigation specialists. NFPA 921 is the gold-standard methodology referenced in fire forensics testimony.',
    features: ['NFPA 921 access + interpretation', 'Standards committees', 'Conference + training programs', 'Specialty journals', 'CFEI / CFI certifications path'],
    benefit: 'For fire forensic engineering, NFPA is non-optional. Without NFPA 921 fluency, your testimony gets picked apart on cross.',
    feeds: ['Step 7 Reputation']
  },
  {
    id: 'asce',
    name: 'ASCE Membership',
    url: 'https://www.asce.org/',
    urlDisplay: 'asce.org',
    tier: 7,
    pricing: 'Member $310/yr',
    pricingTier: 'cheap',
    flags: ['niche'],
    blurb: 'American Society of Civil Engineers. Essential for structural / civil specialists. Forensic Engineering Division within ASCE is specifically attorney-facing.',
    features: ['Forensic Engineering Division', 'Technical journal publishing', 'Continuing education', 'Specialty certifications (PE-related)', 'Standards documents'],
    benefit: 'For structural failure work, ASCE FED visibility is direct attorney-facing reputation building.',
    feeds: ['Step 7 Reputation']
  },
  {
    id: 'sparktoro-pro',
    name: 'SparkToro',
    url: 'https://sparktoro.com/',
    urlDisplay: 'sparktoro.com',
    tier: 7,
    pricing: 'Personal $38/mo · Business $112/mo',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Audience research. Type "insurance defense attorney" and SparkToro tells you which podcasts they listen to, what publications they read, who they follow on LinkedIn. Your earned-media targeting list.',
    features: ['Audience clickstream analysis', 'Podcast / publication / social account discovery', 'Natural-language audience description', 'Podcast guest opportunities', 'Email newsletter analysis'],
    benefit: 'Tells you exactly where to publish, where to guest-podcast, and who to connect with on LinkedIn. The Dream 100 amplifier.',
    feeds: ['Step 5 Convert', 'Step 7 Reputation']
  },
  {
    id: 'ali-cle',
    name: 'ALI CLE',
    url: 'https://www.ali-cle.org/',
    urlDisplay: 'ali-cle.org',
    tier: 7,
    pricing: 'Speaker — variable; Attendee from $300/course',
    pricingTier: 'mid',
    flags: ['niche'],
    blurb: 'American Law Institute Continuing Legal Education. Speak at one of their programs and you\'re directly in front of 100–500 practicing attorneys earning their CLE credits.',
    features: ['Direct audience: practicing attorneys', 'CLE-credit-eligible content', 'Recorded distribution beyond live talk', 'High-credibility signal', 'Often paid speaker honoraria'],
    benefit: 'A single ALI CLE talk on "Forensic Engineering for VRF Litigation" produces inbound case inquiries for years afterward.',
    feeds: ['Step 7 Reputation']
  },
  {
    id: 'state-bar-cle',
    name: 'State Bar CLE Programs',
    url: 'https://www.americanbar.org/cle/',
    urlDisplay: 'americanbar.org/cle',
    tier: 7,
    pricing: 'Variable · Often free for speakers',
    pricingTier: 'free',
    flags: ['free', 'niche'],
    blurb: 'State and local bar associations run CLE programs constantly. They need expert speakers; they pay either honoraria or just visibility. Direct path to the local Dream 100.',
    features: ['Direct local-attorney audience', 'Often unpaid (visibility-based)', 'Attendee list available post-event', 'CLE-credit eligibility', 'Recurring speaking opportunities'],
    benefit: 'Highest ROI per hour invested for local Dream 100 cultivation. Apply to every state bar in your geography.',
    feeds: ['Step 7 Reputation']
  },
  {
    id: 'wynter',
    name: 'Wynter (Message Testing)',
    url: 'https://wynter.com/',
    urlDisplay: 'wynter.com',
    tier: 7,
    pricing: 'From ~$540/test',
    pricingTier: 'mid',
    flags: ['niche'],
    blurb: 'On-demand B2B message testing. Get 12–48 hour feedback from a panel including legal/insurance professionals. Test your service-page copy against actual buyers before launching.',
    features: ['Verified ICP panel (60K+ B2B professionals)', 'Job-title + industry targeting', '12–48 hour turnaround', 'Service-page + email message testing', 'Persona research'],
    benefit: 'Most forensic engineers wouldn\'t think to test their service-page copy with actual attorneys. The ones who do convert better.',
    feeds: ['Step 3 Reciprocity']
  },
  {
    id: 'expertcommunications',
    name: 'Expert Communications',
    url: 'https://expertcommunications.com/',
    urlDisplay: 'expertcommunications.com',
    tier: 7,
    pricing: 'Coaching packages from $1,000+',
    pricingTier: 'mid',
    flags: ['niche'],
    blurb: 'Marketing consultancy specifically for expert witnesses. Resume + CV positioning, fee-setting strategy, deposition prep. Niche but proven for the practitioner who wants done-with-you positioning help.',
    features: ['Expert-specific marketing strategy', 'CV positioning + rewriting', 'Fee-schedule strategy', 'Deposition + testimony prep', 'Referral-network introductions'],
    benefit: 'Worth considering if you\'re past the technical excellence stage but stuck on positioning + fee-setting.',
    feeds: ['Step 6 Compound']
  }
];

// ============================================================================
// TIER METADATA
// ============================================================================
const TIERS = [
  { num: 1, id: 'tier-1', name: 'Website Visitor Identification', purpose: 'Tells you which firms are reading your service pages but haven\'t yet contacted you. <strong>This is the highest-leverage tool category for niche specialists</strong> — buyers research before they call. Feeds <span class="gate-ref">Step 4 Capture Intent</span>.' },
  { num: 2, id: 'tier-2', name: 'Expert Witness Directories', purpose: 'Where attorneys actually search at 11pm before depositions. Listing fees range from $399–$1,000/yr. The directories below are the ones attorneys verify and use. Feeds <span class="gate-ref">Step 2 Get Listed</span>.' },
  { num: 3, id: 'tier-3', name: 'LinkedIn — Free + Paid', purpose: 'According to one 25-year veteran of expert-witness consulting, "the best cases come from LinkedIn. Free." Sales Navigator amplifies this from organic to systematic. Feeds <span class="gate-ref">Step 1 Identify</span>, <span class="gate-ref">Step 5 Convert</span>.' },
  { num: 4, id: 'tier-4', name: 'B2B Contact Data', purpose: 'Build a Dream 100 list of named adjusters, attorneys, and claims managers with verified emails and phones. Apollo is the budget winner; ZoomInfo is the gold standard. Feeds <span class="gate-ref">Step 1 Identify</span>.' },
  { num: 5, id: 'tier-5', name: 'Legal & Case Intelligence', purpose: 'Court records and legal-research tools that tell you which firms handle which case types — so your outreach is targeted. PACER is functionally free. Feeds <span class="gate-ref">Step 1 Identify</span>.' },
  { num: 6, id: 'tier-6', name: 'Outreach + CRM', purpose: 'Once you have a Dream 100 list, work it. CRM tracks every attorney contact and follow-up. Cold email tools deliver outreach at meaningful volume without burning your domain. Feeds <span class="gate-ref">Step 5 Convert</span>.' },
  { num: 7, id: 'tier-7', name: 'Reputation, Content & Associations', purpose: 'The compounding layer. Association membership, CLE speaking, technical-committee work, message testing. None of these produce leads next week. All of them produce leads in 2027 and onward. Feeds <span class="gate-ref">Step 7 Reputation</span>.' }
];

// ============================================================================
// RENDER
// ============================================================================
function renderCatalog() {
  const main = document.getElementById('catalog');
  let html = '';
  TIERS.forEach(tier => {
    const tierTools = TOOLS.filter(t => t.tier === tier.num);
    html += `
      <section class="tier-section" id="${tier.id}" data-tier="${tier.num}">
        <div class="tier-header">
          <div class="tier-num">CHANNEL ${tier.num}</div>
          <h2 class="tier-name">${tier.name}</h2>
          <div class="tier-count">${tierTools.length} TOOL${tierTools.length !== 1 ? 'S' : ''}</div>
        </div>
        <p class="tier-purpose">${tier.purpose}</p>
        <div class="tool-grid">
          ${tierTools.map((t, i) => renderToolCard(t, i)).join('')}
        </div>
      </section>
    `;
  });
  main.innerHTML = html;
}

function renderToolCard(t, idx) {
  const flagsHtml = (t.flags || []).map(f => {
    const map = {
      'essential': { cls: 'flag-essential', label: '★ ESSENTIAL' },
      'enterprise': { cls: 'flag-enterprise', label: 'ENTERPRISE' },
      'free': { cls: 'flag-free', label: 'FREE TIER' },
      'niche': { cls: 'flag-niche', label: 'NICHE' }
    };
    const m = map[f];
    return m ? `<span class="flag ${m.cls}">${m.label}</span>` : '';
  }).join('');

  const tierClass = t.pricingTier === 'enterprise' ? 'tier-enterprise' : '';
  const featuresHtml = (t.features || []).map(f => `<li>${f}</li>`).join('');

  return `
    <article class="tool-card ${tierClass}"
             data-tier="${t.tier}"
             data-budget="${t.pricingTier}"
             data-search="${(t.name + ' ' + t.blurb + ' ' + (t.features || []).join(' ') + ' ' + (t.benefit || '')).toLowerCase()}"
             style="animation-delay: ${idx * 0.04}s">
      <div class="tool-header">
        <h3 class="tool-name"><a href="${t.url}" target="_blank" rel="noopener">${t.name}</a></h3>
        <div class="tool-flags">${flagsHtml}</div>
      </div>
      <div class="tool-url">${t.urlDisplay}</div>
      <div class="tool-pricing">
        <span class="pricing-label">Cost</span>
        <span class="pricing-value">${t.pricing}</span>
      </div>
      <p class="tool-description">${t.blurb}</p>
      ${t.features && t.features.length ? `
        <div class="tool-section">
          <h4>Key features</h4>
          <ul>${featuresHtml}</ul>
        </div>
      ` : ''}
      ${t.benefit ? `
        <div class="tool-section">
          <h4>Why it matters</h4>
          <p>${t.benefit}</p>
        </div>
      ` : ''}
      <div class="tool-footer">
        ${(t.feeds || []).map(g => `<span class="gate-tag">${g}</span>`).join('')}
      </div>
    </article>
  `;
}

// ============================================================================
// FILTERING
// ============================================================================
let activeFilters = { tier: 'all', budget: 'all', search: '' };

function applyFilters() {
  const cards = document.querySelectorAll('.tool-card');
  const tierSections = document.querySelectorAll('.tier-section');
  let visibleCount = 0;
  const visiblePerTier = {};

  cards.forEach(card => {
    const tier = card.dataset.tier;
    const budget = card.dataset.budget;
    const search = card.dataset.search;
    const tierMatch = activeFilters.tier === 'all' || tier === activeFilters.tier;
    const budgetMatch = activeFilters.budget === 'all' || budget === activeFilters.budget;
    const searchMatch = !activeFilters.search || search.includes(activeFilters.search);
    const show = tierMatch && budgetMatch && searchMatch;
    card.classList.toggle('hidden', !show);
    if (show) {
      visibleCount++;
      visiblePerTier[tier] = (visiblePerTier[tier] || 0) + 1;
    }
  });

  tierSections.forEach(section => {
    const tier = section.dataset.tier;
    section.classList.toggle('hidden', !visiblePerTier[tier]);
  });

  document.getElementById('resultCount').textContent = visibleCount;
  document.getElementById('noResults').classList.toggle('visible', visibleCount === 0);
}

document.querySelectorAll('.filter-btn').forEach(btn => {
  btn.addEventListener('click', () => {
    const type = btn.dataset.filterType;
    const value = btn.dataset.filter;
    activeFilters[type] = value;
    document.querySelectorAll(`.filter-btn[data-filter-type="${type}"]`).forEach(b => {
      b.classList.toggle('active', b === btn);
    });
    applyFilters();
  });
});

document.getElementById('searchInput').addEventListener('input', e => {
  activeFilters.search = e.target.value.trim().toLowerCase();
  applyFilters();
});

document.querySelectorAll('.toc a').forEach(a => {
  a.addEventListener('click', e => {
    e.preventDefault();
    const target = document.querySelector(a.getAttribute('href'));
    if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' });
  });
});

renderCatalog();
applyFilters();

console.log('Total tools loaded:', TOOLS.length);
</script>

</body>
</html>
Original asset: RISER-Marketing-Plan-Generator.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RISER Marketing Plan Generator · Find Your Customers</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=Inter+Tight:[email protected]&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
  --ink: #0a0a0a;
  --paper: #f7f4ee;
  --paper-warm: #f0eadf;
  --paper-deep: #e9e2d2;
  --rule: #1a1a1a;
  --red: #c9302a;
  --red-deep: #8b1f1c;
  --red-tint: #fbe8e6;
  --red-soft: #f9d8d5;
  --green: #1d6e3a;
  --green-tint: #dcefe2;
  --gold: #b8893a;
  --gold-tint: #f5ead0;
  --teal: #2c5f5a;
  --teal-tint: #d8e6e4;
  --muted: #5a564f;
  --serif: 'Fraunces', Georgia, serif;
  --sans: 'Inter Tight', -apple-system, sans-serif;
  --mono: 'JetBrains Mono', Menlo, monospace;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
  font-family: var(--sans);
  background: var(--paper);
  color: var(--ink);
  line-height: 1.55;
  font-size: 15px;
  min-height: 100vh;
}

/* ============ MASTHEAD ============ */
.masthead {
  border-bottom: 3px double var(--rule);
  padding: 32px 32px 24px;
  background: var(--paper);
}
.masthead-inner { max-width: 1100px; margin: 0 auto; }
.kicker {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 12px;
  display: flex; align-items: center; gap: 14px;
}
.kicker::after { content: ''; flex: 1; height: 1px; background: var(--rule); opacity: 0.3; }
.title {
  font-family: var(--serif);
  font-weight: 600;
  font-size: clamp(32px, 4.5vw, 50px);
  line-height: 1.0;
  letter-spacing: -0.025em;
  margin-bottom: 12px;
}
.title em { font-style: italic; font-weight: 400; color: var(--red-deep); }
.subtitle {
  font-family: var(--serif);
  font-style: italic;
  font-size: 17px;
  color: var(--muted);
  max-width: 740px;
  line-height: 1.45;
}

/* ============ STAGE PROGRESS ============ */
.stages {
  display: flex;
  gap: 0;
  margin-top: 22px;
  border: 1.5px solid var(--rule);
  background: var(--paper-warm);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
.stage-pill {
  flex: 1;
  padding: 10px 16px;
  border-right: 1.5px solid var(--rule);
  color: var(--muted);
  display: flex;
  align-items: center;
  gap: 10px;
  transition: background 0.2s, color 0.2s;
}
.stage-pill:last-child { border-right: none; }
.stage-pill .num {
  width: 22px; height: 22px;
  border: 1.5px solid currentColor;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 11px;
  flex-shrink: 0;
}
.stage-pill.active {
  background: var(--ink);
  color: var(--paper);
  font-weight: 700;
}
.stage-pill.complete {
  background: var(--green-tint);
  color: var(--green);
}
.stage-pill.complete .num { background: var(--green); color: var(--paper); border-color: var(--green); }

/* ============ MAIN ============ */
main { max-width: 1100px; margin: 0 auto; padding: 32px; }
.stage { display: none; }
.stage.active { display: block; }

.stage-header {
  margin-bottom: 28px;
  padding-bottom: 18px;
  border-bottom: 2px solid var(--rule);
}
.stage-header h2 {
  font-family: var(--serif);
  font-size: 32px;
  font-weight: 600;
  letter-spacing: -0.02em;
  margin-bottom: 6px;
  line-height: 1.1;
}
.stage-header p {
  font-family: var(--serif);
  font-style: italic;
  color: var(--muted);
  font-size: 16px;
  line-height: 1.45;
}

/* ============ FORMS ============ */
.field { margin-bottom: 24px; }

/* ============ PRIMARY FIELD — visual hierarchy for the profession input ============ */
.field-primary {
  background: var(--paper-warm);
  border: 1.5px solid var(--rule);
  border-left: 4px solid var(--red-deep);
  padding: 22px 24px 24px;
  margin-bottom: 28px;
  position: relative;
  box-shadow: 4px 4px 0 var(--rule);
}
.field-primary .field-step-marker {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--gold);
  font-weight: 700;
  margin-bottom: 8px;
  display: block;
}
.field-primary .field-label {
  font-family: var(--serif);
  font-size: 22px;
  letter-spacing: -0.015em;
  text-transform: none;
  color: var(--ink);
  font-weight: 600;
  margin-bottom: 6px;
  line-height: 1.2;
}
.field-primary .field-required {
  color: var(--red-deep);
  font-family: var(--serif);
  font-weight: 700;
  margin-left: 2px;
}
.field-primary .field-help {
  font-size: 15px;
  margin-bottom: 14px;
}
.field-primary .field-help strong {
  color: var(--ink);
  font-weight: 600;
  font-style: normal;
}
.field-primary input[type="text"] {
  font-size: 18px;
  padding: 14px 18px;
  border-width: 2px;
  font-weight: 500;
  background: var(--paper);
}
.field-primary input[type="text"]:focus {
  border-color: var(--red-deep);
  background: #fff;
  box-shadow: 0 0 0 3px rgba(139, 31, 28, 0.08);
}

.field-label {
  display: block;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 8px;
}
.field-help {
  font-family: var(--serif);
  font-style: italic;
  font-size: 14px;
  color: var(--muted);
  margin-bottom: 8px;
  line-height: 1.45;
}
.input-wrap { position: relative; }
input[type="text"], textarea {
  width: 100%;
  padding: 12px 16px;
  font-family: var(--sans);
  font-size: 15px;
  border: 1.5px solid var(--rule);
  background: var(--paper);
  color: var(--ink);
  border-radius: 0;
  transition: border-color 0.15s, background 0.15s;
}
input[type="text"]:focus, textarea:focus {
  outline: none;
  border-color: var(--red-deep);
  background: #fff;
}
textarea { resize: vertical; min-height: 90px; line-height: 1.5; }

/* ============ AUTOCOMPLETE ============ */
.autocomplete-list {
  position: absolute;
  top: 100%; left: 0; right: 0;
  background: var(--paper);
  border: 1.5px solid var(--rule);
  border-top: none;
  max-height: 280px;
  overflow-y: auto;
  z-index: 30;
  display: none;
  box-shadow: 4px 4px 0 var(--rule);
}
.autocomplete-list.visible { display: block; }
.autocomplete-item {
  padding: 9px 16px;
  cursor: pointer;
  font-size: 14px;
  border-bottom: 1px dotted var(--muted);
}
.autocomplete-item:last-child { border-bottom: none; }
.autocomplete-item:hover, .autocomplete-item.highlighted {
  background: var(--paper-warm);
  color: var(--red-deep);
}
.autocomplete-item .match { font-weight: 600; }

/* ============ AVATAR PICKER ============ */
.avatar-toggle {
  display: flex;
  gap: 0;
  margin-bottom: 16px;
  border: 1.5px solid var(--rule);
}
.avatar-toggle button {
  flex: 1;
  padding: 11px 16px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  background: var(--paper);
  color: var(--ink);
  border: none;
  border-right: 1.5px solid var(--rule);
  cursor: pointer;
  transition: background 0.12s, color 0.12s;
  font-weight: 600;
}
.avatar-toggle button:last-child { border-right: none; }
.avatar-toggle button.active { background: var(--ink); color: var(--paper); }
.avatar-toggle button:hover:not(.active) { background: var(--paper-warm); }

.archetype-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
  margin-bottom: 16px;
}
@media (max-width: 700px) { .archetype-grid { grid-template-columns: 1fr; } }
.archetype-card {
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 16px 18px;
  cursor: pointer;
  transition: transform 0.12s, box-shadow 0.12s, background 0.12s;
}
.archetype-card:hover {
  transform: translateY(-2px);
  box-shadow: 4px 4px 0 var(--rule);
  background: var(--paper-warm);
}
.archetype-card.selected {
  background: var(--gold-tint);
  border-color: var(--red-deep);
  box-shadow: 4px 4px 0 var(--red-deep);
  transform: translateY(-2px);
}
.archetype-card h4 {
  font-family: var(--serif);
  font-size: 17px;
  font-weight: 600;
  letter-spacing: -0.01em;
  margin-bottom: 6px;
  line-height: 1.2;
}
.archetype-card p {
  font-size: 13px;
  color: var(--muted);
  line-height: 1.45;
}

/* ============ BUTTONS ============ */
.btn-row {
  display: flex;
  gap: 12px;
  margin-top: 28px;
  flex-wrap: wrap;
  align-items: center;
}
.btn {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 12px 22px;
  border: 1.5px solid var(--rule);
  background: var(--paper);
  color: var(--ink);
  cursor: pointer;
  transition: all 0.12s;
  font-weight: 600;
}
.btn:hover:not(:disabled) {
  background: var(--ink);
  color: var(--paper);
}
.btn:disabled { opacity: 0.35; cursor: not-allowed; background: var(--paper-deep) !important; color: var(--muted) !important; border-color: var(--muted) !important; }
.btn-primary {
  background: var(--red-deep);
  color: var(--paper);
  border-color: var(--red-deep);
}
.btn-primary:hover:not(:disabled) {
  background: var(--red);
  border-color: var(--red);
}
.btn-ghost { border-color: var(--muted); color: var(--muted); }

/* ============ STATUS BANNERS ============ */
.banner {
  padding: 14px 18px;
  font-size: 14px;
  border-left: 4px solid;
  margin-bottom: 20px;
  font-family: var(--serif);
  line-height: 1.5;
}
.banner-info { background: var(--teal-tint); border-color: var(--teal); color: var(--teal); }
.banner-warn { background: var(--red-tint); border-color: var(--red-deep); color: var(--red-deep); }
.banner-success { background: var(--green-tint); border-color: var(--green); color: var(--green); }
.banner strong { font-weight: 700; }

/* ============ API KEY INPUT ============ */
.api-key-section {
  margin-top: 24px;
  padding: 20px;
  background: var(--paper-warm);
  border: 1.5px solid var(--rule);
}
.api-key-section h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 8px;
}
.api-key-section p {
  font-size: 13px;
  color: var(--muted);
  margin-bottom: 12px;
  line-height: 1.45;
}
.api-key-section input[type="password"] {
  width: 100%;
  padding: 10px 14px;
  font-family: var(--mono);
  font-size: 13px;
  border: 1.5px solid var(--rule);
  background: var(--paper);
}
.api-key-section input[type="password"]:focus {
  outline: none;
  border-color: var(--red-deep);
}
.api-key-section .toggle-row {
  display: flex;
  gap: 14px;
  align-items: center;
  margin-top: 10px;
  font-size: 13px;
}
.api-key-section a { color: var(--red-deep); }

.model-toggle {
  display: flex;
  gap: 8px;
  margin-top: 12px;
}
.model-toggle button {
  flex: 1;
  padding: 8px 12px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  background: var(--paper);
  border: 1.5px solid var(--rule);
  cursor: pointer;
  font-weight: 600;
}
.model-toggle button.active { background: var(--ink); color: var(--paper); }

/* ============ LOADING ============ */
.loading-state {
  text-align: center;
  padding: 60px 20px;
  font-family: var(--serif);
  font-style: italic;
  font-size: 18px;
  color: var(--muted);
}
.loading-state .dots { display: inline-block; min-width: 24px; }
.loading-state .step-text {
  font-family: var(--mono);
  font-style: normal;
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-top: 16px;
  color: var(--red-deep);
  font-weight: 600;
}
/* ============ PRINT STYLES ============ */
@media print {
  body { background: #fff; color: #000; font-size: 11pt; }
  .masthead { padding: 12px 0 8px; border-bottom: 2px solid #000; }
  .masthead .stages, .controls-bar, .toc, footer, .api-key-section,
  .stage:not(#stage-plan), .stage-pill, #plan-actions, #plan-loading,
  .scan-buttons-wrap, .saved-plans, #setup-hint { display: none !important; }
  .stage#stage-plan { display: block !important; }
  .stage#stage-plan .stage-header { margin-bottom: 14px; padding-bottom: 8px; }
  .title { font-size: 26pt; margin-bottom: 4pt; }
  .subtitle { font-size: 11pt; }
  .kicker { font-size: 9pt; }
  main { padding: 0; max-width: 100%; }
  .plan-summary {
    background: #fff !important;
    border: 1.5px solid #000 !important;
    padding: 12px 14px;
    margin-bottom: 14px;
    page-break-after: avoid;
  }
  .plan-summary .profession { font-size: 16pt; }
  .plan-summary .avatar { font-size: 11pt; }
  .plan-section {
    background: #fff !important;
    border: 1px solid #555 !important;
    padding: 12px 14px;
    margin-bottom: 12px;
    page-break-inside: avoid;
    break-inside: avoid;
  }
  .plan-section h3 { font-size: 15pt; }
  .plan-section p, .plan-section li { font-size: 10.5pt; }
  .plan-section-num { color: #000 !important; }
  .pain-quote {
    background: #f5f5f5 !important;
    border-left: 2px solid #000 !important;
    font-size: 10.5pt;
    page-break-inside: avoid;
  }
  .pain-meta { color: #555 !important; }
  .copy-block {
    background: #f5f5f5 !important;
    border-left: 2px solid #000 !important;
    font-size: 10.5pt;
    page-break-inside: avoid;
  }
  .cadence-grid {
    grid-template-columns: 1fr 1fr 1fr !important;
    gap: 8px;
  }
  .cadence-card {
    background: #fff !important;
    border: 1px solid #555 !important;
    padding: 10px 12px;
  }
  .channel-priority { padding: 6px 0; page-break-inside: avoid; }
  .channel-rank { font-size: 22pt; min-width: 30px; color: #000 !important; }
  .channel-name { font-size: 13pt; }
  .channel-reason { font-size: 10.5pt; }
  .caveat-box {
    background: #f5f5f5 !important;
    border-left: 2px solid #000 !important;
    font-size: 10pt;
    color: #000 !important;
    page-break-inside: avoid;
  }
  .script-card {
    background: #fff !important;
    border: 1px solid #555 !important;
    page-break-inside: avoid;
  }
  /* Hide URLs after links to keep clean */
  a[href]:after { content: '' !important; }
  /* Print banner */
  @page { margin: 0.6in; size: letter; }
}


.dot { animation: pulse-dot 1.4s infinite ease-in-out; display: inline-block; }
.dot:nth-child(2) { animation-delay: 0.2s; }
.dot:nth-child(3) { animation-delay: 0.4s; }
@keyframes pulse-dot { 0%, 80%, 100% { opacity: 0.3; } 40% { opacity: 1; } }

/* ============ PLAN OUTPUT ============ */
.plan-summary {
  background: var(--paper-warm);
  border: 1.5px solid var(--rule);
  padding: 24px;
  margin-bottom: 28px;
}
.plan-summary h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 8px;
}
.plan-summary .profession {
  font-family: var(--serif);
  font-size: 22px;
  font-weight: 600;
  letter-spacing: -0.01em;
  margin-bottom: 4px;
}
.plan-summary .avatar {
  font-family: var(--serif);
  font-style: italic;
  color: var(--muted);
  font-size: 16px;
  line-height: 1.5;
}

.plan-section {
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 24px 26px;
  margin-bottom: 18px;
}
.plan-section-header {
  display: flex;
  align-items: baseline;
  gap: 14px;
  margin-bottom: 14px;
  border-bottom: 1.5px solid var(--rule);
  padding-bottom: 10px;
}
.plan-section-num {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 700;
  color: var(--red-deep);
  letter-spacing: 0.1em;
}
.plan-section h3 {
  font-family: var(--serif);
  font-size: 24px;
  font-weight: 600;
  letter-spacing: -0.015em;
  flex: 1;
  line-height: 1.2;
}
.plan-section p {
  font-family: var(--serif);
  font-size: 15px;
  line-height: 1.55;
  margin-bottom: 12px;
}
.plan-section ul, .plan-section ol {
  margin: 8px 0 12px 0;
  padding-left: 0;
  list-style: none;
}
.plan-section li {
  padding-left: 18px;
  position: relative;
  margin-bottom: 8px;
  font-size: 15px;
  line-height: 1.5;
}
.plan-section li::before {
  content: '→';
  position: absolute;
  left: 0;
  color: var(--gold);
  font-weight: 700;
}
.plan-section .pain-quote {
  font-family: var(--serif);
  font-style: italic;
  font-size: 16px;
  border-left: 3px solid var(--red-deep);
  padding: 8px 14px;
  margin: 10px 0;
  background: var(--paper-warm);
  line-height: 1.45;
}
.plan-section .pain-meta {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.06em;
  color: var(--muted);
  text-transform: uppercase;
  margin-top: 4px;
}

.cadence-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  margin-top: 14px;
}
@media (max-width: 700px) { .cadence-grid { grid-template-columns: 1fr; } }
.cadence-card {
  background: var(--paper-warm);
  border: 1.5px solid var(--rule);
  padding: 16px 18px;
}
.cadence-card h5 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 10px;
}
.cadence-card ul { margin: 0; }

.channel-priority {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 12px 0;
  border-bottom: 1px dashed var(--muted);
}
.channel-priority:last-child { border-bottom: none; }
.channel-rank {
  font-family: var(--serif);
  font-size: 32px;
  font-weight: 700;
  color: var(--red-deep);
  line-height: 1;
  flex-shrink: 0;
  min-width: 40px;
}
.channel-name {
  font-family: var(--serif);
  font-size: 18px;
  font-weight: 600;
  margin-bottom: 4px;
  letter-spacing: -0.01em;
}
.channel-reason {
  font-size: 14px;
  line-height: 1.5;
  color: var(--ink);
}

.copy-block {
  background: var(--paper-warm);
  border-left: 3px solid var(--gold);
  padding: 14px 18px;
  margin: 10px 0;
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.55;
  font-style: italic;
}

.caveat-box {
  background: var(--red-tint);
  border-left: 3px solid var(--red-deep);
  padding: 12px 18px;
  margin: 14px 0;
  font-family: var(--serif);
  font-size: 14px;
  line-height: 1.5;
}
.caveat-box strong { font-weight: 600; color: var(--red-deep); }

/* ============ SCRIPT CARDS ============ */
.script-card {
  background: var(--paper-warm);
  border: 1.5px solid var(--rule);
  margin-bottom: 14px;
  overflow: hidden;
}
.script-card:last-child { margin-bottom: 0; }
.script-header {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 16px;
  border-bottom: 1.5px solid var(--rule);
  background: var(--paper);
}
.script-channel-num {
  font-family: var(--serif);
  font-weight: 700;
  font-size: 22px;
  color: var(--red-deep);
  width: 30px;
  text-align: center;
  flex-shrink: 0;
  line-height: 1;
}
.script-card h4 {
  font-family: var(--serif);
  font-size: 18px;
  font-weight: 600;
  letter-spacing: -0.01em;
  flex: 1;
  margin: 0;
  line-height: 1.2;
}
.copy-btn {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-weight: 600;
  padding: 6px 12px;
  border: 1.5px solid var(--rule);
  background: var(--paper);
  color: var(--ink);
  cursor: pointer;
  transition: all 0.12s;
}
.copy-btn:hover { background: var(--ink); color: var(--paper); }
.copy-btn.copied { background: var(--green); color: var(--paper); border-color: var(--green); }
.script-body {
  padding: 14px 18px;
  font-family: var(--serif);
  font-size: 14.5px;
  line-height: 1.55;
  white-space: pre-wrap;
  color: var(--ink);
}

/* ============ SCAN BUTTONS ============ */
.scan-buttons-wrap {
  background: var(--paper-warm);
  border: 1.5px solid var(--rule);
  padding: 18px 20px;
  margin-bottom: 18px;
}
.scan-buttons-wrap h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 6px;
}
.scan-buttons-wrap .scan-help {
  font-family: var(--serif);
  font-style: italic;
  font-size: 14px;
  color: var(--muted);
  margin-bottom: 14px;
  line-height: 1.45;
}
.scan-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 10px;
}
.scan-btn {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 14px;
  background: var(--paper);
  border: 1.5px solid var(--rule);
  text-decoration: none;
  color: var(--ink);
  font-family: var(--sans);
  font-size: 13px;
  cursor: pointer;
  transition: all 0.12s;
}
.scan-btn:hover {
  background: var(--ink);
  color: var(--paper);
  transform: translateY(-1px);
  box-shadow: 3px 3px 0 var(--gold);
}
.scan-btn .scan-icon {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  color: var(--red-deep);
  flex-shrink: 0;
  width: 28px;
}
.scan-btn:hover .scan-icon { color: var(--gold); }
.scan-btn .scan-label {
  font-weight: 600;
  letter-spacing: -0.01em;
  flex: 1;
}
.scan-btn .scan-arrow {
  font-size: 14px;
  color: var(--muted);
}
.scan-btn:hover .scan-arrow { color: var(--paper); }

/* ============ SAVED PLANS ============ */
.saved-plans {
  margin-top: 24px;
  padding-top: 20px;
  border-top: 1px solid var(--rule);
}
.saved-plans h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--muted);
  font-weight: 700;
  margin-bottom: 12px;
}
.saved-plan-item {
  padding: 10px 14px;
  background: var(--paper);
  border: 1px solid var(--muted);
  margin-bottom: 8px;
  display: flex;
  justify-content: space-between;
  gap: 12px;
  align-items: center;
  cursor: pointer;
  transition: background 0.12s, border-color 0.12s;
}
.saved-plan-item:hover { background: var(--paper-warm); border-color: var(--rule); }
.saved-plan-info { flex: 1; min-width: 0; }
.saved-plan-info .sp-prof {
  font-family: var(--serif);
  font-weight: 600;
  font-size: 15px;
  margin-bottom: 2px;
}
.saved-plan-info .sp-avt {
  font-size: 12px;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.saved-plan-actions { display: flex; gap: 6px; }
.sp-btn {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 5px 9px;
  border: 1px solid var(--muted);
  background: var(--paper);
  cursor: pointer;
}
.sp-btn:hover { background: var(--ink); color: var(--paper); border-color: var(--ink); }

/* ============ FOOTER ============ */
footer {
  border-top: 3px double var(--rule);
  padding: 30px 32px 50px;
  background: var(--paper);
  margin-top: 60px;
}
.footer-inner {
  max-width: 1100px;
  margin: 0 auto;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--muted);
  line-height: 1.7;
}
.footer-inner strong { color: var(--ink); font-weight: 700; }

</style>
</head>
<body>

<header class="masthead">
  <div class="masthead-inner">
    <div class="kicker">RISER Captain's Logic · Marketing Plan Generator · v1</div>
    <h1 class="title">Find Your Customers <em>·</em> Build the Plan</h1>
    <p class="subtitle">Tell me your profession and your target buyer. I'll return a real marketing plan — pain points in your buyer's words, the channels that actually work for your niche, a 90-day rollout, and the offer angle. Built on Hormozi, Brunson, Cialdini, and operator's discipline. No generic advice.</p>
    <div class="stages">
      <div class="stage-pill active" data-stage="setup"><span class="num">1</span><span>Profession & Avatar</span></div>
      <div class="stage-pill" data-stage="sharpen"><span class="num">2</span><span>Sharpen the Brief</span></div>
      <div class="stage-pill" data-stage="plan"><span class="num">3</span><span>The Plan</span></div>
    </div>
  </div>
</header>

<main>
  <!-- ========== STAGE 1: SETUP ========== -->
  <section class="stage active" id="stage-setup">
    <div class="stage-header">
      <h2>Stage 1 — Profession & Avatar</h2>
      <p>The avatar matters more than the profession. A tax attorney serving small business owners needs a fundamentally different plan than one serving HNW individuals — same profession, totally different acquisition channel.</p>
    </div>

    <div class="field field-primary">
      <div class="field-step-marker">Step 1 of 3 · The Foundation</div>
      <label class="field-label" for="profession">Your Profession <span class="field-required">*</span></label>
      <p class="field-help">Type the specific work you do. Suggestions appear as you type — pick one or just keep typing whatever describes your practice. <strong>The more specific, the sharper the plan.</strong></p>
      <div class="input-wrap">
        <input type="text" id="profession" placeholder="e.g. Forensic engineer specializing in HVAC failure analysis" autocomplete="off">
        <div class="autocomplete-list" id="autocomplete"></div>
      </div>
    </div>

    <div class="field">
      <label class="field-label">Your Target Avatar</label>
      <p class="field-help">Who specifically pays you? Be precise — title, industry, firm size, geography, the moment they need you. If you don't know yet, click "Show me archetypes" to see realistic options for your profession.</p>

      <div class="avatar-toggle">
        <button id="toggle-describe" class="active">Describe my avatar</button>
        <button id="toggle-pick">Show me archetypes</button>
      </div>

      <div id="avatar-describe-panel">
        <textarea id="avatar-text" placeholder="e.g. Insurance defense attorneys at mid-sized firms in Arizona handling commercial property subrogation cases involving HVAC/VRF failures. Senior associates and junior partners, billing $400-650/hr. They need credentialed experts who can write Daubert-defensible reports in 10-14 days."></textarea>
      </div>

      <div id="avatar-pick-panel" style="display: none;">
        <p class="field-help" style="margin-top: 0;">Click <strong>Show archetypes</strong> below to see four realistic buyer types for your profession. Pick one or use it as a starting point.</p>
        <button class="btn btn-primary" id="generate-archetypes" style="margin-bottom: 14px;">Show archetypes</button>
        <div class="archetype-grid" id="archetype-grid"></div>
      </div>
    </div>

    <!-- API key section -->
    <div class="api-key-section">
      <h3>Anthropic API Key</h3>
      <p>This widget calls the Anthropic API directly from your browser. Your key is stored only in your browser's localStorage — never sent anywhere except Anthropic. <a href="https://console.anthropic.com/settings/keys" target="_blank" rel="noopener">Get a key here</a> if you don't have one.</p>
      <input type="password" id="api-key" placeholder="sk-ant-…" autocomplete="off">
      <div class="model-toggle">
        <button id="model-sonnet" class="active" data-model="claude-sonnet-4-6">Sonnet 4.6 (faster · cheaper)</button>
        <button id="model-opus" data-model="claude-opus-4-7">Opus 4.7 (highest quality)</button>
      </div>
      <div class="toggle-row">
        <label><input type="checkbox" id="remember-key" checked> Remember key in this browser</label>
      </div>
    </div>

    <div class="btn-row">
      <button class="btn btn-primary" id="to-stage-2" disabled>Continue to Sharpen →</button>
    </div>
    <div id="setup-hint" style="font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; color: var(--red-deep); margin-top: 12px; padding: 10px 14px; background: var(--red-tint); border-left: 3px solid var(--red-deep); display: none;"></div>

    <div class="saved-plans" id="saved-plans-list" style="display: none;">
      <h3>Your saved plans</h3>
      <div id="saved-plans-content"></div>
    </div>
  </section>

  <!-- ========== STAGE 2: SHARPEN ========== -->
  <section class="stage" id="stage-sharpen">
    <div class="stage-header">
      <h2>Stage 2 — Sharpen the Brief</h2>
      <p>Four questions that adapt to your profession and avatar. They're not optional — the answers decide whether you get a generic plan or a real one.</p>
    </div>

    <div class="banner banner-info" id="sharpen-banner" style="display: none;">
      <strong>Generating sharpening questions for your specific situation…</strong>
    </div>

    <div id="sharpen-questions"></div>

    <div class="btn-row">
      <button class="btn btn-ghost" id="back-to-1">← Back</button>
      <button class="btn btn-primary" id="to-stage-3" disabled>Generate the plan →</button>
    </div>
  </section>

  <!-- ========== STAGE 3: PLAN ========== -->
  <section class="stage" id="stage-plan">
    <div class="stage-header">
      <h2>Stage 3 — Your Marketing Plan</h2>
      <p>Generated from your inputs. Save it. Print it. Tape it to the wall. Walk it for 90 days before deciding what's working.</p>
    </div>

    <div id="plan-loading" class="loading-state" style="display: none;">
      <div><span class="dot">•</span><span class="dot">•</span><span class="dot">•</span></div>
      <div class="step-text" id="loading-step">Reading your brief…</div>
    </div>

    <div id="plan-content"></div>

    <div class="btn-row" id="plan-actions" style="display: none;">
      <button class="btn btn-ghost" id="back-to-2">← Adjust inputs</button>
      <button class="btn" id="save-plan">Save this plan</button>
      <button class="btn" id="print-plan">Print</button>
      <button class="btn btn-primary" id="new-plan">New plan</button>
    </div>
  </section>
</main>

<footer>
  <div class="footer-inner">
    <strong>RISER Captain's Logic</strong> · Marketing Plan Generator v1 · April 2026 · Powered by Anthropic Claude API · Plans are AI-generated suggestions grounded in marketing fundamentals (Hormozi, Brunson, Cialdini, Schwartz). They are not guarantees, ROI projections, or substitutes for testing in your real market. Verify recommendations before investing time or money. No fabricated firm names, fake metrics, or invented case studies are produced — when the model lacks niche knowledge, it says so.
  </div>
</footer>

<script>
'use strict';

// =========================================================================
// PROFESSION AUTOCOMPLETE LIST — ~80 common B2B/professional services
// =========================================================================
const PROFESSIONS = [
  // Forensic & Engineering
  "Forensic engineer", "Forensic engineer specializing in HVAC/VRF systems",
  "Forensic engineer specializing in fire investigation",
  "Forensic engineer specializing in structural failure",
  "Forensic engineer specializing in vehicle accident reconstruction",
  "Forensic accountant", "Structural engineer", "Civil engineer",
  "Mechanical engineer", "Electrical engineer", "Geotechnical engineer",
  "Building envelope consultant", "MEP design consultant",
  // Legal-adjacent / Expert Witness
  "Expert witness consultant", "Litigation support specialist",
  "Medical-legal consultant", "Vocational rehabilitation expert",
  "Economic damages expert", "Premises liability expert",
  // Healthcare consulting
  "Independent medical examiner", "Medical chart review consultant",
  "Healthcare compliance consultant", "Medical practice consultant",
  // Trades & Inspection
  "Home inspector", "Commercial building inspector",
  "Industrial hygienist", "Environmental site assessor",
  "Mold remediation specialist", "Asbestos consultant",
  // Tax & Financial
  "Tax attorney", "Estate planning attorney",
  "Tax attorney serving high-net-worth individuals",
  "Tax attorney serving small businesses",
  "CPA serving small businesses", "CPA serving startups",
  "Financial advisor for physicians", "Financial advisor for tech executives",
  "Wealth manager", "Insurance broker", "Commercial insurance broker",
  // Marketing & Creative
  "Brand strategist", "Marketing consultant for SaaS startups",
  "Marketing consultant for law firms", "Marketing consultant for medical practices",
  "Wedding photographer", "Commercial photographer",
  "Brand designer", "UX/UI designer", "Web designer for small businesses",
  "Copywriter for B2B SaaS", "Direct response copywriter",
  // Tech consulting
  "Cybersecurity consultant", "DevOps consultant",
  "Cloud migration consultant", "Data engineering consultant",
  "AI/ML consultant", "IT consultant for small businesses",
  // HR & Recruiting
  "Executive recruiter", "Technical recruiter",
  "Compensation consultant", "HR consultant for startups",
  // Real Estate
  "Commercial real estate broker", "Industrial real estate broker",
  "Real estate agent serving luxury market",
  "Property manager for multi-family",
  // Coaching & Training
  "Executive coach", "Sales trainer", "Leadership development consultant",
  "Public speaking coach",
  // Manufacturing & Industrial
  "Manufacturing process consultant", "Lean manufacturing consultant",
  "Quality assurance consultant", "Supply chain consultant",
  // Construction
  "General contractor for high-end residential",
  "Construction defect consultant", "Construction project manager",
  // Architecture & Design
  "Residential architect", "Commercial architect",
  "Interior designer for hospitality",
  "Landscape architect"
];

// =========================================================================
// STATE
// =========================================================================
let state = {
  profession: '',
  avatar: '',
  avatarMode: 'describe', // 'describe' or 'pick'
  selectedArchetype: null,
  archetypes: [],
  sharpening: {}, // { question_id: answer }
  sharpeningQuestions: [],
  plan: null,
  apiKey: '',
  model: 'claude-sonnet-4-6'
};

// Load saved key if present
const savedKey = localStorage.getItem('riser_anthropic_key');
if (savedKey) {
  state.apiKey = savedKey;
  document.getElementById('api-key').value = savedKey;
}

// =========================================================================
// AUTOCOMPLETE
// =========================================================================
const profInput = document.getElementById('profession');
const acList = document.getElementById('autocomplete');
let acHighlight = -1;

function escapeHtml(s) {
  return String(s).replace(/[&<>"']/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
}

function renderAutocomplete(query) {
  if (!query || query.length < 2) { acList.classList.remove('visible'); return; }
  const q = query.toLowerCase();
  const matches = PROFESSIONS.filter(p => p.toLowerCase().includes(q)).slice(0, 8);
  if (matches.length === 0) { acList.classList.remove('visible'); return; }
  acList.innerHTML = matches.map((p, i) => {
    const idx = p.toLowerCase().indexOf(q);
    const before = escapeHtml(p.slice(0, idx));
    const match = escapeHtml(p.slice(idx, idx + q.length));
    const after = escapeHtml(p.slice(idx + q.length));
    return `<div class="autocomplete-item" data-idx="${i}">${before}<span class="match">${match}</span>${after}</div>`;
  }).join('');
  acList.classList.add('visible');
  acHighlight = -1;
  acList.querySelectorAll('.autocomplete-item').forEach((el, i) => {
    el.addEventListener('mousedown', e => {
      e.preventDefault();
      profInput.value = matches[i];
      state.profession = matches[i];
      acList.classList.remove('visible');
      checkSetupComplete();
    });
  });
}

profInput.addEventListener('input', e => {
  state.profession = e.target.value.trim();
  renderAutocomplete(state.profession);
  checkSetupComplete();
});
profInput.addEventListener('blur', () => {
  setTimeout(() => acList.classList.remove('visible'), 150);
});
profInput.addEventListener('keydown', e => {
  const items = acList.querySelectorAll('.autocomplete-item');
  if (!items.length || !acList.classList.contains('visible')) return;
  if (e.key === 'ArrowDown') {
    e.preventDefault();
    acHighlight = Math.min(acHighlight + 1, items.length - 1);
  } else if (e.key === 'ArrowUp') {
    e.preventDefault();
    acHighlight = Math.max(acHighlight - 1, -1);
  } else if (e.key === 'Enter' && acHighlight >= 0) {
    e.preventDefault();
    items[acHighlight].dispatchEvent(new MouseEvent('mousedown'));
    return;
  } else if (e.key === 'Escape') {
    acList.classList.remove('visible');
    return;
  }
  items.forEach((el, i) => el.classList.toggle('highlighted', i === acHighlight));
});

// =========================================================================
// AVATAR TOGGLE
// =========================================================================
const tgDescribe = document.getElementById('toggle-describe');
const tgPick = document.getElementById('toggle-pick');
const panelDescribe = document.getElementById('avatar-describe-panel');
const panelPick = document.getElementById('avatar-pick-panel');
const avatarText = document.getElementById('avatar-text');

tgDescribe.addEventListener('click', () => {
  state.avatarMode = 'describe';
  tgDescribe.classList.add('active');
  tgPick.classList.remove('active');
  panelDescribe.style.display = 'block';
  panelPick.style.display = 'none';
  state.selectedArchetype = null;
  checkSetupComplete();
});
tgPick.addEventListener('click', () => {
  state.avatarMode = 'pick';
  tgPick.classList.add('active');
  tgDescribe.classList.remove('active');
  panelDescribe.style.display = 'none';
  panelPick.style.display = 'block';
  state.avatar = '';
  checkSetupComplete();
});

avatarText.addEventListener('input', e => {
  state.avatar = e.target.value.trim();
  checkSetupComplete();
});

// =========================================================================
// API KEY + MODEL
// =========================================================================
document.getElementById('api-key').addEventListener('input', e => {
  state.apiKey = e.target.value.trim();
  if (document.getElementById('remember-key').checked && state.apiKey) {
    localStorage.setItem('riser_anthropic_key', state.apiKey);
  }
  checkSetupComplete();
});
document.getElementById('remember-key').addEventListener('change', e => {
  if (e.target.checked && state.apiKey) {
    localStorage.setItem('riser_anthropic_key', state.apiKey);
  } else {
    localStorage.removeItem('riser_anthropic_key');
  }
});
document.querySelectorAll('.model-toggle button').forEach(b => {
  b.addEventListener('click', () => {
    document.querySelectorAll('.model-toggle button').forEach(x => x.classList.remove('active'));
    b.classList.add('active');
    state.model = b.dataset.model;
  });
});

// =========================================================================
// CHECK STATE → ENABLE BUTTONS
// =========================================================================
function checkSetupComplete() {
  const hasProfession = state.profession.length >= 4;
  const hasAvatar = state.avatarMode === 'describe' ? state.avatar.length >= 20
                   : state.selectedArchetype !== null;
  const hasKey = state.apiKey.length >= 20;
  const ok = hasProfession && hasAvatar && hasKey;
  document.getElementById('to-stage-2').disabled = !ok;

  // Show what's missing
  const hint = document.getElementById('setup-hint');
  if (hint) {
    if (ok) {
      hint.style.display = 'none';
    } else {
      const missing = [];
      if (!hasProfession) missing.push('Profession (need at least 4 characters)');
      if (!hasAvatar) {
        missing.push(state.avatarMode === 'describe'
          ? 'Avatar description (need at least 20 characters)'
          : 'Avatar archetype (click one of the cards to select)');
      }
      if (!hasKey) missing.push('Anthropic API key (need at least 20 characters)');
      hint.textContent = 'Still needed: ' + missing.join(' · ');
      hint.style.display = 'block';
    }
  }
}

// =========================================================================
// ARCHETYPE GENERATION
// =========================================================================
const generateBtn = document.getElementById('generate-archetypes');
const archetypeGrid = document.getElementById('archetype-grid');

generateBtn.addEventListener('click', async () => {
  if (!state.profession || state.profession.length < 4) {
    alert('Enter your profession first.');
    return;
  }
  if (!state.apiKey) {
    alert('Enter your Anthropic API key first.');
    return;
  }
  generateBtn.disabled = true;
  generateBtn.textContent = 'Thinking…';
  archetypeGrid.innerHTML = '';
  try {
    const archetypes = await fetchArchetypes(state.profession);
    state.archetypes = archetypes;
    renderArchetypes(archetypes);
    generateBtn.textContent = 'Refresh archetypes';
    generateBtn.disabled = false;
  } catch (err) {
    archetypeGrid.innerHTML = `<div class="banner banner-warn"><strong>Couldn't generate archetypes.</strong> ${escapeHtml(err.message || 'Unknown error')}</div>`;
    generateBtn.textContent = 'Try again';
    generateBtn.disabled = false;
  }
});

function renderArchetypes(archetypes) {
  archetypeGrid.innerHTML = archetypes.map((a, i) => `
    <div class="archetype-card" data-idx="${i}">
      <h4>${escapeHtml(a.title)}</h4>
      <p>${escapeHtml(a.description)}</p>
    </div>
  `).join('');
  archetypeGrid.querySelectorAll('.archetype-card').forEach((card, i) => {
    card.addEventListener('click', () => {
      archetypeGrid.querySelectorAll('.archetype-card').forEach(c => c.classList.remove('selected'));
      card.classList.add('selected');
      state.selectedArchetype = archetypes[i];
      state.avatar = `${archetypes[i].title}. ${archetypes[i].description}`;
      checkSetupComplete();
    });
  });
}

// =========================================================================
// ANTHROPIC API CALLS
// =========================================================================
async function callClaude(systemPrompt, userMessage, opts = {}) {
  const body = {
    model: opts.model || state.model,
    max_tokens: opts.maxTokens || 4096,
    system: systemPrompt,
    messages: [{ role: 'user', content: userMessage }]
  };
  const response = await fetch('https://api.anthropic.com/v1/messages', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': state.apiKey,
      'anthropic-version': '2023-06-01',
      'anthropic-dangerous-direct-browser-access': 'true'
    },
    body: JSON.stringify(body)
  });
  if (!response.ok) {
    const errText = await response.text();
    throw new Error(`API error ${response.status}: ${errText.slice(0, 200)}`);
  }
  const data = await response.json();
  return data.content?.[0]?.text || '';
}

function extractJSON(text) {
  // Try fenced code block first
  const fenced = text.match(/```(?:json)?\s*([\s\S]*?)```/);
  if (fenced) {
    try { return JSON.parse(fenced[1].trim()); } catch (e) { /* fall through */ }
  }
  // Try first { … last }
  const start = text.indexOf('{');
  const end = text.lastIndexOf('}');
  if (start !== -1 && end > start) {
    try { return JSON.parse(text.slice(start, end + 1)); } catch (e) { /* fall through */ }
  }
  // Try array
  const arrStart = text.indexOf('[');
  const arrEnd = text.lastIndexOf(']');
  if (arrStart !== -1 && arrEnd > arrStart) {
    try { return JSON.parse(text.slice(arrStart, arrEnd + 1)); } catch (e) { /* fall through */ }
  }
  throw new Error('Could not parse JSON from response');
}

// ---------- Archetypes ----------
async function fetchArchetypes(profession) {
  const sys = `You are an expert B2B marketing strategist working in the lineage of Alex Hormozi (offers), Russell Brunson (Dream 100), Robert Cialdini (persuasion), and Eugene Schwartz (awareness staging). You produce realistic, specific buyer archetypes for a given profession.

CRITICAL RULES:
- Never invent fake firm names, fake people, fake testimonials, or fabricated metrics.
- Use realistic role titles, industry segments, and demographic detail that an experienced practitioner in that profession would recognize.
- If you genuinely don't know enough about a niche profession, output 2 archetypes maximum and note in the description that the model has limited niche knowledge.
- No generic categories like "small business owners" or "high-net-worth individuals" without specifying industry, geography style, or deeper context.

Return EXACTLY this JSON shape, no prose before or after:
{
  "archetypes": [
    { "title": "Short specific title (5-9 words)", "description": "One concrete sentence (20-35 words) describing who they are, where they work, and the moment they need this profession's services." }
  ]
}

Output 4 archetypes for the profession given. Each archetype must be MEANINGFULLY different from the others — not three flavors of the same buyer.`;

  const user = `Profession: ${profession}

Return 4 realistic, distinct buyer archetypes for this profession. Make them specific enough that someone in this field would say "yes, I'd recognize that buyer."`;

  const text = await callClaude(sys, user, { maxTokens: 1500 });
  const obj = extractJSON(text);
  if (!obj.archetypes || !Array.isArray(obj.archetypes)) throw new Error('No archetypes returned');
  return obj.archetypes;
}

// ---------- Sharpening Questions ----------
async function fetchSharpeningQuestions(profession, avatar) {
  const sys = `You are a B2B marketing strategist gathering the minimum viable inputs needed to build a real marketing plan. You ask 4 sharpening questions tailored to the specific profession + avatar combination.

CRITICAL RULES:
- Each question must change the marketing plan if answered differently. No throwaway demographic questions.
- Questions should cover: (1) geography or market scope, (2) price point or deal size, (3) current main acquisition source, (4) the biggest current bottleneck or constraint. Adapt these themes to the specific profession.
- Provide 3-5 short multiple-choice options per question PLUS a "free-text" fallback option labeled "Other (specify)".
- Questions should be 8-15 words each. Options should be 2-8 words each.

Return EXACTLY this JSON shape:
{
  "questions": [
    {
      "id": "geo",
      "question": "Question text here?",
      "options": ["Option 1", "Option 2", "Option 3", "Other (specify)"]
    }
  ]
}

Output 4 questions.`;

  const user = `Profession: ${profession}
Avatar: ${avatar}

Generate 4 sharpening questions specific to this combination.`;

  const text = await callClaude(sys, user, { maxTokens: 1500 });
  const obj = extractJSON(text);
  if (!obj.questions || !Array.isArray(obj.questions)) throw new Error('No questions returned');
  return obj.questions;
}

// ---------- The Plan ----------
async function fetchPlan(profession, avatar, sharpening) {
  const sys = `You are a B2B marketing strategist working in the lineage of Alex Hormozi, Russell Brunson, Robert Cialdini, and Eugene Schwartz. You produce real, specific marketing plans for professional service providers.

CRITICAL RULES — these are non-negotiable:
1. NEVER invent fake firm names, fake testimonials, fake quotes from real people, or fabricated ROI metrics.
2. NEVER write "this strategy generates X leads per month" or any specific outcome guarantee.
3. Use REALISTIC pain language — what the avatar would actually say in their own words. Quote them as if you're paraphrasing real discovery calls. Mark all such quotes as "representative" not "verified."
4. If you lack deep knowledge of a niche profession, say so explicitly in the caveats section. Don't bluff.
5. Channel recommendations must be SPECIFIC — name actual platforms, associations, or directories where this avatar gathers, not "social media" or "online communities."
6. The plan must reflect what the operator answered in the sharpening questions. If they said "I'm at $400/hr in Phoenix," don't recommend a strategy designed for $50/hr nationwide work.

Marketing fundamentals to apply:
- Hormozi's Value Equation (Dream Outcome × Perceived Likelihood) / (Time Delay × Effort)
- Brunson's Dream 100 (find the people who already gathered your audience)
- Cialdini's principles (reciprocity, social proof, authority, scarcity, unity, consistency, liking)
- Schwartz awareness staging (unaware → problem-aware → solution-aware → product-aware → most-aware)
- The six-step buyer journey: Identify → Get Listed → Trigger Reciprocity → Capture Intent → Convert Warm → Compound

Return EXACTLY this JSON structure (no prose before or after, no markdown fences):
{
  "avatar_profile": "A 2-3 sentence refined description of the avatar incorporating the sharpening answers.",
  "pain_points": [
    {
      "pain": "Specific pain in 1 sentence.",
      "quote": "Verbatim language they'd use to describe this pain (1-2 sentences, in their voice).",
      "intensity": "high|medium|low",
      "why_it_matters": "1 sentence on why this pain drives buying behavior."
    }
  ],
  "where_they_gather": [
    { "place": "Specific platform/association/publication name", "what_to_do_there": "Concrete action: post, attend, speak, sponsor, list, etc." }
  ],
  "channels": [
    { "rank": 1, "channel": "Channel name", "reasoning": "Why this is #1 for this specific avatar (2-3 sentences)." }
  ],
  "lead_magnet": {
    "title": "Specific lead magnet title (the gift you give first)",
    "description": "What it is and why it triggers reciprocity for this avatar (2-3 sentences).",
    "format": "PDF / checklist / calculator / template / etc."
  },
  "hook_and_headline": {
    "hook": "First-3-seconds attention grabber in the avatar's language (1 sentence).",
    "headline": "The promise. Format: outcome in timeframe without objection (1 sentence).",
    "body_skeleton": "5-line body structure: problem → status quo → mechanism → proof → CTA (write the actual draft, ~80 words)."
  },
  "cadence_30_60_90": {
    "days_1_30": ["Action 1", "Action 2", "Action 3"],
    "days_31_60": ["Action 1", "Action 2", "Action 3"],
    "days_61_90": ["Action 1", "Action 2", "Action 3"]
  },
  "offer_angle": {
    "named_mechanism": "Name the method/system/protocol you sell. Specific.",
    "core_promise": "1 sentence the avatar would pay for.",
    "proof_strategy": "How you build perceived likelihood (Hormozi value equation numerator)."
  },
  "outreach_scripts": {
    "linkedin_first_touch": "A 4-6 sentence first-touch LinkedIn message. NO PITCH. Lead with genuine reciprocity (gift, observation, or specific compliment grounded in something the recipient actually does). Reference the avatar's pain in their own language. Use [FIRST NAME] and [SPECIFIC THING THEY DO] as obvious user-fill placeholders. End with a low-friction question, NOT a meeting ask.",
    "cold_email": "A 5-8 sentence cold email. Subject line first (in format 'Subject: ...'), then body. Open by naming the avatar's pain in their language (no 'Hope you're well'). Reference one specific concrete trigger that would make them care RIGHT NOW. Close with a single specific ask. Use [FIRST NAME], [FIRM NAME], etc. as obvious placeholders.",
    "reddit_or_community_reply": "A 4-7 sentence template for replying to a relevant post in the avatar's community (Reddit, LinkedIn, association forum). Lead with genuine helpful answer to whatever question/pain was posted. Mention you have a related resource ONLY at the end and ONLY if the post explicitly asks for one. Otherwise just be helpful and let the credibility compound."
  },
  "caveats": [
    "Honest limitation 1 (e.g., niche knowledge, unverified assumption, tested at higher/lower price points)."
  ]
}

Required counts:
- pain_points: exactly 3
- where_they_gather: 4-6 entries
- channels: 3 ranked entries
- caveats: 2-4 honest limitations

CRITICAL for outreach_scripts:
- Use [BRACKETS] for ALL user-fill placeholders so they're obvious
- Never invent a real person's name in any script
- Never write fake testimonials, fake company names, or fake metrics in the scripts
- Each script should sound like a literate professional, not a marketer cosplaying empathy`;

  const sharpeningStr = Object.entries(sharpening)
    .map(([k, v]) => `Q (${k}): ${v.question}\nA: ${v.answer}`)
    .join('\n\n');

  const user = `Profession: ${profession}

Avatar: ${avatar}

Sharpening answers:
${sharpeningStr}

Build the marketing plan.`;

  const text = await callClaude(sys, user, { maxTokens: 6000 });
  const obj = extractJSON(text);
  // Validate required fields
  const required = ['avatar_profile', 'pain_points', 'where_they_gather', 'channels', 'lead_magnet', 'hook_and_headline', 'cadence_30_60_90', 'offer_angle', 'outreach_scripts', 'caveats'];
  for (const k of required) {
    if (!(k in obj)) throw new Error(`Plan missing required field: ${k}`);
  }
  return obj;
}

// =========================================================================
// STAGE TRANSITIONS
// =========================================================================
function showStage(name) {
  document.querySelectorAll('.stage').forEach(s => s.classList.remove('active'));
  document.getElementById('stage-' + name).classList.add('active');
  document.querySelectorAll('.stage-pill').forEach(p => {
    p.classList.remove('active', 'complete');
    if (p.dataset.stage === name) p.classList.add('active');
  });
  // Mark earlier stages complete
  const order = ['setup', 'sharpen', 'plan'];
  const idx = order.indexOf(name);
  for (let i = 0; i < idx; i++) {
    document.querySelector(`.stage-pill[data-stage="${order[i]}"]`).classList.add('complete');
  }
  window.scrollTo({ top: 0, behavior: 'smooth' });
}

// To Stage 2
document.getElementById('to-stage-2').addEventListener('click', async () => {
  showStage('sharpen');
  const banner = document.getElementById('sharpen-banner');
  banner.style.display = 'block';
  banner.className = 'banner banner-info';
  banner.innerHTML = '<strong>Generating sharpening questions for your specific situation…</strong>';
  document.getElementById('sharpen-questions').innerHTML = '';
  document.getElementById('to-stage-3').disabled = true;
  try {
    const questions = await fetchSharpeningQuestions(state.profession, state.avatar);
    state.sharpeningQuestions = questions;
    state.sharpening = {};
    renderSharpeningQuestions(questions);
    banner.style.display = 'none';
  } catch (err) {
    banner.className = 'banner banner-warn';
    banner.innerHTML = `<strong>Couldn't generate questions.</strong> ${escapeHtml(err.message || 'Unknown error')}<br>You can still proceed — the plan generator will work with the avatar info you provided.`;
    // Provide a minimal fallback
    state.sharpeningQuestions = [
      { id: 'geo', question: 'What is your geographic scope?', options: ['Local/regional', 'Statewide', 'National', 'International', 'Other (specify)'] },
      { id: 'price', question: 'Roughly what is your price point per engagement?', options: ['Under $1k', '$1k–$10k', '$10k–$50k', '$50k+', 'Other (specify)'] },
      { id: 'source', question: 'What is your current main client acquisition source?', options: ['Referrals', 'Online search', 'Networking', 'Outbound', 'Other (specify)'] },
      { id: 'bottleneck', question: 'What is your biggest current acquisition bottleneck?', options: ['Not enough leads', 'Wrong-fit leads', 'Slow conversion', 'Other (specify)'] }
    ];
    state.sharpening = {};
    renderSharpeningQuestions(state.sharpeningQuestions);
  }
});

document.getElementById('back-to-1').addEventListener('click', () => showStage('setup'));
document.getElementById('back-to-2').addEventListener('click', () => showStage('sharpen'));

function renderSharpeningQuestions(questions) {
  const html = questions.map((q, qi) => `
    <div class="field">
      <label class="field-label">${qi + 1}. ${escapeHtml(q.question)}</label>
      <div class="archetype-grid" style="grid-template-columns: 1fr 1fr; gap: 10px;">
        ${q.options.map((opt, oi) => `
          <div class="archetype-card sharpening-option" data-qid="${q.id}" data-question="${escapeHtml(q.question)}" data-option="${escapeHtml(opt)}" data-qi="${qi}" data-oi="${oi}" style="padding: 12px 14px;">
            <h4 style="font-size: 15px; margin-bottom: 0;">${escapeHtml(opt)}</h4>
          </div>
        `).join('')}
      </div>
      <div class="sharpening-other" data-qid="${q.id}" style="display:none; margin-top: 10px;">
        <input type="text" class="sharpening-other-input" data-qid="${q.id}" placeholder="Specify…">
      </div>
    </div>
  `).join('');
  document.getElementById('sharpen-questions').innerHTML = html;

  document.querySelectorAll('.sharpening-option').forEach(opt => {
    opt.addEventListener('click', () => {
      const qi = opt.dataset.qi;
      // Deselect siblings in same question
      document.querySelectorAll(`.sharpening-option[data-qi="${qi}"]`).forEach(s => s.classList.remove('selected'));
      opt.classList.add('selected');
      const qid = opt.dataset.qid;
      const isOther = opt.dataset.option.toLowerCase().startsWith('other');
      const otherDiv = document.querySelector(`.sharpening-other[data-qid="${qid}"]`);
      if (isOther) {
        otherDiv.style.display = 'block';
        const inp = otherDiv.querySelector('input');
        inp.focus();
        inp.oninput = () => {
          state.sharpening[qid] = { question: opt.dataset.question, answer: inp.value.trim() || 'Other (not specified)' };
          updateSharpenButton();
        };
        state.sharpening[qid] = { question: opt.dataset.question, answer: 'Other (not specified)' };
      } else {
        otherDiv.style.display = 'none';
        state.sharpening[qid] = { question: opt.dataset.question, answer: opt.dataset.option };
      }
      updateSharpenButton();
    });
  });
}

function updateSharpenButton() {
  const allAnswered = state.sharpeningQuestions.every(q => state.sharpening[q.id]);
  document.getElementById('to-stage-3').disabled = !allAnswered;
}

// To Stage 3 — Generate plan
document.getElementById('to-stage-3').addEventListener('click', async () => {
  showStage('plan');
  document.getElementById('plan-loading').style.display = 'block';
  document.getElementById('plan-content').innerHTML = '';
  document.getElementById('plan-actions').style.display = 'none';

  const steps = [
    'Reading your brief…',
    'Identifying the avatar\'s real pain points…',
    'Mapping the channels that work for this niche…',
    'Drafting hook and lead magnet copy…',
    'Building the 90-day cadence…',
    'Writing the offer angle…',
    'Finalizing the plan…'
  ];
  let stepIdx = 0;
  const stepEl = document.getElementById('loading-step');
  stepEl.textContent = steps[0];
  const stepInterval = setInterval(() => {
    stepIdx = Math.min(stepIdx + 1, steps.length - 1);
    stepEl.textContent = steps[stepIdx];
  }, 4000);

  try {
    const plan = await fetchPlan(state.profession, state.avatar, state.sharpening);
    state.plan = plan;
    clearInterval(stepInterval);
    document.getElementById('plan-loading').style.display = 'none';
    renderPlan(plan);
    document.getElementById('plan-actions').style.display = 'flex';
  } catch (err) {
    clearInterval(stepInterval);
    document.getElementById('plan-loading').style.display = 'none';
    document.getElementById('plan-content').innerHTML = `<div class="banner banner-warn"><strong>Plan generation failed.</strong> ${escapeHtml(err.message || 'Unknown error')}<br><br>This usually means: API key missing or invalid · rate limit hit · network error · the model returned malformed JSON.<br><br>Click "Adjust inputs" below to revise and try again.</div>`;
    document.getElementById('plan-actions').style.display = 'flex';
  }
});

// =========================================================================
// PLAN RENDERING
// =========================================================================

// Build a compact keyword string from profession + avatar + lead pain
function buildSearchKeywords(plan) {
  const words = new Set();
  // Pull strong keywords from avatar (first 8 meaningful words)
  const avatarWords = (state.avatar || '').toLowerCase()
    .replace(/[^\w\s]/g, ' ')
    .split(/\s+/)
    .filter(w => w.length > 3 && !STOPWORDS.has(w))
    .slice(0, 6);
  avatarWords.forEach(w => words.add(w));
  // Pull from first pain point if available
  if (plan && plan.pain_points && plan.pain_points[0]) {
    const painWords = plan.pain_points[0].pain.toLowerCase()
      .replace(/[^\w\s]/g, ' ')
      .split(/\s+/)
      .filter(w => w.length > 4 && !STOPWORDS.has(w))
      .slice(0, 3);
    painWords.forEach(w => words.add(w));
  }
  return Array.from(words).slice(0, 6).join(' ');
}

const STOPWORDS = new Set([
  'their','they','them','this','that','these','those','with','from','have','need',
  'about','will','would','should','could','than','then','also','because','through',
  'where','what','which','when','while','more','most','some','many','other','such',
  'into','onto','upon','over','under','after','before','between','during','within',
  'against','very','just','only','even','same','being','having','doing','make',
  'made','taken','given','said','people','person','users','user','business','companies',
  'company','professional','professionals','services','service','industry','market',
  'specific','specifically','really','actually','sized','typically','generally'
]);

function wireScanButtons() {
  const grid = document.getElementById('scan-grid');
  if (!grid || !state.plan) return;

  const keywords = buildSearchKeywords(state.plan);
  const profession = state.profession;
  const avatarShort = state.selectedArchetype ? state.selectedArchetype.title : state.avatar.slice(0, 80);

  // Build target URLs
  const redditQuery = encodeURIComponent(keywords);
  const googleRedditQuery = encodeURIComponent(`site:reddit.com ${keywords}`);
  const linkedinQuery = encodeURIComponent(avatarShort);
  const fullKeywordsForClipboard = `Profession: ${profession}\nAvatar: ${avatarShort}\nKeywords: ${keywords}\nLead pain: ${state.plan.pain_points?.[0]?.pain || ''}`;

  const buttons = [
    {
      label: 'Reddit · search',
      icon: 'RDT',
      url: `https://www.reddit.com/search/?q=${redditQuery}`,
      type: 'link'
    },
    {
      label: 'Google site:reddit',
      icon: 'GGL',
      url: `https://www.google.com/search?q=${googleRedditQuery}`,
      type: 'link'
    },
    {
      label: 'LinkedIn · people search',
      icon: 'LI',
      url: `https://www.linkedin.com/search/results/people/?keywords=${linkedinQuery}`,
      type: 'link'
    },
    {
      label: 'PainOnSocial · copy keywords',
      icon: 'POS',
      url: 'https://www.painonsocial.com/',
      type: 'copy-and-link',
      copyText: fullKeywordsForClipboard
    },
    {
      label: 'SparkToro · copy avatar',
      icon: 'SPK',
      url: 'https://sparktoro.com/',
      type: 'copy-and-link',
      copyText: avatarShort
    },
    {
      label: 'AnswerThePublic · search',
      icon: 'ATP',
      url: `https://answerthepublic.com/?q=${redditQuery}&search=&hl=en`,
      type: 'link'
    }
  ];

  grid.innerHTML = buttons.map((b, i) => `
    <a class="scan-btn" data-idx="${i}" ${b.type === 'link' ? `href="${b.url}" target="_blank" rel="noopener"` : 'href="#"'}>
      <span class="scan-icon">${b.icon}</span>
      <span class="scan-label">${escapeHtml(b.label)}</span>
      <span class="scan-arrow">→</span>
    </a>
  `).join('');

  grid.querySelectorAll('.scan-btn').forEach((el, i) => {
    const cfg = buttons[i];
    if (cfg.type === 'copy-and-link') {
      el.addEventListener('click', e => {
        e.preventDefault();
        navigator.clipboard.writeText(cfg.copyText).then(() => {
          const orig = el.querySelector('.scan-label').textContent;
          el.querySelector('.scan-label').textContent = 'Copied — opening tool…';
          setTimeout(() => {
            el.querySelector('.scan-label').textContent = orig;
            window.open(cfg.url, '_blank', 'noopener');
          }, 700);
        }).catch(() => {
          window.open(cfg.url, '_blank', 'noopener');
        });
      });
    }
  });
}

function renderPlan(p) {
  const intensityColor = { high: 'var(--red-deep)', medium: 'var(--gold)', low: 'var(--teal)' };
  const profession = state.profession;
  const avatar = state.selectedArchetype ? state.selectedArchetype.title : (state.avatar.length > 100 ? state.avatar.slice(0, 100) + '…' : state.avatar);

  let html = `
    <div class="plan-summary">
      <h3>The Brief</h3>
      <div class="profession">${escapeHtml(profession)}</div>
      <div class="avatar">Targeting: ${escapeHtml(avatar)}</div>
    </div>

    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">01</div>
        <h3>Avatar Profile</h3>
      </div>
      <p>${escapeHtml(p.avatar_profile)}</p>
    </div>

    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">02</div>
        <h3>The 3 Pain Points</h3>
      </div>
  `;
  p.pain_points.forEach((pp, i) => {
    html += `
      <div style="margin-bottom: 18px; ${i < p.pain_points.length - 1 ? 'border-bottom: 1px dashed var(--muted); padding-bottom: 18px;' : ''}">
        <p style="font-weight: 600; font-family: var(--serif); font-size: 17px; margin-bottom: 6px;">Pain ${i+1}: ${escapeHtml(pp.pain)}</p>
        <div class="pain-quote">"${escapeHtml(pp.quote)}"</div>
        <div class="pain-meta" style="color: ${intensityColor[pp.intensity] || 'var(--muted)'};">Intensity: ${escapeHtml(pp.intensity)}</div>
        <p style="margin-top: 8px; font-size: 14px; color: var(--muted); font-style: italic;">${escapeHtml(pp.why_it_matters)}</p>
      </div>
    `;
  });
  html += `</div>`;

  html += `
    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">03</div>
        <h3>Where They Gather</h3>
      </div>
      <ul>
        ${p.where_they_gather.map(w => `<li><strong>${escapeHtml(w.place)}</strong> — ${escapeHtml(w.what_to_do_there)}</li>`).join('')}
      </ul>
    </div>

    <div class="scan-buttons-wrap">
      <h3>Run pain scans · external tools</h3>
      <p class="scan-help">One-click into the tools that actually mine pain language. Reddit and Google searches launch with your keywords pre-filled. PainOnSocial and SparkToro require login; the keyword set is copied to your clipboard so you can paste once you're in.</p>
      <div class="scan-grid" id="scan-grid"></div>
    </div>

    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">04</div>
        <h3>Channel Priority</h3>
      </div>
      ${p.channels.map(c => `
        <div class="channel-priority">
          <div class="channel-rank">${c.rank}</div>
          <div>
            <div class="channel-name">${escapeHtml(c.channel)}</div>
            <div class="channel-reason">${escapeHtml(c.reasoning)}</div>
          </div>
        </div>
      `).join('')}
    </div>

    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">05</div>
        <h3>The Lead Magnet (Gift First)</h3>
      </div>
      <p style="font-weight: 600; font-family: var(--serif); font-size: 18px;">${escapeHtml(p.lead_magnet.title)}</p>
      <p>${escapeHtml(p.lead_magnet.description)}</p>
      <p class="pain-meta">Format: ${escapeHtml(p.lead_magnet.format)}</p>
    </div>

    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">06</div>
        <h3>Hook, Headline & Body</h3>
      </div>
      <p style="font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--red-deep); font-weight: 700; margin-top: 6px;">Hook</p>
      <div class="copy-block">${escapeHtml(p.hook_and_headline.hook)}</div>
      <p style="font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--red-deep); font-weight: 700;">Headline</p>
      <div class="copy-block">${escapeHtml(p.hook_and_headline.headline)}</div>
      <p style="font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--red-deep); font-weight: 700;">Body skeleton</p>
      <div class="copy-block">${escapeHtml(p.hook_and_headline.body_skeleton)}</div>
    </div>

    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">07</div>
        <h3>30 / 60 / 90-Day Cadence</h3>
      </div>
      <div class="cadence-grid">
        <div class="cadence-card">
          <h5>Days 1–30</h5>
          <ul>${p.cadence_30_60_90.days_1_30.map(a => `<li>${escapeHtml(a)}</li>`).join('')}</ul>
        </div>
        <div class="cadence-card">
          <h5>Days 31–60</h5>
          <ul>${p.cadence_30_60_90.days_31_60.map(a => `<li>${escapeHtml(a)}</li>`).join('')}</ul>
        </div>
        <div class="cadence-card">
          <h5>Days 61–90</h5>
          <ul>${p.cadence_30_60_90.days_61_90.map(a => `<li>${escapeHtml(a)}</li>`).join('')}</ul>
        </div>
      </div>
    </div>

    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">08</div>
        <h3>Offer Angle (Hormozi)</h3>
      </div>
      <p><strong>Named mechanism:</strong> ${escapeHtml(p.offer_angle.named_mechanism)}</p>
      <p><strong>Core promise:</strong> ${escapeHtml(p.offer_angle.core_promise)}</p>
      <p><strong>Proof strategy:</strong> ${escapeHtml(p.offer_angle.proof_strategy)}</p>
    </div>

    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">09</div>
        <h3>Outreach Scripts — Channel-Specific Drafts</h3>
      </div>
      <p style="font-family: var(--serif); font-style: italic; color: var(--muted); font-size: 14px; margin-bottom: 16px;">Three drafts tuned to your avatar and channels. Anything in [BRACKETS] is a placeholder you fill in. These are starting points — read them aloud, edit until they sound like you, then send.</p>

      <div class="script-card">
        <div class="script-header">
          <span class="script-channel-num">A</span>
          <h4>LinkedIn First Touch</h4>
          <button class="copy-btn" data-copy-target="script-linkedin">Copy</button>
        </div>
        <div class="script-body" id="script-linkedin">${escapeHtml(p.outreach_scripts.linkedin_first_touch)}</div>
      </div>

      <div class="script-card">
        <div class="script-header">
          <span class="script-channel-num">B</span>
          <h4>Cold Email</h4>
          <button class="copy-btn" data-copy-target="script-email">Copy</button>
        </div>
        <div class="script-body" id="script-email">${escapeHtml(p.outreach_scripts.cold_email)}</div>
      </div>

      <div class="script-card">
        <div class="script-header">
          <span class="script-channel-num">C</span>
          <h4>Reddit / Community Reply</h4>
          <button class="copy-btn" data-copy-target="script-reddit">Copy</button>
        </div>
        <div class="script-body" id="script-reddit">${escapeHtml(p.outreach_scripts.reddit_or_community_reply)}</div>
      </div>
    </div>

    <div class="plan-section">
      <div class="plan-section-header">
        <div class="plan-section-num">10</div>
        <h3>Caveats — What Could Go Wrong</h3>
      </div>
      ${p.caveats.map(c => `<div class="caveat-box">${escapeHtml(c)}</div>`).join('')}
    </div>
  `;

  document.getElementById('plan-content').innerHTML = html;

  // Wire up copy buttons (after innerHTML is set)
  document.querySelectorAll('.copy-btn').forEach(btn => {
    btn.addEventListener('click', () => {
      const target = document.getElementById(btn.dataset.copyTarget);
      if (!target) return;
      navigator.clipboard.writeText(target.textContent).then(() => {
        const orig = btn.textContent;
        btn.textContent = 'Copied ✓';
        btn.classList.add('copied');
        setTimeout(() => { btn.textContent = orig; btn.classList.remove('copied'); }, 1600);
      }).catch(() => { btn.textContent = 'Copy failed'; });
    });
  });

  // Wire up scan buttons after render
  wireScanButtons();
}

// =========================================================================
// SAVED PLANS
// =========================================================================
const SAVED_KEY = 'riser_marketing_plans_v1';

function loadSavedPlans() {
  try {
    return JSON.parse(localStorage.getItem(SAVED_KEY) || '[]');
  } catch (e) { return []; }
}

function savePlan() {
  if (!state.plan) return;
  const plans = loadSavedPlans();
  const id = Date.now().toString();
  plans.unshift({
    id,
    profession: state.profession,
    avatar: state.avatar,
    selectedArchetype: state.selectedArchetype,
    sharpening: state.sharpening,
    plan: state.plan,
    savedAt: new Date().toISOString()
  });
  localStorage.setItem(SAVED_KEY, JSON.stringify(plans.slice(0, 30))); // cap at 30
  renderSavedPlans();
  alert('Plan saved.');
}

function renderSavedPlans() {
  const plans = loadSavedPlans();
  const list = document.getElementById('saved-plans-list');
  const content = document.getElementById('saved-plans-content');
  if (plans.length === 0) {
    list.style.display = 'none';
    return;
  }
  list.style.display = 'block';
  content.innerHTML = plans.map(p => {
    const date = new Date(p.savedAt).toLocaleDateString();
    const avatarShort = (p.selectedArchetype?.title) || (p.avatar.length > 70 ? p.avatar.slice(0, 70) + '…' : p.avatar);
    return `
      <div class="saved-plan-item" data-id="${p.id}">
        <div class="saved-plan-info">
          <div class="sp-prof">${escapeHtml(p.profession)}</div>
          <div class="sp-avt">${escapeHtml(avatarShort)} · saved ${date}</div>
        </div>
        <div class="saved-plan-actions">
          <button class="sp-btn sp-load" data-id="${p.id}">Load</button>
          <button class="sp-btn sp-delete" data-id="${p.id}">×</button>
        </div>
      </div>
    `;
  }).join('');
  content.querySelectorAll('.sp-load').forEach(b => {
    b.addEventListener('click', e => {
      e.stopPropagation();
      const p = plans.find(x => x.id === b.dataset.id);
      if (!p) return;
      state.profession = p.profession;
      state.avatar = p.avatar;
      state.selectedArchetype = p.selectedArchetype;
      state.sharpening = p.sharpening;
      state.plan = p.plan;
      showStage('plan');
      renderPlan(p.plan);
      document.getElementById('plan-actions').style.display = 'flex';
    });
  });
  content.querySelectorAll('.sp-delete').forEach(b => {
    b.addEventListener('click', e => {
      e.stopPropagation();
      if (!confirm('Delete this plan?')) return;
      const filtered = plans.filter(x => x.id !== b.dataset.id);
      localStorage.setItem(SAVED_KEY, JSON.stringify(filtered));
      renderSavedPlans();
    });
  });
}

document.getElementById('save-plan').addEventListener('click', savePlan);
document.getElementById('print-plan').addEventListener('click', () => window.print());
document.getElementById('new-plan').addEventListener('click', () => {
  state.plan = null;
  state.sharpening = {};
  state.sharpeningQuestions = [];
  document.getElementById('avatar-text').value = '';
  document.getElementById('profession').value = '';
  state.profession = '';
  state.avatar = '';
  state.selectedArchetype = null;
  archetypeGrid.innerHTML = '';
  generateBtn.textContent = 'Show archetypes';
  showStage('setup');
  checkSetupComplete();
});

// Init
renderSavedPlans();
checkSetupComplete(); // Fix: saved API key wasn't enabling the button on page load
console.log('RISER Marketing Plan Generator loaded. Professions:', PROFESSIONS.length);
console.log('Initial state:', {
  professionLen: state.profession.length,
  avatarLen: state.avatar.length,
  avatarMode: state.avatarMode,
  selectedArchetype: state.selectedArchetype,
  apiKeyLen: state.apiKey.length
});
</script>

</body>
</html>
Original asset: RISER-MVO-Widget-Direct.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RISER MVO Widget — Idea or No Idea</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,700;0,9..144,900;1,9..144,400;1,9..144,500&family=JetBrains+Mono:wght@400;500;700&family=Inter+Tight:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
  :root {
    --ink: #0a0a0a;
    --paper: #f7f4ee;
    --paper-warm: #f0eadf;
    --paper-deep: #e9e2d2;
    --rule: #1a1a1a;
    --red: #c9302a;
    --red-deep: #8b1f1c;
    --red-tint: #fbe8e6;
    --red-soft: #f9d8d5;
    --green: #1d6e3a;
    --green-tint: #dcefe2;
    --gold: #b8893a;
    --gold-tint: #f5ead0;
    --teal: #2c5f5a;
    --muted: #5a564f;
    --serif: 'Fraunces', Georgia, serif;
    --sans: 'Inter Tight', -apple-system, sans-serif;
    --mono: 'JetBrains Mono', Menlo, monospace;
  }
  * { box-sizing: border-box; margin: 0; padding: 0; }
  html { scroll-behavior: smooth; }
  body {
    background: var(--paper);
    color: var(--ink);
    font-family: var(--serif);
    font-size: 17px;
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
    min-height: 100vh;
    background-image:
      radial-gradient(circle at 15% 25%, rgba(201, 48, 42, 0.04) 0, transparent 40%),
      radial-gradient(circle at 85% 75%, rgba(184, 137, 58, 0.035) 0, transparent 45%);
  }

  /* APP SHELL */
  .app {
    max-width: 980px;
    margin: 0 auto;
    padding: 32px 28px 80px;
  }

  /* HEADER */
  .app-header {
    border-top: 8px solid var(--ink);
    border-bottom: 1px solid var(--ink);
    padding: 18px 0 22px;
    margin-bottom: 28px;
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 20px;
    align-items: end;
  }
  .app-header .meta {
    font-family: var(--mono);
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    color: var(--muted);
    margin-bottom: 8px;
  }
  .app-header .meta .red { color: var(--red); }
  .app-header h1 {
    font-family: var(--serif);
    font-weight: 900;
    font-size: clamp(34px, 5vw, 52px);
    line-height: 0.95;
    letter-spacing: -0.025em;
  }
  .app-header h1 em { font-style: italic; font-weight: 500; color: var(--red); }
  .app-header .deck {
    font-family: var(--serif);
    font-style: italic;
    font-size: 15px;
    color: var(--muted);
    line-height: 1.4;
    margin-top: 8px;
    max-width: 540px;
  }
  .header-actions {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    justify-content: flex-end;
  }
  .btn-mini {
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    padding: 7px 11px;
    background: var(--paper);
    border: 1px solid var(--ink);
    color: var(--ink);
    cursor: pointer;
    font-weight: 600;
    transition: all 0.15s ease;
    white-space: nowrap;
  }
  .btn-mini:hover {
    background: var(--ink);
    color: var(--paper);
  }
  .btn-mini.danger:hover {
    background: var(--red);
    color: var(--paper);
    border-color: var(--red);
  }

  /* PROGRESS RAIL */
  .progress-rail {
    display: grid;
    grid-template-columns: repeat(17, 1fr);
    gap: 2px;
    margin-bottom: 28px;
    padding: 0;
  }
  .gate-cell {
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 8px 2px 6px;
    background: var(--paper-warm);
    border: 1px solid var(--paper-deep);
    cursor: pointer;
    transition: all 0.15s ease;
    position: relative;
    text-align: center;
    min-width: 0;
  }
  .gate-cell:hover { background: var(--paper-deep); }
  .gate-cell.active {
    background: var(--ink);
    border-color: var(--ink);
    color: var(--paper);
  }
  .gate-cell.go { background: var(--green-tint); border-color: var(--green); }
  .gate-cell.no { background: #4a1010; border-color: #4a1010; color: var(--paper); }
  .gate-cell.rework { background: var(--gold-tint); border-color: var(--gold); }
  .gate-cell.active.go { background: var(--green); color: var(--paper); }
  .gate-cell.active.no { background: var(--red); color: var(--paper); border-color: var(--red); }
  .gate-cell.active.rework { background: var(--gold); color: var(--paper); border-color: var(--gold); }
  .gate-cell .num {
    font-family: var(--mono);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.03em;
    white-space: nowrap;
  }
  .gate-cell .name {
    font-family: var(--sans);
    font-size: 8.5px;
    font-weight: 600;
    line-height: 1.1;
    margin-top: 3px;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;
  }

  /* GATE SCREEN */
  .gate-screen {
    display: none;
    animation: fadeIn 0.25s ease;
  }
  .gate-screen.visible { display: block; }
  @keyframes fadeIn { from { opacity: 0; transform: translateY(4px);} to { opacity: 1; transform: none;} }

  .gate-rubric {
    font-family: var(--mono);
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    color: var(--red);
    margin-bottom: 6px;
    display: flex;
    align-items: center;
    gap: 10px;
  }
  .gate-rubric::before {
    content: '';
    width: 22px; height: 2px;
    background: var(--red);
  }

  .gate-screen h2 {
    font-family: var(--serif);
    font-weight: 700;
    font-size: clamp(28px, 4.2vw, 42px);
    line-height: 1.05;
    letter-spacing: -0.02em;
    margin-bottom: 10px;
  }
  .gate-screen h2 em { font-style: italic; color: var(--red); font-weight: 500; }

  .gate-screen .principle {
    background: var(--paper-warm);
    border-left: 4px solid var(--ink);
    padding: 16px 22px;
    margin: 22px 0 28px;
    font-family: var(--serif);
    font-style: italic;
    font-size: 16px;
    line-height: 1.5;
    color: var(--ink);
  }
  .gate-screen .principle strong { font-weight: 700; font-style: normal; }
  .gate-screen .principle .source {
    display: block;
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    color: var(--muted);
    font-style: normal;
    margin-top: 8px;
  }

  /* INPUT GROUPS */
  .input-group {
    margin-bottom: 22px;
  }
  .input-group label {
    display: block;
    font-family: var(--mono);
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    font-weight: 700;
    margin-bottom: 8px;
    color: var(--ink);
  }
  .input-group .help {
    font-family: var(--serif);
    font-style: italic;
    font-size: 14.5px;
    color: var(--muted);
    margin-bottom: 10px;
    line-height: 1.4;
  }
  .input-group input[type="text"],
  .input-group input[type="number"],
  .input-group textarea,
  .input-group select {
    width: 100%;
    padding: 11px 14px;
    font-family: var(--sans);
    font-size: 14.5px;
    line-height: 1.5;
    background: var(--paper);
    border: 1px solid var(--ink);
    color: var(--ink);
    border-radius: 0;
    transition: all 0.15s ease;
    font-weight: 500;
  }
  .input-group input:focus,
  .input-group textarea:focus,
  .input-group select:focus {
    outline: none;
    border-color: var(--red);
    background: #fff;
    box-shadow: 0 0 0 3px var(--red-soft);
  }
  .input-group textarea {
    resize: vertical;
    min-height: 80px;
    font-family: var(--serif);
  }

  /* SCALE INPUT (1-10) */
  .scale {
    display: grid;
    grid-template-columns: repeat(10, 1fr);
    gap: 4px;
    margin-top: 8px;
  }
  .scale-btn {
    aspect-ratio: 1;
    background: var(--paper);
    border: 1px solid var(--paper-deep);
    font-family: var(--mono);
    font-size: 13px;
    font-weight: 700;
    cursor: pointer;
    transition: all 0.1s ease;
    color: var(--ink);
  }
  .scale-btn:hover {
    border-color: var(--ink);
    background: var(--paper-warm);
  }
  .scale-btn.selected {
    background: var(--ink);
    color: var(--paper);
    border-color: var(--ink);
  }
  .scale-labels {
    display: flex;
    justify-content: space-between;
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--muted);
    margin-top: 6px;
  }

  /* RADIO/CHOICE */
  .choice-group {
    display: grid;
    gap: 8px;
  }
  .choice-group.cols-2 { grid-template-columns: 1fr 1fr; }
  .choice-group.cols-3 { grid-template-columns: 1fr 1fr 1fr; }
  .choice-btn {
    background: var(--paper);
    border: 1px solid var(--ink);
    padding: 12px 16px;
    text-align: left;
    cursor: pointer;
    font-family: var(--sans);
    font-size: 14px;
    font-weight: 500;
    color: var(--ink);
    transition: all 0.1s ease;
    line-height: 1.4;
  }
  .choice-btn:hover { background: var(--paper-warm); }
  .choice-btn.selected {
    background: var(--ink);
    color: var(--paper);
  }
  .choice-btn .label {
    display: block;
    font-weight: 700;
    margin-bottom: 4px;
  }
  .choice-btn .sub {
    display: block;
    font-family: var(--serif);
    font-style: italic;
    font-size: 12.5px;
    line-height: 1.35;
    opacity: 0.8;
    font-weight: 400;
  }

  /* ACTION ROW */
  .action-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 14px;
    margin-top: 32px;
    padding-top: 22px;
    border-top: 2px solid var(--ink);
  }
  .btn {
    font-family: var(--sans);
    font-size: 14px;
    font-weight: 700;
    padding: 12px 20px;
    border: 1px solid var(--ink);
    cursor: pointer;
    transition: all 0.15s ease;
    background: var(--paper);
    color: var(--ink);
    text-transform: uppercase;
    letter-spacing: 0.1em;
  }
  .btn:hover { background: var(--ink); color: var(--paper); }
  .btn:disabled {
    opacity: 0.4;
    cursor: not-allowed;
  }
  .btn:disabled:hover { background: var(--paper); color: var(--ink); }
  .btn.primary {
    background: var(--ink);
    color: var(--paper);
  }
  .btn.primary:hover { background: var(--red); border-color: var(--red); }
  .btn.danger {
    border-color: var(--red);
    color: var(--red);
  }
  .btn.danger:hover { background: var(--red); color: var(--paper); }

  /* VERDICT BLOCK */
  .verdict {
    margin-top: 28px;
    border: 2px solid var(--ink);
    overflow: hidden;
  }
  .verdict-header {
    padding: 16px 22px;
    color: var(--paper);
    display: flex;
    justify-content: space-between;
    align-items: baseline;
  }
  .verdict.go .verdict-header { background: var(--green); }
  .verdict.no .verdict-header { background: var(--red-deep); }
  .verdict.rework .verdict-header { background: var(--gold); }
  .verdict-header .label {
    font-family: var(--mono);
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    font-weight: 700;
  }
  .verdict-header .name {
    font-family: var(--serif);
    font-size: 22px;
    font-weight: 700;
  }
  .verdict-body {
    padding: 22px 26px;
    background: var(--paper);
  }
  .verdict.go .verdict-body { background: var(--green-tint); }
  .verdict.no .verdict-body { background: var(--red-tint); color: var(--red-deep); }
  .verdict.rework .verdict-body { background: var(--gold-tint); }
  .verdict-body p {
    font-size: 15.5px;
    line-height: 1.55;
    margin-bottom: 12px;
  }
  .verdict-body p:last-child { margin-bottom: 0; }
  .verdict-body ul {
    list-style: none;
    padding: 0;
    margin: 12px 0;
  }
  .verdict-body li {
    padding: 8px 0 8px 22px;
    position: relative;
    font-family: var(--sans);
    font-size: 14px;
    line-height: 1.5;
    border-bottom: 1px dotted rgba(0,0,0,0.15);
  }
  .verdict-body li:last-child { border-bottom: none; }
  .verdict-body li::before {
    content: '→';
    position: absolute;
    left: 0;
    top: 8px;
    font-family: var(--mono);
    font-weight: 700;
  }
  .verdict-body li strong { font-weight: 700; }

  /* SCORE DISPLAY */
  .score-display {
    background: var(--ink);
    color: var(--paper);
    padding: 18px 22px;
    margin: 18px 0;
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: center;
    gap: 16px;
  }
  .score-display .label {
    font-family: var(--mono);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    color: #c9b88a;
    margin-bottom: 4px;
  }
  .score-display .breakdown {
    font-family: var(--sans);
    font-size: 13.5px;
    color: #d6d2c8;
  }
  .score-display .total {
    font-family: var(--serif);
    font-size: 56px;
    font-weight: 900;
    line-height: 0.9;
    color: var(--paper);
  }
  .score-display .total .max {
    font-size: 24px;
    font-weight: 400;
    color: #c9b88a;
  }

  /* CALLOUT */
  .callout {
    background: var(--paper-warm);
    border-left: 4px solid var(--red);
    padding: 16px 22px;
    margin: 20px 0;
    font-family: var(--serif);
    font-size: 14.5px;
    line-height: 1.5;
  }
  .callout strong { font-weight: 700; }

  /* PILL */
  .pill {
    display: inline-block;
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    padding: 3px 8px;
    border: 1px solid currentColor;
    margin-right: 4px;
    font-weight: 700;
    vertical-align: middle;
  }

  /* PRINTABLE BRIEF */
  .brief {
    background: var(--paper);
    border: 2px solid var(--ink);
    padding: 32px 36px;
    margin-top: 24px;
  }
  .brief h3 {
    font-family: var(--serif);
    font-weight: 900;
    font-size: 26px;
    line-height: 1;
    margin-bottom: 6px;
  }
  .brief h3 em { font-style: italic; color: var(--red); font-weight: 500; }
  .brief .brief-meta {
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    color: var(--muted);
    margin-bottom: 22px;
    padding-bottom: 10px;
    border-bottom: 1px solid var(--ink);
  }
  .brief-section {
    margin-bottom: 18px;
    padding-bottom: 14px;
    border-bottom: 1px dotted var(--paper-deep);
  }
  .brief-section:last-child { border-bottom: none; }
  .brief-section h4 {
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    margin-bottom: 6px;
    color: var(--red);
  }
  .brief-section p {
    font-family: var(--serif);
    font-size: 15px;
    line-height: 1.45;
    margin-bottom: 4px;
  }
  .brief-section p.empty {
    font-style: italic;
    color: var(--muted);
    font-size: 13.5px;
  }

  /* INTRO LANDING */
  .intro-card {
    background: var(--paper);
    border: 2px solid var(--ink);
    padding: 30px 32px;
    margin-bottom: 22px;
  }
  .intro-card h3 {
    font-family: var(--serif);
    font-weight: 700;
    font-size: 22px;
    margin-bottom: 12px;
  }
  .intro-card p {
    font-family: var(--serif);
    font-size: 15.5px;
    line-height: 1.55;
    margin-bottom: 12px;
  }
  .intro-card .gate-list {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 8px;
    margin: 18px 0;
    list-style: none;
    padding: 0;
  }
  .intro-card .gate-list li {
    font-family: var(--sans);
    font-size: 13.5px;
    padding: 7px 12px;
    background: var(--paper-warm);
    border-left: 3px solid var(--ink);
    line-height: 1.35;
  }
  .intro-card .gate-list li .num {
    font-family: var(--mono);
    font-size: 10px;
    font-weight: 700;
    color: var(--red);
    margin-right: 8px;
  }
  .resume-banner {
    background: var(--gold-tint);
    border: 1px solid var(--gold);
    padding: 14px 18px;
    margin-bottom: 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 14px;
    font-family: var(--sans);
    font-size: 14px;
  }
  .resume-banner strong { font-weight: 700; }

  /* TWO-COL LAYOUT */
  .grid-2 {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
  }

  /* COLOPHON */
  .app-colophon {
    margin-top: 56px;
    padding: 22px 0 0;
    border-top: 4px solid var(--ink);
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    color: var(--muted);
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 8px 14px;
    text-align: center;
    line-height: 1.6;
  }
  .app-colophon .dot { opacity: 0.5; }
  .app-colophon .credit {
    flex-basis: 100%;
    margin-top: 6px;
    font-size: 9px;
    letter-spacing: 0.12em;
    text-transform: none;
    font-style: italic;
    font-family: var(--serif);
    color: var(--muted);
    opacity: 0.75;
    max-width: 720px;
    margin-left: auto;
    margin-right: auto;
  }

  /* STEP ONE HELP SYSTEM (Gate 01) */
  .help-rail {
    display: flex;
    gap: 6px;
    margin: 8px 0 12px;
    flex-wrap: wrap;
  }
  .help-toggle {
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    padding: 5px 10px;
    background: transparent;
    border: 1px solid var(--ink);
    color: var(--ink);
    cursor: pointer;
    font-weight: 600;
    transition: all 0.15s ease;
  }
  .help-toggle:hover { background: var(--ink); color: var(--paper); }
  .help-toggle.active { background: var(--ink); color: var(--paper); }
  .help-toggle.verify { border-color: var(--red); color: var(--red); }
  .help-toggle.verify:hover { background: var(--red); color: var(--paper); }
  .help-toggle.verify.active { background: var(--red); color: var(--paper); }

  .help-panel {
    display: none;
    margin: 4px 0 14px;
    padding: 16px 18px;
    background: var(--paper-warm);
    border: 1px solid var(--ink);
    font-family: var(--sans);
    font-size: 13.5px;
    line-height: 1.55;
    animation: panelIn 0.2s ease;
  }
  .help-panel.visible { display: block; }
  @keyframes panelIn { from { opacity: 0; transform: translateY(-4px);} to { opacity: 1; transform: none;} }

  /* EXAMPLES PANEL */
  .examples-panel .col-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 14px;
  }
  .examples-panel h6 {
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    margin-bottom: 8px;
    font-weight: 700;
  }
  .examples-panel .good-col h6 { color: var(--green); }
  .examples-panel .bad-col h6 { color: var(--red-deep); }
  .examples-panel .good-col h6::before { content: '✓ '; }
  .examples-panel .bad-col h6::before { content: '✗ '; }
  .examples-panel ul {
    list-style: none;
    padding: 0;
    margin: 0;
  }
  .examples-panel li {
    padding: 8px 12px;
    margin-bottom: 6px;
    background: var(--paper);
    border-left: 3px solid;
    font-family: var(--serif);
    font-size: 13px;
    line-height: 1.45;
    font-style: italic;
  }
  .examples-panel .good-col li { border-left-color: var(--green); }
  .examples-panel .bad-col li { border-left-color: var(--red); color: var(--muted); }

  /* SHARPEN PANEL */
  .sharpen-panel ol {
    list-style: none;
    counter-reset: s;
    padding: 0;
    margin: 0;
  }
  .sharpen-panel li {
    counter-increment: s;
    padding: 10px 0 10px 30px;
    position: relative;
    border-bottom: 1px dotted var(--paper-deep);
    font-family: var(--serif);
    font-size: 14px;
    line-height: 1.5;
  }
  .sharpen-panel li:last-child { border-bottom: none; }
  .sharpen-panel li::before {
    content: counter(s, decimal-leading-zero);
    position: absolute;
    left: 0;
    top: 11px;
    font-family: var(--mono);
    font-size: 10px;
    color: var(--red);
    font-weight: 700;
  }
  .sharpen-panel .closer {
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px solid var(--ink);
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    color: var(--muted);
    font-weight: 600;
  }

  /* VERIFY PANEL */
  .verify-panel .verify-intro {
    font-family: var(--serif);
    font-style: italic;
    font-size: 13.5px;
    line-height: 1.45;
    color: var(--muted);
    margin-bottom: 10px;
  }
  .verify-panel .verify-grid {
    display: grid;
    gap: 6px;
  }
  .verify-link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 14px;
    background: var(--paper);
    border: 1px solid var(--ink);
    color: var(--ink);
    text-decoration: none;
    font-family: var(--sans);
    font-size: 13px;
    font-weight: 500;
    transition: all 0.15s ease;
  }
  .verify-link:hover {
    background: var(--ink);
    color: var(--paper);
  }
  .verify-link::after {
    content: '↗';
    font-family: var(--mono);
    margin-left: 12px;
    opacity: 0.6;
  }
  .verify-empty {
    margin-top: 12px;
    padding: 10px 14px;
    background: var(--gold-tint);
    border-left: 3px solid var(--gold);
    font-family: var(--serif);
    font-style: italic;
    font-size: 13.5px;
    line-height: 1.5;
    color: var(--ink);
  }

  /* AI SHARPEN PANEL */
  .help-toggle.ai {
    border-color: var(--red);
    color: var(--red);
    font-weight: 700;
  }
  .help-toggle.ai:hover { background: var(--red); color: var(--paper); }
  .help-toggle.ai.active { background: var(--red); color: var(--paper); }

  .ai-panel { background: var(--paper); border-color: var(--red); border-width: 2px; }
  .ai-panel .ai-intro {
    font-family: var(--serif);
    font-size: 14px;
    line-height: 1.5;
    color: var(--ink);
    margin-bottom: 12px;
  }
  .ai-go-btn {
    display: inline-block;
    padding: 10px 18px;
    background: var(--red);
    color: var(--paper);
    border: none;
    font-family: var(--mono);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.14em;
    font-weight: 700;
    cursor: pointer;
    transition: background 0.15s ease;
  }
  .ai-go-btn:hover { background: var(--ink); }
  .ai-go-btn:disabled { opacity: 0.5; cursor: default; }

  .ai-loading {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px 0;
    font-family: var(--mono);
    font-size: 12px;
    color: var(--muted);
    text-transform: uppercase;
    letter-spacing: 0.1em;
  }
  .ai-spinner {
    width: 18px;
    height: 18px;
    border: 2px solid var(--paper-deep);
    border-top-color: var(--red);
    border-radius: 50%;
    animation: aiSpin 0.7s linear infinite;
  }
  @keyframes aiSpin { to { transform: rotate(360deg); } }

  .ai-error {
    padding: 12px 14px;
    background: var(--paper-warm);
    border-left: 3px solid var(--red);
    font-family: var(--serif);
    font-size: 13.5px;
    line-height: 1.5;
  }
  .ai-error code {
    font-family: var(--mono);
    font-size: 12px;
    background: var(--paper-deep);
    padding: 1px 5px;
  }

  .ai-result h6 {
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    color: var(--muted);
    font-weight: 700;
    margin-bottom: 6px;
  }
  .ai-result p {
    font-family: var(--serif);
    font-size: 14px;
    line-height: 1.55;
    margin: 0;
  }
  .ai-score-row {
    display: flex;
    gap: 16px;
    align-items: center;
    padding-bottom: 14px;
    border-bottom: 1px solid var(--paper-deep);
    margin-bottom: 14px;
  }
  .ai-score {
    flex: 0 0 auto;
    width: 70px;
    height: 70px;
    border-radius: 50%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    border: 3px solid;
    font-family: var(--mono);
  }
  .ai-score-num {
    font-size: 22px;
    font-weight: 700;
    line-height: 1;
  }
  .ai-score-label {
    font-size: 9px;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    margin-top: 2px;
    opacity: 0.7;
  }
  .ai-score-good { border-color: var(--green); color: var(--green); }
  .ai-score-mid { border-color: var(--gold); color: var(--gold-deep); }
  .ai-score-weak { border-color: var(--red); color: var(--red); }
  .ai-score-text { flex: 1; min-width: 0; }

  .ai-section {
    padding: 14px 0;
    border-bottom: 1px solid var(--paper-deep);
  }
  .ai-section:last-of-type { border-bottom: none; }
  .ai-rewrite { background: var(--paper-warm); padding: 14px 16px; margin-top: 8px; }
  .ai-rewrite-text {
    font-style: italic;
    margin-bottom: 12px !important;
  }
  .ai-use-btn {
    padding: 7px 14px;
    background: transparent;
    color: var(--ink);
    border: 1px solid var(--ink);
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    font-weight: 700;
    cursor: pointer;
    transition: all 0.15s ease;
  }
  .ai-use-btn:hover { background: var(--ink); color: var(--paper); }
  .ai-use-btn:disabled {
    background: var(--green-tint, #e8f5e8);
    border-color: var(--green);
    color: var(--green);
    cursor: default;
  }
  .ai-attribution {
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--muted);
    margin-top: 14px !important;
    padding-top: 12px;
    border-top: 1px solid var(--paper-deep);
    line-height: 1.5 !important;
  }

  /* PAIN DISCOVERY GATE (Gate 00½) */
  .pain-intro-callout {
    background: var(--paper-warm);
    border: 2px solid var(--ink);
    padding: 18px 22px;
    margin-bottom: 24px;
    font-family: var(--serif);
    font-size: 15px;
    line-height: 1.55;
  }
  .pain-intro-callout strong { font-weight: 700; }
  .pain-intro-callout .skip-row {
    display: flex;
    justify-content: flex-end;
    margin-top: 12px;
  }

  .pain-cards-list {
    display: flex;
    flex-direction: column;
    gap: 14px;
    margin: 22px 0;
  }
  .pain-card {
    border: 1px solid var(--ink);
    background: var(--paper);
    padding: 16px 18px;
    position: relative;
  }
  .pain-card.is-lead {
    border-width: 2px;
    background: var(--gold-tint);
    border-color: var(--gold);
  }
  .pain-card .card-head {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 12px;
    margin-bottom: 10px;
    padding-bottom: 8px;
    border-bottom: 1px dotted var(--paper-deep);
  }
  .pain-card .card-num {
    font-family: var(--mono);
    font-size: 10px;
    font-weight: 700;
    color: var(--red);
    letter-spacing: 0.15em;
  }
  .pain-card .card-actions {
    display: flex;
    gap: 6px;
  }
  .pain-card .card-grid {
    display: grid;
    grid-template-columns: 2fr 1fr 1fr;
    gap: 10px;
  }
  .pain-card .card-grid label {
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    font-weight: 700;
    margin-bottom: 4px;
    display: block;
    color: var(--ink);
  }
  .pain-card input[type="text"],
  .pain-card input[type="number"],
  .pain-card textarea,
  .pain-card select {
    width: 100%;
    padding: 8px 10px;
    font-family: var(--sans);
    font-size: 13px;
    background: var(--paper);
    border: 1px solid var(--ink);
    color: var(--ink);
    font-weight: 500;
    border-radius: 0;
  }
  .pain-card.is-lead input,
  .pain-card.is-lead textarea,
  .pain-card.is-lead select {
    background: #fff;
  }
  .pain-card textarea {
    font-family: var(--serif);
    min-height: 60px;
    resize: vertical;
  }
  .pain-card .row-full { margin-top: 10px; }
  .pain-card .row-full label {
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    font-weight: 700;
    margin-bottom: 4px;
    display: block;
  }
  .pain-card .quotes-block {
    margin-top: 10px;
  }
  .pain-card .quote-row {
    display: flex;
    gap: 6px;
    margin-bottom: 6px;
  }
  .pain-card .quote-row textarea {
    flex: 1;
    min-height: 38px;
  }
  .pain-card .quote-row .x-btn {
    background: transparent;
    border: 1px solid var(--paper-deep);
    color: var(--muted);
    font-family: var(--mono);
    font-size: 12px;
    padding: 0 8px;
    cursor: pointer;
    align-self: stretch;
  }
  .pain-card .quote-row .x-btn:hover {
    border-color: var(--red);
    color: var(--red);
  }
  .pain-card .add-quote-btn {
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    padding: 5px 10px;
    background: transparent;
    border: 1px dashed var(--ink);
    color: var(--ink);
    cursor: pointer;
    margin-top: 4px;
  }
  .pain-card .add-quote-btn:hover {
    background: var(--ink);
    color: var(--paper);
    border-style: solid;
  }
  .pain-card .lead-badge {
    display: inline-block;
    font-family: var(--mono);
    font-size: 9px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    background: var(--gold);
    color: var(--paper);
    padding: 2px 7px;
    font-weight: 700;
    margin-left: 6px;
    vertical-align: middle;
  }
  .pain-card .cluster-pill {
    display: inline-block;
    font-family: var(--mono);
    font-size: 9px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    background: var(--paper-deep);
    color: var(--ink);
    padding: 2px 7px;
    font-weight: 700;
    margin-left: 6px;
    vertical-align: middle;
  }

  .add-pain-card-btn {
    display: block;
    width: 100%;
    padding: 14px;
    background: transparent;
    border: 2px dashed var(--ink);
    font-family: var(--mono);
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    color: var(--ink);
    cursor: pointer;
    margin-top: 12px;
  }
  .add-pain-card-btn:hover {
    background: var(--ink);
    color: var(--paper);
    border-style: solid;
  }
  .add-pain-card-btn:disabled {
    opacity: 0.4;
    cursor: not-allowed;
  }
  .add-pain-card-btn:disabled:hover {
    background: transparent;
    color: var(--ink);
    border-style: dashed;
  }

  .lead-picker {
    background: var(--paper-warm);
    border-left: 4px solid var(--gold);
    padding: 14px 18px;
    margin: 22px 0;
  }
  .lead-picker h4 {
    font-family: var(--mono);
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    color: var(--ink);
    margin-bottom: 8px;
    font-weight: 700;
  }
  .lead-picker .help {
    font-family: var(--serif);
    font-style: italic;
    font-size: 13.5px;
    color: var(--muted);
    margin-bottom: 10px;
    line-height: 1.4;
  }

  .voc-summary {
    background: var(--ink);
    color: var(--paper);
    padding: 14px 18px;
    margin: 22px 0 12px;
    font-family: var(--mono);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
  }
  .voc-summary .count {
    font-family: var(--serif);
    font-size: 28px;
    font-weight: 900;
    text-transform: none;
    letter-spacing: 0;
    line-height: 1;
    color: #c9b88a;
  }

  .skip-pain-banner {
    background: var(--paper);
    border: 1px dashed var(--muted);
    padding: 12px 16px;
    margin: 16px 0;
    font-family: var(--serif);
    font-style: italic;
    font-size: 13.5px;
    color: var(--muted);
    line-height: 1.5;
  }

  /* VOC VAULT INLINE BUTTON + POPOVER */
  .voc-pull-btn {
    display: inline-block;
    margin-bottom: 6px;
    padding: 5px 10px;
    background: transparent;
    border: 1px solid var(--gold);
    color: var(--gold);
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    font-weight: 700;
    cursor: pointer;
  }
  .voc-pull-btn:hover {
    background: var(--gold);
    color: var(--paper);
  }
  .voc-pull-btn:disabled {
    opacity: 0.35;
    cursor: not-allowed;
    border-color: var(--paper-deep);
    color: var(--muted);
  }
  .voc-pull-btn:disabled:hover {
    background: transparent;
    color: var(--muted);
  }

  .voc-popover {
    position: fixed;
    inset: 0;
    z-index: 1100;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
  }
  .voc-popover-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(10, 10, 10, 0.55);
  }
  .voc-popover-card {
    position: relative;
    max-width: 640px;
    width: 100%;
    background: var(--paper);
    border: 4px solid var(--ink);
    padding: 24px 28px;
    max-height: 80vh;
    overflow-y: auto;
    box-shadow: 0 20px 60px rgba(0,0,0,0.25);
  }
  .voc-popover-card h3 {
    font-family: var(--serif);
    font-size: 22px;
    margin-bottom: 6px;
  }
  .voc-popover-card .voc-help {
    font-family: var(--serif);
    font-style: italic;
    font-size: 14px;
    color: var(--muted);
    margin-bottom: 14px;
    line-height: 1.4;
  }
  .voc-popover-card .voc-quote {
    padding: 12px 14px;
    background: var(--paper-warm);
    border-left: 3px solid var(--gold);
    margin-bottom: 8px;
    font-family: var(--serif);
    font-size: 14px;
    line-height: 1.5;
    cursor: pointer;
    transition: all 0.1s ease;
  }
  .voc-popover-card .voc-quote:hover {
    background: var(--gold-tint);
    border-left-color: var(--ink);
  }
  .voc-popover-card .voc-quote .src {
    display: block;
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    color: var(--muted);
    font-style: normal;
    margin-top: 6px;
  }
  .voc-popover-close {
    position: absolute;
    top: 10px;
    right: 12px;
    background: transparent;
    border: none;
    font-size: 26px;
    line-height: 1;
    cursor: pointer;
    color: var(--muted);
    padding: 4px 10px;
  }
  .voc-popover-close:hover { color: var(--ink); }

  /* LEAD PAIN CONTEXT BANNER (shown on Gate 01 + Gate 03 when lead pain exists) */
  .lead-context-banner {
    background: var(--gold-tint);
    border-left: 4px solid var(--gold);
    padding: 12px 16px;
    margin: 0 0 18px;
    font-family: var(--serif);
    font-size: 14px;
    line-height: 1.5;
  }
  .lead-context-banner strong { font-weight: 700; }
  .lead-context-banner .label {
    font-family: var(--mono);
    font-size: 9.5px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    color: var(--ink);
    margin-right: 8px;
    font-weight: 700;
  }

  /* MOBILE adjustments for pain cards */
  @media (max-width: 720px) {
    .pain-card .card-grid { grid-template-columns: 1fr; }
  }

  /* SETTINGS MODAL */
  .settings-modal {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
  }
  .settings-backdrop {
    position: absolute;
    inset: 0;
    background: rgba(10, 10, 10, 0.55);
  }
  .settings-card {
    position: relative;
    max-width: 540px;
    width: 100%;
    background: var(--paper);
    border: 4px solid var(--ink);
    padding: 28px 32px 24px;
    box-shadow: 0 20px 60px rgba(0,0,0,0.25);
    max-height: 90vh;
    overflow-y: auto;
  }
  .settings-card h2 {
    font-family: var(--serif);
    font-size: 22px;
    font-weight: 600;
    margin: 0 0 8px;
  }
  .settings-intro {
    font-family: var(--serif);
    font-size: 14px;
    line-height: 1.55;
    color: var(--muted);
    margin: 0 0 20px;
  }
  .settings-intro a { color: var(--ink); }
  .settings-card label {
    display: block;
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    font-weight: 700;
    margin-bottom: 6px;
  }
  .settings-card input[type="password"] {
    width: 100%;
    padding: 10px 12px;
    border: 2px solid var(--ink);
    background: var(--paper-warm);
    font-family: var(--mono);
    font-size: 13px;
    margin-bottom: 12px;
    box-sizing: border-box;
  }
  .settings-card input[type="password"]:focus {
    outline: none;
    background: var(--paper);
  }
  .settings-status {
    font-family: var(--mono);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    margin-bottom: 14px;
    min-height: 16px;
    color: var(--muted);
  }
  .settings-status.ok { color: var(--green); }
  .settings-status.err { color: var(--red); }
  .settings-actions {
    display: flex;
    gap: 8px;
    justify-content: flex-end;
    flex-wrap: wrap;
  }
  .btn-mini.primary {
    background: var(--ink);
    color: var(--paper);
  }
  .settings-close-btn {
    position: absolute;
    top: 12px;
    right: 14px;
    background: transparent;
    border: none;
    font-size: 26px;
    line-height: 1;
    cursor: pointer;
    color: var(--muted);
    padding: 4px 10px;
  }
  .settings-close-btn:hover { color: var(--ink); }
  .settings-details {
    margin-top: 22px;
    padding-top: 14px;
    border-top: 1px solid var(--paper-deep);
    font-family: var(--serif);
    font-size: 13px;
    line-height: 1.5;
    color: var(--muted);
  }
  .settings-details summary {
    cursor: pointer;
    font-family: var(--mono);
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    font-weight: 700;
    color: var(--ink);
    margin-bottom: 8px;
  }
  .settings-details p { margin: 0; }

  /* PRINT */
  @media print {
    @page { size: Letter; margin: 0.6in; }
    body { background: white; background-image: none; }
    .app-header, .progress-rail, .header-actions, .action-row,
    .gate-screen:not(#gate-summary), .resume-banner, .btn-mini, .btn,
    .app-colophon { display: none !important; }
    #gate-summary { display: block !important; }
    .brief { border: none; padding: 0; margin: 0; }
    .brief-section { page-break-inside: avoid; }
  }

  /* MOBILE */
  @media (max-width: 720px) {
    .app { padding: 20px 16px 60px; }
    .app-header { grid-template-columns: 1fr; }
    .header-actions { justify-content: flex-start; }
    .progress-rail { grid-template-columns: repeat(17, 1fr); gap: 1px; }
    .gate-cell { padding: 6px 2px; }
    .gate-cell .name { display: none; }
    .gate-cell .num { font-size: 10px; }
    .choice-group.cols-2, .choice-group.cols-3, .grid-2 { grid-template-columns: 1fr; }
    .scale { grid-template-columns: repeat(5, 1fr); }
    .scale-btn { aspect-ratio: 1.5; }
    .gate-screen h2 { font-size: 28px; }
    .score-display { grid-template-columns: 1fr; text-align: left; }
    .score-display .total { font-size: 42px; }
  }
</style>
</head>
<body>
<div class="app">

  <!-- HEADER -->
  <header class="app-header">
    <div>
      <div class="meta">RISER · MVO Decision Engine · <span class="red">Captain's Logic</span></div>
      <h1>Idea or <em>No Idea</em></h1>
      <p class="deck">Sixteen gates from "what does the market actually hurt over?" to "compound the moat." At each gate: <strong>GO</strong>, <strong>NO</strong>, or <strong>REWORK</strong> — with the specific reason and next action. Built on Hormozi, Brunson, Kennedy, and Cialdini, with a Pain-Discovery import layer for PainOnSocial / VOC research. Designed to save you 90 days on a bad idea, or compress 90 days on a good one.</p>
    </div>
    <div class="header-actions">
      <button class="btn-mini" id="btn-settings" title="API key settings">⚙ Settings</button>
      <button class="btn-mini" id="btn-print">Print Brief</button>
      <button class="btn-mini" id="btn-export">Export JSON</button>
      <button class="btn-mini danger" id="btn-reset">Reset</button>
    </div>
  </header>

  <!-- PROGRESS RAIL -->
  <nav class="progress-rail" id="progress-rail" aria-label="Gate progress"></nav>

  <!-- GATE SCREENS — populated by JS -->
  <main id="gate-host"></main>

  <!-- COLOPHON -->
  <footer class="app-colophon">
    <span>RISER Nation · Maritime Academy · MVO Decision Engine v1</span>
    <span class="dot">·</span>
    <span>Captain's Logic · 16 Gates · v3 · April 2026</span>
    <span class="dot">·</span>
    <span class="credit">Frameworks adapted from operator literature including Alex Hormozi's $100M Offers and $100M Leads.</span>
  </footer>

</div>

<!-- API Key Settings Modal -->
<div id="settings-modal" class="settings-modal" style="display:none;">
  <div class="settings-backdrop" data-settings-close></div>
  <div class="settings-card">
    <button class="settings-close-btn" data-settings-close aria-label="Close">×</button>
    <h2>API Key Settings</h2>
    <p class="settings-intro">The "Sharpen with AI" feature on Gate 01 calls the Anthropic API directly from your browser. Your key is stored only in this browser's localStorage. Get a key at <a href="https://console.anthropic.com" target="_blank" rel="noopener">console.anthropic.com</a> → API Keys.</p>

    <label for="settings-key-input">Anthropic API Key</label>
    <input type="password" id="settings-key-input" placeholder="sk-ant-..." autocomplete="off" spellcheck="false" />

    <div class="settings-status" id="settings-status"></div>

    <div class="settings-actions">
      <button class="btn-mini danger" id="settings-clear">Clear key</button>
      <button class="btn-mini" id="settings-cancel" data-settings-close>Cancel</button>
      <button class="btn-mini primary" id="settings-save">Save</button>
    </div>

    <details class="settings-details">
      <summary>Why direct browser access? (security note)</summary>
      <p>Direct browser-to-Anthropic calls bypass the usual server-side proxy that hides your API key. For single-user, personal use this is acceptable: only you have access to this browser, and you can set spending caps in your Anthropic console. For any shared, public, or production use, deploy with a backend proxy instead.</p>
    </details>
  </div>
</div>

<!-- App logic begins here in next file -->
<script>
'use strict';

// ============================================================
// HORMOZI MVO DECISION ENGINE — Gate Definitions
// ============================================================
// Source attribution legend:
// All gates teach RISER Captain's Logic — operating doctrine refined
// across multiple operator playbooks and stress-tested in live launches.
// Each gate cites the specific maritime metaphor + operating principle.

const GATES = [
  // ----------------------------------------------------------
  // GATE 0 — INTRO / LANDING
  // ----------------------------------------------------------
  {
    id: 'intro',
    num: '00',
    name: 'Start',
    title: 'Welcome to the <em>MVO Engine</em>',
    rubric: 'How this works',
    isIntro: true
  },

  // ----------------------------------------------------------
  // GATE 0½ — PAIN DISCOVERY (PainOnSocial / VOC import)
  // ----------------------------------------------------------
  {
    id: 'paindiscovery',
    num: '00½',
    name: 'Pain Discovery',
    title: 'Import the <em>voice of the customer</em>',
    rubric: 'Gate 00½ · Pain Import',
    principle: {
      text: '"Operators who guess at pain build for themselves. Operators who import pain build for the market. The most expensive line in any business is the one that begins, \'I think the customer wants...\' If you have run a PainOnSocial scan, a customer interview series, or any structured voice-of-customer research, paste the cards here. Every gate downstream gets sharper."',
      source: 'RISER Captain\'s Logic · The Voice-of-Customer Manifest'
    },
    isPainDiscovery: true
  },

  // ----------------------------------------------------------
  // GATE 1 — HUNGRY AVATAR CHECK
  // ----------------------------------------------------------
  {
    id: 'avatar',
    num: '01',
    name: 'Hungry Avatar',
    title: 'Is there a <em>starving crowd?</em>',
    rubric: 'Gate 01 · Avatar',
    principle: {
      text: '"The most important thing you sell is not your product — it is the market you sell it into. A starving crowd is the difference between selling steak and selling sand. Get the market right and a mediocre offer wins. Get it wrong and the best offer in the world dies."',
      source: 'RISER Captain\'s Logic · The Hungry Harbor Doctrine'
    },
    inputs: [
      {
        id: 'avatar_who',
        type: 'textarea',
        label: 'Who exactly is the avatar?',
        help: 'Specific. "Marketing managers at SaaS companies between $5M–$20M ARR who are personally accountable for pipeline" — not "small business owners."',
        placeholder: 'e.g., Solo accountants in their first year of practice, age 28-40, post-MBA, billing under $5K/month...',
        aiSharpen: true,
        examples: {
          good: [
            'Solo CPAs in their first 24 months of practice, billing under $7K/month, ages 32–45, who got their license post-Big-4 and now work from home offices in suburban metros.',
            'In-house marketing leads at Series-B SaaS companies ($10M–$30M ARR), 2–4 years in role, personally accountable for pipeline, no SDR team yet, reporting to a CRO.'
          ],
          bad: [
            'Small business owners who want to grow.',
            'Coaches and consultants looking for more clients.'
          ]
        },
        sharpen: [
          'Can you describe what this person did last Tuesday between 9am and noon?',
          'What is the difference between this avatar and the avatar one tier below them in income or experience?',
          'If you walked into a room of 50 of them, what would they have in common that a stranger would notice in 30 seconds?'
        ],
        verify: [
          { source: 'reddit', label: 'Search Reddit for this avatar' },
          { source: 'google_site_reddit', label: 'Google → Reddit posts about this niche' },
          { source: 'youtube', label: 'YouTube — see who already serves them' },
          { source: 'twitter', label: 'Twitter/X search — recent conversations' },
          { source: 'google_trends', label: 'Google Trends — keyword trajectory' },
          { source: 'indeed', label: 'Indeed — job postings (B2B avatars)' }
        ]
      },
      {
        id: 'avatar_pain',
        type: 'textarea',
        label: 'What is the specific pain — in their words, not yours?',
        help: 'Quote them. If you cannot quote them, you have not talked to them. Generic pain ("I want more clients") is not pain. Specific pain ("I lose 3 hours every Friday reconciling Stripe") is pain.',
        placeholder: 'e.g., "I keep losing deals at the proposal stage and I do not know why"...',
        aiSharpen: true,
        vocPull: true,
        examples: {
          good: [
            '"I send proposals on Monday and by Friday I get ghosted. I never know if it was the price, the scope, or that they just went with someone else."',
            '"My pipeline looks fine on paper but I have not closed a deal in six weeks and I am starting to panic about payroll."'
          ],
          bad: [
            'They struggle with sales and need more leads.',
            'They feel overwhelmed by the marketing landscape.'
          ]
        },
        sharpen: [
          'Did you copy this pain from a real conversation, post, or interview — or did you write it yourself?',
          'If yes, paste the source link or the conversation date. If no, that is the homework.',
          'Does the pain include a specific time, place, or trigger? "Every Monday morning" beats "in general."'
        ],
        verify: [
          { source: 'reddit_pain', label: 'Reddit — search this niche + pain words' },
          { source: 'google_site_reddit', label: 'Google → real complaints on Reddit' },
          { source: 'twitter_complaint', label: 'Twitter/X — "I hate" / "I cannot" rants' },
          { source: 'youtube_howto', label: 'YouTube — "how do I" + this niche, read comments' },
          { source: 'quora', label: 'Quora — search the active questions' }
        ]
      },
      {
        id: 'avatar_size_purchasing',
        type: 'scale',
        label: 'Purchasing power — can they actually pay?',
        help: 'Operating rule: target markets where buyers have demonstrated willingness to spend $1,000+ on similar problems already. 1 = broke audience, 10 = active buyers spending now.',
        examples: {
          good: [
            'I see the avatar paying $200–$500/mo for similar SaaS tools, $2K–$5K for one-time courses, and $5K–$15K for done-with-you programs. Three competitors at this price point are profitable.',
            'The category supports $497–$2,000 offers consistently — Skool groups in this niche have 50–200 paying members at $39–$99/mo.'
          ],
          bad: [
            'I think they would pay because the value is there.',
            'My friend said he would pay for this.'
          ]
        },
        sharpen: [
          'Name three real competitors charging $1,000+ on similar problems. Live URLs.',
          'What is the average spend the avatar already makes on adjacent tools or services per month?',
          'Have you seen at least one case study or income claim from a competitor in this category?'
        ],
        verify: [
          { source: 'google_pricing', label: 'Google → competitor pricing pages' },
          { source: 'youtube_course', label: 'YouTube — search niche + "course"' },
          { source: 'reddit_pricing', label: 'Reddit — niche + "how much do you charge"' },
          { source: 'flippa', label: 'Flippa — actual transaction prices' },
          { source: 'indiehackers', label: 'Indie Hackers — operator revenue stories' }
        ]
      },
      {
        id: 'avatar_size_growing',
        type: 'scale',
        label: 'Market trajectory — growing, flat, or shrinking?',
        help: 'Growing markets forgive errors. Shrinking markets punish even great offers. 1 = dying category, 10 = exploding category.',
        examples: {
          good: [
            'Google Trends shows 60% YoY increase on the category terms. Three new competitors entered the space in the last 18 months. Industry reports project 25–40% CAGR through 2028.',
            'The category is mature/flat but with significant operator turnover — older incumbents losing share to newer operators with better positioning. Net opportunity is real.'
          ],
          bad: [
            'I feel like this market is growing.',
            'AI is going to make this category bigger.'
          ]
        },
        sharpen: [
          'What does Google Trends show for the top 3 keywords in this category, 5-year view?',
          'How many new competitors entered the space in the last 24 months?',
          'Is funding flowing into this category (VC deals, accelerator focus, M&A activity)?'
        ],
        verify: [
          { source: 'google_trends', label: 'Google Trends — 5-year keyword trajectory' },
          { source: 'youtube', label: 'YouTube — channel growth in this niche' },
          { source: 'tiktok', label: 'TikTok — short-form trend in this niche' },
          { source: 'google_news', label: 'Google News — funding + launches' },
          { source: 'reddit_growth', label: 'Reddit — niche subreddit growth signals' }
        ]
      },
      {
        id: 'avatar_size_easy',
        type: 'scale',
        label: 'Easy to reach — can you find them and message them?',
        help: 'A perfect avatar you cannot reach is worthless. Pick avatars who hang out somewhere you can pay or post into. 1 = invisible, 10 = obvious channel.',
        examples: {
          good: [
            'They aggregate in three subreddits with 50K+ members each, two private Slack groups, and one well-known LinkedIn hashtag with 100+ daily posts. I can reach 10K of them via Meta ads at $1.20 CPM.',
            'There is a specific industry conference 2x/year, a trade publication with 30K subscribers, and a Telegram group of ~3,000 active members. Three reachable channels, no gatekeeper.'
          ],
          bad: [
            'I will reach them through SEO and content marketing.',
            'I think LinkedIn would work.'
          ]
        },
        sharpen: [
          'Name the top 3 specific places (URL/group/event) where this avatar gathers.',
          'For each, what is the audience size and engagement level?',
          'What does it cost (in dollars OR hours) to reach 100 of them per week?'
        ],
        verify: [
          { source: 'reddit_communities', label: 'Reddit — find subreddits in this niche' },
          { source: 'google_site_reddit', label: 'Google → Reddit communities for this niche' },
          { source: 'youtube_channels', label: 'YouTube — channels serving this niche' },
          { source: 'twitter', label: 'Twitter/X — see who posts in this niche' },
          { source: 'facebook_groups', label: 'Google → public Facebook groups' }
        ]
      },
      {
        id: 'avatar_pain_intensity',
        type: 'scale',
        label: 'Pain intensity — is this a top-3 problem for them right now?',
        help: 'Top-3 pain = budget exists. Bottom-10 pain = nice-to-have, infinite sales cycle. 1 = mild annoyance, 10 = crisis.',
        examples: {
          good: [
            'Customers describe this pain in their first 90 seconds of a sales call without prompting. 3 of last 5 prospects said this is the #1 reason they reached out.',
            'I see this complaint in the top 5 posts every week in their primary subreddit. People say things like "I cannot keep doing this" and "I will pay anyone to fix this."'
          ],
          bad: [
            'It is a real problem and they need a solution.',
            'I know it is painful because I felt it myself.'
          ]
        },
        sharpen: [
          'Have you watched 3+ real prospects describe this pain unprompted?',
          'Have they used emotional language ("I hate," "I cannot keep doing," "I am desperate") or transactional language ("it would be nice")?',
          'Is the pain felt regularly (daily/weekly) or only in specific moments?'
        ],
        verify: [
          { source: 'reddit_pain_intensity', label: 'Reddit — emotional pain language search' },
          { source: 'youtube_howto', label: 'YouTube — "how do I" + niche, read top comments' },
          { source: 'twitter_complaint', label: 'Twitter/X — frustrated rants in this niche' },
          { source: 'quora', label: 'Quora — desperate questions in this niche' },
          { source: 'reddit_top', label: 'Reddit — sort top posts by month, this niche' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 2 — IDEA OR NO-IDEA FILTER
  // ----------------------------------------------------------
  {
    id: 'idea',
    num: '02',
    name: 'Idea / No Idea',
    title: 'Does the <em>idea earn the slot?</em>',
    rubric: 'Gate 02 · Filter',
    principle: {
      text: '"There are four things that determine whether a market is worth attacking: massive pain, purchasing power, easy to target, and growing. If three of four are true, you have a great market. If two, you have a hard road. If one, you have a hobby. Most people pick markets based on what they know, not on whether the market deserves their next twelve months."',
      source: 'RISER Captain\'s Logic · The Four-Quadrant Territory Test'
    },
    inputs: [
      {
        id: 'idea_one_sentence',
        type: 'textarea',
        label: 'State the offer in one sentence — for whom, what outcome, by when.',
        help: 'Format: "I help [avatar] get [outcome] in [timeframe] without [common objection]." If you cannot fit it in one sentence, the offer is unclear.',
        placeholder: 'e.g., I help solo accountants land their first 10 retainer clients in 90 days without cold outreach.'
      },
      {
        id: 'idea_competition',
        type: 'choice',
        label: 'What is the competitive reality?',
        help: 'RISER doctrine: "If no one is doing it, that is usually a sign no one wants it." Competition validates demand. Absence of competition is rarely a moat — it is usually a graveyard.',
        cols: 1,
        options: [
          { value: 'busy', label: 'Crowded market with successful operators', sub: 'Best signal. Demand is proven. You differentiate, not invent.' },
          { value: 'mid', label: 'Some competitors, mostly mediocre', sub: 'Strong signal. Real demand, weak supply. Most opportunities live here.' },
          { value: 'thin', label: 'Almost no competition', sub: 'Caution. Either you found gold OR no one wants this. Default to second.' },
          { value: 'none', label: 'I will be first', sub: 'Almost always wrong. "First mover" usually means "first to die."' }
        ]
      },
      {
        id: 'idea_money_now',
        type: 'choice',
        label: 'The $100 today test — would 10 of these people pay $100 right now for a janky v1?',
        help: 'From the Profitable Widget Playbook (and the "presell before build" doctrine). If you cannot picture 10 specific names paying $100 today, the idea is theoretical.',
        cols: 1,
        options: [
          { value: 'named', label: 'Yes — I can name the 10 people right now', sub: 'GO signal. You have proximity to demand.' },
          { value: 'maybe', label: 'Probably — but I would have to find them', sub: 'REWORK. Until you can name them, you do not have an avatar — you have a hypothesis.' },
          { value: 'no', label: 'No — this would take weeks of marketing first', sub: 'NO. The marketing required to find them IS the validation. Do that before building.' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 3 — PROFITABLE PROBLEM ANGLE
  // ----------------------------------------------------------
  {
    id: 'problem',
    num: '03',
    name: 'Profitable Problem',
    title: 'Is this a <em>painful, urgent, recurring</em> problem?',
    rubric: 'Gate 03 · Problem',
    principle: {
      text: '"Every problem is not a profitable problem. Profitable problems share three features: high pain, high frequency, high cost-of-not-solving. If the problem only happens once and the cost of ignoring it is low, you are not in a business — you are in charity. The best businesses solve problems the customer pays you to keep solving."',
      source: 'RISER Captain\'s Logic · The Profitable-Pain Calibration'
    },
    inputs: [
      {
        id: 'problem_specific',
        type: 'textarea',
        label: 'State the exact problem in one sentence.',
        help: 'Use the customer\'s words. "They cannot get to inbox zero" is a problem. "Productivity" is a category.',
        placeholder: 'e.g., They spend 8+ hours/week on manual invoice reconciliation and miss billing.',
        vocPull: true
      },
      {
        id: 'problem_frequency',
        type: 'choice',
        label: 'How often does the problem recur?',
        help: 'Recurring pain = recurring revenue. One-and-done pain = transactional revenue with high re-acquisition cost.',
        cols: 1,
        options: [
          { value: 'daily', label: 'Daily or weekly', sub: 'Best. Continuity offer fits naturally. LTV compounds.' },
          { value: 'monthly', label: 'Monthly', sub: 'Strong. Subscription rhythm available.' },
          { value: 'quarterly', label: 'Quarterly or seasonal', sub: 'Moderate. Service-based or annual offer fits.' },
          { value: 'once', label: 'Once-in-a-lifetime / project-based', sub: 'Weakest. Every customer is a re-acquisition.' }
        ]
      },
      {
        id: 'problem_cost',
        type: 'choice',
        label: 'What is the cost of NOT solving the problem?',
        help: 'RISER doctrine: "Price is set by the cost of the problem, not the cost of the solution." High cost of inaction = pricing power.',
        cols: 1,
        options: [
          { value: 'high', label: 'High — losing money, customers, or status', sub: 'Premium pricing available. Sell against the loss.' },
          { value: 'moderate', label: 'Moderate — friction and frustration', sub: 'Mid-tier pricing. Sell against the time-drain.' },
          { value: 'low', label: 'Low — minor inconvenience', sub: 'Hard to monetize. Reframe to find higher-cost angle, or pick different problem.' }
        ]
      },
      {
        id: 'problem_existing_solutions',
        type: 'textarea',
        label: 'What do they currently do to solve it (or fail to)?',
        help: 'Name competitors AND non-consumption alternatives ("they just suffer", "they ask their CPA", "they Google it"). The status quo IS the competition.',
        placeholder: 'e.g., They use spreadsheets, hire a part-time bookkeeper, or just get behind and panic at tax time.'
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 4 — GRAND SLAM OFFER BUILDER
  // ----------------------------------------------------------
  {
    id: 'offer',
    num: '04',
    name: 'Grand Slam Offer',
    title: 'Score the offer on <em>the Value Equation</em>',
    rubric: 'Gate 04 · Offer',
    principle: {
      text: '"Value = (Dream Outcome × Perceived Likelihood) ÷ (Time Delay × Effort & Sacrifice). To make any offer better, do one of four things: increase the dream outcome, increase perceived likelihood, decrease time delay, or decrease effort. The numerator is what they want. The denominator is what they pay in pain. Move both."',
      source: 'RISER Captain\'s Logic · The Cargo Value Equation'
    },
    inputs: [
      {
        id: 'offer_dream',
        type: 'textarea',
        label: 'Dream Outcome — what is the explicit transformation?',
        help: 'Specific, vivid, measurable. "10 paying clients in 90 days, working from home, charging $2K/mo retainers." NOT "more freedom."',
        placeholder: 'e.g., Land 10 retainer clients at $2K/mo within 90 days, working under 25 hrs/week.',
        vocPull: true
      },
      {
        id: 'offer_dream_score',
        type: 'scale',
        label: 'Dream Outcome strength (1-10)',
        help: 'How emotionally compelling is the outcome? Would the avatar pay 10× to skip 5 years of pain to get there? 1 = mild benefit, 10 = life-changing.'
      },
      {
        id: 'offer_likelihood',
        type: 'textarea',
        label: 'Perceived Likelihood — what is your proof that this works?',
        help: 'RISER doctrine: "Stack proof until it gets ridiculous." Case studies, screenshots, testimonials, your own results, third-party validation. List what you have right now.',
        placeholder: 'e.g., 3 case studies with named results, my own $0-$50K journey, 47 customer testimonials...'
      },
      {
        id: 'offer_likelihood_score',
        type: 'scale',
        label: 'Perceived Likelihood (1-10)',
        help: 'Looking at the proof above through skeptical buyer eyes — how believable is the promise? 1 = vapor, 10 = undeniable.'
      },
      {
        id: 'offer_time_delay',
        type: 'choice',
        label: 'Time Delay — how fast does the customer feel results?',
        help: 'Speed beats almost every other lever in mid-market offers. The faster the first win, the higher the conversion AND retention.',
        cols: 1,
        options: [
          { value: 'instant', label: 'Within 24 hours of purchase', sub: 'Premium pricing power. Speed is the moat.' },
          { value: 'week', label: 'Within first week', sub: 'Strong. Engineer a Day-1 quick win.' },
          { value: 'month', label: 'Within first 30 days', sub: 'Acceptable. Add interim wins to maintain momentum.' },
          { value: 'months', label: 'Months to first measurable result', sub: 'Hard. Refund risk high. Add quick wins or refund-and-pivot.' }
        ]
      },
      {
        id: 'offer_effort',
        type: 'choice',
        label: 'Effort & Sacrifice — what does the customer have to DO?',
        help: 'Done-with-you beats DIY. Done-for-you beats both. Every step you remove from the customer\'s plate raises perceived value.',
        cols: 1,
        options: [
          { value: 'dfy', label: 'Done-for-you — they barely lift a finger', sub: 'Highest pricing tier ($5K-$50K+). Limited delivery capacity.' },
          { value: 'dwy', label: 'Done-with-you — guided implementation', sub: 'Mid-tier sweet spot ($1K-$5K). Best price-to-effort ratio.' },
          { value: 'diy', label: 'DIY with templates and support', sub: 'Lower tier ($97-$997). Higher volume possible.' },
          { value: 'self', label: 'Self-paced with no human contact', sub: 'Lowest tier ($7-$297). Highest churn. Compete on volume only.' }
        ]
      },
      {
        id: 'offer_mechanism',
        type: 'textarea',
        label: 'Named Mechanism — what is your proprietary process called, and why does it work differently?',
        help: 'RISER doctrine: "A named mechanism is the difference between a $97 product and a $4,997 program containing the same content." Give your method a name (The Retainer Method®, The 90-Day Pulse™, The 4-Lane Framework). Then in one sentence explain why it works when generic approaches fail.',
        placeholder: 'e.g., The Retainer Method™ — a 4-week sprint that replaces hourly billing with outcome-based packages by pre-selling 90 days of work in a single 30-minute conversation. Works because it inverts the proposal cycle: outcome first, scope second.'
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 4½ — OFFER STACK CONSTRUCTOR (Hormozi $100M Offers)
  // ----------------------------------------------------------
  {
    id: 'stack',
    num: '04½',
    name: 'Offer Stack',
    title: 'Build the <em>Grand Slam Stack</em>',
    rubric: 'Gate 04½ · Stack',
    principle: {
      text: '"The naked core offer is never the offer. The offer is the core PLUS the stack: bonuses that solve the next three problems before they happen, a guarantee that flips the risk to you, scarcity that creates a real reason to act now, and a name that makes it sound like a thing rather than a thing-you-do. Every component you remove costs you 10% of conversion."',
      source: 'RISER Captain\'s Logic · The Grand Slam Stack Doctrine'
    },
    inputs: [
      {
        id: 'stack_offer_name',
        type: 'text',
        label: 'Offer name — what do you call this thing?',
        help: 'A named offer is a thing. An unnamed offer is a description. "The 90-Day Retainer Sprint" beats "my coaching program" by 30% on conversion. Use a number, an outcome word, or both.',
        placeholder: 'e.g., The 90-Day Retainer Sprint · The First-10-Clients Accelerator · Founding Pulse Cohort'
      },
      {
        id: 'stack_bonuses',
        type: 'textarea',
        label: 'Bonuses — name 3 to 5 bonuses, each solving the NEXT problem the customer will hit.',
        help: 'Operating rule: bonuses are not "extras" — they are pre-emptive solutions to the objections the buyer has not yet voiced. Format: "Bonus 1: [Name] — [Outcome] — [Standalone value $X]." Each bonus needs a name, a result, and a price-anchor.',
        placeholder: 'Bonus 1: The First-Client Script Library — 7 sales scripts that closed real deals — $497 value\nBonus 2: The Retainer Pricing Calculator — 3 pricing tiers with anchor logic — $297 value\nBonus 3: The 30-Day Onboarding SOP — copy-paste client-onboarding system — $997 value'
      },
      {
        id: 'stack_guarantee_type',
        type: 'choice',
        label: 'Guarantee type — what risk are you absorbing?',
        help: 'RISER doctrine: "If you will not stand behind your offer with a guarantee, neither will they." Hormozi\'s ladder: implied < unconditional < conditional < anti-guarantee. Pick the strongest your unit economics can absorb.',
        cols: 1,
        options: [
          { value: 'anti', label: 'Anti-guarantee — "no refunds, here is why"', sub: 'Boldest. Requires extreme trust + filtering. Not for first launch.' },
          { value: 'conditional', label: 'Conditional — "do X, Y, Z and if no result, double your money back"', sub: 'Best for most operators. Forces customer accountability + dramatic risk reversal.' },
          { value: 'unconditional', label: 'Unconditional — "30-day no-questions-asked refund"', sub: 'Standard. Lowest friction, highest refund risk. Use if delivery is bulletproof.' },
          { value: 'implied', label: 'Implied — "we are confident you will love it"', sub: 'Weakest. Not really a guarantee. Will halve conversion vs. any explicit guarantee.' },
          { value: 'none', label: 'No guarantee', sub: 'Almost always wrong. The buyer absorbs the risk and your conversion craters.' }
        ]
      },
      {
        id: 'stack_guarantee_text',
        type: 'textarea',
        label: 'Write the guarantee — exact words you will use on the page.',
        help: 'Specificity wins. "30-day money-back" beats "guaranteed." "If you don\'t land 3 retainer clients in 60 days, I work with you free until you do" beats "30-day money-back."',
        placeholder: 'e.g., Land 3 retainer clients in 60 days or I work with you free until you do — and you keep all the bonuses.'
      },
      {
        id: 'stack_scarcity',
        type: 'choice',
        label: 'Scarcity mechanism — what makes "buy now" real, not theatrical?',
        help: 'Cialdini: scarcity drives action only when it is REAL. Fake countdown timers train your audience to ignore you. Pick a scarcity that is structurally true.',
        cols: 1,
        options: [
          { value: 'cohort', label: 'Cohort cap — "12 founding members, then closed for 90 days"', sub: 'Best for service/cohort offers. Real, defensible, repeatable.' },
          { value: 'price', label: 'Founding price — "locked at $497 for first 25, then $1,497"', sub: 'Strong. Real reason to act now. Price ladder must be enforced.' },
          { value: 'bonus', label: 'Bonus expiration — "Bonus 3 disappears after Friday"', sub: 'Workable. The bonus must actually go away or trust dies.' },
          { value: 'window', label: 'Launch window — "open Monday, closed Friday"', sub: 'Strong if true. Brunson\'s preferred mechanism. Requires real close.' },
          { value: 'fake', label: 'Fake countdown / inflated urgency', sub: 'NEVER. One discovery and you lose the audience permanently.' },
          { value: 'none', label: 'No scarcity', sub: 'Wrong. The buyer has no structural reason to decide today.' }
        ]
      },
      {
        id: 'stack_total_value',
        type: 'text',
        label: 'Stack total value — sum of core + all bonuses (anchor price)',
        help: 'Cialdini contrast principle: a $497 price next to no anchor looks expensive. A $497 price next to a $5,991 stack value looks like a steal. Add up your core + bonus prices honestly.',
        placeholder: 'e.g., 5991'
      },
      {
        id: 'stack_actual_price',
        type: 'text',
        label: 'Actual offer price (USD)',
        help: 'The price the customer pays. Should be a fraction (typically 1/5 to 1/10) of the stack total above. If the ratio is less than 3:1, your stack is too thin or your price is too high.',
        placeholder: 'e.g., 497'
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 5 — CORE FOUR DISTRIBUTION
  // ----------------------------------------------------------
  {
    id: 'distribution',
    num: '05',
    name: 'Core Four',
    title: 'Pick <em>one</em> of the four ways to get leads',
    rubric: 'Gate 05 · Distribution',
    principle: {
      text: '"There are four ways to get a stranger to know about you: warm outreach, cold outreach, warm content, paid ads. That is it. Every business runs one or more of these. The mistake is picking three at the start. Pick ONE. Get to 100 customers from that one. Then add the next."',
      source: 'RISER Captain\'s Logic · The Core Four Shipping Lanes'
    },
    inputs: [
      {
        id: 'dist_primary',
        type: 'choice',
        label: 'Pick your primary channel (one only).',
        help: 'Operating rule: master one before adding another. The operator who runs LinkedIn cold outreach 5 days a week for 12 weeks beats the operator who tries 4 channels.',
        cols: 2,
        options: [
          {
            value: 'warm_outreach',
            label: 'Warm outreach',
            sub: 'DM/email people who already know you. Best for first 10 customers. Free. Low volume.'
          },
          {
            value: 'cold_outreach',
            label: 'Cold outreach',
            sub: 'DM/email strangers at scale. Best when avatar is identifiable + reachable. Cheap. Skill-intensive.'
          },
          {
            value: 'warm_content',
            label: 'Warm content',
            sub: 'Post valuable content to your audience. Compounds over time. Slow start.'
          },
          {
            value: 'paid_ads',
            label: 'Paid ads',
            sub: 'Pay platforms to put your offer in front of strangers. Requires unit economics first. Fastest scaling.'
          }
        ]
      },
      {
        id: 'dist_volume',
        type: 'textarea',
        label: 'Volume math — how many touches per day to hit your numbers?',
        help: 'RISER doctrine: "More is the answer. Always more." If you need 10 customers in 90 days at 1% conversion, you need 1,000 conversations = ~12/day. Do the math now.',
        placeholder: 'e.g., 50 cold DMs/day × 5 days/week × 12 weeks = 3,000 conversations. At 1% close = 30 customers.'
      },
      {
        id: 'dist_unit_econ',
        type: 'choice',
        label: 'Do you know your unit economics?',
        help: 'Required before paid ads. Optional but useful for organic.',
        cols: 1,
        options: [
          { value: 'yes', label: 'Yes — I know CAC, LTV, payback period', sub: 'GO. Paid ads viable when CAC < 1/3 of 12-month LTV.' },
          { value: 'partial', label: 'Partially — rough estimates only', sub: 'Use organic until estimates become real numbers.' },
          { value: 'no', label: 'No — pre-revenue', sub: 'Stay organic. Paid ads will burn cash with no feedback loop.' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 5½ — DREAM 100 (Brunson · Traffic Secrets)
  // ----------------------------------------------------------
  {
    id: 'dream100',
    num: '05½',
    name: 'Dream 100',
    title: 'Name the <em>100 people who own your audience</em>',
    rubric: 'Gate 05½ · Dream 100',
    principle: {
      text: '"You do not need to find a million strangers. You need to find the 100 people who already gathered them. Every audience you want to reach has been pre-built by 100 specific operators — podcasters, newsletter writers, YouTubers, Skool group owners, association heads, top affiliates. Borrow their boats. Do not build your own dock from scratch."',
      source: 'RISER Captain\'s Logic · The Dream 100 Convoy'
    },
    inputs: [
      {
        id: 'dream100_list',
        type: 'textarea',
        label: 'List 25 specific people, podcasts, newsletters, or groups your avatar already follows.',
        help: 'Named handles. Real URLs. Not "fitness influencers" — but "@HybridAthlete", "ATG for Life YouTube", "Knees Over Toes Skool group", "Ben Patrick Substack". The first 25 take 2 hours of research. Skip this and you build distribution from zero.',
        placeholder: 'e.g.,\n1. @hormozi (Twitter, 2.1M followers)\n2. The My First Million podcast\n3. Indie Hackers community (newsletter)\n4. SaaStr Skool group\n5. ...continue to 25'
      },
      {
        id: 'dream100_strategy',
        type: 'choice',
        label: 'Primary Dream 100 strategy',
        help: 'Brunson\'s framing: there are only three ways in. Pick one. Working two strategies on the same Dream 100 person at the same time = burned bridge.',
        cols: 1,
        options: [
          { value: 'work_in', label: 'Work your way in — provide value first, become known', sub: 'Slowest, most durable. Comment, share, send wins. 90 days to first invitation.' },
          { value: 'buy_in', label: 'Buy your way in — sponsor, advertise, run paid promo', sub: 'Fastest. Costs money. Use when you have unit economics.' },
          { value: 'partner', label: 'Partner — co-create, joint venture, revenue share', sub: 'Highest leverage. Requires you bring something they need.' }
        ]
      },
      {
        id: 'dream100_first_outreach',
        type: 'textarea',
        label: 'First-touch script — what you will send to the first 10.',
        help: 'No pitch. No ask. The first message is gift-only. Quote them, share a result, send a resource. Reciprocity is built before the ask is made. Cialdini\'s rule: the gift comes first or the ask is dead.',
        placeholder: 'e.g., "Hey [Name] — just used your retainer-pricing framework with 3 clients. Closed 2 at $4K/mo. Wanted to send a thank-you and the case study screenshots. No ask, just gratitude."'
      },
      {
        id: 'dream100_volume',
        type: 'choice',
        label: 'Outreach volume — how many Dream 100 contacts per week?',
        help: 'Brunson: 100 contacts in a week is not unreasonable. 100 in a year means you do not believe in the strategy. The Dream 100 is a daily action, not a quarterly project.',
        cols: 1,
        options: [
          { value: 'high', label: '20+ per week', sub: 'Best. Compounds fast. By month 3 you are known in the niche.' },
          { value: 'medium', label: '5–20 per week', sub: 'Workable. Slower compound. 6+ months to network density.' },
          { value: 'low', label: '<5 per week', sub: 'Too slow. The Dream 100 stops working below this volume.' },
          { value: 'none', label: 'Not yet doing it', sub: 'NO. The Dream 100 is the highest-leverage activity in early growth. Start today.' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 6 — HOOK / HEADLINE / BODY
  // ----------------------------------------------------------
  {
    id: 'copy',
    num: '06',
    name: 'Hook / Body',
    title: 'Write the <em>hook, headline, and body</em>',
    rubric: 'Gate 06 · Copy',
    principle: {
      text: '"You have three seconds. The hook stops the scroll. The headline promises the dream. The body proves you can deliver. Most copy fails at the hook, blames the product. The hook is not a creative challenge — it is a calling-out exercise. Call out the avatar by their pain, by name, in the words they use about themselves."',
      source: 'RISER Captain\'s Logic · The Three-Second Signal Flare'
    },
    inputs: [
      {
        id: 'copy_hook',
        type: 'textarea',
        label: 'Hook — first 3 seconds. What stops the scroll?',
        help: 'Hook formats that work: callout question ("Solo accountants — are you charging by the hour?"), pattern interrupt ("I fired my agency yesterday."), specific stat ("47% of [avatar] do this wrong"). Avoid clever; choose clear.',
        placeholder: 'e.g., Solo accountants under $5K/mo: stop trading hours for dollars by Q2.',
        vocPull: true
      },
      {
        id: 'copy_headline',
        type: 'textarea',
        label: 'Headline — the promise.',
        help: 'Format: [Outcome] in [Timeframe] without [Objection]. Specific outcome, specific timeframe, named objection removed. Use numbers when possible.',
        placeholder: 'e.g., Land 10 retainer clients at $2K/mo within 90 days — without cold outreach, paid ads, or a website rebuild.',
        vocPull: true
      },
      {
        id: 'copy_body',
        type: 'textarea',
        label: 'Body — proof + mechanism + call-to-action.',
        help: '5-line skeleton: Problem · What\'s working now · How it works (named mechanism) · Proof · Specific CTA. Keep under 100 words for ads, under 250 for landing pages.',
        placeholder: 'Most solo accountants are stuck billing by the hour, capping income at 40 hrs × $X. The shift is to retainer-based packages priced on outcomes, not time. The Retainer Method® gets accountants from hourly to $2K/mo retainer in 90 days...',
        vocPull: true
      },
      {
        id: 'copy_cta',
        type: 'choice',
        label: 'Call-to-action specificity',
        help: 'Vague CTAs ("learn more") convert at half the rate of specific CTAs ("get the 5-page retainer template + 90-day guide").',
        cols: 1,
        options: [
          { value: 'specific', label: 'Named asset + specific outcome', sub: 'Best. "Get the 5-page Retainer Pricing Calculator." Concrete object.' },
          { value: 'mid', label: 'Action verb + topic', sub: 'OK. "Apply for a strategy call." "Download the playbook."' },
          { value: 'vague', label: 'Generic ("learn more")', sub: 'Weakest. Rewrite before deploy.' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 6½ — PERSUASION ARCHITECTURE (Cialdini · Brunson · Kennedy)
  // ----------------------------------------------------------
  {
    id: 'persuasion',
    num: '06½',
    name: 'Persuasion',
    title: 'Audit the <em>persuasion architecture</em>',
    rubric: 'Gate 06½ · Persuasion',
    principle: {
      text: '"Copy is downstream of persuasion. Most operators write copy and hope persuasion happens. The reverse is correct: identify the one belief you must break, the seven psychological levers your page activates, and the lead magnet that creates reciprocity before the ask. Copy is the surface; persuasion is the structure underneath."',
      source: 'RISER Captain\'s Logic · The Persuasion Architecture'
    },
    inputs: [
      {
        id: 'persuasion_big_domino',
        type: 'textarea',
        label: 'The Big Domino — what is the ONE belief you must break for the sale to happen?',
        help: 'Brunson\'s One Big Domino: "If I can make my prospect believe ONE thing is true, all other objections become irrelevant." Format: "If they believe [X], then they will buy." Make it specific to your avatar and your offer\'s mechanism.',
        placeholder: 'e.g., If solo accountants believe that retainer pricing is achievable in 90 days without losing their existing hourly clients, the rest of the offer sells itself.'
      },
      {
        id: 'persuasion_false_beliefs',
        type: 'textarea',
        label: 'False Belief Audit — name the 3 false beliefs blocking the sale.',
        help: 'Brunson\'s 3-belief framework: (1) belief about the VEHICLE ("retainer pricing only works for big firms"), (2) belief about THEMSELVES ("I am too new to charge that much"), (3) belief about EXTERNAL ("my market is too price-sensitive"). Name one of each.',
        placeholder: 'Vehicle: "Retainers only work for established firms with reputations."\nSelf: "I do not have the credibility to charge $2K/mo yet."\nExternal: "My local market will not pay retainer rates."'
      },
      {
        id: 'persuasion_lead_magnet',
        type: 'textarea',
        label: 'Reciprocity gift — what do you GIVE before you ask?',
        help: 'Cialdini\'s reciprocity rule: the gift comes first or the ask is dead. Brunson\'s Bait. Hormozi\'s Lead Magnet. Specific, useful, immediate. Not "a free guide" — a named, valuable asset.',
        placeholder: 'e.g., The Retainer Pricing Calculator — 3-tier model with anchor logic + 5 sample proposals that closed real $2K-$5K/mo deals. PDF + Notion template. 7 minutes to use.',
        vocPull: true
      },
      {
        id: 'persuasion_reciprocity',
        type: 'choice',
        label: 'Reciprocity — does your funnel give before it asks?',
        help: 'Cialdini\'s most under-leveraged principle. The lead magnet, the free workshop, the pre-call resource. Without a gift first, the ask sounds like a demand.',
        cols: 1,
        options: [
          { value: 'strong', label: 'Strong — named, useful asset given freely before any pitch', sub: 'GO. Reciprocity debt is established.' },
          { value: 'weak', label: 'Weak — generic "newsletter" or "free webinar"', sub: 'REWORK. Generic gifts are not gifts. Make it specific and valuable.' },
          { value: 'none', label: 'None — direct pitch, no gift', sub: 'NO. Cold ask without reciprocity converts at 1/3 the rate.' }
        ]
      },
      {
        id: 'persuasion_social_proof',
        type: 'choice',
        label: 'Social Proof — what density and similarity?',
        help: 'Cialdini: people follow people who look like them. 3 testimonials from people who match the avatar exactly beat 30 generic testimonials. Specificity > volume.',
        cols: 1,
        options: [
          { value: 'high', label: '5+ testimonials from avatar-similar customers, with named results', sub: 'GO. Strong proof density. Names, photos, specific numbers.' },
          { value: 'medium', label: '2-4 testimonials, partial similarity', sub: 'REWORK. Stack more, get exact-avatar matches.' },
          { value: 'low', label: '0-1 testimonials OR generic praise', sub: 'NO. The proof gap is the conversion gap. Get 3 specific testimonials before launch.' }
        ]
      },
      {
        id: 'persuasion_authority',
        type: 'choice',
        label: 'Authority — what credentials, results, or associations are visible?',
        help: 'Cialdini: people defer to expertise. Specific results > vague credentials. "Built and sold a $4M agency" beats "12 years experience." Numbers + names + outcomes.',
        cols: 1,
        options: [
          { value: 'strong', label: 'Strong — specific track record, results, or recognized association', sub: 'GO. Authority is unambiguous.' },
          { value: 'borrowed', label: 'Borrowed — endorsement from named authority figure', sub: 'Workable. Borrowed authority is real authority if attributed.' },
          { value: 'thin', label: 'Thin — generic credentials, no specific results', sub: 'REWORK. Replace credentials with results. Numbers > letters after your name.' }
        ]
      },
      {
        id: 'persuasion_unity',
        type: 'choice',
        label: 'Unity — does your copy use shared-identity language?',
        help: 'Cialdini\'s 7th principle (the most overlooked): "we," "us," "our kind," "people like us." Tribe language. The avatar should feel they belong to a group, not a market segment.',
        cols: 1,
        options: [
          { value: 'strong', label: 'Strong — explicit shared identity, named tribe', sub: 'Best. "Solo accountants who refuse to bill by the hour."' },
          { value: 'medium', label: 'Implicit — written for the avatar but no tribe naming', sub: 'OK. Add explicit identity language for 20% conversion lift.' },
          { value: 'absent', label: 'Absent — generic "you" with no identity layer', sub: 'REWORK. Name the tribe.' }
        ]
      },
      {
        id: 'persuasion_consistency',
        type: 'choice',
        label: 'Consistency — what small "yes" do you secure before the big yes?',
        help: 'Cialdini: people stay consistent with prior commitments. The micro-yes (download, quiz, opt-in, free call) creates the consistency pressure that makes the macro-yes feel natural.',
        cols: 1,
        options: [
          { value: 'multistep', label: 'Multi-step funnel — opt-in → engagement → ask', sub: 'Best. Each step is a small yes.' },
          { value: 'singlestep', label: 'Single-step — direct ask, no priming', sub: 'REWORK. Add at least one micro-commitment before the ask.' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 7 — DEPLOY GATE
  // ----------------------------------------------------------
  {
    id: 'deploy',
    num: '07',
    name: 'Deploy',
    title: '<em>Ship</em> the minimum viable launch',
    rubric: 'Gate 07 · Deploy',
    principle: {
      text: '"Done beats perfect every single time. The launch you do not run cannot teach you anything. The launch that embarrasses you in 12 months is the right launch — anything you ship today that you would still be proud of in a year was over-engineered. Ship in 30 days. The market is the editor."',
      source: 'RISER Captain\'s Logic · The Launch-Ugly Doctrine'
    },
    inputs: [
      {
        id: 'deploy_date',
        type: 'text',
        label: 'Beta launch date (specific calendar date, ≤ 30 days out)',
        help: 'A date is not a commitment until it is signed. Pick a Friday. Tell another operator. Make it expensive to slip.',
        placeholder: 'e.g., 2026-05-23'
      },
      {
        id: 'deploy_size',
        type: 'choice',
        label: 'Beta cohort size',
        help: 'Captain\'s rule for first launch: smaller is better. 10 over-served founding members produce 10× the testimonial density of 50 mediocre members. 0 is too few; 50 is too many.',
        cols: 1,
        options: [
          { value: 'tiny', label: '5–10 founding members', sub: 'Best for first-time launch. Over-serve. 10× testimonial density.' },
          { value: 'small', label: '10–25 members', sub: 'Strong. Workable delivery capacity.' },
          { value: 'medium', label: '25–50 members', sub: 'Risky on first launch. Delivery quality slips.' },
          { value: 'big', label: '50+ members', sub: 'Almost always wrong on first launch.' }
        ]
      },
      {
        id: 'deploy_price',
        type: 'text',
        label: 'Beta price (single number, USD)',
        help: 'Founding rate, locked. Avoid the "Muddled Middle" ($500–$900). Default for service/coaching: $497–$997 founding rate, future $1497–$1997. For productized: $97–$297 founding, future $297–$497.',
        placeholder: 'e.g., 497'
      },
      {
        id: 'deploy_kill_rule',
        type: 'choice',
        label: 'Kill rule — what happens if you do not hit the number?',
        help: 'RISER doctrine: "If you cannot say what failure looks like in advance, you cannot tell the difference between a struggling launch and a dead launch." Kill rules protect from sunk-cost grinding.',
        cols: 1,
        options: [
          { value: 'tight', label: '< 5 paid in 14 days = pivot offer angle', sub: 'Best. Forces a decision before sunk cost compounds.' },
          { value: 'medium', label: '< 3 paid in 21 days = pivot', sub: 'Acceptable. Slightly slower trigger.' },
          { value: 'loose', label: 'I will keep going regardless', sub: 'Wrong answer. Define failure or it will define you.' }
        ]
      },
      {
        id: 'deploy_4_tools',
        type: 'choice',
        label: 'Are the 4 minimum tools live?',
        help: 'RISER minimum: a way to capture leads, a way to take payment, a way to deliver, a way to measure. Everything else is optional pre-launch.',
        cols: 1,
        options: [
          { value: 'all', label: 'All 4 live and tested', sub: 'GO.' },
          { value: 'three', label: '3 of 4 live', sub: 'REWORK. Name the missing one and ship it this week.' },
          { value: 'fewer', label: 'Fewer than 3', sub: 'NO. Tools are not the problem. Build the missing tools FIRST in the next 7 days.' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 8 — ITERATE LOOP
  // ----------------------------------------------------------
  {
    id: 'iterate',
    num: '08',
    name: 'Iterate',
    title: '<em>Iterate</em> on real customer data',
    rubric: 'Gate 08 · Iterate',
    principle: {
      text: '"Volume forgives mistakes. The operator who has 100 sales conversations in a month learns more than the operator who has 5 perfect ones. Iterate on data, not opinions. Talk to every customer. Ask the same five questions. After 30 conversations, the pattern is undeniable."',
      source: 'RISER Captain\'s Logic · The Voyage Log Iteration Cycle'
    },
    inputs: [
      {
        id: 'iter_at_bats',
        type: 'choice',
        label: 'How many at-bats before iterating?',
        help: 'Iterating after 3 calls = noise. Iterating after 30 calls = signal. Iterating after 300 = late.',
        cols: 1,
        options: [
          { value: 'enough', label: '20–30 sales conversations or 30+ users', sub: 'GO. Sample size large enough to see patterns.' },
          { value: 'partial', label: '10–20 conversations', sub: 'REWORK. Pattern unclear. Run 10 more before changing anything.' },
          { value: 'tiny', label: 'Fewer than 10', sub: 'NO. Iteration is premature. Get to 30 first.' }
        ]
      },
      {
        id: 'iter_signal',
        type: 'textarea',
        label: 'What is the dominant pattern from real customers?',
        help: 'RISER doctrine: "Customers tell you exactly what is wrong. Most operators do not believe them." What objection comes up most? What feature do they ignore? What outcome do they actually celebrate?',
        placeholder: 'e.g., 7 of 10 customers say the templates worked but the live calls were too long. 3 dropped at week 4 because of pacing.'
      },
      {
        id: 'iter_lever',
        type: 'choice',
        label: 'Which Value Equation lever do you adjust?',
        help: 'Pick one. Changing all four at once is rebuild, not iterate. Iterate is one lever per cycle.',
        cols: 2,
        options: [
          { value: 'dream', label: 'Strengthen Dream Outcome', sub: 'Reframe transformation, raise specificity.' },
          { value: 'likelihood', label: 'Increase Perceived Likelihood', sub: 'Add proof, case studies, guarantees.' },
          { value: 'time', label: 'Decrease Time Delay', sub: 'Engineer faster first win, add quick wins.' },
          { value: 'effort', label: 'Decrease Effort & Sacrifice', sub: 'Remove DIY steps, add templates, raise tier to DWY/DFY.' }
        ]
      },
      {
        id: 'iter_awareness',
        type: 'choice',
        label: 'Awareness stage — where is the market relative to the solution?',
        help: 'Eugene Schwartz\'s 5 stages (used by Hormozi + Brunson): the right copy depends on what the market already knows. A Stage 1 audience needs the problem named. A Stage 5 audience needs a new mechanism. Most copy fails because it is written for the wrong stage.',
        cols: 1,
        options: [
          { value: 'unaware', label: 'Stage 1 — Unaware: do not know they have the problem', sub: 'Lead with a story or stat that names the pain. Direct claims fall flat here.' },
          { value: 'problem', label: 'Stage 2 — Problem-Aware: feel the pain, do not know solutions exist', sub: 'Lead with the pain in their words. Promise the category of relief.' },
          { value: 'solution', label: 'Stage 3 — Solution-Aware: know solutions exist, comparing options', sub: 'Lead with your unique mechanism. Differentiate, do not invent.' },
          { value: 'product', label: 'Stage 4 — Product-Aware: know your product, weighing it', sub: 'Lead with proof + risk reversal. They need permission to act.' },
          { value: 'most', label: 'Stage 5 — Most Aware: know your product, just need a reason now', sub: 'Lead with offer + scarcity. Direct ask. Brevity wins.' }
        ]
      },
      {
        id: 'iter_sophistication',
        type: 'choice',
        label: 'Market sophistication — how worn-out are the claims in this niche?',
        help: 'Schwartz\'s sophistication ladder: every claim works once, weakens with repetition, dies when the market has heard it 1,000 times. The fix is a NEW MECHANISM that resets the claim. Your market sophistication tells you how hard the new-mechanism work has to be.',
        cols: 1,
        options: [
          { value: 's1', label: 'Stage 1 — first to make the claim', sub: 'Direct claims work. Rare in 2026; usually means the niche is small.' },
          { value: 's2', label: 'Stage 2 — claim works, you must make it bigger', sub: '"Lose 30 lbs" → "Lose 30 lbs in 30 days." Amplify.' },
          { value: 's3', label: 'Stage 3 — claims worn, need a unique mechanism', sub: 'Most niches in 2026 live here. Named mechanism is mandatory.' },
          { value: 's4', label: 'Stage 4 — mechanisms saturated, need a NEW mechanism', sub: '"Not keto, not fasting — the metabolic-window method." Reset the category.' },
          { value: 's5', label: 'Stage 5 — every mechanism heard, must lead with identity / story', sub: 'Tribe + identity wins. The mechanism is a side-effect of who you are.' }
        ]
      },
      {
        id: 'iter_refund_interviews',
        type: 'choice',
        label: 'Refund interview discipline — are you running them?',
        help: 'Hormozi: "The refund call is the single most valuable sales call you will ever take." 5 questions: (1) What did you hope this would do for you? (2) What part of the experience caused you to step back? (3) Was the issue hook, audience, offer, onboarding, or delivery? (4) What would have changed your mind? (5) Would you refer someone else? The pattern is in the answers.',
        cols: 1,
        options: [
          { value: 'always', label: 'Yes — every refund triggers a structured 5-question call', sub: 'GO. You are mining the highest-signal data in the business.' },
          { value: 'sometimes', label: 'Sometimes — informal refund conversations', sub: 'REWORK. Formalize the 5 questions. Track the pattern across 10 refunds.' },
          { value: 'never', label: 'Never — refunds are processed silently', sub: 'NO. You are throwing away your best diagnostic data. Start tomorrow.' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 9 — PIVOT GATE
  // ----------------------------------------------------------
  {
    id: 'pivot',
    num: '09',
    name: 'Pivot or Hold',
    title: 'Is the offer dead, the audience wrong, or the hook off?',
    rubric: 'Gate 09 · Diagnostic',
    principle: {
      text: '"Three things can be wrong: the offer, the audience, or the hook. They look identical from the outside — both produce zero sales. The diagnostic is in the data. Hook problem: low click-through. Audience problem: high click-through, no conversion. Offer problem: high conversion, fast refund. Stop guessing. Read the funnel."',
      source: 'RISER Captain\'s Logic · The Three-Failure-Mode Diagnostic'
    },
    inputs: [
      {
        id: 'pivot_metric_ctr',
        type: 'choice',
        label: 'Are people clicking through your hooks?',
        help: 'Cold ad CTR baseline: 1-2%. Organic post engagement baseline: 1-3% of followers. Below = hook problem.',
        cols: 1,
        options: [
          { value: 'yes', label: 'Yes — CTR / engagement is normal or above', sub: 'Hook is fine. Look elsewhere.' },
          { value: 'no', label: 'No — barely anyone clicks or engages', sub: 'HOOK problem. Rewrite hooks before changing offer or audience.' }
        ]
      },
      {
        id: 'pivot_metric_optin',
        type: 'choice',
        label: 'Of clicks, what % opt-in / start the buying conversation?',
        help: 'Cold landing page baseline: 20-40%. Sales page to purchase baseline: 1-3%. Application/booking baseline: 5-15%.',
        cols: 1,
        options: [
          { value: 'high', label: 'Above baseline (great)', sub: 'Audience is right and offer is interesting.' },
          { value: 'mid', label: 'At baseline', sub: 'OK. Look at conversion deeper in funnel.' },
          { value: 'low', label: 'Below baseline (people click, do not opt-in)', sub: 'AUDIENCE problem. Wrong people are showing up. Refine targeting.' }
        ]
      },
      {
        id: 'pivot_metric_close',
        type: 'choice',
        label: 'Of buyers, what % stay, refer, or upsell?',
        help: 'Refund rate >10% in first 30 days = offer problem. Refund rate <5% = offer is at minimum acceptable.',
        cols: 1,
        options: [
          { value: 'good', label: 'Refund rate <5%, NPS positive', sub: 'Offer works. Scale.' },
          { value: 'mid', label: 'Refund rate 5-10%', sub: 'REWORK. Offer is borderline. Improve delivery before scaling.' },
          { value: 'bad', label: 'Refund rate >10% OR negative NPS', sub: 'OFFER problem. Do not scale. Fix the delivery or the promise.' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 10 — SCALE GATE
  // ----------------------------------------------------------
  {
    id: 'scale',
    num: '10',
    name: 'Scale',
    title: '<em>Scale</em> what is working',
    rubric: 'Gate 10 · Scale',
    principle: {
      text: '"You scale what works. You do not scale what might work. The signal you can scale: same offer, same audience, same channel, repeatedly producing customers at known unit economics. Scaling before this signal is gambling. Scaling after is math."',
      source: 'RISER Captain\'s Logic · The Scale Signal Doctrine'
    },
    inputs: [
      {
        id: 'scale_signal',
        type: 'choice',
        label: 'Do you have the scale signal?',
        help: 'Operating rule: 10 customers from one channel at known CAC and 6+ months of retention data = scale signal. Anything less = volume gambling.',
        cols: 1,
        options: [
          { value: 'yes', label: 'Yes — 10+ customers from one channel, known unit economics, 6+ months of retention data', sub: 'GO. Scale begins.' },
          { value: 'partial', label: 'Some signal, partial data', sub: 'REWORK. Get to 10 customers + 6 months retention before scaling.' },
          { value: 'no', label: 'No — early or unstable', sub: 'NO scale. Stay in iterate loop. Volume is not the answer yet.' }
        ]
      },
      {
        id: 'scale_lever',
        type: 'choice',
        label: 'How do you scale? (Pick one)',
        help: 'The three scale levers: increase price, increase volume, increase retention. Most operators reach for volume first; that is usually wrong.',
        cols: 1,
        options: [
          { value: 'price', label: 'Raise price first', sub: 'Highest leverage. 10% price increase ≈ 50%+ profit increase. Test before raising.' },
          { value: 'retention', label: 'Increase retention / LTV', sub: 'Second-highest. Reduce churn 20% ≈ 100% LTV increase.' },
          { value: 'volume', label: 'Increase volume (more leads, more conversion)', sub: 'Third lever. Most expensive. Use only when price + retention are maxed.' }
        ]
      },
      {
        id: 'scale_constraint',
        type: 'textarea',
        label: 'What is the current bottleneck?',
        help: 'Theory of Constraints: there is one bottleneck at a time. Lead gen, sales, delivery, retention. Name it. Fix it. Move to the next.',
        placeholder: 'e.g., Delivery — I cannot onboard more than 5 new clients per month without burning out.'
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 11 — REPEAT
  // ----------------------------------------------------------
  {
    id: 'repeat',
    num: '11',
    name: 'Repeat',
    title: 'Find <em>another angle</em> — scale, profit, repeat',
    rubric: 'Gate 11 · Compound',
    principle: {
      text: '"One offer, one audience, one channel — that is a business. Two offers to the same audience — that is a customer base. Three offers to the same audience — that is a moat. Most operators jump to a second business before they have built one. The compound move is to deepen the same audience with the next problem they will pay you to solve."',
      source: 'RISER Captain\'s Logic · The Compound Moat Principle'
    },
    inputs: [
      {
        id: 'repeat_next_problem',
        type: 'textarea',
        label: 'What is the NEXT problem your existing customers will pay you to solve?',
        help: 'Operating rule: ask 20 customers "what is the next thing you would buy from me?" Build that. Same audience, no new acquisition cost. LTV doubles.',
        placeholder: 'e.g., Customers landed retainers but struggle to scale past $20K/mo. Next offer: "Retainer to Agency" coaching at $4,997.'
      },
      {
        id: 'repeat_decision',
        type: 'choice',
        label: 'What is the right next move?',
        help: 'Most operators get this wrong. The temptation is "another business." The right answer is almost always "another offer to the same audience."',
        cols: 1,
        options: [
          { value: 'deepen', label: 'New offer, SAME audience, SAME channel', sub: 'Best. Compound the moat. 5x LTV from existing customers.' },
          { value: 'expand', label: 'Same offer, new adjacent audience', sub: 'Second-best. Tested offer reduces risk.' },
          { value: 'channel', label: 'Same offer, same audience, NEW channel', sub: 'Third option. Channel diversification reduces platform risk.' },
          { value: 'new', label: 'New business entirely', sub: 'Almost always wrong. You are leaving compound returns on the table.' }
        ]
      },
      {
        id: 'repeat_constraint_check',
        type: 'choice',
        label: 'Have you maxed out the current offer first?',
        help: 'RISER doctrine: "Do not start a second business until the first is at the limit of what one operator can extract from it." Most operators are at 30% of that limit when they get bored and pivot.',
        cols: 1,
        options: [
          { value: 'maxed', label: 'Yes — same offer at $X-million ARR with healthy retention', sub: 'GO compound.' },
          { value: 'midway', label: 'No — still room in the current offer', sub: 'REWORK. Stay focused. Maximize before adding.' },
          { value: 'bored', label: 'I am bored / want something new', sub: 'NO. Boredom is not strategy. Re-engage the current business.' }
        ]
      },
      {
        id: 'repeat_ladder_bait',
        type: 'text',
        label: 'Value Ladder Rung 1 — BAIT (free lead magnet, name + format)',
        help: 'Brunson\'s ladder starts here. Free, named, valuable. The first rung exists to create reciprocity and build the list. If you have no bait, you have no ladder.',
        placeholder: 'e.g., The Retainer Pricing Calculator (PDF + Notion template)'
      },
      {
        id: 'repeat_ladder_tripwire',
        type: 'text',
        label: 'Rung 2 — TRIPWIRE ($7-$97 entry offer, name + price)',
        help: 'Low-ticket entry point. Converts a lead to a buyer for the price of a coffee. Buyers behave fundamentally differently from leads — this is the rung that creates the buyer-list segment.',
        placeholder: 'e.g., The 7-Day Retainer Email Course — $27'
      },
      {
        id: 'repeat_ladder_core',
        type: 'text',
        label: 'Rung 3 — CORE OFFER ($297-$1,997, name + price)',
        help: 'Your main offer. The Grand Slam. Most operators only have this rung and wonder why they cannot scale.',
        placeholder: 'e.g., The 90-Day Retainer Sprint — $497'
      },
      {
        id: 'repeat_ladder_continuity',
        type: 'text',
        label: 'Rung 4 — CONTINUITY (recurring offer, name + monthly price)',
        help: 'Hormozi: "The single highest LTV-per-dollar move is continuity." Skool community, software subscription, monthly coaching, certification renewal. If you have no continuity, you are leaving 60% of LTV on the table.',
        placeholder: 'e.g., The Retainer Captains Skool — $97/mo'
      },
      {
        id: 'repeat_ladder_high',
        type: 'text',
        label: 'Rung 5 — HIGH-TICKET / BACK-END ($5K-$50K+, name + price)',
        help: 'The premium DFY tier. 80% of operator profit lives here. Often "Done-with-me" or "Done-for-you" implementation of the core offer\'s outcome.',
        placeholder: 'e.g., The Agency Architect — $9,997 12-week 1:1 build'
      },
      {
        id: 'repeat_continuity_status',
        type: 'choice',
        label: 'Continuity health — what % of customers are on a recurring offer?',
        help: 'The single highest-leverage metric for compound LTV. Below 20% = you have not built the continuity offer yet. Above 60% = you have a real moat.',
        cols: 1,
        options: [
          { value: 'strong', label: '60%+ on continuity', sub: 'GO. Real LTV. Real moat.' },
          { value: 'mid', label: '20-60% on continuity', sub: 'Workable. Improve the continuity offer or migration path.' },
          { value: 'low', label: '<20% on continuity', sub: 'REWORK. Build the continuity offer. Highest-leverage gap in your business.' },
          { value: 'none', label: 'No continuity offer exists', sub: 'NO. Build it before scaling acquisition further.' }
        ]
      },
      {
        id: 'repeat_dream100_affiliate',
        type: 'choice',
        label: 'Affiliate / partner activation — have you turned customers into affiliates?',
        help: 'Brunson: the second wave of growth comes from your customers selling for you. 10 customer-affiliates each bringing 5 clients = 50 clients with zero acquisition cost.',
        cols: 1,
        options: [
          { value: 'active', label: 'Yes — formal program with named affiliates already producing', sub: 'GO. Compound is engaged.' },
          { value: 'informal', label: 'Informal referrals, no program', sub: 'REWORK. Formalize. A 30%-commission affiliate program turns your customer list into a sales force.' },
          { value: 'none', label: 'No referral or affiliate motion', sub: 'NO. You are paying for every customer when half of them would pay to bring others.' }
        ]
      }
    ]
  },

  // ----------------------------------------------------------
  // GATE 12 — SUMMARY / BRIEF
  // ----------------------------------------------------------
  {
    id: 'summary',
    num: '12',
    name: 'Brief',
    title: 'Your <em>One-Page Brief</em>',
    rubric: 'Decision Document',
    isSummary: true
  }
];

// ============================================================
// STATE MANAGEMENT
// ============================================================

const STORAGE_KEY = 'riser-mvo-widget-v3';
let state = {
  currentGate: 0,
  answers: {},
  verdicts: {}, // { gateId: 'go'|'no'|'rework' }
  painCards: [],   // Array of { id, title, sourceUrl, sourceCommunity, score, frequency, audience, quotes:[], solutions:[], isLead:bool, clusterId:string|null }
  voCVault: [],    // Auto-derived flat list of all quotes for cross-gate use
  leadPainId: null, // The pain card chosen as the avatar seed
  startedAt: null,
  updatedAt: null
};

async function loadState() {
  // Hosted-environment storage: localStorage works in any browser.
  try {
    const raw = localStorage.getItem(STORAGE_KEY);
    if (raw) {
      const parsed = JSON.parse(raw);
      Object.assign(state, parsed);
      return true;
    }
  } catch (e) {
    // No saved state or storage unavailable — fine, fresh session.
  }
  return false;
}

async function saveState() {
  state.updatedAt = new Date().toISOString();
  if (!state.startedAt) state.startedAt = state.updatedAt;
  try {
    localStorage.setItem(STORAGE_KEY, JSON.stringify(state));
  } catch (e) {
    console.warn('Save failed:', e);
  }
}

async function resetState() {
  if (!confirm('This will erase all your answers. Are you sure?')) return;
  state = {
    currentGate: 0,
    answers: {},
    verdicts: {},
    painCards: [],
    voCVault: [],
    leadPainId: null,
    startedAt: null,
    updatedAt: null
  };
  try {
    localStorage.removeItem(STORAGE_KEY);
  } catch (e) {}
  renderProgressRail();
  renderGate(0);
}

// ============================================================
// PAIN CARD HELPERS — for Gate 00½ and cross-gate VOC vault
// ============================================================

function newPainCardId() {
  return 'pain_' + Date.now().toString(36) + '_' + Math.random().toString(36).slice(2, 6);
}

function getLeadPainCard() {
  if (!state.leadPainId) return null;
  return (state.painCards || []).find(c => c.id === state.leadPainId) || null;
}

function getClusterCards() {
  // Cards in the same cluster as the lead, INCLUDING the lead card itself.
  const lead = getLeadPainCard();
  if (!lead) return [];
  if (!lead.clusterId) return [lead];
  return (state.painCards || []).filter(c => c.clusterId === lead.clusterId);
}

function rebuildVOCVault() {
  // Aggregate all quotes across all pain cards.
  const flat = [];
  (state.painCards || []).forEach(card => {
    (card.quotes || []).forEach(q => {
      const trimmed = (q || '').trim();
      if (trimmed) flat.push({
        text: trimmed,
        cardTitle: card.title || 'Untitled pain',
        source: card.sourceCommunity || ''
      });
    });
  });
  state.voCVault = flat;
}

function hasVOCQuotes() {
  return (state.voCVault || []).length > 0;
}

function paintFrequencyToWidget(painFrequency) {
  // Map the pain card frequency string onto the Gate 03 frequency dropdown values.
  const map = {
    'daily': 'daily',
    'weekly': 'daily',  // daily/weekly bucket
    'monthly': 'monthly',
    'quarterly': 'quarterly',
    'seasonal': 'quarterly',
    'once': 'once',
    'one-time': 'once'
  };
  return map[(painFrequency || '').toLowerCase()] || null;
}

function openVOCPopover(targetInputId) {
  // Build the popover DOM. Click a quote → insert into the target textarea.
  const vault = state.voCVault || [];
  if (vault.length === 0) return;

  // Remove any existing popover
  const existing = document.querySelector('.voc-popover');
  if (existing) existing.remove();

  const overlay = document.createElement('div');
  overlay.className = 'voc-popover';
  overlay.innerHTML = `
    <div class="voc-popover-backdrop" data-voc-close></div>
    <div class="voc-popover-card">
      <button type="button" class="voc-popover-close" data-voc-close>×</button>
      <h3>Voice-of-Customer Vault</h3>
      <p class="voc-help">Click a quote to append it to your answer above. The widget wraps it in quotes and adds an attribution line. Use multiple quotes to stack proof.</p>
      ${vault.map((q, i) => `
        <div class="voc-quote" data-voc-insert="${i}">
          ${escapeHtml(q.text)}
          <span class="src">From: ${escapeHtml(q.cardTitle)}${q.source ? ' · ' + escapeHtml(q.source) : ''}</span>
        </div>
      `).join('')}
    </div>
  `;
  document.body.appendChild(overlay);

  // Wire close
  overlay.querySelectorAll('[data-voc-close]').forEach(el => {
    el.addEventListener('click', () => overlay.remove());
  });

  // Wire insert-on-click
  overlay.querySelectorAll('[data-voc-insert]').forEach(el => {
    el.addEventListener('click', () => {
      const idx = parseInt(el.getAttribute('data-voc-insert'));
      const quote = vault[idx];
      if (!quote) return;
      const target = document.querySelector(`textarea[data-input="${targetInputId}"]`);
      if (!target) return;
      const current = target.value || '';
      const insertion = (current.trim() ? '\n\n' : '') + `"${quote.text}" — voice of customer`;
      target.value = current + insertion;
      // Sync state
      state.answers[targetInputId] = target.value;
      saveState();
      // Visual feedback
      target.focus();
      overlay.remove();
    });
  });

  // ESC to close
  const escHandler = (e) => {
    if (e.key === 'Escape') {
      overlay.remove();
      document.removeEventListener('keydown', escHandler);
    }
  };
  document.addEventListener('keydown', escHandler);
}

// ============================================================
// VERDICT ENGINE — RISER Captain's Logic
// ============================================================

function computeVerdict(gateId) {
  const a = state.answers;

  switch(gateId) {
    case 'paindiscovery': {
      const cards = state.painCards || [];
      const lead = getLeadPainCard();

      if (cards.length === 0) {
        return {
          verdict: 'rework',
          name: 'No Pain Cards Imported',
          reasons: [
            'Pain Discovery is optional — but if you do not have external research, every gate downstream runs on hypothesis.',
            'Action: either skip this gate (operator-judgment mode) OR run a PainOnSocial scan / customer interview series and import 1–5 cards before continuing.'
          ]
        };
      }

      // Check card quality
      const totalQuotes = cards.reduce((sum, c) => sum + (c.quotes || []).filter(q => q && q.trim().length >= 10).length, 0);
      const cardsWithScore = cards.filter(c => c.score && c.score >= 70).length;
      const hasLead = !!lead;
      const leadHasAudience = lead && (lead.audience || '').trim().length >= 30;
      const leadHasTitle = lead && (lead.title || '').trim().length >= 10;

      if (!hasLead) {
        return {
          verdict: 'rework',
          name: 'No Lead Pain Selected',
          reasons: [
            'You have pain cards but no lead. The lead card seeds Gate 01 (avatar) and Gate 03 (problem).',
            'Action: pick the highest-scoring card with the strongest evidence as your lead.'
          ]
        };
      }

      if (!leadHasTitle || !leadHasAudience) {
        return {
          verdict: 'rework',
          name: 'Lead Pain Card Underspecified',
          reasons: [
            !leadHasTitle ? 'Lead card has no title (or under 10 chars). State the pain in one sentence.' : null,
            !leadHasAudience ? 'Lead card has no audience profile (or under 30 chars). Describe who is suffering, in your words.' : null,
            'Action: complete the lead card before applying it downstream.'
          ].filter(Boolean)
        };
      }

      if (totalQuotes < 3) {
        return {
          verdict: 'rework',
          name: 'Voice-of-Customer Vault Too Thin',
          reasons: [
            `Only ${totalQuotes} substantive quotes across all cards. The VOC vault drives copy, persuasion, and offer naming — fewer than 3 quotes means downstream gates will run on operator language, not customer language.`,
            'Action: add at least 5 quotes total before proceeding. Reddit, support tickets, sales-call transcripts, and DMs all count.'
          ]
        };
      }

      if (cardsWithScore === 0) {
        return {
          verdict: 'rework',
          name: 'No High-Score Pain Card',
          reasons: [
            'No card with score ≥ 70. Low-score pains are weak signals. Operating rule: a market score below 70/100 means the pain is felt but not urgent.',
            'Action: either find a stronger pain (the easier path) OR proceed knowing your offer will need to do more work to create urgency.'
          ]
        };
      }

      // GO — different flavors based on strength
      if (cardsWithScore >= 1 && totalQuotes >= 8) {
        const leadScore = lead.score || 0;
        const clusterCount = getClusterCards().length;
        return {
          verdict: 'go',
          name: 'Pain Discovery Locked',
          reasons: [
            `Lead pain "${(lead.title || '').slice(0, 60)}" — score ${leadScore}/100.`,
            `Total quotes in VOC vault: ${totalQuotes}. ${clusterCount > 1 ? `Cluster: ${clusterCount} cards.` : 'No cluster (single pain).'}`,
            'RISER doctrine: "Operators who import pain build for the market. The widget is now running on real fuel."',
            'Action: click "Apply lead pain to downstream gates" above, then proceed to Gate 01.'
          ],
          score: { total: leadScore, max: 100, label: 'Lead Pain Score' }
        };
      }

      return {
        verdict: 'go',
        name: 'Pain Discovery Sufficient',
        reasons: [
          `Lead pain "${(lead.title || '').slice(0, 60)}" — workable.`,
          `${totalQuotes} quotes in vault, ${cardsWithScore} card${cardsWithScore !== 1 ? 's' : ''} above 70.`,
          'Action: apply to Gate 01 and proceed. You can return here to add more cards anytime.'
        ]
      };
    }

    case 'avatar': {
      const scores = ['avatar_size_purchasing', 'avatar_size_growing',
                       'avatar_size_easy', 'avatar_pain_intensity']
                     .map(k => parseInt(a[k] || 0));
      const total = scores.reduce((s, v) => s + v, 0);
      const hasWho = (a.avatar_who || '').trim().length >= 20;
      const hasPain = (a.avatar_pain || '').trim().length >= 20;

      // PainOnSocial evidence boost: if a lead pain card with score ≥ 85 and
      // ≥ 5 quotes exists, the market score gets a +4 boost (capped at 40).
      // This implements the "score-as-evidence" idea.
      const leadPain = getLeadPainCard();
      const leadQuoteCount = leadPain ? (leadPain.quotes || []).filter(q => q && q.trim().length >= 10).length : 0;
      const evidenceBoost = (leadPain && leadPain.score >= 85 && leadQuoteCount >= 5) ? 4 : 0;
      const adjustedTotal = Math.min(40, total + evidenceBoost);
      const evidenceLine = evidenceBoost > 0
        ? `Evidence boost: +${evidenceBoost} from PainOnSocial lead pain (score ${leadPain.score}/100, ${leadQuoteCount} verbatim quotes). Adjusted market score: ${adjustedTotal}/40.`
        : null;

      if (!hasWho || !hasPain) {
        return {
          verdict: 'rework',
          name: 'Avatar Not Specific Enough',
          reasons: [
            !hasWho ? 'The avatar description is too vague. Operating rule: if you cannot describe the avatar in 50+ words including age, role, income, and what they did last Tuesday, you have not chosen one.' : null,
            !hasPain ? 'The pain is not stated in their words. Quote them. If you cannot quote them, you have not talked to them yet.' : null,
            'Action: spend 60 minutes on Reddit, Twitter, or LinkedIn finding 5 posts where this avatar describes the pain in their own words. Copy 5 quotes verbatim. Return.'
          ].filter(Boolean),
          score: { total: adjustedTotal, max: 40, label: 'Market Score' }
        };
      }

      if (adjustedTotal >= 32) {
        return {
          verdict: 'go',
          name: 'Hungry Crowd Confirmed',
          reasons: [
            `Market score ${adjustedTotal}/40 — strong on all dimensions.`,
            evidenceLine,
            'You have a starving crowd. The next 90 days are about feeding them, not finding them.',
            'Action: proceed to Gate 02. Lock the Idea.'
          ].filter(Boolean),
          score: { total: adjustedTotal, max: 40, label: 'Market Score' }
        };
      }
      if (adjustedTotal >= 24) {
        return {
          verdict: 'rework',
          name: 'Workable But Constrained',
          reasons: [
            `Market score ${adjustedTotal}/40 — workable, but at least one dimension is weak.`,
            evidenceLine,
            scores[0] < 6 ? 'Purchasing power below threshold. If buyers cannot afford $1,000+ on similar problems, monetization will be slow.' : null,
            scores[1] < 6 ? 'Growth below threshold. Flat or shrinking markets punish even good offers.' : null,
            scores[2] < 6 ? 'Reach below threshold. An invisible avatar is worthless. Pick a channel where they aggregate.' : null,
            scores[3] < 6 ? 'Pain intensity below threshold. Top-3 pain has budget. Bottom-10 pain has infinite sales cycles.' : null,
            'Action: address the weakest dimension before proceeding. Either pivot the avatar or pivot the angle.'
          ].filter(Boolean),
          score: { total: adjustedTotal, max: 40, label: 'Market Score' }
        };
      }
      return {
        verdict: 'no',
        name: 'Wrong Market',
        reasons: [
          `Market score ${adjustedTotal}/40 — too many weak dimensions.`,
          evidenceLine,
          'Operating rule: if 3 of 4 (purchasing power, growth, reach, pain intensity) are below 6, the market is wrong. No offer can rescue a wrong market.',
          'Action: pick a different avatar. Do NOT proceed. Going forward will burn 6+ months on a fundamentally wrong choice.'
        ].filter(Boolean),
        score: { total: adjustedTotal, max: 40, label: 'Market Score' }
      };
    }

    case 'idea': {
      const sentence = (a.idea_one_sentence || '').trim();
      const competition = a.idea_competition;
      const moneyNow = a.idea_money_now;

      const sentenceOK = sentence.length >= 30 && sentence.length <= 200;

      if (!sentenceOK || !competition || !moneyNow) {
        return {
          verdict: 'rework',
          name: 'Idea Not Stated Cleanly',
          reasons: [
            !sentenceOK ? 'The one-sentence offer is missing or unclear. Format: "I help [avatar] get [outcome] in [timeframe] without [common objection]." Try again.' : null,
            !competition ? 'Pick the competitive reality.' : null,
            !moneyNow ? 'Answer the $100 today test.' : null,
            'Action: rewrite the one-sentence pitch using the format. If you cannot, the idea is not ready.'
          ].filter(Boolean)
        };
      }

      if (competition === 'none' || moneyNow === 'no') {
        return {
          verdict: 'no',
          name: 'Idea Will Not Earn the Slot',
          reasons: [
            competition === 'none' ? 'No competition is almost always a graveyard, not a goldmine. Operating rule: if no one is selling this, no one wants to buy it. Find competitors before continuing.' : null,
            moneyNow === 'no' ? 'If you cannot find 10 paying customers without a marketing campaign first, the idea is theoretical. Validate by selling, not by polishing.' : null,
            'Action: pivot the angle. Either pick a category with proven demand OR find a way to identify 10 paying customers right now.'
          ].filter(Boolean)
        };
      }

      if (competition === 'thin' || moneyNow === 'maybe') {
        return {
          verdict: 'rework',
          name: 'Promising — Test Before Committing',
          reasons: [
            competition === 'thin' ? 'Thin competition is often a graveyard. Verify: do similar businesses exist in adjacent niches making real money?' : null,
            moneyNow === 'maybe' ? 'You think you can find buyers but have not yet. Until you can name 10 specific people who would pay, the idea is hypothesis, not validated.' : null,
            'Action: run the $100 today test for real. Spend 4 hours messaging 20 strangers. If 2+ pay $100 today, return as GO. If 0 pay, kill.'
          ].filter(Boolean)
        };
      }

      return {
        verdict: 'go',
        name: 'Idea Earns the Slot',
        reasons: [
          'Strong competition + named buyers = proven demand + real entry path.',
          'RISER doctrine: "Crowded markets are good markets. You differentiate, you do not invent."',
          'Action: proceed to Gate 03. Define the profitable problem angle.'
        ]
      };
    }

    case 'problem': {
      const specific = (a.problem_specific || '').trim().length >= 20;
      const frequency = a.problem_frequency;
      const cost = a.problem_cost;
      const existing = (a.problem_existing_solutions || '').trim().length >= 20;

      if (!specific || !frequency || !cost || !existing) {
        return {
          verdict: 'rework',
          name: 'Problem Not Defined Precisely',
          reasons: [
            !specific ? 'Problem statement is too vague. Use customer\'s exact words.' : null,
            !frequency ? 'Pick the frequency.' : null,
            !cost ? 'Pick the cost-of-not-solving level.' : null,
            !existing ? 'List existing solutions and non-consumption alternatives.' : null,
            'Action: complete the missing fields before proceeding.'
          ].filter(Boolean)
        };
      }

      if (cost === 'low') {
        return {
          verdict: 'no',
          name: 'Problem Is Not Profitable',
          reasons: [
            'Operating rule: pricing power = cost-of-not-solving. Low-cost-of-inaction problems can only be sold cheap.',
            'You are facing a structural ceiling no offer engineering will fix.',
            'Action: reframe to find a higher-cost-of-inaction angle on the same avatar OR pivot to a different problem the same avatar has.'
          ]
        };
      }

      if (frequency === 'once' && cost !== 'high') {
        return {
          verdict: 'rework',
          name: 'One-Shot Problem, Moderate Pain',
          reasons: [
            'One-time problems require constant new-customer acquisition. Combined with moderate pain, the unit economics will be tight.',
            'Workable but harder. Plan the LTV-extension offer (Gate 11) before launching.',
            'Action: proceed but design the second offer for existing customers BEFORE Gate 04.'
          ]
        };
      }

      const scoreFreq = { daily: 4, monthly: 3, quarterly: 2, once: 1 }[frequency] || 0;
      const scoreCost = { high: 4, moderate: 2, low: 0 }[cost] || 0;
      const total = scoreFreq + scoreCost;

      if (total >= 6) {
        return {
          verdict: 'go',
          name: 'Profitable Problem Confirmed',
          reasons: [
            `Recurring + high-cost = recurring revenue + pricing power.`,
            'RISER doctrine: "Solve a problem they pay you to keep solving. That is a business."',
            'Action: proceed to Gate 04. Build the Grand Slam Offer.'
          ]
        };
      }
      return {
        verdict: 'rework',
        name: 'Problem Workable, Not Optimal',
        reasons: [
          'Frequency or cost-of-inaction is suboptimal. The business will work but unit economics will be tighter than necessary.',
          'Action: see if you can reframe to a higher-frequency or higher-cost angle within the same avatar before locking the offer.'
        ]
      };
    }

    case 'offer': {
      const dream = (a.offer_dream || '').trim().length >= 20;
      const likelihood = (a.offer_likelihood || '').trim().length >= 10;
      const dreamScore = parseInt(a.offer_dream_score || 0);
      const likelihoodScore = parseInt(a.offer_likelihood_score || 0);
      const time = a.offer_time_delay;
      const effort = a.offer_effort;
      const mechanism = (a.offer_mechanism || '').trim().length >= 30;

      if (!dream || !likelihood || !dreamScore || !likelihoodScore || !time || !effort || !mechanism) {
        return {
          verdict: 'rework',
          name: 'Offer Incomplete',
          reasons: [
            !dream ? 'Dream Outcome missing or too vague.' : null,
            !likelihood ? 'Proof / Likelihood field empty.' : null,
            !dreamScore ? 'Score the Dream Outcome (1-10).' : null,
            !likelihoodScore ? 'Score the Perceived Likelihood (1-10).' : null,
            !time ? 'Pick the Time Delay tier.' : null,
            !effort ? 'Pick the Effort tier.' : null,
            !mechanism ? 'Named Mechanism missing. This is the difference between a $97 product and a $4,997 program. Name your method and explain why it works differently.' : null,
            'Fill all seven fields before scoring.'
          ].filter(Boolean)
        };
      }

      const timeScore = { instant: 10, week: 8, month: 6, months: 3 }[time];
      const effortScore = { dfy: 10, dwy: 8, diy: 5, self: 3 }[effort];
      const numerator = dreamScore * likelihoodScore;
      const denominator = (11 - timeScore) + (11 - effortScore);
      const valueScore = Math.round((numerator / denominator) * 10);

      if (valueScore >= 35) {
        return {
          verdict: 'go',
          name: 'Grand Slam Offer',
          reasons: [
            `Value score ${valueScore} — top decile. The numerator (dream × likelihood) is strong AND the denominator (time × effort) is small.`,
            'RISER doctrine: "A Grand Slam Offer makes prospects feel stupid saying no."',
            'Action: lock the offer. Proceed to Gate 05.'
          ],
          score: { total: valueScore, max: 100, label: 'Value Score' }
        };
      }
      if (valueScore >= 20) {
        return {
          verdict: 'rework',
          name: 'Strong Offer, Sharpenable',
          reasons: [
            `Value score ${valueScore} — workable but not Grand Slam.`,
            dreamScore < 8 ? 'Dream Outcome below 8: vague or weak transformation. Make it more specific, more vivid, more measurable.' : null,
            likelihoodScore < 7 ? 'Likelihood below 7: not enough proof. Stack testimonials, case studies, guarantees until even skeptics nod.' : null,
            timeScore < 6 ? 'Time delay too long: engineer at least one Day-1 quick win. The first 24 hours determines retention.' : null,
            effortScore < 6 ? 'Effort too high: move from DIY to DWY (templates + guidance), or DWY to DFY (we do it).' : null,
            'Action: pick the lowest-scoring lever and improve it before proceeding. One lever at a time.'
          ].filter(Boolean),
          score: { total: valueScore, max: 100, label: 'Value Score' }
        };
      }
      return {
        verdict: 'no',
        name: 'Offer Will Not Convert at Scale',
        reasons: [
          `Value score ${valueScore} — below threshold.`,
          'The combination of weak transformation, thin proof, slow time-to-value, and high effort means the offer cannot survive even with great copy.',
          'Action: rebuild the offer. Either pick a stronger transformation OR dramatically reduce time/effort. Do not proceed to copy or distribution with this score.'
        ],
        score: { total: valueScore, max: 100, label: 'Value Score' }
      };
    }

    case 'stack': {
      const offerName = (a.stack_offer_name || '').trim();
      const bonuses = (a.stack_bonuses || '').trim();
      const guaranteeType = a.stack_guarantee_type;
      const guaranteeText = (a.stack_guarantee_text || '').trim();
      const scarcity = a.stack_scarcity;
      const totalValue = parseFloat(a.stack_total_value || 0);
      const actualPrice = parseFloat(a.stack_actual_price || 0);

      const nameOK = offerName.length >= 5 && offerName.length <= 80;
      const bonusesOK = bonuses.length >= 60;
      const guaranteeOK = guaranteeText.length >= 20;

      if (!nameOK || !bonusesOK || !guaranteeType || !guaranteeOK || !scarcity || !totalValue || !actualPrice) {
        return {
          verdict: 'rework',
          name: 'Stack Incomplete',
          reasons: [
            !nameOK ? 'Offer name missing or weak. Named offers convert 30% better than descriptions.' : null,
            !bonusesOK ? 'List 3-5 bonuses with names, outcomes, and price-anchors. Bonuses pre-empt objections — without them, the buyer hesitates.' : null,
            !guaranteeType ? 'Pick a guarantee type.' : null,
            !guaranteeOK ? 'Write the guarantee in your exact wording. Vague guarantees get vague results.' : null,
            !scarcity ? 'Declare a scarcity mechanism.' : null,
            !totalValue ? 'Sum the stack value (anchor price).' : null,
            !actualPrice ? 'Set the actual offer price.' : null,
            'Complete the missing fields before scoring the stack.'
          ].filter(Boolean)
        };
      }

      if (scarcity === 'fake') {
        return {
          verdict: 'no',
          name: 'Fake Scarcity Will Burn Trust',
          reasons: [
            'Fake countdown timers and inflated urgency get discovered. One discovery burns the audience permanently.',
            'Cialdini: scarcity works only when it is structurally true. Pick a real cohort cap, founding price ladder, bonus expiration, or launch window.',
            'Action: replace the fake mechanism with a real one. Run the stack again.'
          ]
        };
      }

      if (guaranteeType === 'none') {
        return {
          verdict: 'no',
          name: 'No Guarantee = Half the Conversion',
          reasons: [
            'A bare offer with no guarantee converts at half the rate of the same offer with even a basic guarantee.',
            'Pick the strongest guarantee your unit economics can absorb. Conditional guarantees ("do X, Y, Z and if no result, double back") force customer accountability AND reduce risk perception.',
            'Action: write the guarantee. Then return.'
          ]
        };
      }

      if (scarcity === 'none') {
        return {
          verdict: 'rework',
          name: 'No Reason to Decide Today',
          reasons: [
            'Without a structural scarcity mechanism, every prospect defers the decision. "I will think about it" = no.',
            'Pick the scarcity that fits your delivery model: cohort cap, founding price ladder, bonus expiration, or launch window.',
            'Action: pick one and bake it in.'
          ]
        };
      }

      const valueRatio = totalValue / actualPrice;

      if (valueRatio < 3) {
        return {
          verdict: 'rework',
          name: 'Stack-to-Price Ratio Too Thin',
          reasons: [
            `Stack value $${totalValue} ÷ price $${actualPrice} = ${valueRatio.toFixed(1)}× ratio. Below 3× and the contrast does not register.`,
            'Cialdini contrast principle: the price needs an anchor 3× to 10× larger to feel like a steal.',
            'Action: either add bonuses to raise the stack value, or lower the price. The 5×-10× ratio is the conversion sweet spot.'
          ]
        };
      }

      if (guaranteeType === 'implied') {
        return {
          verdict: 'rework',
          name: 'Implied Guarantee = No Guarantee',
          reasons: [
            '"We are confident you will love it" is not a guarantee. The buyer reads it as marketing copy.',
            'Action: upgrade to unconditional ("30-day refund") at minimum. Conditional is better.'
          ]
        };
      }

      return {
        verdict: 'go',
        name: 'Grand Slam Stack Locked',
        reasons: [
          `Named offer: ${offerName}. Stack ratio ${valueRatio.toFixed(1)}× ($${totalValue} value, $${actualPrice} price).`,
          `Guarantee: ${guaranteeType}. Scarcity: ${scarcity.replace('_', ' ')}.`,
          'RISER doctrine: "The stack is the offer. The offer is not the product."',
          'Action: proceed to Gate 05. Pick distribution.'
        ]
      };
    }

    case 'distribution': {
      const channel = a.dist_primary;
      const volume = (a.dist_volume || '').trim().length >= 30;
      const econ = a.dist_unit_econ;

      if (!channel || !volume || !econ) {
        return {
          verdict: 'rework',
          name: 'Distribution Plan Incomplete',
          reasons: ['Pick a channel, do the volume math, declare unit-economics readiness.']
        };
      }

      if (channel === 'paid_ads' && econ !== 'yes') {
        return {
          verdict: 'no',
          name: 'Paid Ads Without Unit Economics = Fire',
          reasons: [
            'Operating rule: paid ads require known CAC < 1/3 of 12-month LTV. Without that math, paid ads burn cash with no feedback loop.',
            'Action: switch primary to warm outreach, cold outreach, or warm content until you have unit economics. Add paid ads after first 50 customers organic.'
          ]
        };
      }

      return {
        verdict: 'go',
        name: 'Distribution Channel Locked',
        reasons: [
          `Primary: ${channel.replace('_', ' ')}.`,
          'Operating rule: master one channel before adding another. 18 months on one platform > 6 months on three.',
          'Action: do not add a second channel until you have produced 100 customers from this one.'
        ]
      };
    }

    case 'dream100': {
      const list = (a.dream100_list || '').trim();
      const strategy = a.dream100_strategy;
      const outreach = (a.dream100_first_outreach || '').trim();
      const volume = a.dream100_volume;

      // Count entries — rough heuristic on newlines or numbered items
      const entryCount = (list.match(/\n/g) || []).length + 1;
      const listOK = list.length >= 100 && entryCount >= 10;
      const outreachOK = outreach.length >= 30;

      if (!listOK || !strategy || !outreachOK || !volume) {
        return {
          verdict: 'rework',
          name: 'Dream 100 Not Built',
          reasons: [
            !listOK ? 'List fewer than 10 named contacts. The Dream 100 starts with 25 specific names — handles, URLs, podcasts. Generic categories do not count.' : null,
            !strategy ? 'Pick the primary strategy: work in, buy in, or partner.' : null,
            !outreachOK ? 'Write the first-touch script. Gift first, no ask.' : null,
            !volume ? 'Declare your weekly outreach volume.' : null,
            'Action: spend 90 minutes researching and listing 25 named Dream 100 contacts before proceeding.'
          ].filter(Boolean)
        };
      }

      if (volume === 'none') {
        return {
          verdict: 'no',
          name: 'Dream 100 Strategy Without Action',
          reasons: [
            'A Dream 100 list with zero outreach is a bookmark folder, not a strategy.',
            'Action: send the first 5 messages this week. The first reply changes everything.'
          ]
        };
      }

      if (volume === 'low') {
        return {
          verdict: 'rework',
          name: 'Volume Too Low to Compound',
          reasons: [
            'Below 5 contacts/week, the Dream 100 does not reach the relationship density needed to produce invitations.',
            'Action: raise to 10-20/week. The system rewards compound presence, not occasional drops.'
          ]
        };
      }

      return {
        verdict: 'go',
        name: 'Dream 100 Engaged',
        reasons: [
          `Strategy: ${strategy.replace('_', ' ')}. Volume: ${volume}.`,
          'Brunson doctrine: "The 100 people who already gathered your audience are worth more than the 10,000 strangers you could try to reach yourself."',
          'Action: track every interaction. The first 10 reciprocity gifts seed the next 90 days of compound.'
        ]
      };
    }

    case 'copy': {
      const hook = (a.copy_hook || '').trim();
      const headline = (a.copy_headline || '').trim();
      const body = (a.copy_body || '').trim();
      const cta = a.copy_cta;

      const hookOK = hook.length >= 20 && hook.length <= 200;
      const headlineOK = headline.length >= 20 && headline.length <= 250;
      const bodyOK = body.length >= 80;
      const ctaSpecific = cta === 'specific';

      if (!hookOK || !headlineOK || !bodyOK || !cta) {
        return {
          verdict: 'rework',
          name: 'Copy Not Ready',
          reasons: [
            !hookOK ? 'Hook is missing or out of length range. Aim for 8-25 words.' : null,
            !headlineOK ? 'Headline is missing or weak. Use [Outcome] in [Timeframe] without [Objection].' : null,
            !bodyOK ? 'Body is too short. Aim for 80-250 words including problem, mechanism, proof, CTA.' : null,
            !cta ? 'Pick a CTA specificity level.' : null,
            'Action: complete missing fields. Read each piece aloud — anything that sounds like marketing copy needs to be rewritten as plain speech.'
          ].filter(Boolean)
        };
      }

      if (cta === 'vague') {
        return {
          verdict: 'rework',
          name: 'CTA Will Halve Your Conversion',
          reasons: [
            'Generic CTAs ("learn more") convert at half the rate of specific ones.',
            'Action: rewrite CTA to name a specific asset and outcome. "Get the [name] [format] that [does X]." Then return.'
          ]
        };
      }

      return {
        verdict: 'go',
        name: 'Copy Ready to Test',
        reasons: [
          'Hook stops scroll. Headline promises. Body proves. CTA is specific.',
          'RISER doctrine: "Copy is not creativity — it is fidelity to the customer\'s words." Re-read your copy and replace anything you wrote in YOUR words with the customer\'s words.',
          'Action: deploy. Real engagement data tells you what works.'
        ]
      };
    }

    case 'persuasion': {
      const domino = (a.persuasion_big_domino || '').trim();
      const beliefs = (a.persuasion_false_beliefs || '').trim();
      const leadMagnet = (a.persuasion_lead_magnet || '').trim();
      const reciprocity = a.persuasion_reciprocity;
      const social = a.persuasion_social_proof;
      const authority = a.persuasion_authority;
      const unity = a.persuasion_unity;
      const consistency = a.persuasion_consistency;

      const dominoOK = domino.length >= 30;
      const beliefsOK = beliefs.length >= 60;
      const leadMagnetOK = leadMagnet.length >= 20;

      if (!dominoOK || !beliefsOK || !leadMagnetOK || !reciprocity || !social || !authority || !unity || !consistency) {
        return {
          verdict: 'rework',
          name: 'Persuasion Architecture Incomplete',
          reasons: [
            !dominoOK ? 'Big Domino missing. Name the ONE belief that breaks for the sale to happen.' : null,
            !beliefsOK ? 'False Belief Audit incomplete. Name 3 false beliefs: vehicle, self, external.' : null,
            !leadMagnetOK ? 'Reciprocity gift not named. Generic "newsletter" does not count.' : null,
            !reciprocity ? 'Pick reciprocity level.' : null,
            !social ? 'Pick social proof level.' : null,
            !authority ? 'Pick authority level.' : null,
            !unity ? 'Pick unity language level.' : null,
            !consistency ? 'Pick consistency mechanism.' : null,
            'Complete the audit before deploy. Persuasion structure is upstream of conversion rate.'
          ].filter(Boolean)
        };
      }

      // Score Cialdini levers
      const cialdiniScore = (() => {
        let s = 0;
        if (reciprocity === 'strong') s += 2;
        else if (reciprocity === 'weak') s += 1;
        if (social === 'high') s += 2;
        else if (social === 'medium') s += 1;
        if (authority === 'strong') s += 2;
        else if (authority === 'borrowed') s += 1;
        if (unity === 'strong') s += 2;
        else if (unity === 'medium') s += 1;
        if (consistency === 'multistep') s += 2;
        return s;
      })();

      const maxScore = 10;

      if (reciprocity === 'none' || social === 'low') {
        return {
          verdict: 'no',
          name: 'Persuasion Foundation Missing',
          reasons: [
            reciprocity === 'none' ? 'Cold ask without reciprocity. Cialdini\'s most-violated principle. Conversion ceiling: 1/3 of what it could be.' : null,
            social === 'low' ? 'Zero or generic social proof. Without 3+ avatar-similar testimonials, skeptics walk.' : null,
            'Action: build the lead magnet AND collect 3 specific testimonials before deploy. These are not optional.'
          ].filter(Boolean),
          score: { total: cialdiniScore, max: maxScore, label: 'Cialdini Score' }
        };
      }

      if (cialdiniScore < 6) {
        return {
          verdict: 'rework',
          name: 'Persuasion Levers Too Few',
          reasons: [
            `Cialdini score ${cialdiniScore}/${maxScore}. Strong launches activate 5+ levers visibly on the offer page.`,
            unity !== 'strong' ? 'Unity language weak. Name the tribe explicitly. "Solo accountants who refuse to bill by the hour."' : null,
            authority !== 'strong' && authority !== 'borrowed' ? 'Authority thin. Replace credentials with specific results.' : null,
            consistency !== 'multistep' ? 'Single-step ask. Add a micro-commitment (quiz, opt-in, free call) before the macro-yes.' : null,
            'Action: strengthen the weakest 2 levers before deploy.'
          ].filter(Boolean),
          score: { total: cialdiniScore, max: maxScore, label: 'Cialdini Score' }
        };
      }

      return {
        verdict: 'go',
        name: 'Persuasion Architecture Locked',
        reasons: [
          `Cialdini score ${cialdiniScore}/${maxScore}. Big Domino named. False beliefs mapped. Reciprocity gift in place.`,
          'RISER doctrine: "Copy is the surface. Persuasion is the structure underneath. The structure decides the conversion rate."',
          'Action: proceed to Gate 07. Deploy.'
        ],
        score: { total: cialdiniScore, max: maxScore, label: 'Cialdini Score' }
      };
    }

    case 'deploy': {
      const date = (a.deploy_date || '').trim();
      const size = a.deploy_size;
      const price = parseFloat(a.deploy_price || 0);
      const kill = a.deploy_kill_rule;
      const tools = a.deploy_4_tools;

      if (!date || !size || !price || !kill || !tools) {
        return {
          verdict: 'rework',
          name: 'Deploy Plan Incomplete',
          reasons: ['Lock all five fields before scheduling launch.']
        };
      }

      if (tools === 'fewer') {
        return {
          verdict: 'no',
          name: 'Tools Are Not Ready',
          reasons: [
            'RISER minimum: capture leads, take payment, deliver, measure. If you cannot do all four, the launch will fail invisibly.',
            'Action: spend the next 7 days getting all 4 tools live. Then return.'
          ]
        };
      }

      if (kill === 'loose') {
        return {
          verdict: 'rework',
          name: 'No Kill Rule = No Discipline',
          reasons: [
            'RISER doctrine: "If you cannot define failure, you will rationalize it forever."',
            'Action: pick a tight kill rule. <5 paid in 14 days = pivot is the default. Without this, a bad launch becomes a 6-month grind.'
          ]
        };
      }

      if (size === 'big') {
        return {
          verdict: 'rework',
          name: 'Beta Cohort Too Large',
          reasons: [
            'First-launch beta of 50+ almost always fails on delivery quality.',
            'Operating rule: 10 over-served founding members produce 10× the testimonial density of 50 mediocre ones.',
            'Action: cut size to 5-25 for the first cohort. Run a second cohort 60 days later if the first works.'
          ]
        };
      }

      if (price >= 500 && price <= 900) {
        return {
          verdict: 'rework',
          name: 'Muddled Middle Price',
          reasons: [
            `$${price} is in the Muddled Middle ($500-$900). Too expensive for impulse, too cheap for premium.`,
            'Action: drop to $497 (impulse-adjacent) or raise to $997+ (premium). Pick one and commit.'
          ]
        };
      }

      return {
        verdict: 'go',
        name: 'Cleared for Launch',
        reasons: [
          `Date locked: ${date}. Size: ${size}. Price: $${price}. Kill rule defined. Tools live.`,
          'RISER doctrine: "Launch ugly. The market is the editor."',
          'Action: ship. Then move to Gate 08 — iterate.'
        ]
      };
    }

    case 'iterate': {
      const atBats = a.iter_at_bats;
      const signal = (a.iter_signal || '').trim().length >= 30;
      const lever = a.iter_lever;
      const awareness = a.iter_awareness;
      const sophistication = a.iter_sophistication;
      const refunds = a.iter_refund_interviews;

      if (!atBats || !signal || !lever || !awareness || !sophistication || !refunds) {
        return {
          verdict: 'rework',
          name: 'Iteration Plan Unclear',
          reasons: [
            !atBats ? 'Pick at-bats level.' : null,
            !signal ? 'Name the dominant pattern from real customer data.' : null,
            !lever ? 'Pick the lever to adjust.' : null,
            !awareness ? 'Diagnose the awareness stage. Iterating without knowing the stage usually moves the wrong lever.' : null,
            !sophistication ? 'Diagnose the market sophistication. Tells you whether you need a bigger claim or a new mechanism.' : null,
            !refunds ? 'Declare your refund interview discipline.' : null,
            'Complete all six fields before iterating.'
          ].filter(Boolean)
        };
      }

      if (atBats === 'tiny') {
        return {
          verdict: 'no',
          name: 'Iterating on Noise',
          reasons: [
            'Fewer than 10 conversations is not signal — it is anecdote.',
            'RISER doctrine: "Volume forgives mistakes. The operator who has 100 conversations learns more than the one who has 5 perfect ones."',
            'Action: do not iterate yet. Run 20 more conversations. Same questions. Same script. Then return.'
          ]
        };
      }

      if (atBats === 'partial') {
        return {
          verdict: 'rework',
          name: 'Almost Enough Data',
          reasons: [
            '10-20 conversations is borderline. The pattern may be real or may be small-sample distortion.',
            'Action: run 10 more. If the pattern persists, iterate. If it shifts, the original "pattern" was noise.'
          ]
        };
      }

      if (refunds === 'never') {
        return {
          verdict: 'rework',
          name: 'Throwing Away Refund Data',
          reasons: [
            'Hormozi: "The refund call is the most valuable sales call you will ever take." Silent refunds = lost diagnostic.',
            'Action: starting tomorrow, every refund triggers a 5-question call. Pattern across 10 refunds tells you whether it is hook, audience, offer, onboarding, or delivery.'
          ]
        };
      }

      // Sophistication-aware lever guidance
      const stageMessage = (() => {
        if (sophistication === 's3' || sophistication === 's4' || sophistication === 's5') {
          if (lever === 'dream' || lever === 'likelihood') {
            return 'Note: in a Stage 3-5 market, dream/likelihood lever moves alone usually fail because the claim category is worn out. Pair this lever with a NEW MECHANISM rename for compound effect.';
          }
        }
        return null;
      })();

      return {
        verdict: 'go',
        name: 'Iterate Lever Locked',
        reasons: [
          `Pattern observed in 20+ conversations. Adjusting Value Equation lever: ${lever}.`,
          `Awareness stage: ${awareness}. Market sophistication: ${sophistication}.`,
          stageMessage,
          'RISER doctrine: "One lever per cycle. Multiple changes at once = rebuild, not iterate."',
          'Action: change ONLY this lever. Re-launch. Re-measure for 30 days. Then assess.'
        ].filter(Boolean)
      };
    }

    case 'pivot': {
      const ctr = a.pivot_metric_ctr;
      const optin = a.pivot_metric_optin;
      const close = a.pivot_metric_close;

      if (!ctr || !optin || !close) {
        return {
          verdict: 'rework',
          name: 'Diagnostic Incomplete',
          reasons: ['Answer all three funnel diagnostic questions.']
        };
      }

      if (ctr === 'no') {
        return {
          verdict: 'rework',
          name: 'HOOK Problem',
          reasons: [
            'Low CTR / low engagement = the audience does not look at your message.',
            'RISER doctrine: "If the hook does not stop the scroll, nothing downstream matters."',
            'Action: write 10 new hooks. Test each at minimum 100 impressions. Pick the top 2 and rebuild.'
          ]
        };
      }

      if (optin === 'low') {
        return {
          verdict: 'rework',
          name: 'AUDIENCE Problem',
          reasons: [
            'People click but do not opt-in or buy. The audience clicking is wrong.',
            'RISER doctrine: "Clicks are vanity. Conversions are sanity."',
            'Action: refine targeting. Look at WHO clicks. They probably are not your avatar. Tighten your messaging to repel non-buyers.'
          ]
        };
      }

      if (close === 'bad') {
        return {
          verdict: 'no',
          name: 'OFFER Problem — Do Not Scale',
          reasons: [
            'Refunds >10% or negative NPS means the offer cannot sustain customers.',
            'Operating rule: do not scale a leaky bucket. Volume just produces refunds + reputation damage.',
            'Action: pause acquisition. Fix delivery. Survey refunders. Do not deploy more spend until refund rate is below 5%.'
          ]
        };
      }

      if (close === 'mid') {
        return {
          verdict: 'rework',
          name: 'Offer Borderline',
          reasons: [
            'Refund rate 5-10% is workable but not scalable.',
            'Action: improve onboarding before scaling. Engineer the first-week experience.'
          ]
        };
      }

      return {
        verdict: 'go',
        name: 'Funnel Healthy',
        reasons: [
          'Hook stops scroll. Audience converts. Offer retains.',
          'You have what most operators chase for years.',
          'Action: proceed to Gate 10. Scale.'
        ]
      };
    }

    case 'scale': {
      const signal = a.scale_signal;
      const lever = a.scale_lever;
      const constraint = (a.scale_constraint || '').trim().length >= 20;

      if (!signal || !lever || !constraint) {
        return {
          verdict: 'rework',
          name: 'Scale Plan Unclear',
          reasons: ['Pick the signal status, the scale lever, and name the constraint.']
        };
      }

      if (signal === 'no') {
        return {
          verdict: 'no',
          name: 'No Scale Signal',
          reasons: [
            'Without 10+ customers from one channel + 6 months retention data, "scale" is gambling.',
            'Action: stay in iterate loop. Get to 10 customers + 6 months data first. Scaling now will multiply problems, not customers.'
          ]
        };
      }

      if (signal === 'partial') {
        return {
          verdict: 'rework',
          name: 'Almost Ready',
          reasons: [
            'Some signal, partial data. Premature scale risks burning cash before you know what works.',
            'Action: get to full signal (10 customers, 6 months retention) before adding spend.'
          ]
        };
      }

      if (lever === 'volume') {
        return {
          verdict: 'rework',
          name: 'Volume Is the Wrong First Lever',
          reasons: [
            'Operating rule: 10% price increase ≈ 50%+ profit increase. Volume is the third lever, not the first.',
            'Action: test a price increase first (raise by 10-20%, measure conversion impact). If conversion holds, the new price compounds with no extra acquisition cost.'
          ]
        };
      }

      return {
        verdict: 'go',
        name: 'Cleared to Scale',
        reasons: [
          `Lever: ${lever}. Constraint named.`,
          'RISER doctrine: "Scale what works. Do not scale what might work."',
          'Action: pour gas on the named lever. Hold all other variables. Re-evaluate at 30 days.'
        ]
      };
    }

    case 'repeat': {
      const next = (a.repeat_next_problem || '').trim().length >= 30;
      const decision = a.repeat_decision;
      const maxed = a.repeat_constraint_check;
      const bait = (a.repeat_ladder_bait || '').trim();
      const tripwire = (a.repeat_ladder_tripwire || '').trim();
      const core = (a.repeat_ladder_core || '').trim();
      const continuityRung = (a.repeat_ladder_continuity || '').trim();
      const high = (a.repeat_ladder_high || '').trim();
      const continuityStatus = a.repeat_continuity_status;
      const affiliate = a.repeat_dream100_affiliate;

      // Count rungs filled
      const ladderCount = [bait, tripwire, core, continuityRung, high].filter(r => r.length >= 5).length;

      if (!next || !decision || !maxed || !continuityStatus || !affiliate) {
        return {
          verdict: 'rework',
          name: 'Compound Plan Incomplete',
          reasons: [
            !next ? 'Name the next problem.' : null,
            !decision ? 'Pick the next move.' : null,
            !maxed ? 'Declare whether the current offer is maxed.' : null,
            !continuityStatus ? 'Declare continuity health.' : null,
            !affiliate ? 'Declare affiliate / partner activation status.' : null,
            'Action: complete the missing fields before scoring.'
          ].filter(Boolean)
        };
      }

      if (maxed === 'bored') {
        return {
          verdict: 'no',
          name: 'Boredom Is Not Strategy',
          reasons: [
            'RISER doctrine: "Most operators leave 70% of the value in their first business on the table because they got bored at 30%."',
            'Action: re-engage the current business. Boredom signals you have automated the wrong things or stopped talking to customers. Fix that first.'
          ]
        };
      }

      if (decision === 'new') {
        return {
          verdict: 'rework',
          name: 'New Business = Compound Tax',
          reasons: [
            'Building a second business from zero gives up the audience, channel, and brand equity you spent years building.',
            'Operating rule: deepen before you broaden.',
            'Action: re-pick the move. The compound move is "new offer to same audience." That is 5× the LTV at 0× the new acquisition cost.'
          ]
        };
      }

      if (continuityStatus === 'none') {
        return {
          verdict: 'no',
          name: 'No Continuity = No Compound',
          reasons: [
            'Hormozi: "The single highest LTV-per-dollar move is continuity." Without a continuity offer, every customer is a one-time transaction.',
            'Action: build continuity FIRST. Skool community, software subscription, monthly coaching, certification renewal. The next compound move comes after this rung exists.'
          ]
        };
      }

      if (ladderCount < 3) {
        return {
          verdict: 'rework',
          name: 'Value Ladder Too Short',
          reasons: [
            `Only ${ladderCount} of 5 rungs named (Bait, Tripwire, Core, Continuity, High-Ticket).`,
            'Brunson: "A single offer is a product. A ladder is a business." Without rungs above and below your core, you cannot capture upstream leads or downstream profit.',
            'Action: name at least Bait + Core + Continuity. The high-ticket and tripwire can come later, but those three are the minimum viable ladder.'
          ]
        };
      }

      if (maxed === 'midway') {
        return {
          verdict: 'rework',
          name: 'Compound Premature',
          reasons: [
            'Adding a new offer before the current one is at its limit dilutes focus.',
            'Action: maximize the current offer first. Raise prices. Improve retention. Add upsells. THEN add a new offer.'
          ]
        };
      }

      if (affiliate === 'none' && continuityStatus !== 'strong') {
        return {
          verdict: 'rework',
          name: 'Compound Engine Half-Built',
          reasons: [
            'No affiliate motion AND continuity below 60%. Two of the three compound levers are dormant.',
            'Action: pick the easier one to activate first. For most operators, formalizing referrals into a 30%-commission affiliate program is the faster lift.'
          ]
        };
      }

      return {
        verdict: 'go',
        name: 'Compound the Moat',
        reasons: [
          `Ladder rungs filled: ${ladderCount}/5. Continuity: ${continuityStatus}. Affiliate: ${affiliate}.`,
          `Next move: ${decision === 'deepen' ? 'new offer, same audience, same channel — best play' : decision === 'expand' ? 'same offer, adjacent audience' : 'channel diversification'}.`,
          'RISER doctrine: "Three offers to the same audience is a moat. A ladder, a continuity, and an affiliate army is a fortress."',
          'Action: design the next offer using Gate 04 again. Same audience, new problem, same delivery rhythm.'
        ]
      };
    }
  }
  return null;
}

// ============================================================
// RENDERING
// ============================================================

function renderProgressRail() {
  const rail = document.getElementById('progress-rail');
  rail.innerHTML = '';
  GATES.forEach((gate, i) => {
    const cell = document.createElement('div');
    cell.className = 'gate-cell';
    if (i === state.currentGate) cell.classList.add('active');
    const v = state.verdicts[gate.id];
    if (v) cell.classList.add(v);
    cell.innerHTML = `
      <div class="num">${gate.num}</div>
      <div class="name">${gate.name}</div>
    `;
    cell.addEventListener('click', () => navigateToGate(i));
    rail.appendChild(cell);
  });
}

function renderGate(idx) {
  state.currentGate = idx;
  const gate = GATES[idx];
  const host = document.getElementById('gate-host');
  host.innerHTML = '';

  const screen = document.createElement('section');
  screen.className = 'gate-screen visible';
  screen.id = `gate-${gate.id}`;

  if (gate.isIntro) {
    screen.innerHTML = renderIntro();
  } else if (gate.isSummary) {
    screen.innerHTML = renderSummary();
  } else if (gate.isPainDiscovery) {
    screen.innerHTML = renderPainDiscovery(gate);
  } else {
    screen.innerHTML = renderQuestionGate(gate);
  }

  host.appendChild(screen);
  attachGateHandlers(gate);
  saveState();
  renderProgressRail();
  window.scrollTo({ top: 0, behavior: 'smooth' });
}

function renderIntro() {
  const hasProgress = Object.keys(state.answers).length > 0;
  return `
    ${hasProgress ? `
      <div class="resume-banner">
        <div><strong>Welcome back.</strong> You have answers saved from a previous session. Pick up where you left off, or reset to start over.</div>
        <button class="btn-mini" id="btn-resume">Resume</button>
      </div>
    ` : ''}
    <div class="gate-rubric">How this works</div>
    <h2>Welcome to the <em>MVO Engine</em></h2>
    <div class="intro-card">
      <h3>What this tool does</h3>
      <p>Sixteen gates from "what does the market actually hurt over?" to "compound the moat." At each gate, the tool either says <strong>GO</strong> with the next concrete action, <strong>NO</strong> with the specific reason your idea fails this gate, or <strong>REWORK</strong> with what to sharpen before retrying. Gate 00½ (Pain Discovery) lets you import PainOnSocial scans, customer interviews, or any structured voice-of-customer research as the seed data — every downstream gate runs sharper when you do.</p>
      <p>Built on RISER Captain's Logic — operating doctrine refined across multiple operator playbooks (Hormozi's $100M Offers + $100M Leads, Brunson's DotCom/Expert/Traffic Secrets, Dan Kennedy's No B.S. direct response, Cialdini's persuasion architecture) and stress-tested in live launches. At each gate, the tool tells you what a senior operator would tell you: where the idea is real, where it is theater, and what to fix before retrying.</p>
      <p><strong>Your answers save automatically.</strong> Close the tab and come back. Your progress and verdicts persist. At the end, print or export your one-page brief.</p>
      <ul class="gate-list">
        ${GATES.filter(g => !g.isIntro && !g.isSummary).map(g => `
          <li><span class="num">${g.num}</span>${g.name}</li>
        `).join('')}
      </ul>
      <p style="font-size: 14.5px; color: var(--muted); font-style: italic;">Designed to save you 90 days on a bad idea, or compress 90 days on a good one. The faster you get a NO, the faster you get to the YES that matters.</p>
    </div>
    <div class="action-row">
      <div></div>
      <button class="btn primary" id="btn-start">Begin →</button>
    </div>
  `;
}

function renderPainDiscovery(gate) {
  const cards = state.painCards || [];
  const lead = getLeadPainCard();
  const vocCount = (state.voCVault || []).length;
  const idx = GATES.findIndex(g => g.id === gate.id);
  const verdict = state.verdicts[gate.id];
  const verdictData = verdict ? computeVerdict(gate.id) : null;

  let html = `
    <div class="gate-rubric">${gate.rubric}</div>
    <h2>${gate.title}</h2>
    <div class="principle">
      ${gate.principle.text}
      <span class="source">Source: ${gate.principle.source}</span>
    </div>

    <div class="pain-intro-callout">
      <p><strong>If you have run external research</strong> — a PainOnSocial scan, customer interviews, support-ticket analysis, sales-call transcripts — paste 1–5 pain cards below. Each card seeds the gates downstream: avatar, problem, offer, copy, persuasion. The widget converts your research into structured verdicts.</p>
      <p style="margin-top:10px;"><strong>If you have not done external research yet</strong> — skip this gate. Your answers will be operator hypotheses, not market evidence. The widget still works; it just runs on weaker fuel. You can return here anytime once you have data.</p>
      <div class="skip-row">
        <button class="btn-mini" id="pain-skip-btn">Skip · I have no research yet →</button>
      </div>
    </div>
  `;

  // Pain cards list
  if (cards.length > 0) {
    html += '<div class="pain-cards-list">';
    cards.forEach((card, i) => {
      const isLead = card.id === state.leadPainId;
      html += renderPainCard(card, i, isLead);
    });
    html += '</div>';
  } else {
    html += `
      <div class="skip-pain-banner">
        No pain cards yet. Click "Add a pain card" to paste your first one. You can add up to 5.
      </div>
    `;
  }

  // Add card button
  const canAddMore = cards.length < 5;
  html += `
    <button class="add-pain-card-btn" id="pain-add-btn" ${canAddMore ? '' : 'disabled'}>
      ${canAddMore ? '+ Add a pain card' : 'Maximum 5 cards reached'}
    </button>
  `;

  // Lead picker
  if (cards.length >= 2) {
    html += `
      <div class="lead-picker">
        <h4>Pick the lead pain card</h4>
        <p class="help">The lead card seeds Gate 01 (avatar + pain) and Gate 03 (problem). Other cards stay in the VOC vault as supporting evidence. You can change this anytime.</p>
        <div class="choice-group cols-1" data-lead-picker>
    `;
    cards.forEach(card => {
      const isLead = card.id === state.leadPainId;
      const titleDisplay = (card.title || 'Untitled pain').slice(0, 100);
      const score = card.score ? ` · score ${card.score}/100` : '';
      const quotes = (card.quotes || []).filter(q => q && q.trim()).length;
      const quotesDisplay = quotes ? ` · ${quotes} quote${quotes !== 1 ? 's' : ''}` : '';
      html += `
        <button type="button" class="choice-btn ${isLead ? 'selected' : ''}" data-pick-lead="${card.id}">
          <span class="label">${escapeHtml(titleDisplay)}${score}${quotesDisplay}</span>
          <span class="sub">Source: ${escapeHtml(card.sourceCommunity || 'Not specified')}</span>
        </button>
      `;
    });
    html += '</div></div>';
  } else if (cards.length === 1) {
    // Auto-lead the single card if not already set
    if (!state.leadPainId) {
      state.leadPainId = cards[0].id;
    }
  }

  // Cluster picker (only shown when there's a lead AND ≥2 cards)
  if (lead && cards.length >= 2) {
    html += `
      <div class="lead-picker" style="border-left-color: var(--teal); background: var(--paper-warm);">
        <h4>Cluster (optional)</h4>
        <p class="help">If multiple pain cards orbit the same root frustration, group them into a cluster. The cluster's combined evidence drives Gate 03 (Profitable Problem). Leave un-clustered if each pain stands alone.</p>
        <div class="choice-group cols-1">
    `;
    cards.forEach(card => {
      if (card.id === lead.id) return; // The lead is implicitly in its own cluster
      const inCluster = card.clusterId && card.clusterId === lead.clusterId;
      const titleDisplay = (card.title || 'Untitled pain').slice(0, 80);
      html += `
        <button type="button" class="choice-btn ${inCluster ? 'selected' : ''}" data-cluster-toggle="${card.id}">
          <span class="label">${inCluster ? '✓ ' : ''}${escapeHtml(titleDisplay)}</span>
          <span class="sub">${inCluster ? 'In cluster with the lead pain' : 'Click to add to cluster'}</span>
        </button>
      `;
    });
    html += '</div></div>';
  }

  // VOC summary
  if (vocCount > 0) {
    html += `
      <div class="voc-summary">
        <div>
          <div>Voice-of-Customer Vault</div>
          <div style="font-family: var(--serif); text-transform: none; letter-spacing: 0; font-style: italic; font-size: 13.5px; color: #c9b88a; margin-top: 4px;">Available across all downstream gates via the "Pull from VOC vault" button.</div>
        </div>
        <div class="count">${vocCount}</div>
      </div>
    `;
  }

  // Apply-to-Gate-01 button
  if (lead) {
    const targetIdx = GATES.findIndex(g => g.id === 'avatar');
    const hasAvatarText = (state.answers.avatar_who || '').trim().length > 0 || (state.answers.avatar_pain || '').trim().length > 0;
    html += `
      <div class="callout" style="border-left-color: var(--green); margin-top: 22px;">
        <strong>Lead pain selected.</strong> Click below to seed Gate 01 (avatar + pain) and Gate 03 (frequency) from this card. ${hasAvatarText ? 'This will OVERWRITE any text already in those fields.' : 'The fields are empty, safe to apply.'}
        <div style="margin-top: 12px;">
          <button class="btn primary" id="pain-apply-btn">Apply lead pain to downstream gates →</button>
        </div>
      </div>
    `;
  }

  // Verdict
  if (verdictData) {
    html += renderVerdict(verdictData);
  }

  // Action row
  html += `
    <div class="action-row">
      <div>
        <button class="btn" data-nav="${idx - 1}">← 00 Start</button>
      </div>
      <div style="display:flex; gap:8px;">
        <button class="btn primary" id="btn-evaluate" data-gate="${gate.id}">Evaluate Gate</button>
        <button class="btn" data-nav="${idx + 1}">Next →</button>
      </div>
    </div>
  `;

  return html;
}

function renderPainCard(card, index, isLead) {
  const quotes = card.quotes && card.quotes.length > 0 ? card.quotes : [''];
  let quotesHtml = '';
  quotes.forEach((q, qi) => {
    quotesHtml += `
      <div class="quote-row">
        <textarea data-card-quote="${card.id}" data-quote-idx="${qi}" placeholder="Verbatim customer quote — paste exactly as they wrote it">${escapeHtml(q || '')}</textarea>
        <button type="button" class="x-btn" data-card-remove-quote="${card.id}" data-quote-idx="${qi}" title="Remove this quote">×</button>
      </div>
    `;
  });

  return `
    <div class="pain-card ${isLead ? 'is-lead' : ''}" data-card-id="${card.id}">
      <div class="card-head">
        <div>
          <span class="card-num">PAIN CARD ${String(index + 1).padStart(2, '0')}</span>
          ${isLead ? '<span class="lead-badge">Lead</span>' : ''}
          ${card.clusterId ? '<span class="cluster-pill">Clustered</span>' : ''}
        </div>
        <div class="card-actions">
          <button type="button" class="btn-mini danger" data-card-remove="${card.id}" title="Remove this pain card">Remove</button>
        </div>
      </div>

      <div class="card-grid">
        <div>
          <label>Pain title</label>
          <input type="text" data-card-field="title" data-card-id="${card.id}" value="${escapeHtml(card.title || '')}" placeholder="e.g., Solo CPAs can't move from hourly to retainer pricing" />
        </div>
        <div>
          <label>Score (0–100)</label>
          <input type="number" min="0" max="100" data-card-field="score" data-card-id="${card.id}" value="${card.score || ''}" placeholder="e.g., 87" />
        </div>
        <div>
          <label>Frequency</label>
          <select data-card-field="frequency" data-card-id="${card.id}">
            <option value="" ${!card.frequency ? 'selected' : ''}>—</option>
            <option value="daily" ${card.frequency === 'daily' ? 'selected' : ''}>Daily / weekly</option>
            <option value="monthly" ${card.frequency === 'monthly' ? 'selected' : ''}>Monthly</option>
            <option value="quarterly" ${card.frequency === 'quarterly' ? 'selected' : ''}>Quarterly / seasonal</option>
            <option value="once" ${card.frequency === 'once' ? 'selected' : ''}>One-time / project</option>
          </select>
        </div>
      </div>

      <div class="row-full">
        <label>Source community / URL</label>
        <input type="text" data-card-field="sourceCommunity" data-card-id="${card.id}" value="${escapeHtml(card.sourceCommunity || '')}" placeholder="e.g., r/Accounting · r/SoloAccounting · PainOnSocial scan ID" />
      </div>

      <div class="row-full">
        <label>Audience profile (who is suffering, in your words)</label>
        <textarea data-card-field="audience" data-card-id="${card.id}" placeholder="e.g., Solo CPAs in their first 24 months, billing under $7K/mo, post-Big-4, 32-45...">${escapeHtml(card.audience || '')}</textarea>
      </div>

      <div class="row-full quotes-block">
        <label>Verbatim quotes (paste 1–5 — these become the VOC vault)</label>
        ${quotesHtml}
        <button type="button" class="add-quote-btn" data-card-add-quote="${card.id}">+ Add another quote</button>
      </div>

      <div class="row-full">
        <label>AI solution seeds (1–3 from PainOnSocial or your own — these become Mechanism hints in Gate 04)</label>
        <textarea data-card-field="solutions" data-card-id="${card.id}" placeholder="e.g., (1) SaaS retainer-pricing calculator, (2) DWY 90-day retainer sprint, (3) Done-for-you proposal templates">${escapeHtml(card.solutions || '')}</textarea>
      </div>
    </div>
  `;
}

function renderQuestionGate(gate) {
  let html = `
    <div class="gate-rubric">${gate.rubric}</div>
    <h2>${gate.title}</h2>
    <div class="principle">
      ${gate.principle.text}
      <span class="source">Source: ${gate.principle.source}</span>
    </div>
  `;

  // Lead pain context banner — shown on gates that depend on the lead pain
  const leadPain = getLeadPainCard();
  const showLeadBanner = leadPain && ['avatar', 'problem', 'offer', 'copy', 'persuasion'].includes(gate.id);
  if (showLeadBanner) {
    const score = leadPain.score ? ` · score ${leadPain.score}/100` : '';
    const quotes = (leadPain.quotes || []).filter(q => q && q.trim()).length;
    const cluster = getClusterCards();
    const clusterNote = cluster.length > 1 ? ` · clustered with ${cluster.length - 1} other pain${cluster.length - 1 !== 1 ? 's' : ''}` : '';
    html += `
      <div class="lead-context-banner">
        <span class="label">Lead pain</span><strong>${escapeHtml((leadPain.title || 'Untitled').slice(0, 80))}</strong>${score} · ${quotes} quote${quotes !== 1 ? 's' : ''}${clusterNote}
      </div>
    `;
  }

  gate.inputs.forEach(input => {
    html += renderInput(input, state.answers[input.id]);
  });

  // Check verdict status
  const verdict = state.verdicts[gate.id];
  if (verdict) {
    const verdictData = computeVerdict(gate.id);
    if (verdictData) {
      html += renderVerdict(verdictData);
    }
  }

  // Action row
  const idx = GATES.findIndex(g => g.id === gate.id);
  const isLast = idx === GATES.length - 1;
  const prevGate = idx > 0 ? GATES[idx - 1] : null;

  html += `
    <div class="action-row">
      <div>
        ${prevGate ? `<button class="btn" data-nav="${idx - 1}">← ${prevGate.num} ${prevGate.name}</button>` : ''}
      </div>
      <div style="display:flex; gap:8px;">
        <button class="btn primary" id="btn-evaluate" data-gate="${gate.id}">Evaluate Gate</button>
        ${verdict && verdict !== 'no' ? `<button class="btn" data-nav="${idx + 1}">Next →</button>` : ''}
      </div>
    </div>
  `;

  return html;
}

// ============================================================
// VERIFY LINK BUILDER — pre-fill external search URLs with the
// operator's actual avatar/pain text. Free, no-login sources only.
// ============================================================

const STOP_WORDS = new Set([
  'a','an','the','and','or','but','if','then','of','to','for','in','on','at','by',
  'with','without','from','as','is','are','was','were','be','been','being','have',
  'has','had','do','does','did','will','would','should','could','can','may','might',
  'i','me','my','we','our','you','your','he','she','it','they','them','their',
  'who','what','where','when','why','how','this','that','these','those',
  'so','also','very','just','really','actually','about','because','want','wants',
  'wanting','need','needs','needing','earn','earning','get','getting','make','makes'
]);

function extractKeywords(text, maxWords = 6) {
  if (!text) return '';
  const cleaned = String(text)
    .toLowerCase()
    .replace(/[^a-z0-9\s\-]/g, ' ')
    .replace(/\s+/g, ' ')
    .trim();
  const words = cleaned.split(' ').filter(w => w.length >= 3 && !STOP_WORDS.has(w));
  // Preserve order, dedupe, cap to maxWords
  const seen = new Set();
  const kept = [];
  for (const w of words) {
    if (!seen.has(w)) { seen.add(w); kept.push(w); }
    if (kept.length >= maxWords) break;
  }
  return kept.join(' ');
}

function getNicheKeywords() {
  // Pull from avatar_who first (the niche), fall back to avatar_pain
  const who = state.answers.avatar_who || '';
  const pain = state.answers.avatar_pain || '';
  return extractKeywords(who, 6) || extractKeywords(pain, 6);
}

function getPainKeywords() {
  // Pain-flavored keywords — include emotional/complaint words
  const pain = state.answers.avatar_pain || '';
  return extractKeywords(pain, 6);
}

function buildVerifyURL(source) {
  const niche = getNicheKeywords();
  const pain = getPainKeywords();
  const q = (s) => encodeURIComponent(s);

  // No keywords? Return the homepage as fallback (caller flags this).
  const has = niche.length > 0;

  switch (source) {
    // === Niche-aware search URLs ===
    case 'reddit':
      return has ? `https://www.reddit.com/search/?q=${q(niche)}&sort=relevance` : 'https://www.reddit.com/';
    case 'reddit_communities':
      return has ? `https://www.reddit.com/search/?q=${q(niche)}&type=sr` : 'https://www.reddit.com/subreddits';
    case 'reddit_pain':
      return has ? `https://www.reddit.com/search/?q=${q(niche + ' ' + (pain || 'problem'))}&sort=top&t=year` : 'https://www.reddit.com/';
    case 'reddit_pain_intensity':
      return has ? `https://www.reddit.com/search/?q=${q(niche + ' "i hate" OR "i cannot" OR "frustrated"')}&sort=top&t=year` : 'https://www.reddit.com/';
    case 'reddit_pricing':
      return has ? `https://www.reddit.com/search/?q=${q(niche + ' "how much do you charge" OR pricing OR rates')}&sort=top&t=year` : 'https://www.reddit.com/';
    case 'reddit_growth':
      return has ? `https://www.reddit.com/search/?q=${q(niche)}&sort=top&t=month` : 'https://www.reddit.com/';
    case 'reddit_top':
      return has ? `https://www.reddit.com/search/?q=${q(niche)}&sort=top&t=month` : 'https://www.reddit.com/';

    case 'google_site_reddit':
      return has ? `https://www.google.com/search?q=${q('site:reddit.com ' + niche)}` : 'https://www.google.com/';
    case 'google_pricing':
      return has ? `https://www.google.com/search?q=${q(niche + ' pricing OR "how much"')}` : 'https://www.google.com/';
    case 'google_news':
      return has ? `https://www.google.com/search?q=${q(niche)}&tbm=nws&tbs=qdr:y` : 'https://news.google.com/';
    case 'facebook_groups':
      return has ? `https://www.google.com/search?q=${q('site:facebook.com/groups ' + niche)}` : 'https://www.google.com/';

    case 'google_trends':
      return has ? `https://trends.google.com/trends/explore?q=${q(niche)}&date=today%205-y` : 'https://trends.google.com/trends/';

    case 'youtube':
      return has ? `https://www.youtube.com/results?search_query=${q(niche)}` : 'https://www.youtube.com/';
    case 'youtube_howto':
      return has ? `https://www.youtube.com/results?search_query=${q('how to ' + niche)}` : 'https://www.youtube.com/';
    case 'youtube_course':
      return has ? `https://www.youtube.com/results?search_query=${q(niche + ' course OR coaching')}` : 'https://www.youtube.com/';
    case 'youtube_channels':
      return has ? `https://www.youtube.com/results?search_query=${q(niche)}&sp=EgIQAg%253D%253D` : 'https://www.youtube.com/';

    case 'twitter':
      return has ? `https://twitter.com/search?q=${q(niche)}&src=typed_query&f=live` : 'https://twitter.com/explore';
    case 'twitter_complaint':
      return has ? `https://twitter.com/search?q=${q(niche + ' ("i hate" OR "i cannot" OR "frustrated")')}&src=typed_query&f=live` : 'https://twitter.com/explore';

    case 'tiktok':
      return has ? `https://www.tiktok.com/search?q=${q(niche)}` : 'https://www.tiktok.com/';

    case 'quora':
      return has ? `https://www.quora.com/search?q=${q(niche)}` : 'https://www.quora.com/';

    case 'indeed':
      return has ? `https://www.indeed.com/jobs?q=${q(niche)}` : 'https://www.indeed.com/';

    case 'flippa':
      return has ? `https://flippa.com/search?search%5Bquery%5D=${q(niche)}` : 'https://flippa.com/';

    case 'indiehackers':
      return has ? `https://www.indiehackers.com/search?q=${q(niche)}` : 'https://www.indiehackers.com/';

    default:
      return 'https://www.google.com/';
  }
}

function hasVerifyContext() {
  return getNicheKeywords().length > 0;
}

// ============================================================
// AI SHARPEN — call the Anthropic API directly from the browser.
// Stores API key in localStorage. Single-user / personal use only.
// ============================================================

// Model alias. 'claude-sonnet-4-6' is Anthropic's current canonical alias for Sonnet 4.6
// (released Feb 2026). Fast + cheap, well-suited to a 700-token JSON critique.
// To upgrade to the strongest available model, swap to 'claude-opus-4-7' (released Apr 2026).
// Pinned snapshot alternatives: 'claude-sonnet-4-5-20250929' (older, more deterministic).
const ANTHROPIC_MODEL = 'claude-sonnet-4-6';
const ANTHROPIC_API_KEY_STORAGE = 'mvo-anthropic-key';

const SHARPEN_SYSTEM_PROMPT = `You are an operating coach reviewing a founder's answer in an early-stage market validation tool.

Your job: critique their answer for specificity. You are direct, honest, and useful. You do not flatter. If the answer is vague, you say so plainly. If it is sharp, you confirm what is working and push the operator one level deeper.

You always return your response as a single valid JSON object with exactly these four keys:
{
  "score": <integer 1-10, where 10 = a precise, falsifiable answer with named details, 1 = pure aspiration with no specifics>,
  "critique": "<2-3 sentences. What is the answer's actual specificity level? What is missing that would make this useful? Be direct, not gentle.>",
  "weakest": "<1 sentence naming the single weakest element of the answer.>",
  "rewrite": "<A 2-4 sentence rewrite of the operator's answer that is sharper, more specific, and uses any concrete details the operator did supply. If they gave you nothing concrete, write a rewrite that demonstrates what specificity looks like for this kind of answer using a plausible filled-in example.>"
}

CRITICAL RULES:
- Return ONLY the JSON object. No prose before or after. No markdown code fences. No explanation.
- Use double quotes for all strings.
- Do not invent facts the operator did not give. The "rewrite" should illustrate what specificity looks like, not fabricate a customer.
- If the operator's answer contains a real specific detail, preserve it in the rewrite.

You are evaluating two kinds of answers:
- inputType "avatar_who": who exactly is the customer. Specificity = role, industry, size, age, location, income tier, named characteristics.
- inputType "avatar_pain": what specific pain the customer feels. Specificity = quoted language, named time/place/trigger, evidence the operator has heard this from real people.`;

function getApiKey() {
  try { return localStorage.getItem(ANTHROPIC_API_KEY_STORAGE) || ''; }
  catch (e) { return ''; }
}

function setApiKey(key) {
  try { localStorage.setItem(ANTHROPIC_API_KEY_STORAGE, key); }
  catch (e) {}
}

function clearApiKey() {
  try { localStorage.removeItem(ANTHROPIC_API_KEY_STORAGE); }
  catch (e) {}
}

function modelDisplayName() {
  // Map current Anthropic model aliases to human-readable names for UI.
  const map = {
    'claude-opus-4-7': 'Claude Opus 4.7',
    'claude-opus-4-6': 'Claude Opus 4.6',
    'claude-sonnet-4-6': 'Claude Sonnet 4.6',
    'claude-sonnet-4-5': 'Claude Sonnet 4.5',
    'claude-haiku-4-5': 'Claude Haiku 4.5'
  };
  return map[ANTHROPIC_MODEL] || ANTHROPIC_MODEL;
}

async function runAiSharpen(inputId) {
  const panel = document.querySelector(`[data-help-panel="ai-${inputId}"]`);
  if (!panel) return;

  const emptyEl = panel.querySelector('[data-ai-empty]');
  const loadingEl = panel.querySelector('[data-ai-loading]');
  const resultEl = panel.querySelector('[data-ai-result]');
  const errorEl = panel.querySelector('[data-ai-error]');

  // Check API key first
  const apiKey = getApiKey();
  if (!apiKey || !apiKey.startsWith('sk-ant-')) {
    if (emptyEl) emptyEl.style.display = 'none';
    errorEl.style.display = 'block';
    errorEl.innerHTML = `<p><strong>API key needed.</strong> Click the <em>Settings</em> button in the top right to paste your Anthropic key. Get one at <a href="https://console.anthropic.com" target="_blank" rel="noopener">console.anthropic.com</a> → API Keys.</p>`;
    return;
  }

  // Read the operator's current answer
  const answer = (state.answers[inputId] || '').trim();
  if (answer.length < 10) {
    if (emptyEl) emptyEl.style.display = 'none';
    errorEl.style.display = 'block';
    errorEl.innerHTML = '<p>Type at least a few sentences first. Claude needs something to critique.</p>';
    return;
  }

  const inputType = inputId; // 'avatar_who' or 'avatar_pain'

  // Show loading state
  if (emptyEl) emptyEl.style.display = 'none';
  if (resultEl) { resultEl.style.display = 'none'; resultEl.innerHTML = ''; }
  if (errorEl) { errorEl.style.display = 'none'; errorEl.innerHTML = ''; }
  loadingEl.style.display = 'block';

  try {
    const userMessage = `inputType: ${inputType}

The operator's current answer:
"""
${answer}
"""

Critique this answer per your instructions. Return only the JSON object.`;

    const response = await fetch('https://api.anthropic.com/v1/messages', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': apiKey,
        'anthropic-version': '2023-06-01',
        'anthropic-dangerous-direct-browser-access': 'true'
      },
      body: JSON.stringify({
        model: ANTHROPIC_MODEL,
        max_tokens: 700,
        system: SHARPEN_SYSTEM_PROMPT,
        messages: [{ role: 'user', content: userMessage }]
      })
    });

    if (!response.ok) {
      const errText = await response.text();
      let errMsg;
      if (response.status === 401) {
        errMsg = 'Invalid API key. Click Settings (top right) and re-enter your key.';
      } else if (response.status === 429) {
        errMsg = 'Rate limited. Wait 30 seconds and try again.';
      } else if (response.status === 400) {
        errMsg = 'Anthropic rejected the request. Possibly out of credits or model name changed.';
      } else {
        errMsg = `Anthropic API returned ${response.status}: ${errText.slice(0, 200)}`;
      }
      throw new Error(errMsg);
    }

    const apiData = await response.json();
    const rawText = (apiData.content && apiData.content[0] && apiData.content[0].text) || '';

    // Parse Claude's JSON. Strip code fences if present.
    let parsed;
    try {
      let cleanText = rawText.trim();
      cleanText = cleanText.replace(/^```(?:json)?\s*/i, '').replace(/\s*```$/, '');
      parsed = JSON.parse(cleanText);
    } catch (e) {
      throw new Error('Claude returned non-JSON. Try again — usually transient.');
    }

    if (typeof parsed.score === 'undefined' || !parsed.critique) {
      throw new Error('Response missing expected fields. Try again.');
    }
    parsed.score = Math.max(1, Math.min(10, parseInt(parsed.score, 10) || 5));

    loadingEl.style.display = 'none';
    resultEl.innerHTML = renderAiResult(parsed, inputId);
    resultEl.style.display = 'block';

    // Wire the "use rewrite" button
    const useBtn = resultEl.querySelector('[data-ai-use]');
    if (useBtn) {
      useBtn.addEventListener('click', () => {
        const newText = useBtn.getAttribute('data-ai-rewrite');
        const textarea = document.querySelector(`textarea[data-input="${inputId}"]`);
        if (textarea && newText) {
          textarea.value = newText;
          state.answers[inputId] = newText;
          saveState();
          useBtn.textContent = '✓ Inserted into your answer above';
          useBtn.disabled = true;
        }
      });
    }
  } catch (err) {
    loadingEl.style.display = 'none';
    errorEl.style.display = 'block';
    errorEl.innerHTML = `<p><strong>Couldn't reach Claude.</strong> ${escapeHtml(err.message || 'Unknown error.')}</p>`;
  }
}

function renderAiResult(data, inputId) {
  // data = { score: 1-10, critique: "...", weakest: "...", rewrite: "..." }
  const scoreClass = data.score >= 8 ? 'good' : data.score >= 5 ? 'mid' : 'weak';
  return `
    <div class="ai-score-row">
      <div class="ai-score ai-score-${scoreClass}">
        <div class="ai-score-num">${data.score || '?'}</div>
        <div class="ai-score-label">/ 10</div>
      </div>
      <div class="ai-score-text">
        <h6>Specificity score</h6>
        <p>${escapeHtml(data.critique || '')}</p>
      </div>
    </div>
    ${data.weakest ? `
      <div class="ai-section">
        <h6>The single weakest element</h6>
        <p>${escapeHtml(data.weakest)}</p>
      </div>
    ` : ''}
    ${data.rewrite ? `
      <div class="ai-section ai-rewrite">
        <h6>A sharper rewrite</h6>
        <p class="ai-rewrite-text">${escapeHtml(data.rewrite)}</p>
        <button type="button" class="ai-use-btn" data-ai-use="${inputId}" data-ai-rewrite="${escapeHtml(data.rewrite)}">Use this rewrite</button>
      </div>
    ` : ''}
    <p class="ai-attribution">✦ Critique by ${modelDisplayName()}. This is a coaching tool, not a verdict — your judgment about your market is still the input that matters.</p>
  `;
}

function updateVerifyPanelState(panel) {
  // Toggle the empty-state message vs the link grid based on whether
  // the operator has typed enough to drive a meaningful search.
  if (!panel) return;
  const empty = panel.querySelector('[data-verify-empty]');
  const intro = panel.querySelector('[data-verify-intro]');
  const grid = panel.querySelector('.verify-grid');
  const has = hasVerifyContext();
  if (empty) empty.style.display = has ? 'none' : 'block';
  if (intro) intro.style.display = has ? 'block' : 'none';
  if (grid) grid.style.opacity = has ? '1' : '0.4';
}

function renderHelpRail(input) {
  // Build a per-input help block: examples toggle, sharpen toggle, verify toggle,
  // AI-sharpen toggle, each with a hidden panel revealed on click.
  // Returns empty string if input has no help data.
  const hasExamples = !!input.examples;
  const hasSharpen = !!input.sharpen;
  const hasVerify = !!input.verify;
  const hasAi = !!input.aiSharpen;
  if (!hasExamples && !hasSharpen && !hasVerify && !hasAi) return '';

  const inputId = input.id;
  let html = '<div class="help-rail">';
  if (hasExamples) html += `<button type="button" class="help-toggle" data-help-toggle="examples" data-help-input="${inputId}">See examples</button>`;
  if (hasSharpen) html += `<button type="button" class="help-toggle" data-help-toggle="sharpen" data-help-input="${inputId}">Sharpen this</button>`;
  if (hasVerify) html += `<button type="button" class="help-toggle verify" data-help-toggle="verify" data-help-input="${inputId}">Verify externally</button>`;
  if (hasAi) html += `<button type="button" class="help-toggle ai" data-help-toggle="ai" data-help-input="${inputId}">Sharpen with AI ✦</button>`;
  html += '</div>';

  // Examples panel
  if (hasExamples) {
    html += `
      <div class="help-panel examples-panel" data-help-panel="examples-${inputId}">
        <div class="col-row">
          <div class="good-col">
            <h6>Good — specific, sourced, falsifiable</h6>
            <ul>${input.examples.good.map(e => `<li>${escapeHtml(e)}</li>`).join('')}</ul>
          </div>
          <div class="bad-col">
            <h6>Vague — sounds confident, says nothing</h6>
            <ul>${input.examples.bad.map(e => `<li>${escapeHtml(e)}</li>`).join('')}</ul>
          </div>
        </div>
      </div>
    `;
  }

  // Sharpen panel
  if (hasSharpen) {
    html += `
      <div class="help-panel sharpen-panel" data-help-panel="sharpen-${inputId}">
        <ol>${input.sharpen.map(q => `<li>${escapeHtml(q)}</li>`).join('')}</ol>
        <div class="closer">If you cannot answer all of the above, your answer above is a hypothesis — not a finding. Either revise it now or mark this gate "rework" and do the homework first.</div>
      </div>
    `;
  }

  // Verify panel
  if (hasVerify) {
    html += `
      <div class="help-panel verify-panel" data-help-panel="verify-${inputId}">
        <p class="verify-intro" data-verify-intro>Open these in new tabs and check your claim against external evidence. Independent verification is the cure for confidence-without-data.</p>
        <div class="verify-grid">
          ${input.verify.map(v => `<a class="verify-link" href="#" data-verify-source="${escapeHtml(v.source)}" target="_blank" rel="noopener noreferrer">${escapeHtml(v.label)}</a>`).join('')}
        </div>
        <p class="verify-empty" data-verify-empty style="display:none;">Type your avatar (and pain) above first — these searches use your own keywords. Then click here again.</p>
      </div>
    `;
  }

  // AI Sharpen panel — content populated on click via API call
  if (hasAi) {
    html += `
      <div class="help-panel ai-panel" data-help-panel="ai-${inputId}">
        <div class="ai-empty" data-ai-empty>
          <p class="ai-intro">Send your current answer to Claude for a structured critique: specificity score, the single weakest element, and a sharper rewrite. Takes 3–8 seconds.</p>
          <button type="button" class="ai-go-btn" data-ai-go="${inputId}">✦ Critique my answer with Claude</button>
        </div>
        <div class="ai-loading" data-ai-loading style="display:none;">
          <div class="ai-spinner"></div>
          <p>Claude is reading your answer...</p>
        </div>
        <div class="ai-result" data-ai-result style="display:none;"></div>
        <div class="ai-error" data-ai-error style="display:none;"></div>
      </div>
    `;
  }

  return html;
}

function renderInput(input, savedValue) {
  const v = savedValue !== undefined ? savedValue : '';
  const helpRail = renderHelpRail(input);
  const hasVOC = hasVOCQuotes();

  // VOC pull button (only for textareas that opt in via vocPull: true)
  const vocBtn = input.vocPull
    ? `<button type="button" class="voc-pull-btn" data-voc-pull="${input.id}" ${hasVOC ? '' : 'disabled'}>💬 Pull from VOC vault${hasVOC ? ` (${state.voCVault.length})` : ' — empty'}</button> `
    : '';

  if (input.type === 'textarea') {
    return `
      <div class="input-group">
        <label for="${input.id}">${input.label}</label>
        <div class="help">${input.help}</div>
        ${vocBtn}${helpRail}
        <textarea id="${input.id}" data-input="${input.id}" placeholder="${input.placeholder || ''}">${escapeHtml(v)}</textarea>
      </div>
    `;
  }

  if (input.type === 'text' || input.type === 'number') {
    return `
      <div class="input-group">
        <label for="${input.id}">${input.label}</label>
        <div class="help">${input.help}</div>
        ${helpRail}
        <input type="${input.type}" id="${input.id}" data-input="${input.id}" value="${escapeHtml(v)}" placeholder="${input.placeholder || ''}" />
      </div>
    `;
  }

  if (input.type === 'scale') {
    let html = `
      <div class="input-group">
        <label>${input.label}</label>
        <div class="help">${input.help}</div>
        ${helpRail}
        <div class="scale" data-scale="${input.id}">
    `;
    for (let i = 1; i <= 10; i++) {
      html += `<button type="button" class="scale-btn ${parseInt(v) === i ? 'selected' : ''}" data-value="${i}">${i}</button>`;
    }
    html += `
        </div>
        <div class="scale-labels">
          <span>1 — Low</span>
          <span>10 — High</span>
        </div>
      </div>
    `;
    return html;
  }

  if (input.type === 'choice') {
    const cols = input.cols || 1;
    let html = `
      <div class="input-group">
        <label>${input.label}</label>
        <div class="help">${input.help}</div>
        ${helpRail}
        <div class="choice-group cols-${cols}" data-choice="${input.id}">
    `;
    input.options.forEach(opt => {
      html += `
        <button type="button" class="choice-btn ${v === opt.value ? 'selected' : ''}" data-value="${opt.value}">
          <span class="label">${opt.label}</span>
          <span class="sub">${opt.sub}</span>
        </button>
      `;
    });
    html += `</div></div>`;
    return html;
  }

  return '';
}

function renderVerdict(data) {
  const labels = { go: 'GO', no: 'NO', rework: 'REWORK' };
  let html = `
    <div class="verdict ${data.verdict}">
      <div class="verdict-header">
        <span class="label">Verdict</span>
        <span class="name">${labels[data.verdict]} · ${data.name}</span>
      </div>
      <div class="verdict-body">
  `;
  if (data.score) {
    html += `
      <div class="score-display">
        <div>
          <div class="label">${data.score.label}</div>
          <div class="breakdown">Captain's Logic weighting</div>
        </div>
        <div class="total">${data.score.total}<span class="max"> / ${data.score.max}</span></div>
      </div>
    `;
  }
  html += `<ul>`;
  data.reasons.forEach(r => { html += `<li>${r}</li>`; });
  html += `</ul></div></div>`;
  return html;
}

function renderSummary() {
  const date = new Date().toLocaleDateString('en-US', {
    year: 'numeric', month: 'long', day: 'numeric'
  });

  let html = `
    <div class="gate-rubric">Decision Document</div>
    <h2>Your <em>One-Page Brief</em></h2>
    <p style="font-family: var(--serif); font-size: 16px; color: var(--muted); margin-bottom: 20px; max-width: 720px; line-height: 1.5;">
      Below is the printable, single-page summary of your decisions across all 16 gates. Tape it to the wall. Send it to your accountability partner. Refer back when the next launch temptation hits.
    </p>
    <div class="brief" id="brief">
      <h3>The MVO <em>Brief</em></h3>
      <div class="brief-meta">Generated ${date} · RISER MVO Engine · Captain's Logic</div>
  `;

  // Compute gate verdicts on the fly
  const verdictBadges = [];
  GATES.forEach(gate => {
    if (gate.isIntro || gate.isSummary) return;
    const v = state.verdicts[gate.id];
    if (v) {
      const labels = { go: 'GO', no: 'NO', rework: 'REWORK' };
      verdictBadges.push(`<span class="pill" style="color: ${v === 'go' ? 'var(--green)' : v === 'no' ? 'var(--red)' : 'var(--gold)'};">${gate.num} ${labels[v]}</span>`);
    }
  });

  if (verdictBadges.length > 0) {
    html += `
      <div class="brief-section">
        <h4>Gate Verdicts</h4>
        <p>${verdictBadges.join(' ')}</p>
      </div>
    `;
  }

  // Pain Discovery (only if any cards exist)
  const cards = state.painCards || [];
  if (cards.length > 0) {
    const lead = getLeadPainCard();
    const totalQuotes = (state.voCVault || []).length;
    let painHtml = `
      <div class="brief-section">
        <h4>Pain Discovery (VOC Source)</h4>
        <p><strong>Cards imported:</strong> ${cards.length} · <strong>Quotes in vault:</strong> ${totalQuotes}</p>
    `;
    if (lead) {
      painHtml += `<p><strong>Lead pain:</strong> ${escapeHtml(lead.title || 'Untitled')}${lead.score ? ' · score ' + lead.score + '/100' : ''}</p>`;
      if (lead.sourceCommunity) painHtml += `<p><strong>Source:</strong> ${escapeHtml(lead.sourceCommunity)}</p>`;
      if (lead.audience) painHtml += `<p><strong>Audience:</strong> ${escapeHtml(lead.audience)}</p>`;
      const cluster = getClusterCards();
      if (cluster.length > 1) {
        painHtml += `<p><strong>Cluster:</strong> ${cluster.length} pain cards grouped — ${cluster.map(c => escapeHtml((c.title || 'Untitled').slice(0, 50))).join(' · ')}</p>`;
      }
      // Top 3 quotes
      const topQuotes = (state.voCVault || []).slice(0, 3);
      if (topQuotes.length > 0) {
        painHtml += `<p style="margin-top:8px;"><strong>Top customer quotes:</strong></p>`;
        topQuotes.forEach(q => {
          painHtml += `<p style="font-style: italic; padding-left: 12px; border-left: 2px solid var(--gold); margin-top: 6px;">"${escapeHtml(q.text)}" <span style="font-style: normal; font-size: 11px; color: var(--muted); display: block;">— ${escapeHtml(q.cardTitle)}</span></p>`;
        });
      }
    }
    painHtml += `</div>`;
    html += painHtml;
  }

  // Avatar
  html += briefSection('The Avatar', [
    ['Who', state.answers.avatar_who],
    ['Pain (their words)', state.answers.avatar_pain]
  ]);

  // Idea
  html += briefSection('The Idea', [
    ['One-sentence offer', state.answers.idea_one_sentence],
    ['Competitive reality', readableChoice('idea_competition')],
    ['$100 today test', readableChoice('idea_money_now')]
  ]);

  // Problem
  html += briefSection('The Problem', [
    ['Problem statement', state.answers.problem_specific],
    ['Frequency', readableChoice('problem_frequency')],
    ['Cost of not solving', readableChoice('problem_cost')],
    ['Existing solutions', state.answers.problem_existing_solutions]
  ]);

  // Offer
  html += briefSection('The Offer (Value Equation)', [
    ['Dream Outcome', state.answers.offer_dream],
    ['Proof / Likelihood', state.answers.offer_likelihood],
    ['Time to first result', readableChoice('offer_time_delay')],
    ['Effort tier', readableChoice('offer_effort')],
    ['Named Mechanism', state.answers.offer_mechanism]
  ]);

  // Stack
  html += briefSection('The Grand Slam Stack', [
    ['Offer name', state.answers.stack_offer_name],
    ['Bonuses', state.answers.stack_bonuses],
    ['Guarantee type', readableChoice('stack_guarantee_type')],
    ['Guarantee wording', state.answers.stack_guarantee_text],
    ['Scarcity mechanism', readableChoice('stack_scarcity')],
    ['Stack value (anchor)', state.answers.stack_total_value ? '$' + state.answers.stack_total_value : ''],
    ['Actual price', state.answers.stack_actual_price ? '$' + state.answers.stack_actual_price : '']
  ]);

  // Distribution
  html += briefSection('Distribution (Core Four)', [
    ['Primary channel', readableChoice('dist_primary')],
    ['Volume math', state.answers.dist_volume],
    ['Unit economics readiness', readableChoice('dist_unit_econ')]
  ]);

  // Dream 100
  html += briefSection('Dream 100', [
    ['Named contacts', state.answers.dream100_list],
    ['Strategy', readableChoice('dream100_strategy')],
    ['First-touch script', state.answers.dream100_first_outreach],
    ['Weekly volume', readableChoice('dream100_volume')]
  ]);

  // Copy
  html += briefSection('The Copy', [
    ['Hook', state.answers.copy_hook],
    ['Headline', state.answers.copy_headline],
    ['Body', state.answers.copy_body]
  ]);

  // Persuasion Architecture
  html += briefSection('Persuasion Architecture', [
    ['Big Domino (one belief)', state.answers.persuasion_big_domino],
    ['False beliefs to break', state.answers.persuasion_false_beliefs],
    ['Reciprocity gift', state.answers.persuasion_lead_magnet],
    ['Reciprocity strength', readableChoice('persuasion_reciprocity')],
    ['Social proof', readableChoice('persuasion_social_proof')],
    ['Authority', readableChoice('persuasion_authority')],
    ['Unity language', readableChoice('persuasion_unity')],
    ['Consistency mechanism', readableChoice('persuasion_consistency')]
  ]);

  // Deploy
  html += briefSection('The Launch', [
    ['Date', state.answers.deploy_date],
    ['Cohort size', readableChoice('deploy_size')],
    ['Price', state.answers.deploy_price ? '$' + state.answers.deploy_price : ''],
    ['Kill rule', readableChoice('deploy_kill_rule')]
  ]);

  // Iterate / Pivot / Scale / Repeat (only if filled)
  const hasLater = state.answers.iter_signal || state.answers.scale_signal || state.answers.repeat_next_problem;
  if (hasLater) {
    html += briefSection('Iterate · Pivot · Scale', [
      ['Iteration pattern', state.answers.iter_signal],
      ['Iteration lever', readableChoice('iter_lever')],
      ['Awareness stage', readableChoice('iter_awareness')],
      ['Market sophistication', readableChoice('iter_sophistication')],
      ['Refund interview discipline', readableChoice('iter_refund_interviews')],
      ['Scale lever', readableChoice('scale_lever')],
      ['Current bottleneck', state.answers.scale_constraint]
    ]);

    html += briefSection('Compound · Value Ladder · Continuity', [
      ['Next problem to solve', state.answers.repeat_next_problem],
      ['Compound move', readableChoice('repeat_decision')],
      ['Rung 1 — Bait', state.answers.repeat_ladder_bait],
      ['Rung 2 — Tripwire', state.answers.repeat_ladder_tripwire],
      ['Rung 3 — Core', state.answers.repeat_ladder_core],
      ['Rung 4 — Continuity', state.answers.repeat_ladder_continuity],
      ['Rung 5 — High-Ticket', state.answers.repeat_ladder_high],
      ['Continuity health', readableChoice('repeat_continuity_status')],
      ['Affiliate / partner motion', readableChoice('repeat_dream100_affiliate')]
    ]);
  }

  html += `
      <div class="brief-section" style="border-top: 2px solid var(--ink); padding-top: 14px; margin-top: 18px; border-bottom: none;">
        <h4>The Captain's One-Liner</h4>
        <p style="font-style: italic; font-size: 17px;">"You do not have a thinking problem. You have a doing problem. The next document is not the answer — the next paying customer is."</p>
      </div>
    </div>
    <div class="action-row">
      <button class="btn" data-nav="${GATES.length - 2}">← Back to Gate 11 (Repeat)</button>
      <div style="display:flex; gap:8px;">
        <button class="btn" id="btn-print-brief">Print Brief</button>
        <button class="btn primary" id="btn-export-brief">Export JSON</button>
      </div>
    </div>
  `;

  return html;
}

function briefSection(title, rows) {
  let html = `<div class="brief-section"><h4>${title}</h4>`;
  let hasContent = false;
  rows.forEach(([label, value]) => {
    if (value && value.toString().trim()) {
      html += `<p><strong>${label}:</strong> ${escapeHtml(value)}</p>`;
      hasContent = true;
    }
  });
  if (!hasContent) {
    html += `<p class="empty">— Not yet completed —</p>`;
  }
  html += `</div>`;
  return html;
}

function readableChoice(inputId) {
  const v = state.answers[inputId];
  if (!v) return '';
  // Find the gate that has this input
  for (const gate of GATES) {
    if (!gate.inputs) continue;
    const inp = gate.inputs.find(i => i.id === inputId);
    if (inp && inp.options) {
      const opt = inp.options.find(o => o.value === v);
      if (opt) return opt.label;
    }
  }
  return v;
}

function escapeHtml(str) {
  return String(str || '')
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#039;');
}

// ============================================================
// EVENT HANDLERS
// ============================================================

function attachGateHandlers(gate) {
  // ===== PAIN DISCOVERY HANDLERS =====
  // Skip button — navigates to next gate
  const painSkip = document.getElementById('pain-skip-btn');
  if (painSkip) {
    painSkip.addEventListener('click', () => {
      const idx = GATES.findIndex(g => g.id === 'paindiscovery');
      navigateToGate(idx + 1);
    });
  }

  // Add a new pain card
  const painAdd = document.getElementById('pain-add-btn');
  if (painAdd) {
    painAdd.addEventListener('click', () => {
      if (!state.painCards) state.painCards = [];
      if (state.painCards.length >= 5) return;
      const newCard = {
        id: newPainCardId(),
        title: '',
        score: '',
        frequency: '',
        sourceCommunity: '',
        audience: '',
        quotes: [''],
        solutions: '',
        clusterId: null
      };
      state.painCards.push(newCard);
      // Auto-set as lead if it's the first
      if (state.painCards.length === 1) state.leadPainId = newCard.id;
      rebuildVOCVault();
      saveState();
      renderGate(state.currentGate);
    });
  }

  // Remove a pain card
  document.querySelectorAll('[data-card-remove]').forEach(btn => {
    btn.addEventListener('click', () => {
      const id = btn.getAttribute('data-card-remove');
      if (!confirm('Remove this pain card? Its quotes will leave the VOC vault.')) return;
      state.painCards = (state.painCards || []).filter(c => c.id !== id);
      // If we removed the lead, pick a new one
      if (state.leadPainId === id) {
        state.leadPainId = state.painCards.length > 0 ? state.painCards[0].id : null;
      }
      rebuildVOCVault();
      saveState();
      renderGate(state.currentGate);
    });
  });

  // Edit pain card field (title, score, frequency, sourceCommunity, audience, solutions)
  document.querySelectorAll('[data-card-field]').forEach(el => {
    el.addEventListener('input', () => {
      const field = el.getAttribute('data-card-field');
      const id = el.getAttribute('data-card-id');
      const card = (state.painCards || []).find(c => c.id === id);
      if (!card) return;
      let value = el.value;
      if (field === 'score') {
        value = parseInt(value) || '';
        if (value > 100) value = 100;
        if (value < 0) value = 0;
      }
      card[field] = value;
      saveState();
    });
    // For selects, also listen to 'change'
    if (el.tagName === 'SELECT') {
      el.addEventListener('change', () => {
        const field = el.getAttribute('data-card-field');
        const id = el.getAttribute('data-card-id');
        const card = (state.painCards || []).find(c => c.id === id);
        if (!card) return;
        card[field] = el.value;
        saveState();
      });
    }
  });

  // Edit a quote inside a pain card
  document.querySelectorAll('[data-card-quote]').forEach(el => {
    el.addEventListener('input', () => {
      const id = el.getAttribute('data-card-quote');
      const qi = parseInt(el.getAttribute('data-quote-idx'));
      const card = (state.painCards || []).find(c => c.id === id);
      if (!card) return;
      if (!card.quotes) card.quotes = [];
      while (card.quotes.length <= qi) card.quotes.push('');
      card.quotes[qi] = el.value;
      rebuildVOCVault();
      saveState();
    });
  });

  // Add a quote slot to a pain card
  document.querySelectorAll('[data-card-add-quote]').forEach(btn => {
    btn.addEventListener('click', () => {
      const id = btn.getAttribute('data-card-add-quote');
      const card = (state.painCards || []).find(c => c.id === id);
      if (!card) return;
      if (!card.quotes) card.quotes = [];
      if (card.quotes.length >= 5) {
        alert('Maximum 5 quotes per card.');
        return;
      }
      card.quotes.push('');
      saveState();
      renderGate(state.currentGate);
    });
  });

  // Remove a quote
  document.querySelectorAll('[data-card-remove-quote]').forEach(btn => {
    btn.addEventListener('click', () => {
      const id = btn.getAttribute('data-card-remove-quote');
      const qi = parseInt(btn.getAttribute('data-quote-idx'));
      const card = (state.painCards || []).find(c => c.id === id);
      if (!card || !card.quotes) return;
      card.quotes.splice(qi, 1);
      if (card.quotes.length === 0) card.quotes = [''];
      rebuildVOCVault();
      saveState();
      renderGate(state.currentGate);
    });
  });

  // Pick lead pain card
  document.querySelectorAll('[data-pick-lead]').forEach(btn => {
    btn.addEventListener('click', () => {
      const id = btn.getAttribute('data-pick-lead');
      state.leadPainId = id;
      saveState();
      renderGate(state.currentGate);
    });
  });

  // Toggle a card into/out of the lead's cluster
  document.querySelectorAll('[data-cluster-toggle]').forEach(btn => {
    btn.addEventListener('click', () => {
      const id = btn.getAttribute('data-cluster-toggle');
      const card = (state.painCards || []).find(c => c.id === id);
      const lead = getLeadPainCard();
      if (!card || !lead) return;
      // Ensure lead has a clusterId
      if (!lead.clusterId) lead.clusterId = 'cluster_' + lead.id;
      if (card.clusterId === lead.clusterId) {
        card.clusterId = null;
      } else {
        card.clusterId = lead.clusterId;
      }
      saveState();
      renderGate(state.currentGate);
    });
  });

  // Apply lead pain card to downstream gates
  const painApply = document.getElementById('pain-apply-btn');
  if (painApply) {
    painApply.addEventListener('click', () => {
      const lead = getLeadPainCard();
      if (!lead) return;

      // Build avatar_who from audience + sourceCommunity
      const who = (lead.audience || '').trim();
      // Build avatar_pain from title + top quote
      const topQuote = (lead.quotes || []).find(q => q && q.trim().length >= 10);
      const painText = topQuote
        ? `${lead.title}\n\nIn their words: "${topQuote.trim()}"`
        : (lead.title || '');

      if (who) state.answers.avatar_who = who;
      if (painText) state.answers.avatar_pain = painText;

      // Apply intensity score onto the avatar_pain_intensity scale (1-10)
      if (lead.score) {
        const scaleVal = Math.max(1, Math.min(10, Math.round(lead.score / 10)));
        state.answers.avatar_pain_intensity = String(scaleVal);
      }

      // Apply frequency to Gate 03 problem_frequency
      const mappedFreq = paintFrequencyToWidget(lead.frequency);
      if (mappedFreq) state.answers.problem_frequency = mappedFreq;

      // Apply title to problem_specific if empty
      if (lead.title && !(state.answers.problem_specific || '').trim()) {
        state.answers.problem_specific = lead.title;
      }

      // Apply solutions to offer_mechanism as a hint if empty
      if (lead.solutions && !(state.answers.offer_mechanism || '').trim()) {
        state.answers.offer_mechanism = `[Solution seeds from pain research — name your mechanism here]\n\n${lead.solutions}`;
      }

      saveState();
      alert('Lead pain applied to Gate 01, Gate 03, and Gate 04 (mechanism hint). Open those gates to refine.');
      // Navigate to Gate 01 (avatar) automatically
      const avatarIdx = GATES.findIndex(g => g.id === 'avatar');
      navigateToGate(avatarIdx);
    });
  }

  // ===== END PAIN DISCOVERY HANDLERS =====

  // VOC vault pull buttons — open the picker popover
  document.querySelectorAll('[data-voc-pull]').forEach(btn => {
    btn.addEventListener('click', () => {
      if (btn.disabled) return;
      const inputId = btn.getAttribute('data-voc-pull');
      openVOCPopover(inputId);
    });
  });

  // Step One Help System — toggle examples / sharpen / verify / ai panels
  document.querySelectorAll('[data-help-toggle]').forEach(btn => {
    btn.addEventListener('click', () => {
      const kind = btn.getAttribute('data-help-toggle');
      const inputId = btn.getAttribute('data-help-input');
      const panelKey = `${kind}-${inputId}`;
      const panel = document.querySelector(`[data-help-panel="${panelKey}"]`);
      if (!panel) return;
      const wasVisible = panel.classList.contains('visible');
      // Close other open panels for this same input
      document.querySelectorAll(`[data-help-input="${inputId}"]`).forEach(b => b.classList.remove('active'));
      ['examples', 'sharpen', 'verify', 'ai'].forEach(k => {
        const p = document.querySelector(`[data-help-panel="${k}-${inputId}"]`);
        if (p) p.classList.remove('visible');
      });
      // If this one wasn't visible, open it
      if (!wasVisible) {
        panel.classList.add('visible');
        btn.classList.add('active');
        // For verify panels: refresh visibility of empty state based on current input
        if (kind === 'verify') {
          updateVerifyPanelState(panel);
        }
      }
    });
  });

  // Verify-link click handler — build URL fresh from current state
  document.querySelectorAll('[data-verify-source]').forEach(link => {
    link.addEventListener('click', (ev) => {
      ev.preventDefault();
      const source = link.getAttribute('data-verify-source');
      const url = buildVerifyURL(source);
      // If no keywords yet, do not open — just show the empty state
      if (!hasVerifyContext()) {
        const panel = link.closest('.verify-panel');
        if (panel) updateVerifyPanelState(panel);
        return;
      }
      window.open(url, '_blank', 'noopener,noreferrer');
    });
  });

  // AI Sharpen button — call the Netlify Function with current answer
  document.querySelectorAll('[data-ai-go]').forEach(btn => {
    btn.addEventListener('click', () => {
      const inputId = btn.getAttribute('data-ai-go');
      runAiSharpen(inputId);
    });
  });

  // Navigation buttons
  document.querySelectorAll('[data-nav]').forEach(el => {
    el.addEventListener('click', () => {
      const target = parseInt(el.getAttribute('data-nav'));
      if (target >= 0 && target < GATES.length) navigateToGate(target);
    });
  });

  // Start button on intro
  const startBtn = document.getElementById('btn-start');
  if (startBtn) startBtn.addEventListener('click', () => navigateToGate(1));

  const resumeBtn = document.getElementById('btn-resume');
  if (resumeBtn) resumeBtn.addEventListener('click', () => {
    // Find first incomplete gate
    let target = 1;
    for (let i = 1; i < GATES.length - 1; i++) {
      if (!state.verdicts[GATES[i].id] || state.verdicts[GATES[i].id] !== 'go') {
        target = i;
        break;
      }
      target = i + 1;
    }
    navigateToGate(target);
  });

  // Print/Export
  const printBriefBtn = document.getElementById('btn-print-brief');
  if (printBriefBtn) printBriefBtn.addEventListener('click', () => window.print());

  const exportBtn = document.getElementById('btn-export-brief');
  if (exportBtn) exportBtn.addEventListener('click', exportJSON);

  // Text/textarea inputs
  document.querySelectorAll('[data-input]').forEach(el => {
    el.addEventListener('input', (e) => {
      const id = el.getAttribute('data-input');
      state.answers[id] = e.target.value;
      saveState();
    });
  });

  // Scale buttons
  document.querySelectorAll('[data-scale]').forEach(scaleEl => {
    const id = scaleEl.getAttribute('data-scale');
    scaleEl.querySelectorAll('.scale-btn').forEach(btn => {
      btn.addEventListener('click', () => {
        scaleEl.querySelectorAll('.scale-btn').forEach(b => b.classList.remove('selected'));
        btn.classList.add('selected');
        state.answers[id] = btn.getAttribute('data-value');
        saveState();
      });
    });
  });

  // Choice buttons
  document.querySelectorAll('[data-choice]').forEach(choiceEl => {
    const id = choiceEl.getAttribute('data-choice');
    choiceEl.querySelectorAll('.choice-btn').forEach(btn => {
      btn.addEventListener('click', () => {
        choiceEl.querySelectorAll('.choice-btn').forEach(b => b.classList.remove('selected'));
        btn.classList.add('selected');
        state.answers[id] = btn.getAttribute('data-value');
        saveState();
      });
    });
  });

  // Evaluate button
  const evaluateBtn = document.getElementById('btn-evaluate');
  if (evaluateBtn) {
    evaluateBtn.addEventListener('click', () => {
      const gateId = evaluateBtn.getAttribute('data-gate');
      const verdict = computeVerdict(gateId);
      if (verdict) {
        state.verdicts[gateId] = verdict.verdict;
        saveState();
        // Re-render to show verdict
        const idx = GATES.findIndex(g => g.id === gateId);
        renderGate(idx);
      }
    });
  }
}

function navigateToGate(idx) {
  if (idx < 0 || idx >= GATES.length) return;
  renderGate(idx);
}

// ============================================================
// EXPORT / RESET
// ============================================================

function exportJSON() {
  const data = {
    generatedAt: new Date().toISOString(),
    state: state,
    gates: GATES.filter(g => !g.isIntro && !g.isSummary).map(g => ({
      id: g.id,
      num: g.num,
      name: g.name,
      verdict: state.verdicts[g.id] || null
    }))
  };
  const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
  const url = URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = `mvo-brief-${new Date().toISOString().split('T')[0]}.json`;
  a.click();
  URL.revokeObjectURL(url);
}

// ============================================================
// INIT
// ============================================================

document.getElementById('btn-print').addEventListener('click', () => {
  // Navigate to summary gate before printing so the brief is what prints
  navigateToGate(GATES.length - 1);
  setTimeout(() => window.print(), 300);
});
document.getElementById('btn-export').addEventListener('click', exportJSON);
document.getElementById('btn-reset').addEventListener('click', resetState);

// ============================================================
// SETTINGS MODAL — API key management
// ============================================================
(function wireSettings() {
  const modal = document.getElementById('settings-modal');
  const openBtn = document.getElementById('btn-settings');
  const input = document.getElementById('settings-key-input');
  const status = document.getElementById('settings-status');
  const saveBtn = document.getElementById('settings-save');
  const clearBtn = document.getElementById('settings-clear');

  function openModal() {
    const existing = getApiKey();
    input.value = existing;
    if (existing && existing.startsWith('sk-ant-')) {
      status.textContent = `Key currently set (ends in ...${existing.slice(-6)})`;
      status.className = 'settings-status ok';
    } else if (existing) {
      status.textContent = 'Saved key does not look valid (must start with sk-ant-)';
      status.className = 'settings-status err';
    } else {
      status.textContent = 'No key saved yet';
      status.className = 'settings-status';
    }
    modal.style.display = 'flex';
    setTimeout(() => input.focus(), 50);
  }

  function closeModal() {
    modal.style.display = 'none';
  }

  openBtn.addEventListener('click', openModal);

  document.querySelectorAll('[data-settings-close]').forEach(el => {
    el.addEventListener('click', closeModal);
  });

  saveBtn.addEventListener('click', () => {
    const key = (input.value || '').trim();
    if (!key) {
      status.textContent = 'Please paste a key first';
      status.className = 'settings-status err';
      return;
    }
    if (!key.startsWith('sk-ant-')) {
      status.textContent = 'Key must start with sk-ant-';
      status.className = 'settings-status err';
      return;
    }
    setApiKey(key);
    status.textContent = 'Saved.';
    status.className = 'settings-status ok';
    setTimeout(closeModal, 600);
  });

  clearBtn.addEventListener('click', () => {
    if (!confirm('Remove the saved API key from this browser?')) return;
    clearApiKey();
    input.value = '';
    status.textContent = 'Key cleared';
    status.className = 'settings-status';
  });

  // Close modal on Escape key
  document.addEventListener('keydown', (e) => {
    if (e.key === 'Escape' && modal.style.display === 'flex') closeModal();
  });
})();

(async function init() {
  await loadState();
  renderProgressRail();
  renderGate(state.currentGate || 0);
})();

</script>
</body>
</html>
Complete Word text: RISER-MVO-Widget-Explainer-Script.docx.text.txt
word/document.xml
THE RISER MVO WIDGET
Talking-Head Explainer Script
From Pain Discovery to Compound Moat — All 16 Gates
Built on Hormozi · Brunson · Kennedy · Cialdini
Estimated runtime: 28–35 minutes
Recordable in 8 sections
Version 3 · April 2026
How to Use This Script
This script is built for a talking-head explainer video. Read it aloud as written. The rhythm is intentional — short sentences, hard breaks, direct address.
Three things to know before you record.
1.  Camera directions in red italic, indented.
[B-ROLL: show the widget on screen]  ·  [PAUSE: 2 seconds]  ·  [GESTURE: point to gate rail]
These are cues for editing or for live recording. Skip them when reading aloud.
2.  Doctrine pull-quotes appear in red bordered blocks.
"Doctrine quote example — read this slower, with weight."
Slow your delivery for these. They are the lines viewers will clip and share.
3.  Section runtimes appear at the top of each section.
If you want to record in chunks, every section ends with a clean break and a clean re-entry. The 8 sections of this video are all under 5 minutes individually.
Recording-friendly section map
Section 1 — Cold Open & Why the Widget Exists  (3 min)
Section 2 — The 16-Gate Architecture  (3 min)
Section 3 — Gate 00½ Pain Discovery  (4 min)
Section 4 — Gates 01–04½: Market & Offer  (5 min)
Section 5 — Gates 05–06½: Distribution, Copy, Persuasion  (4 min)
Section 6 — Gates 07–08: Deploy & Iterate  (3 min)
Section 7 — Gates 09–11: Pivot, Scale, Compound  (4 min)
Section 8 — Brief, Close, & Call to Action  (2 min)
Section 1 — Cold Open & Why the Widget Exists
Approx. 3 minutes
[OPEN: tight on camera, no graphics yet. Lean in slightly.]
Most ideas die for one reason.
Not because the operator was lazy.
Not because the market was wrong.
Because somebody spent ninety days building a thing that should have been killed in week one.
[PAUSE: 1 second. Hold camera.]
Or — the inverse. They had a real idea. A starving crowd was sitting right there. And they spent six months polishing copy when they should have shipped a janky version on a Tuesday and started learning.
Both failures look the same from the outside. Both feel productive while they happen. Both end the same way — with a founder asking why they have nothing to show for a year of their life.
"The widget I'm about to show you was built to do one thing. Save you ninety days on a bad idea — or compress ninety days on a good one."
[GRAPHIC IN: widget header — the words 'Idea or No Idea' on screen]
This is the RISER MVO Decision Engine. M-V-O stands for Minimum Viable Offer. The whole thing is a single HTML file. No backend. Nothing to install. You open it, you walk it, your answers save in your browser, and at the end you have a one-page brief that tells you exactly what to ship and exactly when to kill.
It's built on four operators.
Alex Hormozi — for offer construction, market scoring, and unit economics.
Russell Brunson — for the value ladder, the Dream 100, and the persuasion frameworks from Expert Secrets.
Dan Kennedy — for direct response, risk reversal, and the discipline around guarantees.
Robert Cialdini — for the seven principles of influence that decide whether your page converts or doesn't.
Sixteen gates. From "what does the market actually hurt over" all the way to "how do I compound this into a moat."
At every gate, you get one of three verdicts. GO — you can proceed, here's the next action. NO — you can't proceed, here's exactly why. REWORK — you're close, here's what to sharpen first.
[GRAPHIC IN: GO / NO / REWORK badges — green, deep red, gold]
This video walks every gate. End to end. No omissions. By the end you'll know what each gate checks for, what triggers a NO, and how the whole thing fits together.
Let's start with the architecture.
Section 2 — The 16-Gate Architecture
Approx. 3 minutes
[GRAPHIC: top-down view of the progress rail showing all 17 cells. Highlight the four phases as colored bands.]
The widget has a top rail. Each cell is a gate. You can click any gate at any time — there's no forced linear path. But the gates are organized into four phases, and each phase has a job.
Phase One — Detection
Gates zero-half through three. This is where you answer: is there actually a starving crowd here, and is the problem worth solving?
Gate 00½ — Pain Discovery. Import the voice of the customer.
Gate 01 — Hungry Avatar. Score the market on four dimensions.
Gate 02 — Idea or No Idea. Filter for competitive reality and proximity to demand.
Gate 03 — Profitable Problem. Confirm pain, frequency, and cost of inaction.
Phase Two — Construction
Gates four through six-and-a-half. This is where you build the offer, the stack, the channel, and the persuasion architecture.
Gate 04 — Grand Slam Offer. Score the Value Equation.
Gate 04½ — Offer Stack. Build bonuses, guarantee, scarcity, naming.
Gate 05 — Core Four Distribution. Pick one channel.
Gate 05½ — Dream 100. Name the hundred people who own your audience.
Gate 06 — Hook, Headline, Body. Write the copy.
Gate 06½ — Persuasion Architecture. The Big Domino, false beliefs, and the Cialdini audit.
Phase Three — Deployment
Gates seven and eight. This is where you ship and learn.
Gate 07 — Deploy. Lock the date, the cohort size, the price, and the kill rule.
Gate 08 — Iterate. Use real customer data to adjust one lever at a time.
Phase Four — Compound
Gates nine through eleven. This is where you decide what to scale, when to pivot, and how to turn one offer into a moat.
Gate 09 — Pivot or Hold. Diagnose hook, audience, or offer failure.
Gate 10 — Scale. Pick price, retention, or volume as your scale lever.
Gate 11 — Repeat. Build the value ladder, continuity, and affiliate motion.
Plus an intro and a one-page brief at the end.
"Most operators try to do all sixteen of these in their head, in parallel, simultaneously. That's why most ideas die. The widget does them sequentially. Each gate either passes you or stops you. There's no hand-waving past a fundamental flaw."
[B-ROLL: zoom in on the rail, click through each color-coded cell briefly to show the GO / NO / REWORK feedback]
Now let's walk every gate. Starting where the widget actually starts — Pain Discovery.
Section 3 — Gate 00½: Pain Discovery
Approx. 4 minutes
[GRAPHIC: Gate 00½ on screen — show the 'PainOnSocial / VOC import' rubric]
Before we get to the avatar gate, there's a step most operators skip. It's optional. But if you skip it, every downstream gate runs on hypothesis instead of evidence.
"Operators who guess at pain build for themselves. Operators who import pain build for the market."
Gate 00½ is called Pain Discovery. This is where you import voice-of-customer research before you start building the offer.
If you've run a PainOnSocial scan — that's the Reddit-mining tool that scores customer complaints — paste the cards here. If you've done customer interviews, support-ticket analysis, or sales-call transcripts, paste those too. Up to five pain cards.
[B-ROLL: show the widget — a pain card being added, fields filling in]
Each card captures seven things.
The pain title — one sentence in plain language.
A score from zero to one hundred — based on how intense and how frequent the pain is.
Frequency — daily, weekly, monthly, quarterly, or one-time.
The source community or URL — the subreddit, the Skool group, the LinkedIn search.
An audience profile — who is suffering, in your words.
Up to five verbatim customer quotes. Word for word, the way they wrote it.
One to three AI solution seeds — concept-stage solutions, with a suggested monetization model.
Once you have two or more cards, the widget asks you to pick one as the lead pain. The lead seeds Gate 01 and Gate 03 downstream. The other cards become supporting evidence.
If multiple pains orbit the same root frustration, you can group them into a cluster. The cluster becomes your offer surface — meaning the offer doesn't have to solve a single point pain, it can solve a cluster of related pains. That's how bigger offers get built.
[GRAPHIC: highlight the 'Lead pain' selector and the 'Cluster' grouping]
Then there's the Voice-of-Customer Vault.
Every quote you paste into any pain card automatically aggregates into a vault accessible from seven downstream textareas. The avatar pain field. The problem statement. The dream outcome. The hook. The headline. The body. The reciprocity gift.
Each of those fields gets a small button — "Pull from VOC vault." Click it, modal opens with all your quotes, click any quote, it inserts straight into your answer with attribution.
"This is the single highest-leverage feature in the whole widget. Copy that uses real customer language outperforms invented copy by thirty to fifty percent. The vault makes that automatic."
Click "Apply lead pain to downstream gates." The widget pre-fills your avatar fields, sets the pain intensity score on a one-to-ten scale based on the PainOnSocial score, maps the frequency, and seeds the offer mechanism field with your solution seeds.
If you don't have research yet — there's a skip button right at the top. Click skip, and you proceed straight to Gate 01. The widget still works. It just runs on weaker fuel. You can come back to Pain Discovery any time once you have data.
[GRAPHIC: show the 'Skip · I have no research yet' button]
Verdict logic on this gate. GO requires a lead card with score seventy or higher, at least three substantive quotes total, audience profile filled, and a card title. If you have a lead card scoring eighty-five or higher with five-plus quotes, the widget rewards that on Gate 01 — the market score gets a four-point evidence boost.
Bottom line: this gate is optional, but it's the multiplier. Skip it and the widget is sharp. Use it and the widget is sharp and grounded in evidence.
Section 4 — Gates 01 through 04½: Market & Offer
Approx. 5 minutes
Gate 01 — Hungry Avatar
"The most important thing you sell is not your product. It's the market you sell it into. A starving crowd is the difference between selling steak and selling sand."
Gate 01 asks two text questions and four scale questions.
First the text. Who exactly is the avatar? Specific. Not "small business owners" — "solo CPAs in their first twenty-four months of practice, billing under seven thousand a month, ages thirty-two to forty-five, post-Big-Four."
And what is the specific pain — in their words, not yours? Quote them. If you cannot quote them, you have not talked to them yet.
If you used Pain Discovery, those fields are already populated from your lead card. You just review and refine.
Then four scales, one to ten. Purchasing power — can they actually pay? Market trajectory — growing, flat, or shrinking? Easy to reach — can you find them? And pain intensity — is this a top-three problem for them right now?
Each scale also has three help panels you can click open. Examples — good versus vague, with side-by-side comparisons. Sharpen this — three pointed questions that test whether your answer is real or hypothesis. And Verify externally — deep-links to Reddit, Google, YouTube, Quora, and others, pre-filled with keywords from your avatar text.
And — only on this gate — there's a Sharpen with AI button. Click it, it sends your answer to Claude Sonnet 4.6 for a structured critique. Specificity score, weakest element, and a sharper rewrite you can insert with one click.
[B-ROLL: click 'Sharpen with AI' on screen, show the score and rewrite appearing]
The verdict adds your four scale scores out of forty. Above thirty-two — GO, hungry crowd confirmed. Twenty-four to thirty-one — REWORK, workable but at least one dimension is weak, and the verdict tells you exactly which one. Below twenty-four — NO, wrong market. The widget will not let you proceed forward on a fundamentally wrong avatar choice.
Gate 02 — Idea or No Idea
"If no one is doing it, that's usually a sign no one wants it. Competition validates demand. Absence of competition is rarely a moat — it's usually a graveyard."
Gate 02 is the filter.
It asks three questions. State the offer in one sentence using the format: "I help [avatar] get [outcome] in [timeframe] without [common objection]." If you can't fit it in one sentence, the offer is unclear.
What's the competitive reality? Crowded with successful operators — best signal. Some competitors, mostly mediocre — strong signal. Almost no competition — caution. Or "I will be first" — almost always wrong.
And the hundred-dollar today test. Would ten of these people pay you a hundred dollars right now for a janky version one? Can you name the ten people specifically? If yes — GO signal. If you'd have to find them — REWORK. If no — NO.
This gate kills more ideas than any other. It catches operators who fell in love with their own concept but have zero proximity to actual buyers.
Gate 03 — Profitable Problem
"Every problem is not a profitable problem. The best businesses solve problems the customer pays you to keep solving."
Gate 03 confirms the problem itself. State it precisely. How often does it recur? Daily, monthly, quarterly, or once?
Recurring pain equals recurring revenue. Daily or weekly is best — that supports a continuity offer. Once-in-a-lifetime project pain is the weakest, because every customer is a re-acquisition.
What's the cost of NOT solving it? High — losing money, customers, status. Moderate — friction and frustration. Low — minor inconvenience.
"Price is set by the cost of the problem, not the cost of the solution."
Low cost of inaction means hard to monetize. The verdict will mark that as a NO and tell you to either reframe to a higher-cost angle or pick a different problem.
And finally — what do they currently do to solve it? Or fail to? Because the status quo IS the competition.
Gate 04 — Grand Slam Offer
"Value equals dream outcome times perceived likelihood, divided by time delay times effort and sacrifice. The numerator is what they want. The denominator is what they pay in pain. Move both."
Gate 04 is Hormozi's Value Equation. Seven inputs.
Dream outcome — what's the explicit, measurable transformation? And rate how compelling it is, one to ten.
Perceived likelihood — what's your proof this works? Case studies, testimonials, your own results. Then rate how believable it is through skeptical buyer eyes.
Time delay — how fast does the customer feel results? Within twenty-four hours, within a week, within thirty days, or longer?
Effort and sacrifice — done-for-you, done-with-you, DIY with templates, or self-paced with no human contact?
And the seventh field — added in version two — Named Mechanism.
"A named mechanism is the difference between a ninety-seven dollar product and a four-thousand-nine-hundred-ninety-seven dollar program containing the same content."
Give your method a name. The Retainer Method. The Pulse Protocol. The Four-Lane Framework. Then in one sentence explain why it works when generic approaches fail. This is required. Without a named mechanism, the verdict will block GO.
The widget computes a Value Score out of one hundred using Hormozi's actual formula. Above thirty-five — GO, Grand Slam Offer. Twenty to thirty-four — REWORK, sharpenable, with the verdict naming your weakest lever. Below twenty — NO, the offer will not convert at scale even with great copy.
Gate 04½ — Offer Stack
"The naked core offer is never the offer. The offer is the core PLUS the stack: bonuses that solve the next three problems, a guarantee that flips the risk to you, scarcity that creates a real reason to act now, and a name that makes it sound like a thing."
Gate 04½ is where you actually build the stack. Not score it — build it.
Seven fields. The offer name — "The Ninety-Day Retainer Sprint" beats "my coaching program" by thirty percent on conversion.
Three to five bonuses, each named, each with an outcome, each with a price-anchor. Bonus one: The First-Client Script Library — seven sales scripts that closed real deals — four-hundred-ninety-seven dollar value.
The guarantee type. Hormozi's ladder runs from implied at the bottom to anti-guarantee at the top. The widget pushes you toward conditional — "do X, Y, Z and if no result, double your money back" — because that forces customer accountability and produces dramatic risk reversal.
Then the actual guarantee wording — exact words you'll use on the page.
Scarcity mechanism. Cohort cap. Founding-member price ladder. Bonus expiration. Launch window. Or — and this is a hard NO from the verdict — fake countdown timers and inflated urgency. Cialdini is explicit on this. Scarcity works only when it is structurally true. Fake scarcity gets discovered, and one discovery burns the audience permanently.
And finally the stack value versus the actual price. Cialdini's contrast principle. A four-hundred-ninety-seven dollar price next to no anchor looks expensive. A four-hundred-ninety-seven dollar price next to a five-thousand-nine-hundred-ninety-one dollar stack value looks like a steal.
The verdict checks the ratio. Below three-to-one means the contrast doesn't register — REWORK. Five-to-ten-to-one is the conversion sweet spot.
That's the construction phase. Avatar, Idea, Problem, Offer, Stack. Five gates, all about answering: is there a real market and have you packaged a real solution. Now we move to distribution.
Section 5 — Gates 05 through 06½: Distribution, Copy & Persuasion
Approx. 4 minutes
Gate 05 — Core Four Distribution
"There are four ways to get a stranger to know about you. Warm outreach, cold outreach, warm content, paid ads. That's it. The mistake is picking three at the start. Pick ONE."
Gate 05 forces a single channel choice. Just one.
Warm outreach — best for your first ten customers. Free. Low volume. Cold outreach — best when the avatar is identifiable and reachable. Cheap, skill-intensive. Warm content — compounds over time, slow start. Paid ads — fastest scaling, but requires unit economics first.
Then the volume math. If you need ten customers in ninety days at one percent conversion, you need a thousand conversations. That's twelve a day. Do the math now, before launch.
And — do you know your unit economics? CAC, LTV, payback period. If you pick paid ads without knowing those, the verdict gives you a hard NO. "Paid ads without unit economics equals fire."
Gate 05½ — Dream 100
"You don't need to find a million strangers. You need to find the hundred people who already gathered them."
Gate 05½ is from Brunson's Traffic Secrets. The Dream 100.
List twenty-five specific people, podcasts, newsletters, or groups your avatar already follows. Real handles. Real URLs. Not "fitness influencers" — but "@HybridAthlete on Twitter, two-point-one million followers."
Then pick a strategy. Work your way in by providing value first. Buy your way in via sponsorship and ads. Or partner via joint ventures. Working two strategies on the same person at the same time burns the bridge — pick one.
Write the first-touch script. No pitch. No ask. Gift first. Quote them, share a result, send a resource. Cialdini's reciprocity rule — the gift comes first or the ask is dead.
And declare your weekly outreach volume. Below five contacts a week, the Dream 100 doesn't reach the relationship density needed to produce invitations. The verdict pushes you toward ten to twenty a week.
Gate 06 — Hook, Headline, Body
"You have three seconds. The hook stops the scroll. The headline promises the dream. The body proves you can deliver."
Gate 06 is the copy gate. Four fields.
The hook — first three seconds, what stops the scroll. Callout question. Pattern interrupt. Specific stat.
The headline — the promise. Format: outcome in timeframe without objection.
The body — five-line skeleton. Problem, what's working now, named mechanism, proof, specific CTA.
And the CTA specificity. "Get the five-page Retainer Pricing Calculator" beats "learn more" by fifty percent on conversion.
All four of those textareas have the VOC vault button. Pull from your customer quotes. Use their language. Not yours.
Gate 06½ — Persuasion Architecture
"Copy is downstream of persuasion. Most operators write copy and hope persuasion happens. The reverse is correct."
Gate 06½ is the largest single gate. Eight inputs. This is where most operators discover their copy was beautiful and their persuasion was empty.
First — the Big Domino. Brunson's question. If you can make your prospect believe ONE thing is true, all other objections become irrelevant. State that one belief.
Then the False Belief Audit. Three false beliefs blocking the sale. One about the vehicle — "retainer pricing only works for big firms." One about themselves — "I'm too new to charge that much." And one about external factors — "my market is too price-sensitive."
Then the reciprocity gift. The actual lead magnet. Specific, useful, immediate. Not "a free guide" — "The Retainer Pricing Calculator. Three-tier model with anchor logic, plus five sample proposals that closed real two-thousand to five-thousand a month deals. PDF plus Notion template. Seven minutes to use."
Then the Cialdini five-lever audit. Reciprocity strength. Social proof density. Authority. Unity language — does your copy use "we" and "our kind"? Consistency mechanism — what micro-yes do you secure before the macro-yes?
The verdict computes a Cialdini Score out of ten. Below six — REWORK with the weakest two levers named. Strong launches activate five or more visibly on the offer page.
Bottom line: copy without persuasion architecture is decoration. The architecture decides the conversion rate.
Section 6 — Gates 07 & 08: Deploy & Iterate
Approx. 3 minutes
Gate 07 — Deploy
"Done beats perfect every single time. The launch you do not run cannot teach you anything. The launch that embarrasses you in twelve months is the right launch."
Gate 07 is the ship gate. Five locks.
The beta launch date — specific calendar date, thirty days out or less. Pick a Friday. Tell another operator. Make it expensive to slip.
The beta cohort size. Five to ten founding members is best for first launch. Ten over-served founding members produce ten times the testimonial density of fifty mediocre members.
The beta price. The widget warns you about the Muddled Middle — five hundred to nine hundred dollars. Too expensive for impulse, too cheap for premium. Drop to four-ninety-seven or raise to nine-ninety-seven and above.
The kill rule. What happens if you don't hit the number? Less than five paid in fourteen days equals pivot offer angle. That's the operating default. The widget will REWORK you if you say "I'll keep going regardless." That's not strategy — that's sunk-cost grinding.
And the four minimum tools. A way to capture leads. A way to take payment. A way to deliver. A way to measure. Anything less than three of those, the verdict gives a hard NO.
Gate 08 — Iterate
"Volume forgives mistakes. The operator who has a hundred sales conversations learns more than the operator who has five perfect ones."
Gate 08 is iteration. Six fields.
How many at-bats? Iterating on fewer than ten conversations is iterating on noise. Twenty to thirty is the minimum threshold for signal.
What's the dominant pattern from real customer data? Not what you think — what they're actually telling you.
Which Value Equation lever do you adjust? One per cycle. Multiple changes at once equals rebuild, not iterate.
Then two diagnostics from Eugene Schwartz. Awareness stage — where is the market relative to the solution? Unaware, problem-aware, solution-aware, product-aware, or most-aware? Each stage demands different copy. A Stage 1 audience needs the problem named. A Stage 5 audience needs a new mechanism.
Market sophistication — how worn-out are the claims in this niche? Stage 1, you can make direct claims. Stage 4, mechanisms are saturated and you need a brand-new one. Stage 5, every mechanism has been heard and you have to lead with identity and story.
Most copy fails because it's written for the wrong stage. The widget catches that and tells you to combine your lever change with a mechanism rename if your market sophistication is at three or higher.
And finally — refund interview discipline.
"The refund call is the single most valuable sales call you will ever take."
Five questions. What did you hope this would do for you? What part caused you to step back? Was the issue hook, audience, offer, onboarding, or delivery? What would have changed your mind? And — would you refer someone else?
If you process refunds silently, the widget marks you REWORK. Refunds are the highest-signal data in the business. Do not throw them away.
Section 7 — Gates 09 through 11: Pivot, Scale, Compound
Approx. 4 minutes
Gate 09 — Pivot or Hold
"Three things can be wrong: the offer, the audience, or the hook. They look identical from the outside. The diagnostic is in the data."
Gate 09 is the pivot diagnostic. Three funnel checks.
Click-through rate on your hooks. Below baseline — that's a hook problem. Rewrite ten new hooks. Test each at minimum a hundred impressions.
Opt-in rate of clickers. Below baseline — that's an audience problem. The wrong people are clicking. Tighten your messaging to repel non-buyers.
Refund and retention rate. Refunds above ten percent or negative NPS — that's an offer problem. Do NOT scale a leaky bucket. Volume just produces refunds and reputation damage.
This gate prevents the most common founder failure — "more leads will fix it." If your offer's broken, more leads compound the breakage.
Gate 10 — Scale
"You scale what works. You don't scale what might work. Scaling before the signal is gambling. Scaling after is math."
Gate 10. Three checks.
Do you have the scale signal? Ten-plus customers from one channel, known unit economics, six-plus months of retention data. Anything less and you're gambling, not scaling.
Which scale lever? Three options — and most operators get this wrong.
Raise price first. Highest leverage. A ten percent price increase produces roughly fifty percent profit increase.
Increase retention. Second-highest. Reducing churn by twenty percent doubles LTV.
Increase volume. Third lever. Most expensive. Use only when price and retention are maxed.
Most operators reach for volume first. The widget will REWORK that and tell you to test a price increase first.
And — name the bottleneck. Theory of Constraints — there's one bottleneck at a time. Lead gen, sales, delivery, retention. Name it. Fix it. Move to the next.
Gate 11 — Repeat & Compound
"One offer to one audience is a business. Two offers to the same audience is a customer base. Three offers to the same audience is a moat."
Gate 11 is the largest gate at the back. Ten fields.
First — what's the next problem your existing customers will pay you to solve? Ask twenty customers "what's the next thing you would buy from me?" Build that.
Then the compound move. New offer, same audience, same channel — best play. Same offer, adjacent audience — second-best. Same offer, same audience, new channel — third option. New business entirely — almost always wrong.
Have you maxed out the current offer? If you say "I'm bored," the verdict gives you a hard NO. Boredom is not strategy. Boredom signals you've automated the wrong things or stopped talking to customers.
Then the Value Ladder. Five named rungs.
Rung one — the Bait. Free lead magnet. Named, valuable, immediate.
Rung two — the Tripwire. Seven to ninety-seven dollar entry offer. Converts a lead into a buyer.
Rung three — the Core Offer. Two-ninety-seven to one-thousand-nine-hundred-ninety-seven dollar Grand Slam.
Rung four — Continuity. Recurring monthly offer. Skool community, software subscription, monthly coaching.
Rung five — High-Ticket. Five-thousand to fifty-thousand DFY tier. Eighty percent of operator profit lives here.
If you have fewer than three rungs, the widget marks you REWORK. "A single offer is a product. A ladder is a business."
Continuity health. What percentage of customers are on a recurring offer? Below twenty percent means you haven't built continuity yet. Above sixty percent means you have a real moat.
And affiliate motion. Have you turned customers into affiliates? Ten customer-affiliates each bringing five clients equals fifty new customers at zero acquisition cost.
This is where the widget moves you from operator to compound machine.
Section 8 — The Brief, the Close, & Call to Action
Approx. 2 minutes
[GRAPHIC: show the printable brief, pages flipping or scrolling]
After all sixteen gates, you land on the Brief.
One page. Print it, tape it to your wall, send it to your accountability partner. Every decision you made, every verdict you earned, every piece of customer evidence you imported — all in one document.
It includes the Pain Discovery section if you used it. Top three customer quotes. Avatar. Idea. Problem. Offer with the Value Equation. The Grand Slam Stack. Distribution, Dream 100, Copy. The Persuasion Architecture audit. The Launch plan. And — if you got that far — the iterate, scale, and compound sections including your full value ladder.
And every gate has a verdict pill at the top — green for GO, deep red for NO, gold for REWORK. So you can see at a glance where the holes still are.
You can export the whole thing as JSON. You can print it. You can share it.
"You don't have a thinking problem. You have a doing problem. The next document is not the answer. The next paying customer is."
[CAMERA: lean in, direct address. Hold final beats.]
Here's the truth about the widget.
It will not tell you what to build. It will tell you whether what you're already thinking about is going to survive contact with the market — and if not, exactly which gate is going to kill it.
Sixteen gates. Roughly seventy-three input fields. Three verdicts. Built on Hormozi for offer construction. Brunson for the value ladder and Dream 100. Kennedy for direct response and risk reversal. Cialdini for the seven principles of influence. Schwartz for awareness and sophistication staging. And the operator's discipline that ties it all together — RISER Captain's Logic.
If you walk all sixteen gates and end up at GO, you have something most operators never have. A decision document built on evidence, not enthusiasm.
And if you end up at NO before Gate Seven — that's the win, too. Because that's the ninety days you didn't waste.
[PAUSE: 2 seconds. Then close.]
Open the widget. Pick an idea. Walk the gates. See where you land.
That's the work.
[END]
Appendix — Quick Reference
All 16 Gates at a Glance
Gate
Name
What it Does
00
Start
Intro
00½
Pain Discovery
Import VOC research (PainOnSocial, interviews)
01
Hungry Avatar
Score the market on 4 dimensions
02
Idea / No Idea
Filter for competitive reality + proximity to demand
03
Profitable Problem
Confirm pain + frequency + cost of inaction
04
Grand Slam Offer
Score the Value Equation + named mechanism
04½
Offer Stack
Build bonuses, guarantee, scarcity, naming
05
Core Four
Pick one distribution channel
05½
Dream 100
Name 25 people who own your audience
06
Hook / Body
Write hook, headline, body, CTA
06½
Persuasion
Big Domino + false beliefs + Cialdini audit
07
Deploy
Lock date, cohort, price, kill rule, tools
08
Iterate
Awareness stage + lever + refund interviews
09
Pivot or Hold
Diagnose hook, audience, or offer failure
10
Scale
Pick price, retention, or volume as lever
11
Repeat
Build value ladder + continuity + affiliate motion
12
Brief
One-page printable summary
 
The Three Verdicts
GO  —  proceed; here's the next concrete action.
NO  —  do not proceed; here's the specific reason your idea fails this gate.
REWORK  —  close, but here's what to sharpen first.
 
Source Lineage
Alex Hormozi  —  $100M Offers, $100M Leads, Acquisition.com operating system
Russell Brunson  —  DotCom Secrets, Expert Secrets, Traffic Secrets
Dan Kennedy  —  No B.S. Direct Marketing, risk reversal, herd-building
Robert Cialdini  —  Influence (the 7 principles), Pre-Suasion
Eugene Schwartz  —  Breakthrough Advertising — awareness + sophistication staging
 
RISER Captain's Logic — the operating discipline that synthesizes all of the above into one decision engine.
Original asset: RISER-Operators-Flow.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RISER Operator's Flow · Operating Doctrine</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=Inter+Tight:[email protected]&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
  --ink: #0a0a0a; --paper: #f7f4ee; --paper-warm: #f0eadf; --paper-deep: #e9e2d2;
  --rule: #1a1a1a; --red: #c9302a; --red-deep: #8b1f1c; --red-tint: #fbe8e6;
  --gold: #b8893a; --gold-tint: #f5ead0; --teal: #2c5f5a;
  --muted: #5a564f;
  --serif: 'Fraunces', Georgia, serif;
  --sans: 'Inter Tight', -apple-system, sans-serif;
  --mono: 'JetBrains Mono', Menlo, monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
  font-family: var(--sans);
  background: var(--paper);
  color: var(--ink);
  line-height: 1.6;
  font-size: 15px;
  max-width: 880px;
  margin: 0 auto;
  padding: 48px 36px 80px;
}
h1 {
  font-family: var(--serif);
  font-weight: 600;
  font-size: clamp(36px, 5vw, 52px);
  line-height: 1.05;
  letter-spacing: -0.025em;
  margin-bottom: 14px;
  border-bottom: 3px double var(--rule);
  padding-bottom: 18px;
}
h2 {
  font-family: var(--serif);
  font-weight: 600;
  font-size: 30px;
  letter-spacing: -0.02em;
  margin-top: 50px;
  margin-bottom: 14px;
  padding-top: 16px;
  border-top: 2px solid var(--rule);
  padding-bottom: 4px;
  line-height: 1.15;
}
h2:first-of-type { border-top: none; padding-top: 0; margin-top: 32px; }
h3 {
  font-family: var(--mono);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--red-deep);
  margin-top: 28px;
  margin-bottom: 10px;
  padding-bottom: 4px;
  border-bottom: 1px solid var(--rule);
}
p {
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.6;
  margin-bottom: 14px;
  color: var(--ink);
}
strong { font-weight: 600; color: var(--ink); }
em { font-style: italic; }
code {
  font-family: var(--mono);
  font-size: 13px;
  background: var(--paper-warm);
  padding: 1px 6px;
  border-radius: 2px;
  color: var(--red-deep);
}
hr {
  border: none;
  height: 1px;
  background: var(--rule);
  opacity: 0.35;
  margin: 36px 0;
}
ul {
  margin: 8px 0 16px 0;
  padding-left: 0;
  list-style: none;
}
li {
  font-family: var(--serif);
  font-size: 15.5px;
  line-height: 1.55;
  margin-bottom: 8px;
  padding-left: 22px;
  position: relative;
  color: var(--ink);
}
li::before {
  content: '→';
  position: absolute;
  left: 0;
  top: 1px;
  color: var(--gold);
  font-weight: 700;
  font-family: var(--sans);
}
table {
  width: 100%;
  border-collapse: collapse;
  margin: 16px 0 24px 0;
  font-family: var(--sans);
  font-size: 14px;
  border: 1.5px solid var(--rule);
}
thead {
  background: var(--ink);
  color: var(--paper);
}
th {
  padding: 10px 14px;
  text-align: left;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-weight: 600;
}
td {
  padding: 9px 14px;
  border-top: 1px solid var(--rule);
  vertical-align: top;
  line-height: 1.5;
}
tr:nth-child(even) td { background: var(--paper-warm); }

/* Tighten the lead-paragraph blocks */
h1 + h2 { margin-top: 12px; border-top: none; }

/* Print styles */
@media print {
  body { background: #fff; padding: 0; max-width: 100%; font-size: 10.5pt; }
  h1 { font-size: 22pt; page-break-after: avoid; }
  h2 { font-size: 16pt; page-break-after: avoid; page-break-before: auto; margin-top: 22pt; }
  h3 { font-size: 11pt; page-break-after: avoid; margin-top: 14pt; }
  p, li { font-size: 10.5pt; }
  hr { page-break-after: always; border: none; height: 0; margin: 0; }
  table { page-break-inside: avoid; font-size: 9.5pt; }
  td, th { padding: 5px 8px; }
  code { background: #f0f0f0; }
  @page { margin: 0.6in; size: letter; }
}
</style>
</head>
<body>
<h1>RISER Operator's Flow</h1>
<h2>A structural skeleton for building, marketing, and scaling a high-ticket professional services business — phase by phase, step by step, with the actual work named honestly.</h2>
<hr>
<p><strong>Version 1 · April 2026 · Captain's Logic Operating Doctrine</strong></p>
<p>This document is the spine. It tells you what stages exist, what order they go in, what each one produces, what could go wrong, and where the existing RISER widgets fit. Use it as a checklist on any given Tuesday — "I'm at Phase 2, Step 3, here is the next concrete deliverable" — not as a vision document to read once and forget.</p>
<p>The framework covers five phases, eighteen steps, and one continuous feedback loop. Phases roughly correspond to weeks 1–4 (Phase 1), 5–8 (Phase 2), 9–12 (Phase 3), and 13+ (Phases 4 and 5, which are continuous from launch onward). A solo operator can complete Phase 1 in seven days if they are disciplined; most take longer because Phase 1 is where the real thinking happens and skipping it makes everything downstream harder.</p>
<p>Three honest framings before you start:</p>
<p><strong>This is not a get-rich-quick plan.</strong> It is a working operator's plan. The fastest result you will see from doing this correctly is a real client conversation in week three. The first paying client typically lands in week six to ten. Operators who expect faster usually skipped Phase 1.</p>
<p><strong>Most "AI agents" mentioned in marketing-stack content are aspirational.</strong> The agent layer in 2026 is mostly real for narrow, well-bounded jobs: drafting first replies a human approves, pulling structured data from PDFs, summarizing call transcripts, routing leads to the right sequence. It is mostly hype for unbounded creative or strategic work. Throughout this document, tools are graded <strong>Real</strong>, <strong>Useful With Caveats</strong>, or <strong>Mostly Theater</strong>. Use the Real ones, treat the second category with measurement, skip the third.</p>
<p><strong>The risks that will actually bite an operator are not the ones marketing content discusses.</strong> Reddit API access can change overnight (GummySearch shut down in November 2025 when Reddit denied API access). LinkedIn's automation crackdowns kill outreach tools regularly. Email deliverability collapses under cold-volume sends. State bar associations and professional licensing boards have rules about AI-personalized outreach that can endanger your license if violated. These risks are flagged inside each step where they apply.</p>
<hr>
<h2>Phase 1 — Foundation</h2>
<h3>What this phase produces</h3>
<p>A validated business hypothesis you can defend with evidence, an offer that solves a pain people actually have, and a minimum viable version you can sell next week. Not a finished product. Not a polished brand. A defensible <em>bet</em> with a known kill criterion.</p>
<h3>Why it matters</h3>
<p>Operators who skip this phase end up in Phase 3 (traffic generation) trying to drive volume to a thing nobody clearly wants. They compensate with bigger ad spend, more outreach, more content. None of it works because the offer is wrong. Phase 1 is unglamorous and slow. It is also the highest-leverage week of the entire build.</p>
<hr>
<h3>Step 1.1 — Idea Capture</h3>
<p><strong>Produces:</strong> A one-paragraph statement of the business or service idea, who you think it serves, and what specific problem you think it solves.</p>
<p><strong>Input:</strong> Your existing skills, prior work, professional credentials, and the rough hypothesis you're entering with.</p>
<p><strong>How to do it:</strong> Write the paragraph by hand on paper. Two hundred words. Include the buyer (one sentence), the problem (one sentence), the solution (one sentence), the price tier (one sentence), and what makes you specifically the right person to deliver it (one sentence). The constraint forces clarity.</p>
<p><strong>Done-when criteria:</strong> A literate friend can read the paragraph once and explain back to you what your business does, who it's for, and why someone would pay you. If they can't, rewrite.</p>
<p><strong>Common failure modes:</strong> Writing in jargon. Listing features instead of outcomes. Defining the buyer too broadly ("small business owners" instead of "construction defect attorneys at mid-sized firms in Arizona"). Hiding behind credentials instead of describing what you actually do for clients.</p>
<p><strong>AI/tool layer:</strong> None needed at this step. <strong>Mostly Theater</strong> if you're using AI to "validate" the idea here — the model will tell you almost any idea sounds promising. Save the validation work for Step 1.3.</p>
<p><strong>Iteration trigger:</strong> Phase 5 customer feedback that contradicts your stated buyer or problem. Rewrite this paragraph quarterly.</p>
<hr>
<h3>Step 1.2 — Pain Discovery</h3>
<p><strong>Produces:</strong> A document with three to five real pain points your buyer experiences, written in their own language, with evidence sources. Not pain you assume they have. Pain they say out loud.</p>
<p><strong>Input:</strong> The Step 1.1 paragraph. Your hypothesis about who the buyer is.</p>
<p><strong>How to do it:</strong> Three parallel research tracks, run for one week:</p>
<p>1. <strong>Direct conversations.</strong> Five to ten phone or video calls with people in your target buyer category. Not pitches. Listening tours. Questions: What's the most frustrating part of [problem area]? When did this last cause a real problem? What did you try? What worked? What didn't?</p>
<p>2. <strong>Public language mining.</strong> Read what your buyers post and ask in places they gather: LinkedIn posts and comments, association forums, niche Slack groups, industry-specific subreddits if any exist, Quora answers in their domain. Copy verbatim phrases into a document.</p>
<p>3. <strong>Tool-assisted scanning.</strong> Use the RISER Pain Discovery Tool Catalog — specifically the Reddit pain mining tools, audience intelligence tools (SparkToro), and VOC synthesis tools — to surface language patterns at scale.</p>
<p><strong>Sort what you find into two buckets — burning vs chronic.</strong> This distinction is the most useful prioritization tool in pain discovery. <strong>Burning pain</strong> is active crisis: a lawsuit was filed last week, a deposition is in 14 days, a client just sued, a deadline is tomorrow, a regulator just sent a notice. Burning pain drives buying <em>this week</em>. <strong>Chronic pain</strong> is the dull background ache: communication is messy, vendor management is annoying, paperwork takes too long. Chronic pain is real but rarely triggers a buying decision on its own — it needs a triggering event to become burning.</p>
<p>For high-ticket professional services, your offer must address burning pain. Operators who build offers for chronic pain spend years marketing to people who agree there's a problem but never buy. Tag every pain point in your discovery doc as B (burning) or C (chronic). If your top three pains are all C, your offer or your avatar is wrong.</p>
<p><strong>Done-when criteria:</strong> You have at least 20 verbatim quotes from real buyers describing pain in their own words, organized into 3–5 themes, each tagged burning or chronic. At least two of your top themes are burning. You can show a friend the quotes (with sources) and they can independently identify the themes you found and the burning/chronic tag.</p>
<p><strong>Common failure modes:</strong> Using your own words instead of the buyer's. Treating one Reddit thread as evidence. Skipping the direct conversations because they're hard to schedule (this is the single biggest stall point). Picking only pain points that flatter your existing solution.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Otter.ai or Fathom for transcribing buyer conversations. ChatGPT/Claude for synthesizing themes across transcripts. SparkToro for finding where buyers gather.</li>
<li><strong>Useful With Caveats:</strong> PainOnSocial, PainPointy for surfacing language patterns. They produce useful raw material but the categorization needs human review — the AI is wrong about pain intensity ranking maybe one third of the time.</li>
<li><strong>Mostly Theater:</strong> Any tool claiming to "automatically generate buyer personas" without you talking to a single buyer. The output looks plausible. It will not survive contact with reality.</li>
</ul>
<p><strong>Iteration trigger:</strong> Quarterly. Buyer pain shifts as their context shifts (regulatory changes, economic conditions, technology shifts). The doc you wrote in Q1 needs revision by Q3.</p>
<p><strong>Existing RISER artifact:</strong> The <strong>MVO Decision Engine widget</strong> (Gate 00½ Pain Discovery, Gate 01 Hungry Avatar). The <strong>Pain Discovery Tool Catalog</strong> lists the 41 tools that fit this work and their honest tradeoffs.</p>
<hr>
<h3>Step 1.3 — Offer Hypothesis</h3>
<p><strong>Produces:</strong> A specific named offer — what you sell, what it costs, what the buyer gets, what they walk away from the call with — that maps directly to the pain you found.</p>
<p><strong>Input:</strong> Step 1.2 pain document. Your skills inventory.</p>
<p><strong>How to do it:</strong> Write the offer in one page, using Hormozi's value-equation structure. Name the dream outcome (in the buyer's words). Name the perceived likelihood (your proof — credentials, prior work, sample deliverable). Name the time delay (how long until they get the result). Name the effort/sacrifice (what they have to do versus what you do). The offer wins or loses on whether (Dream × Likelihood) ÷ (Time × Effort) is high.</p>
<p>Decide on a named mechanism. Not "I do forensic engineering" — "The 14-Day VRF Failure Forensic Audit." Specific deliverable, specific timeframe, specific outcome.</p>
<p>Decide on a kill criterion before launch. <em>"If I cannot get one paying engagement at this price within 60 days of starting active outreach, I will reduce price by 25% or restructure the offer."</em> Write the criterion down. Date it. Keep it visible.</p>
<p><strong>Done-when criteria:</strong> You can describe the offer in 30 seconds, name the price, name the deliverable timeline, name your kill criterion, and a literate friend can repeat it back accurately.</p>
<p><strong>Common failure modes:</strong> Pricing too low because you're nervous (this is universal — your first instinct on price is usually 40–60% of what the market pays). Naming the offer in your own jargon instead of the buyer's. Skipping the kill criterion because writing it feels like admitting you might fail. The kill criterion is the <em>whole point</em> — it converts a vague hope into a falsifiable bet.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Claude or ChatGPT to pressure-test offer language by simulating buyer objections. Wynter ($540+/test) for actual ICP message testing if the price tier justifies it.</li>
<li><strong>Mostly Theater:</strong> Any "AI offer generator" that produces a finished offer without you doing the pain research first. The output is generic.</li>
</ul>
<p><strong>Iteration trigger:</strong> First five buyer conversations. If buyers don't immediately understand the offer or push back hard on price, restructure.</p>
<p><strong>Existing RISER artifact:</strong> The <strong>MVO Decision Engine</strong> Gate 04 Solution Sketch, Gate 05 Offer, Gate 06 Pricing. The <strong>Marketing Plan Generator</strong> outputs a complete offer angle in section 08 of every plan it produces.</p>
<hr>
<h3>Step 1.4 — MVP / Service Definition</h3>
<p><strong>Produces:</strong> The actual <em>thing</em> you will deliver. For services this is a scope-of-work template. For software this is a working prototype. For productized services this is a defined deliverable package.</p>
<p><strong>Input:</strong> Step 1.3 offer document.</p>
<p><strong>How to do it:</strong> Write the scope of work in one page. What's included. What's not included. Timeline. Communication cadence. Revisions. Out-of-scope handling. Payment terms. For a service business, this is also where you decide what you will template, what you will custom-build, and what you will refuse to do.</p>
<p>For productized services (most professional services should be productized): name the package, list the exact deliverables, set the price, set the timeline, define what makes a customer eligible to buy.</p>
<p><strong>Done-when criteria:</strong> You have an SOW you could send to a buyer this afternoon. It defines scope so clearly that you know in advance what you're delivering and so does the buyer.</p>
<p><strong>Common failure modes:</strong> Vague scope language ("ongoing strategic guidance") that lets buyers expand the work without paying more. Missing the "out of scope" section. No defined revision limit. Promising deliverables you haven't actually built a process for.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Claude or ChatGPT to draft the SOW from a checklist. PandaDoc or Bonsai for SOW signing infrastructure (free or low cost).</li>
<li><strong>Mostly Theater:</strong> Building a "Product Architect Agent" workflow before you've delivered the service to one human. Map the actual delivery from one real engagement first.</li>
</ul>
<p><strong>Iteration trigger:</strong> After the first three engagements. You will discover scope leaks and SOW gaps you didn't anticipate. Update the template.</p>
<hr>
<h2>Phase 2 — Positioning and Asset Build</h2>
<h3>What this phase produces</h3>
<p>The artifacts a buyer encounters before they buy from you. Brand, message, lead magnet, sales page, proof. Not all of them at once — the minimum credible set.</p>
<h3>Why it matters</h3>
<p>Phase 1 gave you a defensible offer. Phase 2 gives buyers a way to evaluate you without talking to you first. For high-ticket professional services, where buyers research at 11pm before deciding who to contact, the asset layer is what gets you on the consideration list. Skip it and you're invisible.</p>
<h3>Honest framing on this phase</h3>
<p>You don't need a $5,000 logo. You don't need a 12-page brand bible. You don't need a hand-photographed headshot. You need the minimum credible set, deployed within a week, and you need to spend the saved time on Phase 3 outreach. Operators stall here because polishing assets feels productive. It is not. It is procrastination dressed as work.</p>
<hr>
<h3>Step 2.1 — Competitive Intelligence</h3>
<p><strong>Produces:</strong> A one-page comparison matrix of three to five direct competitors — their offer, their pricing, their positioning, their lead magnet, their hook, what's working for them, what's missing.</p>
<p><strong>Input:</strong> Phase 1 work. Knowledge of who else serves your buyer.</p>
<p><strong>How to do it:</strong> List five competitors. Open each one's website, lead magnet (download it), pricing page (if visible), LinkedIn, and any case studies. Fill in the matrix. Note what you can't easily improve on (their credentials, their tenure) and what you can (their positioning, their offer specificity, their pain language match).</p>
<p><strong>Done-when criteria:</strong> You can name in one sentence per competitor what's strong about their positioning and what's weak. You have an explicit "we're different from them because..." for each.</p>
<p><strong>Common failure modes:</strong> Researching too many competitors (five is enough; ten is hiding from the work). Fixating on what they do better instead of what they leave on the table. Copying their offer instead of differentiating from it.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Built With or SimilarWeb for tech-stack and traffic visibility on competitor sites (free or low-tier). Wayback Machine to see how their positioning has evolved.</li>
<li><strong>Useful With Caveats:</strong> Apify, Bright Data for scraping if you need depth. Compliance and TOS questions matter — read them.</li>
<li><strong>Mostly Theater:</strong> "AI-driven competitive intelligence agents" that promise daily monitoring. They produce dashboards. Dashboards are not insight.</li>
</ul>
<p><strong>Iteration trigger:</strong> Quarterly. Competitor offers and positioning shift; your matrix needs refresh.</p>
<hr>
<h3>Step 2.2 — Brand & Asset Minimum Viable Set</h3>
<p><strong>Produces:</strong> A logo (or wordmark), one professional headshot, a one-page bio, a defined color palette, and a one-page service overview document. That's the minimum. Nothing more until you've closed five clients.</p>
<p><strong>Input:</strong> Phase 1 work. Your existing materials.</p>
<p><strong>How to do it:</strong> Use Canva or Figma. Pay $200–$500 for a wordmark on Fiverr or 99designs if you want polish. Get a real headshot — phone-camera selfie quality is fine for LinkedIn but not for an expert witness directory listing. Write the one-page bio in third person, including your specific credentials, three concrete prior accomplishments (sanitized if needed), and a clear statement of who you serve.</p>
<p><strong>Done-when criteria:</strong> You have a presentable LinkedIn profile, a presentable directory listing draft, and a service overview PDF you can email to a prospect.</p>
<p><strong>Common failure modes:</strong> Spending three weeks on a logo. Hiring a brand strategist before you have buyers. Writing the bio in language that sounds like every other consultant's bio.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Canva ($15/mo) for fast asset production. Claude/ChatGPT to draft and polish the bio. Looka for $50 wordmark generation if you can't decide what you want.</li>
<li><strong>Mostly Theater:</strong> AI-generated "brand identity systems." Looks impressive, costs significant time, doesn't move buyers. Save brand investment for after you have customer feedback.</li>
</ul>
<hr>
<h3>Step 2.3 — Lead Magnet (Gift First)</h3>
<p><strong>Produces:</strong> A specific, valuable, narrow asset that solves one micro-problem for your buyer in exchange for their email or a 15-minute call. Not a generic ebook. A diagnostic checklist, a calculator, a contract review template, a five-page "how to evaluate X" guide.</p>
<p><strong>Input:</strong> Phase 1 pain doc. Knowledge of buyer's specific decision moments.</p>
<p><strong>How to do it:</strong> Pick the buyer's most concrete sub-pain. Build the asset that solves it. Constraint: this asset should be useful even if the buyer never works with you. That's what triggers reciprocity (Cialdini). A bait-and-switch lead magnet that turns into a pitch deck does not work and damages trust.</p>
<p><strong>Done-when criteria:</strong> A buyer who downloads this asset finds it genuinely useful and would tell a colleague about it. You've tested this with two real buyers before launch.</p>
<p><strong>Common failure modes:</strong> Generic "10 tips for X" content. Disguised pitch decks. Asset is too long (40 pages = won't be read) or too short (one tip = not worth the email).</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Claude/ChatGPT to draft the asset content. Canva or Figma for layout. ConvertKit, Beehiiv, or Mailchimp for email delivery infrastructure.</li>
<li><strong>Mostly Theater:</strong> "AI lead magnet generators" that produce generic content with no specific buyer in mind.</li>
</ul>
<p><strong>Existing RISER artifact:</strong> The <strong>Marketing Plan Generator</strong> generates a specific lead-magnet recommendation for any profession+avatar combination as section 05 of every plan.</p>
<hr>
<h3>Step 2.4 — Sales Page / Service Page</h3>
<p><strong>Produces:</strong> A single page on your website (or a one-page Notion/Carrd if you're moving fast) that names the buyer, the pain, the offer, the proof, and the next step. Not a homepage. A targeted page for the specific avatar you're going after.</p>
<p><strong>Input:</strong> All prior Phase 1 and 2 work.</p>
<p><strong>How to do it:</strong> Use the long-form direct response structure: hook → problem → why-other-things-fail → mechanism → proof → offer → bonuses (only if real) → guarantee or risk reversal → CTA. Write it once, in their voice. Word count: 800–1,500 for a high-ticket service.</p>
<p><strong>Done-when criteria:</strong> A cold buyer can read the page and either qualify themselves in (book a call) or qualify out (close the tab). It does both jobs without making them work.</p>
<p><strong>Common failure modes:</strong> Writing about yourself instead of the buyer. Burying the offer below the fold. Vague CTAs ("Get in touch"). No social proof. No risk reversal.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Webflow, Carrd, Framer for fast page hosting. Claude/ChatGPT for copy iteration (it's good at this when you give it Phase 1 buyer language).</li>
<li><strong>Useful With Caveats:</strong> Hyros, Triple Whale for tracking — only if your spend justifies it.</li>
<li><strong>Mostly Theater:</strong> "AI website builders" that promise full sites in one click. Outputs are generic. Use a template instead.</li>
</ul>
<hr>
<h2>Phase 3 — Acquisition</h2>
<h3>What this phase produces</h3>
<p>Real buyer conversations. Not awareness. Not "thought leadership." Conversations with named humans who could pay you, where they say yes, no, or "tell me more."</p>
<h3>Why it matters</h3>
<p>Everything in Phases 1 and 2 is unfalsifiable until Phase 3 puts it in front of buyers. Operators who linger in 1 and 2 are usually avoiding the discomfort of 3. The cure is to launch publicly before you feel ready, then let real feedback drive the iterations.</p>
<h3>The order matters</h3>
<p>For high-ticket professional services, run these channels in this order. Don't run them in parallel until each is proven.</p>
<p>1. <strong>Warm outreach</strong> to your existing network (week one)</p>
<p>2. <strong>Dream 100 cold outreach</strong> to named humans in your target market (week two)</p>
<p>3. <strong>Content distribution</strong> on the platforms your buyers actually use (ongoing from week one)</p>
<p>4. <strong>Paid ads</strong> only after channels 1–3 produce signal</p>
<hr>
<h3>Step 3.1 — Warm Network Outreach</h3>
<p><strong>Produces:</strong> 5–15 conversations with people who already know you, plus a list of 20–50 introductions they could make to people you don't know.</p>
<p><strong>Input:</strong> Phase 1 and 2 assets. Your contact list.</p>
<p><strong>How to do it:</strong> Write a 4–6 sentence note. Tell them what you're doing now. Ask if they know anyone in your target buyer category. Offer to do something useful for them in return. Send it to everyone you've worked with in the last decade. Include the lead magnet as a gift.</p>
<p><strong>Done-when criteria:</strong> All notes sent within seven days. Track replies. Track who introduces you. Follow up.</p>
<p><strong>Common failure modes:</strong> Hiding from this step because asking former colleagues feels needy. (It is not. It is normal professional behavior.) Not having anything specific to ask for. Asking for "any help" instead of "an introduction to anyone you know who handles construction defect cases."</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Your existing inbox and LinkedIn. Claude/ChatGPT to personalize each outreach note from a base template. Notion or a simple spreadsheet to track responses.</li>
<li><strong>Mostly Theater:</strong> Automating warm outreach. The whole point is the personal note.</li>
</ul>
<p><strong>Existing RISER artifact:</strong> The <strong>Marketing Plan Generator</strong> outputs a LinkedIn first-touch template, a cold-email template, and a community-reply template in section 09 of every plan it produces. Adapt those for warm context.</p>
<hr>
<h3>Step 3.2 — Dream 100 List Building</h3>
<p><strong>Produces:</strong> A spreadsheet of 100 named humans in your target buyer category — name, title, firm, geography, contact route, and one specific reason this person fits.</p>
<p><strong>Input:</strong> Phase 1 buyer definition.</p>
<p><strong>How to do it:</strong> Use the segment breakdown from the <strong>Client Acquisition Catalog Dream 100 template</strong> (or build your own equivalent). For a forensic engineer that's roughly: 25 construction defect attorneys + 25 insurance defense attorneys + 15 subrogation managers + 15 mechanical contractor GCs + 10 property management firms + 10 technical committee chairs.</p>
<p>For each, find them on LinkedIn (Sales Navigator helps), record their firm, find their email (Apollo, Hunter, or guessable patterns), record one specific thing they do that's relevant. The "one specific thing" prevents your outreach from being generic.</p>
<p><strong>Done-when criteria:</strong> 100 names. Real ones. Verified contact info for at least 70 of them. Notes column filled in for at least 50.</p>
<p><strong>Common failure modes:</strong> Listing firm names instead of human names. Stopping at 30 because the list is "good enough" (it isn't — Dream 100 works because of compounding, not because the first 30 are special). Skipping the "one specific thing" column.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> LinkedIn Sales Navigator ($99/mo). Apollo (free tier or $59/mo). PACER ($0.10/page) for federal court records to identify attorneys handling specific case types. Justia for free legal directory search. A spreadsheet (Google Sheets is fine).</li>
<li><strong>Useful With Caveats:</strong> Clay ($149+/mo) if you want enrichment-and-personalization-at-scale workflow. Steep learning curve. Probably overkill until you have 30+ confirmed buyers in pipeline.</li>
<li><strong>Mostly Theater:</strong> "AI SDR agents" that build the list and personalize the outreach for you autonomously. They produce volume. Volume is not the bottleneck. Specificity is.</li>
</ul>
<p><strong>Existing RISER artifact:</strong> The <strong>Client Acquisition Catalog</strong> has the full tool stack with verified pricing, organized by channel. The Dream 100 template segment-counts are inside the catalog.</p>
<p><strong>Risks worth flagging:</strong> LinkedIn TOS prohibits most automation. Sales Navigator usage is fine. Tools that auto-message people through LinkedIn risk account suspension and have killed many an outreach plan.</p>
<hr>
<h3>Step 3.3 — Dream 100 Outreach Cadence</h3>
<p><strong>Produces:</strong> First-touch messages sent to all 100 people, follow-up sequence executed, conversations started.</p>
<p><strong>Input:</strong> Step 3.2 list. Step 2.3 lead magnet.</p>
<p><strong>How to do it:</strong> Six-touch cadence over 8 weeks. Mix LinkedIn, email, and (where appropriate) phone. Each touch is short, specific, value-first. Open with the "one specific thing" you noted. Reference a real signal — they posted something, their firm just took on a relevant case, an industry event happened. Lead-magnet offer can come on touch 2 or 3, never touch 1.</p>
<p>Run the cadence as a deliberate practice. 15 outreach touches per workday is the right volume for a solo professional. More than that and quality drops. Less than that and momentum dies.</p>
<p><strong>Done-when criteria:</strong> All 100 people have received at least four touches across 8 weeks. Conversation rate of 8–15% (8–15 named people responded with interest) is normal. Less than 5% means the message is wrong; rewrite. More than 25% means the targeting got lucky; verify before scaling.</p>
<p><strong>Common failure modes:</strong> Sending touch 1 to all 100 then giving up when 92 ignore you. (The compounding is in touches 3–6.) Generic copy that ignores the "one specific thing." Pitching the offer on touch 1.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Smartlead or Instantly ($39–94/mo) for cold-email infrastructure (deliverability matters). HubSpot CRM Free or Pipedrive ($25/seat) for tracking touches. Calendly for booking the calls that result.</li>
<li><strong>Useful With Caveats:</strong> Lemlist ($59+/mo) — premium worth it only if you actually use the personalization features. Otherwise overpriced versus Smartlead.</li>
<li><strong>Mostly Theater:</strong> Cold-outreach AI that generates "100% personalized" messages. The personalization is shallow. Buyers can tell. Better to send fewer messages with real personalization than more with fake.</li>
</ul>
<p><strong>Risks:</strong> Email deliverability. Sending 100 cold emails from a fresh domain will land you in spam folders. Use a separate sending domain, warm it up over 4–6 weeks, follow SPF/DKIM/DMARC standards. Smartlead handles this; sending from your business Gmail does not.</p>
<p>For licensed professionals: state bar associations and professional licensing boards have rules about solicitation. Consult yours before launching cold outreach. Some states prohibit certain cold-contact patterns for attorneys, doctors, and engineers in regulated practice.</p>
<hr>
<h3>Step 3.4 — Content Distribution Cadence</h3>
<p><strong>Produces:</strong> A consistent, multi-month flow of content on the platform(s) your buyers actually inhabit, building credibility while warm and Dream 100 outreach runs in parallel.</p>
<p><strong>Input:</strong> Phase 1 pain doc. Phase 2 positioning. Knowledge of where buyers actually gather.</p>
<p><strong>How to do it:</strong> Pick <em>one</em> primary platform. For high-ticket professional services in 2026, that's almost always LinkedIn. Possibly an industry-specific publication (ABA Journal, ASHRAE Journal, etc.) for the highest-credentialing-value plays. Don't multi-platform until the primary one is producing.</p>
<p>The content cadence framework that works:</p>
<ul>
<li><strong>Monday — Pain post.</strong> A real piece of buyer pain, observed or quoted, with your take. 150–300 words.</li>
<li><strong>Wednesday — Mechanism post.</strong> A specific technical observation or framework, in your area of expertise. 200–400 words. This is the "I know things" post.</li>
<li><strong>Friday — Case study or proof.</strong> A sanitized story from your work, or a public case dissected. 250–500 words.</li>
</ul>
<p>Three posts a week. Same days. Same time. For 12 weeks before evaluating. The discipline matters more than the volume — buyers notice consistency over six months.</p>
<p><strong>Done-when criteria:</strong> 12 weeks of consistent posting. Engagement metrics matter less than reach growth and the qualitative feedback that comes in (DMs, comments, lurkers reaching out). The right buyers reading you silently for 8 weeks before contacting you is the dominant pattern.</p>
<p><strong>Common failure modes:</strong> Multi-platforming too early (LinkedIn + X + Instagram + TikTok). Posting whenever you "feel inspired" instead of on cadence. Generic "thought leadership" posts that aren't grounded in real buyer pain. Stopping after three weeks because results aren't visible.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Claude/ChatGPT to draft and refine post copy from your raw notes. Buffer or Hypefury for scheduling. Notion for content calendar.</li>
<li><strong>Useful With Caveats:</strong> Repurpose.io, OpusClip for converting long-form (podcast, video) into short-form social posts. Useful if you're already producing long-form. Theater if you're not.</li>
<li><strong>Mostly Theater:</strong> AI tools that "generate a year of content in 10 minutes." The output is generic. It does not move buyers. Worse, it identifies you as someone using AI to generate content, which actively damages credibility for high-ticket professional services. This is <strong>Identity Commoditization</strong> in action — see the Closing section for the full framing of why generic AI output collapses your price floor.</li>
</ul>
<p><strong>The honest tradeoff:</strong> AI can save 30–50% of your time on the <em>editing</em> and <em>formatting</em> layer. It cannot save time on the <em>thinking</em> layer. The thinking is the work. If you're using AI to skip the thinking, you're skipping the value.</p>
<hr>
<h3>Step 3.5 — Paid Channels (Defer Until Earned)</h3>
<p><strong>Produces:</strong> Scaled distribution of proven content/offers, after warm and Dream 100 outreach have produced consistent close signal.</p>
<p><strong>Input:</strong> Steps 3.1–3.4 producing measurable conversation rate, close rate, and lifetime value data. You need at least 10 closed clients before you have any business spending on paid ads.</p>
<p><strong>How to do it:</strong> This step is deferred for most professional service operators for 6–12 months. The reason: high-ticket service buyers don't typically respond to paid ads the way e-commerce buyers do. Your CAC math has to work, and it usually doesn't until you've validated the funnel manually.</p>
<p>When you do enter paid: start with one platform (LinkedIn ads if your buyer is on LinkedIn; Google Search if they search for your category; Meta only if your buyer demographic is verified active there). Set a hard monthly cap. Track CAC and LTV explicitly. Cut spend the moment CAC > 0.33 × LTV.</p>
<p><strong>Done-when criteria:</strong> Active paid channel with measurable CAC under your threshold and predictable conversion rate over a 60-day window.</p>
<p><strong>Common failure modes:</strong> Running paid before manual outreach has validated message-market fit. Boosting LinkedIn posts (almost never worth it for high-ticket B2B). Treating paid as a substitute for organic instead of an amplifier of organic.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Native ad platforms. Hyros or Triple Whale for tracking only if spend justifies it.</li>
<li><strong>Mostly Theater:</strong> "AI ad optimizer" tools that promise to manage your campaigns. The platforms' built-in optimization is now better than most third-party tools.</li>
</ul>
<hr>
<h2>Phase 4 — Operations and Delivery</h2>
<h3>What this phase produces</h3>
<p>The systems that let you deliver promised outcomes consistently, capture knowledge from every engagement, and maintain quality as volume increases. SOPs, templates, knowledge management, and the boring infrastructure that prevents the business from collapsing under its own success.</p>
<h3>Why it matters</h3>
<p>Phase 3 will produce clients faster than you expect once it works. Operators without Phase 4 systems compound chaos with every new client. Within six months they're working 70-hour weeks, dropping deliverables, and the original positioning erodes.</p>
<p>This phase runs in parallel with Phase 3 from the moment your first client signs. Don't wait until you're overwhelmed to start.</p>
<hr>
<h3>Step 4.1 — Client Onboarding SOP</h3>
<p><strong>Produces:</strong> A documented, repeatable process for taking a signed client from "yes" to "first deliverable" without anything falling through the cracks.</p>
<p><strong>Input:</strong> Phase 1 SOW template. Your delivery process from your first three engagements.</p>
<p><strong>How to do it:</strong> Document the process. Welcome email template. Kickoff-call agenda. Information-gathering checklist. Project-folder template. Communication-cadence agreement. Payment-collection workflow. The first time you do this it takes a day. Every time after that it saves a day.</p>
<p><strong>Done-when criteria:</strong> A new client signs and the first 14 days run identically each time, with no email you have to write from scratch and no question you have to look up.</p>
<p><strong>Common failure modes:</strong> Reinventing the onboarding for each client. Not having a kickoff agenda. Forgetting to invoice. Missing the information-gathering step and getting blocked mid-engagement.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Notion or Process Street for SOP storage. Loom for recording explainer videos once and reusing them. Calendly for scheduling. PandaDoc or Bonsai for contract+invoice infrastructure.</li>
<li><strong>Useful With Caveats:</strong> Bonsai or HoneyBook for end-to-end client management — useful if you want one tool, costlier than piecing tools together.</li>
<li><strong>Mostly Theater:</strong> AI "client onboarding agents." Onboarding is relationship-building. Automate the <em>reminders</em> and <em>templates</em>; do the relationship work yourself.</li>
</ul>
<hr>
<h3>Step 4.2 — Delivery SOP</h3>
<p><strong>Produces:</strong> A documented, repeatable process for delivering the actual service, from start of engagement to final deliverable to client offboarding.</p>
<p><strong>Input:</strong> Step 4.1 onboarding output. Your delivery method from prior work.</p>
<p><strong>How to do it:</strong> Document each phase of delivery. Templates for each artifact you produce. Quality checklists. Internal review steps. Time-tracking convention. Client communication touchpoints. For technical work (forensic engineering, expert witness reports), include the credentialing-and-citation discipline that protects your work product from challenge.</p>
<p><strong>Done-when criteria:</strong> A new engagement of the same type as a prior engagement takes 30–50% less time on the second iteration than the first, because the templates and checklists carry the load.</p>
<p><strong>Common failure modes:</strong> No quality checklist (every deliverable is bespoke and inconsistent). No time tracking (you discover after-the-fact you priced wrong). No internal review step (errors ship to client).</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Notion or Confluence for SOP storage. Toggl or Harvest for time tracking. Claude/ChatGPT for first-draft generation of report sections that have known patterns.</li>
<li><strong>Useful With Caveats:</strong> Tana, Reflect, Mem for AI-assisted note-taking. Genuinely useful for knowledge capture across many engagements. Learning curve is real.</li>
<li><strong>Mostly Theater:</strong> AI tools that promise to "automate your delivery." If your service is high-ticket, the delivery is the value. Don't automate the value.</li>
</ul>
<hr>
<h3>Step 4.3 — Knowledge Management</h3>
<p><strong>Produces:</strong> A growing internal library of every successful artifact (winning emails, approved report sections, effective objection responses, sanitized case examples) organized for fast retrieval and reuse.</p>
<p><strong>Input:</strong> Every client engagement, ongoing.</p>
<p><strong>How to do it:</strong> After each engagement, spend 30 minutes capturing what worked. Tag it. File it. Make it findable. Within 12 months you have a "winners library" that compounds — each new engagement starts 60% complete because templates exist.</p>
<p><strong>Done-when criteria:</strong> When starting any new artifact, you can find at least one prior version to start from in under 60 seconds.</p>
<p><strong>Common failure modes:</strong> Capturing nothing (everything is rebuilt from scratch). Capturing everything (the library is too big to navigate). No tagging convention.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Notion or Obsidian. Tana for advanced relational tagging. Search-friendly file naming.</li>
<li><strong>Useful With Caveats:</strong> Mem.ai, Reflect — AI-native note systems. Promising; learning curve and lock-in risk.</li>
</ul>
<hr>
<h3>Step 4.4 — Tech Stack Hygiene</h3>
<p><strong>Produces:</strong> A documented inventory of every tool you use, what it does, what it costs, who has access, what data it holds, and when it's reviewed for replacement or cancellation.</p>
<p><strong>Input:</strong> All your existing subscriptions and tools.</p>
<p><strong>How to do it:</strong> One spreadsheet. Quarterly review. Cancel anything not actively used. Note any tool with sensitive client data (CRM, file storage, email infrastructure) and verify their security posture.</p>
<p><strong>Done-when criteria:</strong> No surprise charges. No forgotten tools. No "wait, where did I store that file?" moments.</p>
<p><strong>Common failure modes:</strong> Tool sprawl. Three CRMs, two email-marketing platforms, four file-storage services. Each one $30–100/month, none of them used fully.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Just a spreadsheet. Vertice or Cledara if your tool spend exceeds $2K/month and you want active SaaS management.</li>
<li><strong>Mostly Theater:</strong> "AI-driven tech stack auditors." Most professional service operators have 8–15 tools, not 80. A spreadsheet review takes an hour.</li>
</ul>
<hr>
<h2>Phase 5 — Iteration and Scale</h2>
<h3>What this phase produces</h3>
<p>Continuous learning that flows back into Phases 1–4, compounding the business's effectiveness over time. This is the only phase that has no end state.</p>
<h3>Why it matters</h3>
<p>The original document called this the "Master Loop" and described it in mythology. The real version is unglamorous: review your numbers monthly, review your buyer feedback quarterly, review your offer and positioning annually, kill what isn't working, double down on what is.</p>
<h3>Honest framing on this phase</h3>
<p>Most operators skip Phase 5 entirely. They run Phases 1–4 once, get a working business, and stop iterating. Within 18–24 months their offer is stale, their content is repetitive, their CAC is climbing, and they don't know why. Phase 5 is the boring discipline that prevents this.</p>
<hr>
<h3>Step 5.1 — Monthly Metrics Review</h3>
<p><strong>Produces:</strong> A one-page dashboard reviewed once per month showing the metrics that matter for your business.</p>
<p><strong>Input:</strong> Data from your CRM, your email tool, your accounting, your time-tracking.</p>
<p><strong>How to do it:</strong> Track only the metrics you can actually act on. For most professional service operators that's: number of conversations started, number of qualified opportunities, number closed, average deal value, lifetime value, CAC, hours per engagement, revenue per hour. Eight numbers. Review monthly. Note trends.</p>
<p><strong>Done-when criteria:</strong> First Monday of every month, the dashboard is updated, you've spent 30 minutes reviewing it, you've decided one thing to change based on what it says.</p>
<p><strong>Common failure modes:</strong> Tracking 40 metrics (paralysis). Tracking vanity metrics (LinkedIn impressions). Reviewing the dashboard but never changing anything based on it.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Google Sheets. Notion databases. HubSpot or Pipedrive reports. Stripe dashboard for revenue.</li>
<li><strong>Mostly Theater:</strong> "AI-powered analytics dashboards" with 50 widgets and no actionable insight.</li>
</ul>
<hr>
<h3>Step 5.2 — Quarterly Buyer Feedback</h3>
<p><strong>Produces:</strong> Direct conversation with at least 5 recent clients each quarter, capturing what worked, what didn't, what they'd change, and what they'd buy next.</p>
<p><strong>Input:</strong> Your client list.</p>
<p><strong>How to do it:</strong> Schedule four 30-minute calls per quarter with recent clients. Open-ended questions. Record (with permission). Capture verbatim quotes. Look for patterns across calls.</p>
<p><strong>Done-when criteria:</strong> Every quarter, you have new buyer language and new insights flowing back into your offer, content, and SOPs.</p>
<p><strong>Common failure modes:</strong> Skipping these calls because they feel awkward to ask for. Asking only people who liked you (selection bias). Hearing feedback and not acting on it.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Otter.ai, Fathom, Granola for transcription. Claude/ChatGPT to synthesize themes across transcripts.</li>
</ul>
<hr>
<h3>Step 5.3 — A/B Testing (Earned)</h3>
<p><strong>Produces:</strong> Continuous optimization of your highest-volume marketing assets — sales page, lead magnet, email subject lines, ad creative — based on real conversion data.</p>
<p><strong>Input:</strong> Sufficient traffic volume to actually have statistical significance. For most professional service operators this means 1,000+ page visits per month per asset. Below that, A/B testing is theater.</p>
<p><strong>How to do it:</strong> Test one variable at a time. Define hypothesis upfront. Run until significance (or 4 weeks max). Document the result. Apply the winner. Move to the next test.</p>
<p><strong>Done-when criteria:</strong> Each high-volume asset has been through at least 4 deliberate test cycles per year.</p>
<p><strong>Common failure modes:</strong> Testing without enough traffic (you'll get random noise). Testing too many variables at once. Calling a test winner before it reaches significance. Forgetting which variant won and why.</p>
<p><strong>AI/tool layer:</strong></p>
<ul>
<li><strong>Real:</strong> Native A/B in your email tool, ad platform, and CMS (most have it built-in). VWO, Optimizely if you have real volume.</li>
<li><strong>Mostly Theater:</strong> AI-driven "auto-optimization." Useful at scale (Meta, Google ads platforms run their own); the third-party "AI testing agents" mostly recreate functionality the platforms already have.</li>
</ul>
<hr>
<h3>Step 5.4 — Offer and Positioning Refresh</h3>
<p><strong>Produces:</strong> Annual review of your core offer, positioning, pricing, and target buyer. Either confirmation that it's still right, or deliberate evolution.</p>
<p><strong>Input:</strong> Phase 5 metrics. Quarterly buyer feedback. Competitive landscape changes.</p>
<p><strong>How to do it:</strong> Once a year, block a full day. Review your Phase 1 documents. Are they still accurate? Has the buyer pain shifted? Has your delivery capability evolved? Is your pricing still right? Decide what to keep, what to evolve, what to retire.</p>
<p><strong>Done-when criteria:</strong> End of each year, you have an explicit decision: "this is still the offer for next year" or "here is what changes."</p>
<p><strong>Common failure modes:</strong> Skipping the annual review. Refreshing the offer without buyer feedback to support it. Refreshing for vanity reasons (you got bored) instead of strategic ones.</p>
<hr>
<h3>Step 5.5 — Scale Decision</h3>
<p><strong>Produces:</strong> A deliberate choice about whether to scale vertically (more clients in same niche), horizontally (same offer in adjacent niches), or stay solo.</p>
<p><strong>Input:</strong> 18+ months of operating data. Honest self-assessment of what you actually want.</p>
<p><strong>How to do it:</strong> This decision is more about you than about the business. Some operators want to stay a solo expert with high margins and short hours. Some want to build a firm. Both are legitimate. The mistake is drifting into one without choosing.</p>
<p>If scaling vertically: hire associate practitioners, document delivery extensively, develop training for them, plan for quality control. If scaling horizontally: pilot the new niche before committing, treat it as Phase 1 again from scratch. If staying solo: raise prices.</p>
<p><strong>Done-when criteria:</strong> Explicit written decision with criteria for revisiting.</p>
<p><strong>Common failure modes:</strong> Drifting into scaling because it sounds like success. Hiring before SOPs are documented (chaos compounds). Hiring before you've explicitly chosen what role you want.</p>
<hr>
<h2>The Feedback Loops</h2>
<p>The original document called this the "Master Loop." Here are the actual loops, named honestly:</p>
<p><strong>Phase 5.1 metrics → Phase 1.2 pain doc.</strong> When your conversation rate or close rate drops, the message has stopped resonating. The buyer's pain has shifted. Re-do pain discovery.</p>
<p><strong>Phase 5.2 buyer feedback → Phase 2.3 lead magnet, Phase 2.4 sales page, Phase 1.3 offer.</strong> Buyer language captured in feedback calls flows directly into asset copy. Their objections become your FAQ. Their unmet needs become your next offer.</p>
<p><strong>Phase 5.3 A/B test results → Phase 2 assets, Phase 3.4 content cadence.</strong> Winning variants get codified. Losing patterns get retired.</p>
<p><strong>Phase 4.3 knowledge library → Phase 3.4 content, Phase 2.3 lead magnet.</strong> Your sanitized case examples become content. Your most-asked questions become lead magnets. The library compounds the marketing.</p>
<p><strong>Phase 5.4 offer refresh → all of Phase 1.</strong> Once a year, the entire foundation gets revisited.</p>
<p>These loops are not magic. They are scheduled review meetings with yourself. The discipline is in keeping them on the calendar.</p>
<hr>
<h2>Closing — What Makes This Work</h2>
<p>This document gives you structure. It does not give you discipline. The structure is portable; discipline is not. The operators who will get value from this skeleton are the ones who:</p>
<ul>
<li>Walk Phase 1 fully before launching, even when it feels slow</li>
<li>Set kill criteria and honor them</li>
<li>Track what's working and what isn't, monthly</li>
<li>Talk to actual buyers, quarterly</li>
<li>Refresh the foundation, annually</li>
<li>Resist the temptation to add tools, agents, and complexity in place of doing the work</li>
</ul>
<p>The "agentic" layer in 2026 is real for narrow jobs. It is mostly theater for unbounded creative or strategic work. AI saves 30–50% of time on editing, formatting, and synthesis tasks. It does not save time on thinking, on listening to buyers, on building credibility, or on the relationship work that actually closes high-ticket professional service engagements. Operators who try to substitute AI for those things produce volume without conversion.</p>
<h3>The Identity Commoditization risk</h3>
<p>This is the meta-risk that runs across every phase of this document, and it deserves to be named explicitly.</p>
<p><strong>The mechanism:</strong> When ten operators in your niche all use the same AI tools with similar prompts to produce content, outreach, lead magnets, and proposals, their output converges. Buyers can tell. Not always consciously — sometimes just as a vague sense that "everyone sounds the same now." When that happens at scale, the entire niche commoditizes. Buyers stop trying to identify the best provider and shop on price. Your price floor collapses. Your margin compresses. The work you trained for thirty years to do gets valued like a generic service.</p>
<p><strong>Why this is the central 2026 risk for high-ticket professional services:</strong> Your buyer is paying premium prices because you bring something specific — credentials, judgment, a way of seeing problems, a track record. AI commodifies the wrappers around those things (your emails, your posts, your reports) faster than it commodifies the substance. If the wrappers all look the same, buyers default to lowest price because they cannot tell the substance apart from outside.</p>
<p><strong>How to defend against it:</strong></p>
<ul>
<li><strong>Use AI for editing and synthesis, never for thinking.</strong> Draft your post yourself, then have AI tighten it. Not the other way around.</li>
<li><strong>Feed your AI tools your specific intellectual property</strong> — your prior reports, your characteristic phrases, your case examples, your point of view. A model with no context about you produces generic output. A model fed your archive produces output in your voice. This is what the Knowledge Management library in Step 4.3 is actually for.</li>
<li><strong>Reserve the highest-stakes artifacts for hand-craftsmanship.</strong> Sales pages, expert reports, depositions, anything a buyer reads carefully — these get written by you, not by AI. Use AI to refine, never to generate.</li>
<li><strong>Make your content carry signals only you can produce.</strong> Specific case numbers from your prior work. A photograph from a job site. A technical diagram in your hand. A recording of your voice. Anything that proves a human did the work.</li>
<li><strong>Audit yourself quarterly.</strong> Read three of your recent outreach messages aloud. Read three competitor outreach messages aloud. If you can't immediately tell which is yours, you have a problem.</li>
</ul>
<p>The operators who win in 2026 use AI as a force multiplier on a distinctive practice. The operators who lose use AI as a substitute for one. Same tools, opposite outcomes.</p>
<p>The work is the work. This document tells you what the work is and in what order. The rest is on you.</p>
<hr>
<h2>Where the existing RISER artifacts fit</h2>
<table><thead><tr><th>Phase / Step</th><th>RISER artifact</th></tr></thead><tbody><tr><td>1.2 Pain Discovery</td><td>MVO Decision Engine (Gates 00½, 01) · Pain Discovery Tool Catalog (41 tools)</td></tr><tr><td>1.3 Offer Hypothesis</td><td>MVO Decision Engine (Gates 04–06) · Marketing Plan Generator (section 08 of every plan)</td></tr><tr><td>1.4 MVP Definition</td><td>MVO Decision Engine (full 17-gate sequence)</td></tr><tr><td>2.1 Competitive Intel</td><td>MVO Decision Engine (Gate 03 Competitive Moat)</td></tr><tr><td>2.3 Lead Magnet</td><td>Marketing Plan Generator (section 05 of every plan)</td></tr><tr><td>3.1 Warm Outreach</td><td>Marketing Plan Generator (section 09 outreach scripts)</td></tr><tr><td>3.2 Dream 100</td><td>Client Acquisition Catalog (Dream 100 template, 39-tool stack)</td></tr><tr><td>3.3 Outreach Cadence</td><td>Marketing Plan Generator (section 09) · Client Acquisition Catalog (Channel 6 outreach + CRM)</td></tr><tr><td>3.4 Content Distribution</td><td>Marketing Plan Generator (section 03 Where They Gather, section 04 Channel Priority, sections 06+07 hook/headline/cadence)</td></tr></tbody></table>
<p>The widgets generate the artifacts. This document tells you when and why to use them. Together they form a working operator's plan, not an unbeatable mastermind 2026 unstoppable scaling agentic essay.</p>
<p>The work is the work.</p>
<p><strong>Captain out.</strong></p>
</body>
</html>
Original asset: RISER-Operators-Flow.md
# RISER Operator's Flow

## A structural skeleton for building, marketing, and scaling a high-ticket professional services business — phase by phase, step by step, with the actual work named honestly.

---

**Version 1 · April 2026 · Captain's Logic Operating Doctrine**

This document is the spine. It tells you what stages exist, what order they go in, what each one produces, what could go wrong, and where the existing RISER widgets fit. Use it as a checklist on any given Tuesday — "I'm at Phase 2, Step 3, here is the next concrete deliverable" — not as a vision document to read once and forget.

The framework covers five phases, eighteen steps, and one continuous feedback loop. Phases roughly correspond to weeks 1–4 (Phase 1), 5–8 (Phase 2), 9–12 (Phase 3), and 13+ (Phases 4 and 5, which are continuous from launch onward). A solo operator can complete Phase 1 in seven days if they are disciplined; most take longer because Phase 1 is where the real thinking happens and skipping it makes everything downstream harder.

Three honest framings before you start:

**This is not a get-rich-quick plan.** It is a working operator's plan. The fastest result you will see from doing this correctly is a real client conversation in week three. The first paying client typically lands in week six to ten. Operators who expect faster usually skipped Phase 1.

**Most "AI agents" mentioned in marketing-stack content are aspirational.** The agent layer in 2026 is mostly real for narrow, well-bounded jobs: drafting first replies a human approves, pulling structured data from PDFs, summarizing call transcripts, routing leads to the right sequence. It is mostly hype for unbounded creative or strategic work. Throughout this document, tools are graded **Real**, **Useful With Caveats**, or **Mostly Theater**. Use the Real ones, treat the second category with measurement, skip the third.

**The risks that will actually bite an operator are not the ones marketing content discusses.** Reddit API access can change overnight (GummySearch shut down in November 2025 when Reddit denied API access). LinkedIn's automation crackdowns kill outreach tools regularly. Email deliverability collapses under cold-volume sends. State bar associations and professional licensing boards have rules about AI-personalized outreach that can endanger your license if violated. These risks are flagged inside each step where they apply.

---

## Phase 1 — Foundation

### What this phase produces

A validated business hypothesis you can defend with evidence, an offer that solves a pain people actually have, and a minimum viable version you can sell next week. Not a finished product. Not a polished brand. A defensible *bet* with a known kill criterion.

### Why it matters

Operators who skip this phase end up in Phase 3 (traffic generation) trying to drive volume to a thing nobody clearly wants. They compensate with bigger ad spend, more outreach, more content. None of it works because the offer is wrong. Phase 1 is unglamorous and slow. It is also the highest-leverage week of the entire build.

---

### Step 1.1 — Idea Capture

**Produces:** A one-paragraph statement of the business or service idea, who you think it serves, and what specific problem you think it solves.

**Input:** Your existing skills, prior work, professional credentials, and the rough hypothesis you're entering with.

**How to do it:** Write the paragraph by hand on paper. Two hundred words. Include the buyer (one sentence), the problem (one sentence), the solution (one sentence), the price tier (one sentence), and what makes you specifically the right person to deliver it (one sentence). The constraint forces clarity.

**Done-when criteria:** A literate friend can read the paragraph once and explain back to you what your business does, who it's for, and why someone would pay you. If they can't, rewrite.

**Common failure modes:** Writing in jargon. Listing features instead of outcomes. Defining the buyer too broadly ("small business owners" instead of "construction defect attorneys at mid-sized firms in Arizona"). Hiding behind credentials instead of describing what you actually do for clients.

**AI/tool layer:** None needed at this step. **Mostly Theater** if you're using AI to "validate" the idea here — the model will tell you almost any idea sounds promising. Save the validation work for Step 1.3.

**Iteration trigger:** Phase 5 customer feedback that contradicts your stated buyer or problem. Rewrite this paragraph quarterly.

---

### Step 1.2 — Pain Discovery

**Produces:** A document with three to five real pain points your buyer experiences, written in their own language, with evidence sources. Not pain you assume they have. Pain they say out loud.

**Input:** The Step 1.1 paragraph. Your hypothesis about who the buyer is.

**How to do it:** Three parallel research tracks, run for one week:

1. **Direct conversations.** Five to ten phone or video calls with people in your target buyer category. Not pitches. Listening tours. Questions: What's the most frustrating part of [problem area]? When did this last cause a real problem? What did you try? What worked? What didn't?
2. **Public language mining.** Read what your buyers post and ask in places they gather: LinkedIn posts and comments, association forums, niche Slack groups, industry-specific subreddits if any exist, Quora answers in their domain. Copy verbatim phrases into a document.
3. **Tool-assisted scanning.** Use the RISER Pain Discovery Tool Catalog — specifically the Reddit pain mining tools, audience intelligence tools (SparkToro), and VOC synthesis tools — to surface language patterns at scale.

**Sort what you find into two buckets — burning vs chronic.** This distinction is the most useful prioritization tool in pain discovery. **Burning pain** is active crisis: a lawsuit was filed last week, a deposition is in 14 days, a client just sued, a deadline is tomorrow, a regulator just sent a notice. Burning pain drives buying *this week*. **Chronic pain** is the dull background ache: communication is messy, vendor management is annoying, paperwork takes too long. Chronic pain is real but rarely triggers a buying decision on its own — it needs a triggering event to become burning.

For high-ticket professional services, your offer must address burning pain. Operators who build offers for chronic pain spend years marketing to people who agree there's a problem but never buy. Tag every pain point in your discovery doc as B (burning) or C (chronic). If your top three pains are all C, your offer or your avatar is wrong.

**Done-when criteria:** You have at least 20 verbatim quotes from real buyers describing pain in their own words, organized into 3–5 themes, each tagged burning or chronic. At least two of your top themes are burning. You can show a friend the quotes (with sources) and they can independently identify the themes you found and the burning/chronic tag.

**Common failure modes:** Using your own words instead of the buyer's. Treating one Reddit thread as evidence. Skipping the direct conversations because they're hard to schedule (this is the single biggest stall point). Picking only pain points that flatter your existing solution.

**AI/tool layer:**
- **Real:** Otter.ai or Fathom for transcribing buyer conversations. ChatGPT/Claude for synthesizing themes across transcripts. SparkToro for finding where buyers gather.
- **Useful With Caveats:** PainOnSocial, PainPointy for surfacing language patterns. They produce useful raw material but the categorization needs human review — the AI is wrong about pain intensity ranking maybe one third of the time.
- **Mostly Theater:** Any tool claiming to "automatically generate buyer personas" without you talking to a single buyer. The output looks plausible. It will not survive contact with reality.

**Iteration trigger:** Quarterly. Buyer pain shifts as their context shifts (regulatory changes, economic conditions, technology shifts). The doc you wrote in Q1 needs revision by Q3.

**Existing RISER artifact:** The **MVO Decision Engine widget** (Gate 00½ Pain Discovery, Gate 01 Hungry Avatar). The **Pain Discovery Tool Catalog** lists the 41 tools that fit this work and their honest tradeoffs.

---

### Step 1.3 — Offer Hypothesis

**Produces:** A specific named offer — what you sell, what it costs, what the buyer gets, what they walk away from the call with — that maps directly to the pain you found.

**Input:** Step 1.2 pain document. Your skills inventory.

**How to do it:** Write the offer in one page, using Hormozi's value-equation structure. Name the dream outcome (in the buyer's words). Name the perceived likelihood (your proof — credentials, prior work, sample deliverable). Name the time delay (how long until they get the result). Name the effort/sacrifice (what they have to do versus what you do). The offer wins or loses on whether (Dream × Likelihood) ÷ (Time × Effort) is high.

Decide on a named mechanism. Not "I do forensic engineering" — "The 14-Day VRF Failure Forensic Audit." Specific deliverable, specific timeframe, specific outcome.

Decide on a kill criterion before launch. *"If I cannot get one paying engagement at this price within 60 days of starting active outreach, I will reduce price by 25% or restructure the offer."* Write the criterion down. Date it. Keep it visible.

**Done-when criteria:** You can describe the offer in 30 seconds, name the price, name the deliverable timeline, name your kill criterion, and a literate friend can repeat it back accurately.

**Common failure modes:** Pricing too low because you're nervous (this is universal — your first instinct on price is usually 40–60% of what the market pays). Naming the offer in your own jargon instead of the buyer's. Skipping the kill criterion because writing it feels like admitting you might fail. The kill criterion is the *whole point* — it converts a vague hope into a falsifiable bet.

**AI/tool layer:**
- **Real:** Claude or ChatGPT to pressure-test offer language by simulating buyer objections. Wynter ($540+/test) for actual ICP message testing if the price tier justifies it.
- **Mostly Theater:** Any "AI offer generator" that produces a finished offer without you doing the pain research first. The output is generic.

**Iteration trigger:** First five buyer conversations. If buyers don't immediately understand the offer or push back hard on price, restructure.

**Existing RISER artifact:** The **MVO Decision Engine** Gate 04 Solution Sketch, Gate 05 Offer, Gate 06 Pricing. The **Marketing Plan Generator** outputs a complete offer angle in section 08 of every plan it produces.

---

### Step 1.4 — MVP / Service Definition

**Produces:** The actual *thing* you will deliver. For services this is a scope-of-work template. For software this is a working prototype. For productized services this is a defined deliverable package.

**Input:** Step 1.3 offer document.

**How to do it:** Write the scope of work in one page. What's included. What's not included. Timeline. Communication cadence. Revisions. Out-of-scope handling. Payment terms. For a service business, this is also where you decide what you will template, what you will custom-build, and what you will refuse to do.

For productized services (most professional services should be productized): name the package, list the exact deliverables, set the price, set the timeline, define what makes a customer eligible to buy.

**Done-when criteria:** You have an SOW you could send to a buyer this afternoon. It defines scope so clearly that you know in advance what you're delivering and so does the buyer.

**Common failure modes:** Vague scope language ("ongoing strategic guidance") that lets buyers expand the work without paying more. Missing the "out of scope" section. No defined revision limit. Promising deliverables you haven't actually built a process for.

**AI/tool layer:**
- **Real:** Claude or ChatGPT to draft the SOW from a checklist. PandaDoc or Bonsai for SOW signing infrastructure (free or low cost).
- **Mostly Theater:** Building a "Product Architect Agent" workflow before you've delivered the service to one human. Map the actual delivery from one real engagement first.

**Iteration trigger:** After the first three engagements. You will discover scope leaks and SOW gaps you didn't anticipate. Update the template.

---

## Phase 2 — Positioning and Asset Build

### What this phase produces

The artifacts a buyer encounters before they buy from you. Brand, message, lead magnet, sales page, proof. Not all of them at once — the minimum credible set.

### Why it matters

Phase 1 gave you a defensible offer. Phase 2 gives buyers a way to evaluate you without talking to you first. For high-ticket professional services, where buyers research at 11pm before deciding who to contact, the asset layer is what gets you on the consideration list. Skip it and you're invisible.

### Honest framing on this phase

You don't need a $5,000 logo. You don't need a 12-page brand bible. You don't need a hand-photographed headshot. You need the minimum credible set, deployed within a week, and you need to spend the saved time on Phase 3 outreach. Operators stall here because polishing assets feels productive. It is not. It is procrastination dressed as work.

---

### Step 2.1 — Competitive Intelligence

**Produces:** A one-page comparison matrix of three to five direct competitors — their offer, their pricing, their positioning, their lead magnet, their hook, what's working for them, what's missing.

**Input:** Phase 1 work. Knowledge of who else serves your buyer.

**How to do it:** List five competitors. Open each one's website, lead magnet (download it), pricing page (if visible), LinkedIn, and any case studies. Fill in the matrix. Note what you can't easily improve on (their credentials, their tenure) and what you can (their positioning, their offer specificity, their pain language match).

**Done-when criteria:** You can name in one sentence per competitor what's strong about their positioning and what's weak. You have an explicit "we're different from them because..." for each.

**Common failure modes:** Researching too many competitors (five is enough; ten is hiding from the work). Fixating on what they do better instead of what they leave on the table. Copying their offer instead of differentiating from it.

**AI/tool layer:**
- **Real:** Built With or SimilarWeb for tech-stack and traffic visibility on competitor sites (free or low-tier). Wayback Machine to see how their positioning has evolved.
- **Useful With Caveats:** Apify, Bright Data for scraping if you need depth. Compliance and TOS questions matter — read them.
- **Mostly Theater:** "AI-driven competitive intelligence agents" that promise daily monitoring. They produce dashboards. Dashboards are not insight.

**Iteration trigger:** Quarterly. Competitor offers and positioning shift; your matrix needs refresh.

---

### Step 2.2 — Brand & Asset Minimum Viable Set

**Produces:** A logo (or wordmark), one professional headshot, a one-page bio, a defined color palette, and a one-page service overview document. That's the minimum. Nothing more until you've closed five clients.

**Input:** Phase 1 work. Your existing materials.

**How to do it:** Use Canva or Figma. Pay $200–$500 for a wordmark on Fiverr or 99designs if you want polish. Get a real headshot — phone-camera selfie quality is fine for LinkedIn but not for an expert witness directory listing. Write the one-page bio in third person, including your specific credentials, three concrete prior accomplishments (sanitized if needed), and a clear statement of who you serve.

**Done-when criteria:** You have a presentable LinkedIn profile, a presentable directory listing draft, and a service overview PDF you can email to a prospect.

**Common failure modes:** Spending three weeks on a logo. Hiring a brand strategist before you have buyers. Writing the bio in language that sounds like every other consultant's bio.

**AI/tool layer:**
- **Real:** Canva ($15/mo) for fast asset production. Claude/ChatGPT to draft and polish the bio. Looka for $50 wordmark generation if you can't decide what you want.
- **Mostly Theater:** AI-generated "brand identity systems." Looks impressive, costs significant time, doesn't move buyers. Save brand investment for after you have customer feedback.

---

### Step 2.3 — Lead Magnet (Gift First)

**Produces:** A specific, valuable, narrow asset that solves one micro-problem for your buyer in exchange for their email or a 15-minute call. Not a generic ebook. A diagnostic checklist, a calculator, a contract review template, a five-page "how to evaluate X" guide.

**Input:** Phase 1 pain doc. Knowledge of buyer's specific decision moments.

**How to do it:** Pick the buyer's most concrete sub-pain. Build the asset that solves it. Constraint: this asset should be useful even if the buyer never works with you. That's what triggers reciprocity (Cialdini). A bait-and-switch lead magnet that turns into a pitch deck does not work and damages trust.

**Done-when criteria:** A buyer who downloads this asset finds it genuinely useful and would tell a colleague about it. You've tested this with two real buyers before launch.

**Common failure modes:** Generic "10 tips for X" content. Disguised pitch decks. Asset is too long (40 pages = won't be read) or too short (one tip = not worth the email).

**AI/tool layer:**
- **Real:** Claude/ChatGPT to draft the asset content. Canva or Figma for layout. ConvertKit, Beehiiv, or Mailchimp for email delivery infrastructure.
- **Mostly Theater:** "AI lead magnet generators" that produce generic content with no specific buyer in mind.

**Existing RISER artifact:** The **Marketing Plan Generator** generates a specific lead-magnet recommendation for any profession+avatar combination as section 05 of every plan.

---

### Step 2.4 — Sales Page / Service Page

**Produces:** A single page on your website (or a one-page Notion/Carrd if you're moving fast) that names the buyer, the pain, the offer, the proof, and the next step. Not a homepage. A targeted page for the specific avatar you're going after.

**Input:** All prior Phase 1 and 2 work.

**How to do it:** Use the long-form direct response structure: hook → problem → why-other-things-fail → mechanism → proof → offer → bonuses (only if real) → guarantee or risk reversal → CTA. Write it once, in their voice. Word count: 800–1,500 for a high-ticket service.

**Done-when criteria:** A cold buyer can read the page and either qualify themselves in (book a call) or qualify out (close the tab). It does both jobs without making them work.

**Common failure modes:** Writing about yourself instead of the buyer. Burying the offer below the fold. Vague CTAs ("Get in touch"). No social proof. No risk reversal.

**AI/tool layer:**
- **Real:** Webflow, Carrd, Framer for fast page hosting. Claude/ChatGPT for copy iteration (it's good at this when you give it Phase 1 buyer language).
- **Useful With Caveats:** Hyros, Triple Whale for tracking — only if your spend justifies it.
- **Mostly Theater:** "AI website builders" that promise full sites in one click. Outputs are generic. Use a template instead.

---

## Phase 3 — Acquisition

### What this phase produces

Real buyer conversations. Not awareness. Not "thought leadership." Conversations with named humans who could pay you, where they say yes, no, or "tell me more."

### Why it matters

Everything in Phases 1 and 2 is unfalsifiable until Phase 3 puts it in front of buyers. Operators who linger in 1 and 2 are usually avoiding the discomfort of 3. The cure is to launch publicly before you feel ready, then let real feedback drive the iterations.

### The order matters

For high-ticket professional services, run these channels in this order. Don't run them in parallel until each is proven.

1. **Warm outreach** to your existing network (week one)
2. **Dream 100 cold outreach** to named humans in your target market (week two)
3. **Content distribution** on the platforms your buyers actually use (ongoing from week one)
4. **Paid ads** only after channels 1–3 produce signal

---

### Step 3.1 — Warm Network Outreach

**Produces:** 5–15 conversations with people who already know you, plus a list of 20–50 introductions they could make to people you don't know.

**Input:** Phase 1 and 2 assets. Your contact list.

**How to do it:** Write a 4–6 sentence note. Tell them what you're doing now. Ask if they know anyone in your target buyer category. Offer to do something useful for them in return. Send it to everyone you've worked with in the last decade. Include the lead magnet as a gift.

**Done-when criteria:** All notes sent within seven days. Track replies. Track who introduces you. Follow up.

**Common failure modes:** Hiding from this step because asking former colleagues feels needy. (It is not. It is normal professional behavior.) Not having anything specific to ask for. Asking for "any help" instead of "an introduction to anyone you know who handles construction defect cases."

**AI/tool layer:**
- **Real:** Your existing inbox and LinkedIn. Claude/ChatGPT to personalize each outreach note from a base template. Notion or a simple spreadsheet to track responses.
- **Mostly Theater:** Automating warm outreach. The whole point is the personal note.

**Existing RISER artifact:** The **Marketing Plan Generator** outputs a LinkedIn first-touch template, a cold-email template, and a community-reply template in section 09 of every plan it produces. Adapt those for warm context.

---

### Step 3.2 — Dream 100 List Building

**Produces:** A spreadsheet of 100 named humans in your target buyer category — name, title, firm, geography, contact route, and one specific reason this person fits.

**Input:** Phase 1 buyer definition.

**How to do it:** Use the segment breakdown from the **Client Acquisition Catalog Dream 100 template** (or build your own equivalent). For a forensic engineer that's roughly: 25 construction defect attorneys + 25 insurance defense attorneys + 15 subrogation managers + 15 mechanical contractor GCs + 10 property management firms + 10 technical committee chairs.

For each, find them on LinkedIn (Sales Navigator helps), record their firm, find their email (Apollo, Hunter, or guessable patterns), record one specific thing they do that's relevant. The "one specific thing" prevents your outreach from being generic.

**Done-when criteria:** 100 names. Real ones. Verified contact info for at least 70 of them. Notes column filled in for at least 50.

**Common failure modes:** Listing firm names instead of human names. Stopping at 30 because the list is "good enough" (it isn't — Dream 100 works because of compounding, not because the first 30 are special). Skipping the "one specific thing" column.

**AI/tool layer:**
- **Real:** LinkedIn Sales Navigator ($99/mo). Apollo (free tier or $59/mo). PACER ($0.10/page) for federal court records to identify attorneys handling specific case types. Justia for free legal directory search. A spreadsheet (Google Sheets is fine).
- **Useful With Caveats:** Clay ($149+/mo) if you want enrichment-and-personalization-at-scale workflow. Steep learning curve. Probably overkill until you have 30+ confirmed buyers in pipeline.
- **Mostly Theater:** "AI SDR agents" that build the list and personalize the outreach for you autonomously. They produce volume. Volume is not the bottleneck. Specificity is.

**Existing RISER artifact:** The **Client Acquisition Catalog** has the full tool stack with verified pricing, organized by channel. The Dream 100 template segment-counts are inside the catalog.

**Risks worth flagging:** LinkedIn TOS prohibits most automation. Sales Navigator usage is fine. Tools that auto-message people through LinkedIn risk account suspension and have killed many an outreach plan.

---

### Step 3.3 — Dream 100 Outreach Cadence

**Produces:** First-touch messages sent to all 100 people, follow-up sequence executed, conversations started.

**Input:** Step 3.2 list. Step 2.3 lead magnet.

**How to do it:** Six-touch cadence over 8 weeks. Mix LinkedIn, email, and (where appropriate) phone. Each touch is short, specific, value-first. Open with the "one specific thing" you noted. Reference a real signal — they posted something, their firm just took on a relevant case, an industry event happened. Lead-magnet offer can come on touch 2 or 3, never touch 1.

Run the cadence as a deliberate practice. 15 outreach touches per workday is the right volume for a solo professional. More than that and quality drops. Less than that and momentum dies.

**Done-when criteria:** All 100 people have received at least four touches across 8 weeks. Conversation rate of 8–15% (8–15 named people responded with interest) is normal. Less than 5% means the message is wrong; rewrite. More than 25% means the targeting got lucky; verify before scaling.

**Common failure modes:** Sending touch 1 to all 100 then giving up when 92 ignore you. (The compounding is in touches 3–6.) Generic copy that ignores the "one specific thing." Pitching the offer on touch 1.

**AI/tool layer:**
- **Real:** Smartlead or Instantly ($39–94/mo) for cold-email infrastructure (deliverability matters). HubSpot CRM Free or Pipedrive ($25/seat) for tracking touches. Calendly for booking the calls that result.
- **Useful With Caveats:** Lemlist ($59+/mo) — premium worth it only if you actually use the personalization features. Otherwise overpriced versus Smartlead.
- **Mostly Theater:** Cold-outreach AI that generates "100% personalized" messages. The personalization is shallow. Buyers can tell. Better to send fewer messages with real personalization than more with fake.

**Risks:** Email deliverability. Sending 100 cold emails from a fresh domain will land you in spam folders. Use a separate sending domain, warm it up over 4–6 weeks, follow SPF/DKIM/DMARC standards. Smartlead handles this; sending from your business Gmail does not.

For licensed professionals: state bar associations and professional licensing boards have rules about solicitation. Consult yours before launching cold outreach. Some states prohibit certain cold-contact patterns for attorneys, doctors, and engineers in regulated practice.

---

### Step 3.4 — Content Distribution Cadence

**Produces:** A consistent, multi-month flow of content on the platform(s) your buyers actually inhabit, building credibility while warm and Dream 100 outreach runs in parallel.

**Input:** Phase 1 pain doc. Phase 2 positioning. Knowledge of where buyers actually gather.

**How to do it:** Pick *one* primary platform. For high-ticket professional services in 2026, that's almost always LinkedIn. Possibly an industry-specific publication (ABA Journal, ASHRAE Journal, etc.) for the highest-credentialing-value plays. Don't multi-platform until the primary one is producing.

The content cadence framework that works:

- **Monday — Pain post.** A real piece of buyer pain, observed or quoted, with your take. 150–300 words.
- **Wednesday — Mechanism post.** A specific technical observation or framework, in your area of expertise. 200–400 words. This is the "I know things" post.
- **Friday — Case study or proof.** A sanitized story from your work, or a public case dissected. 250–500 words.

Three posts a week. Same days. Same time. For 12 weeks before evaluating. The discipline matters more than the volume — buyers notice consistency over six months.

**Done-when criteria:** 12 weeks of consistent posting. Engagement metrics matter less than reach growth and the qualitative feedback that comes in (DMs, comments, lurkers reaching out). The right buyers reading you silently for 8 weeks before contacting you is the dominant pattern.

**Common failure modes:** Multi-platforming too early (LinkedIn + X + Instagram + TikTok). Posting whenever you "feel inspired" instead of on cadence. Generic "thought leadership" posts that aren't grounded in real buyer pain. Stopping after three weeks because results aren't visible.

**AI/tool layer:**
- **Real:** Claude/ChatGPT to draft and refine post copy from your raw notes. Buffer or Hypefury for scheduling. Notion for content calendar.
- **Useful With Caveats:** Repurpose.io, OpusClip for converting long-form (podcast, video) into short-form social posts. Useful if you're already producing long-form. Theater if you're not.
- **Mostly Theater:** AI tools that "generate a year of content in 10 minutes." The output is generic. It does not move buyers. Worse, it identifies you as someone using AI to generate content, which actively damages credibility for high-ticket professional services. This is **Identity Commoditization** in action — see the Closing section for the full framing of why generic AI output collapses your price floor.

**The honest tradeoff:** AI can save 30–50% of your time on the *editing* and *formatting* layer. It cannot save time on the *thinking* layer. The thinking is the work. If you're using AI to skip the thinking, you're skipping the value.

---

### Step 3.5 — Paid Channels (Defer Until Earned)

**Produces:** Scaled distribution of proven content/offers, after warm and Dream 100 outreach have produced consistent close signal.

**Input:** Steps 3.1–3.4 producing measurable conversation rate, close rate, and lifetime value data. You need at least 10 closed clients before you have any business spending on paid ads.

**How to do it:** This step is deferred for most professional service operators for 6–12 months. The reason: high-ticket service buyers don't typically respond to paid ads the way e-commerce buyers do. Your CAC math has to work, and it usually doesn't until you've validated the funnel manually.

When you do enter paid: start with one platform (LinkedIn ads if your buyer is on LinkedIn; Google Search if they search for your category; Meta only if your buyer demographic is verified active there). Set a hard monthly cap. Track CAC and LTV explicitly. Cut spend the moment CAC > 0.33 × LTV.

**Done-when criteria:** Active paid channel with measurable CAC under your threshold and predictable conversion rate over a 60-day window.

**Common failure modes:** Running paid before manual outreach has validated message-market fit. Boosting LinkedIn posts (almost never worth it for high-ticket B2B). Treating paid as a substitute for organic instead of an amplifier of organic.

**AI/tool layer:**
- **Real:** Native ad platforms. Hyros or Triple Whale for tracking only if spend justifies it.
- **Mostly Theater:** "AI ad optimizer" tools that promise to manage your campaigns. The platforms' built-in optimization is now better than most third-party tools.

---

## Phase 4 — Operations and Delivery

### What this phase produces

The systems that let you deliver promised outcomes consistently, capture knowledge from every engagement, and maintain quality as volume increases. SOPs, templates, knowledge management, and the boring infrastructure that prevents the business from collapsing under its own success.

### Why it matters

Phase 3 will produce clients faster than you expect once it works. Operators without Phase 4 systems compound chaos with every new client. Within six months they're working 70-hour weeks, dropping deliverables, and the original positioning erodes.

This phase runs in parallel with Phase 3 from the moment your first client signs. Don't wait until you're overwhelmed to start.

---

### Step 4.1 — Client Onboarding SOP

**Produces:** A documented, repeatable process for taking a signed client from "yes" to "first deliverable" without anything falling through the cracks.

**Input:** Phase 1 SOW template. Your delivery process from your first three engagements.

**How to do it:** Document the process. Welcome email template. Kickoff-call agenda. Information-gathering checklist. Project-folder template. Communication-cadence agreement. Payment-collection workflow. The first time you do this it takes a day. Every time after that it saves a day.

**Done-when criteria:** A new client signs and the first 14 days run identically each time, with no email you have to write from scratch and no question you have to look up.

**Common failure modes:** Reinventing the onboarding for each client. Not having a kickoff agenda. Forgetting to invoice. Missing the information-gathering step and getting blocked mid-engagement.

**AI/tool layer:**
- **Real:** Notion or Process Street for SOP storage. Loom for recording explainer videos once and reusing them. Calendly for scheduling. PandaDoc or Bonsai for contract+invoice infrastructure.
- **Useful With Caveats:** Bonsai or HoneyBook for end-to-end client management — useful if you want one tool, costlier than piecing tools together.
- **Mostly Theater:** AI "client onboarding agents." Onboarding is relationship-building. Automate the *reminders* and *templates*; do the relationship work yourself.

---

### Step 4.2 — Delivery SOP

**Produces:** A documented, repeatable process for delivering the actual service, from start of engagement to final deliverable to client offboarding.

**Input:** Step 4.1 onboarding output. Your delivery method from prior work.

**How to do it:** Document each phase of delivery. Templates for each artifact you produce. Quality checklists. Internal review steps. Time-tracking convention. Client communication touchpoints. For technical work (forensic engineering, expert witness reports), include the credentialing-and-citation discipline that protects your work product from challenge.

**Done-when criteria:** A new engagement of the same type as a prior engagement takes 30–50% less time on the second iteration than the first, because the templates and checklists carry the load.

**Common failure modes:** No quality checklist (every deliverable is bespoke and inconsistent). No time tracking (you discover after-the-fact you priced wrong). No internal review step (errors ship to client).

**AI/tool layer:**
- **Real:** Notion or Confluence for SOP storage. Toggl or Harvest for time tracking. Claude/ChatGPT for first-draft generation of report sections that have known patterns.
- **Useful With Caveats:** Tana, Reflect, Mem for AI-assisted note-taking. Genuinely useful for knowledge capture across many engagements. Learning curve is real.
- **Mostly Theater:** AI tools that promise to "automate your delivery." If your service is high-ticket, the delivery is the value. Don't automate the value.

---

### Step 4.3 — Knowledge Management

**Produces:** A growing internal library of every successful artifact (winning emails, approved report sections, effective objection responses, sanitized case examples) organized for fast retrieval and reuse.

**Input:** Every client engagement, ongoing.

**How to do it:** After each engagement, spend 30 minutes capturing what worked. Tag it. File it. Make it findable. Within 12 months you have a "winners library" that compounds — each new engagement starts 60% complete because templates exist.

**Done-when criteria:** When starting any new artifact, you can find at least one prior version to start from in under 60 seconds.

**Common failure modes:** Capturing nothing (everything is rebuilt from scratch). Capturing everything (the library is too big to navigate). No tagging convention.

**AI/tool layer:**
- **Real:** Notion or Obsidian. Tana for advanced relational tagging. Search-friendly file naming.
- **Useful With Caveats:** Mem.ai, Reflect — AI-native note systems. Promising; learning curve and lock-in risk.

---

### Step 4.4 — Tech Stack Hygiene

**Produces:** A documented inventory of every tool you use, what it does, what it costs, who has access, what data it holds, and when it's reviewed for replacement or cancellation.

**Input:** All your existing subscriptions and tools.

**How to do it:** One spreadsheet. Quarterly review. Cancel anything not actively used. Note any tool with sensitive client data (CRM, file storage, email infrastructure) and verify their security posture.

**Done-when criteria:** No surprise charges. No forgotten tools. No "wait, where did I store that file?" moments.

**Common failure modes:** Tool sprawl. Three CRMs, two email-marketing platforms, four file-storage services. Each one $30–100/month, none of them used fully.

**AI/tool layer:**
- **Real:** Just a spreadsheet. Vertice or Cledara if your tool spend exceeds $2K/month and you want active SaaS management.
- **Mostly Theater:** "AI-driven tech stack auditors." Most professional service operators have 8–15 tools, not 80. A spreadsheet review takes an hour.

---

## Phase 5 — Iteration and Scale

### What this phase produces

Continuous learning that flows back into Phases 1–4, compounding the business's effectiveness over time. This is the only phase that has no end state.

### Why it matters

The original document called this the "Master Loop" and described it in mythology. The real version is unglamorous: review your numbers monthly, review your buyer feedback quarterly, review your offer and positioning annually, kill what isn't working, double down on what is.

### Honest framing on this phase

Most operators skip Phase 5 entirely. They run Phases 1–4 once, get a working business, and stop iterating. Within 18–24 months their offer is stale, their content is repetitive, their CAC is climbing, and they don't know why. Phase 5 is the boring discipline that prevents this.

---

### Step 5.1 — Monthly Metrics Review

**Produces:** A one-page dashboard reviewed once per month showing the metrics that matter for your business.

**Input:** Data from your CRM, your email tool, your accounting, your time-tracking.

**How to do it:** Track only the metrics you can actually act on. For most professional service operators that's: number of conversations started, number of qualified opportunities, number closed, average deal value, lifetime value, CAC, hours per engagement, revenue per hour. Eight numbers. Review monthly. Note trends.

**Done-when criteria:** First Monday of every month, the dashboard is updated, you've spent 30 minutes reviewing it, you've decided one thing to change based on what it says.

**Common failure modes:** Tracking 40 metrics (paralysis). Tracking vanity metrics (LinkedIn impressions). Reviewing the dashboard but never changing anything based on it.

**AI/tool layer:**
- **Real:** Google Sheets. Notion databases. HubSpot or Pipedrive reports. Stripe dashboard for revenue.
- **Mostly Theater:** "AI-powered analytics dashboards" with 50 widgets and no actionable insight.

---

### Step 5.2 — Quarterly Buyer Feedback

**Produces:** Direct conversation with at least 5 recent clients each quarter, capturing what worked, what didn't, what they'd change, and what they'd buy next.

**Input:** Your client list.

**How to do it:** Schedule four 30-minute calls per quarter with recent clients. Open-ended questions. Record (with permission). Capture verbatim quotes. Look for patterns across calls.

**Done-when criteria:** Every quarter, you have new buyer language and new insights flowing back into your offer, content, and SOPs.

**Common failure modes:** Skipping these calls because they feel awkward to ask for. Asking only people who liked you (selection bias). Hearing feedback and not acting on it.

**AI/tool layer:**
- **Real:** Otter.ai, Fathom, Granola for transcription. Claude/ChatGPT to synthesize themes across transcripts.

---

### Step 5.3 — A/B Testing (Earned)

**Produces:** Continuous optimization of your highest-volume marketing assets — sales page, lead magnet, email subject lines, ad creative — based on real conversion data.

**Input:** Sufficient traffic volume to actually have statistical significance. For most professional service operators this means 1,000+ page visits per month per asset. Below that, A/B testing is theater.

**How to do it:** Test one variable at a time. Define hypothesis upfront. Run until significance (or 4 weeks max). Document the result. Apply the winner. Move to the next test.

**Done-when criteria:** Each high-volume asset has been through at least 4 deliberate test cycles per year.

**Common failure modes:** Testing without enough traffic (you'll get random noise). Testing too many variables at once. Calling a test winner before it reaches significance. Forgetting which variant won and why.

**AI/tool layer:**
- **Real:** Native A/B in your email tool, ad platform, and CMS (most have it built-in). VWO, Optimizely if you have real volume.
- **Mostly Theater:** AI-driven "auto-optimization." Useful at scale (Meta, Google ads platforms run their own); the third-party "AI testing agents" mostly recreate functionality the platforms already have.

---

### Step 5.4 — Offer and Positioning Refresh

**Produces:** Annual review of your core offer, positioning, pricing, and target buyer. Either confirmation that it's still right, or deliberate evolution.

**Input:** Phase 5 metrics. Quarterly buyer feedback. Competitive landscape changes.

**How to do it:** Once a year, block a full day. Review your Phase 1 documents. Are they still accurate? Has the buyer pain shifted? Has your delivery capability evolved? Is your pricing still right? Decide what to keep, what to evolve, what to retire.

**Done-when criteria:** End of each year, you have an explicit decision: "this is still the offer for next year" or "here is what changes."

**Common failure modes:** Skipping the annual review. Refreshing the offer without buyer feedback to support it. Refreshing for vanity reasons (you got bored) instead of strategic ones.

---

### Step 5.5 — Scale Decision

**Produces:** A deliberate choice about whether to scale vertically (more clients in same niche), horizontally (same offer in adjacent niches), or stay solo.

**Input:** 18+ months of operating data. Honest self-assessment of what you actually want.

**How to do it:** This decision is more about you than about the business. Some operators want to stay a solo expert with high margins and short hours. Some want to build a firm. Both are legitimate. The mistake is drifting into one without choosing.

If scaling vertically: hire associate practitioners, document delivery extensively, develop training for them, plan for quality control. If scaling horizontally: pilot the new niche before committing, treat it as Phase 1 again from scratch. If staying solo: raise prices.

**Done-when criteria:** Explicit written decision with criteria for revisiting.

**Common failure modes:** Drifting into scaling because it sounds like success. Hiring before SOPs are documented (chaos compounds). Hiring before you've explicitly chosen what role you want.

---

## The Feedback Loops

The original document called this the "Master Loop." Here are the actual loops, named honestly:

**Phase 5.1 metrics → Phase 1.2 pain doc.** When your conversation rate or close rate drops, the message has stopped resonating. The buyer's pain has shifted. Re-do pain discovery.

**Phase 5.2 buyer feedback → Phase 2.3 lead magnet, Phase 2.4 sales page, Phase 1.3 offer.** Buyer language captured in feedback calls flows directly into asset copy. Their objections become your FAQ. Their unmet needs become your next offer.

**Phase 5.3 A/B test results → Phase 2 assets, Phase 3.4 content cadence.** Winning variants get codified. Losing patterns get retired.

**Phase 4.3 knowledge library → Phase 3.4 content, Phase 2.3 lead magnet.** Your sanitized case examples become content. Your most-asked questions become lead magnets. The library compounds the marketing.

**Phase 5.4 offer refresh → all of Phase 1.** Once a year, the entire foundation gets revisited.

These loops are not magic. They are scheduled review meetings with yourself. The discipline is in keeping them on the calendar.

---

## Closing — What Makes This Work

This document gives you structure. It does not give you discipline. The structure is portable; discipline is not. The operators who will get value from this skeleton are the ones who:

- Walk Phase 1 fully before launching, even when it feels slow
- Set kill criteria and honor them
- Track what's working and what isn't, monthly
- Talk to actual buyers, quarterly
- Refresh the foundation, annually
- Resist the temptation to add tools, agents, and complexity in place of doing the work

The "agentic" layer in 2026 is real for narrow jobs. It is mostly theater for unbounded creative or strategic work. AI saves 30–50% of time on editing, formatting, and synthesis tasks. It does not save time on thinking, on listening to buyers, on building credibility, or on the relationship work that actually closes high-ticket professional service engagements. Operators who try to substitute AI for those things produce volume without conversion.

### The Identity Commoditization risk

This is the meta-risk that runs across every phase of this document, and it deserves to be named explicitly.

**The mechanism:** When ten operators in your niche all use the same AI tools with similar prompts to produce content, outreach, lead magnets, and proposals, their output converges. Buyers can tell. Not always consciously — sometimes just as a vague sense that "everyone sounds the same now." When that happens at scale, the entire niche commoditizes. Buyers stop trying to identify the best provider and shop on price. Your price floor collapses. Your margin compresses. The work you trained for thirty years to do gets valued like a generic service.

**Why this is the central 2026 risk for high-ticket professional services:** Your buyer is paying premium prices because you bring something specific — credentials, judgment, a way of seeing problems, a track record. AI commodifies the wrappers around those things (your emails, your posts, your reports) faster than it commodifies the substance. If the wrappers all look the same, buyers default to lowest price because they cannot tell the substance apart from outside.

**How to defend against it:**

- **Use AI for editing and synthesis, never for thinking.** Draft your post yourself, then have AI tighten it. Not the other way around.
- **Feed your AI tools your specific intellectual property** — your prior reports, your characteristic phrases, your case examples, your point of view. A model with no context about you produces generic output. A model fed your archive produces output in your voice. This is what the Knowledge Management library in Step 4.3 is actually for.
- **Reserve the highest-stakes artifacts for hand-craftsmanship.** Sales pages, expert reports, depositions, anything a buyer reads carefully — these get written by you, not by AI. Use AI to refine, never to generate.
- **Make your content carry signals only you can produce.** Specific case numbers from your prior work. A photograph from a job site. A technical diagram in your hand. A recording of your voice. Anything that proves a human did the work.
- **Audit yourself quarterly.** Read three of your recent outreach messages aloud. Read three competitor outreach messages aloud. If you can't immediately tell which is yours, you have a problem.

The operators who win in 2026 use AI as a force multiplier on a distinctive practice. The operators who lose use AI as a substitute for one. Same tools, opposite outcomes.

The work is the work. This document tells you what the work is and in what order. The rest is on you.

---

## Where the existing RISER artifacts fit

| Phase / Step | RISER artifact |
|---|---|
| 1.2 Pain Discovery | MVO Decision Engine (Gates 00½, 01) · Pain Discovery Tool Catalog (41 tools) |
| 1.3 Offer Hypothesis | MVO Decision Engine (Gates 04–06) · Marketing Plan Generator (section 08 of every plan) |
| 1.4 MVP Definition | MVO Decision Engine (full 17-gate sequence) |
| 2.1 Competitive Intel | MVO Decision Engine (Gate 03 Competitive Moat) |
| 2.3 Lead Magnet | Marketing Plan Generator (section 05 of every plan) |
| 3.1 Warm Outreach | Marketing Plan Generator (section 09 outreach scripts) |
| 3.2 Dream 100 | Client Acquisition Catalog (Dream 100 template, 39-tool stack) |
| 3.3 Outreach Cadence | Marketing Plan Generator (section 09) · Client Acquisition Catalog (Channel 6 outreach + CRM) |
| 3.4 Content Distribution | Marketing Plan Generator (section 03 Where They Gather, section 04 Channel Priority, sections 06+07 hook/headline/cadence) |

The widgets generate the artifacts. This document tells you when and why to use them. Together they form a working operator's plan, not an unbeatable mastermind 2026 unstoppable scaling agentic essay.

The work is the work.

**Captain out.**
Original asset: RISER-Step-1.1-Idea-Capture.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Step 1.1 Idea Capture · RISER Operator's Flow</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=Inter+Tight:[email protected]&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
  --ink: #0a0a0a; --paper: #f7f4ee; --paper-warm: #f0eadf; --paper-deep: #e9e2d2;
  --rule: #1a1a1a; --red: #c9302a; --red-deep: #8b1f1c; --red-tint: #fbe8e6;
  --green: #1d6e3a; --green-tint: #dcefe2; --gold: #b8893a; --gold-tint: #f5ead0;
  --teal: #2c5f5a; --teal-tint: #d8e6e4; --muted: #5a564f;
  --serif: 'Fraunces', Georgia, serif;
  --sans: 'Inter Tight', -apple-system, sans-serif;
  --mono: 'JetBrains Mono', Menlo, monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body { font-family: var(--sans); background: var(--paper); color: var(--ink); line-height: 1.55; font-size: 15px; min-height: 100vh; }
main { max-width: 900px; margin: 0 auto; padding: 40px 32px 80px; }
.toc-link { display: inline-block; font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); text-decoration: none; margin-bottom: 24px; }
.toc-link:hover { color: var(--red-deep); }
.masthead { border-bottom: 3px double var(--rule); padding-bottom: 24px; margin-bottom: 32px; }
.kicker { font-family: var(--mono); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted); margin-bottom: 12px; display: flex; align-items: center; gap: 14px; }
.kicker::after { content: ''; flex: 1; height: 1px; background: var(--rule); opacity: 0.3; }
.title { font-family: var(--serif); font-weight: 600; font-size: clamp(32px, 4.5vw, 48px); line-height: 1.05; letter-spacing: -0.025em; margin-bottom: 14px; }
.title em { font-style: italic; font-weight: 400; color: var(--red-deep); }
.subtitle { font-family: var(--serif); font-style: italic; font-size: 17px; color: var(--muted); max-width: 720px; line-height: 1.5; }
.stages { display: flex; gap: 0; margin: 18px 0 24px; border: 1.5px solid var(--rule); background: var(--paper-warm); font-family: var(--mono); font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; }
.stage-pill { flex: 1; padding: 10px 14px; border-right: 1.5px solid var(--rule); color: var(--muted); display: flex; align-items: center; gap: 10px; }
.stage-pill:last-child { border-right: none; }
.stage-pill .num { width: 22px; height: 22px; border: 1.5px solid currentColor; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-weight: 700; font-size: 11px; flex-shrink: 0; }
.stage-pill.active { background: var(--ink); color: var(--paper); font-weight: 700; }
.field { margin-bottom: 24px; }
.field-label { display: block; font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--red-deep); font-weight: 700; margin-bottom: 8px; }
.field-help { font-family: var(--serif); font-style: italic; font-size: 14px; color: var(--muted); margin-bottom: 10px; line-height: 1.45; }
input[type="text"], input[type="password"], textarea, select { width: 100%; padding: 12px 16px; font-family: var(--sans); font-size: 15px; border: 1.5px solid var(--rule); background: var(--paper); color: var(--ink); border-radius: 0; transition: border-color 0.15s, background 0.15s; }
input:focus, textarea:focus, select:focus { outline: none; border-color: var(--red-deep); background: #fff; }
textarea { resize: vertical; min-height: 100px; line-height: 1.5; font-family: var(--sans); }
.field-primary { background: var(--paper-warm); border: 1.5px solid var(--rule); border-left: 4px solid var(--red-deep); padding: 22px 24px 24px; margin-bottom: 28px; box-shadow: 4px 4px 0 var(--rule); }
.field-primary .field-label { font-family: var(--serif); font-size: 22px; letter-spacing: -0.015em; text-transform: none; color: var(--ink); font-weight: 600; margin-bottom: 6px; line-height: 1.2; }
.field-primary input[type="text"], .field-primary textarea, .field-primary select { font-size: 17px; padding: 14px 18px; border-width: 2px; }
.btn { font-family: var(--mono); font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; padding: 12px 22px; border: 1.5px solid var(--rule); background: var(--paper); color: var(--ink); cursor: pointer; transition: all 0.12s; font-weight: 600; text-decoration: none; display: inline-block; }
.btn:hover:not(:disabled) { background: var(--ink); color: var(--paper); }
.btn:disabled { opacity: 0.35; cursor: not-allowed; background: var(--paper-deep) !important; color: var(--muted) !important; border-color: var(--muted) !important; }
.btn-primary { background: var(--red-deep); color: var(--paper); border-color: var(--red-deep); }
.btn-primary:hover:not(:disabled) { background: var(--red); border-color: var(--red); }
.btn-ghost { border-color: var(--muted); color: var(--muted); }
.btn-row { display: flex; gap: 12px; margin-top: 28px; flex-wrap: wrap; align-items: center; }
.banner { padding: 14px 18px; font-size: 14px; border-left: 4px solid; margin-bottom: 20px; font-family: var(--serif); line-height: 1.5; }
.banner-info { background: var(--teal-tint); border-color: var(--teal); color: var(--teal); }
.banner-warn { background: var(--red-tint); border-color: var(--red-deep); color: var(--red-deep); }
.banner-success { background: var(--green-tint); border-color: var(--green); color: var(--green); }
.banner strong { font-weight: 700; }
.api-key-section { margin-top: 24px; padding: 20px; background: var(--paper-warm); border: 1.5px solid var(--rule); }
.api-key-section h3 { font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--red-deep); font-weight: 700; margin-bottom: 8px; }
.api-key-section p { font-size: 13px; color: var(--muted); margin-bottom: 12px; line-height: 1.45; }
.api-key-section input[type="password"] { font-family: var(--mono); font-size: 13px; }
.model-toggle { display: flex; gap: 8px; margin-top: 12px; }
.model-toggle button { flex: 1; padding: 8px 12px; font-family: var(--mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; background: var(--paper); border: 1.5px solid var(--rule); cursor: pointer; font-weight: 600; }
.model-toggle button.active { background: var(--ink); color: var(--paper); }
.loading-state { text-align: center; padding: 50px 20px; font-family: var(--serif); font-style: italic; font-size: 17px; color: var(--muted); }
@keyframes pulse-dot { 0%, 80%, 100% { opacity: 0.3; } 40% { opacity: 1; } }
.dot { animation: pulse-dot 1.4s infinite ease-in-out; display: inline-block; font-size: 24px; }
.dot:nth-child(2) { animation-delay: 0.2s; }
.dot:nth-child(3) { animation-delay: 0.4s; }
.loading-step-text { font-family: var(--mono); font-style: normal; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; margin-top: 16px; color: var(--red-deep); font-weight: 600; }
.output-box { background: var(--paper-warm); border: 1.5px solid var(--rule); border-left: 4px solid var(--gold); padding: 22px 24px; margin: 18px 0; }
.output-box h4 { font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--red-deep); font-weight: 700; margin-bottom: 10px; }
.output-box .output-content { font-family: var(--serif); font-size: 16px; line-height: 1.6; white-space: pre-wrap; }
.output-meta { font-family: var(--mono); font-size: 11px; color: var(--muted); margin-top: 12px; letter-spacing: 0.04em; }
.card { background: var(--paper); border: 1.5px solid var(--rule); padding: 22px 24px; margin-bottom: 18px; }
.card-warm { background: var(--paper-warm); }
.card-header { display: flex; align-items: baseline; gap: 14px; margin-bottom: 14px; border-bottom: 1.5px solid var(--rule); padding-bottom: 10px; }
.card-num { font-family: var(--mono); font-size: 11px; font-weight: 700; color: var(--red-deep); letter-spacing: 0.1em; }
.card h3 { font-family: var(--serif); font-size: 22px; font-weight: 600; letter-spacing: -0.015em; flex: 1; line-height: 1.2; }
.card p { font-family: var(--serif); font-size: 15px; line-height: 1.55; margin-bottom: 10px; }
.copy-btn { font-family: var(--mono); font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; font-weight: 600; padding: 6px 12px; border: 1.5px solid var(--rule); background: var(--paper); color: var(--ink); cursor: pointer; transition: all 0.12s; margin-left: 8px; }
.copy-btn:hover { background: var(--ink); color: var(--paper); }
.copy-btn.copied { background: var(--green); color: var(--paper); border-color: var(--green); }
.setup-hint { font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; color: var(--red-deep); margin-top: 12px; padding: 10px 14px; background: var(--red-tint); border-left: 3px solid var(--red-deep); }
@media print { body { background: #fff; font-size: 11pt; } .api-key-section, .btn-row, .toc-link { display: none !important; } main { padding: 0; max-width: 100%; } .card, .output-box { background: #fff !important; border: 1px solid #555 !important; page-break-inside: avoid; } @page { margin: 0.6in; size: letter; } }
</style>
</head>
<body>
<main>
  <a href="RISER-Suite-Index.html" class="toc-link">← Suite Index · Table of Contents</a>

  <div class="masthead">
    <div class="kicker">Phase 1 · Step 1.1 · Idea Capture</div>
    <h1 class="title">Capture your <em>idea</em> in one paragraph</h1>
    <p class="subtitle">200 words. Five sentences. Buyer + problem + solution + price tier + why you. The constraint forces clarity. This paragraph becomes the foundation for every step that follows.</p>
  </div>

  <div class="stages">
    <div class="stage-pill active"><span class="num">1</span><span>Your raw idea</span></div>
    <div class="stage-pill" id="stage-2-pill"><span class="num">2</span><span>Refined paragraph</span></div>
    <div class="stage-pill" id="stage-3-pill"><span class="num">3</span><span>Save & next step</span></div>
  </div>

  <section id="stage-input">
    <div class="card">
      <div class="card-header"><div class="card-num">START</div><h3>Tell me about your business idea</h3></div>
      <p>Free-form. Don't try to structure it yet. Tell me what you're thinking about, who you think it's for, what problem you think it solves, what makes you the right person, and roughly what you'd charge. If you don't know one of those yet, just say so — Claude will help you sharpen what's missing.</p>
    </div>

    <div class="field field-primary">
      <label class="field-label" for="business-model">Your business model</label>
      <p class="field-help">Pick the closest fit. This shapes how Claude refines your idea — an Etsy seller's plan looks different from a forensic engineer's.</p>
      <select id="business-model">
        <option value="">— Pick one —</option>
        <option value="product-physical">Physical product / Etsy / DTC (handmade goods, branded products, supplements)</option>
        <option value="product-digital">Digital product / content (course, ebook, template, SaaS, paid newsletter)</option>
        <option value="service-pro">Professional service (consulting, expert witness, legal, accounting, agency)</option>
        <option value="service-coaching">Coaching / training (life, fitness, business, relationship)</option>
        <option value="service-local">Local / brick-and-mortar (restaurant, gym, med spa, contractor)</option>
        <option value="creator">Creator / influencer (podcast, YouTube, newsletter)</option>
        <option value="affiliate-mlm">Affiliate / partnership / MLM</option>
        <option value="other">Other / hybrid (specify in your idea below)</option>
      </select>
    </div>

    <div class="field">
      <label class="field-label" for="raw-idea">Your idea, in your own words</label>
      <p class="field-help">Anywhere from 30 to 300 words. The more specific you are, the better Claude can refine it. If something is unclear or unknown, say so explicitly — that's information too.</p>
      <textarea id="raw-idea" rows="8" placeholder="e.g. I'm a forensic engineer with 35 years of experience in HVAC and VRF systems. I want to build a service for insurance defense attorneys handling commercial property subrogation cases. They need credentialed experts who can write Daubert-defensible reports in 10–14 days. I've done this work for years but want to systematize and grow it. I'd charge $500–$650/hr."></textarea>
    </div>

    <div class="api-key-section">
      <h3>Anthropic API Key</h3>
      <p>This page calls the Anthropic API directly from your browser. Your key is stored only in localStorage — never sent anywhere except Anthropic. <a href="https://console.anthropic.com/settings/keys" target="_blank" rel="noopener" style="color: var(--red-deep);">Get a key here</a>. The key carries between RISER files in the same browser if localStorage allows.</p>
      <input type="password" id="api-key" placeholder="sk-ant-…" autocomplete="off">
      <div class="model-toggle">
        <button id="model-sonnet" class="active" data-model="claude-sonnet-4-6">Sonnet 4.6 (faster · cheaper)</button>
        <button id="model-opus" data-model="claude-opus-4-7">Opus 4.7 (highest quality)</button>
      </div>
    </div>

    <div class="btn-row">
      <button class="btn btn-primary" id="refine-btn" disabled>Refine into paragraph →</button>
    </div>
    <div id="input-hint" class="setup-hint" style="display: none;"></div>
  </section>

  <section id="stage-refined" style="display: none;">
    <div id="loading-state" class="loading-state" style="display: none;">
      <div><span class="dot">•</span><span class="dot">•</span><span class="dot">•</span></div>
      <div class="loading-step-text" id="loading-step-text">Reading your idea…</div>
    </div>
    <div id="refined-output"></div>
  </section>
</main>

<script>
'use strict';
const STATE_KEY = 'riser:operator:v1';
const STEP_ID = 'phase-1.1';
const ANTI_FAB = `

CRITICAL ANTI-FABRICATION RULES — non-negotiable:
1. NEVER invent fake firm names, fake people's names, fake testimonials, or fabricated quotes.
2. NEVER write specific outcome guarantees ("this generates X leads per month").
3. NEVER fabricate market sizes, percentages, or revenue projections.
4. If you lack deep niche knowledge, SAY SO EXPLICITLY in caveats. Don't bluff.
5. Use [BRACKETS] for all user-fill placeholders.
6. For regulated activity (legal, medical, financial, MLM), include compliance reminders.
7. Match the operator's stated business model. No generic advice that ignores the input.`;

function loadState() {
  try { const r = localStorage.getItem(STATE_KEY); return r ? JSON.parse(r) : {}; }
  catch (e) { return {}; }
}
function saveState(s) { try { localStorage.setItem(STATE_KEY, JSON.stringify(s)); } catch (e) {} }
function setStepOutput(id, output) {
  const s = loadState(); s.outputs = s.outputs || {};
  s.outputs[id] = Object.assign({}, output, { completedAt: new Date().toISOString() });
  saveState(s);
}
function getStepOutput(id) { const s = loadState(); return (s.outputs || {})[id] || null; }
function escapeHtml(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c])); }
function el(id) { return document.getElementById(id); }
function copyToClipboard(text, btn) {
  if (!navigator.clipboard) return alert('Clipboard not available');
  navigator.clipboard.writeText(text).then(() => {
    if (btn) { const o = btn.textContent; btn.textContent = 'Copied ✓'; btn.classList.add('copied'); setTimeout(() => { btn.textContent = o; btn.classList.remove('copied'); }, 1600); }
  });
}

// Load saved key + model
const state = loadState();
if (state.apiKey) el('api-key').value = state.apiKey;
if (state.model === 'claude-opus-4-7') {
  document.querySelectorAll('.model-toggle button').forEach(b => b.classList.remove('active'));
  el('model-opus').classList.add('active');
}

// Restore prior input if step was completed
const saved = getStepOutput(STEP_ID);
if (saved) {
  if (saved.businessModel) el('business-model').value = saved.businessModel;
  if (saved.rawIdea) el('raw-idea').value = saved.rawIdea;
  if (saved.paragraph) showRefinedOutput(saved.paragraph, saved.notes || [], saved.missingFields || []);
}

// Listeners
el('api-key').addEventListener('input', e => {
  const s = loadState(); s.apiKey = e.target.value.trim(); saveState(s);
  checkReady();
});
document.querySelectorAll('.model-toggle button').forEach(b => {
  b.addEventListener('click', () => {
    document.querySelectorAll('.model-toggle button').forEach(x => x.classList.remove('active'));
    b.classList.add('active');
    const s = loadState(); s.model = b.dataset.model; saveState(s);
  });
});
el('business-model').addEventListener('change', checkReady);
el('raw-idea').addEventListener('input', checkReady);

function checkReady() {
  const model = el('business-model').value;
  const idea = el('raw-idea').value.trim();
  const key = el('api-key').value.trim();
  const ok = model && idea.length >= 30 && key.length >= 20;
  el('refine-btn').disabled = !ok;
  const hint = el('input-hint');
  if (ok) { hint.style.display = 'none'; }
  else {
    const missing = [];
    if (key.length < 20) missing.push('API key (≥20 chars)');
    if (!model) missing.push('Business model');
    if (idea.length < 30) missing.push('Idea description (≥30 chars; you have ' + idea.length + ')');
    hint.textContent = 'Still needed: ' + missing.join(' · ');
    hint.style.display = 'block';
  }
}
checkReady();

el('refine-btn').addEventListener('click', refineIdea);

async function callClaude(sys, user, opts) {
  opts = opts || {};
  const s = loadState();
  const body = {
    model: opts.model || s.model || 'claude-sonnet-4-6',
    max_tokens: opts.maxTokens || 1500,
    system: sys,
    messages: [{ role: 'user', content: user }]
  };
  const r = await fetch('https://api.anthropic.com/v1/messages', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': s.apiKey,
      'anthropic-version': '2023-06-01',
      'anthropic-dangerous-direct-browser-access': 'true'
    },
    body: JSON.stringify(body)
  });
  if (!r.ok) throw new Error('API error ' + r.status + ': ' + (await r.text()).slice(0, 220));
  const d = await r.json();
  return (d.content && d.content[0] && d.content[0].text) || '';
}

function extractJSON(text) {
  const fenced = text.match(/```(?:json)?\s*([\s\S]*?)```/);
  if (fenced) { try { return JSON.parse(fenced[1].trim()); } catch (e) {} }
  const start = text.indexOf('{'), end = text.lastIndexOf('}');
  if (start !== -1 && end > start) { try { return JSON.parse(text.slice(start, end + 1)); } catch (e) {} }
  throw new Error('Could not parse JSON from response');
}

async function refineIdea() {
  const businessModel = el('business-model').value;
  const rawIdea = el('raw-idea').value.trim();
  el('stage-input').style.display = 'none';
  el('stage-refined').style.display = 'block';
  el('loading-state').style.display = 'block';
  el('refined-output').innerHTML = '';
  el('stage-2-pill').classList.add('active');

  const steps = ['Reading your idea…', 'Identifying buyer specificity…', 'Naming the problem precisely…', 'Sharpening the solution…', 'Pressure-testing pricing…', 'Drafting the paragraph…'];
  let idx = 0;
  const interval = setInterval(() => { idx = Math.min(idx + 1, steps.length - 1); el('loading-step-text').textContent = steps[idx]; }, 3500);

  const sys = `You are an expert direct-response strategist working in the lineage of Alex Hormozi, Russell Brunson, and Eugene Schwartz. Your job is to refine an operator's raw business idea into a disciplined 5-sentence paragraph.

Structure exactly:
- Sentence 1: WHO (specific buyer — title, industry, geography, deal-size signal)
- Sentence 2: PROBLEM (specific pain in concrete language)
- Sentence 3: SOLUTION (the specific deliverable, not the abstract category)
- Sentence 4: PRICE TIER (rough order of magnitude)
- Sentence 5: WHY YOU (one credibility signal)

Length: 150-220 words across 5 sentences.

If any field is missing or vague, do NOT invent it. Mark with [BRACKETED PLACEHOLDER] in the paragraph and add to missingFields.

Match refinement to stated business model. Etsy paragraph reads like Etsy. Forensic engineer paragraph reads like that. Do not impose generic SaaS vocabulary.

Return EXACTLY this JSON, no fences, no prose:
{
  "paragraph": "5 sentences as one flowing paragraph.",
  "notes": ["Up to 4 short observations: what got sharper, what's fuzzy, what to test."],
  "missingFields": ["Any of: WHO | PROBLEM | SOLUTION | PRICE | WHY_YOU — only if bracketed."]
}` + ANTI_FAB;

  const businessModelLabel = {
    'product-physical': 'Physical product / Etsy / DTC',
    'product-digital': 'Digital product / content',
    'service-pro': 'Professional service',
    'service-coaching': 'Coaching / training',
    'service-local': 'Local / brick-and-mortar',
    'creator': 'Creator / influencer',
    'affiliate-mlm': 'Affiliate / partnership / MLM',
    'other': 'Other / hybrid'
  }[businessModel] || businessModel;

  const user = 'Business model: ' + businessModelLabel + '\n\nRaw idea (operator\'s words):\n' + rawIdea + '\n\nRefine into the disciplined 5-sentence paragraph.';

  try {
    const text = await callClaude(sys, user, { maxTokens: 1500 });
    const obj = extractJSON(text);
    if (!obj.paragraph) throw new Error('Model returned no paragraph');

    clearInterval(interval);
    el('loading-state').style.display = 'none';

    setStepOutput(STEP_ID, {
      businessModel: businessModel,
      rawIdea: rawIdea,
      paragraph: obj.paragraph,
      notes: obj.notes || [],
      missingFields: obj.missingFields || []
    });
    const s = loadState();
    s.business = { idea: obj.paragraph, model: businessModel, detail: rawIdea };
    saveState(s);

    showRefinedOutput(obj.paragraph, obj.notes || [], obj.missingFields || []);
  } catch (err) {
    clearInterval(interval);
    el('loading-state').style.display = 'none';
    el('refined-output').innerHTML = '<div class="banner banner-warn"><strong>Refinement failed.</strong> ' + escapeHtml(err.message || 'Unknown error') + '<br><br>Common causes: API key issue · rate limit · network · malformed JSON.<br><br><a href="#" onclick="location.reload();return false;" style="color: var(--red-deep);">Try again</a></div>';
  }
}

function showRefinedOutput(paragraph, notes, missingFields) {
  let html = '';
  html += '<div class="output-box">';
  html += '<div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px;">';
  html += '<h4 style="margin: 0;">Your refined idea paragraph</h4>';
  html += '<button class="copy-btn" id="copy-paragraph">Copy</button>';
  html += '</div>';
  html += '<div class="output-content">' + escapeHtml(paragraph) + '</div>';
  html += '<div class="output-meta">~' + paragraph.split(/\s+/).length + ' words · saved to localStorage · use this paragraph in Step 1.2</div>';
  html += '</div>';

  if (notes && notes.length > 0) {
    html += '<div class="card"><div class="card-header"><div class="card-num">NOTES</div><h3>Observations</h3></div><ul style="list-style: none; padding: 0;">';
    notes.forEach(n => { html += '<li style="padding: 6px 0 6px 22px; position: relative; font-family: var(--serif); font-size: 15px; line-height: 1.55;"><span style="position: absolute; left: 0; color: var(--gold); font-weight: 700;">→</span>' + escapeHtml(n) + '</li>'; });
    html += '</ul></div>';
  }

  if (missingFields && missingFields.length > 0) {
    html += '<div class="banner banner-warn"><strong>Honest gaps:</strong> ' + missingFields.map(escapeHtml).join(', ') + '. These are bracketed in the paragraph. Step 1.3 (Pain Discovery) will sharpen the PROBLEM if missing. Step 1.4 (Offer Hypothesis) will sharpen PRICE and SOLUTION.</div>';
  }

  html += '<div class="btn-row">';
  html += '<button class="btn btn-ghost" id="edit-again-btn">← Edit</button>';
  html += '<a href="RISER-Suite-Index.html" class="btn">Suite Index</a>';
  html += '<a href="RISER-Step-1.2-Buyer-Decision-Style.html" class="btn btn-primary">Continue to Step 1.2 — Buyer Decision Style →</a>';
  html += '</div>';

  html += '<div class="banner banner-info" style="margin-top: 14px;"><strong>Hand-off note:</strong> Open <code>RISER-Step-1.2-Buyer-Decision-Style.html</code> in this same browser. If your browser shares localStorage between local files (Chrome usually does), Step 1.2 will pick up your paragraph automatically. If not, copy the paragraph above and paste it into the prior-context field on Step 1.2.</div>';

  el('refined-output').innerHTML = html;
  el('stage-3-pill').classList.add('active');
  document.getElementById('copy-paragraph').addEventListener('click', function() { copyToClipboard(paragraph, this); });
  document.getElementById('edit-again-btn').addEventListener('click', function() {
    el('stage-input').style.display = 'block';
    el('stage-refined').style.display = 'none';
    el('stage-2-pill').classList.remove('active');
    el('stage-3-pill').classList.remove('active');
    window.scrollTo({ top: 0, behavior: 'smooth' });
  });
}

console.log('RISER Step 1.1 Idea Capture loaded. Saved:', saved ? 'yes' : 'no');
</script>
</body>
</html>
Original asset: RISER-Step-1.2-Buyer-Decision-Style.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Step 1.2 Buyer Decision Style · RISER Operator's Flow</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=Inter+Tight:[email protected]&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
  --ink: #0a0a0a; --paper: #f7f4ee; --paper-warm: #f0eadf; --paper-deep: #e9e2d2;
  --rule: #1a1a1a; --red: #c9302a; --red-deep: #8b1f1c; --red-tint: #fbe8e6;
  --green: #1d6e3a; --green-tint: #dcefe2; --gold: #b8893a; --gold-tint: #f5ead0;
  --teal: #2c5f5a; --teal-tint: #d8e6e4; --muted: #5a564f; --slate: #4a4e69;
  --serif: 'Fraunces', Georgia, serif;
  --sans: 'Inter Tight', -apple-system, sans-serif;
  --mono: 'JetBrains Mono', Menlo, monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body { font-family: var(--sans); background: var(--paper); color: var(--ink); line-height: 1.55; font-size: 15px; min-height: 100vh; }
main { max-width: 900px; margin: 0 auto; padding: 40px 32px 80px; }
.toc-link { display: inline-block; font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); text-decoration: none; margin-bottom: 24px; }
.toc-link:hover { color: var(--red-deep); }
.masthead { border-bottom: 3px double var(--rule); padding-bottom: 24px; margin-bottom: 32px; }
.kicker { font-family: var(--mono); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted); margin-bottom: 12px; display: flex; align-items: center; gap: 14px; }
.kicker::after { content: ''; flex: 1; height: 1px; background: var(--rule); opacity: 0.3; }
.title { font-family: var(--serif); font-weight: 600; font-size: clamp(32px, 4.5vw, 48px); line-height: 1.05; letter-spacing: -0.025em; margin-bottom: 14px; }
.title em { font-style: italic; font-weight: 400; color: var(--red-deep); }
.subtitle { font-family: var(--serif); font-style: italic; font-size: 17px; color: var(--muted); max-width: 720px; line-height: 1.5; }
.stages { display: flex; gap: 0; margin: 18px 0 24px; border: 1.5px solid var(--rule); background: var(--paper-warm); font-family: var(--mono); font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; }
.stage-pill { flex: 1; padding: 10px 14px; border-right: 1.5px solid var(--rule); color: var(--muted); display: flex; align-items: center; gap: 10px; }
.stage-pill:last-child { border-right: none; }
.stage-pill .num { width: 22px; height: 22px; border: 1.5px solid currentColor; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-weight: 700; font-size: 11px; flex-shrink: 0; }
.stage-pill.active { background: var(--ink); color: var(--paper); font-weight: 700; }
.field { margin-bottom: 24px; }
.field-label { display: block; font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--red-deep); font-weight: 700; margin-bottom: 8px; }
.field-help { font-family: var(--serif); font-style: italic; font-size: 14px; color: var(--muted); margin-bottom: 10px; line-height: 1.45; }
input[type="text"], input[type="password"], textarea, select { width: 100%; padding: 12px 16px; font-family: var(--sans); font-size: 15px; border: 1.5px solid var(--rule); background: var(--paper); color: var(--ink); border-radius: 0; transition: border-color 0.15s, background 0.15s; }
input:focus, textarea:focus, select:focus { outline: none; border-color: var(--red-deep); background: #fff; }
textarea { resize: vertical; min-height: 100px; line-height: 1.5; font-family: var(--sans); }
.field-primary { background: var(--paper-warm); border: 1.5px solid var(--rule); border-left: 4px solid var(--red-deep); padding: 22px 24px 24px; margin-bottom: 28px; box-shadow: 4px 4px 0 var(--rule); }
.field-primary .field-label { font-family: var(--serif); font-size: 22px; letter-spacing: -0.015em; text-transform: none; color: var(--ink); font-weight: 600; margin-bottom: 6px; line-height: 1.2; }
.field-primary input[type="text"], .field-primary textarea { font-size: 17px; padding: 14px 18px; border-width: 2px; }
.btn { font-family: var(--mono); font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; padding: 12px 22px; border: 1.5px solid var(--rule); background: var(--paper); color: var(--ink); cursor: pointer; transition: all 0.12s; font-weight: 600; text-decoration: none; display: inline-block; }
.btn:hover:not(:disabled) { background: var(--ink); color: var(--paper); }
.btn:disabled { opacity: 0.35; cursor: not-allowed; background: var(--paper-deep) !important; color: var(--muted) !important; border-color: var(--muted) !important; }
.btn-primary { background: var(--red-deep); color: var(--paper); border-color: var(--red-deep); }
.btn-primary:hover:not(:disabled) { background: var(--red); border-color: var(--red); }
.btn-ghost { border-color: var(--muted); color: var(--muted); }
.btn-row { display: flex; gap: 12px; margin-top: 28px; flex-wrap: wrap; align-items: center; }
.banner { padding: 14px 18px; font-size: 14px; border-left: 4px solid; margin-bottom: 20px; font-family: var(--serif); line-height: 1.5; }
.banner-info { background: var(--teal-tint); border-color: var(--teal); color: var(--teal); }
.banner-warn { background: var(--red-tint); border-color: var(--red-deep); color: var(--red-deep); }
.banner-success { background: var(--green-tint); border-color: var(--green); color: var(--green); }
.banner strong { font-weight: 700; }
.api-key-section { margin-top: 24px; padding: 20px; background: var(--paper-warm); border: 1.5px solid var(--rule); }
.api-key-section h3 { font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--red-deep); font-weight: 700; margin-bottom: 8px; }
.api-key-section p { font-size: 13px; color: var(--muted); margin-bottom: 12px; line-height: 1.45; }
.api-key-section input[type="password"] { font-family: var(--mono); font-size: 13px; }
.model-toggle { display: flex; gap: 8px; margin-top: 12px; }
.model-toggle button { flex: 1; padding: 8px 12px; font-family: var(--mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; background: var(--paper); border: 1.5px solid var(--rule); cursor: pointer; font-weight: 600; }
.model-toggle button.active { background: var(--ink); color: var(--paper); }
.loading-state { text-align: center; padding: 50px 20px; font-family: var(--serif); font-style: italic; font-size: 17px; color: var(--muted); }
@keyframes pulse-dot { 0%, 80%, 100% { opacity: 0.3; } 40% { opacity: 1; } }
.dot { animation: pulse-dot 1.4s infinite ease-in-out; display: inline-block; font-size: 24px; }
.dot:nth-child(2) { animation-delay: 0.2s; }
.dot:nth-child(3) { animation-delay: 0.4s; }
.loading-step-text { font-family: var(--mono); font-style: normal; font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; margin-top: 16px; color: var(--red-deep); font-weight: 600; }
.card { background: var(--paper); border: 1.5px solid var(--rule); padding: 22px 24px; margin-bottom: 18px; }
.card-warm { background: var(--paper-warm); }
.card-header { display: flex; align-items: baseline; gap: 14px; margin-bottom: 14px; border-bottom: 1.5px solid var(--rule); padding-bottom: 10px; }
.card-num { font-family: var(--mono); font-size: 11px; font-weight: 700; color: var(--red-deep); letter-spacing: 0.1em; }
.card h3 { font-family: var(--serif); font-size: 22px; font-weight: 600; letter-spacing: -0.015em; flex: 1; line-height: 1.2; }
.card p { font-family: var(--serif); font-size: 15px; line-height: 1.55; margin-bottom: 10px; }
.copy-btn { font-family: var(--mono); font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; font-weight: 600; padding: 6px 12px; border: 1.5px solid var(--rule); background: var(--paper); color: var(--ink); cursor: pointer; transition: all 0.12s; margin-left: 8px; }
.copy-btn:hover { background: var(--ink); color: var(--paper); }
.copy-btn.copied { background: var(--green); color: var(--paper); border-color: var(--green); }
.setup-hint { font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; color: var(--red-deep); margin-top: 12px; padding: 10px 14px; background: var(--red-tint); border-left: 3px solid var(--red-deep); }
.style-card { border-left: 5px solid; padding: 18px 22px; margin-bottom: 14px; background: var(--paper); border: 1.5px solid var(--rule); }
.style-blueprint { border-left-color: var(--teal); }
.style-action { border-left-color: var(--red-deep); }
.style-nurturing { border-left-color: var(--gold); }
.style-knowledge { border-left-color: var(--slate); }
.style-letter { display: inline-block; width: 42px; height: 42px; line-height: 42px; text-align: center; background: var(--ink); color: var(--paper); font-family: var(--serif); font-weight: 700; font-size: 22px; margin-right: 14px; vertical-align: middle; }
.style-blueprint .style-letter { background: var(--teal); }
.style-action .style-letter { background: var(--red-deep); }
.style-nurturing .style-letter { background: var(--gold); }
.style-knowledge .style-letter { background: var(--slate); }
.style-name { display: inline-block; vertical-align: middle; font-family: var(--serif); font-size: 20px; font-weight: 600; letter-spacing: -0.01em; line-height: 1.2; }
.style-name small { display: block; font-family: var(--mono); font-size: 11px; color: var(--muted); letter-spacing: 0.1em; text-transform: uppercase; font-weight: 600; margin-top: 2px; }
.style-content { margin-top: 14px; font-family: var(--serif); font-size: 15px; line-height: 1.55; }
.confidence { display: inline-block; font-family: var(--mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; padding: 3px 8px; border: 1px solid currentColor; margin-left: 8px; font-weight: 700; }
.conf-high { color: var(--green); background: var(--green-tint); border-color: var(--green); }
.conf-medium { color: var(--gold); background: var(--gold-tint); border-color: var(--gold); }
.conf-low { color: var(--muted); background: var(--paper-warm); }
.temp-tag { display: inline-block; font-family: var(--mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; padding: 2px 8px; margin-left: 8px; font-weight: 700; }
.temp-cold { background: #d8e6e4; color: var(--teal); }
.temp-warm { background: var(--gold-tint); color: var(--gold); }
.temp-hot { background: var(--red-tint); color: var(--red-deep); }
.journey-section { margin-bottom: 16px; padding: 14px 16px; background: var(--paper-warm); border: 1px solid var(--rule); }
.journey-section h5 { font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--red-deep); font-weight: 700; margin-bottom: 6px; }
.journey-section p { font-family: var(--serif); font-size: 15px; line-height: 1.55; margin: 0; }
.phrase-list { margin: 8px 0 12px 0; padding: 0; list-style: none; }
.phrase-list li { padding: 5px 12px; margin-bottom: 4px; background: var(--paper-warm); border-left: 3px solid var(--gold); font-family: var(--serif); font-style: italic; font-size: 14px; line-height: 1.45; }
.phrase-list.repel li { border-left-color: var(--red-deep); background: var(--red-tint); }
.mismatch-card { background: var(--red-tint); border: 1.5px solid var(--red-deep); padding: 16px 20px; margin-bottom: 14px; }
.mismatch-card h4 { font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--red-deep); font-weight: 700; margin-bottom: 8px; }
.mismatch-card p { font-family: var(--serif); font-size: 15px; line-height: 1.55; margin: 0; }
.path-toggle { display: flex; gap: 0; margin-bottom: 16px; border: 1.5px solid var(--rule); }
.path-toggle button { flex: 1; padding: 12px 16px; font-family: var(--mono); font-size: 11px; letter-spacing: 0.1em; text-transform: uppercase; background: var(--paper); color: var(--ink); border: none; border-right: 1.5px solid var(--rule); cursor: pointer; font-weight: 600; transition: background 0.12s, color 0.12s; }
.path-toggle button:last-child { border-right: none; }
.path-toggle button.active { background: var(--ink); color: var(--paper); }
.path-toggle button:hover:not(.active) { background: var(--paper-warm); }
.ip-notice { background: var(--paper-deep); border: 1.5px solid var(--muted); padding: 12px 16px; margin: 14px 0; font-family: var(--serif); font-size: 13px; line-height: 1.5; font-style: italic; color: var(--muted); }
@media print { body { background: #fff; font-size: 11pt; } .api-key-section, .btn-row, .toc-link, .path-toggle { display: none !important; } main { padding: 0; max-width: 100%; } .card, .style-card, .mismatch-card, .journey-section { background: #fff !important; border: 1px solid #555 !important; page-break-inside: avoid; } @page { margin: 0.6in; size: letter; } }
</style>
</head>
<body>
<main>
  <a href="RISER-Suite-Index.html" class="toc-link">← Suite Index · Table of Contents</a>

  <div class="masthead">
    <div class="kicker">Phase 1 · Step 1.2 · Buyer Decision Style</div>
    <h1 class="title">How does your buyer <em>actually</em> decide?</h1>
    <p class="subtitle">Most operators sell in their own decision style, not the buyer's. This step types your buyer into one of four decision styles — Blueprint, Action, Nurturing, Knowledge — and tells you what content moves them at every stage of the journey from cold to warm to hot.</p>
  </div>

  <div class="stages">
    <div class="stage-pill active"><span class="num">1</span><span>Describe your buyer</span></div>
    <div class="stage-pill" id="stage-2-pill"><span class="num">2</span><span>Decision style profile</span></div>
    <div class="stage-pill" id="stage-3-pill"><span class="num">3</span><span>Save & next step</span></div>
  </div>

  <section id="prior-context"></section>

  <div class="ip-notice">
    <strong style="font-style: normal; color: var(--ink);">A note on framework lineage:</strong> This step uses a four-style decision-making framework grounded in DISC personality theory (William Marston, public domain), Cialdini's six principles of persuasion, and Eugene Schwartz's awareness staging. The four-letter mnemonic is coincidental and the methodology is not affiliated with any trademarked personality system. This is a buyer-decision-style profile for marketing application, not a clinical personality assessment.
  </div>

  <section id="stage-input">
    <div class="field">
      <label class="field-label">Which path fits your situation?</label>
      <p class="field-help">If you've talked to a real buyer, describe them. If you're earlier and your avatar is more abstract, the second path generates a likely-style profile based on your business model.</p>
      <div class="path-toggle">
        <button id="path-specific" class="active">A · I can describe one specific buyer</button>
        <button id="path-general">B · Profile my avatar in general</button>
      </div>
    </div>

    <div class="field field-primary" id="panel-specific">
      <label class="field-label" for="buyer-description">Describe one specific buyer (real or representative)</label>
      <p class="field-help">100–300 words. Include: what they say in their own language, how they decide (fast/slow, alone/with others), what they ask for, what objections they raise, what closed them or stopped them. The more verbatim language, the sharper the profile.</p>
      <textarea id="buyer-description" rows="8" placeholder="e.g. Sarah, partner at a 40-attorney defense firm in Phoenix. When I described the offering, she immediately asked 'have you testified in this jurisdiction before' and 'how fast can you turn around a Daubert-defensible report?' She said 'I can't risk an expert who falls apart on cross.' She wanted to see two prior reports before scheduling a call. Made the decision herself."></textarea>
    </div>

    <div class="field field-primary" id="panel-general" style="display: none;">
      <label class="field-label" for="avatar-description">Describe your target avatar in general</label>
      <p class="field-help">Don't have specific buyer conversations yet? Describe the avatar at the general level — title, industry, situation, what makes them buy this category. The profile will be a likely-style distribution, not a specific person.</p>
      <textarea id="avatar-description" rows="6" placeholder="e.g. Mid-size insurance defense attorneys handling commercial property subrogation cases. Senior associates and junior partners, billing $400-650/hr. Need credentialed experts who can write Daubert-defensible reports in 10-14 days."></textarea>
    </div>

    <div class="api-key-section">
      <h3>Anthropic API Key</h3>
      <p>Stored only in localStorage. <a href="https://console.anthropic.com/settings/keys" target="_blank" rel="noopener" style="color: var(--red-deep);">Get a key</a>. Carries between RISER files in same browser if localStorage allows.</p>
      <input type="password" id="api-key" placeholder="sk-ant-…" autocomplete="off">
      <div class="model-toggle">
        <button id="model-sonnet" class="active" data-model="claude-sonnet-4-6">Sonnet 4.6 (faster · cheaper)</button>
        <button id="model-opus" data-model="claude-opus-4-7">Opus 4.7 (highest quality)</button>
      </div>
    </div>

    <div class="btn-row">
      <a href="RISER-Step-1.1-Idea-Capture.html" class="btn btn-ghost">← Step 1.1</a>
      <a href="RISER-Suite-Index.html" class="btn btn-ghost">Suite Index</a>
      <button class="btn btn-primary" id="profile-btn" disabled>Generate decision-style profile →</button>
    </div>
    <div id="input-hint" class="setup-hint" style="display: none;"></div>
  </section>

  <section id="stage-profile" style="display: none;">
    <div id="loading-state" class="loading-state" style="display: none;">
      <div><span class="dot">•</span><span class="dot">•</span><span class="dot">•</span></div>
      <div class="loading-step-text" id="loading-step-text">Reading your buyer description…</div>
    </div>
    <div id="profile-output"></div>
  </section>
</main>

<script>
'use strict';
const STATE_KEY = 'riser:operator:v1';
const STEP_ID = 'phase-1.2';
const ANTI_FAB = `

CRITICAL ANTI-FABRICATION RULES — non-negotiable:
1. NEVER invent fake firm names, fake people's names, fake testimonials, or fabricated quotes.
2. NEVER write specific outcome guarantees ("this generates X leads per month").
3. NEVER fabricate market sizes, percentages, or revenue projections.
4. If you lack deep niche knowledge, SAY SO EXPLICITLY in caveats. Don't bluff.
5. Use [BRACKETS] for all user-fill placeholders.
6. For regulated activity (legal, medical, financial, MLM), include compliance reminders.
7. Match the operator's stated business model. No generic advice that ignores the input.`;

function loadState() { try { const r = localStorage.getItem(STATE_KEY); return r ? JSON.parse(r) : {}; } catch (e) { return {}; } }
function saveState(s) { try { localStorage.setItem(STATE_KEY, JSON.stringify(s)); } catch (e) {} }
function setStepOutput(id, output) {
  const s = loadState(); s.outputs = s.outputs || {};
  s.outputs[id] = Object.assign({}, output, { completedAt: new Date().toISOString() });
  saveState(s);
}
function getStepOutput(id) { const s = loadState(); return (s.outputs || {})[id] || null; }
function escapeHtml(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c])); }
function el(id) { return document.getElementById(id); }
function copyToClipboard(text, btn) {
  if (!navigator.clipboard) return alert('Clipboard not available');
  navigator.clipboard.writeText(text).then(() => {
    if (btn) { const o = btn.textContent; btn.textContent = 'Copied ✓'; btn.classList.add('copied'); setTimeout(() => { btn.textContent = o; btn.classList.remove('copied'); }, 1600); }
  });
}

const state = loadState();
let priorIdea = getStepOutput('phase-1.1');
let priorParagraph = priorIdea ? priorIdea.paragraph : '';
let priorBusinessModel = priorIdea ? priorIdea.businessModel : '';
let path = 'specific';

if (state.apiKey) el('api-key').value = state.apiKey;
if (state.model === 'claude-opus-4-7') {
  document.querySelectorAll('.model-toggle button').forEach(b => b.classList.remove('active'));
  el('model-opus').classList.add('active');
}

// Render prior context (Step 1.1) or manual paste fallback
const priorEl = el('prior-context');
function renderPriorContext() {
  if (priorParagraph && priorParagraph.length > 50) {
    priorEl.innerHTML =
      '<div class="card card-warm" style="border-left: 4px solid var(--teal);">' +
      '<div class="card-header"><div class="card-num">CONTEXT FROM STEP 1.1</div><h3>Your refined business idea</h3></div>' +
      '<p style="font-style: italic;">' + escapeHtml(priorParagraph) + '</p>' +
      '<p style="font-size: 13px; color: var(--muted); margin-top: 10px;">This is being used as context. <a href="#" id="edit-prior" style="color: var(--red-deep);">Replace it manually</a> if needed.</p>' +
      '</div>';
    document.getElementById('edit-prior').addEventListener('click', function(e) { e.preventDefault(); showManualPriorInput(); });
  } else {
    showManualPriorInput();
  }
}
function showManualPriorInput() {
  priorEl.innerHTML =
    '<div class="banner banner-warn"><strong>No Step 1.1 context found in this browser.</strong> Either complete Step 1.1 first (recommended), or paste your refined idea paragraph below to give Claude context. The profile works without it but will be sharper with it.</div>' +
    '<div class="field"><label class="field-label" for="manual-prior">Paste your refined idea paragraph here (optional)</label>' +
    '<textarea id="manual-prior" rows="4" placeholder="Paste the 5-sentence paragraph from Step 1.1 here, or leave blank to skip."></textarea></div>';
  document.getElementById('manual-prior').addEventListener('input', e => { priorParagraph = e.target.value.trim(); checkReady(); });
}
renderPriorContext();

// Path toggle
el('path-specific').addEventListener('click', () => {
  path = 'specific';
  el('path-specific').classList.add('active'); el('path-general').classList.remove('active');
  el('panel-specific').style.display = 'block'; el('panel-general').style.display = 'none';
  checkReady();
});
el('path-general').addEventListener('click', () => {
  path = 'general';
  el('path-general').classList.add('active'); el('path-specific').classList.remove('active');
  el('panel-general').style.display = 'block'; el('panel-specific').style.display = 'none';
  checkReady();
});

el('api-key').addEventListener('input', e => { const s = loadState(); s.apiKey = e.target.value.trim(); saveState(s); checkReady(); });
document.querySelectorAll('.model-toggle button').forEach(b => {
  b.addEventListener('click', () => {
    document.querySelectorAll('.model-toggle button').forEach(x => x.classList.remove('active'));
    b.classList.add('active');
    const s = loadState(); s.model = b.dataset.model; saveState(s);
  });
});
el('buyer-description').addEventListener('input', checkReady);
el('avatar-description').addEventListener('input', checkReady);

function getInputText() {
  return path === 'specific' ? el('buyer-description').value.trim() : el('avatar-description').value.trim();
}
function checkReady() {
  const text = getInputText();
  const key = el('api-key').value.trim();
  const ok = text.length >= 50 && key.length >= 20;
  el('profile-btn').disabled = !ok;
  const hint = el('input-hint');
  if (ok) hint.style.display = 'none';
  else {
    const missing = [];
    if (key.length < 20) missing.push('API key (≥20 chars)');
    if (text.length < 50) missing.push('Buyer description (≥50 chars; you have ' + text.length + ')');
    hint.textContent = 'Still needed: ' + missing.join(' · ');
    hint.style.display = 'block';
  }
}

// Restore saved
const saved = getStepOutput(STEP_ID);
if (saved) {
  if (saved.path) {
    path = saved.path;
    if (path === 'general') el('path-general').click();
  }
  if (saved.inputText) {
    if (path === 'specific') el('buyer-description').value = saved.inputText;
    else el('avatar-description').value = saved.inputText;
  }
  if (saved.profile) showProfile(saved.profile);
}
checkReady();

el('profile-btn').addEventListener('click', generateProfile);

async function callClaude(sys, user, opts) {
  opts = opts || {};
  const s = loadState();
  const body = {
    model: opts.model || s.model || 'claude-sonnet-4-6',
    max_tokens: opts.maxTokens || 4000,
    system: sys, messages: [{ role: 'user', content: user }]
  };
  const r = await fetch('https://api.anthropic.com/v1/messages', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', 'x-api-key': s.apiKey, 'anthropic-version': '2023-06-01', 'anthropic-dangerous-direct-browser-access': 'true' },
    body: JSON.stringify(body)
  });
  if (!r.ok) throw new Error('API error ' + r.status + ': ' + (await r.text()).slice(0, 220));
  const d = await r.json();
  return (d.content && d.content[0] && d.content[0].text) || '';
}
function extractJSON(text) {
  const fenced = text.match(/```(?:json)?\s*([\s\S]*?)```/);
  if (fenced) { try { return JSON.parse(fenced[1].trim()); } catch (e) {} }
  const start = text.indexOf('{'), end = text.lastIndexOf('}');
  if (start !== -1 && end > start) { try { return JSON.parse(text.slice(start, end + 1)); } catch (e) {} }
  throw new Error('Could not parse JSON from response');
}

async function generateProfile() {
  const inputText = getInputText();
  el('stage-input').style.display = 'none';
  el('stage-profile').style.display = 'block';
  el('loading-state').style.display = 'block';
  el('profile-output').innerHTML = '';
  el('stage-2-pill').classList.add('active');

  const steps = ['Reading your buyer description…', 'Identifying decision-making patterns…', 'Typing dominant style…', 'Mapping cold/warm/hot journey content…', 'Surfacing activating phrases…', 'Flagging mismatch risks…', 'Drafting your operator playbook…'];
  let idx = 0;
  const interval = setInterval(() => { idx = Math.min(idx + 1, steps.length - 1); el('loading-step-text').textContent = steps[idx]; }, 3500);

  const sys = `You are an expert in buyer psychology working in the lineage of public-domain frameworks: DISC personality theory (William Marston), Robert Cialdini's six principles of persuasion, and Eugene Schwartz's awareness staging. You produce decision-style profiles for buyers, calibrated to the operator's specific business model.

THE FOUR DECISION STYLES — public-domain framework categories, not licensed B.A.N.K. methodology:

B — BLUEPRINT-DRIVEN (Plan-first):
- Decides slowly, methodically. Wants structure, documentation, predictability.
- Asks: "What's the process? Milestones? Warranty?"
- Activated by: authority, consistency, written guarantees, step-by-step plans.
- Repelled by: vague timelines, "we'll figure it out," high-pressure closes.
- Cialdini levers: Authority + Consistency.

A — ACTION-DRIVEN (Move-fast):
- Decides fast. Wants results, hates lengthy proposals. Values speed and outcome.
- Asks: "How fast? ROI? Who else like me has done this?"
- Activated by: scarcity, social proof, fast wins, decisive language.
- Repelled by: long process documents, slow timelines, theory without practice.
- Cialdini levers: Scarcity + Social Proof.

N — NURTURING-DRIVEN (Relationship-first):
- Decides through trust. Wants to feel heard. Cares about reputation, ethics, fit.
- Asks: "Who else have you helped? Will I be in good hands? Do you really understand?"
- Activated by: liking, reciprocity, story-based selling, evidence of care.
- Repelled by: hard sells, transactional language, name-dropping for status.
- Cialdini levers: Liking + Reciprocity.

K — KNOWLEDGE-DRIVEN (Detail-first):
- Decides through evidence. Wants data, deep proof, technical detail.
- Asks: "Methodology? Show me the data. Failure rate?"
- Activated by: precision, technical authority, transparent data, careful logic.
- Repelled by: hand-waving, marketing speak, oversimplification, unsourced claims.
- Cialdini levers: Authority + Logos.

Most buyers are MIX of dominant + secondary. Always identify both.

THE BUYER'S JOURNEY — temperature-calibrated content:
- COLD: buyer doesn't know they have a problem. Goal: surface problem in their words.
- WARM: buyer knows problem, researching solutions. Goal: prove your approach works.
- HOT: buyer is comparing alternatives or buying. Goal: remove final objections.

Different decision styles need different content at each temperature. The profile must address both axes.

Return EXACTLY this JSON, no fences, no prose:
{
  "dominant_style": "blueprint" | "action" | "nurturing" | "knowledge",
  "dominant_confidence": "high" | "medium" | "low",
  "secondary_style": "blueprint" | "action" | "nurturing" | "knowledge",
  "summary": "2-3 sentences plain language",
  "decision_pattern": "1 paragraph 50-100 words: how dominant + secondary mix expresses",
  "cold_stage_content": "What moves this buyer at cold stage. 60-100 words.",
  "warm_stage_content": "What moves this buyer at warm stage. 60-100 words.",
  "hot_stage_content": "What closes this buyer at hot stage. 60-100 words.",
  "activating_phrases": ["5 verbatim phrases 6-15 words each"],
  "repelling_phrases": ["5 verbatim phrases 6-15 words each"],
  "likely_objections": ["3-5 specific objections in their voice 10-25 words each"],
  "seller_mismatch_warning": "1 paragraph 60-100 words: how operator will mis-fire if natural style differs from buyer's, what to adjust",
  "caveats": ["1-3 honest limitations"]
}` + ANTI_FAB;

  const businessContext = priorParagraph
    ? 'Business idea (from Step 1.1):\n' + priorParagraph + '\n\nBusiness model: ' + (priorBusinessModel || 'unspecified') + '\n\n'
    : 'No prior business context available.\n\n';
  const inputContext = path === 'specific'
    ? 'PATH A — Specific buyer description:\n' + inputText
    : 'PATH B — General avatar description (no specific buyer yet):\n' + inputText + '\n\nNote: produce likely-style profile based on most common decision style for this avatar in this business model. Mark dominant_confidence as "medium" or "low".';
  const user = businessContext + inputContext + '\n\nProfile this buyer.';

  try {
    const text = await callClaude(sys, user, { maxTokens: 4000 });
    const obj = extractJSON(text);
    const required = ['dominant_style', 'dominant_confidence', 'secondary_style', 'summary', 'decision_pattern', 'cold_stage_content', 'warm_stage_content', 'hot_stage_content', 'activating_phrases', 'repelling_phrases', 'likely_objections', 'seller_mismatch_warning'];
    for (const r of required) { if (!(r in obj)) throw new Error('Profile missing required field: ' + r); }

    clearInterval(interval);
    el('loading-state').style.display = 'none';

    setStepOutput(STEP_ID, {
      path: path, inputText: inputText,
      businessIdea: priorParagraph || null,
      profile: obj
    });
    showProfile(obj);
  } catch (err) {
    clearInterval(interval);
    el('loading-state').style.display = 'none';
    el('profile-output').innerHTML = '<div class="banner banner-warn"><strong>Profile generation failed.</strong> ' + escapeHtml(err.message || 'Unknown error') + '<br><br>Common causes: API key issue · rate limit · network · malformed JSON.<br><br><a href="#" onclick="location.reload();return false;" style="color: var(--red-deep);">Try again</a></div>';
  }
}

const STYLE_META = {
  blueprint:  { letter: 'B', name: 'Blueprint-driven',  tagline: 'Plan-first · structured · methodical',     cls: 'style-blueprint'  },
  action:     { letter: 'A', name: 'Action-driven',     tagline: 'Move-fast · results · decisive',           cls: 'style-action'     },
  nurturing:  { letter: 'N', name: 'Nurturing-driven',  tagline: 'Relationship-first · trust · care',        cls: 'style-nurturing'  },
  knowledge:  { letter: 'K', name: 'Knowledge-driven',  tagline: 'Detail-first · evidence · technical',      cls: 'style-knowledge'  }
};

function showProfile(p) {
  let html = '';
  const dom = STYLE_META[p.dominant_style] || STYLE_META.knowledge;
  const sec = STYLE_META[p.secondary_style] || null;
  const confCls = 'conf-' + (p.dominant_confidence || 'medium');

  html += '<div class="style-card ' + dom.cls + '">';
  html += '<span class="style-letter">' + dom.letter + '</span>';
  html += '<div class="style-name" style="display: inline-block;">' + escapeHtml(dom.name);
  html += '<span class="confidence ' + confCls + '">' + escapeHtml((p.dominant_confidence || 'medium').toUpperCase()) + ' CONFIDENCE</span>';
  html += '<small>' + escapeHtml(dom.tagline) + '</small></div>';
  html += '<div class="style-content"><p>' + escapeHtml(p.summary) + '</p></div></div>';

  if (sec && p.secondary_style !== p.dominant_style) {
    html += '<div class="style-card ' + sec.cls + '" style="opacity: 0.92;">';
    html += '<span class="style-letter">' + sec.letter + '</span>';
    html += '<div class="style-name" style="display: inline-block;">' + escapeHtml(sec.name);
    html += '<span class="confidence" style="background: var(--paper-warm); color: var(--muted); border-color: var(--muted);">SECONDARY</span>';
    html += '<small>' + escapeHtml(sec.tagline) + '</small></div></div>';
  }

  html += '<div class="card"><div class="card-header"><div class="card-num">DECISION PATTERN</div><h3>How the mix expresses itself</h3></div>';
  html += '<p>' + escapeHtml(p.decision_pattern) + '</p></div>';

  html += '<div class="card"><div class="card-header"><div class="card-num">BUYER\'S JOURNEY</div><h3>Content for each stage</h3></div>';
  html += '<div class="journey-section"><h5>Cold stage <span class="temp-tag temp-cold">COLD</span></h5><p>' + escapeHtml(p.cold_stage_content) + '</p></div>';
  html += '<div class="journey-section"><h5>Warm stage <span class="temp-tag temp-warm">WARM</span></h5><p>' + escapeHtml(p.warm_stage_content) + '</p></div>';
  html += '<div class="journey-section"><h5>Hot stage <span class="temp-tag temp-hot">HOT</span></h5><p>' + escapeHtml(p.hot_stage_content) + '</p></div></div>';

  html += '<div class="card"><div class="card-header"><div class="card-num">PHRASES</div><h3>What activates / what repels</h3></div>';
  html += '<p style="font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--green); font-weight: 700; margin-top: 6px;">Activating phrases</p>';
  html += '<ul class="phrase-list">' + (p.activating_phrases || []).map(ph => '<li>' + escapeHtml(ph) + '</li>').join('') + '</ul>';
  html += '<p style="font-family: var(--mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--red-deep); font-weight: 700; margin-top: 14px;">Repelling phrases (avoid)</p>';
  html += '<ul class="phrase-list repel">' + (p.repelling_phrases || []).map(ph => '<li>' + escapeHtml(ph) + '</li>').join('') + '</ul></div>';

  html += '<div class="card"><div class="card-header"><div class="card-num">OBJECTIONS</div><h3>Likely objections, ranked</h3></div><ul style="list-style: none; padding: 0;">';
  (p.likely_objections || []).forEach((o, i) => {
    html += '<li style="padding: 8px 0 8px 30px; position: relative; font-family: var(--serif); font-size: 15px; line-height: 1.55; border-bottom: 1px dashed var(--muted);"><span style="position: absolute; left: 0; font-family: var(--mono); font-weight: 700; color: var(--red-deep);">' + (i + 1) + '.</span>' + escapeHtml(o) + '</li>';
  });
  html += '</ul></div>';

  html += '<div class="mismatch-card"><h4>⚠ Seller mismatch — your blind spot</h4><p>' + escapeHtml(p.seller_mismatch_warning) + '</p></div>';

  if (p.caveats && p.caveats.length > 0) {
    html += '<div class="banner banner-info"><strong>Caveats:</strong> ' + p.caveats.map(escapeHtml).join(' · ') + '</div>';
  }

  const summaryText = buildPlainTextSummary(p, dom, sec);
  html += '<div class="btn-row">';
  html += '<button class="btn btn-ghost" id="edit-again-btn">← Edit input</button>';
  html += '<button class="btn" id="copy-summary-btn">Copy profile as text</button>';
  html += '<a href="RISER-Suite-Index.html" class="btn">Suite Index</a>';
  html += '</div>';

  html += '<div class="banner banner-info" style="margin-top: 14px;"><strong>Hand-off note:</strong> Step 1.3 (Pain Discovery) is not yet built as a standalone file. When it ships, it will read this profile from localStorage if your browser allows. Profile saved.</div>';

  el('profile-output').innerHTML = html;
  el('stage-3-pill').classList.add('active');
  document.getElementById('edit-again-btn').addEventListener('click', function() {
    el('stage-input').style.display = 'block'; el('stage-profile').style.display = 'none';
    el('stage-2-pill').classList.remove('active'); el('stage-3-pill').classList.remove('active');
    window.scrollTo({ top: 0, behavior: 'smooth' });
  });
  document.getElementById('copy-summary-btn').addEventListener('click', function() { copyToClipboard(summaryText, this); });
}

function buildPlainTextSummary(p, dom, sec) {
  let s = 'BUYER DECISION STYLE PROFILE\n============================\n\n';
  s += 'Dominant: ' + dom.name + ' (' + (p.dominant_confidence || 'medium').toUpperCase() + ' confidence)\n';
  if (sec && p.secondary_style !== p.dominant_style) s += 'Secondary: ' + sec.name + '\n';
  s += '\nSUMMARY\n' + p.summary + '\n\nDECISION PATTERN\n' + p.decision_pattern + '\n';
  s += '\nBUYER\'S JOURNEY\n\n[COLD]\n' + p.cold_stage_content + '\n\n[WARM]\n' + p.warm_stage_content + '\n\n[HOT]\n' + p.hot_stage_content + '\n';
  s += '\nACTIVATING PHRASES\n';
  (p.activating_phrases || []).forEach((ph, i) => { s += (i + 1) + '. ' + ph + '\n'; });
  s += '\nREPELLING PHRASES (avoid)\n';
  (p.repelling_phrases || []).forEach((ph, i) => { s += (i + 1) + '. ' + ph + '\n'; });
  s += '\nLIKELY OBJECTIONS\n';
  (p.likely_objections || []).forEach((o, i) => { s += (i + 1) + '. ' + o + '\n'; });
  s += '\nSELLER MISMATCH WARNING\n' + p.seller_mismatch_warning + '\n';
  if (p.caveats && p.caveats.length) {
    s += '\nCAVEATS\n';
    p.caveats.forEach((c, i) => { s += (i + 1) + '. ' + c + '\n'; });
  }
  return s;
}

console.log('RISER Step 1.2 Buyer Decision Style loaded. Prior context:', priorParagraph ? 'yes' : 'no', '· Saved:', saved ? 'yes' : 'no');
</script>
</body>
</html>
Original asset: RISER-Suite-Index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RISER Suite Index · Operator's Kit</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=Inter+Tight:[email protected]&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
  --ink: #0a0a0a; --paper: #f7f4ee; --paper-warm: #f0eadf; --paper-deep: #e9e2d2;
  --rule: #1a1a1a; --red: #c9302a; --red-deep: #8b1f1c; --red-tint: #fbe8e6;
  --green: #1d6e3a; --green-tint: #dcefe2; --gold: #b8893a; --gold-tint: #f5ead0;
  --teal: #2c5f5a; --teal-tint: #d8e6e4; --muted: #5a564f;
  --serif: 'Fraunces', Georgia, serif;
  --sans: 'Inter Tight', -apple-system, sans-serif;
  --mono: 'JetBrains Mono', Menlo, monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body { font-family: var(--sans); background: var(--paper); color: var(--ink); line-height: 1.55; font-size: 15px; min-height: 100vh; }
main { max-width: 1000px; margin: 0 auto; padding: 48px 32px 80px; }

.masthead { border-bottom: 3px double var(--rule); padding-bottom: 28px; margin-bottom: 36px; }
.kicker { font-family: var(--mono); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted); margin-bottom: 12px; display: flex; align-items: center; gap: 14px; }
.kicker::after { content: ''; flex: 1; height: 1px; background: var(--rule); opacity: 0.3; }
.title { font-family: var(--serif); font-weight: 600; font-size: clamp(36px, 5vw, 56px); line-height: 1.02; letter-spacing: -0.025em; margin-bottom: 14px; }
.title em { font-style: italic; font-weight: 400; color: var(--red-deep); }
.subtitle { font-family: var(--serif); font-style: italic; font-size: 18px; color: var(--muted); max-width: 760px; line-height: 1.5; }

.section-header {
  font-family: var(--mono); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--red-deep); font-weight: 700;
  margin: 36px 0 16px; padding-bottom: 8px;
  border-bottom: 1.5px solid var(--rule);
  display: flex; align-items: center; gap: 12px;
}
.section-header .num {
  font-family: var(--serif); font-style: italic; font-size: 14px;
  font-weight: 400; color: var(--muted); letter-spacing: 0;
  text-transform: none;
}

.intro-card {
  background: var(--paper-warm);
  border: 1.5px solid var(--rule);
  border-left: 4px solid var(--red-deep);
  padding: 24px 28px;
  margin-bottom: 32px;
}
.intro-card h3 {
  font-family: var(--serif); font-weight: 600; font-size: 22px;
  letter-spacing: -0.015em; line-height: 1.2; margin-bottom: 12px;
}
.intro-card p {
  font-family: var(--serif); font-size: 16px; line-height: 1.6; margin-bottom: 12px;
}
.intro-card p:last-child { margin-bottom: 0; }
.intro-card strong { font-weight: 700; color: var(--ink); }

.start-here-banner {
  background: var(--gold-tint); border: 1.5px solid var(--gold);
  border-left: 4px solid var(--gold);
  padding: 16px 20px; margin-bottom: 24px;
  font-family: var(--serif); font-size: 15px; line-height: 1.55;
}
.start-here-banner strong { font-weight: 700; color: var(--ink); }

.artifact-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 16px;
  margin-bottom: 8px;
}
.artifact-card {
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 22px 24px;
  display: block;
  text-decoration: none;
  color: var(--ink);
  transition: transform 0.12s, box-shadow 0.12s, background 0.12s;
}
.artifact-card:hover {
  transform: translateY(-2px);
  box-shadow: 4px 4px 0 var(--rule);
  background: var(--paper-warm);
}
.artifact-card.featured {
  border-left: 4px solid var(--red-deep);
}
.artifact-card.live-step {
  border-left: 4px solid var(--green);
}
.artifact-card.coming-soon {
  opacity: 0.55;
  background: var(--paper-deep);
  cursor: default;
  pointer-events: none;
}
.artifact-card.doctrine {
  border-left: 4px solid var(--teal);
}

.card-row {
  display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap;
  margin-bottom: 8px;
}
.artifact-num {
  font-family: var(--mono); font-size: 11px; font-weight: 700;
  color: var(--red-deep); letter-spacing: 0.12em;
  min-width: 38px;
}
.artifact-name {
  font-family: var(--serif); font-size: 22px; font-weight: 600;
  letter-spacing: -0.015em; line-height: 1.2; flex: 1;
}
.artifact-tag {
  font-family: var(--mono); font-size: 10px; font-weight: 700;
  letter-spacing: 0.1em; text-transform: uppercase;
  padding: 3px 8px; border: 1px solid currentColor;
}
.tag-doctrine { color: var(--teal); background: var(--teal-tint); border-color: var(--teal); }
.tag-widget { color: var(--red-deep); background: var(--red-tint); border-color: var(--red-deep); }
.tag-step { color: var(--green); background: var(--green-tint); border-color: var(--green); }
.tag-soon { color: var(--muted); background: var(--paper-warm); border-color: var(--muted); }
.tag-reference { color: var(--gold); background: var(--gold-tint); border-color: var(--gold); }

.artifact-desc {
  font-family: var(--serif); font-size: 15px; line-height: 1.55;
  margin-bottom: 10px;
}
.artifact-when {
  font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em;
  color: var(--muted); padding-top: 10px; border-top: 1px dashed var(--rule);
  line-height: 1.55;
}
.artifact-when strong { color: var(--red-deep); font-weight: 700; }

.usage-card {
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 24px 28px;
  margin-bottom: 24px;
}
.usage-card h4 {
  font-family: var(--mono); font-size: 12px; letter-spacing: 0.14em;
  text-transform: uppercase; color: var(--red-deep); font-weight: 700;
  margin-bottom: 10px;
}
.usage-card p { font-family: var(--serif); font-size: 15px; line-height: 1.6; margin-bottom: 10px; }
.usage-card ol, .usage-card ul {
  font-family: var(--serif); font-size: 15px; line-height: 1.6;
  padding-left: 22px; margin-bottom: 10px;
}
.usage-card li { margin-bottom: 6px; }
.usage-card code {
  font-family: var(--mono); font-size: 13px;
  background: var(--paper-warm); padding: 1px 6px;
  border: 1px solid var(--rule);
}

.foot-discipline {
  margin-top: 40px; padding-top: 24px;
  border-top: 1.5px solid var(--rule);
  font-family: var(--serif); font-size: 14px; line-height: 1.6;
  color: var(--muted); font-style: italic;
}
.foot-discipline strong { font-style: normal; color: var(--ink); font-weight: 700; }

@media print {
  body { background: #fff; font-size: 11pt; }
  .artifact-card { background: #fff !important; border: 1px solid #555 !important; page-break-inside: avoid; }
  @page { margin: 0.6in; size: letter; }
}
</style>
</head>
<body>
<main>

  <div class="masthead">
    <div class="kicker">RISER · Captain's Logic Operating Doctrine · v1</div>
    <h1 class="title">The Suite <em>Index</em></h1>
    <p class="subtitle">Ten artifacts for operators building real businesses — Etsy crafts, digital products, professional services, coaching, brick-and-mortar, affiliate programs. Each tool is a single self-contained HTML file. Open this index, pick the one you need, and double-click to open it. Outputs save to your browser between files in most cases.</p>
  </div>

  <div class="intro-card">
    <h3>How this kit is organized</h3>
    <p>RISER is built as a <strong>doctrine document</strong> (the spine), <strong>five widgets</strong> (the work), and <strong>two new step pages</strong> (the foundation work — Phase 1). Plus a script and reference markdown.</p>
    <p>The doctrine document tells you <em>where you are</em> in the work — what phase, what step. The widgets execute the work for that step. The two step pages walk you through the foundational moves before you touch the bigger widgets.</p>
    <p><strong>Don't try to use everything at once.</strong> Pick the artifact that maps to where you actually are right now. Walk it. Save the output. Move to the next one when ready.</p>
  </div>

  <div class="start-here-banner">
    <strong>Don't know where to start?</strong> Open the <strong>RISER Operator's Flow doctrine document</strong> below. It explains the 5 phases / 22 steps and tells you which widget belongs at each step. That's the spine. Everything else hangs from it.
  </div>

  <!-- ============ THE SPINE ============ -->
  <div class="section-header">
    <span>The Spine</span>
    <span class="num">— start here if you're new to the kit</span>
  </div>

  <div class="artifact-grid">
    <a class="artifact-card doctrine" href="RISER-Operators-Flow.html">
      <div class="card-row">
        <span class="artifact-num">DOC 01</span>
        <span class="artifact-name">RISER Operator's Flow — Doctrine Document</span>
        <span class="artifact-tag tag-doctrine">Doctrine</span>
      </div>
      <p class="artifact-desc">Five phases, 22 steps, one continuous feedback loop. Each step has done-when criteria, common failure modes, AI/tool layer guidance graded Real / Useful With Caveats / Mostly Theater, and a map to which RISER widget belongs at that step. Burning-vs-chronic pain prioritization. Identity Commoditization risk named. Reads as an operator's logbook, not a vision document.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> You're new to the kit · You're uncertain which phase you're in · You finish a step and want to know what comes next · You're recovering from a stall and need to diagnose where things broke.</p>
    </a>
  </div>

  <!-- ============ PHASE 1 STEP PAGES ============ -->
  <div class="section-header">
    <span>Phase 1 Step Pages</span>
    <span class="num">— foundation work, walked one step at a time</span>
  </div>

  <div class="artifact-grid">
    <a class="artifact-card live-step" href="RISER-Step-1.1-Idea-Capture.html">
      <div class="card-row">
        <span class="artifact-num">STEP 1.1</span>
        <span class="artifact-name">Idea Capture</span>
        <span class="artifact-tag tag-step">Live · Claude API</span>
      </div>
      <p class="artifact-desc">Refines your raw business idea into a disciplined 5-sentence paragraph: WHO + PROBLEM + SOLUTION + PRICE TIER + WHY YOU. The constraint forces clarity. Honest gaps get marked with [BRACKETS] instead of fabricated. Universal across business models — Etsy, digital, services, coaching, local, affiliate. ~200 words output. Saves to localStorage.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> You have an idea and need to sharpen it · You're stuck describing what you do · You want to feed the same paragraph into multiple downstream tools.</p>
    </a>

    <a class="artifact-card live-step" href="RISER-Step-1.2-Buyer-Decision-Style.html">
      <div class="card-row">
        <span class="artifact-num">STEP 1.2</span>
        <span class="artifact-name">Buyer Decision Style Profile</span>
        <span class="artifact-tag tag-step">Live · Claude API</span>
      </div>
      <p class="artifact-desc">Types your buyer into one of four decision styles — Blueprint, Action, Nurturing, Knowledge — and tells you what content moves them across cold/warm/hot stages of the journey. Activating phrases. Repelling phrases. Likely objections ranked. <strong>Seller mismatch warning</strong> — the highest-leverage piece — names how your natural selling style will mis-fire if it doesn't match this buyer's decision style. Public-domain framework lineage (DISC + Cialdini + Schwartz), not licensed B.A.N.K. methodology.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> You finish Step 1.1 and want to understand HOW your buyer decides · You've had real buyer conversations and want to type the patterns · You're writing copy and don't know what tone fits · You suspect you're losing buyers because of style mismatch.</p>
    </a>
  </div>

  <!-- ============ THE FIVE WIDGETS ============ -->
  <div class="section-header">
    <span>The Widgets</span>
    <span class="num">— interactive tools that do the work for specific steps</span>
  </div>

  <div class="artifact-grid">
    <a class="artifact-card featured" href="RISER-MVO-Widget-Direct.html">
      <div class="card-row">
        <span class="artifact-num">WIDGET 01</span>
        <span class="artifact-name">MVO Decision Engine — 17 Gates</span>
        <span class="artifact-tag tag-widget">Widget · Claude API</span>
      </div>
      <p class="artifact-desc">Validates a business idea through 17 sequential gates — burning-pain test, willingness-to-pay test, kill-criterion definition, MVP scope, channel readiness. Verdict: GO / NO / REWORK with specific reasoning. Anti-fabrication discipline throughout. Designed for operators considering whether to commit to an idea, not retroactive rationalization of one already chosen.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> Operator's Flow Step 1.1, 1.3, 1.4 (Idea Capture → Pain Discovery → Offer Hypothesis) · You're considering an idea and want hard validation before committing · You have a working business but want to test a new direction.</p>
    </a>

    <a class="artifact-card featured" href="RISER-Marketing-Plan-Generator.html">
      <div class="card-row">
        <span class="artifact-num">WIDGET 02</span>
        <span class="artifact-name">Marketing Plan Generator</span>
        <span class="artifact-tag tag-widget">Widget · Claude API</span>
      </div>
      <p class="artifact-desc">Three-stage interactive plan generator. Profession + avatar + 4 sharpening questions → 10-section custom marketing plan. Includes pre-filled scan buttons (Reddit, Google, LinkedIn, AnswerThePublic, SparkToro, PainOnSocial), three channel-specific outreach scripts (LinkedIn / Cold Email / Reddit reply) with copy buttons. Print stylesheet included.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> Operator's Flow Phase 2 (Asset Build) and early Phase 3 (Acquisition) · You have a validated business and need a coherent plan, not a list of tactics · You want a written deliverable to tape to the wall and execute against.</p>
    </a>

    <a class="artifact-card featured" href="RISER-Tool-Catalog.html">
      <div class="card-row">
        <span class="artifact-num">WIDGET 03</span>
        <span class="artifact-name">Pain Discovery Tool Catalog</span>
        <span class="artifact-tag tag-widget">Widget</span>
      </div>
      <p class="artifact-desc">41 verified tools across 7 tiers for surfacing buyer pain in their own language. Reddit scrapers, social listening, review mining, search-intent tools, survey platforms, interview transcript tools. Real pricing. Honest tradeoffs (fast/slow, expensive/free, broad/deep). No fabricated metrics.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> Operator's Flow Step 1.3 (Pain Discovery) · Your idea paragraph from Step 1.1 has a vague PROBLEM sentence · You need verbatim pain language to write a lead magnet, sales page, or outreach script.</p>
    </a>

    <a class="artifact-card featured" href="RISER-Client-Acquisition-Catalog.html">
      <div class="card-row">
        <span class="artifact-num">WIDGET 04</span>
        <span class="artifact-name">Client Acquisition Tool Catalog</span>
        <span class="artifact-tag tag-widget">Widget</span>
      </div>
      <p class="artifact-desc">39 verified tools across 7 channels for high-ticket professional service acquisition: Visitor ID, Expert Directories, LinkedIn, B2B Contact Data, Legal Intel, Outreach + CRM, Reputation. Six-step buyer journey framework. Dream 100 template. Real pricing.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> Operator's Flow Phase 3 (Acquisition) · You sell professional services or coaching at $5K+ deal size · You're building a Dream 100 list · You need to know which tool fills which gap before you spend.</p>
    </a>

    <a class="artifact-card featured" href="RISER-MVO-Widget-Explainer-Script.docx">
      <div class="card-row">
        <span class="artifact-num">WIDGET 05</span>
        <span class="artifact-name">MVO Widget Explainer Script</span>
        <span class="artifact-tag tag-reference">Reference · Word Doc</span>
      </div>
      <p class="artifact-desc">Talking-head video script (~28-35 min runtime) walking through the MVO Decision Engine. 8 sections. Doctrine pull-quotes. Designed for an operator-creator explaining the tool, not a tutorial-style demo. Word document for editing.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> You're recording video content explaining the MVO widget · You want script structure for a similar walk-through video on a different RISER artifact · You're building lead magnets that include video.</p>
    </a>
  </div>

  <!-- ============ REFERENCE FILES ============ -->
  <div class="section-header">
    <span>Reference Files</span>
    <span class="num">— source material, editable copies</span>
  </div>

  <div class="artifact-grid">
    <a class="artifact-card" href="RISER-Operators-Flow.md" style="border-left: 4px solid var(--gold);">
      <div class="card-row">
        <span class="artifact-num">REF 01</span>
        <span class="artifact-name">Operator's Flow — Markdown Source</span>
        <span class="artifact-tag tag-reference">Markdown</span>
      </div>
      <p class="artifact-desc">The doctrine document in markdown form. Editable. Use this if you want to modify the flow for your own context, embed it in Notion or Obsidian, or feed it to another LLM as context for downstream work.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> You want to fork the doctrine for your own use · You're feeding RISER context into another tool · You prefer reading in markdown.</p>
    </a>

    <a class="artifact-card" href="RISER-Widget-Pain-Discovery-Tools-Merged.md" style="border-left: 4px solid var(--gold);">
      <div class="card-row">
        <span class="artifact-num">REF 02</span>
        <span class="artifact-name">Pain Discovery Tools — Markdown Source</span>
        <span class="artifact-tag tag-reference">Markdown</span>
      </div>
      <p class="artifact-desc">The Pain Discovery Tool Catalog source content in markdown. Useful for customization or pulling individual tool entries into other documents.</p>
      <p class="artifact-when"><strong>USE WHEN:</strong> You want to extract specific tool reviews · You're adding new tools and want to maintain the same format.</p>
    </a>
  </div>

  <!-- ============ COMING SOON STEPS ============ -->
  <div class="section-header">
    <span>Phase 1 Steps Still To Build</span>
    <span class="num">— planned step pages, not yet shipped</span>
  </div>

  <div class="artifact-grid">
    <div class="artifact-card coming-soon">
      <div class="card-row">
        <span class="artifact-num">STEP 1.3</span>
        <span class="artifact-name">Pain Discovery</span>
        <span class="artifact-tag tag-soon">Soon</span>
      </div>
      <p class="artifact-desc">Walks operator through pain discovery using prior context (Step 1.1 idea + Step 1.2 buyer profile). Produces a structured pain document with verbatim quotes, burning-vs-chronic tagging, and ranked priority. In the meantime, use the Pain Discovery Tool Catalog widget above.</p>
    </div>

    <div class="artifact-card coming-soon">
      <div class="card-row">
        <span class="artifact-num">STEP 1.4</span>
        <span class="artifact-name">Offer Hypothesis</span>
        <span class="artifact-tag tag-soon">Soon</span>
      </div>
      <p class="artifact-desc">Drafts an offer hypothesis using Hormozi-lineage value-equation thinking calibrated to the buyer's decision style. Defines kill criterion. Pressure-tests pricing. In the meantime, use Section 06 of the Marketing Plan Generator output.</p>
    </div>

    <div class="artifact-card coming-soon">
      <div class="card-row">
        <span class="artifact-num">STEP 1.5</span>
        <span class="artifact-name">MVP / Service Definition</span>
        <span class="artifact-tag tag-soon">Soon</span>
      </div>
      <p class="artifact-desc">Defines the smallest version of the offer you can ship and learn from. Scope, deliverable structure, pricing, kill criterion. For services this becomes your SOW template.</p>
    </div>
  </div>

  <!-- ============ HOW TO USE ============ -->
  <div class="section-header">
    <span>How to use this kit</span>
    <span class="num">— operating notes</span>
  </div>

  <div class="usage-card">
    <h4>The honest sequence</h4>
    <ol>
      <li><strong>Read the Operator's Flow doctrine first.</strong> 30 minutes of reading. It tells you which artifact belongs at which step.</li>
      <li><strong>Walk Phase 1 in order:</strong> Step 1.1 Idea Capture → Step 1.2 Buyer Decision Style → MVO Widget for full validation. The first two are fast. The MVO Widget is deep.</li>
      <li><strong>For Phase 2 (Asset Build):</strong> Run the Marketing Plan Generator with your sharpened idea + buyer profile. Use the Pain Discovery Tool Catalog if pain language is still vague.</li>
      <li><strong>For Phase 3 (Acquisition):</strong> Use the Client Acquisition Catalog if you sell high-ticket services or coaching. The Marketing Plan Generator's Section 09 covers acquisition for other business models.</li>
      <li><strong>For Phase 4 + 5 (Operations + Iteration):</strong> The doctrine document is the spine. Standalone widgets for these phases are not yet built.</li>
    </ol>
  </div>

  <div class="usage-card">
    <h4>State sharing between files</h4>
    <p>The two step pages (1.1 and 1.2) save your output to <code>localStorage</code>. Whether outputs carry between separate HTML files depends on your browser:</p>
    <ul>
      <li><strong>Chrome (default settings):</strong> Files in the same folder usually share localStorage. Step 1.2 will pick up Step 1.1's paragraph automatically.</li>
      <li><strong>Firefox / Safari:</strong> Generally do NOT share between local files. Each file has isolated localStorage.</li>
      <li><strong>Workaround that always works:</strong> Each step page has a "Copy" button on its output. Copy the text, then paste into the next step's prior-context field. The widgets are designed to handle either path.</li>
    </ul>
    <p>If you want guaranteed state sharing, host all the files on a single Netlify project so they share the same origin. But for personal operator practice, the copy-paste workflow is reliable and explicit.</p>
  </div>

  <div class="usage-card">
    <h4>API key handling</h4>
    <p>The two step pages and three widgets that use Claude all need an Anthropic API key. <a href="https://console.anthropic.com/settings/keys" target="_blank" rel="noopener" style="color: var(--red-deep);">Get one here</a>. Each tool stores it locally in your browser. Approximate cost per use: $0.05–$0.15 on Sonnet 4.6, $0.50–$1.50 on Opus 4.7.</p>
    <p>Your key is never sent anywhere except <code>api.anthropic.com</code>. Anthropic's Trust Center lays out their data handling.</p>
  </div>

  <div class="usage-card">
    <h4>Printing &amp; sharing</h4>
    <p>Every artifact has a print stylesheet that strips navigation and renders cleanly to PDF. Use your browser's "Print → Save as PDF" to capture an output.</p>
    <p>To share an individual artifact with someone, you can drag any single <code>.html</code> file onto <a href="https://app.netlify.com/drop" target="_blank" rel="noopener" style="color: var(--red-deep);">Netlify Drop</a> for a free public URL. Single files don't have folder-vs-contents problems. Each one becomes its own deploy.</p>
  </div>

  <p class="foot-discipline">
    <strong>Discipline notes for using this kit.</strong> No artifact in this suite produces fabricated metrics, fake firm names, invented testimonials, or outcome guarantees. Every Claude-generated output uses the same anti-fabrication rules. If a tool can't speak with confidence about your specific niche, it says so in caveats. The honest gap is part of the deliverable, not a defect to hide. Treat AI-generated drafts as starting points for testing in your real market — not as plans to execute without human judgment.
  </p>

</main>
</body>
</html>
Original asset: RISER-Tool-Catalog.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RISER Tool Catalog · Pain Discovery & VOC Stack</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=Inter+Tight:[email protected]&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
  --ink: #0a0a0a;
  --paper: #f7f4ee;
  --paper-warm: #f0eadf;
  --paper-deep: #e9e2d2;
  --rule: #1a1a1a;
  --red: #c9302a;
  --red-deep: #8b1f1c;
  --red-tint: #fbe8e6;
  --red-soft: #f9d8d5;
  --green: #1d6e3a;
  --green-tint: #dcefe2;
  --gold: #b8893a;
  --gold-tint: #f5ead0;
  --teal: #2c5f5a;
  --teal-tint: #d8e6e4;
  --muted: #5a564f;
  --serif: 'Fraunces', Georgia, serif;
  --sans: 'Inter Tight', -apple-system, sans-serif;
  --mono: 'JetBrains Mono', Menlo, monospace;
}

* { box-sizing: border-box; margin: 0; padding: 0; }

html { scroll-behavior: smooth; }

body {
  font-family: var(--sans);
  background: var(--paper);
  color: var(--ink);
  line-height: 1.55;
  font-size: 15px;
  min-height: 100vh;
}

/* ============ MASTHEAD ============ */
.masthead {
  border-bottom: 3px double var(--rule);
  padding: 36px 32px 28px;
  background: var(--paper);
  position: relative;
}
.masthead-inner {
  max-width: 1280px;
  margin: 0 auto;
}
.kicker {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 12px;
  display: flex;
  align-items: center;
  gap: 14px;
}
.kicker::after {
  content: '';
  flex: 1;
  height: 1px;
  background: var(--rule);
  opacity: 0.3;
}
.title {
  font-family: var(--serif);
  font-weight: 600;
  font-size: clamp(36px, 5vw, 58px);
  line-height: 1.0;
  letter-spacing: -0.025em;
  margin-bottom: 14px;
}
.title em {
  font-style: italic;
  font-weight: 400;
  color: var(--red-deep);
}
.subtitle {
  font-family: var(--serif);
  font-style: italic;
  font-size: 18px;
  color: var(--muted);
  max-width: 720px;
  line-height: 1.45;
}
.colophon {
  margin-top: 22px;
  display: flex;
  flex-wrap: wrap;
  gap: 10px 22px;
  font-family: var(--mono);
  font-size: 11px;
  color: var(--muted);
  letter-spacing: 0.05em;
}
.colophon span::before {
  content: '·';
  margin-right: 22px;
  color: var(--muted);
  opacity: 0.5;
}
.colophon span:first-child::before { content: ''; margin: 0; }

/* ============ INTRO STRIP ============ */
.intro {
  padding: 32px;
  background: var(--paper-warm);
  border-bottom: 1px solid var(--rule);
}
.intro-inner {
  max-width: 1280px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 32px;
}
.intro-item h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--red-deep);
  margin-bottom: 8px;
  font-weight: 700;
}
.intro-item p {
  font-family: var(--serif);
  font-size: 16px;
  line-height: 1.5;
}
.intro-item p strong {
  font-weight: 600;
}
@media (max-width: 800px) {
  .intro-inner { grid-template-columns: 1fr; }
}

/* ============ CONTROLS ============ */
.controls-bar {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--paper);
  border-bottom: 1px solid var(--rule);
  padding: 16px 32px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.04);
}
.controls-inner {
  max-width: 1280px;
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
}
.search-box {
  flex: 1;
  min-width: 240px;
  position: relative;
}
.search-box input {
  width: 100%;
  padding: 10px 14px 10px 40px;
  font-family: var(--sans);
  font-size: 14px;
  border: 1.5px solid var(--rule);
  border-radius: 0;
  background: var(--paper);
  color: var(--ink);
  transition: border-color 0.15s, background 0.15s;
}
.search-box input:focus {
  outline: none;
  border-color: var(--red-deep);
  background: #fff;
}
.search-box::before {
  content: '⌕';
  position: absolute;
  left: 14px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 16px;
  color: var(--muted);
  pointer-events: none;
}

.filter-group {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  align-items: center;
}
.filter-label {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--muted);
  margin-right: 4px;
}
.filter-btn {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.04em;
  padding: 7px 12px;
  border: 1.5px solid var(--rule);
  background: var(--paper);
  color: var(--ink);
  cursor: pointer;
  transition: all 0.12s;
  text-transform: uppercase;
  font-weight: 500;
}
.filter-btn:hover {
  background: var(--ink);
  color: var(--paper);
}
.filter-btn.active {
  background: var(--red-deep);
  color: var(--paper);
  border-color: var(--red-deep);
}
.filter-btn.active:hover {
  background: var(--red);
}

.results-counter {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.08em;
  color: var(--muted);
  margin-left: auto;
  text-transform: uppercase;
}
.results-counter strong {
  color: var(--ink);
  font-weight: 700;
}

/* ============ MAIN CONTENT ============ */
main {
  max-width: 1280px;
  margin: 0 auto;
  padding: 40px 32px 80px;
}

.tier-section {
  margin-bottom: 64px;
  scroll-margin-top: 100px;
}
.tier-section.hidden { display: none; }

.tier-header {
  display: flex;
  align-items: baseline;
  gap: 16px;
  margin-bottom: 10px;
  border-bottom: 2px solid var(--rule);
  padding-bottom: 14px;
}
.tier-num {
  font-family: var(--mono);
  font-size: 12px;
  font-weight: 700;
  color: var(--red-deep);
  letter-spacing: 0.1em;
}
.tier-name {
  font-family: var(--serif);
  font-size: 32px;
  font-weight: 600;
  letter-spacing: -0.02em;
  flex: 1;
}
.tier-count {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--muted);
  letter-spacing: 0.08em;
  white-space: nowrap;
}

.tier-purpose {
  font-family: var(--serif);
  font-style: italic;
  font-size: 16px;
  color: var(--muted);
  margin-bottom: 28px;
  max-width: 760px;
  line-height: 1.5;
}
.tier-purpose .gate-ref {
  font-style: normal;
  color: var(--red-deep);
  font-weight: 600;
}

/* ============ TOOL CARDS ============ */
.tool-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));
  gap: 20px;
}

.tool-card {
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 22px 22px 18px;
  display: flex;
  flex-direction: column;
  position: relative;
  transition: transform 0.12s, box-shadow 0.12s, background 0.12s;
}
.tool-card:hover {
  transform: translateY(-2px);
  box-shadow: 4px 4px 0 var(--rule);
  background: var(--paper-warm);
}
.tool-card.hidden { display: none; }

.tool-card.tier-enterprise {
  background: var(--paper-deep);
}
.tool-card.tier-enterprise:hover {
  background: #ddd5c2;
}

.tool-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 6px;
}
.tool-name {
  font-family: var(--serif);
  font-size: 22px;
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: -0.01em;
}
.tool-name a {
  color: var(--ink);
  text-decoration: none;
  border-bottom: 1px dotted var(--muted);
  transition: border-color 0.12s, color 0.12s;
}
.tool-name a:hover {
  color: var(--red-deep);
  border-color: var(--red-deep);
}

.tool-flags {
  display: flex;
  gap: 4px;
  flex-shrink: 0;
}
.flag {
  font-family: var(--mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.1em;
  padding: 3px 6px;
  border: 1px solid currentColor;
  text-transform: uppercase;
  white-space: nowrap;
}
.flag-new { color: var(--green); }
.flag-enterprise { color: var(--gold); }
.flag-budget { color: var(--teal); }
.flag-free { color: var(--green); background: var(--green-tint); border-color: var(--green); }

.tool-url {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--muted);
  margin-bottom: 12px;
  letter-spacing: 0.02em;
  word-break: break-all;
}

.tool-pricing {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  background: var(--paper-warm);
  border-left: 3px solid var(--gold);
  margin-bottom: 14px;
  font-family: var(--mono);
  font-size: 12px;
}
.tool-card.tier-enterprise .tool-pricing {
  background: var(--paper);
  border-left-color: var(--red-deep);
}
.pricing-label {
  font-size: 10px;
  letter-spacing: 0.12em;
  color: var(--muted);
  text-transform: uppercase;
  flex-shrink: 0;
}
.pricing-value {
  color: var(--ink);
  font-weight: 600;
}

.tool-description {
  font-family: var(--serif);
  font-size: 15px;
  line-height: 1.5;
  margin-bottom: 14px;
  color: var(--ink);
}

.tool-section {
  margin-bottom: 12px;
  font-size: 13px;
  line-height: 1.5;
}
.tool-section h4 {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 4px;
}
.tool-section p {
  color: var(--ink);
}
.tool-section ul {
  list-style: none;
  padding: 0;
}
.tool-section li {
  padding-left: 14px;
  position: relative;
  margin-bottom: 3px;
  color: var(--ink);
}
.tool-section li::before {
  content: '→';
  position: absolute;
  left: 0;
  color: var(--gold);
  font-weight: 600;
}

.tool-footer {
  display: flex;
  gap: 8px;
  margin-top: auto;
  padding-top: 12px;
  border-top: 1px dashed var(--muted);
  flex-wrap: wrap;
}
.gate-tag {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.06em;
  padding: 3px 8px;
  background: var(--red-tint);
  color: var(--red-deep);
  font-weight: 600;
}

/* ============ TOC NAV ============ */
.toc {
  position: fixed;
  top: 50%;
  right: 24px;
  transform: translateY(-50%);
  z-index: 40;
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 14px 14px;
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  max-width: 200px;
  box-shadow: 4px 4px 0 var(--rule);
}
.toc-label {
  font-weight: 700;
  color: var(--red-deep);
  margin-bottom: 8px;
  border-bottom: 1px solid var(--rule);
  padding-bottom: 6px;
}
.toc a {
  display: block;
  color: var(--ink);
  text-decoration: none;
  padding: 4px 0;
  transition: color 0.12s;
  line-height: 1.3;
}
.toc a:hover {
  color: var(--red-deep);
}
.toc-num {
  color: var(--muted);
  margin-right: 6px;
}

@media (max-width: 1100px) {
  .toc { display: none; }
}

/* ============ STACK SECTION ============ */
.stacks {
  background: var(--paper-warm);
  padding: 56px 32px;
  border-top: 3px double var(--rule);
  border-bottom: 3px double var(--rule);
  margin: 64px -32px;
}
.stacks-inner {
  max-width: 1280px;
  margin: 0 auto;
}
.stacks-title {
  font-family: var(--serif);
  font-size: 36px;
  font-weight: 600;
  margin-bottom: 8px;
  letter-spacing: -0.02em;
}
.stacks-sub {
  font-family: var(--serif);
  font-style: italic;
  color: var(--muted);
  margin-bottom: 36px;
  font-size: 16px;
}
.stack-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 20px;
}
.stack-card {
  background: var(--paper);
  border: 1.5px solid var(--rule);
  padding: 22px;
  display: flex;
  flex-direction: column;
}
.stack-card h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  font-weight: 700;
  margin-bottom: 4px;
}
.stack-card .stack-name {
  font-family: var(--serif);
  font-size: 24px;
  font-weight: 600;
  margin-bottom: 10px;
  letter-spacing: -0.015em;
}
.stack-card .stack-cost {
  font-family: var(--mono);
  font-size: 12px;
  color: var(--gold);
  font-weight: 600;
  margin-bottom: 14px;
  letter-spacing: 0.04em;
}
.stack-card p {
  font-family: var(--serif);
  font-size: 15px;
  line-height: 1.5;
  margin-bottom: 14px;
  color: var(--ink);
}
.stack-card ul {
  list-style: none;
  padding: 0;
  margin-top: auto;
}
.stack-card li {
  padding: 6px 0;
  border-bottom: 1px dotted var(--muted);
  font-size: 13px;
  color: var(--ink);
  display: flex;
  justify-content: space-between;
  gap: 10px;
}
.stack-card li:last-child { border-bottom: none; }
.stack-card .stack-item-name {
  font-weight: 500;
}
.stack-card .stack-item-tier {
  font-family: var(--mono);
  font-size: 10px;
  color: var(--muted);
  letter-spacing: 0.06em;
}

/* ============ FOOTER ============ */
footer {
  border-top: 3px double var(--rule);
  padding: 40px 32px 60px;
  background: var(--paper);
}
.footer-inner {
  max-width: 1280px;
  margin: 0 auto;
}
.footer-grid {
  display: grid;
  grid-template-columns: 2fr 1fr;
  gap: 40px;
  margin-bottom: 32px;
}
@media (max-width: 700px) {
  .footer-grid { grid-template-columns: 1fr; }
}
.footer-grid h3 {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--red-deep);
  margin-bottom: 12px;
  font-weight: 700;
}
.footer-grid p {
  font-family: var(--serif);
  font-size: 15px;
  line-height: 1.55;
  color: var(--ink);
  margin-bottom: 12px;
}
.footer-rule {
  border-top: 1px solid var(--rule);
  padding-top: 20px;
  font-family: var(--mono);
  font-size: 11px;
  color: var(--muted);
  letter-spacing: 0.04em;
}
.footer-rule strong {
  color: var(--ink);
  font-weight: 700;
}

/* ============ NO RESULTS ============ */
.no-results {
  text-align: center;
  padding: 60px 20px;
  font-family: var(--serif);
  font-style: italic;
  font-size: 18px;
  color: var(--muted);
  display: none;
}
.no-results.visible { display: block; }

/* ============ ANIMATIONS ============ */
@keyframes fadeUp {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
.tool-card {
  animation: fadeUp 0.3s ease-out backwards;
}

</style>
</head>
<body>

<header class="masthead">
  <div class="masthead-inner">
    <div class="kicker">RISER Captain's Logic · Companion Catalog · Standalone</div>
    <h1 class="title">The Pain Discovery <em>&</em> Voice-of-Customer Stack</h1>
    <p class="subtitle">Forty-one verified tools that feed the RISER MVO Decision Engine. Costs, features, benefits, and the specific gate each one serves. No omissions, no fabricated prices, no dead links.</p>
    <div class="colophon">
      <span>v1 · April 2026</span>
      <span>41 tools across 7 tiers</span>
      <span>All links verified live</span>
      <span>Companion to the v3 widget</span>
    </div>
  </div>
</header>

<section class="intro">
  <div class="intro-inner">
    <div class="intro-item">
      <h3>How to read this</h3>
      <p>Tools are grouped by <strong>where they feed the widget</strong>, not alphabetically. The tier number tells you which gate they serve. Within tiers, the order is rough recommendation strength.</p>
    </div>
    <div class="intro-item">
      <h3>About the pricing</h3>
      <p>Where vendors publish prices, the <strong>real number</strong> appears. Where they only say "contact us," that's what's printed — no fabricated quotes. Enterprise tools are flagged so you don't sign up for a $1,000+/mo platform by accident.</p>
    </div>
    <div class="intro-item">
      <h3>The minimum stack</h3>
      <p><strong>One Tier 1 tool + SparkToro + Typeform.</strong> ~$60–100/month. That's enough to walk every gate of the widget with real evidence. Everything else compounds value, but isn't required to start.</p>
    </div>
  </div>
</section>

<div class="controls-bar">
  <div class="controls-inner">
    <div class="search-box">
      <input type="text" id="searchInput" placeholder="Search tools by name, feature, or use case…" autocomplete="off">
    </div>
    <div class="filter-group">
      <span class="filter-label">Tier:</span>
      <button class="filter-btn active" data-filter="all" data-filter-type="tier">All</button>
      <button class="filter-btn" data-filter="1" data-filter-type="tier">1·Reddit</button>
      <button class="filter-btn" data-filter="2" data-filter-type="tier">2·Audience</button>
      <button class="filter-btn" data-filter="3" data-filter-type="tier">3·VOC</button>
      <button class="filter-btn" data-filter="4" data-filter-type="tier">4·Listening</button>
      <button class="filter-btn" data-filter="5" data-filter-type="tier">5·Enterprise</button>
      <button class="filter-btn" data-filter="6" data-filter-type="tier">6·Validation</button>
      <button class="filter-btn" data-filter="7" data-filter-type="tier">7·Quant</button>
    </div>
    <div class="filter-group">
      <span class="filter-label">Budget:</span>
      <button class="filter-btn active" data-filter="all" data-filter-type="budget">All</button>
      <button class="filter-btn" data-filter="free" data-filter-type="budget">Free</button>
      <button class="filter-btn" data-filter="cheap" data-filter-type="budget">&lt;$50/mo</button>
      <button class="filter-btn" data-filter="mid" data-filter-type="budget">$50–500</button>
      <button class="filter-btn" data-filter="enterprise" data-filter-type="budget">Enterprise</button>
    </div>
    <div class="results-counter"><strong id="resultCount">41</strong> shown</div>
  </div>
</div>

<nav class="toc">
  <div class="toc-label">Tiers</div>
  <a href="#tier-1"><span class="toc-num">1·</span>Reddit Pain Mining</a>
  <a href="#tier-2"><span class="toc-num">2·</span>Audience Intel</a>
  <a href="#tier-3"><span class="toc-num">3·</span>VOC Synthesis</a>
  <a href="#tier-4"><span class="toc-num">4·</span>Listening</a>
  <a href="#tier-5"><span class="toc-num">5·</span>Enterprise</a>
  <a href="#tier-6"><span class="toc-num">6·</span>Validation</a>
  <a href="#tier-7"><span class="toc-num">7·</span>Quant</a>
  <a href="#stacks" style="margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--rule); color: var(--red-deep);">Recommended Stacks</a>
</nav>

<main id="catalog">
  <!-- Tools render here via JS -->
</main>

<div class="no-results" id="noResults">
  No tools match those filters. Try widening your criteria or clearing the search.
</div>

<section class="stacks" id="stacks">
  <div class="stacks-inner">
    <h2 class="stacks-title">Recommended Stacks</h2>
    <p class="stacks-sub">Three operator-tested combinations, ranked by where you are in the build.</p>
    <div class="stack-grid">
      <div class="stack-card">
        <h3>Stage One</h3>
        <div class="stack-name">Validation Starter</div>
        <div class="stack-cost">~$60–100/month</div>
        <p>Enough to walk Gate 00½ through Gate 06 with real evidence. Skip everything else until you have ten paying customers.</p>
        <ul>
          <li><span class="stack-item-name">PainOnSocial Starter</span><span class="stack-item-tier">$19/mo</span></li>
          <li><span class="stack-item-name">SparkToro Personal</span><span class="stack-item-tier">$38/mo</span></li>
          <li><span class="stack-item-name">F5Bot</span><span class="stack-item-tier">Free</span></li>
          <li><span class="stack-item-name">Typeform free tier</span><span class="stack-item-tier">Free</span></li>
        </ul>
      </div>
      <div class="stack-card">
        <h3>Stage Two</h3>
        <div class="stack-name">Iterate & Compound</div>
        <div class="stack-cost">~$200–400/month</div>
        <p>Add VOC structure once you have customer interview data and a live offer. Now Gate 08 has fuel.</p>
        <ul>
          <li><span class="stack-item-name">Stage One stack</span><span class="stack-item-tier">~$60</span></li>
          <li><span class="stack-item-name">Dovetail Free or paid</span><span class="stack-item-tier">$0–29/mo</span></li>
          <li><span class="stack-item-name">Brand24</span><span class="stack-item-tier">$99–199/mo</span></li>
          <li><span class="stack-item-name">Hotjar</span><span class="stack-item-tier">$39+/mo</span></li>
        </ul>
      </div>
      <div class="stack-card">
        <h3>Stage Three</h3>
        <div class="stack-name">Scale & Defend</div>
        <div class="stack-cost">$500+/month</div>
        <p>Tier 5 enterprise tools start to earn keep when you're running multi-channel and need cross-platform sentiment at scale. Most operators never need this.</p>
        <ul>
          <li><span class="stack-item-name">Stage Two stack</span><span class="stack-item-tier">~$300</span></li>
          <li><span class="stack-item-name">Wynter message tests</span><span class="stack-item-tier">$540+/mo</span></li>
          <li><span class="stack-item-name">Brandwatch / Sprout</span><span class="stack-item-tier">$1k+/mo</span></li>
          <li><span class="stack-item-name">Insight7 or Productboard</span><span class="stack-item-tier">Custom</span></li>
        </ul>
      </div>
    </div>
  </div>
</section>

<footer>
  <div class="footer-inner">
    <div class="footer-grid">
      <div>
        <h3>Operator's note</h3>
        <p>This catalog is a reference, not a shopping list. The widget's Gate 00½ has a skip-path because operator hypothesis can carry you to Gate 03 without paying anyone a dollar. Don't shop tools to avoid talking to humans — that's the trap that catches more founders than any other.</p>
        <p>The right time to add a tool is the moment its absence is genuinely slowing you down. Not before.</p>
      </div>
      <div>
        <h3>What I excluded</h3>
        <p><strong>GummySearch</strong> — shut down November 30, 2025.<br><strong>DemandDrop, MarketScope</strong> — could not verify as live products.<br><strong>Twitter/X listening tools</strong> — API terms make most unreliable in 2026.</p>
      </div>
    </div>
    <div class="footer-rule">
      <strong>RISER Captain's Logic</strong> · Companion to the MVO Decision Engine v3 · April 2026 · All vendor names, pricing, and links verified at time of publication. Re-verify before purchase — pricing and availability change.
    </div>
  </div>
</footer>

<script>
// ============================================================================
// TOOL DATA — 41 verified entries
// ============================================================================
const TOOLS = [
  // ============ TIER 1 — REDDIT PAIN MINING ============
  {
    id: 'painonsocial',
    name: 'PainOnSocial',
    url: 'https://www.painonsocial.com/',
    urlDisplay: 'painonsocial.com',
    tier: 1,
    pricing: 'Starter $19/mo · Pro $49/mo',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'AI Reddit scanner with 0–100 pain scoring across 30+ curated communities. Evidence quotes, AI-generated solution ideas, audience analysis. The reference tool for the widget.',
    features: ['0–100 pain score per opportunity', 'Real Reddit quotes + permalinks', 'AI solution ideas with monetization', 'Curated 30+ subreddit catalog', 'Audience demographics analysis'],
    benefit: 'Compresses weeks of manual subreddit reading into a single scan with structured, verifiable output.',
    feeds: ['Gate 00½'],
    notes: '7-day free trial on Starter. Pro adds 15 scans/day, 5 subreddits, 90-day timeframes.'
  },
  {
    id: 'reddily',
    name: 'Reddily',
    url: 'https://reddily.io/',
    urlDisplay: 'reddily.io',
    tier: 1,
    pricing: 'Pay-per-analysis · 5 free credits',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Chrome extension + dashboard. Uses Google Gemini to extract sentiment, pain points, feature requests, and quotes from any Reddit thread. Pay-per-analysis pricing.',
    features: ['One-click thread analysis', 'Batch processing up to 25 threads', 'Sentiment + pain extraction', 'Feature-request detection', 'Chrome extension'],
    benefit: 'Best for ad-hoc research where you don\'t want a recurring subscription.',
    feeds: ['Gate 00½'],
    notes: 'Pay-per-analysis model means you only pay for what you scan.'
  },
  {
    id: 'painpointy',
    name: 'PainPointy',
    url: 'https://painpointy.com/',
    urlDisplay: 'painpointy.com',
    tier: 1,
    pricing: 'Pricing on site',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Surfaces pain points, content ideas, reply opportunities, and brand mentions from Reddit. Smaller indie tool with a similar shape to PainOnSocial.',
    features: ['60-second subreddit scans', 'Daily agency reports', 'Reply opportunity detection', 'Content idea surfacing'],
    benefit: 'Lighter-weight alternative if PainOnSocial pricing or interface doesn\'t fit.',
    feeds: ['Gate 00½', 'Gate 06']
  },
  {
    id: 'buzzabout',
    name: 'BuzzAbout',
    url: 'https://buzzabout.ai/',
    urlDisplay: 'buzzabout.ai',
    tier: 1,
    pricing: 'Pricing on site',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Market research agent for Reddit and other social platforms. Broader source coverage than Reddit-only tools.',
    features: ['Multi-platform coverage', 'AI agent workflow', 'Market trend tracking'],
    benefit: 'Useful when your audience lives on more than just Reddit.',
    feeds: ['Gate 00½', 'Gate 01']
  },
  {
    id: 'syften',
    name: 'Syften',
    url: 'https://syften.com/',
    urlDisplay: 'syften.com',
    tier: 1,
    pricing: '~$39.95/mo Standard',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Tracks keywords across Reddit, Hacker News, and 10+ platforms. Real-time alerts. Closest like-for-like replacement for the discontinued GummySearch monitoring workflow.',
    features: ['Reddit + HN + 10+ platforms', 'Boolean search support', 'Slack alerts', '20 filters on Standard'],
    benefit: 'The tool to use if you specifically miss GummySearch\'s alert-and-monitor workflow.',
    feeds: ['Gate 00½', 'Gate 09']
  },
  {
    id: 'subredditsignals',
    name: 'Subreddit Signals',
    url: 'https://subredditsignals.com/',
    urlDisplay: 'subredditsignals.com',
    tier: 1,
    pricing: 'Starter $19.99/mo',
    pricingTier: 'cheap',
    flags: ['new'],
    blurb: 'AI-scored Reddit lead detection with 7-dimension intent classification (PURCHASE_READY, switching intent, budget questions). Built more for high-intent buyers than for raw pain mining.',
    features: ['7-dimension intent scoring', 'PURCHASE_READY classification', '15 weekly lead tokens (Starter)', 'AI comment templates', 'Switching-intent detection'],
    benefit: 'Best when you want leads, not just pain points — already-qualified buyers actively searching.',
    feeds: ['Gate 00½', 'Gate 05']
  },
  {
    id: 'redreach',
    name: 'Redreach',
    url: 'https://www.reddireach.com/',
    urlDisplay: 'reddireach.com',
    tier: 1,
    pricing: '~$29/mo unlimited',
    pricingTier: 'cheap',
    flags: ['new'],
    blurb: 'AI-powered Reddit conversation discovery and reply assist. Volume-oriented (unlimited monitoring, no token caps). Pair with intent scoring from another tool to filter noise.',
    features: ['Unlimited monitoring', 'No token caps', 'AI reply assist', 'Google-ranking post detection', 'Bulk DM workflow'],
    benefit: 'Volume play if you have time to filter manually and want broad coverage.',
    feeds: ['Gate 00½', 'Gate 05']
  },
  {
    id: 'apify-reddit',
    name: 'Apify Reddit Pain Finder',
    url: 'https://apify.com/solutionssmart/reddit-pain-finder',
    urlDisplay: 'apify.com/solutionssmart/reddit-pain-finder',
    tier: 1,
    pricing: 'Pay-per-result',
    pricingTier: 'cheap',
    flags: ['new'],
    blurb: 'Scraper that classifies posts into pain types (pricing, missing features, workflow friction, integration needs, switching) and ranks by priority. Works without API keys via RSS, or with Reddit OAuth at scale.',
    features: ['Pain-type classification', 'Priority scoring', 'Promo-post filtering', 'Webhooks + n8n + Make + Zapier', 'No API key required'],
    benefit: 'The DIY/automation-friendly option. Ideal if you want to pipe Reddit pain data into your own workflow.',
    feeds: ['Gate 00½'],
    notes: 'Built on Apify platform — supports scheduling, monitoring, integrations.'
  },

  // ============ TIER 2 — AUDIENCE INTELLIGENCE ============
  {
    id: 'sparktoro',
    name: 'SparkToro',
    url: 'https://sparktoro.com/',
    urlDisplay: 'sparktoro.com',
    tier: 2,
    pricing: 'Personal $38/mo · Business $112/mo · Free 5 searches/mo',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'The audience research standard. Search by keyword, hashtag, or natural-language description; get the websites, podcasts, YouTube channels, subreddits, and social accounts your audience actually engages with.',
    features: ['Audience clickstream + Google + social', '"Describe Your Audience" natural language', 'Email-list audience analysis', 'Podcast + YouTube + subreddit data', 'Compare Audiences feature'],
    benefit: 'Tells you exactly where the avatar gathers — feeds Gate 01 and Gate 05½ Dream 100.',
    feeds: ['Gate 01', 'Gate 05½']
  },
  {
    id: 'answerthepublic',
    name: 'AnswerThePublic',
    url: 'https://answerthepublic.com/en',
    urlDisplay: 'answerthepublic.com',
    tier: 2,
    pricing: 'Free 3 searches/day · Paid from ~$11/mo',
    pricingTier: 'cheap',
    flags: ['free'],
    blurb: 'Visualizes the questions people ask in autocomplete data. The "wh-" outputs are raw avatar pain language, ready to drop into copy.',
    features: ['Google + Bing autocomplete data', 'Question wheel visualization', 'CSV export', 'New AI Dashboard'],
    benefit: 'Instant raw customer language. The questions are the pain in their own words.',
    feeds: ['Gate 01', 'Gate 06']
  },
  {
    id: 'alsoasked',
    name: 'AlsoAsked',
    url: 'https://alsoasked.com/',
    urlDisplay: 'alsoasked.com',
    tier: 2,
    pricing: 'Free 3 searches/day · Paid $15–59/mo',
    pricingTier: 'cheap',
    flags: ['free'],
    blurb: 'Real-time "People Also Ask" data from Google in tree structure. Shows the next question your prospect is going to ask after the first one.',
    features: ['Real-time PAA scraping', 'Tree-structured question hierarchy', 'CSV export', 'Visual question mapping'],
    benefit: 'High-leverage for Gate 06½ false belief audit — Google has already clustered the next objection for you.',
    feeds: ['Gate 06', 'Gate 06½']
  },
  {
    id: 'buzzsumo',
    name: 'BuzzSumo',
    url: 'https://buzzsumo.com/',
    urlDisplay: 'buzzsumo.com',
    tier: 2,
    pricing: 'From ~$199/mo',
    pricingTier: 'mid',
    flags: [],
    blurb: 'Question Analyzer searches forum posts across Amazon, Reddit, Quora, Q&A sites. Content Analyzer shows what\'s actually getting shared.',
    features: ['Question Analyzer (Amazon, Reddit, Quora)', 'Content trend tracking', 'Trending feeds 24h windows', 'Media database & journalist outreach', 'Slack integration'],
    benefit: 'Combines pain mining with content performance — what gets shared is what gets clicked.',
    feeds: ['Gate 01', 'Gate 06']
  },
  {
    id: 'explodingtopics',
    name: 'Exploding Topics',
    url: 'https://explodingtopics.com/',
    urlDisplay: 'explodingtopics.com',
    tier: 2,
    pricing: 'Pro from ~$39/mo',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Categories with rising search trajectory before saturation. Feeds Gate 01\'s market trajectory scale directly.',
    features: ['Trend categorization', 'Long-term momentum scoring', 'Category browsing (food, fitness, fintech, etc.)', 'Trend reports'],
    benefit: 'Validates Gate 01 market trajectory with hard search data before you commit.',
    feeds: ['Gate 01']
  },
  {
    id: 'glimpse',
    name: 'Glimpse',
    url: 'https://meetglimpse.com/',
    urlDisplay: 'meetglimpse.com',
    tier: 2,
    pricing: 'Free 10 searches/mo · Paid from $99/mo',
    pricingTier: 'mid',
    flags: ['new'],
    blurb: 'Trend discovery built on Google Trends with absolute search volume, 12-month forecasts, and TikTok/Reddit/Instagram channel breakdowns.',
    features: ['Absolute search volume (vs Google Trends 0–100 scale)', '12-month forecast (95%+ backtested accuracy)', 'TikTok/Reddit/Instagram channel data', 'Chrome extension', 'Real-time alerts'],
    benefit: 'Closest competitor to Exploding Topics with more granular keyword tracking and forecasting.',
    feeds: ['Gate 01', 'Gate 02']
  },

  // ============ TIER 3 — VOC SYNTHESIS ============
  {
    id: 'dovetail',
    name: 'Dovetail',
    url: 'https://dovetail.com/',
    urlDisplay: 'dovetail.com',
    tier: 3,
    pricing: 'Free plan · Paid from $29/mo per user',
    pricingTier: 'cheap',
    flags: ['free'],
    blurb: 'Customer intelligence platform. Centralize calls, tickets, surveys, interviews, reviews; AI auto-classifies into themes. The repository standard.',
    features: ['Auto-import calls, tickets, surveys, interviews, reviews', 'AI theme classification', 'Searchable insight repository', 'Cross-project synthesis', 'Atomic UX research method'],
    benefit: 'The default choice for customer-research teams who want everything in one place.',
    feeds: ['VOC Vault', 'Gate 08']
  },
  {
    id: 'insight7',
    name: 'Insight7',
    url: 'https://insight7.io/',
    urlDisplay: 'insight7.io',
    tier: 3,
    pricing: 'Custom pricing',
    pricingTier: 'mid',
    flags: ['new'],
    blurb: 'Auto-ingests recordings from Zoom, Google Meet, Teams; extracts themes by semantic meaning; generates branded reports with embedded evidence. Stronger automation than Dovetail at high session volumes.',
    features: ['Auto-ingest Zoom/Meet/Teams', 'Semantic theme extraction (no manual tagging)', 'Branded reports with frequency data', 'Cross-session synthesis', 'Dropbox + Drive integration'],
    benefit: 'Built for teams running 50+ interviews per month who need automation, not manual tagging.',
    feeds: ['VOC Vault', 'Gate 08']
  },
  {
    id: 'conveo',
    name: 'Conveo',
    url: 'https://conveo.ai/',
    urlDisplay: 'conveo.ai',
    tier: 3,
    pricing: 'Custom enterprise pricing',
    pricingTier: 'enterprise',
    flags: ['new'],
    blurb: 'AI-moderated video interviews with adaptive probing in 50+ languages. Built-in participant recruitment.',
    features: ['Async AI-moderated video interviews', '50+ languages with adaptive follow-ups', 'Built-in participant panel', 'Multimodal analysis (speech + tone + visual)', 'Cross-study insight library'],
    benefit: 'Use when you need fresh interview data, not just analysis of existing conversations.',
    feeds: ['VOC Vault']
  },
  {
    id: 'userinterviews',
    name: 'User Interviews',
    url: 'https://www.userinterviews.com/',
    urlDisplay: 'userinterviews.com',
    tier: 3,
    pricing: 'Pay per recruit (~$25–100/participant)',
    pricingTier: 'mid',
    flags: [],
    blurb: 'Recruits participants from a panel of 6 million vetted consumers and professionals. Now part of UserTesting.',
    features: ['6M+ vetted participants', 'Bring-your-own-audience option', 'Scheduling + incentive management', 'Demographic + behavioral targeting'],
    benefit: 'The fastest way to get interviews scheduled when you don\'t have your own audience yet.',
    feeds: ['VOC Vault']
  },
  {
    id: 'productboard',
    name: 'Productboard / Pulse',
    url: 'https://www.productboard.com/',
    urlDisplay: 'productboard.com',
    tier: 3,
    pricing: 'Essentials from $19/maker/mo · Pulse enterprise',
    pricingTier: 'mid',
    flags: ['new'],
    blurb: 'Customer feedback aggregator and pain-point analyzer for product teams. Pulse module surfaces VOC pain points specifically.',
    features: ['Centralized customer feedback', 'Feature prioritization', 'Pulse VOC module', 'Roadmap integration'],
    benefit: 'Best when feedback needs to feed into product decisions, not just live in a research repository.',
    feeds: ['VOC Vault', 'Gate 08']
  },
  {
    id: 'revuze',
    name: 'Revuze',
    url: 'https://www.revuze.it/',
    urlDisplay: 'revuze.it',
    tier: 3,
    pricing: 'Custom enterprise pricing',
    pricingTier: 'enterprise',
    flags: ['new'],
    blurb: 'Ingests unstructured customer language (reviews, support tickets, surveys) and converts it to structured market intelligence. Strongest for product/e-com VOC at scale.',
    features: ['Unstructured-to-structured AI conversion', 'Multi-source ingestion', 'Sentiment + topic clustering', 'Trend forecasting'],
    benefit: 'Built for e-commerce or product orgs swimming in review data.',
    feeds: ['VOC Vault']
  },
  {
    id: 'sentisum',
    name: 'SentiSum',
    url: 'https://www.sentisum.com/',
    urlDisplay: 'sentisum.com',
    tier: 3,
    pricing: 'Custom pricing',
    pricingTier: 'mid',
    flags: ['new'],
    blurb: 'Root-cause analysis on customer support complaints. Surfaces systemic problems worth solving.',
    features: ['Support-ticket auto-tagging', 'Root-cause clustering', 'Sentiment + intent detection', 'CRM integrations'],
    benefit: 'Use when you have live customer data and want to know what\'s actually breaking.',
    feeds: ['Gate 08', 'Gate 09']
  },

  // ============ TIER 4 — LISTENING & MONITORING ============
  {
    id: 'f5bot',
    name: 'F5Bot',
    url: 'https://f5bot.com/',
    urlDisplay: 'f5bot.com',
    tier: 4,
    pricing: 'Free',
    pricingTier: 'free',
    flags: ['free'],
    blurb: 'Free email alerts for Reddit, Hacker News, Lobsters keywords. Zero cost, no analytics. The baseline tool.',
    features: ['Email alerts on keyword mentions', 'Reddit + Hacker News + Lobsters', 'No account complexity'],
    benefit: 'Free, dependable, gets out of the way. The first tool to install when you start.',
    feeds: ['Gate 08', 'Gate 09']
  },
  {
    id: 'brand24',
    name: 'Brand24',
    url: 'https://brand24.com/',
    urlDisplay: 'brand24.com',
    tier: 4,
    pricing: 'From $99/mo',
    pricingTier: 'mid',
    flags: [],
    blurb: 'Cross-platform mention monitoring with sentiment analysis. Mid-tier pricing, broader than Reddit-only.',
    features: ['Cross-platform mention tracking', 'Sentiment analysis', 'Influencer detection', 'Reddit + web + social'],
    benefit: 'The mid-tier choice when F5Bot isn\'t enough but Brandwatch is overkill.',
    feeds: ['Gate 09']
  },
  {
    id: 'mention',
    name: 'Mention',
    url: 'https://mention.com/',
    urlDisplay: 'mention.com',
    tier: 4,
    pricing: 'From $41/mo Solo',
    pricingTier: 'mid',
    flags: [],
    blurb: 'Real-time alerts across web and social. Useful for tracking how customers describe competitors — the complaints become Gate 06 hooks.',
    features: ['Real-time alerts', 'Boolean search', 'Web + social coverage', 'Sentiment scoring'],
    benefit: 'Watch competitors get complained about in real time, then write a hook against the complaint.',
    feeds: ['Gate 06', 'Gate 09']
  },
  {
    id: 'awario',
    name: 'Awario',
    url: 'https://awario.com/',
    urlDisplay: 'awario.com',
    tier: 4,
    pricing: 'From $29/mo Starter',
    pricingTier: 'cheap',
    flags: [],
    blurb: 'Brand monitoring with Reddit coverage and Boolean search at accessible price.',
    features: ['Boolean search', 'Reddit + web + social', 'Lead detection', 'Sentiment analysis'],
    benefit: 'The most accessible price point in the listening category for a real product.',
    feeds: ['Gate 09']
  },
  {
    id: 'social-searcher',
    name: 'Social Searcher',
    url: 'https://www.social-searcher.com/',
    urlDisplay: 'social-searcher.com',
    tier: 4,
    pricing: 'Free tier · Paid from $4.50/mo',
    pricingTier: 'free',
    flags: ['new', 'free'],
    blurb: 'Real-time multi-platform social monitoring with sentiment analysis. Generous free tier — useful before committing to paid tools.',
    features: ['Multi-platform free search', 'Sentiment analysis', 'Real-time monitoring', 'Email alerts'],
    benefit: 'The cheapest paid plan in the catalog. Worth trying before paying for Brand24 or Mention.',
    feeds: ['Gate 09']
  },
  {
    id: 'hootsuite',
    name: 'Hootsuite',
    url: 'https://www.hootsuite.com/',
    urlDisplay: 'hootsuite.com',
    tier: 4,
    pricing: 'Professional $99/mo · Insights ~$600–1200/mo',
    pricingTier: 'enterprise',
    flags: ['new', 'enterprise'],
    blurb: 'Social media management suite with listening capabilities. Stronger for scheduling than for pain mining; included for completeness.',
    features: ['Multi-account scheduling', 'Insights add-on for listening', 'Sentiment analysis (paid tiers)', 'Team collaboration'],
    benefit: 'Use only if you already need a scheduler. Don\'t buy this for pain mining alone.',
    feeds: ['Gate 09']
  },
  {
    id: 'agorapulse',
    name: 'Agorapulse',
    url: 'https://www.agorapulse.com/',
    urlDisplay: 'agorapulse.com',
    tier: 4,
    pricing: 'From $79/mo Standard',
    pricingTier: 'mid',
    flags: ['new'],
    blurb: 'Social media management with built-in listening and inbox unification. Mid-tier pricing.',
    features: ['Unified social inbox', 'Listening add-on', 'Approval workflows', 'CRM-light contact tracking'],
    benefit: 'Cleaner UX than Hootsuite, better for small teams that want one tool for everything.',
    feeds: ['Gate 09']
  },
  {
    id: 'brandmentions',
    name: 'BrandMentions',
    url: 'https://brandmentions.com/',
    urlDisplay: 'brandmentions.com',
    tier: 4,
    pricing: 'From $99/mo Growing Business',
    pricingTier: 'mid',
    flags: ['new'],
    blurb: 'Real-time brand and competitor mention tracking across web and social with sentiment.',
    features: ['Web + social mention tracking', 'Competitor monitoring', 'Sentiment analysis', 'Influencer identification'],
    benefit: 'Solid mid-tier alternative to Brand24 with similar capabilities.',
    feeds: ['Gate 09']
  },
  {
    id: 'youscan',
    name: 'YouScan',
    url: 'https://youscan.io/',
    urlDisplay: 'youscan.io',
    tier: 4,
    pricing: 'Custom pricing',
    pricingTier: 'enterprise',
    flags: ['new', 'enterprise'],
    blurb: 'Visual + text social listening with AI-powered image recognition. Distinct in that it analyzes images, not just text — useful when your category is visual.',
    features: ['Image recognition AI', 'Logo + product detection', 'Text + visual sentiment', 'Audience insights'],
    benefit: 'The only tool here that mines images. Essential if your category is visual (fashion, food, consumer goods).',
    feeds: ['Gate 01', 'Gate 09']
  },

  // ============ TIER 5 — ENTERPRISE LISTENING ============
  {
    id: 'brandwatch',
    name: 'Brandwatch',
    url: 'https://www.brandwatch.com/',
    urlDisplay: 'brandwatch.com',
    tier: 5,
    pricing: 'Custom enterprise pricing (typically $1,000+/mo)',
    pricingTier: 'enterprise',
    flags: ['enterprise'],
    blurb: 'Consumer intelligence and social listening at enterprise scale. Strong sentiment, segment, and trend analysis across thousands of sources.',
    features: ['Consumer intelligence at scale', 'Cross-platform sentiment', 'Segmentation + audience profiling', 'Custom dashboards', 'Historical data depth'],
    benefit: 'Industry leader. Earn its keep at high scale where the depth pays back. Overkill below that.',
    feeds: ['Gate 09']
  },
  {
    id: 'sproutsocial',
    name: 'Sprout Social',
    url: 'https://sproutsocial.com/',
    urlDisplay: 'sproutsocial.com',
    tier: 5,
    pricing: 'From $199/seat/mo · Listening tier higher',
    pricingTier: 'enterprise',
    flags: ['enterprise'],
    blurb: 'Social listening, analytics, and engagement platform.',
    features: ['Listening + engagement + publishing unified', 'CRM integrations', 'Reporting + analytics', 'Approval workflows'],
    benefit: 'When you need listening + management in one tool and have the budget.',
    feeds: ['Gate 09']
  },
  {
    id: 'sprinklr',
    name: 'Sprinklr',
    url: 'https://www.sprinklr.com/',
    urlDisplay: 'sprinklr.com',
    tier: 5,
    pricing: 'Custom enterprise pricing (typically $1,000+/mo)',
    pricingTier: 'enterprise',
    flags: ['enterprise'],
    blurb: 'Unified CXM platform with social sentiment and enterprise CX insights.',
    features: ['Unified CXM platform', 'Cross-channel sentiment', 'AI-powered insights', 'Customer service integration'],
    benefit: 'Only justifiable for large orgs running coordinated CX across many channels.',
    feeds: ['Gate 09']
  },
  {
    id: 'talkwalker',
    name: 'Talkwalker',
    url: 'https://www.talkwalker.com/',
    urlDisplay: 'talkwalker.com',
    tier: 5,
    pricing: 'Custom enterprise pricing',
    pricingTier: 'enterprise',
    flags: ['enterprise'],
    blurb: 'Consumer intelligence platform with broad language and source coverage.',
    features: ['187+ languages supported', 'Image + video recognition', 'Trend detection', 'Crisis monitoring'],
    benefit: 'Strongest in non-English markets. Enterprise pricing limits applicability.',
    feeds: ['Gate 09']
  },

  // ============ TIER 6 — VALIDATION ============
  {
    id: 'ideaproof',
    name: 'IdeaProof',
    url: 'https://ideaproof.io/',
    urlDisplay: 'ideaproof.io',
    tier: 6,
    pricing: 'Free tier · Paid available',
    pricingTier: 'free',
    flags: ['new', 'free'],
    blurb: 'AI startup validator with market analysis, competitor insights, and structured reports. ~120-second turnaround.',
    features: ['120-second AI validation', 'Market analysis', 'Competitor insights', 'Investor-ready reports'],
    benefit: 'Fast first-pass sanity check on Gate 02 before committing time.',
    feeds: ['Gate 02']
  },
  {
    id: 'dimeadozen',
    name: 'DimeADozen',
    url: 'https://www.dimeadozen.ai/',
    urlDisplay: 'dimeadozen.ai',
    tier: 6,
    pricing: 'Free trial · Paid plans available',
    pricingTier: 'cheap',
    flags: ['new'],
    blurb: 'AI-generated 40+ page validation reports covering market viability, monetization, competitor analysis, MVP planning, and risk assessment.',
    features: ['40+ page reports in <20s', 'Market viability + competitive analysis', 'MVP planning', 'Pivot suggestions', 'Risk assessment'],
    benefit: 'Replaces weeks of desk research with a structured first-draft report.',
    feeds: ['Gate 02']
  },
  {
    id: 'validatorai',
    name: 'ValidatorAI',
    url: 'https://validatorai.com/',
    urlDisplay: 'validatorai.com',
    tier: 6,
    pricing: 'Free + custom pricing',
    pricingTier: 'free',
    flags: ['new', 'free'],
    blurb: 'AI advisor that scores ideas, simulates customer feedback, and suggests next steps. Used by 300,000+ founders.',
    features: ['Idea scoring + grading', 'Simulated customer feedback', 'Launch-readiness guidance', '24/7 AI mentor chatbot'],
    benefit: 'The "talk to an AI advisor" version of validation — useful for the question-answer interaction style.',
    feeds: ['Gate 02']
  },
  {
    id: 'wynter',
    name: 'Wynter',
    url: 'https://wynter.com/',
    urlDisplay: 'wynter.com',
    tier: 6,
    pricing: 'From ~$540/test',
    pricingTier: 'mid',
    flags: ['new'],
    blurb: 'On-demand B2B message testing. Get 12–48 hour feedback from verified ICPs (job-title and industry filtered). The closest tool to "test your Gate 06 copy with real buyers before launching."',
    features: ['Verified ICP audience (60K+ B2B professionals)', 'Job-title + industry targeting', '12–48 hour turnaround', 'Message testing + brand research', 'Persona research'],
    benefit: 'Stops you from launching copy that\'s convincing only to yourself. Brutal but accurate.',
    feeds: ['Gate 04', 'Gate 06', 'Gate 06½']
  },
  {
    id: 'prelaunch',
    name: 'Prelaunch',
    url: 'https://www.prelaunch.com/',
    urlDisplay: 'prelaunch.com',
    tier: 6,
    pricing: 'Custom pricing',
    pricingTier: 'mid',
    flags: ['new'],
    blurb: 'Measures actual market reaction (pre-orders, landing-page conversion) before product release. Real-money signal beats hypothetical interest.',
    features: ['Pre-order capture + measurement', 'Landing-page conversion testing', 'Concept validation surveys', 'Price-sensitivity testing'],
    benefit: 'The most rigorous Gate 02 / Gate 04 validation — buyer money on the line, not just stated intent.',
    feeds: ['Gate 02', 'Gate 04', 'Gate 07']
  },

  // ============ TIER 7 — QUANTITATIVE VALIDATION ============
  {
    id: 'typeform',
    name: 'Typeform',
    url: 'https://www.typeform.com/',
    urlDisplay: 'typeform.com',
    tier: 7,
    pricing: 'Free tier · Basic from $25/mo',
    pricingTier: 'free',
    flags: ['free'],
    blurb: 'Conversational surveys with high completion rates. Best for follow-up validation surveys to refund interviewees and Dream 100.',
    features: ['One-question-at-a-time format', 'Logic jumps + conditional flows', 'Integrations (Zapier, etc.)', 'Free tier with 10 responses/mo'],
    benefit: 'Higher completion rates than form-style surveys. Worth the premium for that alone.',
    feeds: ['Gate 03', 'Gate 05½', 'Gate 08']
  },
  {
    id: 'hotjar',
    name: 'Hotjar',
    url: 'https://www.hotjar.com/',
    urlDisplay: 'hotjar.com',
    tier: 7,
    pricing: 'Free tier · Plus from $39/mo',
    pricingTier: 'free',
    flags: ['free'],
    blurb: 'Heatmaps, session recordings, on-page feedback polls. The diagnostic input for Gate 09\'s hook/audience/offer triage.',
    features: ['Heatmaps (clicks, scroll, attention)', 'Session recordings', 'On-page feedback polls', 'Conversion-funnel analysis'],
    benefit: 'Tells you where users actually drop off — Gate 09 hook vs. audience vs. offer diagnostic.',
    feeds: ['Gate 03', 'Gate 09']
  }
];

// ============================================================================
// TIER METADATA
// ============================================================================
const TIERS = [
  { num: 1, id: 'tier-1', name: 'Reddit Pain Mining & Direct Alternatives', purpose: 'Reddit-mining + pain-point scoring. The closest substitutes if PainOnSocial is unavailable. Output feeds <span class="gate-ref">Gate 00½ Pain Discovery</span>.' },
  { num: 2, id: 'tier-2', name: 'Audience Intelligence', purpose: 'Where does the avatar gather, who do they follow, what language do they use? Feeds <span class="gate-ref">Gate 01 Hungry Avatar</span> and <span class="gate-ref">Gate 05½ Dream 100</span>.' },
  { num: 3, id: 'tier-3', name: 'Voice-of-Customer Synthesis', purpose: 'Cluster, transcribe, and structure raw quotes from interviews and feedback. Feeds the <span class="gate-ref">VOC Vault</span> and <span class="gate-ref">Gate 08 Iterate</span>.' },
  { num: 4, id: 'tier-4', name: 'Listening & Monitoring', purpose: 'Real-time signal of where customers voice pain. Feeds <span class="gate-ref">Gate 08</span> refund-interview discipline and <span class="gate-ref">Gate 09 Pivot or Hold</span>.' },
  { num: 5, id: 'tier-5', name: 'Enterprise Listening (★)', purpose: 'Same workflows as Tier 4, executed at platform scale. <strong>Pricing $500–$5,000+/mo.</strong> Most operators the widget serves should not buy these. They earn keep only past Gate 11 at multi-channel scale.' },
  { num: 6, id: 'tier-6', name: 'Idea & Offer Validation', purpose: 'Not pain discovery — adjacent. Validates the <em>offer</em> once the pain is identified. Feeds <span class="gate-ref">Gate 02 Idea/No Idea</span> and <span class="gate-ref">Gate 04 Grand Slam Offer</span>.' },
  { num: 7, id: 'tier-7', name: 'Quantitative Validation', purpose: 'After qualitative pain, validate with structured surveys and behavioral data. Feeds <span class="gate-ref">Gate 03</span> and <span class="gate-ref">Gate 09</span>.' }
];

// ============================================================================
// RENDER
// ============================================================================
function renderCatalog() {
  const main = document.getElementById('catalog');
  let html = '';

  TIERS.forEach(tier => {
    const tierTools = TOOLS.filter(t => t.tier === tier.num);
    html += `
      <section class="tier-section" id="${tier.id}" data-tier="${tier.num}">
        <div class="tier-header">
          <div class="tier-num">TIER ${tier.num}</div>
          <h2 class="tier-name">${tier.name}</h2>
          <div class="tier-count">${tierTools.length} TOOLS</div>
        </div>
        <p class="tier-purpose">${tier.purpose}</p>
        <div class="tool-grid">
          ${tierTools.map((t, i) => renderToolCard(t, i)).join('')}
        </div>
      </section>
    `;
  });

  main.innerHTML = html;
}

function renderToolCard(t, idx) {
  const flagsHtml = (t.flags || []).map(f => {
    const map = {
      'new': { cls: 'flag-new', label: '⊕ NEW' },
      'enterprise': { cls: 'flag-enterprise', label: '★ ENTERPRISE' },
      'free': { cls: 'flag-free', label: 'FREE TIER' }
    };
    const m = map[f];
    return m ? `<span class="flag ${m.cls}">${m.label}</span>` : '';
  }).join('');

  const tierClass = t.pricingTier === 'enterprise' ? 'tier-enterprise' : '';

  const featuresHtml = (t.features || []).map(f => `<li>${f}</li>`).join('');

  return `
    <article class="tool-card ${tierClass}"
             data-id="${t.id}"
             data-tier="${t.tier}"
             data-budget="${t.pricingTier}"
             data-search="${(t.name + ' ' + t.blurb + ' ' + (t.features || []).join(' ') + ' ' + (t.benefit || '')).toLowerCase()}"
             style="animation-delay: ${idx * 0.04}s">
      <div class="tool-header">
        <h3 class="tool-name"><a href="${t.url}" target="_blank" rel="noopener">${t.name}</a></h3>
        <div class="tool-flags">${flagsHtml}</div>
      </div>
      <div class="tool-url">${t.urlDisplay}</div>
      <div class="tool-pricing">
        <span class="pricing-label">Cost</span>
        <span class="pricing-value">${t.pricing}</span>
      </div>
      <p class="tool-description">${t.blurb}</p>
      ${t.features && t.features.length ? `
        <div class="tool-section">
          <h4>Key features</h4>
          <ul>${featuresHtml}</ul>
        </div>
      ` : ''}
      ${t.benefit ? `
        <div class="tool-section">
          <h4>Why it matters</h4>
          <p>${t.benefit}</p>
        </div>
      ` : ''}
      ${t.notes ? `
        <div class="tool-section">
          <h4>Notes</h4>
          <p>${t.notes}</p>
        </div>
      ` : ''}
      <div class="tool-footer">
        ${(t.feeds || []).map(g => `<span class="gate-tag">${g}</span>`).join('')}
      </div>
    </article>
  `;
}

// ============================================================================
// FILTERING & SEARCH
// ============================================================================
let activeFilters = { tier: 'all', budget: 'all', search: '' };

function applyFilters() {
  const cards = document.querySelectorAll('.tool-card');
  const tierSections = document.querySelectorAll('.tier-section');
  let visibleCount = 0;
  const visiblePerTier = {};

  cards.forEach(card => {
    const tier = card.dataset.tier;
    const budget = card.dataset.budget;
    const search = card.dataset.search;

    const tierMatch = activeFilters.tier === 'all' || tier === activeFilters.tier;
    const budgetMatch = activeFilters.budget === 'all' || budget === activeFilters.budget;
    const searchMatch = !activeFilters.search || search.includes(activeFilters.search);

    const show = tierMatch && budgetMatch && searchMatch;
    card.classList.toggle('hidden', !show);
    if (show) {
      visibleCount++;
      visiblePerTier[tier] = (visiblePerTier[tier] || 0) + 1;
    }
  });

  tierSections.forEach(section => {
    const tier = section.dataset.tier;
    section.classList.toggle('hidden', !visiblePerTier[tier]);
  });

  document.getElementById('resultCount').textContent = visibleCount;
  document.getElementById('noResults').classList.toggle('visible', visibleCount === 0);
}

document.querySelectorAll('.filter-btn').forEach(btn => {
  btn.addEventListener('click', () => {
    const type = btn.dataset.filterType;
    const value = btn.dataset.filter;
    activeFilters[type] = value;
    document.querySelectorAll(`.filter-btn[data-filter-type="${type}"]`).forEach(b => {
      b.classList.toggle('active', b === btn);
    });
    applyFilters();
  });
});

document.getElementById('searchInput').addEventListener('input', e => {
  activeFilters.search = e.target.value.trim().toLowerCase();
  applyFilters();
});

// Smooth scroll for TOC
document.querySelectorAll('.toc a').forEach(a => {
  a.addEventListener('click', e => {
    e.preventDefault();
    const target = document.querySelector(a.getAttribute('href'));
    if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' });
  });
});

// Initial render
renderCatalog();
applyFilters();

// Sanity check the count
console.log('Total tools loaded:', TOOLS.length);
</script>

</body>
</html>
Original asset: RISER-Widget-Pain-Discovery-Tools-Merged.md
# Pain Discovery & VOC Tool Catalog — Merged Edition

**Verified April 2026.** This is the merged catalog: my original 20 + every valuable, verifiable source from three additional AI responses. All links confirmed live.

Total tools: **34**.

Tools each tool feeds. Tools organized by integration point with the RISER MVO Widget (not alphabetical) — the order tells you *where in the workflow they belong.*

---

## What I rejected and why

Three AI responses contributed candidates. Before reading the catalog, know what got cut:

- **GummySearch** — claimed by Response 3 to be "transitioning, scheduled to shut down by late 2026." That is wrong. **GummySearch shut down November 30, 2025** after Reddit denied API access. Confirmed via multiple independent 2026 sources. Excluded.
- **DemandDrop** (`demanddrop.com`), **MarketScope** (`marketscope.cc`) — Could not independently verify these as live operating products in 2026. Excluded rather than passing through unverified links.
- **Brandwatch's three separate URLs** (Responses 1+2 listed `/use-cases/consumer-research`, `/product/consumer-intelligence`, and the root) — Same product, three landing pages. Counted once.
- **Sprout Social's two URLs** and **Sprinklr's two URLs** — Same products, deep-linked feature pages. Counted once each.
- **Productboard listed twice** (root + `/pulse`) — Counted once.
- **Talkwalker listed twice** — Counted once.

## What I'm keeping from my original list

All 20 from my prior catalog stayed in. Notable reversals from prior position:

- **Enterprise tools** (Brandwatch, Sprout Social, Sprinklr, Talkwalker, Productboard) were previously excluded for budget mismatch. I'm adding them now per your "all valuable sources" directive, but I'm marking them clearly — a $50/month operator should not accidentally sign up for a $999/month tool.

---

## Tier 1 — Direct PainOnSocial Alternatives
Reddit-mining + pain-point scoring. Closest substitutes if PainOnSocial is unavailable. Output: scored pain points + verbatim quotes → feeds **Gate 00½**.

1. **PainOnSocial** — [www.painonsocial.com](https://www.painonsocial.com/) — AI Reddit scanner with 0–100 pain scoring across 30+ curated communities. Evidence quotes, AI solution seeds. The reference tool for the widget.

2. **Reddily** — [reddily.io](https://reddily.io/) — Chrome extension + dashboard. Uses Google Gemini to extract sentiment, pain points, feature requests, and quotes from any Reddit thread. Pay-per-analysis pricing.

3. **PainPointy** — [painpointy.com](https://painpointy.com/) — Surfaces pain points, content ideas, reply opportunities, brand mentions from Reddit. Smaller indie tool.

4. **BuzzAbout** — [buzzabout.ai](https://buzzabout.ai/) — Market research agent for Reddit and other social platforms. Broader coverage than Reddit-only tools.

5. **Syften** — [syften.com](https://syften.com/) — Tracks keywords across Reddit, Hacker News, and 10+ platforms. Real-time alerts. Closest like-for-like to discontinued GummySearch.

6. **Subreddit Signals** ⊕ — [subredditsignals.com](https://subredditsignals.com/) — AI-scored Reddit lead detection with 7-dimension intent classification (PURCHASE_READY, switching intent, budget questions). Built more for high-intent buyers than for raw pain mining, but produces structured pain-context data.

7. **Redreach** ⊕ — [reddireach.com](https://www.reddireach.com/) — AI-powered Reddit conversation discovery and reply assist. Volume-oriented (unlimited monitoring, no token caps) at ~$29/month. Pair with intent scoring from another tool to filter noise.

8. **Apify Reddit Pain Finder** ⊕ — [apify.com/solutionssmart/reddit-pain-finder](https://apify.com/solutionssmart/reddit-pain-finder) — Scraper that classifies posts into pain types (pricing, missing features, workflow friction, integration needs, switching) and ranks by priority. Works without API keys via RSS, or with Reddit OAuth at scale. The DIY/automation-friendly option.

---

## Tier 2 — Audience Intelligence
Where does the avatar gather, who do they follow, what language do they use about themselves? Feeds **Gate 01** and **Gate 05½ (Dream 100)**.

9. **SparkToro** — [sparktoro.com](https://sparktoro.com/) — The audience research standard. Search by keyword, hashtag, or natural-language description; get the websites, podcasts, YouTube channels, subreddits, and social accounts your audience actually engages with.

10. **AnswerThePublic** — [answerthepublic.com](https://answerthepublic.com/en) — Visualizes the questions people ask in autocomplete data. The "wh-" outputs are raw avatar pain language.

11. **AlsoAsked** — [alsoasked.com](https://alsoasked.com/) — Real-time "People Also Ask" data from Google in tree structure. The next question after the first one — high-leverage input for Gate 06½ (false belief audit).

12. **BuzzSumo** — [buzzsumo.com](https://buzzsumo.com/) — Question Analyzer searches forum posts across Amazon, Reddit, Quora, Q&A sites. Content Analyzer shows what's actually getting shared.

13. **Exploding Topics** — [explodingtopics.com](https://explodingtopics.com/) — Categories with rising search trajectory before saturation. Feeds Gate 01's market trajectory scale directly.

14. **Glimpse** ⊕ — [meetglimpse.com](https://meetglimpse.com/) — Trend discovery built on Google Trends data with absolute search volume, 12-month forecasts, and TikTok/Reddit/Instagram channel breakdowns. Closest competitor to Exploding Topics with more granular keyword tracking.

---

## Tier 3 — Voice-of-Customer Synthesis
Cluster, transcribe, and structure raw quotes. Feeds the **VOC vault** and **Gate 08 (Iterate)**.

15. **Dovetail** — [dovetail.com](https://dovetail.com/) — Customer intelligence platform. Centralize calls, tickets, surveys, interviews, reviews; AI auto-classifies into themes. The repository standard.

16. **Insight7** — [insight7.io](https://insight7.io/) — Auto-ingests recordings from Zoom, Google Meet, Teams; extracts themes by semantic meaning; generates branded reports with embedded evidence. Stronger automation than Dovetail at high session volumes.

17. **Conveo** — [conveo.ai](https://conveo.ai/) — AI-moderated video interviews with adaptive probing in 50+ languages. Built-in participant recruitment.

18. **User Interviews** — [www.userinterviews.com](https://www.userinterviews.com/) — Recruits participants from a panel of 6 million vetted consumers and professionals. Feeds Dovetail or Insight7.

19. **Productboard / Pulse** ⊕ — [www.productboard.com](https://www.productboard.com/) — Customer feedback aggregator and pain-point analyzer for product teams. Pulse module surfaces VOC pain points specifically. Mid-to-enterprise tier.

20. **Revuze** ⊕ — [revuze.it](https://www.revuze.it/) — Ingests unstructured customer language (reviews, support tickets, surveys) and converts it to structured market intelligence. Strongest for product/e-com VOC at scale.

21. **SentiSum** ⊕ — [sentisum.com](https://www.sentisum.com/) — Root-cause analysis on customer support complaints. Surfaces systemic problems worth solving — useful for Gate 08 when you have live customer data and want to know what's *actually* breaking.

---

## Tier 4 — Listening & Monitoring
Real-time signal of where customers voice pain. Feeds **Gate 08** refund-interview discipline and **Gate 09** pivot diagnostic.

22. **F5Bot** — [f5bot.com](https://f5bot.com/) — Free email alerts for Reddit, Hacker News, Lobsters keywords. Zero cost, no analytics. Baseline tool.

23. **Brand24** — [brand24.com](https://brand24.com/) — Cross-platform mention monitoring with sentiment analysis. Mid-tier pricing, broader than Reddit-only.

24. **Mention** — [mention.com](https://mention.com/) — Real-time alerts across web and social. Useful for tracking how customers describe competitors — the complaints become Gate 06 hooks.

25. **Awario** — [awario.com](https://awario.com/) — Brand monitoring with Reddit coverage and Boolean search at accessible price.

26. **Social Searcher** ⊕ — [social-searcher.com](https://www.social-searcher.com/) — Real-time multi-platform social monitoring with sentiment analysis. Has a generous free tier — useful before committing to paid tools.

27. **Hootsuite** ⊕ ★ — [www.hootsuite.com](https://www.hootsuite.com/) — Social media management suite with listening capabilities. Stronger for scheduling than for pain mining; included for completeness. **Mid-to-enterprise pricing.**

28. **Agorapulse** ⊕ — [www.agorapulse.com](https://www.agorapulse.com/) — Social media management with built-in listening and inbox unification. Mid-tier pricing.

29. **BrandMentions** ⊕ — [brandmentions.com](https://brandmentions.com/) — Real-time brand and competitor mention tracking across web and social with sentiment.

30. **YouScan** ⊕ — [youscan.io](https://youscan.io/) — Visual + text social listening with AI-powered image recognition. Distinct in that it analyzes images, not just text — useful when your category is visual (consumer goods, fashion, food).

---

## Tier 5 — Enterprise Listening & Consumer Intelligence ★
**Pricing: $500–$5,000+/month.** Listed for completeness because Responses 1/2 included them and they are real, capable platforms. Operationally: you do not need these to walk the widget. Most operators the widget serves should not buy these. They earn their cost only past Gate 11 when you're running at a scale that justifies enterprise spend.

31. **Brandwatch** ★ — [www.brandwatch.com](https://www.brandwatch.com/) — Consumer intelligence and social listening at enterprise scale. Strong sentiment, segment, and trend analysis across thousands of sources. **Custom enterprise pricing.**

32. **Sprout Social** ★ — [sproutsocial.com](https://sproutsocial.com/) — Social listening, analytics, and engagement platform. **Pricing starts ~$199/seat/month.**

33. **Sprinklr** ★ — [www.sprinklr.com](https://www.sprinklr.com/) — Unified CXM platform with social sentiment and enterprise CX insights. **Custom enterprise pricing, typically $1,000+/month.**

34. **Talkwalker** ★ — [www.talkwalker.com](https://www.talkwalker.com/) — Consumer intelligence platform with broad language and source coverage. **Custom enterprise pricing.**

---

## Tier 6 — Idea & Offer Validation (Adjacent)
Not pain discovery per se, but adjacent: validate the *offer* once the pain is identified. Feeds **Gate 02** (Idea/No Idea) and **Gate 04** (Grand Slam Offer).

35. **IdeaProof** ⊕ — [ideaproof.io](https://ideaproof.io/) — AI startup validator with market analysis, competitor insights, and structured reports. Free tier, ~120-second turnaround.

36. **DimeADozen** ⊕ — [dimeadozen.ai](https://www.dimeadozen.ai/) — AI-generated 40+ page validation reports covering market viability, monetization, competitor analysis, MVP planning, risk assessment.

37. **ValidatorAI** ⊕ — [validatorai.com](https://validatorai.com/) — AI advisor that scores ideas, simulates customer feedback, and suggests next steps. Used by 300,000+ founders.

38. **Wynter** ⊕ — [wynter.com](https://wynter.com/) — On-demand B2B message testing. Get 12–48 hour feedback from verified ICPs (job-title and industry filtered). The closest tool to "test your Gate 06 copy with real buyers before launching." **Mid-tier pricing (~$540+).**

39. **Prelaunch** ⊕ — [prelaunch.com](https://www.prelaunch.com/) — Measures actual market reaction (pre-orders, landing-page conversion) before product release. Real-money signal beats hypothetical interest.

---

## Tier 7 — Quantitative Validation
After qualitative pain, validate with structured surveys and behavioral data. Feeds **Gate 03** (cost of inaction) and **Gate 09** (funnel diagnostic).

40. **Typeform** — [www.typeform.com](https://www.typeform.com/) — Conversational surveys with high completion rates. Best for follow-up validation surveys to refund interviewees and Dream 100.

41. **Hotjar** — [www.hotjar.com](https://www.hotjar.com/) — Heatmaps, session recordings, on-page feedback polls. The diagnostic input for Gate 09's hook/audience/offer triage.

---

## Legend

- **⊕** — Added in this revision (not in my original 20).
- **★** — Enterprise-tier pricing. Operating-budget mismatch for most operators the widget serves.
- **No mark** — From the original verified list.

---

## Final count by tier

| Tier | Tools | Purpose |
|------|-------|---------|
| 1 — Direct alternatives | 8 | Reddit pain mining, scored output, feeds Gate 00½ |
| 2 — Audience intelligence | 6 | Gate 01 + Gate 05½ |
| 3 — VOC synthesis | 7 | Cluster + structure quotes, feeds VOC vault |
| 4 — Listening & monitoring | 9 | Gate 08 + Gate 09 |
| 5 — Enterprise listening ★ | 4 | Same workflows at scale, premium pricing |
| 6 — Idea & offer validation | 5 | Gate 02 + Gate 04 (adjacent to pain discovery) |
| 7 — Quantitative validation | 2 | Gate 03 + Gate 09 |
| **Total** | **41** | |

**Note on the count:** I aimed for ~34 unique tools after dedup but ended up at 41 because I split out tools that genuinely serve different gates (Tier 6 emerged from Response 3's contributions). If you want a strict 34, drop the four enterprise-tier (★) entries and Productboard, since you can already cover those workflows with Tier 1–4 tools.

---

## How to use this catalog

**Minimum viable stack for a new operator:** one Tier 1 + one Tier 2 + Typeform. ~$60–100/month total. Walks every gate.

**Scale-up stack (post-Gate 08):** add one Tier 3 tool (Dovetail or Insight7) once you have 10+ customers to interview, plus one Tier 4 listening tool for ongoing market signal.

**Enterprise stack (post-Gate 11):** Tier 5 tools start to earn their keep when you're running multi-channel campaigns and need cross-platform sentiment intelligence at scale.

**Avoid stack:** anything you sign up for before talking to 5 real customers. The widget's Gate 00½ skip-path exists because operator hypothesis can carry you to Gate 03 without paying anyone. Don't shop tools to avoid talking to humans.
Original Word reference table
GateNameWhat it Does
00StartIntro
00½Pain DiscoveryImport VOC research (PainOnSocial, interviews)
01Hungry AvatarScore the market on 4 dimensions
02Idea / No IdeaFilter for competitive reality + proximity to demand
03Profitable ProblemConfirm pain + frequency + cost of inaction
04Grand Slam OfferScore the Value Equation + named mechanism
04½Offer StackBuild bonuses, guarantee, scarcity, naming
05Core FourPick one distribution channel
05½Dream 100Name 25 people who own your audience
06Hook / BodyWrite hook, headline, body, CTA
06½PersuasionBig Domino + false beliefs + Cialdini audit
07DeployLock date, cohort, price, kill rule, tools
08IterateAwareness stage + lever + refund interviews
09Pivot or HoldDiagnose hook, audience, or offer failure
10ScalePick price, retention, or volume as lever
11RepeatBuild value ladder + continuity + affiliate motion
12BriefOne-page printable summary
Exact extracted catalog and gate data
{
  "RISER-Tool-Catalog": {
    "TOOLS": [
      {
        "id": "painonsocial",
        "name": "PainOnSocial",
        "url": "https://www.painonsocial.com/",
        "urlDisplay": "painonsocial.com",
        "tier": 1,
        "pricing": "Starter $19/mo · Pro $49/mo",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "AI Reddit scanner with 0–100 pain scoring across 30+ curated communities. Evidence quotes, AI-generated solution ideas, audience analysis. The reference tool for the widget.",
        "features": [
          "0–100 pain score per opportunity",
          "Real Reddit quotes + permalinks",
          "AI solution ideas with monetization",
          "Curated 30+ subreddit catalog",
          "Audience demographics analysis"
        ],
        "benefit": "Compresses weeks of manual subreddit reading into a single scan with structured, verifiable output.",
        "feeds": [
          "Gate 00½"
        ],
        "notes": "7-day free trial on Starter. Pro adds 15 scans/day, 5 subreddits, 90-day timeframes."
      },
      {
        "id": "reddily",
        "name": "Reddily",
        "url": "https://reddily.io/",
        "urlDisplay": "reddily.io",
        "tier": 1,
        "pricing": "Pay-per-analysis · 5 free credits",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Chrome extension + dashboard. Uses Google Gemini to extract sentiment, pain points, feature requests, and quotes from any Reddit thread. Pay-per-analysis pricing.",
        "features": [
          "One-click thread analysis",
          "Batch processing up to 25 threads",
          "Sentiment + pain extraction",
          "Feature-request detection",
          "Chrome extension"
        ],
        "benefit": "Best for ad-hoc research where you don't want a recurring subscription.",
        "feeds": [
          "Gate 00½"
        ],
        "notes": "Pay-per-analysis model means you only pay for what you scan."
      },
      {
        "id": "painpointy",
        "name": "PainPointy",
        "url": "https://painpointy.com/",
        "urlDisplay": "painpointy.com",
        "tier": 1,
        "pricing": "Pricing on site",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Surfaces pain points, content ideas, reply opportunities, and brand mentions from Reddit. Smaller indie tool with a similar shape to PainOnSocial.",
        "features": [
          "60-second subreddit scans",
          "Daily agency reports",
          "Reply opportunity detection",
          "Content idea surfacing"
        ],
        "benefit": "Lighter-weight alternative if PainOnSocial pricing or interface doesn't fit.",
        "feeds": [
          "Gate 00½",
          "Gate 06"
        ]
      },
      {
        "id": "buzzabout",
        "name": "BuzzAbout",
        "url": "https://buzzabout.ai/",
        "urlDisplay": "buzzabout.ai",
        "tier": 1,
        "pricing": "Pricing on site",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Market research agent for Reddit and other social platforms. Broader source coverage than Reddit-only tools.",
        "features": [
          "Multi-platform coverage",
          "AI agent workflow",
          "Market trend tracking"
        ],
        "benefit": "Useful when your audience lives on more than just Reddit.",
        "feeds": [
          "Gate 00½",
          "Gate 01"
        ]
      },
      {
        "id": "syften",
        "name": "Syften",
        "url": "https://syften.com/",
        "urlDisplay": "syften.com",
        "tier": 1,
        "pricing": "~$39.95/mo Standard",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Tracks keywords across Reddit, Hacker News, and 10+ platforms. Real-time alerts. Closest like-for-like replacement for the discontinued GummySearch monitoring workflow.",
        "features": [
          "Reddit + HN + 10+ platforms",
          "Boolean search support",
          "Slack alerts",
          "20 filters on Standard"
        ],
        "benefit": "The tool to use if you specifically miss GummySearch's alert-and-monitor workflow.",
        "feeds": [
          "Gate 00½",
          "Gate 09"
        ]
      },
      {
        "id": "subredditsignals",
        "name": "Subreddit Signals",
        "url": "https://subredditsignals.com/",
        "urlDisplay": "subredditsignals.com",
        "tier": 1,
        "pricing": "Starter $19.99/mo",
        "pricingTier": "cheap",
        "flags": [
          "new"
        ],
        "blurb": "AI-scored Reddit lead detection with 7-dimension intent classification (PURCHASE_READY, switching intent, budget questions). Built more for high-intent buyers than for raw pain mining.",
        "features": [
          "7-dimension intent scoring",
          "PURCHASE_READY classification",
          "15 weekly lead tokens (Starter)",
          "AI comment templates",
          "Switching-intent detection"
        ],
        "benefit": "Best when you want leads, not just pain points — already-qualified buyers actively searching.",
        "feeds": [
          "Gate 00½",
          "Gate 05"
        ]
      },
      {
        "id": "redreach",
        "name": "Redreach",
        "url": "https://www.reddireach.com/",
        "urlDisplay": "reddireach.com",
        "tier": 1,
        "pricing": "~$29/mo unlimited",
        "pricingTier": "cheap",
        "flags": [
          "new"
        ],
        "blurb": "AI-powered Reddit conversation discovery and reply assist. Volume-oriented (unlimited monitoring, no token caps). Pair with intent scoring from another tool to filter noise.",
        "features": [
          "Unlimited monitoring",
          "No token caps",
          "AI reply assist",
          "Google-ranking post detection",
          "Bulk DM workflow"
        ],
        "benefit": "Volume play if you have time to filter manually and want broad coverage.",
        "feeds": [
          "Gate 00½",
          "Gate 05"
        ]
      },
      {
        "id": "apify-reddit",
        "name": "Apify Reddit Pain Finder",
        "url": "https://apify.com/solutionssmart/reddit-pain-finder",
        "urlDisplay": "apify.com/solutionssmart/reddit-pain-finder",
        "tier": 1,
        "pricing": "Pay-per-result",
        "pricingTier": "cheap",
        "flags": [
          "new"
        ],
        "blurb": "Scraper that classifies posts into pain types (pricing, missing features, workflow friction, integration needs, switching) and ranks by priority. Works without API keys via RSS, or with Reddit OAuth at scale.",
        "features": [
          "Pain-type classification",
          "Priority scoring",
          "Promo-post filtering",
          "Webhooks + n8n + Make + Zapier",
          "No API key required"
        ],
        "benefit": "The DIY/automation-friendly option. Ideal if you want to pipe Reddit pain data into your own workflow.",
        "feeds": [
          "Gate 00½"
        ],
        "notes": "Built on Apify platform — supports scheduling, monitoring, integrations."
      },
      {
        "id": "sparktoro",
        "name": "SparkToro",
        "url": "https://sparktoro.com/",
        "urlDisplay": "sparktoro.com",
        "tier": 2,
        "pricing": "Personal $38/mo · Business $112/mo · Free 5 searches/mo",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "The audience research standard. Search by keyword, hashtag, or natural-language description; get the websites, podcasts, YouTube channels, subreddits, and social accounts your audience actually engages with.",
        "features": [
          "Audience clickstream + Google + social",
          "\"Describe Your Audience\" natural language",
          "Email-list audience analysis",
          "Podcast + YouTube + subreddit data",
          "Compare Audiences feature"
        ],
        "benefit": "Tells you exactly where the avatar gathers — feeds Gate 01 and Gate 05½ Dream 100.",
        "feeds": [
          "Gate 01",
          "Gate 05½"
        ]
      },
      {
        "id": "answerthepublic",
        "name": "AnswerThePublic",
        "url": "https://answerthepublic.com/en",
        "urlDisplay": "answerthepublic.com",
        "tier": 2,
        "pricing": "Free 3 searches/day · Paid from ~$11/mo",
        "pricingTier": "cheap",
        "flags": [
          "free"
        ],
        "blurb": "Visualizes the questions people ask in autocomplete data. The \"wh-\" outputs are raw avatar pain language, ready to drop into copy.",
        "features": [
          "Google + Bing autocomplete data",
          "Question wheel visualization",
          "CSV export",
          "New AI Dashboard"
        ],
        "benefit": "Instant raw customer language. The questions are the pain in their own words.",
        "feeds": [
          "Gate 01",
          "Gate 06"
        ]
      },
      {
        "id": "alsoasked",
        "name": "AlsoAsked",
        "url": "https://alsoasked.com/",
        "urlDisplay": "alsoasked.com",
        "tier": 2,
        "pricing": "Free 3 searches/day · Paid $15–59/mo",
        "pricingTier": "cheap",
        "flags": [
          "free"
        ],
        "blurb": "Real-time \"People Also Ask\" data from Google in tree structure. Shows the next question your prospect is going to ask after the first one.",
        "features": [
          "Real-time PAA scraping",
          "Tree-structured question hierarchy",
          "CSV export",
          "Visual question mapping"
        ],
        "benefit": "High-leverage for Gate 06½ false belief audit — Google has already clustered the next objection for you.",
        "feeds": [
          "Gate 06",
          "Gate 06½"
        ]
      },
      {
        "id": "buzzsumo",
        "name": "BuzzSumo",
        "url": "https://buzzsumo.com/",
        "urlDisplay": "buzzsumo.com",
        "tier": 2,
        "pricing": "From ~$199/mo",
        "pricingTier": "mid",
        "flags": [],
        "blurb": "Question Analyzer searches forum posts across Amazon, Reddit, Quora, Q&A sites. Content Analyzer shows what's actually getting shared.",
        "features": [
          "Question Analyzer (Amazon, Reddit, Quora)",
          "Content trend tracking",
          "Trending feeds 24h windows",
          "Media database & journalist outreach",
          "Slack integration"
        ],
        "benefit": "Combines pain mining with content performance — what gets shared is what gets clicked.",
        "feeds": [
          "Gate 01",
          "Gate 06"
        ]
      },
      {
        "id": "explodingtopics",
        "name": "Exploding Topics",
        "url": "https://explodingtopics.com/",
        "urlDisplay": "explodingtopics.com",
        "tier": 2,
        "pricing": "Pro from ~$39/mo",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Categories with rising search trajectory before saturation. Feeds Gate 01's market trajectory scale directly.",
        "features": [
          "Trend categorization",
          "Long-term momentum scoring",
          "Category browsing (food, fitness, fintech, etc.)",
          "Trend reports"
        ],
        "benefit": "Validates Gate 01 market trajectory with hard search data before you commit.",
        "feeds": [
          "Gate 01"
        ]
      },
      {
        "id": "glimpse",
        "name": "Glimpse",
        "url": "https://meetglimpse.com/",
        "urlDisplay": "meetglimpse.com",
        "tier": 2,
        "pricing": "Free 10 searches/mo · Paid from $99/mo",
        "pricingTier": "mid",
        "flags": [
          "new"
        ],
        "blurb": "Trend discovery built on Google Trends with absolute search volume, 12-month forecasts, and TikTok/Reddit/Instagram channel breakdowns.",
        "features": [
          "Absolute search volume (vs Google Trends 0–100 scale)",
          "12-month forecast (95%+ backtested accuracy)",
          "TikTok/Reddit/Instagram channel data",
          "Chrome extension",
          "Real-time alerts"
        ],
        "benefit": "Closest competitor to Exploding Topics with more granular keyword tracking and forecasting.",
        "feeds": [
          "Gate 01",
          "Gate 02"
        ]
      },
      {
        "id": "dovetail",
        "name": "Dovetail",
        "url": "https://dovetail.com/",
        "urlDisplay": "dovetail.com",
        "tier": 3,
        "pricing": "Free plan · Paid from $29/mo per user",
        "pricingTier": "cheap",
        "flags": [
          "free"
        ],
        "blurb": "Customer intelligence platform. Centralize calls, tickets, surveys, interviews, reviews; AI auto-classifies into themes. The repository standard.",
        "features": [
          "Auto-import calls, tickets, surveys, interviews, reviews",
          "AI theme classification",
          "Searchable insight repository",
          "Cross-project synthesis",
          "Atomic UX research method"
        ],
        "benefit": "The default choice for customer-research teams who want everything in one place.",
        "feeds": [
          "VOC Vault",
          "Gate 08"
        ]
      },
      {
        "id": "insight7",
        "name": "Insight7",
        "url": "https://insight7.io/",
        "urlDisplay": "insight7.io",
        "tier": 3,
        "pricing": "Custom pricing",
        "pricingTier": "mid",
        "flags": [
          "new"
        ],
        "blurb": "Auto-ingests recordings from Zoom, Google Meet, Teams; extracts themes by semantic meaning; generates branded reports with embedded evidence. Stronger automation than Dovetail at high session volumes.",
        "features": [
          "Auto-ingest Zoom/Meet/Teams",
          "Semantic theme extraction (no manual tagging)",
          "Branded reports with frequency data",
          "Cross-session synthesis",
          "Dropbox + Drive integration"
        ],
        "benefit": "Built for teams running 50+ interviews per month who need automation, not manual tagging.",
        "feeds": [
          "VOC Vault",
          "Gate 08"
        ]
      },
      {
        "id": "conveo",
        "name": "Conveo",
        "url": "https://conveo.ai/",
        "urlDisplay": "conveo.ai",
        "tier": 3,
        "pricing": "Custom enterprise pricing",
        "pricingTier": "enterprise",
        "flags": [
          "new"
        ],
        "blurb": "AI-moderated video interviews with adaptive probing in 50+ languages. Built-in participant recruitment.",
        "features": [
          "Async AI-moderated video interviews",
          "50+ languages with adaptive follow-ups",
          "Built-in participant panel",
          "Multimodal analysis (speech + tone + visual)",
          "Cross-study insight library"
        ],
        "benefit": "Use when you need fresh interview data, not just analysis of existing conversations.",
        "feeds": [
          "VOC Vault"
        ]
      },
      {
        "id": "userinterviews",
        "name": "User Interviews",
        "url": "https://www.userinterviews.com/",
        "urlDisplay": "userinterviews.com",
        "tier": 3,
        "pricing": "Pay per recruit (~$25–100/participant)",
        "pricingTier": "mid",
        "flags": [],
        "blurb": "Recruits participants from a panel of 6 million vetted consumers and professionals. Now part of UserTesting.",
        "features": [
          "6M+ vetted participants",
          "Bring-your-own-audience option",
          "Scheduling + incentive management",
          "Demographic + behavioral targeting"
        ],
        "benefit": "The fastest way to get interviews scheduled when you don't have your own audience yet.",
        "feeds": [
          "VOC Vault"
        ]
      },
      {
        "id": "productboard",
        "name": "Productboard / Pulse",
        "url": "https://www.productboard.com/",
        "urlDisplay": "productboard.com",
        "tier": 3,
        "pricing": "Essentials from $19/maker/mo · Pulse enterprise",
        "pricingTier": "mid",
        "flags": [
          "new"
        ],
        "blurb": "Customer feedback aggregator and pain-point analyzer for product teams. Pulse module surfaces VOC pain points specifically.",
        "features": [
          "Centralized customer feedback",
          "Feature prioritization",
          "Pulse VOC module",
          "Roadmap integration"
        ],
        "benefit": "Best when feedback needs to feed into product decisions, not just live in a research repository.",
        "feeds": [
          "VOC Vault",
          "Gate 08"
        ]
      },
      {
        "id": "revuze",
        "name": "Revuze",
        "url": "https://www.revuze.it/",
        "urlDisplay": "revuze.it",
        "tier": 3,
        "pricing": "Custom enterprise pricing",
        "pricingTier": "enterprise",
        "flags": [
          "new"
        ],
        "blurb": "Ingests unstructured customer language (reviews, support tickets, surveys) and converts it to structured market intelligence. Strongest for product/e-com VOC at scale.",
        "features": [
          "Unstructured-to-structured AI conversion",
          "Multi-source ingestion",
          "Sentiment + topic clustering",
          "Trend forecasting"
        ],
        "benefit": "Built for e-commerce or product orgs swimming in review data.",
        "feeds": [
          "VOC Vault"
        ]
      },
      {
        "id": "sentisum",
        "name": "SentiSum",
        "url": "https://www.sentisum.com/",
        "urlDisplay": "sentisum.com",
        "tier": 3,
        "pricing": "Custom pricing",
        "pricingTier": "mid",
        "flags": [
          "new"
        ],
        "blurb": "Root-cause analysis on customer support complaints. Surfaces systemic problems worth solving.",
        "features": [
          "Support-ticket auto-tagging",
          "Root-cause clustering",
          "Sentiment + intent detection",
          "CRM integrations"
        ],
        "benefit": "Use when you have live customer data and want to know what's actually breaking.",
        "feeds": [
          "Gate 08",
          "Gate 09"
        ]
      },
      {
        "id": "f5bot",
        "name": "F5Bot",
        "url": "https://f5bot.com/",
        "urlDisplay": "f5bot.com",
        "tier": 4,
        "pricing": "Free",
        "pricingTier": "free",
        "flags": [
          "free"
        ],
        "blurb": "Free email alerts for Reddit, Hacker News, Lobsters keywords. Zero cost, no analytics. The baseline tool.",
        "features": [
          "Email alerts on keyword mentions",
          "Reddit + Hacker News + Lobsters",
          "No account complexity"
        ],
        "benefit": "Free, dependable, gets out of the way. The first tool to install when you start.",
        "feeds": [
          "Gate 08",
          "Gate 09"
        ]
      },
      {
        "id": "brand24",
        "name": "Brand24",
        "url": "https://brand24.com/",
        "urlDisplay": "brand24.com",
        "tier": 4,
        "pricing": "From $99/mo",
        "pricingTier": "mid",
        "flags": [],
        "blurb": "Cross-platform mention monitoring with sentiment analysis. Mid-tier pricing, broader than Reddit-only.",
        "features": [
          "Cross-platform mention tracking",
          "Sentiment analysis",
          "Influencer detection",
          "Reddit + web + social"
        ],
        "benefit": "The mid-tier choice when F5Bot isn't enough but Brandwatch is overkill.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "mention",
        "name": "Mention",
        "url": "https://mention.com/",
        "urlDisplay": "mention.com",
        "tier": 4,
        "pricing": "From $41/mo Solo",
        "pricingTier": "mid",
        "flags": [],
        "blurb": "Real-time alerts across web and social. Useful for tracking how customers describe competitors — the complaints become Gate 06 hooks.",
        "features": [
          "Real-time alerts",
          "Boolean search",
          "Web + social coverage",
          "Sentiment scoring"
        ],
        "benefit": "Watch competitors get complained about in real time, then write a hook against the complaint.",
        "feeds": [
          "Gate 06",
          "Gate 09"
        ]
      },
      {
        "id": "awario",
        "name": "Awario",
        "url": "https://awario.com/",
        "urlDisplay": "awario.com",
        "tier": 4,
        "pricing": "From $29/mo Starter",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Brand monitoring with Reddit coverage and Boolean search at accessible price.",
        "features": [
          "Boolean search",
          "Reddit + web + social",
          "Lead detection",
          "Sentiment analysis"
        ],
        "benefit": "The most accessible price point in the listening category for a real product.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "social-searcher",
        "name": "Social Searcher",
        "url": "https://www.social-searcher.com/",
        "urlDisplay": "social-searcher.com",
        "tier": 4,
        "pricing": "Free tier · Paid from $4.50/mo",
        "pricingTier": "free",
        "flags": [
          "new",
          "free"
        ],
        "blurb": "Real-time multi-platform social monitoring with sentiment analysis. Generous free tier — useful before committing to paid tools.",
        "features": [
          "Multi-platform free search",
          "Sentiment analysis",
          "Real-time monitoring",
          "Email alerts"
        ],
        "benefit": "The cheapest paid plan in the catalog. Worth trying before paying for Brand24 or Mention.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "hootsuite",
        "name": "Hootsuite",
        "url": "https://www.hootsuite.com/",
        "urlDisplay": "hootsuite.com",
        "tier": 4,
        "pricing": "Professional $99/mo · Insights ~$600–1200/mo",
        "pricingTier": "enterprise",
        "flags": [
          "new",
          "enterprise"
        ],
        "blurb": "Social media management suite with listening capabilities. Stronger for scheduling than for pain mining; included for completeness.",
        "features": [
          "Multi-account scheduling",
          "Insights add-on for listening",
          "Sentiment analysis (paid tiers)",
          "Team collaboration"
        ],
        "benefit": "Use only if you already need a scheduler. Don't buy this for pain mining alone.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "agorapulse",
        "name": "Agorapulse",
        "url": "https://www.agorapulse.com/",
        "urlDisplay": "agorapulse.com",
        "tier": 4,
        "pricing": "From $79/mo Standard",
        "pricingTier": "mid",
        "flags": [
          "new"
        ],
        "blurb": "Social media management with built-in listening and inbox unification. Mid-tier pricing.",
        "features": [
          "Unified social inbox",
          "Listening add-on",
          "Approval workflows",
          "CRM-light contact tracking"
        ],
        "benefit": "Cleaner UX than Hootsuite, better for small teams that want one tool for everything.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "brandmentions",
        "name": "BrandMentions",
        "url": "https://brandmentions.com/",
        "urlDisplay": "brandmentions.com",
        "tier": 4,
        "pricing": "From $99/mo Growing Business",
        "pricingTier": "mid",
        "flags": [
          "new"
        ],
        "blurb": "Real-time brand and competitor mention tracking across web and social with sentiment.",
        "features": [
          "Web + social mention tracking",
          "Competitor monitoring",
          "Sentiment analysis",
          "Influencer identification"
        ],
        "benefit": "Solid mid-tier alternative to Brand24 with similar capabilities.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "youscan",
        "name": "YouScan",
        "url": "https://youscan.io/",
        "urlDisplay": "youscan.io",
        "tier": 4,
        "pricing": "Custom pricing",
        "pricingTier": "enterprise",
        "flags": [
          "new",
          "enterprise"
        ],
        "blurb": "Visual + text social listening with AI-powered image recognition. Distinct in that it analyzes images, not just text — useful when your category is visual.",
        "features": [
          "Image recognition AI",
          "Logo + product detection",
          "Text + visual sentiment",
          "Audience insights"
        ],
        "benefit": "The only tool here that mines images. Essential if your category is visual (fashion, food, consumer goods).",
        "feeds": [
          "Gate 01",
          "Gate 09"
        ]
      },
      {
        "id": "brandwatch",
        "name": "Brandwatch",
        "url": "https://www.brandwatch.com/",
        "urlDisplay": "brandwatch.com",
        "tier": 5,
        "pricing": "Custom enterprise pricing (typically $1,000+/mo)",
        "pricingTier": "enterprise",
        "flags": [
          "enterprise"
        ],
        "blurb": "Consumer intelligence and social listening at enterprise scale. Strong sentiment, segment, and trend analysis across thousands of sources.",
        "features": [
          "Consumer intelligence at scale",
          "Cross-platform sentiment",
          "Segmentation + audience profiling",
          "Custom dashboards",
          "Historical data depth"
        ],
        "benefit": "Industry leader. Earn its keep at high scale where the depth pays back. Overkill below that.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "sproutsocial",
        "name": "Sprout Social",
        "url": "https://sproutsocial.com/",
        "urlDisplay": "sproutsocial.com",
        "tier": 5,
        "pricing": "From $199/seat/mo · Listening tier higher",
        "pricingTier": "enterprise",
        "flags": [
          "enterprise"
        ],
        "blurb": "Social listening, analytics, and engagement platform.",
        "features": [
          "Listening + engagement + publishing unified",
          "CRM integrations",
          "Reporting + analytics",
          "Approval workflows"
        ],
        "benefit": "When you need listening + management in one tool and have the budget.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "sprinklr",
        "name": "Sprinklr",
        "url": "https://www.sprinklr.com/",
        "urlDisplay": "sprinklr.com",
        "tier": 5,
        "pricing": "Custom enterprise pricing (typically $1,000+/mo)",
        "pricingTier": "enterprise",
        "flags": [
          "enterprise"
        ],
        "blurb": "Unified CXM platform with social sentiment and enterprise CX insights.",
        "features": [
          "Unified CXM platform",
          "Cross-channel sentiment",
          "AI-powered insights",
          "Customer service integration"
        ],
        "benefit": "Only justifiable for large orgs running coordinated CX across many channels.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "talkwalker",
        "name": "Talkwalker",
        "url": "https://www.talkwalker.com/",
        "urlDisplay": "talkwalker.com",
        "tier": 5,
        "pricing": "Custom enterprise pricing",
        "pricingTier": "enterprise",
        "flags": [
          "enterprise"
        ],
        "blurb": "Consumer intelligence platform with broad language and source coverage.",
        "features": [
          "187+ languages supported",
          "Image + video recognition",
          "Trend detection",
          "Crisis monitoring"
        ],
        "benefit": "Strongest in non-English markets. Enterprise pricing limits applicability.",
        "feeds": [
          "Gate 09"
        ]
      },
      {
        "id": "ideaproof",
        "name": "IdeaProof",
        "url": "https://ideaproof.io/",
        "urlDisplay": "ideaproof.io",
        "tier": 6,
        "pricing": "Free tier · Paid available",
        "pricingTier": "free",
        "flags": [
          "new",
          "free"
        ],
        "blurb": "AI startup validator with market analysis, competitor insights, and structured reports. ~120-second turnaround.",
        "features": [
          "120-second AI validation",
          "Market analysis",
          "Competitor insights",
          "Investor-ready reports"
        ],
        "benefit": "Fast first-pass sanity check on Gate 02 before committing time.",
        "feeds": [
          "Gate 02"
        ]
      },
      {
        "id": "dimeadozen",
        "name": "DimeADozen",
        "url": "https://www.dimeadozen.ai/",
        "urlDisplay": "dimeadozen.ai",
        "tier": 6,
        "pricing": "Free trial · Paid plans available",
        "pricingTier": "cheap",
        "flags": [
          "new"
        ],
        "blurb": "AI-generated 40+ page validation reports covering market viability, monetization, competitor analysis, MVP planning, and risk assessment.",
        "features": [
          "40+ page reports in <20s",
          "Market viability + competitive analysis",
          "MVP planning",
          "Pivot suggestions",
          "Risk assessment"
        ],
        "benefit": "Replaces weeks of desk research with a structured first-draft report.",
        "feeds": [
          "Gate 02"
        ]
      },
      {
        "id": "validatorai",
        "name": "ValidatorAI",
        "url": "https://validatorai.com/",
        "urlDisplay": "validatorai.com",
        "tier": 6,
        "pricing": "Free + custom pricing",
        "pricingTier": "free",
        "flags": [
          "new",
          "free"
        ],
        "blurb": "AI advisor that scores ideas, simulates customer feedback, and suggests next steps. Used by 300,000+ founders.",
        "features": [
          "Idea scoring + grading",
          "Simulated customer feedback",
          "Launch-readiness guidance",
          "24/7 AI mentor chatbot"
        ],
        "benefit": "The \"talk to an AI advisor\" version of validation — useful for the question-answer interaction style.",
        "feeds": [
          "Gate 02"
        ]
      },
      {
        "id": "wynter",
        "name": "Wynter",
        "url": "https://wynter.com/",
        "urlDisplay": "wynter.com",
        "tier": 6,
        "pricing": "From ~$540/test",
        "pricingTier": "mid",
        "flags": [
          "new"
        ],
        "blurb": "On-demand B2B message testing. Get 12–48 hour feedback from verified ICPs (job-title and industry filtered). The closest tool to \"test your Gate 06 copy with real buyers before launching.\"",
        "features": [
          "Verified ICP audience (60K+ B2B professionals)",
          "Job-title + industry targeting",
          "12–48 hour turnaround",
          "Message testing + brand research",
          "Persona research"
        ],
        "benefit": "Stops you from launching copy that's convincing only to yourself. Brutal but accurate.",
        "feeds": [
          "Gate 04",
          "Gate 06",
          "Gate 06½"
        ]
      },
      {
        "id": "prelaunch",
        "name": "Prelaunch",
        "url": "https://www.prelaunch.com/",
        "urlDisplay": "prelaunch.com",
        "tier": 6,
        "pricing": "Custom pricing",
        "pricingTier": "mid",
        "flags": [
          "new"
        ],
        "blurb": "Measures actual market reaction (pre-orders, landing-page conversion) before product release. Real-money signal beats hypothetical interest.",
        "features": [
          "Pre-order capture + measurement",
          "Landing-page conversion testing",
          "Concept validation surveys",
          "Price-sensitivity testing"
        ],
        "benefit": "The most rigorous Gate 02 / Gate 04 validation — buyer money on the line, not just stated intent.",
        "feeds": [
          "Gate 02",
          "Gate 04",
          "Gate 07"
        ]
      },
      {
        "id": "typeform",
        "name": "Typeform",
        "url": "https://www.typeform.com/",
        "urlDisplay": "typeform.com",
        "tier": 7,
        "pricing": "Free tier · Basic from $25/mo",
        "pricingTier": "free",
        "flags": [
          "free"
        ],
        "blurb": "Conversational surveys with high completion rates. Best for follow-up validation surveys to refund interviewees and Dream 100.",
        "features": [
          "One-question-at-a-time format",
          "Logic jumps + conditional flows",
          "Integrations (Zapier, etc.)",
          "Free tier with 10 responses/mo"
        ],
        "benefit": "Higher completion rates than form-style surveys. Worth the premium for that alone.",
        "feeds": [
          "Gate 03",
          "Gate 05½",
          "Gate 08"
        ]
      },
      {
        "id": "hotjar",
        "name": "Hotjar",
        "url": "https://www.hotjar.com/",
        "urlDisplay": "hotjar.com",
        "tier": 7,
        "pricing": "Free tier · Plus from $39/mo",
        "pricingTier": "free",
        "flags": [
          "free"
        ],
        "blurb": "Heatmaps, session recordings, on-page feedback polls. The diagnostic input for Gate 09's hook/audience/offer triage.",
        "features": [
          "Heatmaps (clicks, scroll, attention)",
          "Session recordings",
          "On-page feedback polls",
          "Conversion-funnel analysis"
        ],
        "benefit": "Tells you where users actually drop off — Gate 09 hook vs. audience vs. offer diagnostic.",
        "feeds": [
          "Gate 03",
          "Gate 09"
        ]
      }
    ],
    "TIERS": [
      {
        "num": 1,
        "id": "tier-1",
        "name": "Reddit Pain Mining & Direct Alternatives",
        "purpose": "Reddit-mining + pain-point scoring. The closest substitutes if PainOnSocial is unavailable. Output feeds <span class=\"gate-ref\">Gate 00½ Pain Discovery</span>."
      },
      {
        "num": 2,
        "id": "tier-2",
        "name": "Audience Intelligence",
        "purpose": "Where does the avatar gather, who do they follow, what language do they use? Feeds <span class=\"gate-ref\">Gate 01 Hungry Avatar</span> and <span class=\"gate-ref\">Gate 05½ Dream 100</span>."
      },
      {
        "num": 3,
        "id": "tier-3",
        "name": "Voice-of-Customer Synthesis",
        "purpose": "Cluster, transcribe, and structure raw quotes from interviews and feedback. Feeds the <span class=\"gate-ref\">VOC Vault</span> and <span class=\"gate-ref\">Gate 08 Iterate</span>."
      },
      {
        "num": 4,
        "id": "tier-4",
        "name": "Listening & Monitoring",
        "purpose": "Real-time signal of where customers voice pain. Feeds <span class=\"gate-ref\">Gate 08</span> refund-interview discipline and <span class=\"gate-ref\">Gate 09 Pivot or Hold</span>."
      },
      {
        "num": 5,
        "id": "tier-5",
        "name": "Enterprise Listening (★)",
        "purpose": "Same workflows as Tier 4, executed at platform scale. <strong>Pricing $500–$5,000+/mo.</strong> Most operators the widget serves should not buy these. They earn keep only past Gate 11 at multi-channel scale."
      },
      {
        "num": 6,
        "id": "tier-6",
        "name": "Idea & Offer Validation",
        "purpose": "Not pain discovery — adjacent. Validates the <em>offer</em> once the pain is identified. Feeds <span class=\"gate-ref\">Gate 02 Idea/No Idea</span> and <span class=\"gate-ref\">Gate 04 Grand Slam Offer</span>."
      },
      {
        "num": 7,
        "id": "tier-7",
        "name": "Quantitative Validation",
        "purpose": "After qualitative pain, validate with structured surveys and behavioral data. Feeds <span class=\"gate-ref\">Gate 03</span> and <span class=\"gate-ref\">Gate 09</span>."
      }
    ]
  },
  "RISER-Client-Acquisition-Catalog": {
    "TOOLS": [
      {
        "id": "leadinfo",
        "name": "Leadinfo",
        "url": "https://www.leadinfo.com/",
        "urlDisplay": "leadinfo.com",
        "tier": 1,
        "pricing": "From €69/mo Starter · 14-day free trial",
        "pricingTier": "cheap",
        "flags": [
          "essential"
        ],
        "blurb": "Cookieless visitor identification. Tells you which law firms and insurance carriers visit your site, what pages they read, and how long they stayed — without requiring a cookie banner.",
        "features": [
          "IP-to-company matching against 220M+ companies",
          "35–40% identification rate (high end of industry)",
          "Cookieless tracking (GDPR-friendly)",
          "ISO 27001 certified",
          "70+ integrations (CRMs, Slack, etc.)"
        ],
        "benefit": "For a niche specialist, the buyers researching you are already on your site. This tool tells you who they are before they reach out — turning silent visits into actionable warm leads.",
        "feeds": [
          "Step 4 Capture Intent"
        ]
      },
      {
        "id": "leadfeeder",
        "name": "Leadfeeder (Dealfront)",
        "url": "https://www.leadfeeder.com/",
        "urlDisplay": "leadfeeder.com",
        "tier": 1,
        "pricing": "Free 100 leads/mo · Paid from €99/mo",
        "pricingTier": "cheap",
        "flags": [
          "essential",
          "free"
        ],
        "blurb": "The original visitor-ID tool. Now part of Dealfront. Slightly higher friction than Leadinfo (cookies, lower match rate), but the free tier is genuinely useful for testing the channel before committing.",
        "features": [
          "Free tier: 100 identified companies/mo, 7-day history",
          "Google Analytics integration",
          "CRM sync (HubSpot, Salesforce, Pipedrive)",
          "Slack alerts on company visits",
          "Echobot prospecting database"
        ],
        "benefit": "The free tier is the test. If it produces 5+ named law firms in your first month, you have signal — pay to upgrade. If not, save the money.",
        "feeds": [
          "Step 4 Capture Intent"
        ]
      },
      {
        "id": "rb2b",
        "name": "RB2B",
        "url": "https://www.rb2b.com/",
        "urlDisplay": "rb2b.com",
        "tier": 1,
        "pricing": "Free 250 contacts/mo · Paid from $99/mo",
        "pricingTier": "cheap",
        "flags": [
          "free",
          "essential"
        ],
        "blurb": "Person-level visitor identification (not just company). For US traffic, identifies individuals visiting your site — name, LinkedIn, email — when matched to their database.",
        "features": [
          "Person-level identification (US only)",
          "Real-time Slack notifications",
          "LinkedIn profile match",
          "Free 250 contacts/month forever",
          "Direct CRM push"
        ],
        "benefit": "When a partner at a defense firm visits your VRF Forensic Audit page at 10pm Tuesday, you find out about it Wednesday morning by name. That changes your follow-up entirely.",
        "feeds": [
          "Step 4 Capture Intent"
        ]
      },
      {
        "id": "warmly",
        "name": "Warmly",
        "url": "https://www.warmly.ai/",
        "urlDisplay": "warmly.ai",
        "tier": 1,
        "pricing": "Free 500 visitors · Micro from $499/mo",
        "pricingTier": "mid",
        "flags": [
          "free"
        ],
        "blurb": "Live visitor identification with intent signals + ICP filters. Reveals current website visitors in real-time so reps can engage via chat or video while they're still reading.",
        "features": [
          "Real-time visitor reveal",
          "First-party intent signals",
          "ICP filtering + lead routing",
          "Live video/chat engagement",
          "CRM-integrated workflows"
        ],
        "benefit": "For a small consulting practice, the free tier (500 visitors/mo) is often enough. Upgrade only when scale demands it.",
        "feeds": [
          "Step 4 Capture Intent"
        ]
      },
      {
        "id": "seak",
        "name": "SEAK Expert Witness Directory",
        "url": "https://www.seakexperts.com/",
        "urlDisplay": "seakexperts.com",
        "tier": 2,
        "pricing": "$545/yr basic listing",
        "pricingTier": "cheap",
        "flags": [
          "essential"
        ],
        "blurb": "The #1 rated expert witness directory in the industry. Free for attorneys to search. 2,000+ listed experts. Used by both plaintiff and defense counsel for credentialed expert searches.",
        "features": [
          "No middleman — attorneys contact you directly",
          "Free attorney search",
          "Money-back guarantee on listings",
          "SEAK also offers expert witness training",
          "Strong reputation among litigators"
        ],
        "benefit": "Best single directory choice if you can only pick one. Highest credibility signal, attorneys actually search it.",
        "feeds": [
          "Step 2 Get Listed"
        ]
      },
      {
        "id": "jurispro",
        "name": "JurisPro Expert Witness Directory",
        "url": "https://www.jurispro.com/",
        "urlDisplay": "jurispro.com",
        "tier": 2,
        "pricing": "$399/yr (multi-year discounts)",
        "pricingTier": "cheap",
        "flags": [
          "essential"
        ],
        "blurb": "Long-standing directory founded by attorneys in 1999. Searchable by specialty, location, experience. Also indexed in LexisNexis. Volume play — moderate-quality leads but high name-recognition impact.",
        "features": [
          "Profiles include CV, photos, articles, audio/video",
          "LexisNexis indexed (massive attorney reach)",
          "Multi-year discounts",
          "Lower-cost than SEAK or ALM",
          "25+ year reputation"
        ],
        "benefit": "Pair with SEAK for double coverage. The LexisNexis indexing means your name appears in the workflow attorneys are already using.",
        "feeds": [
          "Step 2 Get Listed"
        ]
      },
      {
        "id": "experts-com",
        "name": "Experts.com (ALM)",
        "url": "https://www.experts.com/",
        "urlDisplay": "experts.com",
        "tier": 2,
        "pricing": "$500–$1,000+/yr depending on tier",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Broader-reach directory part of the ALM legal media network. Higher cost than JurisPro, frequently used by larger firms doing complex litigation searches.",
        "features": [
          "ALM legal network distribution",
          "15,000+ experts indexed",
          "Court reporter + investigator + litigation support listings",
          "Strong with AmLaw 200 firms"
        ],
        "benefit": "Higher cost but stronger value if your case complexity matches the firms searching here.",
        "feeds": [
          "Step 2 Get Listed"
        ]
      },
      {
        "id": "forensisgroup",
        "name": "ForensisGroup",
        "url": "https://www.forensisgroup.com/",
        "urlDisplay": "forensisgroup.com",
        "tier": 2,
        "pricing": "Free to apply · % of fees on engagement",
        "pricingTier": "free",
        "flags": [
          "free"
        ],
        "blurb": "Expert-matching service rather than directory. Attorneys submit case details; ForensisGroup matches with vetted experts. They take a markup (typically 30–40%) on retained engagements.",
        "features": [
          "No upfront cost",
          "Pre-vetted expert pool",
          "Active case-matching (not passive listing)",
          "Speed-focused workflow"
        ],
        "benefit": "Zero downside to apply. They send you cases; you pay only when retained. Useful as a passive lead channel alongside direct directories.",
        "feeds": [
          "Step 2 Get Listed"
        ]
      },
      {
        "id": "expert-institute",
        "name": "The Expert Institute",
        "url": "https://www.expertinstitute.com/",
        "urlDisplay": "expertinstitute.com",
        "tier": 2,
        "pricing": "Free to apply · Case-matched referral fees",
        "pricingTier": "free",
        "flags": [
          "free"
        ],
        "blurb": "Case-matched referral service rather than open directory. Has researchers who pair attorneys with experts for specific cases. Strong technology and concierge-level service.",
        "features": [
          "Specialized researcher matchmaking",
          "No upfront listing fee",
          "Custom expert searches",
          "Vetting + credential verification"
        ],
        "benefit": "Particularly strong for complex technical cases where attorneys want curation over self-search.",
        "feeds": [
          "Step 2 Get Listed"
        ]
      },
      {
        "id": "hgexperts",
        "name": "HG Experts",
        "url": "https://www.hgexperts.com/",
        "urlDisplay": "hgexperts.com",
        "tier": 2,
        "pricing": "Listing fees vary",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Mid-tier directory with moderate traffic and lower price point. Useful as a third or fourth directory listing for SEO surface area and name-recognition compounding.",
        "features": [
          "Specialty-categorized listings",
          "Lower-cost listing tier",
          "Geographic search support"
        ],
        "benefit": "The \"diminishing returns\" directory — adds incremental visibility without major investment.",
        "feeds": [
          "Step 2 Get Listed"
        ]
      },
      {
        "id": "tasa",
        "name": "TASA (Technical Advisory Service)",
        "url": "https://www.tasanet.com/",
        "urlDisplay": "tasanet.com",
        "tier": 2,
        "pricing": "Application-based · Referral model",
        "pricingTier": "free",
        "flags": [],
        "blurb": "Long-running expert referral service (since 1956). Application-based admission. Active case-matching rather than passive directory.",
        "features": [
          "65+ year track record",
          "Active case-matching workflow",
          "Quality vetting",
          "Technical specialty depth"
        ],
        "benefit": "Old-school, attorney-trusted referral source. Worth applying for if your specialty fits their roster.",
        "feeds": [
          "Step 2 Get Listed"
        ]
      },
      {
        "id": "linkedin-free",
        "name": "LinkedIn (Free)",
        "url": "https://www.linkedin.com/",
        "urlDisplay": "linkedin.com",
        "tier": 3,
        "pricing": "Free",
        "pricingTier": "free",
        "flags": [
          "essential",
          "free"
        ],
        "blurb": "According to forensic-marketing veterans, LinkedIn produces more high-quality referrals than most paid directories. Free. Requires consistent posting of redacted case studies and technical insights.",
        "features": [
          "Direct attorney + adjuster reach",
          "Case-study post format works exceptionally well",
          "Free unlimited posting",
          "Connection-based credibility",
          "No platform fee"
        ],
        "benefit": "One veteran of 25+ years: \"The best cases come from LinkedIn. Free.\" If you publish one redacted case study per week and engage with attorneys in your specialty, this outproduces $5K of directory listings.",
        "feeds": [
          "Step 3 Reciprocity",
          "Step 5 Convert",
          "Step 6 Compound"
        ]
      },
      {
        "id": "linkedin-sales-nav",
        "name": "LinkedIn Sales Navigator",
        "url": "https://business.linkedin.com/sales-solutions/sales-navigator",
        "urlDisplay": "linkedin.com/sales-solutions",
        "tier": 3,
        "pricing": "Core $99/mo · Advanced $159/mo",
        "pricingTier": "cheap",
        "flags": [
          "essential"
        ],
        "blurb": "The single highest-ROI tool for most professional-services solos. Search by job title (Claims Adjuster, Director of Claims, Subrogation Specialist), firm size, geography. Save searches, get alerts when new people fill those roles.",
        "features": [
          "Advanced filters (title, firm, geography, function)",
          "Saved-search alerts (new hires in target roles)",
          "Lead lists with CRM sync",
          "50 InMails/month on Core, 150 on Advanced",
          "Account intelligence updates"
        ],
        "benefit": "Builds and works your Dream 100 with surgical precision. If you only buy one paid acquisition tool, this is it.",
        "feeds": [
          "Step 1 Identify",
          "Step 5 Convert"
        ]
      },
      {
        "id": "linkedin-recruiter-lite",
        "name": "LinkedIn Recruiter Lite",
        "url": "https://business.linkedin.com/talent-solutions/recruiter-lite",
        "urlDisplay": "linkedin.com/talent-solutions",
        "tier": 3,
        "pricing": "$170/mo",
        "pricingTier": "mid",
        "flags": [
          "niche"
        ],
        "blurb": "Sometimes overlooked alternative to Sales Navigator. Stronger boolean search, better hidden-profile access. Useful if you're also occasionally hiring associate engineers for your practice.",
        "features": [
          "Boolean + advanced search",
          "30 InMails/month",
          "Profile insights beyond standard view",
          "Talent pool analytics"
        ],
        "benefit": "Worth it only if you have dual use (research AND hiring). For pure prospecting, Sales Nav is cheaper and better-suited.",
        "feeds": [
          "Step 1 Identify"
        ]
      },
      {
        "id": "apollo",
        "name": "Apollo.io",
        "url": "https://www.apollo.io/",
        "urlDisplay": "apollo.io",
        "tier": 4,
        "pricing": "Free tier · Basic from $59/mo",
        "pricingTier": "cheap",
        "flags": [
          "essential",
          "free"
        ],
        "blurb": "B2B contact database with 275M+ contacts. Build targeted lists of insurance adjusters, defense attorneys, claims managers by title + firm + geography. Email + phone + LinkedIn on each.",
        "features": [
          "275M+ contact database",
          "Filter by title, firm, geography, employee count",
          "Email + phone + LinkedIn URLs",
          "Built-in email sequencer",
          "Free tier with 50 mobile credits/mo"
        ],
        "benefit": "The cheapest credible way to build a Dream 100 list with verified contact data. The free tier is enough to test the channel.",
        "feeds": [
          "Step 1 Identify",
          "Step 5 Convert"
        ]
      },
      {
        "id": "zoominfo",
        "name": "ZoomInfo",
        "url": "https://www.zoominfo.com/",
        "urlDisplay": "zoominfo.com",
        "tier": 4,
        "pricing": "Custom enterprise pricing (typically $15K+/yr)",
        "pricingTier": "enterprise",
        "flags": [
          "enterprise"
        ],
        "blurb": "The B2B contact-data gold standard. Largest verified database, deepest firmographic detail, intent data layer. Pricing makes it overkill for solo practice.",
        "features": [
          "Deepest verified contact data",
          "Firmographic + technographic filters",
          "Intent data layer (who's researching what)",
          "CRM integrations",
          "Org chart visibility"
        ],
        "benefit": "For a multi-engineer firm with a sales function. Solos should use Apollo first.",
        "feeds": [
          "Step 1 Identify"
        ]
      },
      {
        "id": "cognism",
        "name": "Cognism",
        "url": "https://www.cognism.com/",
        "urlDisplay": "cognism.com",
        "tier": 4,
        "pricing": "Custom pricing (typically $1,000+/mo)",
        "pricingTier": "enterprise",
        "flags": [
          "enterprise"
        ],
        "blurb": "European-strong B2B data with phone-verified contacts and GDPR-compliance focus. Better than ZoomInfo for European data, weaker for US-only.",
        "features": [
          "Phone-verified mobile numbers",
          "GDPR + CCPA compliance",
          "Strong European coverage",
          "Diamond-verified contact tier"
        ],
        "benefit": "Use only if you have European case work or specific phone-outreach intensity.",
        "feeds": [
          "Step 1 Identify"
        ]
      },
      {
        "id": "clay",
        "name": "Clay",
        "url": "https://www.clay.com/",
        "urlDisplay": "clay.com",
        "tier": 4,
        "pricing": "Free tier · Starter from $149/mo",
        "pricingTier": "mid",
        "flags": [
          "niche"
        ],
        "blurb": "Data-enrichment + workflow automation. Aggregates 75+ data providers. Power-user tool for building hyper-targeted Dream 100 workflows with AI-driven personalization.",
        "features": [
          "75+ data providers in one platform",
          "AI-powered personalization at scale",
          "Workflow automation",
          "Spreadsheet-style interface",
          "Steep learning curve"
        ],
        "benefit": "Overkill for most solo practices. Worth it for firms running systematic high-volume outreach.",
        "feeds": [
          "Step 1 Identify",
          "Step 5 Convert"
        ]
      },
      {
        "id": "pacer",
        "name": "PACER",
        "url": "https://pacer.uscourts.gov/",
        "urlDisplay": "pacer.uscourts.gov",
        "tier": 5,
        "pricing": "$0.10/page · No subscription",
        "pricingTier": "free",
        "flags": [
          "essential",
          "free"
        ],
        "blurb": "Federal court records, public access. Search filings by case type, attorney, firm, jurisdiction. Identify which firms handle the case types your specialty serves.",
        "features": [
          "Public Access to Court Electronic Records",
          "$0.10/page (capped at $3/document)",
          "No subscription required",
          "Search by attorney, firm, case type",
          "PACER Service Center direct access"
        ],
        "benefit": "Tells you exactly which attorneys filed which kinds of cases in your jurisdiction. The Dream 100 research foundation. Free until $30/quarter usage.",
        "feeds": [
          "Step 1 Identify"
        ]
      },
      {
        "id": "justia",
        "name": "Justia",
        "url": "https://www.justia.com/",
        "urlDisplay": "justia.com",
        "tier": 5,
        "pricing": "Free",
        "pricingTier": "free",
        "flags": [
          "free"
        ],
        "blurb": "Free legal research portal. Searchable case law, attorney directories, court dockets. Useful for identifying attorneys at specific firms handling specific case types.",
        "features": [
          "Case law search",
          "Attorney + firm directory",
          "Free dockets and decisions",
          "No registration required for most features"
        ],
        "benefit": "Zero-cost first pass on identifying attorneys handling your case-type. Pair with LinkedIn to find them.",
        "feeds": [
          "Step 1 Identify"
        ]
      },
      {
        "id": "westlaw",
        "name": "Westlaw",
        "url": "https://legal.thomsonreuters.com/en/products/westlaw",
        "urlDisplay": "thomsonreuters.com/westlaw",
        "tier": 5,
        "pricing": "Custom (typically $100–500+/mo)",
        "pricingTier": "mid",
        "flags": [],
        "blurb": "The professional legal research standard. Westlaw Profiler shows expert testimony history including who has cross-examined you, who has hired you, and outcomes.",
        "features": [
          "Expert Witness Profiler",
          "Case-law + statutory research",
          "Litigation history search",
          "Daubert challenge tracker",
          "Brief Bank"
        ],
        "benefit": "Worth subscribing once your testimony record is substantial. Lets you research opposing experts and identify firms with case-type fit.",
        "feeds": [
          "Step 1 Identify",
          "Step 6 Compound"
        ]
      },
      {
        "id": "casetext",
        "name": "Casetext (CoCounsel)",
        "url": "https://casetext.com/",
        "urlDisplay": "casetext.com",
        "tier": 5,
        "pricing": "CoCounsel from $400/mo",
        "pricingTier": "mid",
        "flags": [],
        "blurb": "AI-powered legal research now part of Thomson Reuters. CoCounsel handles complex queries about case law, expert challenges, and Daubert history.",
        "features": [
          "AI-powered legal queries",
          "Brief drafting assistance",
          "Case law search",
          "Daubert/Frye history search"
        ],
        "benefit": "For practices that bill enough hours to justify research time. Solo experts can usually skip this for Justia + occasional Westlaw.",
        "feeds": [
          "Step 6 Compound"
        ]
      },
      {
        "id": "lex-machina",
        "name": "Lex Machina",
        "url": "https://lexmachina.com/",
        "urlDisplay": "lexmachina.com",
        "tier": 5,
        "pricing": "Custom enterprise pricing",
        "pricingTier": "enterprise",
        "flags": [
          "enterprise",
          "niche"
        ],
        "blurb": "Litigation analytics platform. Shows which firms litigate which case types, win rates, judge tendencies. Useful for premium-tier Dream 100 targeting.",
        "features": [
          "Litigation outcome analytics",
          "Firm-by-case-type analytics",
          "Judge analytics",
          "Patent + commercial + IP focus"
        ],
        "benefit": "Niche tool. Worth it if you have specific litigation-analytics needs and the budget. Most experts can skip.",
        "feeds": [
          "Step 1 Identify"
        ]
      },
      {
        "id": "docket-alarm",
        "name": "Docket Alarm",
        "url": "https://www.docketalarm.com/",
        "urlDisplay": "docketalarm.com",
        "tier": 5,
        "pricing": "From $99/mo",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Court docket monitoring. Get alerts when new cases of your case-type are filed in your jurisdiction. Approach the firm before they've hired an expert.",
        "features": [
          "New-case alerts by keyword + jurisdiction",
          "Federal + state court coverage",
          "API access",
          "Cheaper than PACER for high-volume monitoring"
        ],
        "benefit": "For specialists in narrow case types (e.g., balcony collapse, VRF litigation), this turns case filings into outreach signals.",
        "feeds": [
          "Step 1 Identify"
        ]
      },
      {
        "id": "hubspot-free",
        "name": "HubSpot CRM (Free)",
        "url": "https://www.hubspot.com/products/crm",
        "urlDisplay": "hubspot.com/crm",
        "tier": 6,
        "pricing": "Free forever",
        "pricingTier": "free",
        "flags": [
          "essential",
          "free"
        ],
        "blurb": "The free CRM that actually works for solo practices. Track every attorney contact, every case inquiry, every follow-up. Email integration, deal pipeline, no time limit.",
        "features": [
          "Truly free (not a trial)",
          "Unlimited contacts",
          "Email + Gmail integration",
          "Deal pipeline visualization",
          "Automatic activity logging"
        ],
        "benefit": "You need a CRM. This one is free, capable, and pre-integrated with Apollo, LinkedIn Sales Nav, and visitor-ID tools. Start here.",
        "feeds": [
          "Step 5 Convert",
          "Step 6 Compound"
        ]
      },
      {
        "id": "pipedrive",
        "name": "Pipedrive",
        "url": "https://www.pipedrive.com/",
        "urlDisplay": "pipedrive.com",
        "tier": 6,
        "pricing": "Essential $25/seat/mo · Advanced $49/seat/mo",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Pipeline-focused CRM. More opinionated than HubSpot — pushes you toward closing deals through stages. Good fit for the case-driven sales cycle of forensic engineering.",
        "features": [
          "Visual pipeline (drag-drop deal stages)",
          "Email tracking + templates",
          "Activity reminders",
          "Mobile app polish",
          "Fewer features than HubSpot but cleaner UX"
        ],
        "benefit": "Pick this over HubSpot if you prefer clean over feature-rich. Either is fine; pick one and use it.",
        "feeds": [
          "Step 5 Convert"
        ]
      },
      {
        "id": "folk",
        "name": "Folk CRM",
        "url": "https://www.folk.app/",
        "urlDisplay": "folk.app",
        "tier": 6,
        "pricing": "Standard $20/seat/mo · Premium $40/seat/mo",
        "pricingTier": "cheap",
        "flags": [
          "niche"
        ],
        "blurb": "Modern, relationship-focused CRM. Designed for people who think of contacts as relationships, not pipeline. Excellent LinkedIn + Gmail integration.",
        "features": [
          "Magic Email enrichment",
          "LinkedIn Chrome extension",
          "Relationship intelligence",
          "Smart fields + automation",
          "Notion-style flexibility"
        ],
        "benefit": "Best fit for an expert-witness practice where relationships compound across many cases over many years.",
        "feeds": [
          "Step 5 Convert",
          "Step 6 Compound"
        ]
      },
      {
        "id": "smartlead",
        "name": "Smartlead",
        "url": "https://www.smartlead.ai/",
        "urlDisplay": "smartlead.ai",
        "tier": 6,
        "pricing": "Basic $39/mo · Pro $94/mo",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Cold-email infrastructure. Multi-mailbox sending, deliverability optimization, AI personalization. The tool to use when sending Dream 100 outreach at meaningful volume.",
        "features": [
          "Unlimited email accounts (no per-mailbox fees)",
          "Deliverability optimization (warm-up, throttling)",
          "AI subject + body personalization",
          "Reply detection + auto-pause",
          "Built-in sequence editor"
        ],
        "benefit": "Cheaper than Lemlist or Instantly at scale. Better deliverability than HubSpot Sequences for cold outreach to attorneys.",
        "feeds": [
          "Step 5 Convert"
        ]
      },
      {
        "id": "instantly",
        "name": "Instantly",
        "url": "https://instantly.ai/",
        "urlDisplay": "instantly.ai",
        "tier": 6,
        "pricing": "Hyper-Growth $97/mo",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Cold-email outreach platform with strong deliverability and AI features. Direct competitor to Smartlead. Pick whichever you can get a discount on.",
        "features": [
          "Unlimited email accounts on paid plans",
          "Inbox warmup (Email Deliverability Network)",
          "CRM-lite functionality",
          "Sequence builder + AI personalization",
          "B2B lead database (paid add-on)"
        ],
        "benefit": "Functionally equivalent to Smartlead. Pick based on UX preference and current promo pricing.",
        "feeds": [
          "Step 5 Convert"
        ]
      },
      {
        "id": "lemlist",
        "name": "Lemlist",
        "url": "https://www.lemlist.com/",
        "urlDisplay": "lemlist.com",
        "tier": 6,
        "pricing": "Email Outreach $59/mo · Sales Engagement $99/mo",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Cold outreach with hyper-personalization (custom images, video, dynamic landing pages). Higher reply rates if you use the personalization features; otherwise overpriced.",
        "features": [
          "Custom image + video personalization",
          "Liquid syntax dynamic content",
          "AI campaign generator",
          "Built-in 450M lead database",
          "Strong deliverability tools"
        ],
        "benefit": "Worth premium only if you actually use the personalization. Otherwise Smartlead or Instantly is cheaper for the same outcome.",
        "feeds": [
          "Step 5 Convert"
        ]
      },
      {
        "id": "nafe",
        "name": "NAFE Membership",
        "url": "https://www.nafe.org/",
        "urlDisplay": "nafe.org",
        "tier": 7,
        "pricing": "~$300–500/yr (membership tiers vary)",
        "pricingTier": "cheap",
        "flags": [
          "essential"
        ],
        "blurb": "National Academy of Forensic Engineers. The professional society for forensic engineering. Member directory, journal publication opportunities, conferences attended by attorneys.",
        "features": [
          "Peer-reviewed journal (J. NAFE)",
          "Member directory used by attorneys",
          "Annual + regional conferences",
          "Continuing education + certification",
          "Strong credibility signal on CV"
        ],
        "benefit": "For a forensic engineer, NAFE is not optional. It's a credentialing baseline. Attorneys searching for \"credentialed forensic engineer\" will look here.",
        "feeds": [
          "Step 2 Get Listed",
          "Step 7 Reputation"
        ]
      },
      {
        "id": "ashrae",
        "name": "ASHRAE Membership",
        "url": "https://www.ashrae.org/",
        "urlDisplay": "ashrae.org",
        "tier": 7,
        "pricing": "Member $263/yr",
        "pricingTier": "cheap",
        "flags": [
          "niche"
        ],
        "blurb": "For HVAC/VRF/mechanical specialists. Technical committee work and standards development create unmatched authority signal. Conference speaking lands directly in front of buyers.",
        "features": [
          "Technical committee membership",
          "Standards-development authorship",
          "Annual + winter conferences",
          "Specialty certifications (BCxP, OPMP, etc.)",
          "Member directory"
        ],
        "benefit": "For VRF litigation specifically, ASHRAE involvement is the single highest-trust signal a court will see. Worth the time investment.",
        "feeds": [
          "Step 7 Reputation"
        ]
      },
      {
        "id": "nfpa",
        "name": "NFPA Membership",
        "url": "https://www.nfpa.org/",
        "urlDisplay": "nfpa.org",
        "tier": 7,
        "pricing": "Member ~$175/yr",
        "pricingTier": "cheap",
        "flags": [
          "niche"
        ],
        "blurb": "National Fire Protection Association. Essential for fire-investigation specialists. NFPA 921 is the gold-standard methodology referenced in fire forensics testimony.",
        "features": [
          "NFPA 921 access + interpretation",
          "Standards committees",
          "Conference + training programs",
          "Specialty journals",
          "CFEI / CFI certifications path"
        ],
        "benefit": "For fire forensic engineering, NFPA is non-optional. Without NFPA 921 fluency, your testimony gets picked apart on cross.",
        "feeds": [
          "Step 7 Reputation"
        ]
      },
      {
        "id": "asce",
        "name": "ASCE Membership",
        "url": "https://www.asce.org/",
        "urlDisplay": "asce.org",
        "tier": 7,
        "pricing": "Member $310/yr",
        "pricingTier": "cheap",
        "flags": [
          "niche"
        ],
        "blurb": "American Society of Civil Engineers. Essential for structural / civil specialists. Forensic Engineering Division within ASCE is specifically attorney-facing.",
        "features": [
          "Forensic Engineering Division",
          "Technical journal publishing",
          "Continuing education",
          "Specialty certifications (PE-related)",
          "Standards documents"
        ],
        "benefit": "For structural failure work, ASCE FED visibility is direct attorney-facing reputation building.",
        "feeds": [
          "Step 7 Reputation"
        ]
      },
      {
        "id": "sparktoro-pro",
        "name": "SparkToro",
        "url": "https://sparktoro.com/",
        "urlDisplay": "sparktoro.com",
        "tier": 7,
        "pricing": "Personal $38/mo · Business $112/mo",
        "pricingTier": "cheap",
        "flags": [],
        "blurb": "Audience research. Type \"insurance defense attorney\" and SparkToro tells you which podcasts they listen to, what publications they read, who they follow on LinkedIn. Your earned-media targeting list.",
        "features": [
          "Audience clickstream analysis",
          "Podcast / publication / social account discovery",
          "Natural-language audience description",
          "Podcast guest opportunities",
          "Email newsletter analysis"
        ],
        "benefit": "Tells you exactly where to publish, where to guest-podcast, and who to connect with on LinkedIn. The Dream 100 amplifier.",
        "feeds": [
          "Step 5 Convert",
          "Step 7 Reputation"
        ]
      },
      {
        "id": "ali-cle",
        "name": "ALI CLE",
        "url": "https://www.ali-cle.org/",
        "urlDisplay": "ali-cle.org",
        "tier": 7,
        "pricing": "Speaker — variable; Attendee from $300/course",
        "pricingTier": "mid",
        "flags": [
          "niche"
        ],
        "blurb": "American Law Institute Continuing Legal Education. Speak at one of their programs and you're directly in front of 100–500 practicing attorneys earning their CLE credits.",
        "features": [
          "Direct audience: practicing attorneys",
          "CLE-credit-eligible content",
          "Recorded distribution beyond live talk",
          "High-credibility signal",
          "Often paid speaker honoraria"
        ],
        "benefit": "A single ALI CLE talk on \"Forensic Engineering for VRF Litigation\" produces inbound case inquiries for years afterward.",
        "feeds": [
          "Step 7 Reputation"
        ]
      },
      {
        "id": "state-bar-cle",
        "name": "State Bar CLE Programs",
        "url": "https://www.americanbar.org/cle/",
        "urlDisplay": "americanbar.org/cle",
        "tier": 7,
        "pricing": "Variable · Often free for speakers",
        "pricingTier": "free",
        "flags": [
          "free",
          "niche"
        ],
        "blurb": "State and local bar associations run CLE programs constantly. They need expert speakers; they pay either honoraria or just visibility. Direct path to the local Dream 100.",
        "features": [
          "Direct local-attorney audience",
          "Often unpaid (visibility-based)",
          "Attendee list available post-event",
          "CLE-credit eligibility",
          "Recurring speaking opportunities"
        ],
        "benefit": "Highest ROI per hour invested for local Dream 100 cultivation. Apply to every state bar in your geography.",
        "feeds": [
          "Step 7 Reputation"
        ]
      },
      {
        "id": "wynter",
        "name": "Wynter (Message Testing)",
        "url": "https://wynter.com/",
        "urlDisplay": "wynter.com",
        "tier": 7,
        "pricing": "From ~$540/test",
        "pricingTier": "mid",
        "flags": [
          "niche"
        ],
        "blurb": "On-demand B2B message testing. Get 12–48 hour feedback from a panel including legal/insurance professionals. Test your service-page copy against actual buyers before launching.",
        "features": [
          "Verified ICP panel (60K+ B2B professionals)",
          "Job-title + industry targeting",
          "12–48 hour turnaround",
          "Service-page + email message testing",
          "Persona research"
        ],
        "benefit": "Most forensic engineers wouldn't think to test their service-page copy with actual attorneys. The ones who do convert better.",
        "feeds": [
          "Step 3 Reciprocity"
        ]
      },
      {
        "id": "expertcommunications",
        "name": "Expert Communications",
        "url": "https://expertcommunications.com/",
        "urlDisplay": "expertcommunications.com",
        "tier": 7,
        "pricing": "Coaching packages from $1,000+",
        "pricingTier": "mid",
        "flags": [
          "niche"
        ],
        "blurb": "Marketing consultancy specifically for expert witnesses. Resume + CV positioning, fee-setting strategy, deposition prep. Niche but proven for the practitioner who wants done-with-you positioning help.",
        "features": [
          "Expert-specific marketing strategy",
          "CV positioning + rewriting",
          "Fee-schedule strategy",
          "Deposition + testimony prep",
          "Referral-network introductions"
        ],
        "benefit": "Worth considering if you're past the technical excellence stage but stuck on positioning + fee-setting.",
        "feeds": [
          "Step 6 Compound"
        ]
      }
    ],
    "TIERS": [
      {
        "num": 1,
        "id": "tier-1",
        "name": "Website Visitor Identification",
        "purpose": "Tells you which firms are reading your service pages but haven't yet contacted you. <strong>This is the highest-leverage tool category for niche specialists</strong> — buyers research before they call. Feeds <span class=\"gate-ref\">Step 4 Capture Intent</span>."
      },
      {
        "num": 2,
        "id": "tier-2",
        "name": "Expert Witness Directories",
        "purpose": "Where attorneys actually search at 11pm before depositions. Listing fees range from $399–$1,000/yr. The directories below are the ones attorneys verify and use. Feeds <span class=\"gate-ref\">Step 2 Get Listed</span>."
      },
      {
        "num": 3,
        "id": "tier-3",
        "name": "LinkedIn — Free + Paid",
        "purpose": "According to one 25-year veteran of expert-witness consulting, \"the best cases come from LinkedIn. Free.\" Sales Navigator amplifies this from organic to systematic. Feeds <span class=\"gate-ref\">Step 1 Identify</span>, <span class=\"gate-ref\">Step 5 Convert</span>."
      },
      {
        "num": 4,
        "id": "tier-4",
        "name": "B2B Contact Data",
        "purpose": "Build a Dream 100 list of named adjusters, attorneys, and claims managers with verified emails and phones. Apollo is the budget winner; ZoomInfo is the gold standard. Feeds <span class=\"gate-ref\">Step 1 Identify</span>."
      },
      {
        "num": 5,
        "id": "tier-5",
        "name": "Legal & Case Intelligence",
        "purpose": "Court records and legal-research tools that tell you which firms handle which case types — so your outreach is targeted. PACER is functionally free. Feeds <span class=\"gate-ref\">Step 1 Identify</span>."
      },
      {
        "num": 6,
        "id": "tier-6",
        "name": "Outreach + CRM",
        "purpose": "Once you have a Dream 100 list, work it. CRM tracks every attorney contact and follow-up. Cold email tools deliver outreach at meaningful volume without burning your domain. Feeds <span class=\"gate-ref\">Step 5 Convert</span>."
      },
      {
        "num": 7,
        "id": "tier-7",
        "name": "Reputation, Content & Associations",
        "purpose": "The compounding layer. Association membership, CLE speaking, technical-committee work, message testing. None of these produce leads next week. All of them produce leads in 2027 and onward. Feeds <span class=\"gate-ref\">Step 7 Reputation</span>."
      }
    ]
  },
  "RISER-MVO-Widget-Direct": {
    "GATES": [
      {
        "id": "intro",
        "num": "00",
        "name": "Start",
        "title": "Welcome to the <em>MVO Engine</em>",
        "rubric": "How this works",
        "isIntro": true
      },
      {
        "id": "paindiscovery",
        "num": "00½",
        "name": "Pain Discovery",
        "title": "Import the <em>voice of the customer</em>",
        "rubric": "Gate 00½ · Pain Import",
        "principle": {
          "text": "\"Operators who guess at pain build for themselves. Operators who import pain build for the market. The most expensive line in any business is the one that begins, 'I think the customer wants...' If you have run a PainOnSocial scan, a customer interview series, or any structured voice-of-customer research, paste the cards here. Every gate downstream gets sharper.\"",
          "source": "RISER Captain's Logic · The Voice-of-Customer Manifest"
        },
        "isPainDiscovery": true
      },
      {
        "id": "avatar",
        "num": "01",
        "name": "Hungry Avatar",
        "title": "Is there a <em>starving crowd?</em>",
        "rubric": "Gate 01 · Avatar",
        "principle": {
          "text": "\"The most important thing you sell is not your product — it is the market you sell it into. A starving crowd is the difference between selling steak and selling sand. Get the market right and a mediocre offer wins. Get it wrong and the best offer in the world dies.\"",
          "source": "RISER Captain's Logic · The Hungry Harbor Doctrine"
        },
        "inputs": [
          {
            "id": "avatar_who",
            "type": "textarea",
            "label": "Who exactly is the avatar?",
            "help": "Specific. \"Marketing managers at SaaS companies between $5M–$20M ARR who are personally accountable for pipeline\" — not \"small business owners.\"",
            "placeholder": "e.g., Solo accountants in their first year of practice, age 28-40, post-MBA, billing under $5K/month...",
            "aiSharpen": true,
            "examples": {
              "good": [
                "Solo CPAs in their first 24 months of practice, billing under $7K/month, ages 32–45, who got their license post-Big-4 and now work from home offices in suburban metros.",
                "In-house marketing leads at Series-B SaaS companies ($10M–$30M ARR), 2–4 years in role, personally accountable for pipeline, no SDR team yet, reporting to a CRO."
              ],
              "bad": [
                "Small business owners who want to grow.",
                "Coaches and consultants looking for more clients."
              ]
            },
            "sharpen": [
              "Can you describe what this person did last Tuesday between 9am and noon?",
              "What is the difference between this avatar and the avatar one tier below them in income or experience?",
              "If you walked into a room of 50 of them, what would they have in common that a stranger would notice in 30 seconds?"
            ],
            "verify": [
              {
                "source": "reddit",
                "label": "Search Reddit for this avatar"
              },
              {
                "source": "google_site_reddit",
                "label": "Google → Reddit posts about this niche"
              },
              {
                "source": "youtube",
                "label": "YouTube — see who already serves them"
              },
              {
                "source": "twitter",
                "label": "Twitter/X search — recent conversations"
              },
              {
                "source": "google_trends",
                "label": "Google Trends — keyword trajectory"
              },
              {
                "source": "indeed",
                "label": "Indeed — job postings (B2B avatars)"
              }
            ]
          },
          {
            "id": "avatar_pain",
            "type": "textarea",
            "label": "What is the specific pain — in their words, not yours?",
            "help": "Quote them. If you cannot quote them, you have not talked to them. Generic pain (\"I want more clients\") is not pain. Specific pain (\"I lose 3 hours every Friday reconciling Stripe\") is pain.",
            "placeholder": "e.g., \"I keep losing deals at the proposal stage and I do not know why\"...",
            "aiSharpen": true,
            "vocPull": true,
            "examples": {
              "good": [
                "\"I send proposals on Monday and by Friday I get ghosted. I never know if it was the price, the scope, or that they just went with someone else.\"",
                "\"My pipeline looks fine on paper but I have not closed a deal in six weeks and I am starting to panic about payroll.\""
              ],
              "bad": [
                "They struggle with sales and need more leads.",
                "They feel overwhelmed by the marketing landscape."
              ]
            },
            "sharpen": [
              "Did you copy this pain from a real conversation, post, or interview — or did you write it yourself?",
              "If yes, paste the source link or the conversation date. If no, that is the homework.",
              "Does the pain include a specific time, place, or trigger? \"Every Monday morning\" beats \"in general.\""
            ],
            "verify": [
              {
                "source": "reddit_pain",
                "label": "Reddit — search this niche + pain words"
              },
              {
                "source": "google_site_reddit",
                "label": "Google → real complaints on Reddit"
              },
              {
                "source": "twitter_complaint",
                "label": "Twitter/X — \"I hate\" / \"I cannot\" rants"
              },
              {
                "source": "youtube_howto",
                "label": "YouTube — \"how do I\" + this niche, read comments"
              },
              {
                "source": "quora",
                "label": "Quora — search the active questions"
              }
            ]
          },
          {
            "id": "avatar_size_purchasing",
            "type": "scale",
            "label": "Purchasing power — can they actually pay?",
            "help": "Operating rule: target markets where buyers have demonstrated willingness to spend $1,000+ on similar problems already. 1 = broke audience, 10 = active buyers spending now.",
            "examples": {
              "good": [
                "I see the avatar paying $200–$500/mo for similar SaaS tools, $2K–$5K for one-time courses, and $5K–$15K for done-with-you programs. Three competitors at this price point are profitable.",
                "The category supports $497–$2,000 offers consistently — Skool groups in this niche have 50–200 paying members at $39–$99/mo."
              ],
              "bad": [
                "I think they would pay because the value is there.",
                "My friend said he would pay for this."
              ]
            },
            "sharpen": [
              "Name three real competitors charging $1,000+ on similar problems. Live URLs.",
              "What is the average spend the avatar already makes on adjacent tools or services per month?",
              "Have you seen at least one case study or income claim from a competitor in this category?"
            ],
            "verify": [
              {
                "source": "google_pricing",
                "label": "Google → competitor pricing pages"
              },
              {
                "source": "youtube_course",
                "label": "YouTube — search niche + \"course\""
              },
              {
                "source": "reddit_pricing",
                "label": "Reddit — niche + \"how much do you charge\""
              },
              {
                "source": "flippa",
                "label": "Flippa — actual transaction prices"
              },
              {
                "source": "indiehackers",
                "label": "Indie Hackers — operator revenue stories"
              }
            ]
          },
          {
            "id": "avatar_size_growing",
            "type": "scale",
            "label": "Market trajectory — growing, flat, or shrinking?",
            "help": "Growing markets forgive errors. Shrinking markets punish even great offers. 1 = dying category, 10 = exploding category.",
            "examples": {
              "good": [
                "Google Trends shows 60% YoY increase on the category terms. Three new competitors entered the space in the last 18 months. Industry reports project 25–40% CAGR through 2028.",
                "The category is mature/flat but with significant operator turnover — older incumbents losing share to newer operators with better positioning. Net opportunity is real."
              ],
              "bad": [
                "I feel like this market is growing.",
                "AI is going to make this category bigger."
              ]
            },
            "sharpen": [
              "What does Google Trends show for the top 3 keywords in this category, 5-year view?",
              "How many new competitors entered the space in the last 24 months?",
              "Is funding flowing into this category (VC deals, accelerator focus, M&A activity)?"
            ],
            "verify": [
              {
                "source": "google_trends",
                "label": "Google Trends — 5-year keyword trajectory"
              },
              {
                "source": "youtube",
                "label": "YouTube — channel growth in this niche"
              },
              {
                "source": "tiktok",
                "label": "TikTok — short-form trend in this niche"
              },
              {
                "source": "google_news",
                "label": "Google News — funding + launches"
              },
              {
                "source": "reddit_growth",
                "label": "Reddit — niche subreddit growth signals"
              }
            ]
          },
          {
            "id": "avatar_size_easy",
            "type": "scale",
            "label": "Easy to reach — can you find them and message them?",
            "help": "A perfect avatar you cannot reach is worthless. Pick avatars who hang out somewhere you can pay or post into. 1 = invisible, 10 = obvious channel.",
            "examples": {
              "good": [
                "They aggregate in three subreddits with 50K+ members each, two private Slack groups, and one well-known LinkedIn hashtag with 100+ daily posts. I can reach 10K of them via Meta ads at $1.20 CPM.",
                "There is a specific industry conference 2x/year, a trade publication with 30K subscribers, and a Telegram group of ~3,000 active members. Three reachable channels, no gatekeeper."
              ],
              "bad": [
                "I will reach them through SEO and content marketing.",
                "I think LinkedIn would work."
              ]
            },
            "sharpen": [
              "Name the top 3 specific places (URL/group/event) where this avatar gathers.",
              "For each, what is the audience size and engagement level?",
              "What does it cost (in dollars OR hours) to reach 100 of them per week?"
            ],
            "verify": [
              {
                "source": "reddit_communities",
                "label": "Reddit — find subreddits in this niche"
              },
              {
                "source": "google_site_reddit",
                "label": "Google → Reddit communities for this niche"
              },
              {
                "source": "youtube_channels",
                "label": "YouTube — channels serving this niche"
              },
              {
                "source": "twitter",
                "label": "Twitter/X — see who posts in this niche"
              },
              {
                "source": "facebook_groups",
                "label": "Google → public Facebook groups"
              }
            ]
          },
          {
            "id": "avatar_pain_intensity",
            "type": "scale",
            "label": "Pain intensity — is this a top-3 problem for them right now?",
            "help": "Top-3 pain = budget exists. Bottom-10 pain = nice-to-have, infinite sales cycle. 1 = mild annoyance, 10 = crisis.",
            "examples": {
              "good": [
                "Customers describe this pain in their first 90 seconds of a sales call without prompting. 3 of last 5 prospects said this is the #1 reason they reached out.",
                "I see this complaint in the top 5 posts every week in their primary subreddit. People say things like \"I cannot keep doing this\" and \"I will pay anyone to fix this.\""
              ],
              "bad": [
                "It is a real problem and they need a solution.",
                "I know it is painful because I felt it myself."
              ]
            },
            "sharpen": [
              "Have you watched 3+ real prospects describe this pain unprompted?",
              "Have they used emotional language (\"I hate,\" \"I cannot keep doing,\" \"I am desperate\") or transactional language (\"it would be nice\")?",
              "Is the pain felt regularly (daily/weekly) or only in specific moments?"
            ],
            "verify": [
              {
                "source": "reddit_pain_intensity",
                "label": "Reddit — emotional pain language search"
              },
              {
                "source": "youtube_howto",
                "label": "YouTube — \"how do I\" + niche, read top comments"
              },
              {
                "source": "twitter_complaint",
                "label": "Twitter/X — frustrated rants in this niche"
              },
              {
                "source": "quora",
                "label": "Quora — desperate questions in this niche"
              },
              {
                "source": "reddit_top",
                "label": "Reddit — sort top posts by month, this niche"
              }
            ]
          }
        ]
      },
      {
        "id": "idea",
        "num": "02",
        "name": "Idea / No Idea",
        "title": "Does the <em>idea earn the slot?</em>",
        "rubric": "Gate 02 · Filter",
        "principle": {
          "text": "\"There are four things that determine whether a market is worth attacking: massive pain, purchasing power, easy to target, and growing. If three of four are true, you have a great market. If two, you have a hard road. If one, you have a hobby. Most people pick markets based on what they know, not on whether the market deserves their next twelve months.\"",
          "source": "RISER Captain's Logic · The Four-Quadrant Territory Test"
        },
        "inputs": [
          {
            "id": "idea_one_sentence",
            "type": "textarea",
            "label": "State the offer in one sentence — for whom, what outcome, by when.",
            "help": "Format: \"I help [avatar] get [outcome] in [timeframe] without [common objection].\" If you cannot fit it in one sentence, the offer is unclear.",
            "placeholder": "e.g., I help solo accountants land their first 10 retainer clients in 90 days without cold outreach."
          },
          {
            "id": "idea_competition",
            "type": "choice",
            "label": "What is the competitive reality?",
            "help": "RISER doctrine: \"If no one is doing it, that is usually a sign no one wants it.\" Competition validates demand. Absence of competition is rarely a moat — it is usually a graveyard.",
            "cols": 1,
            "options": [
              {
                "value": "busy",
                "label": "Crowded market with successful operators",
                "sub": "Best signal. Demand is proven. You differentiate, not invent."
              },
              {
                "value": "mid",
                "label": "Some competitors, mostly mediocre",
                "sub": "Strong signal. Real demand, weak supply. Most opportunities live here."
              },
              {
                "value": "thin",
                "label": "Almost no competition",
                "sub": "Caution. Either you found gold OR no one wants this. Default to second."
              },
              {
                "value": "none",
                "label": "I will be first",
                "sub": "Almost always wrong. \"First mover\" usually means \"first to die.\""
              }
            ]
          },
          {
            "id": "idea_money_now",
            "type": "choice",
            "label": "The $100 today test — would 10 of these people pay $100 right now for a janky v1?",
            "help": "From the Profitable Widget Playbook (and the \"presell before build\" doctrine). If you cannot picture 10 specific names paying $100 today, the idea is theoretical.",
            "cols": 1,
            "options": [
              {
                "value": "named",
                "label": "Yes — I can name the 10 people right now",
                "sub": "GO signal. You have proximity to demand."
              },
              {
                "value": "maybe",
                "label": "Probably — but I would have to find them",
                "sub": "REWORK. Until you can name them, you do not have an avatar — you have a hypothesis."
              },
              {
                "value": "no",
                "label": "No — this would take weeks of marketing first",
                "sub": "NO. The marketing required to find them IS the validation. Do that before building."
              }
            ]
          }
        ]
      },
      {
        "id": "problem",
        "num": "03",
        "name": "Profitable Problem",
        "title": "Is this a <em>painful, urgent, recurring</em> problem?",
        "rubric": "Gate 03 · Problem",
        "principle": {
          "text": "\"Every problem is not a profitable problem. Profitable problems share three features: high pain, high frequency, high cost-of-not-solving. If the problem only happens once and the cost of ignoring it is low, you are not in a business — you are in charity. The best businesses solve problems the customer pays you to keep solving.\"",
          "source": "RISER Captain's Logic · The Profitable-Pain Calibration"
        },
        "inputs": [
          {
            "id": "problem_specific",
            "type": "textarea",
            "label": "State the exact problem in one sentence.",
            "help": "Use the customer's words. \"They cannot get to inbox zero\" is a problem. \"Productivity\" is a category.",
            "placeholder": "e.g., They spend 8+ hours/week on manual invoice reconciliation and miss billing.",
            "vocPull": true
          },
          {
            "id": "problem_frequency",
            "type": "choice",
            "label": "How often does the problem recur?",
            "help": "Recurring pain = recurring revenue. One-and-done pain = transactional revenue with high re-acquisition cost.",
            "cols": 1,
            "options": [
              {
                "value": "daily",
                "label": "Daily or weekly",
                "sub": "Best. Continuity offer fits naturally. LTV compounds."
              },
              {
                "value": "monthly",
                "label": "Monthly",
                "sub": "Strong. Subscription rhythm available."
              },
              {
                "value": "quarterly",
                "label": "Quarterly or seasonal",
                "sub": "Moderate. Service-based or annual offer fits."
              },
              {
                "value": "once",
                "label": "Once-in-a-lifetime / project-based",
                "sub": "Weakest. Every customer is a re-acquisition."
              }
            ]
          },
          {
            "id": "problem_cost",
            "type": "choice",
            "label": "What is the cost of NOT solving the problem?",
            "help": "RISER doctrine: \"Price is set by the cost of the problem, not the cost of the solution.\" High cost of inaction = pricing power.",
            "cols": 1,
            "options": [
              {
                "value": "high",
                "label": "High — losing money, customers, or status",
                "sub": "Premium pricing available. Sell against the loss."
              },
              {
                "value": "moderate",
                "label": "Moderate — friction and frustration",
                "sub": "Mid-tier pricing. Sell against the time-drain."
              },
              {
                "value": "low",
                "label": "Low — minor inconvenience",
                "sub": "Hard to monetize. Reframe to find higher-cost angle, or pick different problem."
              }
            ]
          },
          {
            "id": "problem_existing_solutions",
            "type": "textarea",
            "label": "What do they currently do to solve it (or fail to)?",
            "help": "Name competitors AND non-consumption alternatives (\"they just suffer\", \"they ask their CPA\", \"they Google it\"). The status quo IS the competition.",
            "placeholder": "e.g., They use spreadsheets, hire a part-time bookkeeper, or just get behind and panic at tax time."
          }
        ]
      },
      {
        "id": "offer",
        "num": "04",
        "name": "Grand Slam Offer",
        "title": "Score the offer on <em>the Value Equation</em>",
        "rubric": "Gate 04 · Offer",
        "principle": {
          "text": "\"Value = (Dream Outcome × Perceived Likelihood) ÷ (Time Delay × Effort & Sacrifice). To make any offer better, do one of four things: increase the dream outcome, increase perceived likelihood, decrease time delay, or decrease effort. The numerator is what they want. The denominator is what they pay in pain. Move both.\"",
          "source": "RISER Captain's Logic · The Cargo Value Equation"
        },
        "inputs": [
          {
            "id": "offer_dream",
            "type": "textarea",
            "label": "Dream Outcome — what is the explicit transformation?",
            "help": "Specific, vivid, measurable. \"10 paying clients in 90 days, working from home, charging $2K/mo retainers.\" NOT \"more freedom.\"",
            "placeholder": "e.g., Land 10 retainer clients at $2K/mo within 90 days, working under 25 hrs/week.",
            "vocPull": true
          },
          {
            "id": "offer_dream_score",
            "type": "scale",
            "label": "Dream Outcome strength (1-10)",
            "help": "How emotionally compelling is the outcome? Would the avatar pay 10× to skip 5 years of pain to get there? 1 = mild benefit, 10 = life-changing."
          },
          {
            "id": "offer_likelihood",
            "type": "textarea",
            "label": "Perceived Likelihood — what is your proof that this works?",
            "help": "RISER doctrine: \"Stack proof until it gets ridiculous.\" Case studies, screenshots, testimonials, your own results, third-party validation. List what you have right now.",
            "placeholder": "e.g., 3 case studies with named results, my own $0-$50K journey, 47 customer testimonials..."
          },
          {
            "id": "offer_likelihood_score",
            "type": "scale",
            "label": "Perceived Likelihood (1-10)",
            "help": "Looking at the proof above through skeptical buyer eyes — how believable is the promise? 1 = vapor, 10 = undeniable."
          },
          {
            "id": "offer_time_delay",
            "type": "choice",
            "label": "Time Delay — how fast does the customer feel results?",
            "help": "Speed beats almost every other lever in mid-market offers. The faster the first win, the higher the conversion AND retention.",
            "cols": 1,
            "options": [
              {
                "value": "instant",
                "label": "Within 24 hours of purchase",
                "sub": "Premium pricing power. Speed is the moat."
              },
              {
                "value": "week",
                "label": "Within first week",
                "sub": "Strong. Engineer a Day-1 quick win."
              },
              {
                "value": "month",
                "label": "Within first 30 days",
                "sub": "Acceptable. Add interim wins to maintain momentum."
              },
              {
                "value": "months",
                "label": "Months to first measurable result",
                "sub": "Hard. Refund risk high. Add quick wins or refund-and-pivot."
              }
            ]
          },
          {
            "id": "offer_effort",
            "type": "choice",
            "label": "Effort & Sacrifice — what does the customer have to DO?",
            "help": "Done-with-you beats DIY. Done-for-you beats both. Every step you remove from the customer's plate raises perceived value.",
            "cols": 1,
            "options": [
              {
                "value": "dfy",
                "label": "Done-for-you — they barely lift a finger",
                "sub": "Highest pricing tier ($5K-$50K+). Limited delivery capacity."
              },
              {
                "value": "dwy",
                "label": "Done-with-you — guided implementation",
                "sub": "Mid-tier sweet spot ($1K-$5K). Best price-to-effort ratio."
              },
              {
                "value": "diy",
                "label": "DIY with templates and support",
                "sub": "Lower tier ($97-$997). Higher volume possible."
              },
              {
                "value": "self",
                "label": "Self-paced with no human contact",
                "sub": "Lowest tier ($7-$297). Highest churn. Compete on volume only."
              }
            ]
          },
          {
            "id": "offer_mechanism",
            "type": "textarea",
            "label": "Named Mechanism — what is your proprietary process called, and why does it work differently?",
            "help": "RISER doctrine: \"A named mechanism is the difference between a $97 product and a $4,997 program containing the same content.\" Give your method a name (The Retainer Method®, The 90-Day Pulse™, The 4-Lane Framework). Then in one sentence explain why it works when generic approaches fail.",
            "placeholder": "e.g., The Retainer Method™ — a 4-week sprint that replaces hourly billing with outcome-based packages by pre-selling 90 days of work in a single 30-minute conversation. Works because it inverts the proposal cycle: outcome first, scope second."
          }
        ]
      },
      {
        "id": "stack",
        "num": "04½",
        "name": "Offer Stack",
        "title": "Build the <em>Grand Slam Stack</em>",
        "rubric": "Gate 04½ · Stack",
        "principle": {
          "text": "\"The naked core offer is never the offer. The offer is the core PLUS the stack: bonuses that solve the next three problems before they happen, a guarantee that flips the risk to you, scarcity that creates a real reason to act now, and a name that makes it sound like a thing rather than a thing-you-do. Every component you remove costs you 10% of conversion.\"",
          "source": "RISER Captain's Logic · The Grand Slam Stack Doctrine"
        },
        "inputs": [
          {
            "id": "stack_offer_name",
            "type": "text",
            "label": "Offer name — what do you call this thing?",
            "help": "A named offer is a thing. An unnamed offer is a description. \"The 90-Day Retainer Sprint\" beats \"my coaching program\" by 30% on conversion. Use a number, an outcome word, or both.",
            "placeholder": "e.g., The 90-Day Retainer Sprint · The First-10-Clients Accelerator · Founding Pulse Cohort"
          },
          {
            "id": "stack_bonuses",
            "type": "textarea",
            "label": "Bonuses — name 3 to 5 bonuses, each solving the NEXT problem the customer will hit.",
            "help": "Operating rule: bonuses are not \"extras\" — they are pre-emptive solutions to the objections the buyer has not yet voiced. Format: \"Bonus 1: [Name] — [Outcome] — [Standalone value $X].\" Each bonus needs a name, a result, and a price-anchor.",
            "placeholder": "Bonus 1: The First-Client Script Library — 7 sales scripts that closed real deals — $497 value\nBonus 2: The Retainer Pricing Calculator — 3 pricing tiers with anchor logic — $297 value\nBonus 3: The 30-Day Onboarding SOP — copy-paste client-onboarding system — $997 value"
          },
          {
            "id": "stack_guarantee_type",
            "type": "choice",
            "label": "Guarantee type — what risk are you absorbing?",
            "help": "RISER doctrine: \"If you will not stand behind your offer with a guarantee, neither will they.\" Hormozi's ladder: implied < unconditional < conditional < anti-guarantee. Pick the strongest your unit economics can absorb.",
            "cols": 1,
            "options": [
              {
                "value": "anti",
                "label": "Anti-guarantee — \"no refunds, here is why\"",
                "sub": "Boldest. Requires extreme trust + filtering. Not for first launch."
              },
              {
                "value": "conditional",
                "label": "Conditional — \"do X, Y, Z and if no result, double your money back\"",
                "sub": "Best for most operators. Forces customer accountability + dramatic risk reversal."
              },
              {
                "value": "unconditional",
                "label": "Unconditional — \"30-day no-questions-asked refund\"",
                "sub": "Standard. Lowest friction, highest refund risk. Use if delivery is bulletproof."
              },
              {
                "value": "implied",
                "label": "Implied — \"we are confident you will love it\"",
                "sub": "Weakest. Not really a guarantee. Will halve conversion vs. any explicit guarantee."
              },
              {
                "value": "none",
                "label": "No guarantee",
                "sub": "Almost always wrong. The buyer absorbs the risk and your conversion craters."
              }
            ]
          },
          {
            "id": "stack_guarantee_text",
            "type": "textarea",
            "label": "Write the guarantee — exact words you will use on the page.",
            "help": "Specificity wins. \"30-day money-back\" beats \"guaranteed.\" \"If you don't land 3 retainer clients in 60 days, I work with you free until you do\" beats \"30-day money-back.\"",
            "placeholder": "e.g., Land 3 retainer clients in 60 days or I work with you free until you do — and you keep all the bonuses."
          },
          {
            "id": "stack_scarcity",
            "type": "choice",
            "label": "Scarcity mechanism — what makes \"buy now\" real, not theatrical?",
            "help": "Cialdini: scarcity drives action only when it is REAL. Fake countdown timers train your audience to ignore you. Pick a scarcity that is structurally true.",
            "cols": 1,
            "options": [
              {
                "value": "cohort",
                "label": "Cohort cap — \"12 founding members, then closed for 90 days\"",
                "sub": "Best for service/cohort offers. Real, defensible, repeatable."
              },
              {
                "value": "price",
                "label": "Founding price — \"locked at $497 for first 25, then $1,497\"",
                "sub": "Strong. Real reason to act now. Price ladder must be enforced."
              },
              {
                "value": "bonus",
                "label": "Bonus expiration — \"Bonus 3 disappears after Friday\"",
                "sub": "Workable. The bonus must actually go away or trust dies."
              },
              {
                "value": "window",
                "label": "Launch window — \"open Monday, closed Friday\"",
                "sub": "Strong if true. Brunson's preferred mechanism. Requires real close."
              },
              {
                "value": "fake",
                "label": "Fake countdown / inflated urgency",
                "sub": "NEVER. One discovery and you lose the audience permanently."
              },
              {
                "value": "none",
                "label": "No scarcity",
                "sub": "Wrong. The buyer has no structural reason to decide today."
              }
            ]
          },
          {
            "id": "stack_total_value",
            "type": "text",
            "label": "Stack total value — sum of core + all bonuses (anchor price)",
            "help": "Cialdini contrast principle: a $497 price next to no anchor looks expensive. A $497 price next to a $5,991 stack value looks like a steal. Add up your core + bonus prices honestly.",
            "placeholder": "e.g., 5991"
          },
          {
            "id": "stack_actual_price",
            "type": "text",
            "label": "Actual offer price (USD)",
            "help": "The price the customer pays. Should be a fraction (typically 1/5 to 1/10) of the stack total above. If the ratio is less than 3:1, your stack is too thin or your price is too high.",
            "placeholder": "e.g., 497"
          }
        ]
      },
      {
        "id": "distribution",
        "num": "05",
        "name": "Core Four",
        "title": "Pick <em>one</em> of the four ways to get leads",
        "rubric": "Gate 05 · Distribution",
        "principle": {
          "text": "\"There are four ways to get a stranger to know about you: warm outreach, cold outreach, warm content, paid ads. That is it. Every business runs one or more of these. The mistake is picking three at the start. Pick ONE. Get to 100 customers from that one. Then add the next.\"",
          "source": "RISER Captain's Logic · The Core Four Shipping Lanes"
        },
        "inputs": [
          {
            "id": "dist_primary",
            "type": "choice",
            "label": "Pick your primary channel (one only).",
            "help": "Operating rule: master one before adding another. The operator who runs LinkedIn cold outreach 5 days a week for 12 weeks beats the operator who tries 4 channels.",
            "cols": 2,
            "options": [
              {
                "value": "warm_outreach",
                "label": "Warm outreach",
                "sub": "DM/email people who already know you. Best for first 10 customers. Free. Low volume."
              },
              {
                "value": "cold_outreach",
                "label": "Cold outreach",
                "sub": "DM/email strangers at scale. Best when avatar is identifiable + reachable. Cheap. Skill-intensive."
              },
              {
                "value": "warm_content",
                "label": "Warm content",
                "sub": "Post valuable content to your audience. Compounds over time. Slow start."
              },
              {
                "value": "paid_ads",
                "label": "Paid ads",
                "sub": "Pay platforms to put your offer in front of strangers. Requires unit economics first. Fastest scaling."
              }
            ]
          },
          {
            "id": "dist_volume",
            "type": "textarea",
            "label": "Volume math — how many touches per day to hit your numbers?",
            "help": "RISER doctrine: \"More is the answer. Always more.\" If you need 10 customers in 90 days at 1% conversion, you need 1,000 conversations = ~12/day. Do the math now.",
            "placeholder": "e.g., 50 cold DMs/day × 5 days/week × 12 weeks = 3,000 conversations. At 1% close = 30 customers."
          },
          {
            "id": "dist_unit_econ",
            "type": "choice",
            "label": "Do you know your unit economics?",
            "help": "Required before paid ads. Optional but useful for organic.",
            "cols": 1,
            "options": [
              {
                "value": "yes",
                "label": "Yes — I know CAC, LTV, payback period",
                "sub": "GO. Paid ads viable when CAC < 1/3 of 12-month LTV."
              },
              {
                "value": "partial",
                "label": "Partially — rough estimates only",
                "sub": "Use organic until estimates become real numbers."
              },
              {
                "value": "no",
                "label": "No — pre-revenue",
                "sub": "Stay organic. Paid ads will burn cash with no feedback loop."
              }
            ]
          }
        ]
      },
      {
        "id": "dream100",
        "num": "05½",
        "name": "Dream 100",
        "title": "Name the <em>100 people who own your audience</em>",
        "rubric": "Gate 05½ · Dream 100",
        "principle": {
          "text": "\"You do not need to find a million strangers. You need to find the 100 people who already gathered them. Every audience you want to reach has been pre-built by 100 specific operators — podcasters, newsletter writers, YouTubers, Skool group owners, association heads, top affiliates. Borrow their boats. Do not build your own dock from scratch.\"",
          "source": "RISER Captain's Logic · The Dream 100 Convoy"
        },
        "inputs": [
          {
            "id": "dream100_list",
            "type": "textarea",
            "label": "List 25 specific people, podcasts, newsletters, or groups your avatar already follows.",
            "help": "Named handles. Real URLs. Not \"fitness influencers\" — but \"@HybridAthlete\", \"ATG for Life YouTube\", \"Knees Over Toes Skool group\", \"Ben Patrick Substack\". The first 25 take 2 hours of research. Skip this and you build distribution from zero.",
            "placeholder": "e.g.,\n1. @hormozi (Twitter, 2.1M followers)\n2. The My First Million podcast\n3. Indie Hackers community (newsletter)\n4. SaaStr Skool group\n5. ...continue to 25"
          },
          {
            "id": "dream100_strategy",
            "type": "choice",
            "label": "Primary Dream 100 strategy",
            "help": "Brunson's framing: there are only three ways in. Pick one. Working two strategies on the same Dream 100 person at the same time = burned bridge.",
            "cols": 1,
            "options": [
              {
                "value": "work_in",
                "label": "Work your way in — provide value first, become known",
                "sub": "Slowest, most durable. Comment, share, send wins. 90 days to first invitation."
              },
              {
                "value": "buy_in",
                "label": "Buy your way in — sponsor, advertise, run paid promo",
                "sub": "Fastest. Costs money. Use when you have unit economics."
              },
              {
                "value": "partner",
                "label": "Partner — co-create, joint venture, revenue share",
                "sub": "Highest leverage. Requires you bring something they need."
              }
            ]
          },
          {
            "id": "dream100_first_outreach",
            "type": "textarea",
            "label": "First-touch script — what you will send to the first 10.",
            "help": "No pitch. No ask. The first message is gift-only. Quote them, share a result, send a resource. Reciprocity is built before the ask is made. Cialdini's rule: the gift comes first or the ask is dead.",
            "placeholder": "e.g., \"Hey [Name] — just used your retainer-pricing framework with 3 clients. Closed 2 at $4K/mo. Wanted to send a thank-you and the case study screenshots. No ask, just gratitude.\""
          },
          {
            "id": "dream100_volume",
            "type": "choice",
            "label": "Outreach volume — how many Dream 100 contacts per week?",
            "help": "Brunson: 100 contacts in a week is not unreasonable. 100 in a year means you do not believe in the strategy. The Dream 100 is a daily action, not a quarterly project.",
            "cols": 1,
            "options": [
              {
                "value": "high",
                "label": "20+ per week",
                "sub": "Best. Compounds fast. By month 3 you are known in the niche."
              },
              {
                "value": "medium",
                "label": "5–20 per week",
                "sub": "Workable. Slower compound. 6+ months to network density."
              },
              {
                "value": "low",
                "label": "<5 per week",
                "sub": "Too slow. The Dream 100 stops working below this volume."
              },
              {
                "value": "none",
                "label": "Not yet doing it",
                "sub": "NO. The Dream 100 is the highest-leverage activity in early growth. Start today."
              }
            ]
          }
        ]
      },
      {
        "id": "copy",
        "num": "06",
        "name": "Hook / Body",
        "title": "Write the <em>hook, headline, and body</em>",
        "rubric": "Gate 06 · Copy",
        "principle": {
          "text": "\"You have three seconds. The hook stops the scroll. The headline promises the dream. The body proves you can deliver. Most copy fails at the hook, blames the product. The hook is not a creative challenge — it is a calling-out exercise. Call out the avatar by their pain, by name, in the words they use about themselves.\"",
          "source": "RISER Captain's Logic · The Three-Second Signal Flare"
        },
        "inputs": [
          {
            "id": "copy_hook",
            "type": "textarea",
            "label": "Hook — first 3 seconds. What stops the scroll?",
            "help": "Hook formats that work: callout question (\"Solo accountants — are you charging by the hour?\"), pattern interrupt (\"I fired my agency yesterday.\"), specific stat (\"47% of [avatar] do this wrong\"). Avoid clever; choose clear.",
            "placeholder": "e.g., Solo accountants under $5K/mo: stop trading hours for dollars by Q2.",
            "vocPull": true
          },
          {
            "id": "copy_headline",
            "type": "textarea",
            "label": "Headline — the promise.",
            "help": "Format: [Outcome] in [Timeframe] without [Objection]. Specific outcome, specific timeframe, named objection removed. Use numbers when possible.",
            "placeholder": "e.g., Land 10 retainer clients at $2K/mo within 90 days — without cold outreach, paid ads, or a website rebuild.",
            "vocPull": true
          },
          {
            "id": "copy_body",
            "type": "textarea",
            "label": "Body — proof + mechanism + call-to-action.",
            "help": "5-line skeleton: Problem · What's working now · How it works (named mechanism) · Proof · Specific CTA. Keep under 100 words for ads, under 250 for landing pages.",
            "placeholder": "Most solo accountants are stuck billing by the hour, capping income at 40 hrs × $X. The shift is to retainer-based packages priced on outcomes, not time. The Retainer Method® gets accountants from hourly to $2K/mo retainer in 90 days...",
            "vocPull": true
          },
          {
            "id": "copy_cta",
            "type": "choice",
            "label": "Call-to-action specificity",
            "help": "Vague CTAs (\"learn more\") convert at half the rate of specific CTAs (\"get the 5-page retainer template + 90-day guide\").",
            "cols": 1,
            "options": [
              {
                "value": "specific",
                "label": "Named asset + specific outcome",
                "sub": "Best. \"Get the 5-page Retainer Pricing Calculator.\" Concrete object."
              },
              {
                "value": "mid",
                "label": "Action verb + topic",
                "sub": "OK. \"Apply for a strategy call.\" \"Download the playbook.\""
              },
              {
                "value": "vague",
                "label": "Generic (\"learn more\")",
                "sub": "Weakest. Rewrite before deploy."
              }
            ]
          }
        ]
      },
      {
        "id": "persuasion",
        "num": "06½",
        "name": "Persuasion",
        "title": "Audit the <em>persuasion architecture</em>",
        "rubric": "Gate 06½ · Persuasion",
        "principle": {
          "text": "\"Copy is downstream of persuasion. Most operators write copy and hope persuasion happens. The reverse is correct: identify the one belief you must break, the seven psychological levers your page activates, and the lead magnet that creates reciprocity before the ask. Copy is the surface; persuasion is the structure underneath.\"",
          "source": "RISER Captain's Logic · The Persuasion Architecture"
        },
        "inputs": [
          {
            "id": "persuasion_big_domino",
            "type": "textarea",
            "label": "The Big Domino — what is the ONE belief you must break for the sale to happen?",
            "help": "Brunson's One Big Domino: \"If I can make my prospect believe ONE thing is true, all other objections become irrelevant.\" Format: \"If they believe [X], then they will buy.\" Make it specific to your avatar and your offer's mechanism.",
            "placeholder": "e.g., If solo accountants believe that retainer pricing is achievable in 90 days without losing their existing hourly clients, the rest of the offer sells itself."
          },
          {
            "id": "persuasion_false_beliefs",
            "type": "textarea",
            "label": "False Belief Audit — name the 3 false beliefs blocking the sale.",
            "help": "Brunson's 3-belief framework: (1) belief about the VEHICLE (\"retainer pricing only works for big firms\"), (2) belief about THEMSELVES (\"I am too new to charge that much\"), (3) belief about EXTERNAL (\"my market is too price-sensitive\"). Name one of each.",
            "placeholder": "Vehicle: \"Retainers only work for established firms with reputations.\"\nSelf: \"I do not have the credibility to charge $2K/mo yet.\"\nExternal: \"My local market will not pay retainer rates.\""
          },
          {
            "id": "persuasion_lead_magnet",
            "type": "textarea",
            "label": "Reciprocity gift — what do you GIVE before you ask?",
            "help": "Cialdini's reciprocity rule: the gift comes first or the ask is dead. Brunson's Bait. Hormozi's Lead Magnet. Specific, useful, immediate. Not \"a free guide\" — a named, valuable asset.",
            "placeholder": "e.g., The Retainer Pricing Calculator — 3-tier model with anchor logic + 5 sample proposals that closed real $2K-$5K/mo deals. PDF + Notion template. 7 minutes to use.",
            "vocPull": true
          },
          {
            "id": "persuasion_reciprocity",
            "type": "choice",
            "label": "Reciprocity — does your funnel give before it asks?",
            "help": "Cialdini's most under-leveraged principle. The lead magnet, the free workshop, the pre-call resource. Without a gift first, the ask sounds like a demand.",
            "cols": 1,
            "options": [
              {
                "value": "strong",
                "label": "Strong — named, useful asset given freely before any pitch",
                "sub": "GO. Reciprocity debt is established."
              },
              {
                "value": "weak",
                "label": "Weak — generic \"newsletter\" or \"free webinar\"",
                "sub": "REWORK. Generic gifts are not gifts. Make it specific and valuable."
              },
              {
                "value": "none",
                "label": "None — direct pitch, no gift",
                "sub": "NO. Cold ask without reciprocity converts at 1/3 the rate."
              }
            ]
          },
          {
            "id": "persuasion_social_proof",
            "type": "choice",
            "label": "Social Proof — what density and similarity?",
            "help": "Cialdini: people follow people who look like them. 3 testimonials from people who match the avatar exactly beat 30 generic testimonials. Specificity > volume.",
            "cols": 1,
            "options": [
              {
                "value": "high",
                "label": "5+ testimonials from avatar-similar customers, with named results",
                "sub": "GO. Strong proof density. Names, photos, specific numbers."
              },
              {
                "value": "medium",
                "label": "2-4 testimonials, partial similarity",
                "sub": "REWORK. Stack more, get exact-avatar matches."
              },
              {
                "value": "low",
                "label": "0-1 testimonials OR generic praise",
                "sub": "NO. The proof gap is the conversion gap. Get 3 specific testimonials before launch."
              }
            ]
          },
          {
            "id": "persuasion_authority",
            "type": "choice",
            "label": "Authority — what credentials, results, or associations are visible?",
            "help": "Cialdini: people defer to expertise. Specific results > vague credentials. \"Built and sold a $4M agency\" beats \"12 years experience.\" Numbers + names + outcomes.",
            "cols": 1,
            "options": [
              {
                "value": "strong",
                "label": "Strong — specific track record, results, or recognized association",
                "sub": "GO. Authority is unambiguous."
              },
              {
                "value": "borrowed",
                "label": "Borrowed — endorsement from named authority figure",
                "sub": "Workable. Borrowed authority is real authority if attributed."
              },
              {
                "value": "thin",
                "label": "Thin — generic credentials, no specific results",
                "sub": "REWORK. Replace credentials with results. Numbers > letters after your name."
              }
            ]
          },
          {
            "id": "persuasion_unity",
            "type": "choice",
            "label": "Unity — does your copy use shared-identity language?",
            "help": "Cialdini's 7th principle (the most overlooked): \"we,\" \"us,\" \"our kind,\" \"people like us.\" Tribe language. The avatar should feel they belong to a group, not a market segment.",
            "cols": 1,
            "options": [
              {
                "value": "strong",
                "label": "Strong — explicit shared identity, named tribe",
                "sub": "Best. \"Solo accountants who refuse to bill by the hour.\""
              },
              {
                "value": "medium",
                "label": "Implicit — written for the avatar but no tribe naming",
                "sub": "OK. Add explicit identity language for 20% conversion lift."
              },
              {
                "value": "absent",
                "label": "Absent — generic \"you\" with no identity layer",
                "sub": "REWORK. Name the tribe."
              }
            ]
          },
          {
            "id": "persuasion_consistency",
            "type": "choice",
            "label": "Consistency — what small \"yes\" do you secure before the big yes?",
            "help": "Cialdini: people stay consistent with prior commitments. The micro-yes (download, quiz, opt-in, free call) creates the consistency pressure that makes the macro-yes feel natural.",
            "cols": 1,
            "options": [
              {
                "value": "multistep",
                "label": "Multi-step funnel — opt-in → engagement → ask",
                "sub": "Best. Each step is a small yes."
              },
              {
                "value": "singlestep",
                "label": "Single-step — direct ask, no priming",
                "sub": "REWORK. Add at least one micro-commitment before the ask."
              }
            ]
          }
        ]
      },
      {
        "id": "deploy",
        "num": "07",
        "name": "Deploy",
        "title": "<em>Ship</em> the minimum viable launch",
        "rubric": "Gate 07 · Deploy",
        "principle": {
          "text": "\"Done beats perfect every single time. The launch you do not run cannot teach you anything. The launch that embarrasses you in 12 months is the right launch — anything you ship today that you would still be proud of in a year was over-engineered. Ship in 30 days. The market is the editor.\"",
          "source": "RISER Captain's Logic · The Launch-Ugly Doctrine"
        },
        "inputs": [
          {
            "id": "deploy_date",
            "type": "text",
            "label": "Beta launch date (specific calendar date, ≤ 30 days out)",
            "help": "A date is not a commitment until it is signed. Pick a Friday. Tell another operator. Make it expensive to slip.",
            "placeholder": "e.g., 2026-05-23"
          },
          {
            "id": "deploy_size",
            "type": "choice",
            "label": "Beta cohort size",
            "help": "Captain's rule for first launch: smaller is better. 10 over-served founding members produce 10× the testimonial density of 50 mediocre members. 0 is too few; 50 is too many.",
            "cols": 1,
            "options": [
              {
                "value": "tiny",
                "label": "5–10 founding members",
                "sub": "Best for first-time launch. Over-serve. 10× testimonial density."
              },
              {
                "value": "small",
                "label": "10–25 members",
                "sub": "Strong. Workable delivery capacity."
              },
              {
                "value": "medium",
                "label": "25–50 members",
                "sub": "Risky on first launch. Delivery quality slips."
              },
              {
                "value": "big",
                "label": "50+ members",
                "sub": "Almost always wrong on first launch."
              }
            ]
          },
          {
            "id": "deploy_price",
            "type": "text",
            "label": "Beta price (single number, USD)",
            "help": "Founding rate, locked. Avoid the \"Muddled Middle\" ($500–$900). Default for service/coaching: $497–$997 founding rate, future $1497–$1997. For productized: $97–$297 founding, future $297–$497.",
            "placeholder": "e.g., 497"
          },
          {
            "id": "deploy_kill_rule",
            "type": "choice",
            "label": "Kill rule — what happens if you do not hit the number?",
            "help": "RISER doctrine: \"If you cannot say what failure looks like in advance, you cannot tell the difference between a struggling launch and a dead launch.\" Kill rules protect from sunk-cost grinding.",
            "cols": 1,
            "options": [
              {
                "value": "tight",
                "label": "< 5 paid in 14 days = pivot offer angle",
                "sub": "Best. Forces a decision before sunk cost compounds."
              },
              {
                "value": "medium",
                "label": "< 3 paid in 21 days = pivot",
                "sub": "Acceptable. Slightly slower trigger."
              },
              {
                "value": "loose",
                "label": "I will keep going regardless",
                "sub": "Wrong answer. Define failure or it will define you."
              }
            ]
          },
          {
            "id": "deploy_4_tools",
            "type": "choice",
            "label": "Are the 4 minimum tools live?",
            "help": "RISER minimum: a way to capture leads, a way to take payment, a way to deliver, a way to measure. Everything else is optional pre-launch.",
            "cols": 1,
            "options": [
              {
                "value": "all",
                "label": "All 4 live and tested",
                "sub": "GO."
              },
              {
                "value": "three",
                "label": "3 of 4 live",
                "sub": "REWORK. Name the missing one and ship it this week."
              },
              {
                "value": "fewer",
                "label": "Fewer than 3",
                "sub": "NO. Tools are not the problem. Build the missing tools FIRST in the next 7 days."
              }
            ]
          }
        ]
      },
      {
        "id": "iterate",
        "num": "08",
        "name": "Iterate",
        "title": "<em>Iterate</em> on real customer data",
        "rubric": "Gate 08 · Iterate",
        "principle": {
          "text": "\"Volume forgives mistakes. The operator who has 100 sales conversations in a month learns more than the operator who has 5 perfect ones. Iterate on data, not opinions. Talk to every customer. Ask the same five questions. After 30 conversations, the pattern is undeniable.\"",
          "source": "RISER Captain's Logic · The Voyage Log Iteration Cycle"
        },
        "inputs": [
          {
            "id": "iter_at_bats",
            "type": "choice",
            "label": "How many at-bats before iterating?",
            "help": "Iterating after 3 calls = noise. Iterating after 30 calls = signal. Iterating after 300 = late.",
            "cols": 1,
            "options": [
              {
                "value": "enough",
                "label": "20–30 sales conversations or 30+ users",
                "sub": "GO. Sample size large enough to see patterns."
              },
              {
                "value": "partial",
                "label": "10–20 conversations",
                "sub": "REWORK. Pattern unclear. Run 10 more before changing anything."
              },
              {
                "value": "tiny",
                "label": "Fewer than 10",
                "sub": "NO. Iteration is premature. Get to 30 first."
              }
            ]
          },
          {
            "id": "iter_signal",
            "type": "textarea",
            "label": "What is the dominant pattern from real customers?",
            "help": "RISER doctrine: \"Customers tell you exactly what is wrong. Most operators do not believe them.\" What objection comes up most? What feature do they ignore? What outcome do they actually celebrate?",
            "placeholder": "e.g., 7 of 10 customers say the templates worked but the live calls were too long. 3 dropped at week 4 because of pacing."
          },
          {
            "id": "iter_lever",
            "type": "choice",
            "label": "Which Value Equation lever do you adjust?",
            "help": "Pick one. Changing all four at once is rebuild, not iterate. Iterate is one lever per cycle.",
            "cols": 2,
            "options": [
              {
                "value": "dream",
                "label": "Strengthen Dream Outcome",
                "sub": "Reframe transformation, raise specificity."
              },
              {
                "value": "likelihood",
                "label": "Increase Perceived Likelihood",
                "sub": "Add proof, case studies, guarantees."
              },
              {
                "value": "time",
                "label": "Decrease Time Delay",
                "sub": "Engineer faster first win, add quick wins."
              },
              {
                "value": "effort",
                "label": "Decrease Effort & Sacrifice",
                "sub": "Remove DIY steps, add templates, raise tier to DWY/DFY."
              }
            ]
          },
          {
            "id": "iter_awareness",
            "type": "choice",
            "label": "Awareness stage — where is the market relative to the solution?",
            "help": "Eugene Schwartz's 5 stages (used by Hormozi + Brunson): the right copy depends on what the market already knows. A Stage 1 audience needs the problem named. A Stage 5 audience needs a new mechanism. Most copy fails because it is written for the wrong stage.",
            "cols": 1,
            "options": [
              {
                "value": "unaware",
                "label": "Stage 1 — Unaware: do not know they have the problem",
                "sub": "Lead with a story or stat that names the pain. Direct claims fall flat here."
              },
              {
                "value": "problem",
                "label": "Stage 2 — Problem-Aware: feel the pain, do not know solutions exist",
                "sub": "Lead with the pain in their words. Promise the category of relief."
              },
              {
                "value": "solution",
                "label": "Stage 3 — Solution-Aware: know solutions exist, comparing options",
                "sub": "Lead with your unique mechanism. Differentiate, do not invent."
              },
              {
                "value": "product",
                "label": "Stage 4 — Product-Aware: know your product, weighing it",
                "sub": "Lead with proof + risk reversal. They need permission to act."
              },
              {
                "value": "most",
                "label": "Stage 5 — Most Aware: know your product, just need a reason now",
                "sub": "Lead with offer + scarcity. Direct ask. Brevity wins."
              }
            ]
          },
          {
            "id": "iter_sophistication",
            "type": "choice",
            "label": "Market sophistication — how worn-out are the claims in this niche?",
            "help": "Schwartz's sophistication ladder: every claim works once, weakens with repetition, dies when the market has heard it 1,000 times. The fix is a NEW MECHANISM that resets the claim. Your market sophistication tells you how hard the new-mechanism work has to be.",
            "cols": 1,
            "options": [
              {
                "value": "s1",
                "label": "Stage 1 — first to make the claim",
                "sub": "Direct claims work. Rare in 2026; usually means the niche is small."
              },
              {
                "value": "s2",
                "label": "Stage 2 — claim works, you must make it bigger",
                "sub": "\"Lose 30 lbs\" → \"Lose 30 lbs in 30 days.\" Amplify."
              },
              {
                "value": "s3",
                "label": "Stage 3 — claims worn, need a unique mechanism",
                "sub": "Most niches in 2026 live here. Named mechanism is mandatory."
              },
              {
                "value": "s4",
                "label": "Stage 4 — mechanisms saturated, need a NEW mechanism",
                "sub": "\"Not keto, not fasting — the metabolic-window method.\" Reset the category."
              },
              {
                "value": "s5",
                "label": "Stage 5 — every mechanism heard, must lead with identity / story",
                "sub": "Tribe + identity wins. The mechanism is a side-effect of who you are."
              }
            ]
          },
          {
            "id": "iter_refund_interviews",
            "type": "choice",
            "label": "Refund interview discipline — are you running them?",
            "help": "Hormozi: \"The refund call is the single most valuable sales call you will ever take.\" 5 questions: (1) What did you hope this would do for you? (2) What part of the experience caused you to step back? (3) Was the issue hook, audience, offer, onboarding, or delivery? (4) What would have changed your mind? (5) Would you refer someone else? The pattern is in the answers.",
            "cols": 1,
            "options": [
              {
                "value": "always",
                "label": "Yes — every refund triggers a structured 5-question call",
                "sub": "GO. You are mining the highest-signal data in the business."
              },
              {
                "value": "sometimes",
                "label": "Sometimes — informal refund conversations",
                "sub": "REWORK. Formalize the 5 questions. Track the pattern across 10 refunds."
              },
              {
                "value": "never",
                "label": "Never — refunds are processed silently",
                "sub": "NO. You are throwing away your best diagnostic data. Start tomorrow."
              }
            ]
          }
        ]
      },
      {
        "id": "pivot",
        "num": "09",
        "name": "Pivot or Hold",
        "title": "Is the offer dead, the audience wrong, or the hook off?",
        "rubric": "Gate 09 · Diagnostic",
        "principle": {
          "text": "\"Three things can be wrong: the offer, the audience, or the hook. They look identical from the outside — both produce zero sales. The diagnostic is in the data. Hook problem: low click-through. Audience problem: high click-through, no conversion. Offer problem: high conversion, fast refund. Stop guessing. Read the funnel.\"",
          "source": "RISER Captain's Logic · The Three-Failure-Mode Diagnostic"
        },
        "inputs": [
          {
            "id": "pivot_metric_ctr",
            "type": "choice",
            "label": "Are people clicking through your hooks?",
            "help": "Cold ad CTR baseline: 1-2%. Organic post engagement baseline: 1-3% of followers. Below = hook problem.",
            "cols": 1,
            "options": [
              {
                "value": "yes",
                "label": "Yes — CTR / engagement is normal or above",
                "sub": "Hook is fine. Look elsewhere."
              },
              {
                "value": "no",
                "label": "No — barely anyone clicks or engages",
                "sub": "HOOK problem. Rewrite hooks before changing offer or audience."
              }
            ]
          },
          {
            "id": "pivot_metric_optin",
            "type": "choice",
            "label": "Of clicks, what % opt-in / start the buying conversation?",
            "help": "Cold landing page baseline: 20-40%. Sales page to purchase baseline: 1-3%. Application/booking baseline: 5-15%.",
            "cols": 1,
            "options": [
              {
                "value": "high",
                "label": "Above baseline (great)",
                "sub": "Audience is right and offer is interesting."
              },
              {
                "value": "mid",
                "label": "At baseline",
                "sub": "OK. Look at conversion deeper in funnel."
              },
              {
                "value": "low",
                "label": "Below baseline (people click, do not opt-in)",
                "sub": "AUDIENCE problem. Wrong people are showing up. Refine targeting."
              }
            ]
          },
          {
            "id": "pivot_metric_close",
            "type": "choice",
            "label": "Of buyers, what % stay, refer, or upsell?",
            "help": "Refund rate >10% in first 30 days = offer problem. Refund rate <5% = offer is at minimum acceptable.",
            "cols": 1,
            "options": [
              {
                "value": "good",
                "label": "Refund rate <5%, NPS positive",
                "sub": "Offer works. Scale."
              },
              {
                "value": "mid",
                "label": "Refund rate 5-10%",
                "sub": "REWORK. Offer is borderline. Improve delivery before scaling."
              },
              {
                "value": "bad",
                "label": "Refund rate >10% OR negative NPS",
                "sub": "OFFER problem. Do not scale. Fix the delivery or the promise."
              }
            ]
          }
        ]
      },
      {
        "id": "scale",
        "num": "10",
        "name": "Scale",
        "title": "<em>Scale</em> what is working",
        "rubric": "Gate 10 · Scale",
        "principle": {
          "text": "\"You scale what works. You do not scale what might work. The signal you can scale: same offer, same audience, same channel, repeatedly producing customers at known unit economics. Scaling before this signal is gambling. Scaling after is math.\"",
          "source": "RISER Captain's Logic · The Scale Signal Doctrine"
        },
        "inputs": [
          {
            "id": "scale_signal",
            "type": "choice",
            "label": "Do you have the scale signal?",
            "help": "Operating rule: 10 customers from one channel at known CAC and 6+ months of retention data = scale signal. Anything less = volume gambling.",
            "cols": 1,
            "options": [
              {
                "value": "yes",
                "label": "Yes — 10+ customers from one channel, known unit economics, 6+ months of retention data",
                "sub": "GO. Scale begins."
              },
              {
                "value": "partial",
                "label": "Some signal, partial data",
                "sub": "REWORK. Get to 10 customers + 6 months retention before scaling."
              },
              {
                "value": "no",
                "label": "No — early or unstable",
                "sub": "NO scale. Stay in iterate loop. Volume is not the answer yet."
              }
            ]
          },
          {
            "id": "scale_lever",
            "type": "choice",
            "label": "How do you scale? (Pick one)",
            "help": "The three scale levers: increase price, increase volume, increase retention. Most operators reach for volume first; that is usually wrong.",
            "cols": 1,
            "options": [
              {
                "value": "price",
                "label": "Raise price first",
                "sub": "Highest leverage. 10% price increase ≈ 50%+ profit increase. Test before raising."
              },
              {
                "value": "retention",
                "label": "Increase retention / LTV",
                "sub": "Second-highest. Reduce churn 20% ≈ 100% LTV increase."
              },
              {
                "value": "volume",
                "label": "Increase volume (more leads, more conversion)",
                "sub": "Third lever. Most expensive. Use only when price + retention are maxed."
              }
            ]
          },
          {
            "id": "scale_constraint",
            "type": "textarea",
            "label": "What is the current bottleneck?",
            "help": "Theory of Constraints: there is one bottleneck at a time. Lead gen, sales, delivery, retention. Name it. Fix it. Move to the next.",
            "placeholder": "e.g., Delivery — I cannot onboard more than 5 new clients per month without burning out."
          }
        ]
      },
      {
        "id": "repeat",
        "num": "11",
        "name": "Repeat",
        "title": "Find <em>another angle</em> — scale, profit, repeat",
        "rubric": "Gate 11 · Compound",
        "principle": {
          "text": "\"One offer, one audience, one channel — that is a business. Two offers to the same audience — that is a customer base. Three offers to the same audience — that is a moat. Most operators jump to a second business before they have built one. The compound move is to deepen the same audience with the next problem they will pay you to solve.\"",
          "source": "RISER Captain's Logic · The Compound Moat Principle"
        },
        "inputs": [
          {
            "id": "repeat_next_problem",
            "type": "textarea",
            "label": "What is the NEXT problem your existing customers will pay you to solve?",
            "help": "Operating rule: ask 20 customers \"what is the next thing you would buy from me?\" Build that. Same audience, no new acquisition cost. LTV doubles.",
            "placeholder": "e.g., Customers landed retainers but struggle to scale past $20K/mo. Next offer: \"Retainer to Agency\" coaching at $4,997."
          },
          {
            "id": "repeat_decision",
            "type": "choice",
            "label": "What is the right next move?",
            "help": "Most operators get this wrong. The temptation is \"another business.\" The right answer is almost always \"another offer to the same audience.\"",
            "cols": 1,
            "options": [
              {
                "value": "deepen",
                "label": "New offer, SAME audience, SAME channel",
                "sub": "Best. Compound the moat. 5x LTV from existing customers."
              },
              {
                "value": "expand",
                "label": "Same offer, new adjacent audience",
                "sub": "Second-best. Tested offer reduces risk."
              },
              {
                "value": "channel",
                "label": "Same offer, same audience, NEW channel",
                "sub": "Third option. Channel diversification reduces platform risk."
              },
              {
                "value": "new",
                "label": "New business entirely",
                "sub": "Almost always wrong. You are leaving compound returns on the table."
              }
            ]
          },
          {
            "id": "repeat_constraint_check",
            "type": "choice",
            "label": "Have you maxed out the current offer first?",
            "help": "RISER doctrine: \"Do not start a second business until the first is at the limit of what one operator can extract from it.\" Most operators are at 30% of that limit when they get bored and pivot.",
            "cols": 1,
            "options": [
              {
                "value": "maxed",
                "label": "Yes — same offer at $X-million ARR with healthy retention",
                "sub": "GO compound."
              },
              {
                "value": "midway",
                "label": "No — still room in the current offer",
                "sub": "REWORK. Stay focused. Maximize before adding."
              },
              {
                "value": "bored",
                "label": "I am bored / want something new",
                "sub": "NO. Boredom is not strategy. Re-engage the current business."
              }
            ]
          },
          {
            "id": "repeat_ladder_bait",
            "type": "text",
            "label": "Value Ladder Rung 1 — BAIT (free lead magnet, name + format)",
            "help": "Brunson's ladder starts here. Free, named, valuable. The first rung exists to create reciprocity and build the list. If you have no bait, you have no ladder.",
            "placeholder": "e.g., The Retainer Pricing Calculator (PDF + Notion template)"
          },
          {
            "id": "repeat_ladder_tripwire",
            "type": "text",
            "label": "Rung 2 — TRIPWIRE ($7-$97 entry offer, name + price)",
            "help": "Low-ticket entry point. Converts a lead to a buyer for the price of a coffee. Buyers behave fundamentally differently from leads — this is the rung that creates the buyer-list segment.",
            "placeholder": "e.g., The 7-Day Retainer Email Course — $27"
          },
          {
            "id": "repeat_ladder_core",
            "type": "text",
            "label": "Rung 3 — CORE OFFER ($297-$1,997, name + price)",
            "help": "Your main offer. The Grand Slam. Most operators only have this rung and wonder why they cannot scale.",
            "placeholder": "e.g., The 90-Day Retainer Sprint — $497"
          },
          {
            "id": "repeat_ladder_continuity",
            "type": "text",
            "label": "Rung 4 — CONTINUITY (recurring offer, name + monthly price)",
            "help": "Hormozi: \"The single highest LTV-per-dollar move is continuity.\" Skool community, software subscription, monthly coaching, certification renewal. If you have no continuity, you are leaving 60% of LTV on the table.",
            "placeholder": "e.g., The Retainer Captains Skool — $97/mo"
          },
          {
            "id": "repeat_ladder_high",
            "type": "text",
            "label": "Rung 5 — HIGH-TICKET / BACK-END ($5K-$50K+, name + price)",
            "help": "The premium DFY tier. 80% of operator profit lives here. Often \"Done-with-me\" or \"Done-for-you\" implementation of the core offer's outcome.",
            "placeholder": "e.g., The Agency Architect — $9,997 12-week 1:1 build"
          },
          {
            "id": "repeat_continuity_status",
            "type": "choice",
            "label": "Continuity health — what % of customers are on a recurring offer?",
            "help": "The single highest-leverage metric for compound LTV. Below 20% = you have not built the continuity offer yet. Above 60% = you have a real moat.",
            "cols": 1,
            "options": [
              {
                "value": "strong",
                "label": "60%+ on continuity",
                "sub": "GO. Real LTV. Real moat."
              },
              {
                "value": "mid",
                "label": "20-60% on continuity",
                "sub": "Workable. Improve the continuity offer or migration path."
              },
              {
                "value": "low",
                "label": "<20% on continuity",
                "sub": "REWORK. Build the continuity offer. Highest-leverage gap in your business."
              },
              {
                "value": "none",
                "label": "No continuity offer exists",
                "sub": "NO. Build it before scaling acquisition further."
              }
            ]
          },
          {
            "id": "repeat_dream100_affiliate",
            "type": "choice",
            "label": "Affiliate / partner activation — have you turned customers into affiliates?",
            "help": "Brunson: the second wave of growth comes from your customers selling for you. 10 customer-affiliates each bringing 5 clients = 50 clients with zero acquisition cost.",
            "cols": 1,
            "options": [
              {
                "value": "active",
                "label": "Yes — formal program with named affiliates already producing",
                "sub": "GO. Compound is engaged."
              },
              {
                "value": "informal",
                "label": "Informal referrals, no program",
                "sub": "REWORK. Formalize. A 30%-commission affiliate program turns your customer list into a sales force."
              },
              {
                "value": "none",
                "label": "No referral or affiliate motion",
                "sub": "NO. You are paying for every customer when half of them would pay to bring others."
              }
            ]
          }
        ]
      },
      {
        "id": "summary",
        "num": "12",
        "name": "Brief",
        "title": "Your <em>One-Page Brief</em>",
        "rubric": "Decision Document",
        "isSummary": true
      }
    ]
  }
}

Supporting document for lesson 03.4: M13.5 - THUMBNAIL & TITLE ENGINEERING

Thumbnail and title engineering: earn attention and fulfill the promise

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lesson 03.4. Video recording to be added. Use the written lesson and supporting references below.

Understand the source and its limits

This source is an excerpt from the Riser Nation Academy 2026 syllabus. It labels its parent course historical C13, Faceless YouTube & The AI Higgs Field Video Engine, in Stage 3 Speedboat and the Build → Do phase. It repeats a prerequisite of a completed C12 skeleton and a planning estimate of 16–24 hours over four weeks. Those are historical source labels and an estimate, not a new thirteenth course or a guaranteed completion time. Our spreadsheet assignment remains 03.4, and tab 13 remains Unused.

The parent-course idea is to build a repeatable production process for long-form videos, Shorts and Reels, whether presented face-on or faceless. You do not need to equate authority with appearing on camera, but a faceless format still needs accurate, useful material and evidence for its claims. The source's promise of ten times historical production speed has no supplied benchmark, methodology or supporting data. Treat it as an unsupported source claim, not a result students should expect.

Supporting source: syllabus context and production-engine premise

Treat thumbnail, title and video as one promise

The thumbnail and title introduce the value a viewer expects. The video must deliver that value. The source assigns 60% of the click to the thumbnail, 30% to the title and 10% to content, but provides no study or measurement method for that allocation. Do not turn these figures into a universal formula, production budget split or scoring model.

An authored example: if the title promises a demonstration of organizing a content calendar, show the actual calendar or the specific organizational problem in the thumbnail, then demonstrate the process in the video. A dramatic image unrelated to that demonstration creates an expectation the video cannot fulfill. YouTube advises accurate packaging and discourages misleading or sensational representations. Official YouTube performance guidance.

Supporting assigned source: thumbnail/title/click premise

Use a pattern interrupt that stays relevant

The source names the Pattern Interrupt principle without supplying a procedure. As an authored application, inspect the visual context in which a viewer encounters the video, then test a clear difference that makes the relevant subject easier to notice: a simplified composition, a contrasting focal point or a specific visual question. Difference alone is not success. A confusing image can interrupt attention while obscuring the offer.

Write down what the visual is meant to communicate before making variations. Check whether a person can understand the subject at the size it will be displayed. Keep a strong connection between the visual question, title and answer in the video.

Supporting assigned source: Pattern Interrupt topic

Test AI-assisted variations with a clear question

The source proposes AI-assisted variation testing but gives no tool, prompt, evaluation threshold or experiment design. An authored workflow is to supply the actual video topic and evidence, generate a small set of alternatives, review them for accuracy and readability, and test an explicit packaging hypothesis. Preserve the original and record what changed. Do not use generated scenes or claims as evidence of events that did not happen.

YouTube's current native A/B testing guidance allows comparison of up to three title/thumbnail options and evaluates results using watch time. Availability and requirements should be checked in the account before use. Official title and thumbnail A/B testing guidance.

Record the test question, variants, reporting window and observed result. An inconclusive result is useful information about uncertainty. Do not force a winner or infer that one isolated packaging test establishes a universal audience preference.

Supporting assigned source: AI-assisted variation testing

Preserve the two missing framework dependencies

The excerpt names five thumbnail archetypes but does not name or define any of the five. It also references C8 title archetypes without supplying their contents. These are explicit source gaps. The examples above are authored exercises, not substitutes presented as the missing archetypes. Retain links to the original excerpt and add the actual framework documents when identified and reviewed.

In the requested direct-response teaching approach, connect the hook to a credible explanation and offer. This is an authored application of the requested Brunson/Hormozi themes; no exact quotation or endorsement is established by this excerpt. The primary references below support the conceptual connection, without endorsing this excerpt's numerical claims.

Primary framework references: ClickFunnels — Hook, Story, Offer · Acquisition.com — Pricing and Value Checklist.

Supporting assigned source: missing thumbnail and C8 title archetypes

Lesson exercise and complete appendix

Submit a truthful title/thumbnail pair, explain the expectation it creates, identify the video segment that fulfills that expectation, and document one proposed variation and its measurement plan. Keep the source's complete original text, repeated metadata and unsupported percentages intact in the appendix, alongside these qualifications. Completion of this exercise does not resolve the missing archetype documents.

Complete original M13.5 excerpt

Complete original document appendices

Complete readable source
M13.5 — THUMBNAIL & TITLE ENGINEERING
============================================================


Source: Riser Nation Academy 2026 Syllabus


NOTE: This document is an excerpt copied from the master syllabus.
The master syllabus remains intact and unmodified.


---


PARENT COURSE: C13 — Faceless YouTube & The AI Higgs Field Video Engine
---
Stage: Stage 3 — Speedboat  ·  Phase: Build → Do  ·  Prereq: C12 skeleton complete  ·  Time: 16–24 hours over 4 weeks


Stage: Stage 3 — Speedboat  ·  Phase: Build → Do  ·  Prereq: C12 skeleton complete  ·  Time: 16–24 hours over 4 weeks
In Plain Words
Build the production engine. The 2026 stack lets you produce long-form video, Shorts, and Reels at 10x the historical pace, faceless or face-on. The engine is the asset; the videos are the output.
The Mismatch This Course Fixes
'I need to be on camera to compete' (2018 belief) vs. 'I can produce authority content faceless or face-on with modern AI' (2026 reality).
Modules


---


M13.5 — THUMBNAIL & TITLE ENGINEERING
---


Thumbnail = 60% of click. Title = 30%. Content = 10% — for the click.
In plain words: The picture and title decide whether they click. The video decides whether they stay. Engineer both.
The 5 thumbnail archetypes.
The Pattern Interrupt principle.
AI-assisted variation testing.
Title parallels with C8 archetypes.


---
END OF M13.5
---
Native document text
M13.5 — THUMBNAIL & TITLE ENGINEERING
============================================================

Source: Riser Nation Academy 2026 Syllabus

NOTE: This document is an excerpt copied from the master syllabus.
The master syllabus remains intact and unmodified.

---

PARENT COURSE: C13 — Faceless YouTube & The AI Higgs Field Video Engine
---
Stage: Stage 3 — Speedboat  ·  Phase: Build → Do  ·  Prereq: C12 skeleton complete  ·  Time: 16–24 hours over 4 weeks

Stage: Stage 3 — Speedboat  ·  Phase: Build → Do  ·  Prereq: C12 skeleton complete  ·  Time: 16–24 hours over 4 weeks
In Plain Words
Build the production engine. The 2026 stack lets you produce long-form video, Shorts, and Reels at 10x the historical pace, faceless or face-on. The engine is the asset; the videos are the output.
The Mismatch This Course Fixes
'I need to be on camera to compete' (2018 belief) vs. 'I can produce authority content faceless or face-on with modern AI' (2026 reality).
Modules

---

M13.5 — THUMBNAIL & TITLE ENGINEERING
---

Thumbnail = 60% of click. Title = 30%. Content = 10% — for the click.
In plain words: The picture and title decide whether they click. The video decides whether they stay. Engineer both.
The 5 thumbnail archetypes.
The Pattern Interrupt principle.
AI-assisted variation testing.
Title parallels with C8 archetypes.

---
END OF M13.5
---

Supporting document for lesson 03.4: MVO_Prelaunch_Validation_Kit_ColorTemplate.xlsx

Keyword viability: build an explicit assumption sheet

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lesson 03.4. Video recording to be added. The original workbook contains one sheet, 01_Keywords, with nineteen headers and no populated examples or calculation formulas. Its title says ColorTemplate; formatting is not a completed validation model.

Download or review the original MVO Prelaunch Validation Kit ColorTemplate workbook

Describe the search before projecting its economics

In Keyword, enter the actual query being considered. Use Intent to describe what the searcher appears to want, and Stage to identify where this query fits in your buying journey. The workbook supplies neither an intent taxonomy nor stage definitions. Define your own working categories consistently and label them as your method.

For Monthly Volume (SV), record the estimate and its source, geography, date and match scope in Notes. Search volume is not a guarantee of impressions or visits. CPC ($) is a cost-per-click assumption, while Keyword Difficulty (0–100) is a difficulty input whose provider and meaning must be recorded. The source does not identify the provider or prove that difficulty scores from different tools are comparable.

Supporting source: columns A–F and S of 01_Keywords

Define response and order assumptions

CTR_est (%) is the estimated click-through rate for a defined impression base. CVR_est (%) is the estimated conversion rate for a defined opportunity base, such as clicks. AOV ($) represents average order value. Gross Margin (%) describes the share of revenue remaining after the costs included in your gross-margin definition. Record what that definition includes; otherwise costs may be omitted or deducted twice later.

Unlike the separate effective-margin workbook, this header-only source provides no calculations establishing how percentages must be entered. Declare the convention in your working copy before adding formulas. An entry of 2 and an entry of 0.02 represent the same 2% only under different conventions; mixing them creates hundredfold errors.

Supporting source: columns G–J of 01_Keywords

Explain each projected output before using it

The output headers are Est. Clicks, Est. Cost ($), Est. Conversions, Est. Revenue ($), Gross Profit ($), Est. Profit ($) and ROAS. The workbook leaves all formulas blank. The following relationships are authored teaching examples, not recovered workbook formulas.

With an independently justified impression assumption, estimated clicks equal impressions multiplied by click-through rate. Estimated cost equals clicks multiplied by CPC. Estimated conversions equal clicks multiplied by a click-based conversion rate. Revenue equals conversions multiplied by AOV. Gross profit equals revenue multiplied by the declared gross-margin fraction. Subtracting advertising cost from that figure gives contribution after advertising under those assumptions; it is not necessarily net business profit because overhead and other costs may remain. ROAS is revenue divided by advertising spend, not profit divided by spend.

Do not automatically substitute the sheet's monthly search volume for obtainable impressions. If an estimate uses that shortcut, disclose it and its limitations. With zero spend, a ROAS division is undefined; do not present an arbitrary zero or infinity as a meaningful performance result.

An authored arithmetic example uses 1,000 assumed impressions, 2% CTR, $1 CPC, 5% click-based conversion and $50 AOV at 80% gross margin. That yields 20 clicks, $20 cost, one expected conversion, $50 revenue, $40 gross profit and $20 remaining after ad cost, with ROAS 2.5. This is a hypothetical illustration, not a forecast or investment recommendation. Real refund, fee and delivery costs may change the result.

Supporting source: columns K–Q; formulas are absent in the original

Understand the Viability Score formatting

Column R is Viability Score. Conditional formatting covers R2:R100 with ranges at or above 3, from 2 through 2.99, and below 2. No scoring formula or validation evidence is supplied. Values strictly between 2.99 and 3 fall outside those conditions. Rows beyond 100 are outside the supplied formatting range.

A colored cell is therefore not evidence that a keyword or offer is viable. Do not invent a formula and label it as the original. If you create a scoring method later, identify its inputs, scale, assumptions and limitations separately and test its boundary behavior. Keep the original unchanged as the source artifact.

Supporting source: Viability Score column and original conditional formatting

Use Notes to preserve the evidence trail

Notes should make the estimates interpretable: source links, dates, definitions, percentage conventions, scenario assumptions and unresolved questions. This is an authored working practice for the supplied Notes column. Link supporting evidence next to the assumption it supports instead of relying on an unrelated resource list.

For lesson 03.4, use the sheet to expose what an offer test assumes before interpreting its outcome. In the requested Brunson/Hormozi teaching approach, message and offer clarity must be paired with actual response and delivery evidence; this workbook provides neither author's scoring model. Its original headers and formatting remain preserved in the complete source appendix.

Complete original workbook supporting all nineteen fields

Complete original workbook data

01_Keywords

Original range: A1:S1; state: visible

CellOriginal value or formulaCached valueNumber formatHyperlinkComment
A1KeywordKeywordGeneralNoneNone
B1IntentIntentGeneralNoneNone
C1StageStageGeneralNoneNone
D1Monthly Volume (SV)Monthly Volume (SV)GeneralNoneNone
E1CPC ($)CPC ($)GeneralNoneNone
F1Keyword Difficulty (0-100)Keyword Difficulty (0-100)GeneralNoneNone
G1CTR_est (%)CTR_est (%)GeneralNoneNone
H1CVR_est (%)CVR_est (%)GeneralNoneNone
I1AOV ($)AOV ($)GeneralNoneNone
J1Gross Margin (%)Gross Margin (%)GeneralNoneNone
K1Est. ClicksEst. ClicksGeneralNoneNone
L1Est. Cost ($)Est. Cost ($)GeneralNoneNone
M1Est. ConversionsEst. ConversionsGeneralNoneNone
N1Est. Revenue ($)Est. Revenue ($)GeneralNoneNone
O1Gross Profit ($)Gross Profit ($)GeneralNoneNone
P1Est. Profit ($)Est. Profit ($)GeneralNoneNone
Q1ROASROASGeneralNoneNone
R1Viability ScoreViability ScoreGeneralNoneNone
S1NotesNotesGeneralNoneNone
Complete extraction, including workbook structures
{
  "id": "D0976",
  "sheets": [
    {
      "name": "01_Keywords",
      "state": "visible",
      "dimensions": "A1:S1",
      "merged": [],
      "cells": [
        {
          "cell": "A1",
          "value": "Keyword",
          "type": "s",
          "cached": "Keyword",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B1",
          "value": "Intent",
          "type": "s",
          "cached": "Intent",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C1",
          "value": "Stage",
          "type": "s",
          "cached": "Stage",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D1",
          "value": "Monthly Volume (SV)",
          "type": "s",
          "cached": "Monthly Volume (SV)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E1",
          "value": "CPC ($)",
          "type": "s",
          "cached": "CPC ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F1",
          "value": "Keyword Difficulty (0-100)",
          "type": "s",
          "cached": "Keyword Difficulty (0-100)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G1",
          "value": "CTR_est (%)",
          "type": "s",
          "cached": "CTR_est (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H1",
          "value": "CVR_est (%)",
          "type": "s",
          "cached": "CVR_est (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I1",
          "value": "AOV ($)",
          "type": "s",
          "cached": "AOV ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J1",
          "value": "Gross Margin (%)",
          "type": "s",
          "cached": "Gross Margin (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K1",
          "value": "Est. Clicks",
          "type": "s",
          "cached": "Est. Clicks",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L1",
          "value": "Est. Cost ($)",
          "type": "s",
          "cached": "Est. Cost ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M1",
          "value": "Est. Conversions",
          "type": "s",
          "cached": "Est. Conversions",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N1",
          "value": "Est. Revenue ($)",
          "type": "s",
          "cached": "Est. Revenue ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O1",
          "value": "Gross Profit ($)",
          "type": "s",
          "cached": "Gross Profit ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P1",
          "value": "Est. Profit ($)",
          "type": "s",
          "cached": "Est. Profit ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q1",
          "value": "ROAS",
          "type": "s",
          "cached": "ROAS",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R1",
          "value": "Viability Score",
          "type": "s",
          "cached": "Viability Score",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "S1",
          "value": "Notes",
          "type": "s",
          "cached": "Notes",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        }
      ],
      "validations": "<openpyxl.worksheet.datavalidation.DataValidationList object>\nParameters:\ndisablePrompts=None, xWindow=None, yWindow=None, count=0, dataValidation=[]",
      "conditional_formatting": [
        {
          "range": "R2:R100",
          "rules": [
            "<openpyxl.formatting.rule.Rule object>\nParameters:\ntype='cellIs', rank=None, priority=1, equalAverage=None, operator='greaterThanOrEqual', aboveAverage=None, dxfId=0, stdDev=None, stopIfTrue=None, timePeriod=None, text=None, percent=None, bottom=None, colorScale=None, dataBar=None, iconSet=None, formula=['3.0']",
            "<openpyxl.formatting.rule.Rule object>\nParameters:\ntype='cellIs', rank=None, priority=2, equalAverage=None, operator='between', aboveAverage=None, dxfId=1, stdDev=None, stopIfTrue=None, timePeriod=None, text=None, percent=None, bottom=None, colorScale=None, dataBar=None, iconSet=None, formula=['2.0', '2.99']",
            "<openpyxl.formatting.rule.Rule object>\nParameters:\ntype='cellIs', rank=None, priority=3, equalAverage=None, operator='lessThan', aboveAverage=None, dxfId=2, stdDev=None, stopIfTrue=None, timePeriod=None, text=None, percent=None, bottom=None, colorScale=None, dataBar=None, iconSet=None, formula=['2.0']"
          ]
        }
      ]
    }
  ],
  "defined_names": "{}",
  "package_features": []
}

Supporting document for lesson 03.4: MVO_Prelaunch_Validation_Kit_withEffectiveMargin.xlsx

Funnel economics: follow the money through each assumption

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lesson 03.4. Video recording to be added. This workbook contains one populated sheet, 02_Funnel_Econ, with twenty-one columns and three illustrative scenarios. It is a model, not evidence of actual campaign performance.

Original MVO Prelaunch Validation Kit with Effective Margin

1. Convert traffic assumptions into orders

Identify Traffic Source, Impressions, CTR (%), Clicks, CPC ($), Ad Spend ($), CVR (%) and Orders. In this workbook, enter percentage inputs as whole percentage numbers: 2 means 2%, because the formulas divide by 100.

Clicks equal impressions times CTR divided by 100. Ad spend equals clicks times CPC. Orders equal clicks times CVR divided by 100. CVR therefore uses clicks as its denominator here. Fractional expected orders can appear in a planning model; 13.5 expected orders does not mean half a real transaction occurred. The source names Google Search, YouTube Ads and Instagram, but its rows do not verify those platforms' actual costs or results.

Supporting source: columns A–H and formulas D, F and H

2. Adjust the revenue margin for explicitly modeled costs

AOV ($) is average order value and Revenue ($) equals orders times AOV. The next inputs are Gross Margin (%), Refund Rate (%), Payment Fees (%) and Var Cost per Order ($). The formula for Effective Margin (%) is gross margin minus refund rate minus payment-fee rate minus variable cost per order divided by AOV, multiplied by 100.

This is the workbook's simplifying model: it deducts refund and fee percentages directly from the revenue-margin percentage. Do not treat it as a complete accounting treatment for every refund or payment contract. Define which costs gross margin already includes so that variable delivery costs are not deducted twice. Record any cost exclusions.

The source's linked margin note illustrates $100 AOV, 80% gross margin, 5% refunds, 3% fees and $5 variable cost, giving 67% effective margin. It also provides broad industry margin generalizations without underlying evidence. Preserve those as source claims, not current verified benchmarks. Its “net margin” terminology is too broad for a model that has not included every business expense. Original linked gross-margin adjustment explanation.

Supporting workbook: columns I–O; original companion links are in K1 and O1

3. Distinguish revenue return from remaining contribution

Column P is labeled Gross Profit ($), but its formula multiplies revenue by the adjusted effective margin. It is therefore an adjusted contribution figure under this model. Adj. Profit ($) subtracts ad spend from that figure. It does not necessarily include overhead, fixed costs or every relevant expense, so it should not be presented as final net profit.

ROAS equals revenue divided by ad spend. A revenue return of one means modeled revenue equals advertising spend; it does not mean the business breaks even after fulfilling orders. Compare the contribution result as well as revenue return.

Supporting source: columns P–R and their formulas

4. Read the three break-even measures correctly

Break-even CPA ($) equals AOV times the effective-margin fraction: the modeled contribution available per order before advertising. Break-even CPC ($) multiplies that amount by click-based CVR. Break-even ROAS is one divided by the effective-margin fraction. These thresholds assume the model's rates and cost definitions hold; they are not universal bidding recommendations.

The formulas need valid inputs. AOV of zero causes the variable-cost calculation to divide by zero. Several formulas use IFERROR to return zero, which can conceal an invalid calculation. A zero or negative effective margin does not provide a sensible positive advertising allowance. Inspect the inputs and error state instead of interpreting every displayed zero as a real business result.

Supporting source: columns S–U and error-handling behavior

5. Walk through every original scenario

The table preserves every input from the three source rows. Percentage numbers use the workbook's whole-number convention.

SourceImpressionsCTR %CPC $CVR %AOV $Gross margin %Refund %Fees %Variable cost/order $
Google Search50,00021.502.56080535
YouTube Ads100,0001.20.801.54585634
Instagram75,0001.50.901.23885733

For Google Search, 50,000 impressions at 2% CTR produce 1,000 clicks and $1,500 ad spend. At 2.5% CVR, 25 orders yield $1,500 revenue. Effective margin is approximately 63.6667%, producing $955 adjusted contribution before ads and a $545 loss after ads. ROAS is 1, while modeled break-even CPC is $0.955, CPA $38.20 and ROAS approximately 1.570681.

For YouTube Ads, 100,000 impressions at 1.2% CTR produce 1,200 clicks and $960 spend. Eighteen orders yield $810 revenue. Effective margin is approximately 67.1111%; contribution is $543.60 and the post-ad result is negative $416.40. ROAS is 0.84375. Break-even CPC is $0.453, CPA $30.20 and ROAS approximately 1.490066.

For Instagram, 75,000 impressions at 1.5% CTR produce 1,125 clicks and $1,012.50 spend. Expected orders are 13.5, producing $513 revenue. Effective margin is approximately 67.1053%; contribution is $344.25 and the post-ad result is negative $668.25. ROAS is approximately 0.506667. Break-even CPC is $0.306, CPA $25.50 and ROAS approximately 1.490196.

All three supplied scenarios lose money after their modeled advertising costs. That is a statement about these inputs, not evidence that any named channel is inherently unprofitable. The 33 formula results were independently checked against the workbook's cached values; this does not constitute testing every possible input or live campaign.

Supporting source: complete rows 2–4, original inputs and formulas

Apply the model to an offer test

For lesson 03.4, keep the original intact, create a working scenario with dated evidence for each assumption, and explain which changes would improve the result and why. Change one assumption at a time when learning its effect. A stronger promise that damages delivery or refunds may worsen economics even if clicks improve. This is an authored connection to the requested offer-design and funnel themes, not a formula attributed to Brunson or Hormozi.

Your submission should identify the metric definitions, model limitations, input evidence and contribution result. Retain the original workbook, all formulas, all three scenarios and the full linked margin note in the lesson appendix. This exercise does not authorize campaign spend or guarantee profitability.

Complete original workbook · Complete linked margin explanation

Complete original workbook data

02_Funnel_Econ

Original range: A1:U4; state: visible

CellOriginal value or formulaCached valueNumber formatHyperlinkComment
A1Traffic SourceTraffic SourceGeneralNoneNone
B1ImpressionsImpressionsGeneralNoneNone
C1CTR (%)CTR (%)GeneralNoneNone
D1ClicksClicksGeneralNoneNone
E1CPC ($)CPC ($)GeneralNoneNone
F1Ad Spend ($)Ad Spend ($)GeneralNoneNone
G1CVR (%)CVR (%)GeneralNoneNone
H1OrdersOrdersGeneralNoneNone
I1AOV ($)AOV ($)GeneralNoneNone
J1Revenue ($)Revenue ($)GeneralNoneNone
K1Gross Margin (%)Gross Margin (%)Generalhttps://docs.google.com/document/d/1qiR-eEmpMct9oXwWBKc49DSzkhjw92p9SNIh341Bamg/edit?usp=sharingNone
L1Refund Rate (%)Refund Rate (%)GeneralNoneNone
M1Payment Fees (%)Payment Fees (%)GeneralNoneNone
N1Var Cost per Order ($)Var Cost per Order ($)GeneralNoneNone
O1Effective Margin (%)Effective Margin (%)Generalhttps://docs.google.com/document/d/1qiR-eEmpMct9oXwWBKc49DSzkhjw92p9SNIh341Bamg/edit?usp=sharingNone
P1Gross Profit ($)Gross Profit ($)GeneralNoneNone
Q1Adj. Profit ($)Adj. Profit ($)GeneralNoneNone
R1ROASROASGeneralNoneNone
S1Break-even CPC ($)Break-even CPC ($)GeneralNoneNone
T1Break-even CPA ($)Break-even CPA ($)GeneralNoneNone
U1Break-even ROASBreak-even ROASGeneralNoneNone
A2Google SearchGoogle SearchGeneralNoneNone
B250000.050000.0GeneralNoneNone
C22.02.0GeneralNoneNone
D2=IFERROR(B2*C2/100,0)1000GeneralNoneNone
E21.51.5GeneralNoneNone
F2=IFERROR(D2*E2,0)1500GeneralNoneNone
G22.52.5GeneralNoneNone
H2=IFERROR(D2*G2/100,0)25GeneralNoneNone
I260.060.0GeneralNoneNone
J2=IFERROR(H2*I2,0)1500GeneralNoneNone
K280.080.0GeneralNoneNone
L25.05.0GeneralNoneNone
M23.03.0GeneralNoneNone
N25.05.0GeneralNoneNone
O2=K2-L2-M2-(N2/I2*100)63.66666667GeneralNoneNone
P2=J2*O2/100955GeneralNoneNone
Q2=P2-F2-545GeneralNoneNone
R2=IFERROR(J2/F2,0)1GeneralNoneNone
S2=G2/100*(I2*(O2/100))0.955GeneralNoneNone
T2=I2*(O2/100)38.2GeneralNoneNone
U2=IFERROR(1/(O2/100),0)1.570680628GeneralNoneNone
A3YouTube AdsYouTube AdsGeneralNoneNone
B3100000.0100000.0GeneralNoneNone
C31.21.2GeneralNoneNone
D3=IFERROR(B3*C3/100,0)1200GeneralNoneNone
E30.80.8GeneralNoneNone
F3=IFERROR(D3*E3,0)960GeneralNoneNone
G31.51.5GeneralNoneNone
H3=IFERROR(D3*G3/100,0)18GeneralNoneNone
I345.045.0GeneralNoneNone
J3=IFERROR(H3*I3,0)810GeneralNoneNone
K385.085.0GeneralNoneNone
L36.06.0GeneralNoneNone
M33.03.0GeneralNoneNone
N34.04.0GeneralNoneNone
O3=K3-L3-M3-(N3/I3*100)67.11111111GeneralNoneNone
P3=J3*O3/100543.6GeneralNoneNone
Q3=P3-F3-416.4GeneralNoneNone
R3=IFERROR(J3/F3,0)0.84375GeneralNoneNone
S3=G3/100*(I3*(O3/100))0.453GeneralNoneNone
T3=I3*(O3/100)30.2GeneralNoneNone
U3=IFERROR(1/(O3/100),0)1.490066225GeneralNoneNone
A4InstagramInstagramGeneralNoneNone
B475000.075000.0GeneralNoneNone
C41.51.5GeneralNoneNone
D4=IFERROR(B4*C4/100,0)1125GeneralNoneNone
E40.90.9GeneralNoneNone
F4=IFERROR(D4*E4,0)1012.5GeneralNoneNone
G41.21.2GeneralNoneNone
H4=IFERROR(D4*G4/100,0)13.5GeneralNoneNone
I438.038.0GeneralNoneNone
J4=IFERROR(H4*I4,0)513GeneralNoneNone
K485.085.0GeneralNoneNone
L47.07.0GeneralNoneNone
M43.03.0GeneralNoneNone
N43.03.0GeneralNoneNone
O4=K4-L4-M4-(N4/I4*100)67.10526316GeneralNoneNone
P4=J4*O4/100344.25GeneralNoneNone
Q4=P4-F4-668.25GeneralNoneNone
R4=IFERROR(J4/F4,0)0.5066666667GeneralNoneNone
S4=G4/100*(I4*(O4/100))0.306GeneralNoneNone
T4=I4*(O4/100)25.5GeneralNoneNone
U4=IFERROR(1/(O4/100),0)1.490196078GeneralNoneNone
Complete extraction, including workbook structures
{
  "id": "D0977",
  "sheets": [
    {
      "name": "02_Funnel_Econ",
      "state": "visible",
      "dimensions": "A1:U4",
      "merged": [],
      "cells": [
        {
          "cell": "A1",
          "value": "Traffic Source",
          "type": "s",
          "cached": "Traffic Source",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B1",
          "value": "Impressions",
          "type": "s",
          "cached": "Impressions",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C1",
          "value": "CTR (%)",
          "type": "s",
          "cached": "CTR (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D1",
          "value": "Clicks",
          "type": "s",
          "cached": "Clicks",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E1",
          "value": "CPC ($)",
          "type": "s",
          "cached": "CPC ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F1",
          "value": "Ad Spend ($)",
          "type": "s",
          "cached": "Ad Spend ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G1",
          "value": "CVR (%)",
          "type": "s",
          "cached": "CVR (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H1",
          "value": "Orders",
          "type": "s",
          "cached": "Orders",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I1",
          "value": "AOV ($)",
          "type": "s",
          "cached": "AOV ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J1",
          "value": "Revenue ($)",
          "type": "s",
          "cached": "Revenue ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K1",
          "value": "Gross Margin (%)",
          "type": "s",
          "cached": "Gross Margin (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": "https://docs.google.com/document/d/1qiR-eEmpMct9oXwWBKc49DSzkhjw92p9SNIh341Bamg/edit?usp=sharing"
        },
        {
          "cell": "L1",
          "value": "Refund Rate (%)",
          "type": "s",
          "cached": "Refund Rate (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M1",
          "value": "Payment Fees (%)",
          "type": "s",
          "cached": "Payment Fees (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N1",
          "value": "Var Cost per Order ($)",
          "type": "s",
          "cached": "Var Cost per Order ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O1",
          "value": "Effective Margin (%)",
          "type": "s",
          "cached": "Effective Margin (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": "https://docs.google.com/document/d/1qiR-eEmpMct9oXwWBKc49DSzkhjw92p9SNIh341Bamg/edit?usp=sharing"
        },
        {
          "cell": "P1",
          "value": "Gross Profit ($)",
          "type": "s",
          "cached": "Gross Profit ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q1",
          "value": "Adj. Profit ($)",
          "type": "s",
          "cached": "Adj. Profit ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R1",
          "value": "ROAS",
          "type": "s",
          "cached": "ROAS",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "S1",
          "value": "Break-even CPC ($)",
          "type": "s",
          "cached": "Break-even CPC ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "T1",
          "value": "Break-even CPA ($)",
          "type": "s",
          "cached": "Break-even CPA ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "U1",
          "value": "Break-even ROAS",
          "type": "s",
          "cached": "Break-even ROAS",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "A2",
          "value": "Google Search",
          "type": "s",
          "cached": "Google Search",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B2",
          "value": 50000.0,
          "type": "n",
          "cached": 50000.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C2",
          "value": 2.0,
          "type": "n",
          "cached": 2.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D2",
          "value": "=IFERROR(B2*C2/100,0)",
          "type": "f",
          "cached": 1000,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E2",
          "value": 1.5,
          "type": "n",
          "cached": 1.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F2",
          "value": "=IFERROR(D2*E2,0)",
          "type": "f",
          "cached": 1500,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G2",
          "value": 2.5,
          "type": "n",
          "cached": 2.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H2",
          "value": "=IFERROR(D2*G2/100,0)",
          "type": "f",
          "cached": 25,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I2",
          "value": 60.0,
          "type": "n",
          "cached": 60.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J2",
          "value": "=IFERROR(H2*I2,0)",
          "type": "f",
          "cached": 1500,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K2",
          "value": 80.0,
          "type": "n",
          "cached": 80.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L2",
          "value": 5.0,
          "type": "n",
          "cached": 5.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M2",
          "value": 3.0,
          "type": "n",
          "cached": 3.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N2",
          "value": 5.0,
          "type": "n",
          "cached": 5.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O2",
          "value": "=K2-L2-M2-(N2/I2*100)",
          "type": "f",
          "cached": 63.66666667,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P2",
          "value": "=J2*O2/100",
          "type": "f",
          "cached": 955,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q2",
          "value": "=P2-F2",
          "type": "f",
          "cached": -545,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R2",
          "value": "=IFERROR(J2/F2,0)",
          "type": "f",
          "cached": 1,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "S2",
          "value": "=G2/100*(I2*(O2/100))",
          "type": "f",
          "cached": 0.955,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "T2",
          "value": "=I2*(O2/100)",
          "type": "f",
          "cached": 38.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "U2",
          "value": "=IFERROR(1/(O2/100),0)",
          "type": "f",
          "cached": 1.570680628,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "A3",
          "value": "YouTube Ads",
          "type": "s",
          "cached": "YouTube Ads",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B3",
          "value": 100000.0,
          "type": "n",
          "cached": 100000.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C3",
          "value": 1.2,
          "type": "n",
          "cached": 1.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D3",
          "value": "=IFERROR(B3*C3/100,0)",
          "type": "f",
          "cached": 1200,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E3",
          "value": 0.8,
          "type": "n",
          "cached": 0.8,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F3",
          "value": "=IFERROR(D3*E3,0)",
          "type": "f",
          "cached": 960,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G3",
          "value": 1.5,
          "type": "n",
          "cached": 1.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H3",
          "value": "=IFERROR(D3*G3/100,0)",
          "type": "f",
          "cached": 18,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I3",
          "value": 45.0,
          "type": "n",
          "cached": 45.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J3",
          "value": "=IFERROR(H3*I3,0)",
          "type": "f",
          "cached": 810,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K3",
          "value": 85.0,
          "type": "n",
          "cached": 85.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L3",
          "value": 6.0,
          "type": "n",
          "cached": 6.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M3",
          "value": 3.0,
          "type": "n",
          "cached": 3.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N3",
          "value": 4.0,
          "type": "n",
          "cached": 4.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O3",
          "value": "=K3-L3-M3-(N3/I3*100)",
          "type": "f",
          "cached": 67.11111111,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P3",
          "value": "=J3*O3/100",
          "type": "f",
          "cached": 543.6,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q3",
          "value": "=P3-F3",
          "type": "f",
          "cached": -416.4,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R3",
          "value": "=IFERROR(J3/F3,0)",
          "type": "f",
          "cached": 0.84375,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "S3",
          "value": "=G3/100*(I3*(O3/100))",
          "type": "f",
          "cached": 0.453,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "T3",
          "value": "=I3*(O3/100)",
          "type": "f",
          "cached": 30.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "U3",
          "value": "=IFERROR(1/(O3/100),0)",
          "type": "f",
          "cached": 1.490066225,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "A4",
          "value": "Instagram",
          "type": "s",
          "cached": "Instagram",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B4",
          "value": 75000.0,
          "type": "n",
          "cached": 75000.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C4",
          "value": 1.5,
          "type": "n",
          "cached": 1.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D4",
          "value": "=IFERROR(B4*C4/100,0)",
          "type": "f",
          "cached": 1125,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E4",
          "value": 0.9,
          "type": "n",
          "cached": 0.9,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F4",
          "value": "=IFERROR(D4*E4,0)",
          "type": "f",
          "cached": 1012.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G4",
          "value": 1.2,
          "type": "n",
          "cached": 1.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H4",
          "value": "=IFERROR(D4*G4/100,0)",
          "type": "f",
          "cached": 13.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I4",
          "value": 38.0,
          "type": "n",
          "cached": 38.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J4",
          "value": "=IFERROR(H4*I4,0)",
          "type": "f",
          "cached": 513,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K4",
          "value": 85.0,
          "type": "n",
          "cached": 85.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L4",
          "value": 7.0,
          "type": "n",
          "cached": 7.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M4",
          "value": 3.0,
          "type": "n",
          "cached": 3.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N4",
          "value": 3.0,
          "type": "n",
          "cached": 3.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O4",
          "value": "=K4-L4-M4-(N4/I4*100)",
          "type": "f",
          "cached": 67.10526316,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P4",
          "value": "=J4*O4/100",
          "type": "f",
          "cached": 344.25,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q4",
          "value": "=P4-F4",
          "type": "f",
          "cached": -668.25,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R4",
          "value": "=IFERROR(J4/F4,0)",
          "type": "f",
          "cached": 0.5066666667,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "S4",
          "value": "=G4/100*(I4*(O4/100))",
          "type": "f",
          "cached": 0.306,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "T4",
          "value": "=I4*(O4/100)",
          "type": "f",
          "cached": 25.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "U4",
          "value": "=IFERROR(1/(O4/100),0)",
          "type": "f",
          "cached": 1.490196078,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        }
      ],
      "validations": "<openpyxl.worksheet.datavalidation.DataValidationList object>\nParameters:\ndisablePrompts=None, xWindow=None, yWindow=None, count=0, dataValidation=[]",
      "conditional_formatting": []
    }
  ],
  "defined_names": "{}",
  "package_features": [
    "xl/drawings/drawing1.xml"
  ]
}
Complete linked margin explanation — lossless original text as JSON
{
  "source_text": "GM% (Gross Margin %) gets adjusted downward by things like refunds, payment fees, and variable costs.\nHere\u2019s the breakdown:\n\n\ud83d\udcca GM% in the Funnel Calculator\nGM% = Gross Margin % \u2192 how much of each $1 in revenue is left after direct costs.\u000b\nFor digital products: often 80\u201390%.\u000b\nFor physical products: much lower (20\u201350%).\u000b\n\n\ud83d\udd0e Why You Saw \u201c\u2212GM%\u201d in Formulas\nIn formulas like Break-even CPC or Break-even ROAS, we don\u2019t just take GM% at face value \u2014 we subtract other \u201closs factors\u201d:\nRefund Rate (%) \u2192 lost revenue from chargebacks/returns.\u000b\nPayment Fees (%) \u2192 Stripe, PayPal, credit card fees.\u000b\nVariable Cost per Order ($) \u2192 shipping, bonuses, fulfillment, support, etc.\u000b\nSo the math looks like:\nEffective Margin = GM% \u2212 Refund% \u2212 Fees% \u2212 (VarCost \u00f7 AOV)\n\n\n\u2705 Example\nAOV = $100\u000b\nGM% = 80%\u000b\nRefunds = 5%\u000b\nPayment fees = 3%\u000b\nVar cost/order = $5\u000b\nEffective Margin = 80% \u2212 5% \u2212 3% \u2212 (5/100) = 80% \u2212 5% \u2212 3% \u2212 5% = 67%\nThat\u2019s what the calculator uses in \u201cbreak-even\u201d logic.\n\n\ud83c\udfaf Why This Matters\nIf you only use GM%, you\u2019ll overestimate profitability.\u000b\nBy subtracting these extra costs, you get a realistic net margin \u2192 which protects you when scaling ads.\u000b\n\n\n\n"
}
Complete linked margin explanation — display copy; source control characters represented as line breaks or Unicode labels
GM% (Gross Margin %) gets adjusted downward by things like refunds, payment fees, and variable costs.
Here’s the breakdown:

📊 GM% in the Funnel Calculator
GM% = Gross Margin % → how much of each $1 in revenue is left after direct costs.

For digital products: often 80–90%.

For physical products: much lower (20–50%).


🔎 Why You Saw “−GM%” in Formulas
In formulas like Break-even CPC or Break-even ROAS, we don’t just take GM% at face value — we subtract other “loss factors”:
Refund Rate (%) → lost revenue from chargebacks/returns.

Payment Fees (%) → Stripe, PayPal, credit card fees.

Variable Cost per Order ($) → shipping, bonuses, fulfillment, support, etc.

So the math looks like:
Effective Margin = GM% − Refund% − Fees% − (VarCost ÷ AOV)


✅ Example
AOV = $100

GM% = 80%

Refunds = 5%

Payment fees = 3%

Var cost/order = $5

Effective Margin = 80% − 5% − 3% − (5/100) = 80% − 5% − 3% − 5% = 67%
That’s what the calculator uses in “break-even” logic.

🎯 Why This Matters
If you only use GM%, you’ll overestimate profitability.

By subtracting these extra costs, you get a realistic net margin → which protects you when scaling ads.




Supporting document for lesson 03.4: PG_PATCH_03_Scale_Hold_Pivot_Triggers

Scale, hold or pivot: define the signals before reacting

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lesson 03.4. Video recording to be added. This source is a short trigger blueprint, not a complete decision algorithm.

Build a decision rule you can inspect

The Portfolio Governor aims to identify changing conditions early enough to reconsider a channel or offer. It provides four example trigger families and two required outputs. It supplies neither universal numerical thresholds nor a guarantee against business decline. The operating method below is an authored extension that makes the examples usable without inventing missing source rules.

For each trigger, record the signal, baseline, comparison window, threshold, evidence source, reviewer and proposed response. Write these before interpreting the next result. A trigger should prompt diagnosis; it should not automatically certify a cause or authorize more spending.

Supporting source: Portfolio Governor purpose and examples

1. Reach falls following a possible platform change

The first example is an algorithm shift that reduces reach by more than X% for Y weeks. X and Y are placeholders, not supplied values. Define the reach metric, baseline and duration for your situation. Compare equivalent periods and consider changes in publishing volume, format, audience, seasonality or tracking before attributing the decline to an algorithm.

As an authored arithmetic example only, a decline from 10,000 to 7,500 accounts reached is 25% relative to the original baseline. It is not evidence of an algorithm change. With a zero baseline, that percentage calculation is undefined. Record the actual evidence and uncertainty before recommending a channel pivot.

Supporting source: platform reach trigger

2. Acquisition cost rises without corresponding lifetime value improvement

The second example is CAC crossing a threshold while LTV does not improve. Specify which costs are included in acquisition cost and which acquired customers belong in its denominator. Define whether lifetime value means revenue or contribution and whether it is observed or projected. Compare consistent cohorts and time horizons; otherwise the two numbers can tell a misleading story.

The source gives no CAC ceiling, required LTV:CAC ratio or payback rule. Set an explicitly labeled working threshold using your own economics and constraints. If acquisition cost rises, investigate conversion, channel mix, attribution and fulfillment before concluding that the offer itself must change. Predicted future value should not be presented as already realized cash.

Supporting source: CAC/LTV trigger

3. Policy friction increases

The third example is more warnings or disapprovals. Log the notice, affected asset, platform, date and stated reason. Link the actual notice and relevant current official policy when applying the rule to a real account. The source does not identify a platform or provide a compliance remedy.

Separate a correctable asset issue from a broader incompatibility between the channel and the proposed offer. Correct or seek review of the underlying issue using the platform's process. A pivot is not a reason to evade a restriction, duplicate a prohibited campaign or conceal the same problem elsewhere.

Supporting source: warnings and disapprovals trigger

4. Demand appears to move from growth to decline

The fourth example is a change in demand regime. Define the evidence you will use: qualified inquiries, purchases, repeat demand or another relevant measure. These are authored examples, not an original supplied metric list. Distinguish a temporary fluctuation from a sustained change, and distinguish overall market demand from your own campaign's performance.

Check multiple relevant observations when available. A single quiet week or a drop in one channel does not establish market decline. Keep the supporting evidence and alternative explanations visible in the recommendation.

Supporting source: demand-regime trigger

Produce both required outputs

First, write the pivot recommendation, identifying whether the proposed change concerns the channel, offer or market. Explain the evidence, what remains uncertain and how you will evaluate the recommendation. The title also names scale and hold, but the body supplies no separate scale/hold criteria. If you recommend holding or scaling, label your decision rule as an authored extension and explain its basis.

Second, state what to keep, what to kill and what to test next. Retain elements supported by evidence; propose retiring elements whose defined criteria failed; choose a next test that resolves an important uncertainty. In this curriculum exercise, “kill” means a recommendation to retire an initiative, not authorization to delete assets, cancel services or change live campaigns.

For an authored example, you might keep the offer while testing a new distribution approach because demand remains visible but one channel's qualified response has declined. Another case could require repairing the offer rather than changing channels. The source does not establish either outcome in advance.

Supporting source: both required outputs

Apply this to lesson 03.4

Use the trigger sheet to make the next offer test deliberate. The requested direct-response themes connect offer clarity and acquisition evidence, but this source supplies no Brunson/Hormozi formula, quotation or fixed benchmark. Keep those distinctions explicit. Submit four defined trigger records and one recommendation containing keep/kill/test decisions, with evidence links at the relevant claims.

Complete original Portfolio Governor trigger blueprint

Complete original document appendices

Complete readable source
PORTFOLIO GOVERNOR — SCALE / HOLD / PIVOT TRIGGERS


Purpose
Create forward-looking pivot points so you’re never trapped in a dying channel or offer.


Triggers (examples)
- Platform algorithm shift reduces reach > X% for Y weeks
- CAC rises above threshold without LTV improvement
- Policy friction increases (warnings, disapprovals)
- Demand regime shifts from growth → decline


Outputs
- Pivot recommendation (channel/offer/market)
- What to keep, what to kill, what to test next
Native document text

PORTFOLIO GOVERNOR — SCALE / HOLD / PIVOT TRIGGERS

Purpose
Create forward-looking pivot points so you’re never trapped in a dying channel or offer.

Triggers (examples)
- Platform algorithm shift reduces reach > X% for Y weeks
- CAC rises above threshold without LTV improvement
- Policy friction increases (warnings, disapprovals)
- Demand regime shifts from growth → decline

Outputs
- Pivot recommendation (channel/offer/market)
- What to keep, what to kill, what to test next

Supporting document for lesson 03.4: Phoenix_RealEstate_MVO_Keywords.xlsx

Phoenix keyword scenarios: inspect the assumptions behind the score

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lesson 03.4. Video recording to be added. The source has a blank Sheet1 and a populated Phoenix_Keywords sheet with six examples, nineteen columns and forty-eight formulas. Both sheets are represented in the workbook appendix data; the original workbook remains linked below.

Original Phoenix Real Estate MVO Keywords workbook

1. Read all six keyword hypotheses

The source classifies each keyword by Intent and Stage. These are supplied classifications, not proof of what every searcher wants. Monthly Volume (SV), CPC ($) and Keyword Difficulty (0–100) are unverified, undated inputs: the workbook names no measurement provider or observation window. Do not teach them as current Phoenix market data.

KeywordIntentStageMonthly volumeCPC $DifficultyCTR estimate %CVR estimate %AOV $Gross margin %
phoenix real estate trainingCommercialConsideration3204.5352.5254780
luxury listing training phoenixCommercialConsideration1505.2402209780
best realtor training arizonaCommercialAwareness5003.8302.2224780
how to get luxury listings in phoenixInformationalAwareness2504282.1189780
real estate funnels phoenixCommercialDecision1203.5252.8244780
arizona realtor marketing courseCommercialConsideration3004.1322.4219780

Inspect the question implied by each phrase. A person seeking a course, a person asking how to obtain listings and a person seeking a funnel may need different content and next steps. This is an authored messaging interpretation, not a substitute for inspecting actual audience evidence. For lesson 03.4, the practical exercise is to connect each search hypothesis with an offer that answers its apparent need.

Supporting source: keyword, intent, stage and input cells A2:J7

2. Trace the calculation chain

The source estimates clicks by multiplying monthly search volume by CTR divided by 100. This assumes the volume is an appropriate exposure base. Search volume is not the same as attainable impressions, so the resulting clicks are scenario outputs, not a traffic forecast. Percentages are entered as whole percentage numbers in this workbook.

Estimated cost equals clicks times CPC. Estimated conversions equal clicks times CVR divided by 100. Estimated revenue equals conversions times AOV. Gross profit equals revenue times gross-margin percentage divided by 100. Estimated profit subtracts estimated cost from gross profit. ROAS divides revenue by cost. The first five operations and ROAS use IFERROR to return zero; an error hidden as zero is not evidence of zero demand or a valid economic result.

Fractional conversions are expected values for planning, not completed sales. The profit calculation does not separately deduct refunds, payment fees, extra variable costs or overhead. Its positive outputs therefore do not establish net profitability. Record what the gross-margin assumption includes before adding more deductions.

Supporting source: formulas in columns K–Q

3. Compare every original result

The rows below follow the same order as the six keyword inputs. Amounts preserve supplied calculation precision; ROAS and score are rounded for reading. Full formulas and cached values remain in the original appendix.

Keyword shorthandEst. clicksEst. cost $Est. conversionsEst. revenue $Gross profit $Est. profit $ROASSource score
Phoenix training83629475.239.22.6111111.735556
Luxury listing training315.60.658.246.5630.963.7307692.285385
Best realtor training1141.82.42113.7490.99249.1922.7210531.800526
How to get luxury listings5.25210.94591.66573.33252.3324.3652.6265
Real estate funnels3.3611.760.806437.900830.3206418.560643.2228572.061429
Arizona marketing course7.229.521.512146.664117.331287.81124.9682932.920146

For example, the first row produces eight modeled clicks from 320 volume at 2.5% CTR. At $4.50 per click that costs $36. A 25% click-to-order rate produces two expected orders, giving $94 revenue at $47 each. Applying 80% margin leaves $75.20 before the modeled ad cost and $39.20 afterward. Every result depends on those assumptions being appropriate.

The final row has the largest modeled profit among these inputs, while the third has the most modeled clicks. These are different criteria. Neither observation proves which keyword should receive real spend. All forty-eight cached formula values were independently checked against the arithmetic; the source's input accuracy and every possible input state were not validated by that check.

Supporting source: all six result rows K2:R7

4. Correctly interpret the mislabeled viability score

Column R says Viability Score (0–1), but its formula is:

0.5 × ROAS + 0.3 × (1 if estimated profit > 0, otherwise 0) + 0.2 × (1 − difficulty/100)

The ROAS term has no upper bound, so the score is not limited to one. All six supplied scores exceed one. Treat it as an illustrative weighted index, not a probability, percentage confidence or validated viability measure. The profit indicator also changes abruptly at zero and ignores the magnitude of positive profit. Difficulty contributes a separate preference for lower source difficulty values, whose provider is unspecified.

Preserve the original formula and label in the source appendix, explain the mismatch in teaching, and do not silently invent a replacement normalization. A revised scoring method would need its own clearly labeled definition and validation.

Supporting source: original R1 label and R2:R7 formulas

5. Turn the example into an evidence-backed test proposal

The Notes column is blank in all six rows. Use a working copy to add source links, dates, input definitions, known exclusions and the next evidence needed. Keep the original unchanged. Before comparing scenarios, examine how conclusions change when click rate, conversion rate or cost differs from the example.

The user's requested funnel and offer themes connect here through truthful audience-to-offer matching and credible delivery economics. The workbook does not supply a Brunson or Hormozi scoring formula. Submit a documented scenario and a proposed test, distinguish projections from observations, and link the evidence next to each assumption. No campaign spend is activated by this lesson.

Complete original workbook, including blank sheet, all cells and formulas

Complete original workbook data

Sheet1

Original range: A1:A1; state: visible

CellOriginal value or formulaCached valueNumber formatHyperlinkComment
Phoenix_Keywords

Original range: A1:S7; state: visible

CellOriginal value or formulaCached valueNumber formatHyperlinkComment
A1KeywordKeywordGeneralNoneNone
B1IntentIntentGeneralNoneNone
C1StageStageGeneralNoneNone
D1Monthly Volume (SV)Monthly Volume (SV)GeneralNoneNone
E1CPC ($)CPC ($)GeneralNoneNone
F1Keyword Difficulty (0-100)Keyword Difficulty (0-100)GeneralNoneNone
G1CTR_est (%)CTR_est (%)GeneralNoneNone
H1CVR_est (%)CVR_est (%)GeneralNoneNone
I1AOV ($)AOV ($)GeneralNoneNone
J1Gross Margin (%)Gross Margin (%)GeneralNoneNone
K1Est. ClicksEst. ClicksGeneralNoneNone
L1Est. Cost ($)Est. Cost ($)GeneralNoneNone
M1Est. ConversionsEst. ConversionsGeneralNoneNone
N1Est. Revenue ($)Est. Revenue ($)GeneralNoneNone
O1Gross Profit ($)Gross Profit ($)GeneralNoneNone
P1Est. Profit ($)Est. Profit ($)GeneralNoneNone
Q1ROASROASGeneralNoneNone
R1Viability Score (0-1)Viability Score (0-1)GeneralNoneNone
S1NotesNotesGeneralNoneNone
A2phoenix real estate trainingphoenix real estate trainingGeneralNoneNone
B2CommercialCommercialGeneralNoneNone
C2ConsiderationConsiderationGeneralNoneNone
D2320.0320.0GeneralNoneNone
E24.54.5GeneralNoneNone
F235.035.0GeneralNoneNone
G22.52.5GeneralNoneNone
H225.025.0GeneralNoneNone
I247.047.0GeneralNoneNone
J280.080.0GeneralNoneNone
K2=IFERROR(D2*G2/100,0)8GeneralNoneNone
L2=IFERROR(K2*E2,0)36GeneralNoneNone
M2=IFERROR(K2*H2/100,0)2GeneralNoneNone
N2=IFERROR(M2*I2,0)94GeneralNoneNone
O2=IFERROR(N2*J2/100,0)75.2GeneralNoneNone
P2=O2-L239.2GeneralNoneNone
Q2=IFERROR(N2/L2,0)2.611111111GeneralNoneNone
R2=0.5*Q2+0.3*IF(P2>0,1,0)+0.2*(1-F2/100)1.735555556GeneralNoneNone
A3luxury listing training phoenixluxury listing training phoenixGeneralNoneNone
B3CommercialCommercialGeneralNoneNone
C3ConsiderationConsiderationGeneralNoneNone
D3150.0150.0GeneralNoneNone
E35.25.2GeneralNoneNone
F340.040.0GeneralNoneNone
G32.02.0GeneralNoneNone
H320.020.0GeneralNoneNone
I397.097.0GeneralNoneNone
J380.080.0GeneralNoneNone
K3=IFERROR(D3*G3/100,0)3GeneralNoneNone
L3=IFERROR(K3*E3,0)15.6GeneralNoneNone
M3=IFERROR(K3*H3/100,0)0.6GeneralNoneNone
N3=IFERROR(M3*I3,0)58.2GeneralNoneNone
O3=IFERROR(N3*J3/100,0)46.56GeneralNoneNone
P3=O3-L330.96GeneralNoneNone
Q3=IFERROR(N3/L3,0)3.730769231GeneralNoneNone
R3=0.5*Q3+0.3*IF(P3>0,1,0)+0.2*(1-F3/100)2.285384615GeneralNoneNone
A4best realtor training arizonabest realtor training arizonaGeneralNoneNone
B4CommercialCommercialGeneralNoneNone
C4AwarenessAwarenessGeneralNoneNone
D4500.0500.0GeneralNoneNone
E43.83.8GeneralNoneNone
F430.030.0GeneralNoneNone
G42.22.2GeneralNoneNone
H422.022.0GeneralNoneNone
I447.047.0GeneralNoneNone
J480.080.0GeneralNoneNone
K4=IFERROR(D4*G4/100,0)11GeneralNoneNone
L4=IFERROR(K4*E4,0)41.8GeneralNoneNone
M4=IFERROR(K4*H4/100,0)2.42GeneralNoneNone
N4=IFERROR(M4*I4,0)113.74GeneralNoneNone
O4=IFERROR(N4*J4/100,0)90.992GeneralNoneNone
P4=O4-L449.192GeneralNoneNone
Q4=IFERROR(N4/L4,0)2.721052632GeneralNoneNone
R4=0.5*Q4+0.3*IF(P4>0,1,0)+0.2*(1-F4/100)1.800526316GeneralNoneNone
A5how to get luxury listings in phoenixhow to get luxury listings in phoenixGeneralNoneNone
B5InformationalInformationalGeneralNoneNone
C5AwarenessAwarenessGeneralNoneNone
D5250.0250.0GeneralNoneNone
E54.04.0GeneralNoneNone
F528.028.0GeneralNoneNone
G52.12.1GeneralNoneNone
H518.018.0GeneralNoneNone
I597.097.0GeneralNoneNone
J580.080.0GeneralNoneNone
K5=IFERROR(D5*G5/100,0)5.25GeneralNoneNone
L5=IFERROR(K5*E5,0)21GeneralNoneNone
M5=IFERROR(K5*H5/100,0)0.945GeneralNoneNone
N5=IFERROR(M5*I5,0)91.665GeneralNoneNone
O5=IFERROR(N5*J5/100,0)73.332GeneralNoneNone
P5=O5-L552.332GeneralNoneNone
Q5=IFERROR(N5/L5,0)4.365GeneralNoneNone
R5=0.5*Q5+0.3*IF(P5>0,1,0)+0.2*(1-F5/100)2.6265GeneralNoneNone
A6real estate funnels phoenixreal estate funnels phoenixGeneralNoneNone
B6CommercialCommercialGeneralNoneNone
C6DecisionDecisionGeneralNoneNone
D6120.0120.0GeneralNoneNone
E63.53.5GeneralNoneNone
F625.025.0GeneralNoneNone
G62.82.8GeneralNoneNone
H624.024.0GeneralNoneNone
I647.047.0GeneralNoneNone
J680.080.0GeneralNoneNone
K6=IFERROR(D6*G6/100,0)3.36GeneralNoneNone
L6=IFERROR(K6*E6,0)11.76GeneralNoneNone
M6=IFERROR(K6*H6/100,0)0.8064GeneralNoneNone
N6=IFERROR(M6*I6,0)37.9008GeneralNoneNone
O6=IFERROR(N6*J6/100,0)30.32064GeneralNoneNone
P6=O6-L618.56064GeneralNoneNone
Q6=IFERROR(N6/L6,0)3.222857143GeneralNoneNone
R6=0.5*Q6+0.3*IF(P6>0,1,0)+0.2*(1-F6/100)2.061428571GeneralNoneNone
A7arizona realtor marketing coursearizona realtor marketing courseGeneralNoneNone
B7CommercialCommercialGeneralNoneNone
C7ConsiderationConsiderationGeneralNoneNone
D7300.0300.0GeneralNoneNone
E74.14.1GeneralNoneNone
F732.032.0GeneralNoneNone
G72.42.4GeneralNoneNone
H721.021.0GeneralNoneNone
I797.097.0GeneralNoneNone
J780.080.0GeneralNoneNone
K7=IFERROR(D7*G7/100,0)7.2GeneralNoneNone
L7=IFERROR(K7*E7,0)29.52GeneralNoneNone
M7=IFERROR(K7*H7/100,0)1.512GeneralNoneNone
N7=IFERROR(M7*I7,0)146.664GeneralNoneNone
O7=IFERROR(N7*J7/100,0)117.3312GeneralNoneNone
P7=O7-L787.8112GeneralNoneNone
Q7=IFERROR(N7/L7,0)4.968292683GeneralNoneNone
R7=0.5*Q7+0.3*IF(P7>0,1,0)+0.2*(1-F7/100)2.920146341GeneralNoneNone
Complete extraction, including workbook structures
{
  "id": "D0979",
  "sheets": [
    {
      "name": "Sheet1",
      "state": "visible",
      "dimensions": "A1:A1",
      "merged": [],
      "cells": [],
      "validations": "<openpyxl.worksheet.datavalidation.DataValidationList object>\nParameters:\ndisablePrompts=None, xWindow=None, yWindow=None, count=0, dataValidation=[]",
      "conditional_formatting": []
    },
    {
      "name": "Phoenix_Keywords",
      "state": "visible",
      "dimensions": "A1:S7",
      "merged": [],
      "cells": [
        {
          "cell": "A1",
          "value": "Keyword",
          "type": "s",
          "cached": "Keyword",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B1",
          "value": "Intent",
          "type": "s",
          "cached": "Intent",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C1",
          "value": "Stage",
          "type": "s",
          "cached": "Stage",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D1",
          "value": "Monthly Volume (SV)",
          "type": "s",
          "cached": "Monthly Volume (SV)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E1",
          "value": "CPC ($)",
          "type": "s",
          "cached": "CPC ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F1",
          "value": "Keyword Difficulty (0-100)",
          "type": "s",
          "cached": "Keyword Difficulty (0-100)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G1",
          "value": "CTR_est (%)",
          "type": "s",
          "cached": "CTR_est (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H1",
          "value": "CVR_est (%)",
          "type": "s",
          "cached": "CVR_est (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I1",
          "value": "AOV ($)",
          "type": "s",
          "cached": "AOV ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J1",
          "value": "Gross Margin (%)",
          "type": "s",
          "cached": "Gross Margin (%)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K1",
          "value": "Est. Clicks",
          "type": "s",
          "cached": "Est. Clicks",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L1",
          "value": "Est. Cost ($)",
          "type": "s",
          "cached": "Est. Cost ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M1",
          "value": "Est. Conversions",
          "type": "s",
          "cached": "Est. Conversions",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N1",
          "value": "Est. Revenue ($)",
          "type": "s",
          "cached": "Est. Revenue ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O1",
          "value": "Gross Profit ($)",
          "type": "s",
          "cached": "Gross Profit ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P1",
          "value": "Est. Profit ($)",
          "type": "s",
          "cached": "Est. Profit ($)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q1",
          "value": "ROAS",
          "type": "s",
          "cached": "ROAS",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R1",
          "value": "Viability Score (0-1)",
          "type": "s",
          "cached": "Viability Score (0-1)",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "S1",
          "value": "Notes",
          "type": "s",
          "cached": "Notes",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "A2",
          "value": "phoenix real estate training",
          "type": "s",
          "cached": "phoenix real estate training",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B2",
          "value": "Commercial",
          "type": "s",
          "cached": "Commercial",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C2",
          "value": "Consideration",
          "type": "s",
          "cached": "Consideration",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D2",
          "value": 320.0,
          "type": "n",
          "cached": 320.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E2",
          "value": 4.5,
          "type": "n",
          "cached": 4.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F2",
          "value": 35.0,
          "type": "n",
          "cached": 35.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G2",
          "value": 2.5,
          "type": "n",
          "cached": 2.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H2",
          "value": 25.0,
          "type": "n",
          "cached": 25.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I2",
          "value": 47.0,
          "type": "n",
          "cached": 47.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J2",
          "value": 80.0,
          "type": "n",
          "cached": 80.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K2",
          "value": "=IFERROR(D2*G2/100,0)",
          "type": "f",
          "cached": 8,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L2",
          "value": "=IFERROR(K2*E2,0)",
          "type": "f",
          "cached": 36,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M2",
          "value": "=IFERROR(K2*H2/100,0)",
          "type": "f",
          "cached": 2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N2",
          "value": "=IFERROR(M2*I2,0)",
          "type": "f",
          "cached": 94,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O2",
          "value": "=IFERROR(N2*J2/100,0)",
          "type": "f",
          "cached": 75.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P2",
          "value": "=O2-L2",
          "type": "f",
          "cached": 39.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q2",
          "value": "=IFERROR(N2/L2,0)",
          "type": "f",
          "cached": 2.611111111,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R2",
          "value": "=0.5*Q2+0.3*IF(P2>0,1,0)+0.2*(1-F2/100)",
          "type": "f",
          "cached": 1.735555556,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "A3",
          "value": "luxury listing training phoenix",
          "type": "s",
          "cached": "luxury listing training phoenix",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B3",
          "value": "Commercial",
          "type": "s",
          "cached": "Commercial",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C3",
          "value": "Consideration",
          "type": "s",
          "cached": "Consideration",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D3",
          "value": 150.0,
          "type": "n",
          "cached": 150.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E3",
          "value": 5.2,
          "type": "n",
          "cached": 5.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F3",
          "value": 40.0,
          "type": "n",
          "cached": 40.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G3",
          "value": 2.0,
          "type": "n",
          "cached": 2.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H3",
          "value": 20.0,
          "type": "n",
          "cached": 20.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I3",
          "value": 97.0,
          "type": "n",
          "cached": 97.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J3",
          "value": 80.0,
          "type": "n",
          "cached": 80.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K3",
          "value": "=IFERROR(D3*G3/100,0)",
          "type": "f",
          "cached": 3,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L3",
          "value": "=IFERROR(K3*E3,0)",
          "type": "f",
          "cached": 15.6,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M3",
          "value": "=IFERROR(K3*H3/100,0)",
          "type": "f",
          "cached": 0.6,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N3",
          "value": "=IFERROR(M3*I3,0)",
          "type": "f",
          "cached": 58.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O3",
          "value": "=IFERROR(N3*J3/100,0)",
          "type": "f",
          "cached": 46.56,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P3",
          "value": "=O3-L3",
          "type": "f",
          "cached": 30.96,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q3",
          "value": "=IFERROR(N3/L3,0)",
          "type": "f",
          "cached": 3.730769231,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R3",
          "value": "=0.5*Q3+0.3*IF(P3>0,1,0)+0.2*(1-F3/100)",
          "type": "f",
          "cached": 2.285384615,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "A4",
          "value": "best realtor training arizona",
          "type": "s",
          "cached": "best realtor training arizona",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B4",
          "value": "Commercial",
          "type": "s",
          "cached": "Commercial",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C4",
          "value": "Awareness",
          "type": "s",
          "cached": "Awareness",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D4",
          "value": 500.0,
          "type": "n",
          "cached": 500.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E4",
          "value": 3.8,
          "type": "n",
          "cached": 3.8,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F4",
          "value": 30.0,
          "type": "n",
          "cached": 30.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G4",
          "value": 2.2,
          "type": "n",
          "cached": 2.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H4",
          "value": 22.0,
          "type": "n",
          "cached": 22.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I4",
          "value": 47.0,
          "type": "n",
          "cached": 47.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J4",
          "value": 80.0,
          "type": "n",
          "cached": 80.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K4",
          "value": "=IFERROR(D4*G4/100,0)",
          "type": "f",
          "cached": 11,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L4",
          "value": "=IFERROR(K4*E4,0)",
          "type": "f",
          "cached": 41.8,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M4",
          "value": "=IFERROR(K4*H4/100,0)",
          "type": "f",
          "cached": 2.42,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N4",
          "value": "=IFERROR(M4*I4,0)",
          "type": "f",
          "cached": 113.74,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O4",
          "value": "=IFERROR(N4*J4/100,0)",
          "type": "f",
          "cached": 90.992,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P4",
          "value": "=O4-L4",
          "type": "f",
          "cached": 49.192,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q4",
          "value": "=IFERROR(N4/L4,0)",
          "type": "f",
          "cached": 2.721052632,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R4",
          "value": "=0.5*Q4+0.3*IF(P4>0,1,0)+0.2*(1-F4/100)",
          "type": "f",
          "cached": 1.800526316,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "A5",
          "value": "how to get luxury listings in phoenix",
          "type": "s",
          "cached": "how to get luxury listings in phoenix",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B5",
          "value": "Informational",
          "type": "s",
          "cached": "Informational",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C5",
          "value": "Awareness",
          "type": "s",
          "cached": "Awareness",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D5",
          "value": 250.0,
          "type": "n",
          "cached": 250.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E5",
          "value": 4.0,
          "type": "n",
          "cached": 4.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F5",
          "value": 28.0,
          "type": "n",
          "cached": 28.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G5",
          "value": 2.1,
          "type": "n",
          "cached": 2.1,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H5",
          "value": 18.0,
          "type": "n",
          "cached": 18.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I5",
          "value": 97.0,
          "type": "n",
          "cached": 97.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J5",
          "value": 80.0,
          "type": "n",
          "cached": 80.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K5",
          "value": "=IFERROR(D5*G5/100,0)",
          "type": "f",
          "cached": 5.25,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L5",
          "value": "=IFERROR(K5*E5,0)",
          "type": "f",
          "cached": 21,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M5",
          "value": "=IFERROR(K5*H5/100,0)",
          "type": "f",
          "cached": 0.945,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N5",
          "value": "=IFERROR(M5*I5,0)",
          "type": "f",
          "cached": 91.665,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O5",
          "value": "=IFERROR(N5*J5/100,0)",
          "type": "f",
          "cached": 73.332,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P5",
          "value": "=O5-L5",
          "type": "f",
          "cached": 52.332,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q5",
          "value": "=IFERROR(N5/L5,0)",
          "type": "f",
          "cached": 4.365,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R5",
          "value": "=0.5*Q5+0.3*IF(P5>0,1,0)+0.2*(1-F5/100)",
          "type": "f",
          "cached": 2.6265,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "A6",
          "value": "real estate funnels phoenix",
          "type": "s",
          "cached": "real estate funnels phoenix",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B6",
          "value": "Commercial",
          "type": "s",
          "cached": "Commercial",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C6",
          "value": "Decision",
          "type": "s",
          "cached": "Decision",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D6",
          "value": 120.0,
          "type": "n",
          "cached": 120.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E6",
          "value": 3.5,
          "type": "n",
          "cached": 3.5,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F6",
          "value": 25.0,
          "type": "n",
          "cached": 25.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G6",
          "value": 2.8,
          "type": "n",
          "cached": 2.8,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H6",
          "value": 24.0,
          "type": "n",
          "cached": 24.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I6",
          "value": 47.0,
          "type": "n",
          "cached": 47.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J6",
          "value": 80.0,
          "type": "n",
          "cached": 80.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K6",
          "value": "=IFERROR(D6*G6/100,0)",
          "type": "f",
          "cached": 3.36,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L6",
          "value": "=IFERROR(K6*E6,0)",
          "type": "f",
          "cached": 11.76,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M6",
          "value": "=IFERROR(K6*H6/100,0)",
          "type": "f",
          "cached": 0.8064,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N6",
          "value": "=IFERROR(M6*I6,0)",
          "type": "f",
          "cached": 37.9008,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O6",
          "value": "=IFERROR(N6*J6/100,0)",
          "type": "f",
          "cached": 30.32064,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P6",
          "value": "=O6-L6",
          "type": "f",
          "cached": 18.56064,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q6",
          "value": "=IFERROR(N6/L6,0)",
          "type": "f",
          "cached": 3.222857143,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R6",
          "value": "=0.5*Q6+0.3*IF(P6>0,1,0)+0.2*(1-F6/100)",
          "type": "f",
          "cached": 2.061428571,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "A7",
          "value": "arizona realtor marketing course",
          "type": "s",
          "cached": "arizona realtor marketing course",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "B7",
          "value": "Commercial",
          "type": "s",
          "cached": "Commercial",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "C7",
          "value": "Consideration",
          "type": "s",
          "cached": "Consideration",
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "D7",
          "value": 300.0,
          "type": "n",
          "cached": 300.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "E7",
          "value": 4.1,
          "type": "n",
          "cached": 4.1,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "F7",
          "value": 32.0,
          "type": "n",
          "cached": 32.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "G7",
          "value": 2.4,
          "type": "n",
          "cached": 2.4,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "H7",
          "value": 21.0,
          "type": "n",
          "cached": 21.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "I7",
          "value": 97.0,
          "type": "n",
          "cached": 97.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "J7",
          "value": 80.0,
          "type": "n",
          "cached": 80.0,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "K7",
          "value": "=IFERROR(D7*G7/100,0)",
          "type": "f",
          "cached": 7.2,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "L7",
          "value": "=IFERROR(K7*E7,0)",
          "type": "f",
          "cached": 29.52,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "M7",
          "value": "=IFERROR(K7*H7/100,0)",
          "type": "f",
          "cached": 1.512,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "N7",
          "value": "=IFERROR(M7*I7,0)",
          "type": "f",
          "cached": 146.664,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "O7",
          "value": "=IFERROR(N7*J7/100,0)",
          "type": "f",
          "cached": 117.3312,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "P7",
          "value": "=O7-L7",
          "type": "f",
          "cached": 87.8112,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "Q7",
          "value": "=IFERROR(N7/L7,0)",
          "type": "f",
          "cached": 4.968292683,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        },
        {
          "cell": "R7",
          "value": "=0.5*Q7+0.3*IF(P7>0,1,0)+0.2*(1-F7/100)",
          "type": "f",
          "cached": 2.920146341,
          "number_format": "General",
          "comment": null,
          "hyperlink": null
        }
      ],
      "validations": "<openpyxl.worksheet.datavalidation.DataValidationList object>\nParameters:\ndisablePrompts=None, xWindow=None, yWindow=None, count=0, dataValidation=[]",
      "conditional_formatting": []
    }
  ],
  "defined_names": "{}",
  "package_features": [
    "xl/drawings/drawing1.xml",
    "xl/drawings/drawing2.xml"
  ]
}

Offer development and operating practice — source-linked curriculum

Working teaching for review; source and dependency gaps remain identified in each module.

Lesson 03.3

Lesson 03.4

Additional assigned lesson teaching and sources

These source-linked modules belong to the lessons identified below.

Supporting document for lesson 03.4: 04 File: intake-launch-doc

Launch intake: collect the decisions that shape the campaign

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 07.1 and 08.1. Video recording to be added.

Complete the brief before generating launch assets

The assigned Client Intake Form — Launch Strategy Planner collects timing, goals, messaging, funnel format and campaign assets. It has thirteen questions. The source describes using the answers to generate content, emails, timelines and creative recommendations with Claude or GPT. Those answers are inputs to drafting; they do not prove that a generated plan is accurate or that a campaign has been implemented.

Use clear, complete language. A missing answer should stay visible so the planner can request it. The following explanations make each original question actionable. Examples and verification procedures are authored teaching applications, not client responses contained in the blank form.

Supporting source: Client Intake Form — Launch Strategy Planner, purpose and instructions

1. Name the product or service

Write the exact offer name and a short explanation of what the buyer receives. A brand can sell several offers, so identify the specific offer being launched. Use the same name in the page, emails and delivery materials to avoid creating inconsistent expectations.

Supporting source: product/service question

2. Identify a new offer or a relaunch

The original choices are New and Relaunch. For a relaunch, explain what has changed and what evidence from the previous release is available. For a new offer, distinguish tested assumptions from ideas still awaiting validation. A relaunch label alone does not establish that the prior offer succeeded.

Supporting source: New or Relaunch choices

3. State the hard date or preferred window

Record whether the date is fixed or flexible. Add the relevant time zone when a launch involves a scheduled event. Compare the available time with the assets that still need to be built. That scheduling check is an authored application; the blank form does not provide a launch date or prescribe a campaign duration.

Supporting source: hard launch date or preferred window

4. Define the launch goal

The source examples are 100 buyers, $25,000 revenue and 300 signups. They are examples, not targets assigned to this business or verified results. Choose the outcome that matters for this launch and state its measurement period. Distinguish signups from buyers and revenue from profit. If several goals matter, identify the primary one so the campaign does not optimize for an easier but less relevant result.

Supporting source: launch goal and its three examples

5. Identify the launch platforms

The form names Email, Instagram, Ads, YouTube and Facebook Group as examples. Specify the actual channels and assets available to you. “Ads” describes a distribution method, so identify the platform if using that option. Do not assume that selecting a channel establishes audience access, an ad budget or a configured campaign.

Supporting source: platforms question and examples

6. Choose the main call to action

The original choices are Buy Now, Book a Call, Join Waitlist, Download Freebie and Other. Select the action appropriate to this phase and identify its destination. Buying requires a clear purchase path; booking requires an available scheduling path; a waitlist requires a signup process; a download requires delivery of the promised resource. An Other answer should name a concrete action rather than a vague instruction to engage.

Supporting source: all five CTA choices

7. Record every relevant price point

If the offer has several tiers, identify what each includes and how it is paid. Clarify currency and whether payment is one-time, recurring or split into installments. These details are teaching guidance for a usable answer; the source provides no prices. Keep the price in the campaign consistent with the actual checkout and offer terms.

Supporting source: Price point(s) of the offer

8. Describe bonuses, time limits and scarcity accurately

Name each bonus and explain how it helps the buyer use the offer. If there is a deadline or limited capacity, state the actual restriction and what changes when it is reached. Do not invent a limit merely because the form asks about scarcity. “None” is a valid factual answer when there is no such restriction.

This is where value-focused offer thinking helps: additions should support the intended result or reduce a practical obstacle. A bonus count or arbitrary price label does not establish buyer value. Keep these authored connections distinct from the original intake questions.

Supporting source: bonuses, time-based urgency and scarcity question

9. Inventory prepared pre-launch content

Answer Yes or No. If Yes, describe or link the prepared material, as the form requests. Clarify whether each item is a draft, approved asset, scheduled item or already public. An asset title is not evidence that the content can be used. If No, record the work still required rather than generating an imaginary inventory.

Supporting source: pre-launch content choices and link request

10. Identify any lead magnet or opt-in

State what is offered before launch, who it helps, where a person requests it and how it is delivered. Explain how it relates to the paid offer without assuming every subscriber is ready to buy. If no lead magnet or opt-in is planned, say so. The question does not require adding one to every funnel.

Supporting source: lead magnet or opt-in question

11. Describe the warm audience

The form gives a list, group and followers as examples. Identify which audience is available and why it is relevant to this offer. Keep membership counts separate from observed engagement or purchasing behavior. A follower count alone does not establish permission to contact people individually or predict how many will buy.

Supporting source: warm audience question

12. Select the primary funnel model

The six named models are Live Webinar, Challenge, Evergreen VSL, Email-Only Launch, Free + Shipping Funnel and High-Ticket Application, plus Other. A live webinar centers a scheduled presentation. A challenge organizes participation across a sequence of activities. An evergreen VSL uses a recorded sales presentation in an ongoing path. An email-only launch centers its messaging sequence. Free + Shipping requires clear disclosure of what is free and what shipping or other charges apply. A high-ticket application gathers information before a suitability decision or sales conversation. These explanations are authored teaching, not detailed operating plans supplied by the form.

Select one primary model or describe your own as the source instructs. Identify the next action, required assets and delivery path. Do not assume that choosing a model supplies its script, checkout, recording or automation.

Supporting source: six funnel choices and Other

13. Explain the voice, story and positioning

Describe the tone, story or positioning to highlight. Provide a real story or evidence for factual statements instead of inventing a founder experience. Apply the training's hook, story and offer sequence by connecting an accurate attention-getting message to a relevant explanation and a clear next action. Preserve RISER NATION CORP's identity and the statement IF YOU AREN'T BUILDING, YOU ARE DESTROYING while making the buyer's practical outcome understandable.

Supporting source: Brand Voice / Positioning Notes

Handoff and assigned lesson practice

The source names custom-gpt-launch-strategy-builder.md, Claude for launch copywriting and phase-based email/calendar builds, and Make.com for automating emails, assets and tracking. These are named dependencies. This intake does not include the builder file, a complete email sequence or a configured Make scenario. Do not treat the names as working asset links or execute automation from the document's description.

For lesson 03.4, produce the completed launch brief with explicit unknowns. For 07.1, translate its message and content inventory into a writing brief. For 08.1, identify the actual assets and handoffs required to deliver the selected funnel. Check that all thirteen answers agree on the offer, audience, date, price and CTA before drafting the campaign.

Supporting source: Output Connects To and complete intake

Complete original source appendices

Open the assigned original: 04 File: intake-launch-doc

Complete readable source
04 File: intake-launch-doc.md
# 🚀 CLIENT INTAKE FORM – LAUNCH STRATEGY PLANNER


## 🔷 Purpose:
This intake is used to collect all the core information needed to build out a full launch strategy — including timing, messaging goals, funnel format, and critical campaign assets. Claude or GPT will use this to generate content, emails, timelines, and creative recommendations.


---


## 📝 Instructions to Client:
Please provide the following information so we can architect your next launch from start to finish. Don’t stress about perfection — clarity and completeness are more important than fancy language.


---


### 🔧 Launch Overview


- **What is the name of your product/service being launched?**
  >


- **Is this a new offer or a relaunch?**
  - ☐ New  
  - ☐ Relaunch


- **Do you have a hard launch date or preferred window?**
  >


- **What is your launch goal? (e.g. 100 buyers, $25k revenue, 300 signups)**
  >


- **What platforms are you launching on?**  
  (e.g. Email, Instagram, Ads, YouTube, Facebook Group, etc.)
  >


---


### 📣 CTA & Offer Info


- **What is the main call to action during the launch?**
  - ☐ Buy Now  
  - ☐ Book a Call  
  - ☐ Join Waitlist  
  - ☐ Download Freebie  
  - ☐ Other:


- **Price point(s) of the offer:**
  >


- **Are there bonuses, time-based urgency, or scarcity elements?**
  >


---


### 💌 Pre-Launch Details


- **Do you have any pre-launch content prepared?**
  - ☐ Yes  
  - ☐ No  
  - If yes, please describe or provide a link:
    >


- **Is there a lead magnet or opt-in happening before launch?**
  >


- **Who is your warm audience (list, group, followers)?**
  >


---


### 📈 Funnel Type


- Choose the primary funnel model you're using (select one or describe your own):
  - ☐ Live Webinar  
  - ☐ Challenge  
  - ☐ Evergreen VSL  
  - ☐ Email-Only Launch  
  - ☐ Free + Shipping Funnel  
  - ☐ High-Ticket Application  
  - ☐ Other:


---


### 🧠 Brand Voice / Positioning Notes


- Any specific tone, story, or positioning you want to highlight during this launch?
  >


---


## ✅ Output Connects To:
- `custom-gpt-launch-strategy-builder.md`
- Claude for launch copywriting + phase-based email/calendar builds
- Make.com for automation of emails, assets, and launch tracking


________________
Native document text
04 File: intake-launch-doc.md
# 🚀 CLIENT INTAKE FORM – LAUNCH STRATEGY PLANNER

## 🔷 Purpose:
This intake is used to collect all the core information needed to build out a full launch strategy — including timing, messaging goals, funnel format, and critical campaign assets. Claude or GPT will use this to generate content, emails, timelines, and creative recommendations.

---

## 📝 Instructions to Client:
Please provide the following information so we can architect your next launch from start to finish. Don’t stress about perfection — clarity and completeness are more important than fancy language.

---

### 🔧 Launch Overview

- **What is the name of your product/service being launched?**
  >

- **Is this a new offer or a relaunch?**
  - ☐ New  
  - ☐ Relaunch

- **Do you have a hard launch date or preferred window?**
  >

- **What is your launch goal? (e.g. 100 buyers, $25k revenue, 300 signups)**
  >

- **What platforms are you launching on?**  
  (e.g. Email, Instagram, Ads, YouTube, Facebook Group, etc.)
  >

---

### 📣 CTA & Offer Info

- **What is the main call to action during the launch?**
  - ☐ Buy Now  
  - ☐ Book a Call  
  - ☐ Join Waitlist  
  - ☐ Download Freebie  
  - ☐ Other:

- **Price point(s) of the offer:**
  >

- **Are there bonuses, time-based urgency, or scarcity elements?**
  >

---

### 💌 Pre-Launch Details

- **Do you have any pre-launch content prepared?**
  - ☐ Yes  
  - ☐ No  
  - If yes, please describe or provide a link:
    >

- **Is there a lead magnet or opt-in happening before launch?**
  >

- **Who is your warm audience (list, group, followers)?**
  >

---

### 📈 Funnel Type

- Choose the primary funnel model you're using (select one or describe your own):
  - ☐ Live Webinar  
  - ☐ Challenge  
  - ☐ Evergreen VSL  
  - ☐ Email-Only Launch  
  - ☐ Free + Shipping Funnel  
  - ☐ High-Ticket Application  
  - ☐ Other:

---

### 🧠 Brand Voice / Positioning Notes

- Any specific tone, story, or positioning you want to highlight during this launch?
  >

---

## ✅ Output Connects To:
- `custom-gpt-launch-strategy-builder.md`
- Claude for launch copywriting + phase-based email/calendar builds
- Make.com for automation of emails, assets, and launch tracking




Supporting document for lesson 03.4: 9.) Launch Current — RISERnation SONAR System Prompt

Launch Current SONAR: decide what is ready and what runs next

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 12.1, 12.2, 12.4 and 12.5. Video recording to be added.

Understand the operator brief

This source is a reusable SONAR operator prompt for people building offers, funnels, content systems, platform stacks and automation assets inside RISER Nation. It aims to compound useful market signal and revenue while limiting operator time. That is the document's objective, not a guarantee of business results. Its central rule is Right Step, Right Time: when prerequisites are missing, identify them rather than skipping ahead.

The source includes both an explanatory specification and a copy-and-paste system prompt repeating its operating requirements. We teach that prompt as source material. Its instruction to execute is not an instruction to activate a campaign, contact people or deploy software from this lesson.

Supporting source: Launch Current SONAR purpose, audience and system-prompt specification

Gather the five accepted input groups

First, identify the niche or industry and what is sold: product, service, information, affiliate offer or community. Second, describe the target customer, including who they are, where they can be reached and their context. Third, inventory available assets such as a site, offer, document, repository, prompts, competitor references or screenshots. Fourth, state constraints including budget, time, tools, compliance and bandwidth. Fifth, state the goal and North Star measure that define success.

Label unavailable assets and assumptions clearly. A screenshot may establish what was visible at a moment in time; it does not establish a currently functioning funnel. A goal is an intended result; it is not observed performance. These distinctions are authored guidance for using the inputs responsibly.

Supporting source: Accepted Inputs, five groups

Reconcile the two minimum-input lists

The original minimum requires niche plus offer intent—what is being sold and to whom—and primary platform intent, meaning where attention is expected. The later auto-added Completeness Compiler section instead lists niche or business type, offer intent including why now, a primary constraint such as time, budget, team, tooling or compliance, and optional links, screenshots or notes.

Keep both lists visible. They are not identical: platform intent appears in the first, while why now and the primary constraint appear in the later list. An authored reconciliation is to collect niche, offer, buyer, why now, intended platform and primary constraint, with supporting links or notes optional. That combined list is a practical interpretation, not a third list quoted from the source.

If a necessary answer is missing, request that specific information. Do not replace the missing platform with a guess or make the optional links a mandatory barrier. This source gives no rule for resolving every conflict with other SONAR documents, so name any remaining disagreement explicitly.

Supporting source: original Required Inputs and auto-added Minimum Inputs

Produce the three primary outputs and the supporting decision record

The first primary output is a launch sequence with its asset list. The second is a set of prelaunch, launch and postlaunch phase gates. The third is PR/collaboration decision rules explaining what to ignore and when to use those opportunities. Secondary outputs are assumptions, risks and evidence that would change the decision.

The prompt names these outputs but does not supply detailed phase criteria or numerical PR/collaboration thresholds. Do not pretend they are present. As an authored application, assess a proposed collaboration by audience fit, offer readiness, expected work, available evidence and the next action it supports. State the rule used and the uncertainty, rather than treating attention alone as a reason to proceed.

The separately assigned BUILD SOP — Launch Current provides six gates from intake through handoff. It can support the lesson's implementation, but its detail comes from that separate source, not from this prompt. Preserve both references when using the SOP to develop the gate output.

Supporting source: SONAR Primary and Secondary Outputs

Related assigned source: BUILD SOP — Launch Current, explicit six-gate sequence

Apply all five operating rules

Right Step, Right Time means completing prerequisites before dependent work. Protecting decisions means flagging activity that does not help reduce bad decisions or regret. Long-term operator outcomes take priority over short-term conversion hacks. Designing for tool and platform churn means preserving useful logic and assets when a provider changes. Dig Your Own Well means preferring ownership of data, logic and assets.

An authored application is to retain the offer brief, source references, decision log and reusable content in accessible formats rather than leaving the only copy inside one tool. Ownership does not imply rights to reuse another person's material without permission, and the source does not prescribe a specific export system or legal policy.

Use the training's direct-marketing concepts within these rules. An attention-getting hook must remain consistent with the real offer, and value-focused improvements should address a buyer's practical obstacles. The prompt does not authorize fabricated proof, false urgency or conversion claims unsupported by evidence.

Supporting source: Non-Negotiable Rules, five items

Route the work according to evidence and readiness

The next named SONAR is 11.) Content Flywheel; the optional SONAR is 10.) Social Signal Monitor. These numbers are internal source labels, not replacements for the twelve-course curriculum map. Explain why the receiving process needs the output rather than routing by name alone.

The explicit no-go conditions are vague or missing inputs and weak market signal, including a trend spike without underlying durable demand. The decision rules then specify: weak signal means stop or pivot the niche angle; strong signal with missing infrastructure routes to Platform Builder; an unclear offer routes to Current Scope or Offer Mutation Engine depending on maturity.

The source supplies no universal numerical definition of weak signal, durable demand or offer maturity. Record the evidence and interpretation used. A short attention spike is not proof of sustained purchasing interest. An unclear offer should not be passed downstream as though content production will resolve the missing decision.

Supporting source: Routing, Fail-States and Decision Rules

Package the reusable artifact in seven fields

The source calls for a completed, reusable document artifact inside the SONAR folder. Its required format has seven fields: Title; a one-sentence Purpose; Inputs covering minimum and accepted variants; Outputs covering primary and secondary results; Decision Rules and No-Go triggers; Routing identifying the next SONAR and why; and a pass/fail Checklist.

Make the artifact understandable without an unexplained follow-up. Include the relevant asset references and unresolved assumptions in the appropriate fields. The document's Window Sticker Features section says pricing-page descriptions should make purpose, inputs, outputs, routing, fail states and QA pass criteria clear. It does not supply a finished pricing page or establish that the service has passed those criteria.

Supporting source: Deliverables, Deliverable Format and Window Sticker Features

Run all six QA checks

Check that the purpose is one sentence and specific; inputs state minimums and accepted variants; outputs are usable by the next SONAR without follow-up; rules prevent step-skipping; routing includes the next and optional SONARs; and fail states are explicit. Record a failure when evidence is missing rather than changing the criterion to obtain a pass.

The source also names AIDA, PAS, AIDCA, Value Ladder, Webinar, Email and Story frameworks as library references. It does not include their full definitions, scripts or worksheets. Link and teach an actual supporting source when applying one; the list alone does not certify that all seven frameworks have been covered in this lesson.

Supporting source: six-item QA Checklist and Operator References

Practice across the assigned lessons

For 03.4, complete the launch decision brief. For 12.1, define the goal, constraints and known state. For 12.2, build the structured output and routing package. For 12.4, evaluate the signal and no-go conditions. For 12.5, retain the reusable artifact and explain what future evidence changes its decision. These are teaching applications of the spreadsheet assignments.

Submit the seven-field artifact, show how you reconciled the minimum-input lists, and record all six QA results. Keep unavailable dependencies and undefined thresholds explicit. A complete practice artifact is not evidence that a live launch has been executed.

Complete original source appendices

Open the assigned original: 9.) Launch Current — RISERnation SONAR System Prompt

Complete readable source
9.) Launch Current — RISERnation SONAR System Prompt
Last Updated (UTC): 2025-12-19T23:17:20.770Z
PURPOSE
Execute a launch plan that compounds signal and revenue without burning operator time; enforce explicit phase gates.
WHO THIS IS FOR
Operators building offers, funnels, content systems, platform stacks, and automation assets inside RISER Nation.
WHEN TO RUN (PHASE GATE)
Run only when prerequisite inputs exist; do not step-skip. If prerequisites are missing, output the missing list and STOP.
ACCEPTED INPUTS
* Niche / industry and what is being sold (product/service/info/affiliate/community)
* Target customer description (who, where, context)
* Any assets available (site, offer, doc, repo, prompts, competitors, screenshots)
* Constraints (budget, time, tools, compliance, bandwidth)
* Goal + North Star (what success looks like)
REQUIRED INPUTS (MINIMUM)
* Niche + offer intent (what are we selling and to whom)
* Primary platform intent (where we expect attention to exist)
PRIMARY OUTPUTS
* Launch sequence + assets list
* Phase gates (prelaunch/launch/postlaunch)
* PR/Collab decision rules (what to ignore vs when to use)
SECONDARY OUTPUTS
* Assumptions list + risks + what would change the decision
NON-NEGOTIABLE RULES
* Enforce Right Step, Right Time. No step-skipping.
* Protect decisions: if it does not reduce bad decisions or regret, flag it.
* Optimize for long-term operator outcomes over short-term conversion hacks.
* Design for tool/platform churn; build systems that survive churn.
* Prefer ownership of data, logic, and assets (“Dig Your Own Well”).
ROUTING: NEXT SONARS
* 11.) Content Flywheel
ROUTING: OPTIONAL SONARS
* 10.) Social Signal Monitor
FAIL-STATES (STOP / NO-GO)
* Inputs are vague or missing; cannot responsibly proceed.
* Market signal is weak or purely trend-spike without underlying durable demand.
DECISION RULES
* If signal is weak → STOP or pivot niche angle.
* If signal is strong but infra missing → route to Platform Builder.
* If offer unclear → route to Current Scope or Offer Mutation Engine depending on maturity.
DELIVERABLES THIS SONAR CREATES
* A completed, reusable doc artifact inside this sonar folder
OPERATOR REFERENCES (for traceability)
* Ties into your library of AIDA/PAS/AIDCA/Value Ladder/Webinar/Email/Story frameworks as needed.
WINDOW STICKER FEATURES (for pricing page)
* Clear purpose, inputs, outputs, routing, fail states, and QA pass criteria.
QA CHECKLIST (must pass before exit)
* Purpose is one sentence and specific
* Inputs specify minimums and accepted variants
* Outputs are usable by next sonar without follow-up
* Rules include anti-step-skipping guardrails
* Routing includes next + optional sonars
* Fail-states are explicit
SYSTEM PROMPT (COPY/PASTE INTO NEW CHAT)
SYSTEM ROLE:
You are the RISER Nation SONAR Operator for this specific sonar. You must enforce Right Step, Right Time sequencing.

NON-NEGOTIABLES:
- Protect decisions. Reduce regret. No step-skipping.
- If required inputs are missing, output a Missing Inputs list and STOP.
- Outputs must be structured so the next sonar can run without follow-ups.

THIS SONAR PURPOSE:
Execute a launch plan that compounds signal and revenue without burning operator time; enforce explicit phase gates.

ACCEPTED INPUTS:
- Niche / industry and what is being sold (product/service/info/affiliate/community)
- Target customer description (who, where, context)
- Any assets available (site, offer, doc, repo, prompts, competitors, screenshots)
- Constraints (budget, time, tools, compliance, bandwidth)
- Goal + North Star (what success looks like)

REQUIRED INPUTS (MINIMUM):
- Niche + offer intent (what are we selling and to whom)
- Primary platform intent (where we expect attention to exist)

PRIMARY OUTPUTS (MUST PRODUCE):
- Launch sequence + assets list
- Phase gates (prelaunch/launch/postlaunch)
- PR/Collab decision rules (what to ignore vs when to use)

ROUTING:
Next Sonars: 11.) Content Flywheel
Optional Sonars: 10.) Social Signal Monitor

FAIL STATES (STOP CONDITIONS):
- Inputs are vague or missing; cannot responsibly proceed.
- Market signal is weak or purely trend-spike without underlying durable demand.

DELIVERABLE FORMAT:
- Title
- Purpose (one sentence)
- Inputs (minimum + accepted)
- Outputs (primary + secondary)
- Decision Rules + No-Go triggers
- Routing (what sonar runs next and why)
- Checklist (pass/fail)

NOW: Ask for ONLY the minimum missing inputs, then execute.


---- AUTO-ADDED SECTIONS (Completeness Compiler) ----
MINIMUM INPUTS
* Niche / business type
* Offer intent (what you want to sell, to whom, and why now)
* Primary constraint (time, budget, team, tooling, compliance)
* Links/screenshots/notes (optional but improves quality)
Native document text — lossless original as JSON
{
  "source_text": "\n9.) Launch Current \u2014 RISERnation SONAR System Prompt\nLast Updated (UTC): 2025-12-19T23:17:20.770Z\nPURPOSE\nExecute a launch plan that compounds signal and revenue without burning operator time; enforce explicit phase gates.\nWHO THIS IS FOR\nOperators building offers, funnels, content systems, platform stacks, and automation assets inside RISER Nation.\nWHEN TO RUN (PHASE GATE)\nRun only when prerequisite inputs exist; do not step-skip. If prerequisites are missing, output the missing list and STOP.\nACCEPTED INPUTS\nNiche / industry and what is being sold (product/service/info/affiliate/community)\nTarget customer description (who, where, context)\nAny assets available (site, offer, doc, repo, prompts, competitors, screenshots)\nConstraints (budget, time, tools, compliance, bandwidth)\nGoal + North Star (what success looks like)\nREQUIRED INPUTS (MINIMUM)\nNiche + offer intent (what are we selling and to whom)\nPrimary platform intent (where we expect attention to exist)\nPRIMARY OUTPUTS\nLaunch sequence + assets list\nPhase gates (prelaunch/launch/postlaunch)\nPR/Collab decision rules (what to ignore vs when to use)\nSECONDARY OUTPUTS\nAssumptions list + risks + what would change the decision\nNON-NEGOTIABLE RULES\nEnforce Right Step, Right Time. No step-skipping.\nProtect decisions: if it does not reduce bad decisions or regret, flag it.\nOptimize for long-term operator outcomes over short-term conversion hacks.\nDesign for tool/platform churn; build systems that survive churn.\nPrefer ownership of data, logic, and assets (\u201cDig Your Own Well\u201d).\nROUTING: NEXT SONARS\n11.) Content Flywheel\nROUTING: OPTIONAL SONARS\n10.) Social Signal Monitor\nFAIL-STATES (STOP / NO-GO)\nInputs are vague or missing; cannot responsibly proceed.\nMarket signal is weak or purely trend-spike without underlying durable demand.\nDECISION RULES\nIf signal is weak \u2192 STOP or pivot niche angle.\nIf signal is strong but infra missing \u2192 route to Platform Builder.\nIf offer unclear \u2192 route to Current Scope or Offer Mutation Engine depending on maturity.\nDELIVERABLES THIS SONAR CREATES\nA completed, reusable doc artifact inside this sonar folder\nOPERATOR REFERENCES (for traceability)\nTies into your library of AIDA/PAS/AIDCA/Value Ladder/Webinar/Email/Story frameworks as needed.\nWINDOW STICKER FEATURES (for pricing page)\nClear purpose, inputs, outputs, routing, fail states, and QA pass criteria.\nQA CHECKLIST (must pass before exit)\nPurpose is one sentence and specific\nInputs specify minimums and accepted variants\nOutputs are usable by next sonar without follow-up\nRules include anti-step-skipping guardrails\nRouting includes next + optional sonars\nFail-states are explicit\nSYSTEM PROMPT (COPY/PASTE INTO NEW CHAT)\nSYSTEM ROLE:\u000bYou are the RISER Nation SONAR Operator for this specific sonar. You must enforce Right Step, Right Time sequencing.\u000b\u000bNON-NEGOTIABLES:\u000b- Protect decisions. Reduce regret. No step-skipping.\u000b- If required inputs are missing, output a Missing Inputs list and STOP.\u000b- Outputs must be structured so the next sonar can run without follow-ups.\u000b\u000bTHIS SONAR PURPOSE:\u000bExecute a launch plan that compounds signal and revenue without burning operator time; enforce explicit phase gates.\u000b\u000bACCEPTED INPUTS:\u000b- Niche / industry and what is being sold (product/service/info/affiliate/community)\u000b- Target customer description (who, where, context)\u000b- Any assets available (site, offer, doc, repo, prompts, competitors, screenshots)\u000b- Constraints (budget, time, tools, compliance, bandwidth)\u000b- Goal + North Star (what success looks like)\u000b\u000bREQUIRED INPUTS (MINIMUM):\u000b- Niche + offer intent (what are we selling and to whom)\u000b- Primary platform intent (where we expect attention to exist)\u000b\u000bPRIMARY OUTPUTS (MUST PRODUCE):\u000b- Launch sequence + assets list\u000b- Phase gates (prelaunch/launch/postlaunch)\u000b- PR/Collab decision rules (what to ignore vs when to use)\u000b\u000bROUTING:\u000bNext Sonars: 11.) Content Flywheel\u000bOptional Sonars: 10.) Social Signal Monitor\u000b\u000bFAIL STATES (STOP CONDITIONS):\u000b- Inputs are vague or missing; cannot responsibly proceed.\u000b- Market signal is weak or purely trend-spike without underlying durable demand.\u000b\u000bDELIVERABLE FORMAT:\u000b- Title\u000b- Purpose (one sentence)\u000b- Inputs (minimum + accepted)\u000b- Outputs (primary + secondary)\u000b- Decision Rules + No-Go triggers\u000b- Routing (what sonar runs next and why)\u000b- Checklist (pass/fail)\u000b\u000bNOW: Ask for ONLY the minimum missing inputs, then execute.\n\n---- AUTO-ADDED SECTIONS (Completeness Compiler) ----\nMINIMUM INPUTS\nNiche / business type\nOffer intent (what you want to sell, to whom, and why now)\nPrimary constraint (time, budget, team, tooling, compliance)\nLinks/screenshots/notes (optional but improves quality)\n"
}
Native document text — display copy with control characters represented

9.) Launch Current — RISERnation SONAR System Prompt
Last Updated (UTC): 2025-12-19T23:17:20.770Z
PURPOSE
Execute a launch plan that compounds signal and revenue without burning operator time; enforce explicit phase gates.
WHO THIS IS FOR
Operators building offers, funnels, content systems, platform stacks, and automation assets inside RISER Nation.
WHEN TO RUN (PHASE GATE)
Run only when prerequisite inputs exist; do not step-skip. If prerequisites are missing, output the missing list and STOP.
ACCEPTED INPUTS
Niche / industry and what is being sold (product/service/info/affiliate/community)
Target customer description (who, where, context)
Any assets available (site, offer, doc, repo, prompts, competitors, screenshots)
Constraints (budget, time, tools, compliance, bandwidth)
Goal + North Star (what success looks like)
REQUIRED INPUTS (MINIMUM)
Niche + offer intent (what are we selling and to whom)
Primary platform intent (where we expect attention to exist)
PRIMARY OUTPUTS
Launch sequence + assets list
Phase gates (prelaunch/launch/postlaunch)
PR/Collab decision rules (what to ignore vs when to use)
SECONDARY OUTPUTS
Assumptions list + risks + what would change the decision
NON-NEGOTIABLE RULES
Enforce Right Step, Right Time. No step-skipping.
Protect decisions: if it does not reduce bad decisions or regret, flag it.
Optimize for long-term operator outcomes over short-term conversion hacks.
Design for tool/platform churn; build systems that survive churn.
Prefer ownership of data, logic, and assets (“Dig Your Own Well”).
ROUTING: NEXT SONARS
11.) Content Flywheel
ROUTING: OPTIONAL SONARS
10.) Social Signal Monitor
FAIL-STATES (STOP / NO-GO)
Inputs are vague or missing; cannot responsibly proceed.
Market signal is weak or purely trend-spike without underlying durable demand.
DECISION RULES
If signal is weak → STOP or pivot niche angle.
If signal is strong but infra missing → route to Platform Builder.
If offer unclear → route to Current Scope or Offer Mutation Engine depending on maturity.
DELIVERABLES THIS SONAR CREATES
A completed, reusable doc artifact inside this sonar folder
OPERATOR REFERENCES (for traceability)
Ties into your library of AIDA/PAS/AIDCA/Value Ladder/Webinar/Email/Story frameworks as needed.
WINDOW STICKER FEATURES (for pricing page)
Clear purpose, inputs, outputs, routing, fail states, and QA pass criteria.
QA CHECKLIST (must pass before exit)
Purpose is one sentence and specific
Inputs specify minimums and accepted variants
Outputs are usable by next sonar without follow-up
Rules include anti-step-skipping guardrails
Routing includes next + optional sonars
Fail-states are explicit
SYSTEM PROMPT (COPY/PASTE INTO NEW CHAT)
SYSTEM ROLE:
You are the RISER Nation SONAR Operator for this specific sonar. You must enforce Right Step, Right Time sequencing.

NON-NEGOTIABLES:
- Protect decisions. Reduce regret. No step-skipping.
- If required inputs are missing, output a Missing Inputs list and STOP.
- Outputs must be structured so the next sonar can run without follow-ups.

THIS SONAR PURPOSE:
Execute a launch plan that compounds signal and revenue without burning operator time; enforce explicit phase gates.

ACCEPTED INPUTS:
- Niche / industry and what is being sold (product/service/info/affiliate/community)
- Target customer description (who, where, context)
- Any assets available (site, offer, doc, repo, prompts, competitors, screenshots)
- Constraints (budget, time, tools, compliance, bandwidth)
- Goal + North Star (what success looks like)

REQUIRED INPUTS (MINIMUM):
- Niche + offer intent (what are we selling and to whom)
- Primary platform intent (where we expect attention to exist)

PRIMARY OUTPUTS (MUST PRODUCE):
- Launch sequence + assets list
- Phase gates (prelaunch/launch/postlaunch)
- PR/Collab decision rules (what to ignore vs when to use)

ROUTING:
Next Sonars: 11.) Content Flywheel
Optional Sonars: 10.) Social Signal Monitor

FAIL STATES (STOP CONDITIONS):
- Inputs are vague or missing; cannot responsibly proceed.
- Market signal is weak or purely trend-spike without underlying durable demand.

DELIVERABLE FORMAT:
- Title
- Purpose (one sentence)
- Inputs (minimum + accepted)
- Outputs (primary + secondary)
- Decision Rules + No-Go triggers
- Routing (what sonar runs next and why)
- Checklist (pass/fail)

NOW: Ask for ONLY the minimum missing inputs, then execute.

---- AUTO-ADDED SECTIONS (Completeness Compiler) ----
MINIMUM INPUTS
Niche / business type
Offer intent (what you want to sell, to whom, and why now)
Primary constraint (time, budget, team, tooling, compliance)
Links/screenshots/notes (optional but improves quality)

Supporting document for lesson 03.4: BUILD_SOP — Launch Current™

Launch Current: build a launch that passes six evidence gates

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 07.1, 07.4, 09.4 and 12.2. Video recording to be added.

Turn launch planning into an inspectable sequence

Launch Current's build SOP describes six gates, numbered zero through five. Its objective is to accept inputs, enforce those gates and hand useful information to Content Flywheel and Portfolio Governor. “Deterministic handoffs” means the receiving process gets a consistent, inspectable package. It does not mean revenue is predictable or that the named systems have already been implemented.

The source says to treat a launch like release engineering: test a small release before organizing a big event. The operating examples below explain how to apply the gates. They are authored teaching extensions, not extra thresholds supplied by the SOP.

Supporting source: BUILD SOP — Launch Current, objective and notes

Gate 0. Establish the niche, offer, buyer and promised outcome

Write four statements: the market you serve, what you sell, who is buying and the change you promise to help them achieve. A product name alone does not answer all four. An authored example is a workshop for independent instructors who want to outline their first paid group session. The workshop is the offer, instructors are the buyer, their business context defines the niche, and the completed session outline is the intended outcome.

If one of these inputs is missing, request that minimum information before proceeding. Do not fill the gap with an invented audience or an unsupported promise. Other Launch Current documents use additional input lists. Preserve those requirements where applicable rather than assuming this four-item gate replaces every related intake.

Supporting source: Gate 0 — Intake Completeness

Gate 1. Verify the offer anchor and proof plan

The Anchor Point dependency requires a core promise, a proof plan and anti-fit filters. State the outcome in language the intended buyer can understand. Then identify how you would support that promise: a relevant demonstration, a clearly described pilot or other evidence appropriate to the claim. A plan to collect proof is not existing proof.

Anti-fit filters explain who should not buy, what prerequisites are required and which expectations the offer does not support. For example, a workshop requiring an existing subject area should say so before enrollment. That is an authored example. The supplied SOP names Anchor Point but does not include its entire framework or certify any particular promise.

Connect this gate to value-focused offer design by asking whether the outcome, expected effort and expected time are clear. Connect it to hook, story and offer teaching by keeping the hook consistent with the real promise and available evidence. Those applications do not establish authorship of this SOP by Brunson or Hormozi.

Supporting source: Gate 1 — Offer Anchor Verification

Gate 2. Identify and test all five asset groups

The source lists a landing or offer page, an opt-in or checkout, an email or DM sequence, a minimum content set containing an origin piece and derivatives, and tracking through UTMs, analytics and CRM tagging. Identify each asset and record whether it exists, what remains to build and how its relevant behavior will be checked.

A page should explain the same offer that the next action delivers. An opt-in should provide the promised resource, while checkout should identify what is being purchased. A sequence should support the actual stage of the buyer journey. Derivative content should retain the origin piece's meaning. Tracking should distinguish the campaign and destination without placing personal information into public tracking parameters.

An authored build order is promise and page, destination and delivery, sequence, origin content and derivatives, then a complete journey check including tracking. The source requires a build-order checklist but does not prescribe this exact order. Test the relevant path before calling it ready. A listed asset name is not evidence of a working asset.

Supporting source: Gate 2 — Launch Asset Readiness

Gate 3. Choose one or two primary platforms and a feasible cadence

The SOP explicitly starts with one or two primary platforms. Name the selected channels, content formats and posting schedule. Base that plan on where the intended audience can be reached and what the team can sustain. A platform list without owners or a schedule is not yet an operating plan.

For an authored practice exercise, assign an owner and due date to each origin piece and derivative. These fields make the schedule usable; they are not additional mandatory fields quoted from the source. The SOP does not give a universal daily posting frequency or a guarantee that more posting produces more sales.

Supporting source: Gate 3 — Channel Plan and Cadence

Gate 4. Define the test window, success and reasons to change course

Before the small release, define the measurement period, what success means, kill criteria and pivot triggers. Kill criteria tell you when to stop the test; pivot triggers identify when a particular assumption should be reconsidered. A weak result does not automatically tell you whether the audience, message, offer, channel or delivery caused it.

The SOP supplies no numerical success threshold, budget, sample size or attribution rule. Set those as explicit working decisions appropriate to the test. Record both the numerator and denominator for any rate and use comparable periods. Separate observed results from forecasts. If evidence is too limited, record an inconclusive result instead of labeling the offer a winner.

Supporting source: Gate 4 — Measurement and Pivot Triggers

Gate 5. Preserve what happened and hand off useful learning

If the test meets its stated winning criteria, package the learning for Content Flywheel. Preserve the message, audience, format, offer, result and conditions that produced the observation so the next content iteration has a basis. The source names this destination but does not supply its complete production procedure.

Store the truth state and decision log in Portfolio Governor. Explain what is known now, what remains assumed, the decision made and what evidence would change it. “Winning” should refer to the defined test, not a claim that indefinite scale is guaranteed. Preserve unsuccessful or inconclusive observations as well; otherwise the decision log hides evidence that could matter later.

Supporting source: Gate 5 — Handoff and Scale

Produce the five required outputs

Deliver a gated launch plan, an asset checklist in build order, a headline/hook test set, a measurement and pivot plan, and a JSON handoff payload. The headline test set should identify which message assumption changes between versions; changing everything at once makes interpretation harder. That testing advice is an authored application.

The source requires JSON but does not provide its schema. An authored schema could contain offer, buyer, promise, gate status, asset references, test window, observed metrics, decision and open questions. Agree on the receiving system's required fields before automating a handoff. Do not claim that this illustrative field list is an existing integration or that saving JSON triggers an action.

Supporting source: Outputs — Required

Choose the tooling tier that matches the work

The entry tier lists Google Docs or Sheets, native analytics and UTM discipline. The mid tier lists Zapier, Make or n8n, link tracking, heatmaps and a lightweight CRM. The pro tier lists multi-agent orchestration, pipeline dashboards and attribution tooling. These are the source's categories, not verified current product capabilities, purchase recommendations or instructions to activate automation.

Start by making the gates and outputs work in a form you can inspect. More tools do not repair an unclear promise, missing asset or undefined test. If a later implementation needs a particular feature, verify its current official documentation at that time.

Supporting source: Tooling Tiers and small-release note

Practice and lesson applications

For lesson 03.4, complete the offer and readiness gates. For 07.1, build the origin piece, derivatives and hook tests. For 07.4, turn the formats and cadence into a feasible schedule. For 09.4, document measurement and the decision to continue, stop or pivot. For 12.2, prepare a consistent handoff and decision log. These applications preserve the spreadsheet assignments without changing the six-gate source sequence.

Submit all six gate decisions and all five required outputs. Mark a missing dependency as missing. The complete source remains available through the links above; the lesson's examples are a way to practice the procedure, not evidence that a real launch has passed it.

Complete original source appendices

Open the assigned original: BUILD_SOP — Launch Current™

Complete readable source
# BUILD SOP — Launch Current™

## Objective
Build the Launch Current™ SONAR so it can accept inputs, enforce phase gates, and output deterministic handoffs to Content Flywheel and Portfolio Governor.

## Phase Gates (Explicit)
### Gate 0 — Intake Completeness
- Required: niche + offer + buyer + promised outcome
- If missing: request minimum viable inputs

### Gate 1 — Offer Anchor Verification (Anchor Point dependency)
- Confirm core promise and proof plan exist
- Confirm anti-fit filters exist

### Gate 2 — Launch Asset Readiness
- Identify missing assets:
 - Landing page or offer page
 - Opt-in or checkout
 - Email/DM sequence
 - Minimum content set (origin + derivatives)
 - Tracking (UTMs, analytics, CRM tagging)

### Gate 3 — Channel Plan + Cadence
- Choose 1–2 primary platforms first
- Confirm content formats + posting schedule

### Gate 4 — Measurement + Pivot Triggers
- Define what success looks like for the test window
- Define kill criteria and pivot triggers

### Gate 5 — Handoff & Scale
- If winning: package learnings into Content Flywheel
- Store truth state + decision log in Portfolio Governor

## Outputs (Required)
- Launch plan (gated)
- Asset checklist (build order)
- Headline/hook test set
- Measurement + pivots
- Handoff payload JSON

## Tooling Tiers (Entry / Mid / Pro)
- Entry: Google Docs/Sheets + native analytics + UTM discipline
- Mid: Zapier/Make/n8n + link tracking + heatmaps + lightweight CRM
- Pro: multi-agent orchestration + pipeline dashboards + attribution tooling

## Notes
- Treat launch like release engineering.
- No ‘big event’ until the system proves signal with a small release.
Native document text — lossless original as JSON
{
  "source_text": "\n# BUILD SOP \u2014 Launch Current\u2122\u000b\u000b## Objective\u000bBuild the Launch Current\u2122 SONAR so it can accept inputs, enforce phase gates, and output deterministic handoffs to Content Flywheel and Portfolio Governor.\u000b\u000b## Phase Gates (Explicit)\u000b### Gate 0 \u2014 Intake Completeness\u000b- Required: niche + offer + buyer + promised outcome\u000b- If missing: request minimum viable inputs\u000b\u000b### Gate 1 \u2014 Offer Anchor Verification (Anchor Point dependency)\u000b- Confirm core promise and proof plan exist\u000b- Confirm anti-fit filters exist\u000b\u000b### Gate 2 \u2014 Launch Asset Readiness\u000b- Identify missing assets:\u000b  - Landing page or offer page\u000b  - Opt-in or checkout\u000b  - Email/DM sequence\u000b  - Minimum content set (origin + derivatives)\u000b  - Tracking (UTMs, analytics, CRM tagging)\u000b\u000b### Gate 3 \u2014 Channel Plan + Cadence\u000b- Choose 1\u20132 primary platforms first\u000b- Confirm content formats + posting schedule\u000b\u000b### Gate 4 \u2014 Measurement + Pivot Triggers\u000b- Define what success looks like for the test window\u000b- Define kill criteria and pivot triggers\u000b\u000b### Gate 5 \u2014 Handoff & Scale\u000b- If winning: package learnings into Content Flywheel\u000b- Store truth state + decision log in Portfolio Governor\u000b\u000b## Outputs (Required)\u000b- Launch plan (gated)\u000b- Asset checklist (build order)\u000b- Headline/hook test set\u000b- Measurement + pivots\u000b- Handoff payload JSON\u000b\u000b## Tooling Tiers (Entry / Mid / Pro)\u000b- Entry: Google Docs/Sheets + native analytics + UTM discipline\u000b- Mid: Zapier/Make/n8n + link tracking + heatmaps + lightweight CRM\u000b- Pro: multi-agent orchestration + pipeline dashboards + attribution tooling\u000b\u000b## Notes\u000b- Treat launch like release engineering.\u000b- No \u2018big event\u2019 until the system proves signal with a small release.\u000b\n"
}
Native document text — display copy with control characters represented

# BUILD SOP — Launch Current™

## Objective
Build the Launch Current™ SONAR so it can accept inputs, enforce phase gates, and output deterministic handoffs to Content Flywheel and Portfolio Governor.

## Phase Gates (Explicit)
### Gate 0 — Intake Completeness
- Required: niche + offer + buyer + promised outcome
- If missing: request minimum viable inputs

### Gate 1 — Offer Anchor Verification (Anchor Point dependency)
- Confirm core promise and proof plan exist
- Confirm anti-fit filters exist

### Gate 2 — Launch Asset Readiness
- Identify missing assets:
  - Landing page or offer page
  - Opt-in or checkout
  - Email/DM sequence
  - Minimum content set (origin + derivatives)
  - Tracking (UTMs, analytics, CRM tagging)

### Gate 3 — Channel Plan + Cadence
- Choose 1–2 primary platforms first
- Confirm content formats + posting schedule

### Gate 4 — Measurement + Pivot Triggers
- Define what success looks like for the test window
- Define kill criteria and pivot triggers

### Gate 5 — Handoff & Scale
- If winning: package learnings into Content Flywheel
- Store truth state + decision log in Portfolio Governor

## Outputs (Required)
- Launch plan (gated)
- Asset checklist (build order)
- Headline/hook test set
- Measurement + pivots
- Handoff payload JSON

## Tooling Tiers (Entry / Mid / Pro)
- Entry: Google Docs/Sheets + native analytics + UTM discipline
- Mid: Zapier/Make/n8n + link tracking + heatmaps + lightweight CRM
- Pro: multi-agent orchestration + pipeline dashboards + attribution tooling

## Notes
- Treat launch like release engineering.
- No ‘big event’ until the system proves signal with a small release.

Supporting document for lesson 03.4: CNX.3.11.13 – Offer_Dev_Template_Offer_Recon_Tracker.xlsx

Offer reconnaissance: turn competitor observations into an offer decision

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 04.1, 05.1, 05.4 and 08.1. Video recording to be added.

Start with what the workbook actually contains

Open the Offer Recon worksheet. The supplied workbook contains thirteen column headings in A1:M1 and no completed competitor records or formulas. Its formatted range extends to Z1, but those extra cells do not supply additional research. This is a research template. It does not establish demand, competitor sales, profitability or the quality of a particular offer.

We will complete one row for each observed offer. When a competitor sells several materially different offers, use separate rows. The research procedure and examples below are instructional additions; they are not populated findings from the original workbook. Keep the original file unchanged and work in your own copy.

Open the assigned Offer Development and Offer Recon Tracker workbook

1. Niche, competitor and offer name: identify the comparison

Column A, Niche, identifies the market segment. Be specific enough to compare similar buyers and problems. “Education” is broad; “a first paid workshop for independent fitness instructors” describes a useful research boundary. That phrase is an invented teaching example, not a finding in this source.

Column B, Competitor / Brand, records the organization or seller. Column C, Offer Name, records the exact named product or service. Distinguish the brand from its offer so you do not accidentally combine a free guide, a course and a coaching package into one comparison. In Notes, retain the source URL and observation date so another person can check the same offer.

Supporting worksheet: Niche, Competitor / Brand and Offer Name, cells A1:C1

2. Hook, product and delivery: separate the message from the purchase

Column D, Hook / Headline, captures the opening message that attracts attention. Explain the audience, problem or desired outcome it emphasizes. A compelling headline is a messaging observation, not proof that the promised outcome occurs.

Column E, Core Product, distinguishes a course, ebook, template or coaching offer. Column F, Delivery Format, distinguishes PDF, video, live delivery or community access. These categories can overlap. A course may include video and a live session, while coaching may include a community. Record the actual combination and the limits of what you can observe.

This separation helps apply the training's hook, story and offer structure: the headline introduces the idea, supporting explanation makes its relevance understandable, and the actual offer specifies what the buyer receives. The spreadsheet itself does not supply a story script or attribute this research template to Russell Brunson.

Supporting worksheet: Hook / Headline, Core Product and Delivery Format, cells D1:F1

3. Price, upgrades and funnel flow: document the buying sequence

Column G, Price Point, records the observed price. In Notes, specify currency, whether payment is one-time or recurring, any payment schedule, and the date observed. If the price is unavailable, write “not observed” rather than zero. A payment installment is not automatically the total purchase price.

Column H, Upsells / Downsells, records additional or alternative offers visible in the buying journey. An upsell may add services or access; a downsell may offer a smaller scope. Do not invent an unseen checkout offer or purchase access merely to complete a row.

Column I, Funnel Flow, provides the example sequence Lead Magnet → Tripwire → Core → Upsell. A lead magnet introduces a useful resource; a tripwire is a smaller introductory paid offer; the core offer provides the main purchase; an upsell adds an optional next purchase. Treat that sequence as the template's example. Record a different observed sequence faithfully. A direct application or a direct core purchase should not be forced into four stages it does not have.

For lesson 05.4, trace the next action at each stage and the destination it reaches. For lesson 08.1, identify what must be handed from one stage to the next. Those are teaching applications of the assignment, not evidence that an automation already exists.

Supporting worksheet: Price Point, Upsells / Downsells and Funnel Flow, cells G1:I1

4. Mechanism, strengths and gaps: make an evidence-based comparison

Column J, Unique Mechanism / Angle, records the explanation for how the offer claims to produce its result, or the perspective that differentiates its message. A branded name alone does not establish a unique mechanism. Describe what the seller actually explains and label your interpretation separately.

Column K, Strengths, records useful observed features. For example, a visible sample lesson can make delivery easier to assess. Column L, Weaknesses / Gaps, records a specific limitation in the available evidence or offer. “I could not find a delivery schedule on the inspected page” is supportable. “Their delivery is poor” is not justified by that absence.

Use the value-focused approach discussed in the training to ask whether a feature makes the desired outcome clearer, improves confidence in achieving it, shortens the expected wait, or reduces the customer's effort. These are analytical questions. They do not turn a competitor's promise into verified results or justify inventing proof. The original workbook does not supply a numerical value equation, weighting system or automatic winner score.

Supporting worksheet: Unique Mechanism / Angle, Strengths and Weaknesses / Gaps, cells J1:L1

5. Notes: make every observation traceable

Column M, Notes, holds context that prevents a misleading comparison. Include the source link, access date, what was directly visible, what remains unknown, and any reason two offers are not comparable. Separate quoted claims, your paraphrase and your own inference. Do not treat a testimonial as a typical result without evidence supporting that conclusion.

The template has no separate URL, evidence-status or date columns. You can preserve those details in Notes without pretending the original workbook contains additional fields. When citing a price or promise in your lesson assignment, link the exact page that supports that point.

Supporting worksheet: Notes, cell M1

Apply the worksheet to the assigned lessons

For 03.4, use the research to identify an offer assumption worth testing before launch. For 04.1, use the headline, product and mechanism comparison to sharpen positioning. For 05.1, compare what is included at the observed price and distinguish valuable additions from unsupported bonuses. For 05.4, trace the funnel stages and calls to action. For 08.1, document the offer and delivery requirements that the operating process must support. Keep these outputs grounded in the same thirteen original fields.

An authored practice exercise is to research three publicly visible offers for the same audience, complete every field with an observation or an explicit unknown, and write one proposed test. Three is a practice choice, not a required threshold in the source. State the assumption, evidence, proposed change and what observation would cause you to reconsider it. A competitor's existence establishes that an offer is being presented; it does not by itself establish that your proposed offer will sell.

Return to the complete assigned research template

Completion check

Your practice submission should identify the niche, competitor, offer, hook, product, delivery, price, upsells or downsells, funnel flow, mechanism or angle, strengths, gaps and notes. Each factual claim should have an inspectable source. Missing information should remain visible. Keep the completed exercise separate from the preserved original header-only template.

Complete original source appendices

Open the assigned original: CNX.3.11.13 – Offer_Dev_Template_Offer_Recon_Tracker.xlsx

Complete readable source
,Niche,Competitor / Brand,Offer Name,Hook / Headline,"Core Product (Course, Ebook, Template, Coaching)","Delivery Format (PDF, Video, Live, Community)",Price Point,Upsells / Downsells,Funnel Flow (Lead Magnet → Tripwire → Core → Upsell),Unique Mechanism / Angle,Strengths,Weaknesses / Gaps,Notes
Original worksheet: Offer Recon
NicheCompetitor / BrandOffer NameHook / HeadlineCore Product (Course, Ebook, Template, Coaching)Delivery Format (PDF, Video, Live, Community)Price PointUpsells / DownsellsFunnel Flow (Lead Magnet → Tripwire → Core → Upsell)Unique Mechanism / AngleStrengthsWeaknesses / GapsNotes
Complete workbook cell and structure inspection
{
  "id": "D0983",
  "sha256": "019f47c2951906837b404555e26417e18486c893af1be9d12fe69d8d9ac747df",
  "members": [
    "xl/drawings/drawing1.xml",
    "xl/worksheets/sheet1.xml",
    "xl/worksheets/_rels/sheet1.xml.rels",
    "docProps/core.xml",
    "xl/theme/theme1.xml",
    "xl/sharedStrings.xml",
    "xl/styles.xml",
    "xl/workbook.xml",
    "xl/_rels/workbook.xml.rels",
    "_rels/.rels",
    "xl/metadata",
    "[Content_Types].xml"
  ],
  "media": [],
  "sheets": [
    {
      "name": "Offer Recon",
      "state": "visible",
      "dimension": "A1:Z1",
      "cells": [
        {
          "cell": "A1",
          "value": "Niche",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B1",
          "value": "Competitor / Brand",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C1",
          "value": "Offer Name",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D1",
          "value": "Hook / Headline",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E1",
          "value": "Core Product (Course, Ebook, Template, Coaching)",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "F1",
          "value": "Delivery Format (PDF, Video, Live, Community)",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "G1",
          "value": "Price Point",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "H1",
          "value": "Upsells / Downsells",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "I1",
          "value": "Funnel Flow (Lead Magnet → Tripwire → Core → Upsell)",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "J1",
          "value": "Unique Mechanism / Angle",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "K1",
          "value": "Strengths",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "L1",
          "value": "Weaknesses / Gaps",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "M1",
          "value": "Notes",
          "type": "s",
          "link": null,
          "comment": null
        }
      ],
      "merges": [],
      "validation": "<openpyxl.worksheet.datavalidation.DataValidationList object>\nParameters:\ndisablePrompts=None, xWindow=None, yWindow=None, count=0, dataValidation=[]",
      "tables": []
    }
  ]
}

Supporting document for lesson 03.4: CNX.6.9.6.4 – Launch_Readiness_Master_Checklist.docx

Launch readiness: verify the assets behind a checklist

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 05.1, 07.1, 07.4 and 09.4. Video recording to be added.

Read the status as a source claim

The Brain-Driven Success System checklist marks eighteen asset rows READY. It also states that core launch components, funnels, emails, curriculum, bonuses and branding are 100% ready, and describes a professional, world-class system that can scale without bottlenecks. These are statements in the original document. The checklist does not supply evidence that the current RISER NATION pages, media or automations are complete, and its confidence statement is not a performance guarantee.

Use the inventory below to ask what exists, where it is, whether it matches the offer and how it has been checked. This verification procedure is an authored teaching application. Preserve the original READY statuses in the appendix while keeping your present assessment separate.

Supporting source: Launch Readiness Master Checklist and original status statements

1. Check all four audience workbooks

Folder 04 lists the Brain Filters Self-Diagnosis Quiz, Maslow Needs Mapping Worksheet, Daily Opportunity Tracker and Emotional State Reset Journal. Open each actual asset and check its instructions, fields and relationship to the lesson using it. A quiz needs understandable questions and a clear explanation of its results. A mapping worksheet needs usable prompts. A tracker needs a defined observation and recording process. A journal needs clear reflection instructions.

The checklist gives these names but not their complete exercises, scoring rules or evidence. Do not infer a validated psychological assessment or medical benefit from a title. If an asset body cannot be located, keep the gap visible rather than writing invented questions and calling them the original.

Supporting source: Folder 04 — Audience Workbooks, four rows

2. Align teaching decks and speaking notes

Folder 05 groups four decks in one row: Brain Filters, Maslow, Chemistry and Opportunity Spotting. Verify all four separately even though the checklist uses one status. Folder 06 lists Webinar + Talk Scripts. Match the actual script to the deck, demonstrations and call to action used in the session. Names alone do not establish that slide text, presenter notes or recordings exist.

For lesson 07.1, the practical output is a clear relationship between the teaching sequence and its supporting assets. For 07.4, determine which presentation format and delivery schedule the verified assets support. These are assigned-lesson applications, not additional source files.

Supporting source: Folders 05 and 06 — decks and scripts

3. Reconcile the four marketing-copy assets

Folder 07 lists Brain Reset Email Sequence, Landing Page Copy, Sales Page Copy and Social Media Promo Captions as four distinct rows. Review the sequence as a sequence, including the next action each message supports. Compare the landing page's promise with the resource or purchase delivered. Check that the sales page identifies the actual offer and that captions do not expand its claims beyond the evidence.

Apply the hook, story and offer approach by keeping attention, explanation and purchase terms consistent across these assets. Apply value-focused offer thinking by making the intended outcome, delivery, effort and expected timing understandable. These connections are teaching applications; the source does not provide the complete Brunson or Hormozi frameworks or attribute this checklist to them.

Supporting source: Folder 07 — four marketing-copy rows

4. Inspect lead magnets, curriculum, bonuses and assessment

Folder 08 groups a Ritual Guide, 30-Day Prompts, Cheatsheet and Checklist. Verify all four items and their promised delivery. Folder 09 lists a Full Course Outline + 5 Module Scripts. Confirm that each of those five scripts can be located. This legacy product structure does not replace the twelve-course spreadsheet map governing RISER NATION.

Folder 10 groups a Mini-Course Outline, Printables and Swipe File. Distinguish an outline from completed lessons. A bonus should help the buyer use the offer, not merely add an unsupported value claim. Folder 11 lists a Final Knowledge Quiz + Completion Certificate. The assessment should relate to taught material, and certificate wording should describe the actual completion requirement. The source does not establish professional accreditation.

Supporting source: Folders 08–11 — lead magnets, curriculum, bonuses and assessment

5. Verify operations, branding and the launch calendar

Folder 12 groups Funnel Flow, Email Automations and Tech Stack. A flow diagram and a working automation are different deliverables. Locate the actual configuration and verify the relevant user journey before labeling it operational. Reading this checklist does not authorize sending messages or activating its proposed automations.

Folder 13 groups Brand Voice, Palette, Mood Board and Logo Concepts. Check that the actual pages use the intended identity. A logo concept is not necessarily an approved final logo. Folder 14 groups Pre-Launch Checklist, Launch Calendar and Post-Launch Plan. Confirm that preparation, release and follow-up each have a clear action and owner. Owners and evidence checks are authored implementation aids, not fields present in the original table.

Folder 15 groups a 90-Day Growth Roadmap, Partnerships Strategy and Future Funnels. A strategy document does not prove that partnerships exist or future funnels have launched. For lesson 09.4, compare any expansion proposal with observed results and unresolved delivery work before treating it as ready to scale.

Supporting source: Folders 12–15 — operations, identity, launch and growth

6. Preserve all five optional enhancements and their purposes

The second source table lists fully designed Canva templates for faster brand visual rollouts; a video sales letter for improving sales-page conversion; the full Brain Reset Booster mini-course for upsell optimization; a live masterclass recording for event-based lead generation; and a mobile app community, with Circle and Skool named, for alumni engagement.

Those are proposed purposes, not demonstrated improvements. Templates may support production consistency, but a VSL must still communicate an accurate offer. A full mini-course requires more than its outline. A recording must actually exist before it can be embedded. A proposed community needs an operating plan and accessible destination. The source labels these enhancements optional and future phase. Do not make them mandatory prerequisites merely because they appear in the inventory.

Supporting source: Optional Enhancements table, five items and purposes

Practice: replace assumed readiness with evidence

For each of the eighteen core rows, create a separate review note containing the actual asset link, what was inspected, the inspection date and the remaining issue if any. Expand grouped rows so every named asset receives attention. Record the five optional enhancements separately with the decision to defer or develop them. These review fields are an authored exercise and do not change the preserved original checklist.

For lesson 03.4, use the findings in launch planning. For 05.1, reconcile the actual offer and bonuses. For 07.1, locate the scripts and teaching assets. For 07.4, build a feasible release schedule from what exists. For 09.4, review the growth proposal against delivery evidence. A completed review should explain its gaps plainly; it should not repeat “100% READY” merely because that phrase appears in the source.

Return to the complete assigned checklist

Complete original source appendices

Open the assigned original: CNX.6.9.6.4 – Launch_Readiness_Master_Checklist.docx

Complete readable source
Brain-Driven Success System: Launch Readiness Master Checklist
________________


📂 Folder-by-Folder Launch Status
Folder
	Document
	Status
	04 - Audience Workbooks
	Brain Filters Self-Diagnosis Quiz
	READY
	04 - Audience Workbooks
	Maslow Needs Mapping Worksheet
	READY
	04 - Audience Workbooks
	Daily Opportunity Tracker
	READY
	04 - Audience Workbooks
	Emotional State Reset Journal
	READY
	05 - Presentation Slide Decks
	4 Teaching Decks (Brain Filters, Maslow, Chemistry, Opportunity Spotting)
	READY
	06 - Scripts & Speaking Notes
	Webinar + Talk Scripts
	READY
	07 - Marketing Copy
	Brain Reset Email Sequence
	READY
	07 - Marketing Copy
	Landing Page Copy
	READY
	07 - Marketing Copy
	Sales Page Copy
	READY
	07 - Marketing Copy
	Social Media Promo Captions
	READY
	08 - Lead Magnets
	Ritual Guide, 30-Day Prompts, Cheatsheet, Checklist
	READY
	09 - Program Curriculum
	Full Course Outline + 5 Module Scripts
	READY
	10 - Bonuses
	Mini-Course Outline + Printables + Swipe File
	READY
	11 - Assessments & Certificates
	Final Knowledge Quiz + Completion Certificate
	READY
	12 - Tech & Automation Setup
	Funnel Flow, Email Automations, Tech Stack
	READY
	13 - Branding & Visuals
	Brand Voice, Palette, Mood Board, Logo Concepts
	READY
	14 - Launch Plan
	Pre-Launch Checklist, Launch Calendar, Post-Launch Plan
	READY
	15 - Growth & Scaling Strategy
	90-Day Growth Roadmap, Partnerships Strategy, Future Funnels
	READY
	________________


👉 Items That Could Be Added Later (Optional Enhancements)
Item
	Purpose
	Fully designed Canva templates (optional)
	Faster brand visual rollouts
	Video sales letter (VSL)
	Boost conversion on sales page
	Full "Brain Reset Booster" mini-course
	Upsell optimization
	Live Masterclass recording
	Event-based lead generation
	Mobile App Community (Circle, Skool)
	Higher engagement platform for alumni
	________________


🌟 Summary Status
✅ Core Launch Components: 100% READY
 ✅ Funnels, Emails, Curriculum, Bonuses, Branding: 100% READY
 ⭕ Optional Enhancements: Future Phase
________________


🚀 Launch Confidence Statement
You now have a fully professional, world-class launch and growth system ready to deploy with minimal additional setup.
You can confidently launch, grow, and scale without bottlenecks.
________________
Native document text — lossless original as JSON
{
  "source_text": "Brain-Driven Success System: Launch Readiness Master Checklist\n\n\ud83d\udcc2 Folder-by-Folder Launch Status\nFolder\nDocument\nStatus\n04 - Audience Workbooks\nBrain Filters Self-Diagnosis Quiz\nREADY\n04 - Audience Workbooks\nMaslow Needs Mapping Worksheet\nREADY\n04 - Audience Workbooks\nDaily Opportunity Tracker\nREADY\n04 - Audience Workbooks\nEmotional State Reset Journal\nREADY\n05 - Presentation Slide Decks\n4 Teaching Decks (Brain Filters, Maslow, Chemistry, Opportunity Spotting)\nREADY\n06 - Scripts & Speaking Notes\nWebinar + Talk Scripts\nREADY\n07 - Marketing Copy\nBrain Reset Email Sequence\nREADY\n07 - Marketing Copy\nLanding Page Copy\nREADY\n07 - Marketing Copy\nSales Page Copy\nREADY\n07 - Marketing Copy\nSocial Media Promo Captions\nREADY\n08 - Lead Magnets\nRitual Guide, 30-Day Prompts, Cheatsheet, Checklist\nREADY\n09 - Program Curriculum\nFull Course Outline + 5 Module Scripts\nREADY\n10 - Bonuses\nMini-Course Outline + Printables + Swipe File\nREADY\n11 - Assessments & Certificates\nFinal Knowledge Quiz + Completion Certificate\nREADY\n12 - Tech & Automation Setup\nFunnel Flow, Email Automations, Tech Stack\nREADY\n13 - Branding & Visuals\nBrand Voice, Palette, Mood Board, Logo Concepts\nREADY\n14 - Launch Plan\nPre-Launch Checklist, Launch Calendar, Post-Launch Plan\nREADY\n15 - Growth & Scaling Strategy\n90-Day Growth Roadmap, Partnerships Strategy, Future Funnels\nREADY\n\n\ud83d\udc49 Items That Could Be Added Later (Optional Enhancements)\nItem\nPurpose\nFully designed Canva templates (optional)\nFaster brand visual rollouts\nVideo sales letter (VSL)\nBoost conversion on sales page\nFull \"Brain Reset Booster\" mini-course\nUpsell optimization\nLive Masterclass recording\nEvent-based lead generation\nMobile App Community (Circle, Skool)\nHigher engagement platform for alumni\n\n\ud83c\udf1f Summary Status\n\u2705 Core Launch Components: 100% READY\u000b \u2705 Funnels, Emails, Curriculum, Bonuses, Branding: 100% READY\u000b \u2b55 Optional Enhancements: Future Phase\n\n\ud83d\ude80 Launch Confidence Statement\nYou now have a fully professional, world-class launch and growth system ready to deploy with minimal additional setup.\nYou can confidently launch, grow, and scale without bottlenecks.\n\n\n\n"
}
Native document text — display copy with control characters represented
Brain-Driven Success System: Launch Readiness Master Checklist

📂 Folder-by-Folder Launch Status
Folder
Document
Status
04 - Audience Workbooks
Brain Filters Self-Diagnosis Quiz
READY
04 - Audience Workbooks
Maslow Needs Mapping Worksheet
READY
04 - Audience Workbooks
Daily Opportunity Tracker
READY
04 - Audience Workbooks
Emotional State Reset Journal
READY
05 - Presentation Slide Decks
4 Teaching Decks (Brain Filters, Maslow, Chemistry, Opportunity Spotting)
READY
06 - Scripts & Speaking Notes
Webinar + Talk Scripts
READY
07 - Marketing Copy
Brain Reset Email Sequence
READY
07 - Marketing Copy
Landing Page Copy
READY
07 - Marketing Copy
Sales Page Copy
READY
07 - Marketing Copy
Social Media Promo Captions
READY
08 - Lead Magnets
Ritual Guide, 30-Day Prompts, Cheatsheet, Checklist
READY
09 - Program Curriculum
Full Course Outline + 5 Module Scripts
READY
10 - Bonuses
Mini-Course Outline + Printables + Swipe File
READY
11 - Assessments & Certificates
Final Knowledge Quiz + Completion Certificate
READY
12 - Tech & Automation Setup
Funnel Flow, Email Automations, Tech Stack
READY
13 - Branding & Visuals
Brand Voice, Palette, Mood Board, Logo Concepts
READY
14 - Launch Plan
Pre-Launch Checklist, Launch Calendar, Post-Launch Plan
READY
15 - Growth & Scaling Strategy
90-Day Growth Roadmap, Partnerships Strategy, Future Funnels
READY

👉 Items That Could Be Added Later (Optional Enhancements)
Item
Purpose
Fully designed Canva templates (optional)
Faster brand visual rollouts
Video sales letter (VSL)
Boost conversion on sales page
Full "Brain Reset Booster" mini-course
Upsell optimization
Live Masterclass recording
Event-based lead generation
Mobile App Community (Circle, Skool)
Higher engagement platform for alumni

🌟 Summary Status
✅ Core Launch Components: 100% READY
 ✅ Funnels, Emails, Curriculum, Bonuses, Branding: 100% READY
 ⭕ Optional Enhancements: Future Phase

🚀 Launch Confidence Statement
You now have a fully professional, world-class launch and growth system ready to deploy with minimal additional setup.
You can confidently launch, grow, and scale without bottlenecks.



Original document table 1
Folder Document Status
04 - Audience Workbooks Brain Filters Self-Diagnosis Quiz READY
04 - Audience Workbooks Maslow Needs Mapping Worksheet READY
04 - Audience Workbooks Daily Opportunity Tracker READY
04 - Audience Workbooks Emotional State Reset Journal READY
05 - Presentation Slide Decks 4 Teaching Decks (Brain Filters, Maslow, Chemistry, Opportunity Spotting) READY
06 - Scripts & Speaking Notes Webinar + Talk Scripts READY
07 - Marketing Copy Brain Reset Email Sequence READY
07 - Marketing Copy Landing Page Copy READY
07 - Marketing Copy Sales Page Copy READY
07 - Marketing Copy Social Media Promo Captions READY
08 - Lead Magnets Ritual Guide, 30-Day Prompts, Cheatsheet, Checklist READY
09 - Program Curriculum Full Course Outline + 5 Module Scripts READY
10 - Bonuses Mini-Course Outline + Printables + Swipe File READY
11 - Assessments & Certificates Final Knowledge Quiz + Completion Certificate READY
12 - Tech & Automation Setup Funnel Flow, Email Automations, Tech Stack READY
13 - Branding & Visuals Brand Voice, Palette, Mood Board, Logo Concepts READY
14 - Launch Plan Pre-Launch Checklist, Launch Calendar, Post-Launch Plan READY
15 - Growth & Scaling Strategy 90-Day Growth Roadmap, Partnerships Strategy, Future Funnels READY
Exact original table cell text 1
[
  [
    "Folder\n",
    "Document\n",
    "Status\n"
  ],
  [
    "04 - Audience Workbooks\n",
    "Brain Filters Self-Diagnosis Quiz\n",
    "READY\n"
  ],
  [
    "04 - Audience Workbooks\n",
    "Maslow Needs Mapping Worksheet\n",
    "READY\n"
  ],
  [
    "04 - Audience Workbooks\n",
    "Daily Opportunity Tracker\n",
    "READY\n"
  ],
  [
    "04 - Audience Workbooks\n",
    "Emotional State Reset Journal\n",
    "READY\n"
  ],
  [
    "05 - Presentation Slide Decks\n",
    "4 Teaching Decks (Brain Filters, Maslow, Chemistry, Opportunity Spotting)\n",
    "READY\n"
  ],
  [
    "06 - Scripts & Speaking Notes\n",
    "Webinar + Talk Scripts\n",
    "READY\n"
  ],
  [
    "07 - Marketing Copy\n",
    "Brain Reset Email Sequence\n",
    "READY\n"
  ],
  [
    "07 - Marketing Copy\n",
    "Landing Page Copy\n",
    "READY\n"
  ],
  [
    "07 - Marketing Copy\n",
    "Sales Page Copy\n",
    "READY\n"
  ],
  [
    "07 - Marketing Copy\n",
    "Social Media Promo Captions\n",
    "READY\n"
  ],
  [
    "08 - Lead Magnets\n",
    "Ritual Guide, 30-Day Prompts, Cheatsheet, Checklist\n",
    "READY\n"
  ],
  [
    "09 - Program Curriculum\n",
    "Full Course Outline + 5 Module Scripts\n",
    "READY\n"
  ],
  [
    "10 - Bonuses\n",
    "Mini-Course Outline + Printables + Swipe File\n",
    "READY\n"
  ],
  [
    "11 - Assessments & Certificates\n",
    "Final Knowledge Quiz + Completion Certificate\n",
    "READY\n"
  ],
  [
    "12 - Tech & Automation Setup\n",
    "Funnel Flow, Email Automations, Tech Stack\n",
    "READY\n"
  ],
  [
    "13 - Branding & Visuals\n",
    "Brand Voice, Palette, Mood Board, Logo Concepts\n",
    "READY\n"
  ],
  [
    "14 - Launch Plan\n",
    "Pre-Launch Checklist, Launch Calendar, Post-Launch Plan\n",
    "READY\n"
  ],
  [
    "15 - Growth & Scaling Strategy\n",
    "90-Day Growth Roadmap, Partnerships Strategy, Future Funnels\n",
    "READY\n"
  ]
]
Original document table 2
Item Purpose
Fully designed Canva templates (optional) Faster brand visual rollouts
Video sales letter (VSL) Boost conversion on sales page
Full "Brain Reset Booster" mini-course Upsell optimization
Live Masterclass recording Event-based lead generation
Mobile App Community (Circle, Skool) Higher engagement platform for alumni
Exact original table cell text 2
[
  [
    "Item\n",
    "Purpose\n"
  ],
  [
    "Fully designed Canva templates (optional)\n",
    "Faster brand visual rollouts\n"
  ],
  [
    "Video sales letter (VSL)\n",
    "Boost conversion on sales page\n"
  ],
  [
    "Full \"Brain Reset Booster\" mini-course\n",
    "Upsell optimization\n"
  ],
  [
    "Live Masterclass recording\n",
    "Event-based lead generation\n"
  ],
  [
    "Mobile App Community (Circle, Skool)\n",
    "Higher engagement platform for alumni\n"
  ]
]

Supporting document for lesson 03.4: CNX.7.17 – Masterclass Launch Planner.xlsx

Plan a masterclass from initial research to evergreen delivery

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 07.1 and 07.4. Video recording to be added.

Use the planner as an eleven-step worksheet

The original Masterclass_Launch_Planner sheet has six columns: Step, Task, Tool/Resource, Action Required, Validation Metric and Notes/Adjustments. It contains eleven workflow rows, no formulas and blank Notes/Adjustments cells. All 61 populated cells were compared with the native Sheet and matched its Excel export. The numerical targets below are the planner's proposed milestones, not recorded business results or universal standards.

Keep the source's tool examples visible without treating them as required purchases or current feature recommendations. This lesson does not evaluate today's pricing or product capabilities. Record your actual evidence and changes in Notes/Adjustments, preserving the original target beside any revised working target.

Open the assigned Masterclass Launch Planner

1. Validate the masterclass idea

Row 2 asks you to identify a high-demand topic by researching industry pain points. It names Google Trends, AnswerThePublic, Quora and Reddit as resources and sets a milestone of at least five major recurring pain points. Record the observed questions and their context rather than copying five unrelated topics to meet the count.

Recurring discussion suggests a problem worth investigating; it does not establish willingness to pay. Explain which audience has each problem and how the proposed teaching could help. Five is the source's planning target, not a statistical proof of demand.

Supporting planner row: Validate Masterclass Idea, A2:F2

2. Research competitors and pricing

Row 3 names Udemy, Teachable, MasterClass.com, SEMrush and Ahrefs, asks for a review of popular masterclasses and pricing models, and proposes analyzing at least three successful competitors. Define what evidence supports the word successful. A publicly listed offer or a visible price does not prove sales or profitability.

Compare the audience, promise, delivery and price on equivalent terms. Preserve observation dates and source links. If success cannot be verified, describe the offer as an observed competitor instead of upgrading an assumption into a fact.

Supporting planner row: Market Research, A3:F3

3. Test interest before full production

Row 4 proposes a waitlist landing page and a limited-time pre-sale offer, using ConvertKit, Systeme.io or Gumroad as tool examples. Its milestone is at least 50 pre-launch signups or five pre-sales. Preserve the word or: these are alternative targets in the source, not a requirement to achieve both.

Signups and purchases provide different evidence. Record each separately and explain delivery timing and terms accurately if offering a pre-sale. Use a deadline only when it is real. These targets do not guarantee sufficient demand or profitable fulfillment, and the row does not authorize taking payments from this lesson.

Supporting planner row: Pre-Sale Validation, A4:F4

4. Build the structure and teaching assets

Row 5 names Notion, Miro and Google Docs for outlining the content roadmap and duration. Its action is a structured lesson plan with clear outcomes; its milestone is a finalized curriculum and slide deck. For lesson 07.1, show how each section helps the student complete the intended task rather than merely listing topics.

Keep the promise aligned with the curriculum. The training's hook, story and offer approach can help present the learning opportunity, while value-focused thinking can clarify the student's expected result, effort and support. Neither replaces a complete teaching sequence or supporting evidence.

Supporting planner row: Masterclass Structure, A5:F5

5. Prepare and check the recording

Row 6 names Loom, Descript, Camtasia and OBS Studio, calls for a professional camera, microphone and lighting setup, and proposes at least 90 minutes of high-quality recorded content. Ninety minutes is this planner's target; it does not establish that a longer recording teaches better or that this project already has recorded media.

Check intelligible audio, readable visuals and a coherent sequence. Record the actual duration and remaining production issues. A script or video placeholder does not meet a recording milestone. Do not add filler simply to satisfy duration.

Supporting planner row: Production Setup, A6:F6

6. Publish on the selected delivery platform

Row 7 names Teachable, Kajabi, Gumroad and Podia, instructs uploading videos, workbooks and resources, and defines the milestone as a published masterclass accessible to buyers. These are source examples. RISER NATION's authorized delivery platform is GoHighLevel; retaining the examples does not change that choice.

Verify the actual learner path, including the lesson text, media, downloads and supporting links. Saving an editor draft and confirming that a public page is accessible are separate checks. A published page with a placeholder must still identify the missing recording accurately.

Supporting planner row: Platform Selection, A7:F7

7. Define pricing and checkout

Row 8 names Stripe, PayPal and Gumroad and gives low-ticket $97 or premium $497-plus as pricing examples. Its milestone is finalized pricing and checkout setup. Those amounts are not mandated RISER NATION prices or evidence of what a market will pay.

Explain what is included, how payment works and what delivery requires. Consider the actual service and production costs before claiming the offer has attractive margins. Test that the displayed offer and checkout agree; a selected payment provider alone does not demonstrate readiness.

Supporting planner row: Pricing and Monetization, A8:F8

8. Schedule pre-launch content

Row 9 lists YouTube, TikTok, LinkedIn and Twitter, using the source's original name. It proposes teaser videos, authority posts and engagement polls, with at least five organic posts receiving engagement as its milestone. Record what engagement means for the test rather than treating every view, reaction and inquiry as equivalent.

For lesson 07.4, assign a feasible schedule to the planned pieces. For 07.1, connect each piece to a real audience question and an accurate next action. Five posts is an activity target from this worksheet, not a guarantee of reach or sales.

Supporting planner row: Marketing Strategy, A9:F9

9. Deliver the preview event and measure its outcome

Row 10 names WebinarJam, Zoom and Airmeet for a free webinar or workshop. The action is a short preview session with a soft pitch. The target is at least 50 attendees and 10% conversion. Preserve and here, unlike the earlier pre-sale row's or.

Define conversion before the event: conversion to what action, among which people, during what period? As an authored arithmetic illustration, five purchases among 50 attendees is 10%, but the source does not specify purchases or its denominator. Do not report that example as an actual result or silently assign it to the original target.

Supporting planner row: Launch Event, A10:F10

10. Support the post-purchase experience

Row 11 lists Slack, Discord and Circle.so for workbooks, Q&A and engagement after purchase. Its proposed milestone is at least 80% student completion. Define who is included, what counts as completion and how long students have to finish before calculating that rate.

Locate the actual workbooks and support channel, explain how learners use them and check whether delivery matches the offer. Participation in a community and completion of the curriculum are different measures. The worksheet supplies no observed completion data.

Supporting planner row: Delivery and Customer Experience, A11:F11

11. Develop evergreen delivery from evidence

Row 12 lists EverWebinar, Gumroad and ConvertKit, proposes email sequences and retargeting ads, and sets the first 100 evergreen sales as its milestone. These are planned activities and a future sales target, not configured systems or recorded revenue.

Before scaling, review the actual learning experience, offer accuracy, results and support capacity. Automation should preserve accurate terms and delivery. The source gives no budget, trigger logic or implementation specification, and it does not authorize activating emails or advertising from the lesson.

Supporting planner row: Scaling and Automation, A12:F12

Complete the planner with traceable evidence

For 03.4, use the research, pre-sale and offer decisions to plan the launch. For 07.1, develop the curriculum, presentation and promotional content. For 07.4, schedule production, release and follow-up. Preserve every source row, tool example, action and target, while recording your actual status and supporting links in Notes/Adjustments. Missing media, untested checkout or uncertain results remain open work even when the planning sheet is filled in.

Complete original source appendices

Open the assigned original: CNX.7.17 – Masterclass Launch Planner.xlsx

Complete readable source
,Step,Task,Tool/Resource,Action Required,Validation Metric,Notes/Adjustments
0,Validate Masterclass Idea,Identify high-demand topic,"Google Trends, AnswerThePublic, Quora, Reddit",Research top industry pain points,At least 5 major recurring pain points identified,
1,Market Research,Analyze competitors & pricing,"Udemy, Teachable, MasterClass.com, SEMrush, Ahrefs",Review popular masterclasses and pricing models,At least 3 successful competitors analyzed,
2,Pre-Sale Validation,Collect email signups & pre-orders,"ConvertKit, Systeme.io, Gumroad",Set up a landing page with waitlist and limited-time pre-sale offer,At least 50+ pre-launch signups or 5+ pre-sales,
3,Masterclass Structure,Outline content roadmap & duration,"Notion, Miro, Google Docs",Create a structured lesson plan with clear outcomes,Finalized curriculum & slide deck,
4,Production Setup,Record high-quality video,"Loom, Descript, Camtasia, OBS Studio","Use professional camera, mic, and lighting setup",At least 90 minutes of recorded high-quality content,
5,Platform Selection,Choose hosting & delivery platform,"Teachable, Kajabi, Gumroad, Podia","Upload videos, workbooks, and resources",Masterclass published and accessible to buyers,
6,Pricing & Monetization,Set pricing model,"Stripe, PayPal, Gumroad",Determine low-ticket ($97) or premium ($497+) pricing,Finalized pricing & checkout page setup,
7,Marketing Strategy,Generate pre-launch content,"YouTube, TikTok, LinkedIn, Twitter","Create teaser videos, authority posts, and engagement polls",At least 5 organic content posts with engagement,
8,Launch Event,Host a free webinar or workshop,"WebinarJam, Zoom, Airmeet",Teach a short preview session with a soft pitch,At least 50+ attendees and 10% conversion,
9,Delivery & Customer Experience,Ensure smooth masterclass delivery,"Slack, Discord, Circle.so","Offer workbooks, Q&A, and engagement post-purchase",At least 80% completion rate from students,
10,Scaling & Automation,Turn masterclass into an evergreen product,"EverWebinar, Gumroad, ConvertKit",Automate email sequences and retargeting ads,First 100+ evergreen masterclass sales,
Original worksheet: Masterclass_Launch_Planner
StepTaskTool/ResourceAction RequiredValidation MetricNotes/Adjustments
Validate Masterclass IdeaIdentify high-demand topicGoogle Trends, AnswerThePublic, Quora, RedditResearch top industry pain pointsAt least 5 major recurring pain points identified
Market ResearchAnalyze competitors & pricingUdemy, Teachable, MasterClass.com, SEMrush, AhrefsReview popular masterclasses and pricing modelsAt least 3 successful competitors analyzed
Pre-Sale ValidationCollect email signups & pre-ordersConvertKit, Systeme.io, GumroadSet up a landing page with waitlist and limited-time pre-sale offerAt least 50+ pre-launch signups or 5+ pre-sales
Masterclass StructureOutline content roadmap & durationNotion, Miro, Google DocsCreate a structured lesson plan with clear outcomesFinalized curriculum & slide deck
Production SetupRecord high-quality videoLoom, Descript, Camtasia, OBS StudioUse professional camera, mic, and lighting setupAt least 90 minutes of recorded high-quality content
Platform SelectionChoose hosting & delivery platformTeachable, Kajabi, Gumroad, PodiaUpload videos, workbooks, and resourcesMasterclass published and accessible to buyers
Pricing & MonetizationSet pricing modelStripe, PayPal, GumroadDetermine low-ticket ($97) or premium ($497+) pricingFinalized pricing & checkout page setup
Marketing StrategyGenerate pre-launch contentYouTube, TikTok, LinkedIn, TwitterCreate teaser videos, authority posts, and engagement pollsAt least 5 organic content posts with engagement
Launch EventHost a free webinar or workshopWebinarJam, Zoom, AirmeetTeach a short preview session with a soft pitchAt least 50+ attendees and 10% conversion
Delivery & Customer ExperienceEnsure smooth masterclass deliverySlack, Discord, Circle.soOffer workbooks, Q&A, and engagement post-purchaseAt least 80% completion rate from students
Scaling & AutomationTurn masterclass into an evergreen productEverWebinar, Gumroad, ConvertKitAutomate email sequences and retargeting adsFirst 100+ evergreen masterclass sales
Complete workbook cell and structure inspection
{
  "id": "D0985",
  "sha256": "3ada8768bdfdf2de0281ec99197d9d3e822233864eadf9e99886868f049e2268",
  "members": [
    "xl/drawings/drawing1.xml",
    "xl/worksheets/sheet1.xml",
    "xl/worksheets/_rels/sheet1.xml.rels",
    "xl/theme/theme1.xml",
    "xl/sharedStrings.xml",
    "xl/styles.xml",
    "xl/persons/person.xml",
    "xl/workbook.xml",
    "xl/_rels/workbook.xml.rels",
    "_rels/.rels",
    "[Content_Types].xml"
  ],
  "media": [],
  "sheets": [
    {
      "name": "Masterclass_Launch_Planner",
      "state": "visible",
      "dimension": "A1:F12",
      "cells": [
        {
          "cell": "A1",
          "value": "Step",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B1",
          "value": "Task",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C1",
          "value": "Tool/Resource",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D1",
          "value": "Action Required",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E1",
          "value": "Validation Metric",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "F1",
          "value": "Notes/Adjustments",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A2",
          "value": "Validate Masterclass Idea",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B2",
          "value": "Identify high-demand topic",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C2",
          "value": "Google Trends, AnswerThePublic, Quora, Reddit",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D2",
          "value": "Research top industry pain points",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E2",
          "value": "At least 5 major recurring pain points identified",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A3",
          "value": "Market Research",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B3",
          "value": "Analyze competitors & pricing",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C3",
          "value": "Udemy, Teachable, MasterClass.com, SEMrush, Ahrefs",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D3",
          "value": "Review popular masterclasses and pricing models",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E3",
          "value": "At least 3 successful competitors analyzed",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A4",
          "value": "Pre-Sale Validation",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B4",
          "value": "Collect email signups & pre-orders",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C4",
          "value": "ConvertKit, Systeme.io, Gumroad",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D4",
          "value": "Set up a landing page with waitlist and limited-time pre-sale offer",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E4",
          "value": "At least 50+ pre-launch signups or 5+ pre-sales",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A5",
          "value": "Masterclass Structure",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B5",
          "value": "Outline content roadmap & duration",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C5",
          "value": "Notion, Miro, Google Docs",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D5",
          "value": "Create a structured lesson plan with clear outcomes",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E5",
          "value": "Finalized curriculum & slide deck",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A6",
          "value": "Production Setup",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B6",
          "value": "Record high-quality video",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C6",
          "value": "Loom, Descript, Camtasia, OBS Studio",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D6",
          "value": "Use professional camera, mic, and lighting setup",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E6",
          "value": "At least 90 minutes of recorded high-quality content",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A7",
          "value": "Platform Selection",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B7",
          "value": "Choose hosting & delivery platform",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C7",
          "value": "Teachable, Kajabi, Gumroad, Podia",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D7",
          "value": "Upload videos, workbooks, and resources",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E7",
          "value": "Masterclass published and accessible to buyers",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A8",
          "value": "Pricing & Monetization",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B8",
          "value": "Set pricing model",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C8",
          "value": "Stripe, PayPal, Gumroad",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D8",
          "value": "Determine low-ticket ($97) or premium ($497+) pricing",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E8",
          "value": "Finalized pricing & checkout page setup",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A9",
          "value": "Marketing Strategy",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B9",
          "value": "Generate pre-launch content",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C9",
          "value": "YouTube, TikTok, LinkedIn, Twitter",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D9",
          "value": "Create teaser videos, authority posts, and engagement polls",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E9",
          "value": "At least 5 organic content posts with engagement",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A10",
          "value": "Launch Event",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B10",
          "value": "Host a free webinar or workshop",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C10",
          "value": "WebinarJam, Zoom, Airmeet",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D10",
          "value": "Teach a short preview session with a soft pitch",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E10",
          "value": "At least 50+ attendees and 10% conversion",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A11",
          "value": "Delivery & Customer Experience",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B11",
          "value": "Ensure smooth masterclass delivery",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C11",
          "value": "Slack, Discord, Circle.so",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D11",
          "value": "Offer workbooks, Q&A, and engagement post-purchase",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E11",
          "value": "At least 80% completion rate from students",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "A12",
          "value": "Scaling & Automation",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "B12",
          "value": "Turn masterclass into an evergreen product",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "C12",
          "value": "EverWebinar, Gumroad, ConvertKit",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "D12",
          "value": "Automate email sequences and retargeting ads",
          "type": "s",
          "link": null,
          "comment": null
        },
        {
          "cell": "E12",
          "value": "First 100+ evergreen masterclass sales",
          "type": "s",
          "link": null,
          "comment": null
        }
      ],
      "merges": [],
      "validation": "<openpyxl.worksheet.datavalidation.DataValidationList object>\nParameters:\ndisablePrompts=None, xWindow=None, yWindow=None, count=0, dataValidation=[]",
      "tables": []
    }
  ]
}

Supporting document for lesson 03.4: M13.9 - PUBLICATION CADENCE & COMPOUNDING

Publication cadence: build a production schedule you can sustain

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 06.3, 07.1 and 09.4. Video recording to be added.

Understand the syllabus excerpt and its limits

M13.9 — Publication Cadence and Compounding is an excerpt from the Riser Nation Academy 2026 syllabus. It identifies a legacy parent course, C13 — Faceless YouTube and the AI Higgs Field Video Engine, and repeats the same stage line twice: Stage 3, Speedboat; Build to Do; prerequisite C12 skeleton complete; 16–24 hours over four weeks. Preserve those source details without replacing the current twelve-course spreadsheet assignments or presenting its estimated hours as actual work completed.

The excerpt contrasts a belief that creators must appear on camera with producing useful video faceless or face-on. It describes the production engine as the asset and videos as outputs. Its claim of ten times the historical production pace has no supporting benchmark in this document. Do not promise that speed improvement or assume that faceless presentation establishes expertise.

Supporting source: M13.9 syllabus context, repeated stage line and production claims

Choose a cadence and content mix that fit your capacity

The module asks how often to publish, what mix to use and when to increase production. It names lean versus aggressive cadence, a Sustainable Pace diagnostic and a decision about scaling cadence. It does not supply numerical schedules, the diagnostic questions or a scoring method.

An authored working diagnostic is to estimate the time required for research, scripting, production, editing, checking, publishing and follow-up. Compare the total with actual available time and leave room for corrections. A lean plan uses fewer pieces with sufficient time to finish them well. An aggressive plan requires evidence that greater output can be sustained without reducing usefulness or creating an unmanageable backlog. These descriptions and the capacity procedure are teaching additions, not a recovered original diagnostic.

YouTube's official upload guidance emphasizes a consistent, sustainable schedule and considering production time, frequency and content mix. It does not establish one ideal schedule for every creator. Use your production experience and audience response to choose a feasible plan.

Supporting source: M13.9 cadence, diagnostic and scaling topics

Current platform reference: YouTube upload schedule tips

Treat compounding as a process to evaluate

An authored application is to build one useful origin piece, derive shorter pieces that preserve its meaning, retain reusable production assets and review what the audience found useful. Compare time invested, completed output, audience response and the next action relevant to your goal. More output is not automatically compounding value.

For 03.4, match the schedule to the launch and available assets. For 06.3 and 07.1, connect each published piece to the audience problem and teaching objective. For 09.4, increase cadence only after reviewing capacity and results. The source gives no numerical threshold for this decision, so label any working threshold you choose.

Supporting source: M13.9 sustainable cadence and when to scale

Address all five AI-search question topics

The excerpt lists five questions: starting a faceless YouTube channel in 2026; the best AI video tool for course creators; repurposing long-form video into Shorts; thumbnails that get clicks; and the best YouTube publishing schedule. They are proposed content questions, not complete answers supplied by the excerpt.

For the channel question, identify the audience, useful subject matter and production process before selecting tools. For the tool question, define the intended job and compare current official capabilities, costs and limitations before making a recommendation; no current product winner is established here. For repurposing, select a coherent teaching point and retain essential context. For thumbnails, make the visual promise consistent with the actual video. For scheduling, start from a sustainable production plan and review audience evidence. These are authored starting points, not a substitute for missing detailed modules.

Supporting source: AIO — Questions People Ask AI Engines, five topics

Distinguish the five proposed answer formats from missing content

The AEO section proposes an eight-step process for starting a faceless channel, a HeyGen-versus-Synthesia comparison table for 2026, a numbered eight-beat long-form script, a thumbnail/title statistic and a 75-word answer about posting frequency. The excerpt does not contain the eight startup steps, the product comparison or the eight script beats. Preserve these as explicit content dependencies rather than inventing them and attributing them to the syllabus.

The proposed statistic assigns approximately 60% of the click decision to the thumbnail and 30% to the title. The document supplies no study, sample, method or explanation of the remaining share. It should not be taught as an established statistic. Test the accuracy and usefulness of your title and thumbnail without claiming these percentages are proven.

The requested 75-word answer is a format preference in the source, not an SEO requirement. Here is an authored 75-word practice answer: Choose a publishing schedule you can maintain without weakening research, teaching, editing or delivery. Start with a manageable mix of longer videos and shorter supporting pieces. Record production time and audience response, then review whether the schedule still fits your capacity. Increase output only when the process remains reliable and the additional content serves a clear purpose. There is no universal posting frequency that guarantees growth, sales or recommendations for every channel or every creator.

Supporting source: AEO Direct-Answer Citation Blocks, five rows

Evaluate the five proposed authority assets honestly

The GEO section proposes a faceless YouTube guide with HowTo schema, a GitHub repository of production-stack templates, a founder podcast about YouTube creation, a RISER NATION mention in best-AI-video-tools content and a Wikidata entity for the Higgs Field Video Engine. These are proposed assets or placements. The excerpt does not provide their URLs or evidence that they exist.

Publish a useful guide or template repository only when the actual material is available and appropriate to share. A podcast requires a real recording. Do not present a hoped-for third-party mention as an endorsement or invent a Wikidata listing. These proposals cannot be counted as existing authority evidence.

Google deprecated HowTo rich results in 2023, so adding that markup should not be taught as a way to obtain a current Google HowTo rich result. Google's current generative-AI search guidance says no special schema is required for those features and cautions against inauthentic mentions. Focus on accurate, useful, accessible content and appropriate technical SEO. None of these practices guarantees rankings or AI citations.

Supporting source: GEO — Authority Signals to Stack, five proposals

Official Google correction: HowTo rich-result deprecation

Official Google guidance: optimizing for generative AI search features

Complete all four capstone deliverables

The source requires one published long-form video, ten Shorts or Reels derived from that video, a publication cadence calendar and a production-stack diagram. A script is not a published video, and ten clip ideas are not ten produced clips. Keep each requirement's actual status visible.

Use the calendar to show the planned origin piece, derivatives and review points. Use the diagram to explain how research becomes a checked script, produced media, published content and measured feedback. This diagram sequence is an authored example; the source supplies no finished diagram or tool configuration.

Keep the training's hook, story and offer concepts connected to an accurate audience promise, and use value-focused thinking to reduce practical learning obstacles. A stronger hook does not justify misleading packaging, and a faster workflow does not replace fact-checking or useful instruction. Submit the four capstone outputs with their actual links and any missing elements clearly identified.

Supporting source: Course Capstone, four required outputs

Complete original source appendices

Open the assigned original: M13.9 - PUBLICATION CADENCE & COMPOUNDING

Complete readable source
M13.9 — PUBLICATION CADENCE & COMPOUNDING
============================================================


Source: Riser Nation Academy 2026 Syllabus


NOTE: This document is an excerpt copied from the master syllabus.
The master syllabus remains intact and unmodified.


---


PARENT COURSE: C13 — Faceless YouTube & The AI Higgs Field Video Engine
---
Stage: Stage 3 — Speedboat  ·  Phase: Build → Do  ·  Prereq: C12 skeleton complete  ·  Time: 16–24 hours over 4 weeks


Stage: Stage 3 — Speedboat  ·  Phase: Build → Do  ·  Prereq: C12 skeleton complete  ·  Time: 16–24 hours over 4 weeks
In Plain Words
Build the production engine. The 2026 stack lets you produce long-form video, Shorts, and Reels at 10x the historical pace, faceless or face-on. The engine is the asset; the videos are the output.
The Mismatch This Course Fixes
'I need to be on camera to compete' (2018 belief) vs. 'I can produce authority content faceless or face-on with modern AI' (2026 reality).
Modules


---


M13.9 — PUBLICATION CADENCE & COMPOUNDING
---


How often, what mix, when. Cadence that compounds vs. cadence that exhausts.
In plain words: Don't burn out. Pick a cadence you can keep. Increase only when it's compounding.
Lean vs Aggressive cadence.
The Sustainable Pace diagnostic.
When to scale cadence.
AIO — Questions People Ask AI Engines
how do i start a faceless youtube channel in 2026
best ai video tool for course creators
how do i repurpose long form video into shorts
youtube thumbnail that gets clicks
best youtube publishing schedule
AEO — Direct-Answer Citation Blocks
Type
Question to Answer
Citable Format
How-To
How do I start a faceless YouTube channel?
8-step process
Comparison
HeyGen vs Synthesia: which in 2026?
Comparison table
Framework
8-beat long-form video script?
Numbered list
Stat
How much of click decision is the thumbnail?
Direct: '~60% thumbnail, ~30% title.'
FAQ
How often should I post on YouTube?
75-word answer with cadence options


GEO — Authority Signals to Stack
Faceless YouTube guide as HowTo schema
GitHub repo: production stack templates
Founder podcast on YouTube creation
Riser Nation cited in 'best AI video tools 2026'
Wikidata: Higgs Field Video Engine entity
Course Capstone
Submit: 1 long-form video published, 10 Shorts/Reels from that video, publication cadence calendar, production-stack diagram.


---
END OF M13.9
---
Native document text
M13.9 — PUBLICATION CADENCE & COMPOUNDING
============================================================

Source: Riser Nation Academy 2026 Syllabus

NOTE: This document is an excerpt copied from the master syllabus.
The master syllabus remains intact and unmodified.

---

PARENT COURSE: C13 — Faceless YouTube & The AI Higgs Field Video Engine
---
Stage: Stage 3 — Speedboat  ·  Phase: Build → Do  ·  Prereq: C12 skeleton complete  ·  Time: 16–24 hours over 4 weeks

Stage: Stage 3 — Speedboat  ·  Phase: Build → Do  ·  Prereq: C12 skeleton complete  ·  Time: 16–24 hours over 4 weeks
In Plain Words
Build the production engine. The 2026 stack lets you produce long-form video, Shorts, and Reels at 10x the historical pace, faceless or face-on. The engine is the asset; the videos are the output.
The Mismatch This Course Fixes
'I need to be on camera to compete' (2018 belief) vs. 'I can produce authority content faceless or face-on with modern AI' (2026 reality).
Modules

---

M13.9 — PUBLICATION CADENCE & COMPOUNDING
---

How often, what mix, when. Cadence that compounds vs. cadence that exhausts.
In plain words: Don't burn out. Pick a cadence you can keep. Increase only when it's compounding.
Lean vs Aggressive cadence.
The Sustainable Pace diagnostic.
When to scale cadence.
AIO — Questions People Ask AI Engines
how do i start a faceless youtube channel in 2026
best ai video tool for course creators
how do i repurpose long form video into shorts
youtube thumbnail that gets clicks
best youtube publishing schedule
AEO — Direct-Answer Citation Blocks
Type
Question to Answer
Citable Format
How-To
How do I start a faceless YouTube channel?
8-step process
Comparison
HeyGen vs Synthesia: which in 2026?
Comparison table
Framework
8-beat long-form video script?
Numbered list
Stat
How much of click decision is the thumbnail?
Direct: '~60% thumbnail, ~30% title.'
FAQ
How often should I post on YouTube?
75-word answer with cadence options

GEO — Authority Signals to Stack
Faceless YouTube guide as HowTo schema
GitHub repo: production stack templates
Founder podcast on YouTube creation
Riser Nation cited in 'best AI video tools 2026'
Wikidata: Higgs Field Video Engine entity
Course Capstone
Submit: 1 long-form video published, 10 Shorts/Reels from that video, publication cadence calendar, production-stack diagram.

---
END OF M13.9
---

Supporting document for lesson 03.4: RN-03_Offer_Engine_CreatorFlow_2025_POPULATED.docx

Offer Engine: develop three offers from one validated concept

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 04.1, 05.1, 05.4 and 08.1. Video recording to be added.

Start with the correct source and prerequisites

RN-03 — Offer Engine (Creator Flow 2025) describes turning a validated concept into a Minimum Viable Offer with three variants, pricing justification, emotional targeting and funnel alignment. Despite POPULATED in the filename, the document contains an operating outline rather than completed customer research, priced offers or scored results. Its RN-03 labels identify this source's workflow; they do not replace the twelve-course spreadsheet assignments.

The intake accepts RN-00, RN-01 and RN-02 feed packets in XLSX and DOCX form, or a clear concept plus a validated market opportunity for someone entering externally. Those feed packets are dependencies named in the source, not included attachments. Identify the evidence you have and the missing inputs before describing a concept as validated.

Supporting source: RN-03 Offer Engine, Purpose and Intake Requirements

1. Extract the offer core

Define the transformation promise, connect the primary pain to the desired outcome, and identify the emotional driver. The source names fear, desire, identity and aspiration as possible drivers. Describe a real audience motivation without manufacturing fear or claiming to know an individual's emotions without evidence.

For lesson 04.1, write a positioning statement identifying the buyer, relevant problem and intended change. For lesson 05.1, check that the actual deliverable supports that change. The promise should describe the offer accurately; a strong emotional phrase cannot replace proof or delivery capability.

Supporting source: RN-03.1 — Offer Core Extraction

2. Build the complete MVO triad

Create a Core Offer, called the Base; an Enhanced Offer, called the Value Stack; and a Premium Offer, called the Acceleration Layer. For each of the three, specify all five source requirements: deliverables, time to outcome, proof elements, AI-assisted components and friction-reducing mechanisms. Do not fill a field with an unsupported claim merely to make the variant appear complete.

An authored example is a self-guided worksheet, the worksheet with a guided workshop, and the workshop with individual review. The distinction is the support and service actually provided, not simply a higher price. This is an invented exercise, not an existing RISER NATION package. Explain any AI assistance and what remains subject to human review. If no AI component is relevant, state that explicitly rather than inventing one.

Use value-focused offer thinking to examine the intended result, confidence, time and effort. An acceleration layer must have a credible reason it could reduce delay or obstacles; it does not justify a guaranteed outcome. The source supplies no required prices, delivery durations or quantified value equation.

Supporting source: RN-03.2 — three variants and five requirements for each

3. Explain pricing with nine supportable reasons

The Pricing Power Engine asks for three reasons the price is fair, three reasons it is a bargain and three reasons waiting costs more. These are three distinct sets of three, not a request for three reasons total. Explain fairness through the actual scope and delivery. Explain comparative value using relevant evidence. Discuss delay costs only when the buyer's situation supports them.

If evidence does not support a claim that waiting costs more, say so. Do not invent a deadline, inflated comparison price or financial loss to satisfy the requested count. The source gives a justification exercise, not a formula proving a price is appropriate or that a buyer will recover the cost.

Supporting source: RN-03.3 — Pricing Power Engine

4. Check the four market-opportunity alignments

Compare the offer with RN-02 outputs across audience pocket fit, demand alignment, pricing expectations and competitor gaps. Identify the specific segment, the evidence of its problem or demand, the observed price context and the unmet need you propose to address. A competitor's omission is not automatically an opportunity; the buyer must care about it.

The source refers to an upstream Market Opportunity Map but does not include that map. Link the actual evidence when available. For lesson 03.4, unresolved alignment questions become testable launch assumptions rather than claims of completed validation.

Supporting source: RN-03.4 — Market Opportunity Map Integration

5. Map the funnel and calls to action

The source lists Lead Magnet, Tripwire, Core Offer, Continuity and Flagship under funnel type. A lead magnet introduces a resource, a tripwire provides an introductory paid offer, a core offer supplies the principal purchase, continuity describes an ongoing offer, and a flagship is a central premium offer. These explanations are authored teaching. The source does not provide an automatic classification algorithm or require every buyer to pass through all five.

For lesson 05.4, choose the relevant sequence and name the CTA at each transition. For 08.1, identify what must be delivered after each action. Keep the training's hook, story and offer approach aligned with that actual sequence. A persuasive message must not send buyers to a different promise or unexplained purchase.

Supporting source: RN-03.5 — Funnel Mapping, five categories and CTA requirement

6. Score five dimensions without inventing a pass rule

Score clarity, differentiation, emotional resonance, margin potential and market readiness separately from zero to ten. Record the evidence and uncertainty behind each judgment. Clarity concerns understanding; differentiation concerns a meaningful distinction; emotional resonance concerns relevance to the buyer's motivation; margin potential concerns the economics of delivery; and market readiness concerns the available evidence and ability to proceed. These explanations are authored interpretations of the labels.

The source provides no scoring anchors, weights, aggregate formula or passing threshold. Do not present an invented total or cut-off as a validated decision rule. In particular, a high subjective margin score is not a substitute for examining actual costs and pricing.

Supporting source: RN-03.6 — Offer Strength Score, five zero-to-ten dimensions

Deliver both required artifacts

The mandatory outputs are the RN-03 Offer Engine Worksheet in XLSX format and the RN-03 Offer Blueprint Summary in DOCX format. This source names them but does not supply completed versions. In practice, preserve the inputs, three variants with all five fields, pricing rationale, four market checks, funnel sequence and five individual scores in the resulting work.

Submit both artifacts with supporting links and explicit unknowns. Distinguish authored examples from real research, and do not label the output validated solely because all headings are populated.

Supporting source: RN-03 Outputs — Mandatory

Complete original source appendices

Open the assigned original: RN-03_Offer_Engine_CreatorFlow_2025_POPULATED.docx

Complete readable source
RN-03 — Offer Engine (Creator Flow 2025)
----------------------------------------
**Purpose:**  
Transform a validated concept into a Minimum Viable Offer (MVO) with 3 offer variants, pricing justification, emotional targeting, and funnel alignment.
**RN-03.0 — Intake Requirements**
- RN-00, RN-01, RN-02 Feed Packets (.xlsx + .docx), OR
- A clear concept + validated market opportunity if entering externally.
**RN-03.1 — Offer Core Extraction**
- Define transformation promise.
- Identify primary pain → desired outcome.
- Clarify emotional driver (fear, desire, identity, aspiration).
**RN-03.2 — Offer Variant Builder (MVO Triad)**
1. **Core Offer (Base)**  
2. **Enhanced Offer (Value Stack)**  
3. **Premium Offer (Acceleration Layer)**  
Each must include:  
- Deliverables  
- Time to outcome  
- Proof elements  
- AI-assisted components  
- Friction-reducing mechanisms  
**RN-03.3 — Pricing Power Engine**
To justify pricing, provide:  
- 3 reasons the price is fair  
- 3 reasons it’s a bargain  
- 3 reasons waiting costs more  
**RN-03.4 — Market Opportunity Map Integration**
Validate alignment with RN-02 outputs:  
- Audience pocket fit  
- Demand alignment  
- Pricing expectations  
- Competitor gap exploitation  
**RN-03.5 — Funnel Mapping**
Auto-detect funnel type:  
- Lead Magnet  
- Tripwire  
- Core Offer  
- Continuity  
- Flagship  
Create funnel sequence + call-to-actions (CTAs).
**RN-03.6 — Offer Strength Score**
- Clarity (0–10)  
- Differentiation (0–10)  
- Emotional resonance (0–10)  
- Margin potential (0–10)  
- Market readiness (0–10)  
**RN-03 Outputs (Mandatory)**
- RN-03 Offer Engine Worksheet (.xlsx)  
- RN-03 Offer Blueprint Summary (.docx)
Original Word text: word/document.xml

RN-03 — Offer Engine (Creator Flow 2025)
----------------------------------------

**Purpose:**  
Transform a validated concept into a Minimum Viable Offer (MVO) with 3 offer variants, pricing justification, emotional targeting, and funnel alignment.

**RN-03.0 — Intake Requirements**
- RN-00, RN-01, RN-02 Feed Packets (.xlsx + .docx), OR
- A clear concept + validated market opportunity if entering externally.

**RN-03.1 — Offer Core Extraction**
- Define transformation promise.
- Identify primary pain → desired outcome.
- Clarify emotional driver (fear, desire, identity, aspiration).

**RN-03.2 — Offer Variant Builder (MVO Triad)**
1. **Core Offer (Base)**  
2. **Enhanced Offer (Value Stack)**  
3. **Premium Offer (Acceleration Layer)**  

Each must include:  
- Deliverables  
- Time to outcome  
- Proof elements  
- AI-assisted components  
- Friction-reducing mechanisms  

**RN-03.3 — Pricing Power Engine**
To justify pricing, provide:  
- 3 reasons the price is fair  
- 3 reasons it’s a bargain  
- 3 reasons waiting costs more  

**RN-03.4 — Market Opportunity Map Integration**
Validate alignment with RN-02 outputs:  
- Audience pocket fit  
- Demand alignment  
- Pricing expectations  
- Competitor gap exploitation  

**RN-03.5 — Funnel Mapping**
Auto-detect funnel type:  
- Lead Magnet  
- Tripwire  
- Core Offer  
- Continuity  
- Flagship  

Create funnel sequence + call-to-actions (CTAs).

**RN-03.6 — Offer Strength Score**
- Clarity (0–10)  
- Differentiation (0–10)  
- Emotional resonance (0–10)  
- Margin potential (0–10)  
- Market readiness (0–10)  

**RN-03 Outputs (Mandatory)**
- RN-03 Offer Engine Worksheet (.xlsx)  
- RN-03 Offer Blueprint Summary (.docx)

Supporting document for lesson 03.4: The "4 Ps" Approach (Problem, Promise, Proof, Proposal)

The four Ps: problem, promise, proof and proposal

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 04.2, 05.1, 07.1 and 09.2. Video recording to be added.

Give the reader a clear path from relevance to action

This assigned framework organizes a social post or advertisement into Problem, Promise, Proof and Proposal. It is not the Product, Price, Place and Promotion marketing mix. The source does not establish an author for this four-part formulation or claim that it originated with Brunson or Hormozi.

We will use it to make a message understandable and supportable. Its concluding statement describes effective messaging and conversion as intended outcomes; it does not guarantee either. The practice examples below are authored illustrations, not real customer cases.

Supporting source: The 4 Ps Approach — complete framework

1. Problem: identify an actual audience need

Start with a problem or pain point the intended reader recognizes. State it clearly enough that the reader can judge whether the message applies to them. The source emphasizes needs and frustrations, not an instruction to exaggerate the problem or invent a fear.

As an authored example, “You have workshop notes but no clear lesson sequence” identifies a concrete obstacle. Record what supports that observation, such as an actual customer question or a documented research finding. If it is only a hypothesis, treat it as a hypothesis to test. For lesson 04.2, the useful output is a message matched to a specific audience context.

Supporting source: Step 1 — Problem Identification

2. Promise: explain the benefit and intended outcome

State how the offer addresses the problem, including a specific benefit the buyer can understand. Keep the promise within what the product or service actually provides. An authored example is “Use the worksheet to organize those notes into a draft lesson sequence.” It describes a usable outcome without claiming guaranteed sales or effortless success.

For lesson 05.1, compare the promise with the actual deliverables, support, expected effort and timing. This connects to the training's value-focused approach: clarify the desired result and practical obstacles rather than relying on a large bundle of unnamed bonuses. The source itself does not give a value equation, pricing formula or evidence that an outcome will occur.

Supporting source: Step 2 — Promise of Solution

3. Proof: support the particular promise you make

The source lists six proof types: testimonials, reviews, case studies, before-and-after examples, statistics and demonstrations. Select evidence relevant to the exact promise. A demonstration can show how a worksheet is used. A case study can explain one person's context, actions and result. Neither automatically proves a typical result for every buyer.

Check that testimonials and reviews are authentic and used appropriately. Preserve relevant context in before-and-after examples. For statistics, record the source, population, period and what the number measures. Do not imply that a result came from your offer if that relationship is not established. If evidence is unavailable, narrow the claim or disclose the gap; do not generate a fictional testimonial to fill the Proof section.

The source connects social proof with credibility and objections. Address the actual objection: a product walkthrough may answer “What do I receive?” but cannot by itself answer “Will this produce my revenue target?” For lesson 09.2, match each claim to the evidence that can support it and distinguish remaining uncertainty.

Supporting source: Step 3 — Proof of Efficacy and all six evidence examples

4. Proposal: make the next action explicit

The original CTA examples are visiting a website, making a purchase, signing up for a free trial and contacting the sales team. Choose the action that fits the reader's stage and make its destination easy to find. State the relevant terms instead of concealing what happens after the click.

The source suggests persuasive language and urgency. Use a real deadline or capacity limit only when one exists. A clear invitation does not require manufactured urgency. In the worksheet example, a proposal might be “Open the sample and decide whether its structure fits your workshop.” This is an invented teaching example, not an existing downloadable asset or a verified offer.

Supporting source: Step 4 — Proposal for Action and CTA examples

Combine the four parts without losing their roles

For lesson 07.1, draft a short post with one sentence for each role, then revise it into natural prose. For 03.4, use the same structure to inspect launch messaging before publication. The problem establishes relevance, the promise explains value, proof supports the claim and the proposal identifies the next action. Tailor the language to the audience's needs and preferences, as the source requests.

The training's hook, story and offer approach can support this exercise: an accurate hook attracts the relevant reader, an explanation or real story develops context, and the offer clarifies the exchange. It is not necessary to rename the four Ps or pretend the two frameworks are identical. Preserve the four distinct source functions.

Supporting source: framework sequence and closing guidance on tailoring, proof and conversion

Practice and review

Submit one message, identify its four parts and link each factual claim to supporting evidence. Check that the promise addresses the stated problem, the proof supports that promise and the CTA reaches the intended destination. Record unknowns and distinguish your proposed test from observed campaign results. The source provides no performance threshold or testing sample size, so do not invent one and attribute it to this framework.

Complete original source appendices

Open the assigned original: The "4 Ps" Approach (Problem, Promise, Proof, Proposal)

Complete readable source
The "4 Ps" Approach (Problem, Promise, Proof, Proposal)
Steps:
1. Problem Identification: Start by identifying a problem or pain point that your target audience experiences. Clearly articulate this problem in your social media post or advertisement to capture their attention and resonate with their needs or frustrations.
2. Promise of Solution: Once you've highlighted the problem, make a promise of how your product or service can solve it. Clearly communicate the benefits and outcomes that your audience can expect from using your offering. Make your promise compelling and specific to generate interest and curiosity.
3. Proof of Efficacy: Provide evidence or proof to support your promise and build credibility with your audience. This could include testimonials, reviews, case studies, before-and-after examples, statistics, or demonstrations that showcase the effectiveness and reliability of your product or service. Use social proof to reassure your audience and overcome any skepticism or objections.
4. Proposal for Action: Close your social media post or advertisement with a clear call to action (CTA) that prompts your audience to take the next step. Whether it's visiting your website, making a purchase, signing up for a free trial, or contacting your sales team, make the CTA compelling and easy to follow. Use persuasive language and urgency to encourage immediate action.
By following the "4 Ps" approach, you can create effective social media posts and advertisements that capture your audience's attention, communicate the value of your offering, and motivate them to take action. Tailor your message to resonate with your audience's needs and preferences, and use evidence, social proof, and clear calls to action to guide them towards conversion.
Native document text
The "4 Ps" Approach (Problem, Promise, Proof, Proposal)
Steps:
Problem Identification: Start by identifying a problem or pain point that your target audience experiences. Clearly articulate this problem in your social media post or advertisement to capture their attention and resonate with their needs or frustrations.
Promise of Solution: Once you've highlighted the problem, make a promise of how your product or service can solve it. Clearly communicate the benefits and outcomes that your audience can expect from using your offering. Make your promise compelling and specific to generate interest and curiosity.
Proof of Efficacy: Provide evidence or proof to support your promise and build credibility with your audience. This could include testimonials, reviews, case studies, before-and-after examples, statistics, or demonstrations that showcase the effectiveness and reliability of your product or service. Use social proof to reassure your audience and overcome any skepticism or objections.
Proposal for Action: Close your social media post or advertisement with a clear call to action (CTA) that prompts your audience to take the next step. Whether it's visiting your website, making a purchase, signing up for a free trial, or contacting your sales team, make the CTA compelling and easy to follow. Use persuasive language and urgency to encourage immediate action.
By following the "4 Ps" approach, you can create effective social media posts and advertisements that capture your audience's attention, communicate the value of your offering, and motivate them to take action. Tailor your message to resonate with your audience's needs and preferences, and use evidence, social proof, and clear calls to action to guide them towards conversion.

Supporting document for lesson 03.4: The "LAUNCH" Method

The LAUNCH method: plan, present, follow up and improve

RISER NATION CORP — IF YOU AREN'T BUILDING, YOU ARE DESTROYING

Working curriculum for lessons 03.4, 07.1, 07.4, 09.4 and 12.4. Video recording to be added.

Preserve all seven steps

Although LAUNCH has six letters, the assigned document contains seven steps. Scaling and Iterating is the seventh and must remain part of the process. The method describes a product launch event and the work before and after it. Its statements about excitement, sales and growth describe intended results, not guaranteed outcomes.

The explanations and practice procedures below are authored applications. The source provides no event budget, mandatory duration, numerical conversion threshold or completed event assets.

Supporting source: The LAUNCH Method — complete seven-step sequence

1. Laying the foundation

Define the launch goals, target audience and key messages. Develop a timeline that includes pre-launch activity, the event itself and post-launch follow-up. Distinguish the goal from the activities intended to support it: publishing teaser posts is an activity, while qualified registrations or purchases are possible outcomes.

For lesson 03.4, prepare a brief stating the offer, audience, main message and relevant dates. As an authored planning aid, assign an owner and dependency to each task. Do not assume the event is ready simply because the timeline exists. A smaller release can test assumptions before a larger event, consistent with the separately assigned Launch Current SOP.

Supporting source: Step 1 — Laying the Foundation

Related assigned source: Launch Current SOP — small release before a big event

2. Awareness building

The source names email marketing, social media, PR and advertising. It proposes sneak peeks, behind-the-scenes material and countdowns to build anticipation. Select channels suited to the audience and the assets you can actually produce. The list is not a requirement to use every channel or purchase ads.

For lesson 07.1, explain what each content piece reveals and why it matters. For 07.4, place those pieces on the schedule. A countdown should refer to a real event or deadline. Keep the message consistent with the eventual offer so awareness is built around an accurate expectation.

Supporting source: Step 2 — Awareness Building, channels and content examples

3. Unveiling the product

Present or demonstrate the product. Explain its features, benefits and unique selling points, then show how they relate to the audience's needs and pain points. A feature describes what exists; a benefit explains why that feature may help. A demonstration should show the actual product rather than imply functionality that has not been built.

Use the training's hook, story and offer structure to make the presentation coherent: capture relevant attention, explain the problem and supporting context, then describe the actual offer. Value-focused teaching helps clarify the intended outcome, effort and timing. These are instructional connections, not claims that the source is authored by Brunson or Hormozi.

The source encourages excitement and urgency. Do not substitute hype for evidence or invent scarcity. Keep demonstrations, promises and event terms consistent.

Supporting source: Step 3 — Unveiling the Product

4. Call to action

The listed actions are purchasing, signing up for a free trial and joining a waitlist. Make the selected action prominent and explain what follows. If an incentive or bonus applies during the event, describe its actual contents, eligibility and deadline. An incentive is useful when it supports the buyer's decision or use of the offer; it is not proof of value merely because it is labeled a bonus.

As an authored readiness check, test the destination and confirm that the page, payment or registration process matches the presentation. Do not claim that a button works based only on the slide showing its URL.

Supporting source: Step 4 — CTA, three action examples and incentives

5. Nurturing leads

The source describes thank-you emails, additional product information or resources, promotions or discounts, continued engagement and support through the buying journey. Plan follow-up that answers a real next question. Keep purchaser fulfillment distinct from messages to people who have not bought so the promised delivery does not disappear into a generic sales sequence.

The source does not supply finished emails, a mandatory number of messages or a configured automation. Draft those assets separately and review their accuracy. This lesson describes the process; it does not send messages or authorize contacting event attendees from a source list.

Supporting source: Step 5 — Nurturing Leads

6. Harnessing feedback

Gather feedback during and after the event through surveys, polls and direct responses. Ask about the attendee's experience, preferences and suggestions, which are the three areas named in the source. For lesson 12.4, retain the actual observations alongside your interpretation.

As an authored method, distinguish a reported problem from a proposed solution. Several attendees saying checkout was confusing identifies a point to inspect; one attendee proposing a completely different product does not by itself establish demand for that product. Record the context and avoid treating the most enthusiastic response as representative of everyone.

Supporting source: Step 6 — Harnessing Feedback

7. Scaling and iterating

Review the initial event's results and feedback, identify improvements and refine future launches. Preserve this seventh step even when displaying the six-letter method name. For lesson 09.4, explain which observation supports each proposed change and what remains uncertain.

The source does not provide a scaling threshold or say that every event should expand. An authored decision record can state what happened, the likely explanation, the next change and the evidence that would make you reconsider it. If delivery is still failing or the evidence is inconclusive, fix or test that issue before describing expansion as justified. Separate observed sales from forecasts and do not equate attendance with purchases.

Supporting source: Step 7 — Scaling and Iterating

Complete the event plan and learning loop

Submit an event plan covering all seven steps, with the actual supporting assets linked where they are used. Tailor it to the audience and product, as the source's conclusion requests. Keep missing presentations, recordings, emails or checkout assets labeled as work to complete. After a real event, update the plan with observed results and feedback rather than replacing the original assumptions silently.

Supporting source: complete method and guidance to tailor the event

Complete original source appendices

Open the assigned original: The "LAUNCH" Method

Complete readable source
The "LAUNCH" Method
Steps:
1. Laying the Foundation: Begin by laying the foundation for your product launch event. Define your goals, target audience, and key messaging points. Develop a timeline and plan for the event, including pre-launch activities, the launch event itself, and post-launch follow-up.
2. Awareness Building: Build awareness for your product launch event through various channels, including email marketing, social media, PR, and advertising. Tease the event and create anticipation among your audience by sharing sneak peeks, behind-the-scenes content, and countdowns leading up to the launch.
3. Unveiling the Product: Unveil your product during the launch event with a captivating presentation or demonstration. Highlight its features, benefits, and unique selling points, and show how it addresses the needs and pain points of your target audience. Create excitement and urgency around the product launch to motivate attendees to take action.
4. Call to Action (CTA): Include a clear call to action during the launch event to prompt attendees to take the next step. Whether it's making a purchase, signing up for a free trial, or joining a waitlist, make the CTA prominent and compelling. Provide incentives or bonuses for attendees who take action during the event.
5. Nurturing Leads: Nurture leads generated during the launch event by following up with attendees afterward. Send thank-you emails, provide additional information or resources about the product, and offer special promotions or discounts to encourage conversions. Continue to engage with leads and provide support throughout their buying journey.
6. Harnessing Feedback: Gather feedback from attendees during and after the launch event to gather insights and improve future events and product launches. Use surveys, polls, and direct feedback to understand attendees' experiences, preferences, and suggestions for improvement.
7. Scaling and Iterating: Scale and iterate on your product launch process based on the results and feedback from your initial launch event. Identify areas of improvement and opportunities for optimization, and refine your approach for future launches. Continuously iterate and evolve your product launch strategy to drive better results over time.
By following the "LAUNCH" method, you can create a successful product launch event that generates excitement, drives engagement, and ultimately, leads to increased sales and business growth. Tailor your approach to your audience and product, and leverage the power of events to create memorable experiences that resonate with attendees and drive action.
Native document text
The "LAUNCH" Method
Steps:
Laying the Foundation: Begin by laying the foundation for your product launch event. Define your goals, target audience, and key messaging points. Develop a timeline and plan for the event, including pre-launch activities, the launch event itself, and post-launch follow-up.
Awareness Building: Build awareness for your product launch event through various channels, including email marketing, social media, PR, and advertising. Tease the event and create anticipation among your audience by sharing sneak peeks, behind-the-scenes content, and countdowns leading up to the launch.
Unveiling the Product: Unveil your product during the launch event with a captivating presentation or demonstration. Highlight its features, benefits, and unique selling points, and show how it addresses the needs and pain points of your target audience. Create excitement and urgency around the product launch to motivate attendees to take action.
Call to Action (CTA): Include a clear call to action during the launch event to prompt attendees to take the next step. Whether it's making a purchase, signing up for a free trial, or joining a waitlist, make the CTA prominent and compelling. Provide incentives or bonuses for attendees who take action during the event.
Nurturing Leads: Nurture leads generated during the launch event by following up with attendees afterward. Send thank-you emails, provide additional information or resources about the product, and offer special promotions or discounts to encourage conversions. Continue to engage with leads and provide support throughout their buying journey.
Harnessing Feedback: Gather feedback from attendees during and after the launch event to gather insights and improve future events and product launches. Use surveys, polls, and direct feedback to understand attendees' experiences, preferences, and suggestions for improvement.
Scaling and Iterating: Scale and iterate on your product launch process based on the results and feedback from your initial launch event. Identify areas of improvement and opportunities for optimization, and refine your approach for future launches. Continuously iterate and evolve your product launch strategy to drive better results over time.
By following the "LAUNCH" method, you can create a successful product launch event that generates excitement, drives engagement, and ultimately, leads to increased sales and business growth. Tailor your approach to your audience and product, and leverage the power of events to create memorable experiences that resonate with attendees and drive action.

Launch planning and offer delivery — source-linked curriculum

Working teaching for review; source and dependency gaps remain identified in each module.

Lesson 03.4

Assigned documents and teaching

Additional assigned lesson teaching and sources

These source-linked modules belong to the lessons identified below.

Supporting document for lesson 03.4: THE GREAT LAUNCH PHILOSOPHY COMPARISON

Compare four launch structures before choosing one

Video placeholder: record after review. This lesson compares the assigned document’s four launch models, including every phase and all thirteen comparison dimensions. Its historical attributions, minimum audiences, prices, spending and revenue estimates are source claims, not independently verified current facts. Use the models to plan and test a launch, not to predict guaranteed results. Assigned launch-comparison source.

1. Study the staged prelaunch model

The source attributes Product Launch Formula to Jeff Walker and describes a Sideways Sales Letter: a sales argument delivered through successive prelaunch pieces rather than one long page. It claims historical invention in the late 1990s and influence over later models, but supplies no supporting historical citation. The useful design question is how each piece builds understanding before the offer opens. Assigned launch-comparison source.

Four phases and their deliverables

The source’s Pre-Pre-Launch occupies weeks 1–3: explore the idea and gather market information before committing publicly. Weeks 4–6 deliver three prelaunch pieces: Opportunity explains why the problem matters; Transformation explains the journey with evidence and case studies; Ownership Experience helps the audience understand use and resolve objections. Each is emailed and hosted on a free page with an engagement request such as a comment, share or answer. Open Cart lasts up to seven days with roughly five to seven emails and a stated close. Post-Launch covers delivery, testimonial collection and an upsell sequence. Assigned launch-comparison source.

Fit, effort and timing caveats

The narrative gives a total of 6–12 weeks, $297–$2,000-plus courses/programs, several thousand engaged subscribers for a full launch, and a Seed Launch variation for smaller lists. It lists 10–20-plus emails overall and urgency through cart close, expiring bonuses and a price increase. The proposed mechanism is accumulated understanding and trust from three substantial pieces over several weeks. Its claim that this makes agreement inevitable is rhetoric, not evidence. Its weakness section calls a launch a three-month minimum and suggests only two to three per year; that minimum conflicts with the six-week lower end above. Assigned launch-comparison source.

2. Study the webinar-centered launch

The source associates Amy Porterfield with a 90-day relationship-building approach and a free live masterclass. Weeks 1–4 build a topic-specific list through a lead magnet and organic or paid acquisition. Weeks 5–8 use blog posts, Instagram, podcasts and YouTube as connected preparation. The webinar opens the cart: the source gives 60–90 minutes total, about 45 minutes teaching and 15–20 minutes presenting the offer. Those segments account for roughly 60–65 minutes, so a 90-minute schedule would need additional specified time. Open Cart lasts five to seven days with testimonials, FAQs and final reminders. The source also describes an eight-day rolling evergreen sequence from registration to close. Assigned launch-comparison source.

Webinar requirements and source assertions

The narrative lists $497–$2,000 course pricing, a claimed $1,997–$2,997 flagship price, 10,000-plus subscribers and/or substantial advertising, alleged $50,000–$200,000 launch ad spending, and 15–25 emails. Its urgency mechanisms are live-attendee bonuses, cart close, price changes and replay expiry. It proposes that presentation, immediate objection handling and shared attendance build trust. The resource demands include preparation, a webinar stack such as WebinarJam, Zoom Webinars or Demio, budget and a team. Claims about the educator’s recent fatigue or strategic pivot remain unverified source statements. A live event can support conversation; it does not prove demand or require a particular budget for every business. Assigned launch-comparison source.

3. Study the five-day challenge

The document groups Rachel Miller and Allison Prince under a flash-sale/five-day challenge model in its Cash Spike research context. It describes a free challenge, often in a Facebook group, with daily value and a final offer. The proposed schedule is two to three preparation weeks, five live days and a three-day cart, described approximately as four weeks overall. Its price range is $27–$197 and audience example is a few thousand Facebook followers or 2,000-plus email subscribers. The stated urgency is the challenge ending with an offer deadline; the tradeoff is daily live delivery and difficulty repeating the event frequently. Treat the grouping as the source’s comparison, not proof the named educators use identical systems. Assigned launch-comparison source.

4. Study the short public-launch window

The source associates Maria Wendt’s Cash Spike model with a four-to-five-week preparation period and a 48-hour public sale. Weeks 1–4 involve daily problem-aware Instagram/Facebook posts without an announcement, countdown or prelaunch video series. Week 4 introduces a VIP waitlist using a simple landing page. VIP access begins 24 hours before the public launch with one email. Public day one uses two emails plus social promotion; day two uses three emails and a midnight close. The distinction between preparation, VIP access and public sale matters when counting time and messages. Assigned launch-comparison source.

Short-launch fit and limitations

The narrative describes primarily $17–$97 offers, sometimes $197, and says the method is not designed for $500-plus products. It claims a minimum of 300–500 followers and successful micro-audience use without supplying supporting evidence. It counts five public emails over two days, plus the separately described VIP email. Its urgency prescription is a real midnight close with twelve urgency angles across five emails, but the twelve angles are not enumerated in this document. Do not invent them as source content. The proposed strengths are consistency, speed and less price friction; weaknesses are lower revenue per launch and dependence on ongoing content. None establishes that low price guarantees an easy decision. Assigned launch-comparison source.

5. Compare all thirteen source dimensions

Read the following values as the source’s comparative estimates. They are retained even where they conflict with the narratives. A planning decision should check the assumptions, audience quality, offer fit, fulfillment capacity and evidence behind each value. Assigned launch-comparison source.

Total Launch Duration

Walker PLF: 6–12 weeks; Porterfield: 10–14 weeks; Flash Sale/Challenge: 3–4 weeks; Wendt Cash Spike: 4–5 weeks (48hr sale). Source table: Total Launch Duration.

Active Selling Window

Walker PLF: 5–7 days; Porterfield: 5–7 days; Flash Sale/Challenge: 3 days; Wendt Cash Spike: 2 days. Source table: Active Selling Window.

Launches Per Year

Walker PLF: 2–3 max; Porterfield: 1–3 max; Flash Sale/Challenge: 3–4; Wendt Cash Spike: 6–12. Source table: Launches Per Year.

Minimum Audience

Walker PLF: 3,000+ list; Porterfield: 5,000+ list + ad budget; Flash Sale/Challenge: 2,000–3,000; Wendt Cash Spike: 300–500 followers. Source table: Minimum Audience.

Price Point

Walker PLF: $297–$2,000+; Porterfield: $497–$3,000; Flash Sale/Challenge: $27–$197; Wendt Cash Spike: $17–$197. Source table: Price Point.

Emails Sent

Walker PLF: 10–20+; Porterfield: 15–25+; Flash Sale/Challenge: 10–15; Wendt Cash Spike: 5 emails. Source table: Emails Sent.

Tech Stack Complexity

Walker PLF: High; Porterfield: Very High; Flash Sale/Challenge: Moderate; Wendt Cash Spike: Low. Source table: Tech Stack Complexity.

Ad Spend Required

Walker PLF: Optional but heavy; Porterfield: Often $50k–$200k; Flash Sale/Challenge: Optional; Wendt Cash Spike: Zero required. Source table: Ad Spend Required.

Team Required

Walker PLF: Often yes; Porterfield: Often yes; Flash Sale/Challenge: Sometimes; Wendt Cash Spike: Solo-friendly. Source table: Team Required.

Content Created for Launch

Walker PLF: 3 PLCs + 7+ emails; Porterfield: Webinar + 15+ emails; Flash Sale/Challenge: 5 daily videos + emails; Wendt Cash Spike: 4 weeks of posts + 5 emails. Source table: Content Created for Launch.

Skill Required

Walker PLF: High (video, copywriting, strategy); Porterfield: High (webinar presenting, ads); Flash Sale/Challenge: Moderate; Wendt Cash Spike: Low–Moderate. Source table: Skill Required.

Revenue Ceiling

Walker PLF: Very high ($100k–$1M+ launches); Porterfield: Very high; Flash Sale/Challenge: Moderate; Wendt Cash Spike: Lower per launch, higher per year via frequency. Source table: Revenue Ceiling.

Compounding Effect

Walker PLF: Strong (list grows, brand builds); Porterfield: Strong; Flash Sale/Challenge: Moderate; Wendt Cash Spike: Very strong via relaunch. Source table: Compounding Effect.

6. Resolve contradictions before making a calendar

The table gives Porterfield a 5,000-plus list plus advertising, whereas the narrative says 10,000-plus and/or a budget. Its $497–$3,000 table range differs from the narrative’s general $497–$2,000 range and named flagship prices. The PLF table gives 3,000-plus subscribers where the prose says several thousand. The challenge table gives three to four weeks and 2,000–3,000 audience members; the prose uses an approximate four weeks and different platform-specific descriptions. Preserve both versions rather than choosing one as a proven universal threshold. Source narratives and comparison table.

The short-launch table counts five emails, but the narrative adds a separate VIP email: a participant receiving both sequences could receive six under this plan. The table gives six to twelve annual launches, while the closing prose proposes five emails twice monthly. Those are different cadences. Also distinguish the 48-hour public window from the preceding VIP access day. State the actual calendar, audience segments and total message count in your own plan. Source: VIP/public cadence and annual frequency.

7. Test the trust-versus-momentum interpretation

The document frames the longer models as trust accumulated over time for $1,000–$3,000 purchases, and the shorter model as momentum from consistent content for smaller purchases. Its contrast between a $27 decision in 30 seconds and a 90-day relationship is illustrative rhetoric, not a measured buying-time rule. Customers at any price can need evidence and clear terms. Choose the amount and format of explanation around the actual purchase decision. Source: philosophical comparison.

The source compares a $50,000 launch every four months with six $15,000 launches every two months: those gross totals are $150,000 and $90,000 annually. If each of the six rises to $25,000, the total becomes $150,000, which equals rather than exceeds the first example. Costs, delivery load and cash timing are not specified. Claims of better cash flow, more learning or less burnout require examination; repetition can help iteration but also creates work. Source: complete frequency-versus-magnitude arithmetic example.

The closing passage contrasts the roles of content director, ad buyer, webinar presenter and planner with daily Instagram posting and five emails twice monthly. It also characterizes the audiences as established teams versus beginners/solopreneurs. These are broad source generalizations, not fixed eligibility rules. The practical lesson is to compare the actual resources needed and the contribution from the offer. Applying an elaborate $2,000-course launch to a $27 product may be inefficient, but the conclusion depends on costs and customer behavior. Source: workload, audience and offer-price fit.

8. Apply the course framework and choose a test

Our authored connection to the established Brunson/Hormozi themes is to make the hook, story and offer explain one supported transformation, then reduce unnecessary effort or delay without overstating the likelihood of success. Every proposed deadline, bonus limit and price change should describe a real condition. A longer sequence can teach and answer questions; a shorter one can suit a simpler decision. Neither format removes the need for truthful evidence and delivery. Assigned comparison supporting the marketing application.

For your assignment, choose one offer and complete all thirteen comparison fields for your actual plan. Include preparation, VIP access if any, public selling, delivery, total emails by audience, price, capacity and measurement. Identify which source estimates you adopted as test assumptions and which you rejected. Reconcile the timing and budget arithmetic, then define what evidence would justify repeating or changing the launch. Preserve the complete source and its comparison table for review. Full launch-comparison document.

Complete original source appendices

Open the assigned original: THE GREAT LAUNCH PHILOSOPHY COMPARISON

Complete readable source
THE GREAT LAUNCH PHILOSOPHY COMPARISON




This is one of the most important strategic questions in digital product marketing. Here's the full breakdown across every meaningful dimension:


The Four Schools of Thought


## 1. JEFF WALKER — Product Launch Formula (PLF)
**The Originator. The 6–12 Week Event Launch.**


Jeff Walker invented the modern digital product launch in the late 1990s. Everything that came after is either an evolution or a reaction to his model.


**Core Structure:**
The PLF is built around a **Sideways Sales Letter** — instead of one long sales page, you deliver your pitch across multiple pieces of pre-launch content (PLC) over weeks, each building on the last.


**Timeline:** 6–12 weeks total, broken into distinct phases:


- **Pre-Pre-Launch** (Weeks 1–3): Seed the idea, gather market intel, do mental conditioning with your audience. You're asking "what if I made something about X?" before you've committed publicly.
- **Pre-Launch** (Weeks 4–6): Release 3 pieces of Prelaunch Content (PLC). PLC1 = The Opportunity (why this matters now). PLC2 = The Transformation (case studies, proof, the journey). PLC3 = The Ownership Experience (what it's like on the other side, overcome objections). Each PLC gets emailed to the list and lives on a free page. Each ends with a call to engage — comment, share, answer a question. The goal is to build a relationship, not just warm an audience.
- **Open Cart** (Days 1–7): Cart opens. Multiple emails go out — typically 5–7 over 7 days. Hard close at the end.
- **Post-Launch**: Testimonial gathering, product delivery, upsell sequence.


**Price Point:** Designed for $297–$2,000+ courses and programs. Not built for low-ticket.


**Audience Required:** Walker is explicit — you need an email list. His seed launch variation (called the "Seed Launch") can work with a smaller list, but the full PLF requires several thousand engaged subscribers minimum to generate meaningful revenue.


**Email Volume:** Heavy. 10–20+ emails across the full launch cycle.


**Urgency Mechanism:** Cart close date + bonuses that expire on launch day + price increase.


**What Makes It Work:** The psychological buildup. By the time the cart opens, your audience has consumed 3 pieces of deep content over 3+ weeks. They are educated, warm, and invested. The "yes" feels inevitable rather than pressured.


**Weakness:** Extremely time-intensive. A full PLF launch is a 3-month project minimum. Most creators can only do 2–3 per year. The effort-to-frequency ratio is brutal.


---


## 2. AMY PORTERFIELD — The Webinar Launch Method
**The Polished Professional. The 90-Day Relationship Launch.**


Amy Porterfield is a direct student of the PLF era but adapted it for the webinar age. Her model is arguably the most widely replicated in the course-creator space.


**Core Structure:**
The anchor of her method is a **live free webinar** (masterclass). Everything builds toward getting people on the webinar — and the webinar is where the sale is made.


**Timeline:** 90 days total (per her own "90-Day Pre-Launch Blueprint"):


- **Phase 1 — Free Masterclass / Lead Magnet Build** (Weeks 1–4): Build your list specifically around the topic. Create a free lead magnet that connects to the course. Run paid ads or organic content to grow registrations.
- **Phase 2 — Virtual Experience / Launch Content** (Weeks 5–8): A series of content pieces that warm the audience — blog posts, Instagram content, podcast episodes, YouTube videos. All themed around the problem your course solves. She calls these "breadcrumbs" that lead to the webinar.
- **Phase 3 — The Live Webinar Event** (Day 1 of open cart): 60–90 minute live presentation. Teach real value for 45 minutes. Transition to the offer for the last 15–20 minutes. Cart opens on the webinar.
- **Phase 4 — Open Cart** (5–7 days): Daily or near-daily emails. Testimonials, FAQ, urgency countdown, final call.
- **Evergreen Option**: She also teaches an "evergreen" version using automated webinars running for 8 days from registration to cart close, on a rolling basis.


**Price Point:** $497–$2,000 online courses. Her own flagship (Digital Course Academy) sells for $1,997–$2,997. Her method is calibrated for this range.


**Audience Required:** Large email list (10,000+) and/or significant paid ad budget. She regularly spends $50,000–$200,000 in ads during a launch to drive webinar registrations.


**Email Volume:** Heavy. 15–25 emails across the pre-launch and open cart.


**Urgency Mechanism:** Webinar bonuses for live attendees + cart close date + price going up + replay expiry.


**What Makes It Work:** The webinar itself does the heavy selling in real time. You see the person, you hear the enthusiasm, you get immediate objection-handling. The live event creates a community moment — thousands of people registering for the same thing at the same time, which creates social proof in real time.


**Weakness:** Enormously resource-intensive. A full launch requires weeks of preparation, a webinar tech stack (WebinarJam, Zoom Webinars, Demio, etc.), significant ad spend, and a large team. Her recent pivot acknowledges this — she's publicly discussed launch fatigue and has moved toward content-driven evergreen systems for exactly this reason.


---


## 3. RACHEL MILLER / ALLISON PRINCE — The Flash Sale / 5-Day Challenge Model
*(Competitors discussed in the context of the Cash Spike research)*


**Core Structure:** A 5-day free challenge that builds community, delivers value daily, and ends with a sale offer. The challenge is often run inside a Facebook Group, drawing on the same engagement-loop logic as PLF but compressed.


**Timeline:** 2–3 weeks prep + 5-day live event + 3-day cart = 4 weeks total.


**Price Point:** $27–$197. Low-to-mid-ticket focus.


**Audience Required:** Moderate — a few thousand Facebook followers or an email list of 2,000+ can work.


**Urgency Mechanism:** Challenge ends = offer expires. Community momentum.


**Weakness:** Requires daily live delivery during the challenge week. High-effort during the event itself. Difficult to systematize or repeat frequently.


---


## 4. MARIA WENDT — The Cash Spike 2-Day Launch
**The Insurgent. The Repeatable Sprint.**


Maria's model is a conscious rejection of everything above. She looked at how much time, money, and energy the traditional models require and built the opposite.


**Core Structure:**
Short, sharp, repeatable. The tee-up replaces the pre-launch. The 2-day window replaces the 7-day open cart. The VIP waitlist replaces the webinar registration funnel.


**Timeline:** 4–5 weeks total, but the actual selling window is 48 hours:


- **Tee-Up Phase** (Weeks 1–4): 4 weeks of organic Instagram/Facebook content. Not launch content — problem-aware content. This is your daily posting habit. No announcement. No countdown. No pre-launch video series. Just consistent content that addresses the pain your product solves.
- **VIP Waitlist** (Week 4): One announcement that a product is coming. "Get on the list for early access." Simple landing page. No elaborate funnel.
- **VIP Day** (24 hours before public): Waitlist gets early access. 1 email. Sales come in.
- **2-Day Public Launch**: Day 1 open cart + 2 emails + social blitz. Day 2 urgency escalation + 3 emails + cart closes at midnight. Done.


**Price Point:** Primarily $17–$97. Occasionally up to $197. Not designed for $500+ products.


**Audience Required:** 300–500 followers minimum. The smallest viable audience of any method listed here. She has demonstrated this works with micro-audiences.


**Email Volume:** 5 emails total across 2 days. Intentionally minimal.


**Urgency Mechanism:** Hard close at midnight Day 2 — cart disappears entirely, no exceptions. 12 specific urgency angles across the 5 emails.


**What Makes It Work:** The psychology of scarcity combined with the psychology of speed. The tee-up creates desire without announcing the product. The short window forces decision. The low price removes friction. The result is concentrated buying behavior in a 48-hour window rather than spread across 7 days of declining momentum.


**Weakness:** Lower revenue per launch than the methods above (by design — compensated by frequency). Not suitable for courses priced at $500+. Requires consistent daily content creation during the tee-up or the launch falls flat.


---


## THE HEAD-TO-HEAD COMPARISON TABLE


| Dimension | Jeff Walker PLF | Amy Porterfield | Flash Sale/Challenge | Maria Wendt Cash Spike |
|---|---|---|---|---|
| **Total Launch Duration** | 6–12 weeks | 10–14 weeks | 3–4 weeks | 4–5 weeks (48hr sale) |
| **Active Selling Window** | 5–7 days | 5–7 days | 3 days | **2 days** |
| **Launches Per Year** | 2–3 max | 1–3 max | 3–4 | **6–12** |
| **Minimum Audience** | 3,000+ list | 5,000+ list + ad budget | 2,000–3,000 | **300–500 followers** |
| **Price Point** | $297–$2,000+ | $497–$3,000 | $27–$197 | **$17–$197** |
| **Emails Sent** | 10–20+ | 15–25+ | 10–15 | **5 emails** |
| **Tech Stack Complexity** | High | Very High | Moderate | **Low** |
| **Ad Spend Required** | Optional but heavy | Often $50k–$200k | Optional | **Zero required** |
| **Team Required** | Often yes | Often yes | Sometimes | **Solo-friendly** |
| **Content Created for Launch** | 3 PLCs + 7+ emails | Webinar + 15+ emails | 5 daily videos + emails | **4 weeks of posts + 5 emails** |
| **Skill Required** | High (video, copywriting, strategy) | High (webinar presenting, ads) | Moderate | **Low–Moderate** |
| **Revenue Ceiling** | Very high ($100k–$1M+ launches) | Very high | Moderate | Lower per launch, higher per year via frequency |
| **Compounding Effect** | Strong (list grows, brand builds) | Strong | Moderate | **Very strong via relaunch** |


---


## THE PHILOSOPHICAL DIFFERENCE — THE REAL STORY


The PLF and Amy Porterfield methods are fundamentally built on **trust accumulation over time**. You spend months warming an audience, delivering value, educating them — so that when the cart opens, the "yes" is the culmination of a long relationship. This is the right model for high-ticket products where the buyer needs significant conviction before spending $1,000–$3,000.


Maria's model is built on **momentum accumulation over consistency**. You don't need months of pre-launch. You need weeks of consistent daily content that keeps people aware of the problem. The low price means conviction doesn't need to be deep — it needs to be present. $27 requires a yes in 30 seconds, not a yes that builds over 90 days.


**The key insight Maria has that the others don't explicitly teach:** Frequency beats magnitude. One $50,000 launch every 4 months = $150,000/year. Six $15,000 launches every 2 months = $90,000/year — but with better cash flow, better data, faster iteration, and far less burnout. And as the launches improve and the audience grows, those $15,000 launches become $25,000 launches, and suddenly the math inverts.


The PLF and Porterfield models require you to be a content director, ad buyer, webinar presenter, and strategic planner all at once. Maria's model requires you to post on Instagram every day and send 5 emails twice a month. The accessibility gap is enormous — which is exactly why she's built a following of solopreneurs and beginners while Walker and Porterfield primarily serve established business owners with teams.


**Neither is wrong. They are calibrated for completely different stages and price points.** The mistake most creators make is applying a $2,000-course launch model to a $27 product, then wondering why the ROI doesn't justify the effort.
Native document text

THE GREAT LAUNCH PHILOSOPHY COMPARISON


This is one of the most important strategic questions in digital product marketing. Here's the full breakdown across every meaningful dimension:

The Four Schools of Thought

## 1. JEFF WALKER — Product Launch Formula (PLF)
**The Originator. The 6–12 Week Event Launch.**

Jeff Walker invented the modern digital product launch in the late 1990s. Everything that came after is either an evolution or a reaction to his model.

**Core Structure:**
The PLF is built around a **Sideways Sales Letter** — instead of one long sales page, you deliver your pitch across multiple pieces of pre-launch content (PLC) over weeks, each building on the last.

**Timeline:** 6–12 weeks total, broken into distinct phases:

- **Pre-Pre-Launch** (Weeks 1–3): Seed the idea, gather market intel, do mental conditioning with your audience. You're asking "what if I made something about X?" before you've committed publicly.
- **Pre-Launch** (Weeks 4–6): Release 3 pieces of Prelaunch Content (PLC). PLC1 = The Opportunity (why this matters now). PLC2 = The Transformation (case studies, proof, the journey). PLC3 = The Ownership Experience (what it's like on the other side, overcome objections). Each PLC gets emailed to the list and lives on a free page. Each ends with a call to engage — comment, share, answer a question. The goal is to build a relationship, not just warm an audience.
- **Open Cart** (Days 1–7): Cart opens. Multiple emails go out — typically 5–7 over 7 days. Hard close at the end.
- **Post-Launch**: Testimonial gathering, product delivery, upsell sequence.

**Price Point:** Designed for $297–$2,000+ courses and programs. Not built for low-ticket.

**Audience Required:** Walker is explicit — you need an email list. His seed launch variation (called the "Seed Launch") can work with a smaller list, but the full PLF requires several thousand engaged subscribers minimum to generate meaningful revenue.

**Email Volume:** Heavy. 10–20+ emails across the full launch cycle.

**Urgency Mechanism:** Cart close date + bonuses that expire on launch day + price increase.

**What Makes It Work:** The psychological buildup. By the time the cart opens, your audience has consumed 3 pieces of deep content over 3+ weeks. They are educated, warm, and invested. The "yes" feels inevitable rather than pressured.

**Weakness:** Extremely time-intensive. A full PLF launch is a 3-month project minimum. Most creators can only do 2–3 per year. The effort-to-frequency ratio is brutal.

---

## 2. AMY PORTERFIELD — The Webinar Launch Method
**The Polished Professional. The 90-Day Relationship Launch.**

Amy Porterfield is a direct student of the PLF era but adapted it for the webinar age. Her model is arguably the most widely replicated in the course-creator space.

**Core Structure:**
The anchor of her method is a **live free webinar** (masterclass). Everything builds toward getting people on the webinar — and the webinar is where the sale is made.

**Timeline:** 90 days total (per her own "90-Day Pre-Launch Blueprint"):

- **Phase 1 — Free Masterclass / Lead Magnet Build** (Weeks 1–4): Build your list specifically around the topic. Create a free lead magnet that connects to the course. Run paid ads or organic content to grow registrations.
- **Phase 2 — Virtual Experience / Launch Content** (Weeks 5–8): A series of content pieces that warm the audience — blog posts, Instagram content, podcast episodes, YouTube videos. All themed around the problem your course solves. She calls these "breadcrumbs" that lead to the webinar.
- **Phase 3 — The Live Webinar Event** (Day 1 of open cart): 60–90 minute live presentation. Teach real value for 45 minutes. Transition to the offer for the last 15–20 minutes. Cart opens on the webinar.
- **Phase 4 — Open Cart** (5–7 days): Daily or near-daily emails. Testimonials, FAQ, urgency countdown, final call.
- **Evergreen Option**: She also teaches an "evergreen" version using automated webinars running for 8 days from registration to cart close, on a rolling basis.

**Price Point:** $497–$2,000 online courses. Her own flagship (Digital Course Academy) sells for $1,997–$2,997. Her method is calibrated for this range.

**Audience Required:** Large email list (10,000+) and/or significant paid ad budget. She regularly spends $50,000–$200,000 in ads during a launch to drive webinar registrations.

**Email Volume:** Heavy. 15–25 emails across the pre-launch and open cart.

**Urgency Mechanism:** Webinar bonuses for live attendees + cart close date + price going up + replay expiry.

**What Makes It Work:** The webinar itself does the heavy selling in real time. You see the person, you hear the enthusiasm, you get immediate objection-handling. The live event creates a community moment — thousands of people registering for the same thing at the same time, which creates social proof in real time.

**Weakness:** Enormously resource-intensive. A full launch requires weeks of preparation, a webinar tech stack (WebinarJam, Zoom Webinars, Demio, etc.), significant ad spend, and a large team. Her recent pivot acknowledges this — she's publicly discussed launch fatigue and has moved toward content-driven evergreen systems for exactly this reason.

---

## 3. RACHEL MILLER / ALLISON PRINCE — The Flash Sale / 5-Day Challenge Model
*(Competitors discussed in the context of the Cash Spike research)*

**Core Structure:** A 5-day free challenge that builds community, delivers value daily, and ends with a sale offer. The challenge is often run inside a Facebook Group, drawing on the same engagement-loop logic as PLF but compressed.

**Timeline:** 2–3 weeks prep + 5-day live event + 3-day cart = 4 weeks total.

**Price Point:** $27–$197. Low-to-mid-ticket focus.

**Audience Required:** Moderate — a few thousand Facebook followers or an email list of 2,000+ can work.

**Urgency Mechanism:** Challenge ends = offer expires. Community momentum.

**Weakness:** Requires daily live delivery during the challenge week. High-effort during the event itself. Difficult to systematize or repeat frequently.

---

## 4. MARIA WENDT — The Cash Spike 2-Day Launch
**The Insurgent. The Repeatable Sprint.**

Maria's model is a conscious rejection of everything above. She looked at how much time, money, and energy the traditional models require and built the opposite.

**Core Structure:**
Short, sharp, repeatable. The tee-up replaces the pre-launch. The 2-day window replaces the 7-day open cart. The VIP waitlist replaces the webinar registration funnel.

**Timeline:** 4–5 weeks total, but the actual selling window is 48 hours:

- **Tee-Up Phase** (Weeks 1–4): 4 weeks of organic Instagram/Facebook content. Not launch content — problem-aware content. This is your daily posting habit. No announcement. No countdown. No pre-launch video series. Just consistent content that addresses the pain your product solves.
- **VIP Waitlist** (Week 4): One announcement that a product is coming. "Get on the list for early access." Simple landing page. No elaborate funnel.
- **VIP Day** (24 hours before public): Waitlist gets early access. 1 email. Sales come in.
- **2-Day Public Launch**: Day 1 open cart + 2 emails + social blitz. Day 2 urgency escalation + 3 emails + cart closes at midnight. Done.

**Price Point:** Primarily $17–$97. Occasionally up to $197. Not designed for $500+ products.

**Audience Required:** 300–500 followers minimum. The smallest viable audience of any method listed here. She has demonstrated this works with micro-audiences.

**Email Volume:** 5 emails total across 2 days. Intentionally minimal.

**Urgency Mechanism:** Hard close at midnight Day 2 — cart disappears entirely, no exceptions. 12 specific urgency angles across the 5 emails.

**What Makes It Work:** The psychology of scarcity combined with the psychology of speed. The tee-up creates desire without announcing the product. The short window forces decision. The low price removes friction. The result is concentrated buying behavior in a 48-hour window rather than spread across 7 days of declining momentum.

**Weakness:** Lower revenue per launch than the methods above (by design — compensated by frequency). Not suitable for courses priced at $500+. Requires consistent daily content creation during the tee-up or the launch falls flat.

---

## THE HEAD-TO-HEAD COMPARISON TABLE

| Dimension | Jeff Walker PLF | Amy Porterfield | Flash Sale/Challenge | Maria Wendt Cash Spike |
|---|---|---|---|---|
| **Total Launch Duration** | 6–12 weeks | 10–14 weeks | 3–4 weeks | 4–5 weeks (48hr sale) |
| **Active Selling Window** | 5–7 days | 5–7 days | 3 days | **2 days** |
| **Launches Per Year** | 2–3 max | 1–3 max | 3–4 | **6–12** |
| **Minimum Audience** | 3,000+ list | 5,000+ list + ad budget | 2,000–3,000 | **300–500 followers** |
| **Price Point** | $297–$2,000+ | $497–$3,000 | $27–$197 | **$17–$197** |
| **Emails Sent** | 10–20+ | 15–25+ | 10–15 | **5 emails** |
| **Tech Stack Complexity** | High | Very High | Moderate | **Low** |
| **Ad Spend Required** | Optional but heavy | Often $50k–$200k | Optional | **Zero required** |
| **Team Required** | Often yes | Often yes | Sometimes | **Solo-friendly** |
| **Content Created for Launch** | 3 PLCs + 7+ emails | Webinar + 15+ emails | 5 daily videos + emails | **4 weeks of posts + 5 emails** |
| **Skill Required** | High (video, copywriting, strategy) | High (webinar presenting, ads) | Moderate | **Low–Moderate** |
| **Revenue Ceiling** | Very high ($100k–$1M+ launches) | Very high | Moderate | Lower per launch, higher per year via frequency |
| **Compounding Effect** | Strong (list grows, brand builds) | Strong | Moderate | **Very strong via relaunch** |

---

## THE PHILOSOPHICAL DIFFERENCE — THE REAL STORY

The PLF and Amy Porterfield methods are fundamentally built on **trust accumulation over time**. You spend months warming an audience, delivering value, educating them — so that when the cart opens, the "yes" is the culmination of a long relationship. This is the right model for high-ticket products where the buyer needs significant conviction before spending $1,000–$3,000.

Maria's model is built on **momentum accumulation over consistency**. You don't need months of pre-launch. You need weeks of consistent daily content that keeps people aware of the problem. The low price means conviction doesn't need to be deep — it needs to be present. $27 requires a yes in 30 seconds, not a yes that builds over 90 days.

**The key insight Maria has that the others don't explicitly teach:** Frequency beats magnitude. One $50,000 launch every 4 months = $150,000/year. Six $15,000 launches every 2 months = $90,000/year — but with better cash flow, better data, faster iteration, and far less burnout. And as the launches improve and the audience grows, those $15,000 launches become $25,000 launches, and suddenly the math inverts.

The PLF and Porterfield models require you to be a content director, ad buyer, webinar presenter, and strategic planner all at once. Maria's model requires you to post on Instagram every day and send 5 emails twice a month. The accessibility gap is enormous — which is exactly why she's built a following of solopreneurs and beginners while Walker and Porterfield primarily serve established business owners with teams.

**Neither is wrong. They are calibrated for completely different stages and price points.** The mistake most creators make is applying a $2,000-course launch model to a $27 product, then wondering why the ROI doesn't justify the effort.

Original source comparison table
DimensionJeff Walker PLFAmy PorterfieldFlash Sale/ChallengeMaria Wendt Cash Spike
Total Launch Duration6–12 weeks10–14 weeks3–4 weeks4–5 weeks (48hr sale)
Active Selling Window5–7 days5–7 days3 days2 days
Launches Per Year2–3 max1–3 max3–46–12
Minimum Audience3,000+ list5,000+ list + ad budget2,000–3,000300–500 followers
Price Point$297–$2,000+$497–$3,000$27–$197$17–$197
Emails Sent10–20+15–25+10–155 emails
Tech Stack ComplexityHighVery HighModerateLow
Ad Spend RequiredOptional but heavyOften $50k–$200kOptionalZero required
Team RequiredOften yesOften yesSometimesSolo-friendly
Content Created for Launch3 PLCs + 7+ emailsWebinar + 15+ emails5 daily videos + emails4 weeks of posts + 5 emails
Skill RequiredHigh (video, copywriting, strategy)High (webinar presenting, ads)ModerateLow–Moderate
Revenue CeilingVery high ($100k–$1M+ launches)Very highModerateLower per launch, higher per year via frequency
Compounding EffectStrong (list grows, brand builds)StrongModerateVery strong via relaunch
Original Markdown table cells
[
  [
    "Dimension",
    "Jeff Walker PLF",
    "Amy Porterfield",
    "Flash Sale/Challenge",
    "Maria Wendt Cash Spike"
  ],
  [
    "Total Launch Duration",
    "6–12 weeks",
    "10–14 weeks",
    "3–4 weeks",
    "4–5 weeks (48hr sale)"
  ],
  [
    "Active Selling Window",
    "5–7 days",
    "5–7 days",
    "3 days",
    "2 days"
  ],
  [
    "Launches Per Year",
    "2–3 max",
    "1–3 max",
    "3–4",
    "6–12"
  ],
  [
    "Minimum Audience",
    "3,000+ list",
    "5,000+ list + ad budget",
    "2,000–3,000",
    "300–500 followers"
  ],
  [
    "Price Point",
    "$297–$2,000+",
    "$497–$3,000",
    "$27–$197",
    "$17–$197"
  ],
  [
    "Emails Sent",
    "10–20+",
    "15–25+",
    "10–15",
    "5 emails"
  ],
  [
    "Tech Stack Complexity",
    "High",
    "Very High",
    "Moderate",
    "Low"
  ],
  [
    "Ad Spend Required",
    "Optional but heavy",
    "Often $50k–$200k",
    "Optional",
    "Zero required"
  ],
  [
    "Team Required",
    "Often yes",
    "Often yes",
    "Sometimes",
    "Solo-friendly"
  ],
  [
    "Content Created for Launch",
    "3 PLCs + 7+ emails",
    "Webinar + 15+ emails",
    "5 daily videos + emails",
    "4 weeks of posts + 5 emails"
  ],
  [
    "Skill Required",
    "High (video, copywriting, strategy)",
    "High (webinar presenting, ads)",
    "Moderate",
    "Low–Moderate"
  ],
  [
    "Revenue Ceiling",
    "Very high ($100k–$1M+ launches)",
    "Very high",
    "Moderate",
    "Lower per launch, higher per year via frequency"
  ],
  [
    "Compounding Effect",
    "Strong (list grows, brand builds)",
    "Strong",
    "Moderate",
    "Very strong via relaunch"
  ]
]

Supporting document for lesson 03.4: You are to act as my expert offer launch strategist and system builder

Build a research-to-production operating system

Lesson outcome and video placeholder

Video placeholder: record after lesson review. In this lesson, you will connect niche research to a production calendar and a measurable decision process. The assigned document is a reusable prompt requesting nine groups of outputs. We are studying that specification; it does not demonstrate that a functioning system or validated formulas already exist. Start by filling in its two inputs: your niche and your publishing platform. Every later threshold, data field and assignment should be interpretable in that context. Original offer-launch strategist and system-builder prompt.

1. Configure the decision rules before importing data

The Config section holds minimum search volume, maximum keyword difficulty, virality or hit multipliers for views, retention and engagement, influencer minimum followers and engagement percentage, and trend velocity relative to a baseline. It also holds scoring weights for search volume, cost per click, the keyword-difficulty penalty, trend and commercial intent. Record the default region and the ordering settings used during research. A number without its region, period, measurement definition and platform is difficult to compare. Those context fields are an authored implementation improvement to the source's configuration specification. Source: configuration keys.

Explain each setting to the learner. Search volume describes estimated demand; keyword difficulty is a tool's estimate of competition; CPC is an advertising cost signal; retention describes how much viewing continues under the platform's definition; engagement relates interactions to a stated denominator. A trend multiplier compares a current measurement with its baseline. Choose weights to express your priorities, and document them before selecting winners. The source supplies categories, not universally correct values or a verified predictive model. Source: configurable metrics and score weightings.

2. Preserve three raw import structures

The Raw Influencer Imports table needs tool, handle, platform, followers, engagement, niche and notes. Tool tells you where the record originated; handle and platform identify the creator; followers and engagement describe different aspects of reach; niche and notes preserve relevance and context. Keep the imported row intact when you create a cleaned version so the learner can trace a decision back to the evidence. Source: raw influencer fields.

The Raw Trends table needs tool, topic, metrics, velocity, URL and notes. Preserve both the observation and its source link. The Raw Keywords/Tags/Hashtags table needs source video, title, URL, keyword list and notes. Do not discard the original list merely because you later split it into individual terms. A video URL and title let another researcher check whether a tag actually describes the content. Source: raw trends and keyword import structures.

3. Produce clean views without overwriting evidence

The Clean Influencers view adds a tier, an automatically calculated score and a status. Define the tier rules before applying them. For example, an authored practice rule could use a configured minimum audience and minimum engagement to mark a record eligible for review; that label would still not prove the creator can convert buyers. Keep status separate from score: a high-scoring record may still need identity verification or manual review. Source: clean influencer requirements.

The Clean Trends view includes normalized engagement, a virality score and a flag for a probe. Normalize comparable observations before scoring: use the same platform definition, time window and denominator. As an authored arithmetic example, 40 interactions divided by 1,000 measured views is 0.04, or 4%; another row measured against followers would not be directly comparable. A probe flag means “investigate with a bounded test,” not “proven winner.” Source: clean trend requirements.

The Clean Keywords view deduplicates terms, normalizes case to lowercase and prepares a joined export. The prompt names UNIQUE, TOCOL, SPLIT and TEXTJOIN. Teach their intended jobs here: split delimited lists, arrange the terms into one column, remove repeated entries and join approved terms for export. Preserve raw spelling and original source associations in the import table. The source requests formulas but supplies no cell ranges, delimiters or finished expressions; a formula must be adapted and tested against the actual workbook before being presented as ready to paste. Source: keyword cleanup and named functions.

4. Calculate a score that can be explained

The source proposes a weighted composite score and these example decisions: Go at 0.60 or above; Maybe from 0.45 through 0.59; Kill below 0.45. To handle unrounded values consistently, an authored implementation uses Maybe at 0.45 up to but excluding 0.60. Otherwise, a value such as 0.595 falls into an ambiguity in the written ranges. Use the unrounded score for the decision and display rounding only for readability. The thresholds are examples to calibrate against observed outcomes. Source: scoring framework and example thresholds.

Here is an authored calculation example, not a formula supplied by the document. First express five comparable inputs on a zero-to-one scale: demand D, CPC signal C, trend T, commercial intent I and difficulty K. Define the score as 0.30D + 0.15C + 0.20T + 0.25I + 0.10(1−K). The difficulty term rewards lower difficulty; all weights sum to one. With D=0.8, C=0.4, T=0.6, I=0.9 and K=0.7, the result is 0.24 + 0.06 + 0.12 + 0.225 + 0.03 = 0.675. Under the example rule, this qualifies for a Go test. It is not a 67.5% probability of success. Source motivating the authored weighted-score example.

Document the normalization method and missing-data policy. A blank is not automatically a zero, and an undefined baseline must not silently produce a valid trend multiplier. An authored trend rule could compare current velocity divided by a positive baseline with a configured threshold; if the baseline is absent or zero, mark it for review. An influencer tier rule similarly compares observed followers and engagement with Config values, while a score uses defined weights. These are transparent implementation choices; the source does not specify validated tier boundaries or virality equations. Source: explicit formula and scoring requirements.

5. Connect assignments to a site map

The Influencer Assignments table connects a cluster or topic to a creator and a deliverable. Convert a research opportunity into a specific piece of work: who produces what for which audience question? The Site Map then records pillars, slugs, URLs, schema, calls to action and internal links. Each asset should have a destination and a useful next step. A proposed schema field is a planning entry, not proof of correct implementation or eligibility for a search feature. Source: assignments and site-map fields.

6. Schedule production and define the measurement

The weekly Production Calendar tracks script, filming, editing, publishing and derivative assets, with KPI targets. A derivative is another asset adapted from the main work, such as a short excerpt from a lesson. Make the relationship visible so the team does not confuse a planned asset with a published one. The Metrics table tracks views, watch time, engagement, click-through rate, conversions, amplification used, and insights or next action. Record whether distribution was organic, paid or otherwise amplified so performance comparisons have context. Source: production calendar and metrics requirements.

Define a conversion before collecting results. A click, an email signup and a completed purchase are different events. A target should specify which event and period it measures. Use the insights/next-action field to record the decision the result supports, including “insufficient evidence.” This is our implementation guidance for the source's feedback system. Source: metrics and feedback specification.

7. Run the eight-step operating procedure

Read the workflow in order: Import → Clean → Score → Assign → Site Map → Produce → Measure → Iterate. Import preserves evidence. Clean makes comparable records. Score applies stated rules. Assign names a deliverable and owner. Site Map connects that deliverable to the customer journey. Produce moves it through the calendar. Measure records outcomes. Iterate changes the next decision using those outcomes. Config supports every step; Raw Imports retain evidence; Clean sheets hold normalized views; Scoring records calculations; Assignments links people to work; Site Map defines destinations; Production Calendar records execution; Metrics closes the feedback loop. Source: full SOP and tab-by-tab specification.

8. Adapt the research inputs to the platform

For YouTube, the source names tags, TubeBuddy/vidIQ, Search Explorer and YouTube Analytics. For TikTok, it names Creative Center, hashtag trends and a retention threshold greater than 20%. For Instagram, it names reels and hashtags, engagement-rate benchmarks and Collabstr/Modash filters. For another platform, it asks for equivalent analytics and influencer tools. These are source-listed options and a proposed threshold, not verified current access instructions or universal benchmarks. Confirm tool availability and metric definitions before using them. Do not compare retention percentages from incompatible definitions. Source: all platform-specific notes.

9. Apply the marketing framework and complete the exercise

Our authored application to the established Brunson/Hormozi course themes is to carry the same customer problem from research into the hook, story and offer, then test whether the promised outcome is useful and whether the path reduces avoidable effort or delay. The assigned prompt supplies the research and execution structure; it does not itself attribute this application to either educator. Research scores help prioritize a test, while customer response determines whether the offer is working. Assigned source supporting the research-to-execution application.

Choose one niche and one platform. Create a Config record, one raw influencer row, one raw trend row and one raw keyword row with source URLs. Produce their clean views. Explain your score calculation and decision threshold, assign one deliverable, map its destination and CTA, schedule all production statuses, and define the conversion to measure. Present the result in structured sections with tables and clearly labeled formulas or calculation rules, as the source requests. Do not launch ads or contact creators merely because the template mentions those activities. Source: requested output structure and full operating specification.

Complete original source appendices

Open the assigned original: You are to act as my expert offer launch strategist and system builder

Complete readable source
You are to act as my expert offer launch strategist and system builder.  
Input:  
- Niche = [INSERT NICHE HERE]  
- Platform = [INSERT PLATFORM: Instagram / YouTube / TikTok / etc.]  


Output: Build me a complete marketing research & execution system tailored to this niche and platform. Follow this structure:


1. CONFIGURATION KEYS  
   - Minimum Search Volume  
   - Maximum Keyword Difficulty  
   - Virality/Hit Multipliers (views, retention, engagement thresholds)  
   - Influencer thresholds (min followers, engagement %)  
   - Trend multipliers (velocity vs baseline)  
   - Weightings for Scoring (Search Volume, CPC, KD penalty, Trend/Commercial intent, etc.)  
   - Default region + order settings for research  


2. RAW DATA STRUCTURES (tables/headers for spreadsheet imports)  
   - Raw Influencer Imports (tool, handle, platform, followers, engagement, niche, notes)  
   - Raw Trends (tool, topic, metrics, velocity, URL, notes)  
   - Raw Keywords/Tags/Hashtags (source video, title, URL, keyword list, notes)  


3. CLEAN DATA STRUCTURES (formulas + logic)  
   - Clean Influencers (Tier, Score auto-calculation, status)  
   - Clean Trends (Normalized engagement, Virality Score, Flag for Probe)  
   - Clean Keywords (dedupe, lowercase normalize, TEXTJOIN export)  


4. SCORING FRAMEWORK  
   - Composite scoring formula using config weights  
   - Example decision thresholds (Go ≥0.6, Maybe 0.45–0.59, Kill <0.45)  


5. ASSIGNMENTS & SITE MAP  
   - Influencer Assignments table (cluster/topic → creator → deliverable)  
   - Site Map structure (pillars, slugs, URLs, schema, CTAs, internal links)  


6. PRODUCTION CALENDAR  
   - Weekly schedule with statuses (script, filming, editing, publishing, derivatives)  
   - KPI targets  


7. METRICS & FEEDBACK  
   - Tracking table (views, watch time, engagement, CTR, conversions, amplification used, insights/next action)  


8. STANDARD OPERATING PROCEDURE (SOP)  
   - Step-by-step workflow (Import → Clean → Score → Assign → Site Map → Produce → Measure → Iterate)  
   - Tab-by-tab explanation (Config, Raw Imports, Clean sheets, Scoring, Assignments, Site Map, Production Calendar, Metrics)  
   - Explicit formulas (UNIQUE/TOCOL/SPLIT/TEXTJOIN for keywords, influencer tier/score formulas, virality flags, scoring formulas)  


9. CUSTOM NOTES FOR PLATFORM  
   - If YouTube: pull from tags, TubeBuddy/vidIQ, Search Explorer, YouTube Analytics  
   - If TikTok: use TikTok Creative Center, Hashtag trends, retention % >20%  
   - If Instagram: reels/hashtags, engagement rate benchmarks, Collabstr/Modash filters  
   - If another platform: adapt scoring/thresholds using equivalent analytics + influencer tools  


Deliver the output in **structured sections**, with tables where possible and formulas clearly formatted for direct spreadsheet use.
Native document text
You are to act as my expert offer launch strategist and system builder.  
Input:  
- Niche = [INSERT NICHE HERE]  
- Platform = [INSERT PLATFORM: Instagram / YouTube / TikTok / etc.]  

Output: Build me a complete marketing research & execution system tailored to this niche and platform. Follow this structure:

1. CONFIGURATION KEYS  
   - Minimum Search Volume  
   - Maximum Keyword Difficulty  
   - Virality/Hit Multipliers (views, retention, engagement thresholds)  
   - Influencer thresholds (min followers, engagement %)  
   - Trend multipliers (velocity vs baseline)  
   - Weightings for Scoring (Search Volume, CPC, KD penalty, Trend/Commercial intent, etc.)  
   - Default region + order settings for research  

2. RAW DATA STRUCTURES (tables/headers for spreadsheet imports)  
   - Raw Influencer Imports (tool, handle, platform, followers, engagement, niche, notes)  
   - Raw Trends (tool, topic, metrics, velocity, URL, notes)  
   - Raw Keywords/Tags/Hashtags (source video, title, URL, keyword list, notes)  

3. CLEAN DATA STRUCTURES (formulas + logic)  
   - Clean Influencers (Tier, Score auto-calculation, status)  
   - Clean Trends (Normalized engagement, Virality Score, Flag for Probe)  
   - Clean Keywords (dedupe, lowercase normalize, TEXTJOIN export)  

4. SCORING FRAMEWORK  
   - Composite scoring formula using config weights  
   - Example decision thresholds (Go ≥0.6, Maybe 0.45–0.59, Kill <0.45)  

5. ASSIGNMENTS & SITE MAP  
   - Influencer Assignments table (cluster/topic → creator → deliverable)  
   - Site Map structure (pillars, slugs, URLs, schema, CTAs, internal links)  

6. PRODUCTION CALENDAR  
   - Weekly schedule with statuses (script, filming, editing, publishing, derivatives)  
   - KPI targets  

7. METRICS & FEEDBACK  
   - Tracking table (views, watch time, engagement, CTR, conversions, amplification used, insights/next action)  

8. STANDARD OPERATING PROCEDURE (SOP)  
   - Step-by-step workflow (Import → Clean → Score → Assign → Site Map → Produce → Measure → Iterate)  
   - Tab-by-tab explanation (Config, Raw Imports, Clean sheets, Scoring, Assignments, Site Map, Production Calendar, Metrics)  
   - Explicit formulas (UNIQUE/TOCOL/SPLIT/TEXTJOIN for keywords, influencer tier/score formulas, virality flags, scoring formulas)  

9. CUSTOM NOTES FOR PLATFORM  
   - If YouTube: pull from tags, TubeBuddy/vidIQ, Search Explorer, YouTube Analytics  
   - If TikTok: use TikTok Creative Center, Hashtag trends, retention % >20%  
   - If Instagram: reels/hashtags, engagement rate benchmarks, Collabstr/Modash filters  
   - If another platform: adapt scoring/thresholds using equivalent analytics + influencer tools  

Deliver the output in **structured sections**, with tables where possible and formulas clearly formatted for direct spreadsheet use.


Offer research, launch planning and value ladders — source-linked curriculum

Working teaching for review; source and dependency gaps remain identified in each module.

Lesson 03.4