Skip to content

Latest commit

 

History

History
84 lines (71 loc) · 4.33 KB

File metadata and controls

84 lines (71 loc) · 4.33 KB

Forkcast: Ship HAQQ Pro tier in 3 weeks

Goal: Ship paid Pro tier ($49/mo) for HAQQ Legal AI by 2026-05-26. Objectives (weights): ship-speed (0.4) · revenue-quality (0.3) · reversibility (0.2) · brand-fit (0.1) Confidence horizon: 6 steps · Branching factor: 3 · Critic: /codex challenge @ depth 3

flowchart TD
    G["Ship HAQQ Pro tier in 3 weeks"]
    N0["Branch A: Usage-based"]
    N1["Branch B: Flat-tier ✓"]
    N2["Branch B.1: Self-serve Stripe portal ✓"]
    N3["Step B.1.a: Stripe webhook → entitlements DB ✓"]
    N4["Step B.1.b: Polling Stripe API"]
    N5["Branch B.2: Sales-led onboarding"]
    N6["Branch C: Hybrid"]
    G --> N0
    G --> N1
    N1 --> N2
    N2 --> N3
    N2 --> N4
    N1 --> N5
    G --> N6
    classDef chosen fill:#1f6feb,color:#fff,stroke:#fff,stroke-width:2px;
    classDef speculative fill:#3a3a3a,color:#aaa,stroke-dasharray: 5 5;
    class N1,N2,N3 chosen;
Loading

Decision tree

Forkcast convention: branches use pure markdown indentation; children sit immediately under their parent. Section headers go at the top, not between branches. This is what makes scripts/mermaid.ts reliable.

Fork 1: Pricing model · branches scored against goal + objectives above

  • Branch A: Usage-based (per-doc, per-token) — score 6.4 · cumul 0.85 [grounded][3/3]
    • Risks: bill-shock churn (40%), legal buyers hate variable bills
    • Grounding: ~/Documents/Code/HAQQ_userflow/pricing-research.md:18
  • Branch B: Flat-tier (Pro $49/mo, Business $149/mo) — score 8.2 ← chosen · cumul 0.91 [grounded][3/3]
    • Risks: leaves money on the table for power users
    • Grounding: project_haqq_plan_names.md memory; HubSpot deal-size avg
    • Fork 1.B: Onboarding gate
    • Branch B.1: Self-serve Stripe portal — score 7.9 ← chosen · cumul 0.86 [grounded][3/3]
      • Grounding: existing stripe integration in roadmap.dashable.dev; HubSpot pipeline auto-created already
      • Fork 1.B.1: Entitlements path
      • Step B.1.a: Stripe webhook → entitlements DB — score 8.4 ← chosen · cumul 0.78 [grounded][3/3]
        • Grounding: project_hubspot_posthog_state_2026_05_05.md (Stripe-auto pipelines exist)
        • Predicted forward path (depth 4–6):
          • Step 4 [grounded]: Pro feature flag flips on for paying customer (cumul 0.69)
          • Step 5 [grounded]: First Pro customer hits limit, upgrade flow visible in PostHog (cumul 0.55)
          • Step 6 [speculative]: Conversion to Business tier within 30 days (cumul 0.42 ⚠️ horizon)
          • ⚠️ Critic flag: assumes activation-rate parity with current Starter cohort; no historical data
      • Step B.1.b: Polling Stripe API — score 5.5 · cumul 0.73 [grounded][2/3]
        • Risks: rate limits, latency, ugly
    • Branch B.2: Sales-led onboarding — score 6.0 · cumul 0.81 [grounded][3/3]
      • Risks: kills self-serve volume; conflicts with HubSpot Inbound-nuked decision
  • Branch C: Hybrid (flat base + metered overage) — score 5.1 · cumul 0.72 [grounded][2/3]
    • Risks: complex for first launch; billing edge cases
    • ⚠️ Critic flag: assumes Stripe metered billing is set up; not validated against codebase

Decision summary

Chosen path: Flat-tier → Self-serve Stripe → Webhook entitlements Predicted ship date: 2026-05-22 (4 days under deadline) Cumulative confidence at horizon: 0.42 — re-run at step 4 with actual entitlement data Open questions for human:

  1. Confirm Pro/Business price points ($49 / $149) match HubSpot deal-size data
  2. Validate Stripe webhook latency assumption before committing
  3. Decide whether to run a /grill-me on the Business tier upgrade hypothesis

How to use this file

  • Check a box to lock that branch as a hard constraint.
  • Uncheck a box to re-open the decision (the box currently checked under that fork becomes "considered, not chosen" instead of erased).
  • Edit a score to override Forkcast's ranking with your taste — re-run will respect human-set scores.
  • Add a constraint anywhere as > Constraint: ... and re-run; Forkcast will prune branches that violate it.
  • Re-run from any node: Run /forkcast from Fork 1.B.1 regenerates only the subtree below.

Run /forkcast --linearize to emit a flat tasks/todo.md from the chosen path, ready for /yalla.