thumbgate 1.23.0 → 1.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/.claude-plugin/marketplace.json +5 -5
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.well-known/llms.txt +26 -11
  4. package/.well-known/mcp/server-card.json +8 -8
  5. package/README.md +69 -34
  6. package/adapters/claude/.mcp.json +2 -2
  7. package/adapters/mcp/server-stdio.js +1 -1
  8. package/adapters/opencode/opencode.json +1 -1
  9. package/bin/cli.js +57 -16
  10. package/bin/postinstall.js +11 -22
  11. package/config/gate-templates.json +72 -0
  12. package/config/github-about.json +1 -1
  13. package/config/post-deploy-marketing-pages.json +10 -0
  14. package/package.json +6 -6
  15. package/public/agent-manager.html +3 -3
  16. package/public/agents-cost-savings.html +3 -3
  17. package/public/ai-malpractice-prevention.html +726 -149
  18. package/public/blog.html +3 -3
  19. package/public/codex-enterprise.html +3 -3
  20. package/public/codex-plugin.html +4 -4
  21. package/public/compare.html +6 -6
  22. package/public/dashboard.html +211 -126
  23. package/public/guide.html +5 -5
  24. package/public/index.html +187 -47
  25. package/public/learn.html +24 -10
  26. package/public/lessons.html +2 -2
  27. package/public/numbers.html +6 -6
  28. package/public/pricing.html +6 -5
  29. package/public/pro.html +23 -0
  30. package/scripts/billing.js +17 -0
  31. package/scripts/commercial-offer.js +75 -0
  32. package/scripts/dashboard.js +53 -1
  33. package/scripts/gates-engine.js +3 -3
  34. package/scripts/plausible-server-events.js +2 -1
  35. package/scripts/rate-limiter.js +16 -12
  36. package/scripts/seo-gsd.js +167 -1
  37. package/scripts/telemetry-analytics.js +310 -0
  38. package/scripts/visitor-journey.js +172 -0
  39. package/src/api/server.js +65 -29
  40. package/adapters/chatgpt/openapi.yaml +0 -1705
package/public/index.html CHANGED
@@ -16,15 +16,18 @@ __GOOGLE_SITE_VERIFICATION_META__
16
16
  <meta property="og:title" content="ThumbGate — Stop paying for the same AI mistake twice">
17
17
  <meta property="og:description" content="Frontier LLMs are expensive, opaque, and unreliable in production. ThumbGate gates risky agent actions before they run: workflow shape, inspection evidence, token budget, and repeated-failure memory in one pre-action check.">
18
18
  <meta property="og:type" content="website">
19
- <meta property="og:image" content="https://thumbgate-production.up.railway.app/og.png">
19
+ <meta property="og:url" content="__APP_ORIGIN__/">
20
+ <meta property="og:image" content="https://thumbgate.ai/og.png">
20
21
  <meta name="twitter:card" content="summary_large_image">
21
- <meta name="twitter:image" content="https://thumbgate-production.up.railway.app/og.png">
22
- <meta name="thumbgate-version" content="1.23.0">
23
- <meta name="keywords" content="ThumbGate, thumbgate, AI agent orchestration, AI experience orchestration, agent enforcement layer, save LLM tokens, reduce Claude API cost, reduce OpenAI cost, AI agent token savings, prevent LLM retries, prevent hallucination retries, stop AI token waste, pre-action checks, agent governance, Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, workflow hardening, context engineering, AI authenticity, brand authenticity AI">
22
+ <meta name="twitter:image" content="https://thumbgate.ai/og.png">
23
+ <meta name="thumbgate-version" content="1.23.2">
24
+ <meta name="keywords" content="ThumbGate, thumbgate, AI agent orchestration, AI experience orchestration, agentic development cycle, AC/DC framework, Guide Generate Verify Solve, agent enforcement layer, save LLM tokens, reduce Claude API cost, reduce OpenAI cost, AI agent token savings, prevent LLM retries, prevent hallucination retries, stop AI token waste, pre-action checks, agent governance, Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, workflow hardening, context engineering, AI authenticity, brand authenticity AI">
25
+ <link rel="canonical" href="__APP_ORIGIN__/">
26
+ <link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
24
27
  <link rel="apple-touch-icon" href="/apple-touch-icon.png">
25
28
 
26
29
  <!-- Privacy-friendly analytics by Plausible -->
27
- <script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
30
+ <script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.tagged-events.js"></script>
28
31
  __GA_BOOTSTRAP__
29
32
 
30
33
  <script>
@@ -42,8 +45,8 @@ __GA_BOOTSTRAP__
42
45
  "@type": "Organization",
43
46
  "name": "ThumbGate",
44
47
  "alternateName": "thumbgate",
45
- "url": "https://thumbgate-production.up.railway.app",
46
- "logo": "https://thumbgate-production.up.railway.app/assets/brand/thumbgate-logo-1200x360.png",
48
+ "url": "https://thumbgate.ai",
49
+ "logo": "https://thumbgate.ai/assets/brand/thumbgate-logo-1200x360.png",
47
50
  "description": "ThumbGate ships pre-action gates for AI coding agents. Open-source CLI plus PreToolUse hooks that capture feedback, promote it to memory, generate prevention rules, and block repeated mistakes before the next tool call across Claude Code, Cursor, Codex, Gemini, Amp, Cline, and OpenCode.",
48
51
  "founder": {
49
52
  "@type": "Person",
@@ -86,6 +89,7 @@ __GA_BOOTSTRAP__
86
89
  "ThumbGate GPT for ChatGPT — preflight risky commands, refunds, deploys, and PR actions, capture typed thumbs-up/down lessons, and route users into local enforcement",
87
90
  "Workflow Sentinel — score blast radius before PR, merge, release, and publish actions fire",
88
91
  "Workflow architecture checks — distinguish predefined workflows, parallel fan-out, and open-ended agents before execution",
92
+ "Agentic development cycle control — maps Guide, Generate, Verify, and Solve into enforceable pre-action gates before risky tool calls execute",
89
93
  "Environment inspection evidence — require read-before-write, screenshots, API response checks, tests, or output validation for open-ended agent loops",
90
94
  "Parallel branch budgets — prevent agent desktops and fan-out workflows from silently multiplying token spend",
91
95
  "Docker Sandboxes routing — move high-risk local runs into isolated microVM-backed execution",
@@ -116,7 +120,7 @@ __GA_BOOTSTRAP__
116
120
  "price": "49",
117
121
  "priceCurrency": "USD",
118
122
  "description": "Intake-led team rollout with a workflow hardening sprint, shared enforcement memory, org dashboard visibility, approval boundaries, release confidence, Docker Sandboxes guidance for risky local autonomy, and pilot support for teams shipping AI-generated changes",
119
- "url": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake"
123
+ "url": "https://thumbgate.ai/#workflow-sprint-intake"
120
124
  },
121
125
  {
122
126
  "@type": "Offer",
@@ -124,7 +128,7 @@ __GA_BOOTSTRAP__
124
128
  "price": "19",
125
129
  "priceCurrency": "USD",
126
130
  "description": "Self-serve side lane for solo operators who want personal enforcement proof, a local dashboard, DPO export, team lesson export/import, and proof-ready exports",
127
- "url": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F"
131
+ "url": "https://thumbgate.ai/checkout/pro?plan_id=pro&landing_path=%2F"
128
132
  },
129
133
  {
130
134
  "@type": "Offer",
@@ -132,7 +136,7 @@ __GA_BOOTSTRAP__
132
136
  "price": "149",
133
137
  "priceCurrency": "USD",
134
138
  "description": "Annual Pro for individual operators who want personal enforcement proof, the local dashboard, and proof-ready exports",
135
- "url": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&billing_cycle=annual&landing_path=%2F"
139
+ "url": "https://thumbgate.ai/checkout/pro?plan_id=pro&billing_cycle=annual&landing_path=%2F"
136
140
  }
137
141
  ],
138
142
  "potentialAction": [
@@ -141,7 +145,7 @@ __GA_BOOTSTRAP__
141
145
  "name": "Install ThumbGate Free",
142
146
  "target": {
143
147
  "@type": "EntryPoint",
144
- "urlTemplate": "https://thumbgate-production.up.railway.app/guide",
148
+ "urlTemplate": "https://thumbgate.ai/guide",
145
149
  "actionPlatform": [
146
150
  "https://schema.org/DesktopWebPlatform"
147
151
  ]
@@ -152,7 +156,7 @@ __GA_BOOTSTRAP__
152
156
  "name": "Start ThumbGate Pro",
153
157
  "target": {
154
158
  "@type": "EntryPoint",
155
- "urlTemplate": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F",
159
+ "urlTemplate": "https://thumbgate.ai/checkout/pro?plan_id=pro&landing_path=%2F",
156
160
  "actionPlatform": [
157
161
  "https://schema.org/DesktopWebPlatform"
158
162
  ]
@@ -162,7 +166,7 @@ __GA_BOOTSTRAP__
162
166
  "name": "Pro Monthly",
163
167
  "price": "19",
164
168
  "priceCurrency": "USD",
165
- "url": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F"
169
+ "url": "https://thumbgate.ai/checkout/pro?plan_id=pro&landing_path=%2F"
166
170
  }
167
171
  },
168
172
  {
@@ -170,7 +174,7 @@ __GA_BOOTSTRAP__
170
174
  "name": "Start Workflow Hardening Sprint intake",
171
175
  "target": {
172
176
  "@type": "EntryPoint",
173
- "urlTemplate": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake",
177
+ "urlTemplate": "https://thumbgate.ai/#workflow-sprint-intake",
174
178
  "actionPlatform": [
175
179
  "https://schema.org/DesktopWebPlatform"
176
180
  ]
@@ -189,21 +193,21 @@ __GA_BOOTSTRAP__
189
193
  "provider": {
190
194
  "@type": "Organization",
191
195
  "name": "ThumbGate",
192
- "url": "https://thumbgate-production.up.railway.app"
196
+ "url": "https://thumbgate.ai"
193
197
  },
194
- "url": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake",
198
+ "url": "https://thumbgate.ai/#workflow-sprint-intake",
195
199
  "description": "Founder-led workflow hardening for one AI-agent workflow that needs approval boundaries, rollback safety, and rollout proof before wider team rollout.",
196
200
  "offers": {
197
201
  "@type": "Offer",
198
202
  "name": "Workflow Hardening Sprint intake",
199
- "url": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake"
203
+ "url": "https://thumbgate.ai/#workflow-sprint-intake"
200
204
  },
201
205
  "potentialAction": {
202
206
  "@type": "CommunicateAction",
203
207
  "name": "Book a workflow hardening intake",
204
208
  "target": {
205
209
  "@type": "EntryPoint",
206
- "urlTemplate": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake",
210
+ "urlTemplate": "https://thumbgate.ai/#workflow-sprint-intake",
207
211
  "actionPlatform": [
208
212
  "https://schema.org/DesktopWebPlatform"
209
213
  ]
@@ -318,6 +322,14 @@ __GA_BOOTSTRAP__
318
322
  "text": "Prompt rules are suggestions agents can ignore. Pre-Action Checks are enforcement — they block the action before execution via PreToolUse hooks. Checks are auto-generated from feedback and use Thompson Sampling to adapt."
319
323
  }
320
324
  },
325
+ {
326
+ "@type": "Question",
327
+ "name": "How does ThumbGate fit the agentic development cycle?",
328
+ "acceptedAnswer": {
329
+ "@type": "Answer",
330
+ "text": "Agentic development is converging around Guide, Generate, Verify, and Solve. ThumbGate adds the execution-control layer between those stages: project guidance and feedback become rules, generated tool calls are checked before execution, verification evidence is required for risky actions, and solved failures become reusable prevention gates."
331
+ }
332
+ },
321
333
  {
322
334
  "@type": "Question",
323
335
  "name": "How does ThumbGate prevent AI slop and protect brand authenticity?",
@@ -411,6 +423,10 @@ __GA_BOOTSTRAP__
411
423
  .hero-actions .hero-install { margin-bottom: 0; font-size: 18px; padding: 14px 22px; border: 1px solid rgba(34,211,238,0.55); background: rgba(34,211,238,0.07); box-shadow: none; }
412
424
  .hero-actions .btn-install-hero { font-size: 16px; padding: 14px 22px; }
413
425
  .hero-actions .hero-diagnostic { font-size: 16px; padding: 14px 22px; background: var(--green); color: #06120a; font-weight: 800; box-shadow: none; }
426
+ .offer-router{max-width:940px;margin:18px auto 22px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;text-align:left}
427
+ .offer-route{border:1px solid rgba(34,211,238,.18);background:rgba(17,17,19,.72);border-radius:8px;padding:14px}
428
+ .offer-route strong{display:block;color:var(--text);font-size:14px;margin-bottom:6px}.offer-route p{margin:0 0 10px;color:var(--text-muted);font-size:13px}
429
+ .offer-route a,.offer-route button{color:var(--cyan);font-weight:800;font-size:13px;text-decoration:none;background:transparent;border:0;padding:0;cursor:pointer}.offer-route.primary{background:rgba(34,211,238,.07)}
414
430
  .btn-pro-page { display: inline-flex; align-items: center; justify-content: center; padding: 11px 18px; background: var(--cyan); color: var(--bg); border-radius: 999px; text-decoration: none; font-size: 14px; font-weight: 700; box-shadow: 0 0 0 1px rgba(34,211,238,0.28), 0 12px 32px rgba(34,211,238,0.18); transition: opacity 0.15s, transform 0.15s; }
415
431
  .btn-pro-page:hover { opacity: 0.9; transform: translateY(-1px); }
416
432
  .btn-gpt-page { display: inline-flex; align-items: center; justify-content: center; padding: 14px 32px; background: var(--green); color: #06120a; border-radius: 8px; text-decoration: none; font-size: 16px; font-weight: 800; box-shadow: 0 0 0 1px rgba(74,222,128,0.32), 0 12px 32px rgba(74,222,128,0.18); transition: opacity 0.15s, transform 0.15s; }
@@ -654,6 +670,7 @@ __GA_BOOTSTRAP__
654
670
  .hero { padding: 72px 0 56px; }
655
671
  .hero-actions { flex-direction: column; }
656
672
  .hero-actions a { width: 100%; }
673
+ .offer-router { grid-template-columns: 1fr; }
657
674
  .hero-paid-actions { justify-content: center; }
658
675
  .hero-paid-actions a { width: 100%; }
659
676
  .nav-links a:not(.nav-cta) { display: none; }
@@ -695,7 +712,7 @@ __GA_BOOTSTRAP__
695
712
  <a href="#claude-code-section" class="nav-claude" onclick="posthog.capture('nav_claude_click')" style="display:none;">Claude</a>
696
713
  <a href="#workflow-sprint-intake" onclick="posthog.capture('workflow_sprint')" style="display:none;">Start Sprint</a>
697
714
  <a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-claude-desktop.mcpb" target="_blank" rel="noopener" onclick="posthog.capture('nav_claude_extension_click',{cta:'install_claude_extension'})" class="nav-cta" style="background:#d97706;display:none;">Claude Extension</a>
698
- <a href="/go/install?utm_source=website&utm_medium=nav&utm_campaign=install_free&cta_id=nav_install_free&cta_placement=nav" onclick="posthog.capture('nav_cta_click',{cta:'install_free'})" class="nav-cta">Install Free</a>
715
+ <a href="/checkout/pro?utm_source=website&utm_medium=nav&utm_campaign=pro_upgrade&cta_id=nav_start_pro&cta_placement=nav&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="nav_start_pro" data-cta-placement="nav" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);try{posthog.capture('nav_pro_click',{cta:'nav_start_pro',tier:'pro',price:19})}catch(_){}" class="nav-cta">Start Pro — $19/mo</a>
699
716
  </div>
700
717
  </div>
701
718
  </nav>
@@ -714,14 +731,27 @@ __GA_BOOTSTRAP__
714
731
  </div>
715
732
 
716
733
  <div class="hero-actions">
717
- <div class="hero-install hero-install-primary" onclick="copyInstall(this)" title="Click to copy">
718
- <span class="prompt">$</span>
719
- <span class="cmd">npx thumbgate init</span>
720
- <span class="copy-hint">click to copy</span>
721
- </div>
722
- <a href="/go/install?utm_source=website&utm_medium=hero_cta&utm_campaign=install_free&cta_id=hero_install_cli&cta_placement=hero" onclick="event.preventDefault(); navigator.clipboard.writeText('npx thumbgate init'); this.textContent='Copied ✓ — paste in your repo'; setTimeout(()=>{this.textContent='Install Free CLI'},2000); try{posthog.capture('hero_install_click',{cta:'install_cli'})}catch(_){}" class="btn-gpt-page btn-install-hero" title="Click to copy: npx thumbgate init">Install Free CLI</a>
734
+ <a href="/checkout/pro?utm_source=website&utm_medium=hero_cta&utm_campaign=pro_upgrade&cta_id=hero_start_pro&cta_placement=hero&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="hero_start_pro" data-cta-placement="hero" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);try{posthog.capture('hero_pro_checkout_click',{cta:'hero_start_pro',tier:'pro',price:19})}catch(_){}" class="btn-pro-page hero-pro hero-pro-primary">Start Pro — $19/mo</a>
723
735
  <a href="#workflow-sprint-intake" onclick="try{posthog.capture('hero_sprint_click',{cta:'sprint_intake'})}catch(_){};sendFirstPartyTelemetry('hero_sprint_intake_started',{ctaId:'hero_workflow_sprint',ctaPlacement:'hero',offer:'workflow_sprint'});" class="btn-pro-page hero-pro">Talk to me — Workflow Hardening Sprint →</a>
724
- <a href="#demo" onclick="try{posthog.capture('hero_demo_click',{cta:'see_enforcement'})}catch(_){};sendFirstPartyTelemetry('hero_demo_clicked',{ctaId:'hero_see_enforcement',ctaPlacement:'hero'});" class="btn-free" style="font-size:15px;padding:14px 22px;">See the enforcement in action</a>
736
+ <a href="/go/install?utm_source=website&utm_medium=hero_cta&utm_campaign=install_free&cta_id=hero_install_cli&cta_placement=hero" onclick="event.preventDefault(); navigator.clipboard.writeText('npx thumbgate init'); this.textContent='Copied ✓ — paste in your repo'; setTimeout(()=>{this.textContent='Install Free CLI'},2000); try{posthog.capture('hero_install_click',{cta:'install_cli'})}catch(_){}" class="btn-gpt-page btn-install-hero" title="Click to copy: npx thumbgate init">Install Free CLI</a>
737
+ </div>
738
+
739
+ <div class="offer-router" aria-label="Choose the right ThumbGate path">
740
+ <div class="offer-route primary">
741
+ <strong>Solo operator: Start Pro</strong>
742
+ <p>Sync, proof, exports.</p>
743
+ <a href="/checkout/pro?utm_source=website&utm_medium=offer_router&cta_id=router_start_pro&cta_placement=offer_router&plan_id=pro" data-revenue-cta data-cta-id="router_start_pro" data-cta-placement="offer_router" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);">Pay $19/mo with Stripe →</a>
744
+ </div>
745
+ <div class="offer-route">
746
+ <strong>Team workflow: Start with intake</strong>
747
+ <p>Proof before rollout.</p>
748
+ <a href="#workflow-sprint-intake" onclick="sendFirstPartyTelemetry('workflow_sprint_intake_started',{ctaId:'router_workflow_sprint',ctaPlacement:'offer_router',offer:'workflow_sprint'});">Send the workflow first →</a>
749
+ </div>
750
+ <div class="offer-route">
751
+ <strong>Still evaluating: Free CLI</strong>
752
+ <p>Local proof first.</p>
753
+ <button data-router-install onclick="copyInstall(this)"><span class="copy-hint">Copy npx thumbgate init</span></button>
754
+ </div>
725
755
  </div>
726
756
 
727
757
  <div class="hero-trust-bar">
@@ -764,7 +794,6 @@ __GA_BOOTSTRAP__
764
794
  <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/THUMBGATE_BENCH.md" target="_blank" rel="noopener">ThumbGate Bench</a>
765
795
  <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/RELEASE_CONFIDENCE.md" target="_blank" rel="noopener">Release confidence</a>
766
796
  <a href="https://github.com/IgorGanapolsky/ThumbGate/actions" target="_blank" rel="noopener">Proof-backed CI</a>
767
- <a href="https://github.com/IgorGanapolsky/ThumbGate/actions" target="_blank" rel="noopener">CI and proof lanes</a>
768
797
  <a href="#compatibility">Claude Code · Cursor · Codex · Gemini · Amp · Cline · OpenCode</a>
769
798
  </nav>
770
799
  <div class="marketing-test-copy" hidden>
@@ -792,6 +821,36 @@ __GA_BOOTSTRAP__
792
821
  </div>
793
822
  </section>
794
823
 
824
+ <section class="compatibility" id="agentic-development-cycle">
825
+ <div class="container">
826
+ <div class="section-label">Agentic Development Cycle</div>
827
+ <h2 class="section-title">Guide, Generate, Verify, Solve still needs an execution gate.</h2>
828
+ <p style="text-align:center;font-size:16px;color:var(--text-muted);max-width:900px;margin:0 auto 28px;line-height:1.7;">The market is converging on agentic development as a control loop, not a code-generation trick. <a href="https://thenewstack.io/agentic-development-cycle-framework/" target="_blank" rel="noopener" style="color:var(--cyan);text-decoration:underline;">The New Stack's May 2026 AC/DC framing</a> names the core stages: Guide, Generate, Verify, and Solve. ThumbGate gives that loop a hard pre-action boundary so agent work is governed before it touches files, terminals, CI, payments, or production systems.</p>
829
+ <div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;max-width:1080px;margin:0 auto;">
830
+ <div class="compat-card" style="cursor:default;">
831
+ <h3>Guide</h3>
832
+ <p>Rules, standards, past thumbs-downs, workflow boundaries, and approval policies are loaded as concrete operating context instead of vague prompt advice.</p>
833
+ </div>
834
+ <div class="compat-card" style="cursor:default;">
835
+ <h3>Generate</h3>
836
+ <p>Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, and MCP-compatible agents keep generating plans, edits, and tool calls.</p>
837
+ </div>
838
+ <div class="compat-card" style="cursor:default;">
839
+ <h3>Verify</h3>
840
+ <p>Pre-Action Checks require inspection evidence, tests, CI, screenshots, API responses, or human approval before high-risk actions proceed.</p>
841
+ </div>
842
+ <div class="compat-card" style="cursor:default;">
843
+ <h3>Solve</h3>
844
+ <p>Blocked failures and accepted fixes become lessons, shared rules, DPO exports, and audit events so the same mistake is not paid for again.</p>
845
+ </div>
846
+ </div>
847
+ <div style="max-width:900px;margin:22px auto 0;padding:16px 18px;border:1px solid rgba(74,222,128,0.28);border-radius:8px;background:rgba(74,222,128,0.07);">
848
+ <strong style="display:block;color:var(--green);margin-bottom:6px;">ThumbGate's role: the pre-action gate between generated intent and executed action.</strong>
849
+ <p style="margin:0;color:var(--text-muted);font-size:14px;line-height:1.65;">Verification after a pull request is useful, but it is too late for force-pushes, destructive SQL, unsafe deploys, leaked secrets, and costly external API calls. ThumbGate checks the action before it runs, then feeds the result back into the next Guide and Solve cycle.</p>
850
+ </div>
851
+ </div>
852
+ </section>
853
+
795
854
  <!-- CODE EXAMPLE — moved up for conversion: show the product immediately after hero -->
796
855
  <section class="code-section">
797
856
  <div class="container">
@@ -817,6 +876,37 @@ __GA_BOOTSTRAP__
817
876
  </div>
818
877
  </section>
819
878
 
879
+ <section class="compatibility" id="deterministic-prevention">
880
+ <div class="container">
881
+ <div class="section-label">Deterministic Prevention</div>
882
+ <h2 class="section-title">Native thumbs are a black box. ThumbGate is the inspectable control layer.</h2>
883
+ <p style="text-align:center;font-size:16px;color:var(--text-muted);max-width:900px;margin:0 auto 28px;line-height:1.7;">Codex, Claude Code, ChatGPT, and other agent surfaces can collect preference signals, but you usually cannot see exactly what changed, which rule will fire, or why a future tool call is allowed. ThumbGate keeps the prevention layer outside the model: typed feedback becomes a local lesson, repeated mistakes become explicit rules, and every block names the matched rule, source lesson, tool call, and audit event.</p>
884
+ <div class="agent-grid">
885
+ <div class="agent-card">
886
+ <h3>Black-box memory</h3>
887
+ <p>Native thumbs and vendor memories may improve future behavior, but they do not give teams a deterministic allow/block contract at the moment an agent touches files, terminals, APIs, or CI.</p>
888
+ </div>
889
+ <div class="agent-card">
890
+ <h3>Inspectable ThumbGate memory</h3>
891
+ <p>Lessons live in your ThumbGate store, can be searched, exported as JSONL or DPO pairs, and traced back to the exact correction that created the rule.</p>
892
+ </div>
893
+ <div class="agent-card">
894
+ <h3>Rules before execution</h3>
895
+ <p>The final decision is not another model opinion. ThumbGate checks tool name, arguments, working directory, command shape, confidence, and required evidence before the action runs.</p>
896
+ </div>
897
+ </div>
898
+ <div style="margin:26px auto 0;max-width:960px;border:1px solid rgba(34,211,238,0.18);border-radius:8px;background:rgba(34,211,238,0.05);padding:18px 20px;">
899
+ <h3 style="margin:0 0 10px;color:var(--text);font-size:18px;">Why this matters now</h3>
900
+ <ul style="margin:0;padding-left:20px;color:var(--text-muted);line-height:1.7;">
901
+ <li><strong>Agent security is now mainstream risk.</strong> Coding agents run shell commands, write files, query databases, and chain actions with developer permissions, so unattended autonomy needs a local policy boundary.</li>
902
+ <li><strong>MCP adoption is accelerating.</strong> More tools are becoming agent-callable through shared protocols, which means one cross-agent governance layer beats one-off prompt rules per app.</li>
903
+ <li><strong>Repeated failures waste cash and trust.</strong> Every repeat burns tokens, review time, and release confidence. ThumbGate turns the first correction into a reusable prevention check.</li>
904
+ </ul>
905
+ <p style="margin:12px 0 0;font-size:13px;color:var(--text-dim);">Sources to verify the market timing: <a href="https://www.docker.com/blog/ai-coding-agent-horror-stories-security-risks/" target="_blank" rel="noopener" style="color:var(--cyan);">Docker on AI coding agent security risks</a>, <a href="https://www.techradar.com/pro/how-ai-agents-are-wrecking-havoc-in-legacy-security-setups-and-enterprises-are-catching-up" target="_blank" rel="noopener" style="color:var(--cyan);">TechRadar on enterprise agent security pressure</a>, and <a href="https://www.techradar.com/pro/zendesk-becomes-the-latest-to-adopt-mcp-to-futureproof-customers-in-the-ai-first-era" target="_blank" rel="noopener" style="color:var(--cyan);">current MCP adoption coverage</a>.</p>
906
+ </div>
907
+ </div>
908
+ </section>
909
+
820
910
  <section class="marketing-deep-dive" style="padding:28px 0 10px;">
821
911
  <div class="container" style="max-width:1240px;">
822
912
  <div class="section-label">Status bar proof</div>
@@ -1074,7 +1164,7 @@ __GA_BOOTSTRAP__
1074
1164
  </div>
1075
1165
  <div class="autoresearch-cta">
1076
1166
  <a class="primary" href="/guides/autoresearch-agent-safety?utm_source=website&utm_medium=autoresearch_pack&utm_campaign=autoresearch_safety&cta_id=autoresearch_guide&cta_placement=autoresearch_pack">Read the Autoresearch guide</a>
1077
- <a class="secondary" href="/checkout/pro?utm_source=website&utm_medium=autoresearch_pack&utm_campaign=autoresearch_safety&cta_id=autoresearch_pro_checkout&cta_placement=autoresearch_pack&plan_id=pro&landing_path=%2F">Start Pro</a>
1167
+ <a class="secondary" href="/checkout/pro?utm_source=website&utm_medium=autoresearch_pack&utm_campaign=autoresearch_safety&cta_id=autoresearch_pro_checkout&cta_placement=autoresearch_pack&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="autoresearch_pro_checkout" data-cta-placement="autoresearch_pack" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);">Start Pro</a>
1078
1168
  </div>
1079
1169
  </div>
1080
1170
  </div>
@@ -1254,10 +1344,10 @@ __GA_BOOTSTRAP__
1254
1344
  <div class="tier" style="color:var(--cyan);">Free</div>
1255
1345
  <div class="price">$0</div>
1256
1346
  <div class="price-sub">Block repeated mistakes daily. Forever free for solo devs.</div>
1257
- <p style="font-size:13px;color:#aaa;margin-bottom:16px;">Unlimited captures, 5 active rules. Enough to make ThumbGate part of your daily flow. Upgrade when you want the dashboard, exports, or unlimited rules.</p>
1347
+ <p style="font-size:13px;color:#aaa;margin-bottom:16px;">5 captures/day, 3 active rules. Enough to see the value upgrade when you need more.</p>
1258
1348
  <ul>
1259
- <li><strong>Unlimited feedback captures</strong> — every thumbs-down, every session</li>
1260
- <li>Up to 5 active auto-promoted prevention rules</li>
1349
+ <li><strong>5 feedback captures/day</strong> — 25 total on Free, then Pro for unlimited</li>
1350
+ <li>Up to 3 active auto-promoted prevention rules</li>
1261
1351
  <li>No recall or lesson search</li>
1262
1352
  <li>No exports (DPO, Databricks, HuggingFace)</li>
1263
1353
  <li>All MCP integrations (Claude Code, Cursor, Codex, Gemini, Amp, any MCP agent)</li>
@@ -1276,7 +1366,7 @@ __GA_BOOTSTRAP__
1276
1366
  <div class="price">$19<span style="font-size:16px;color:var(--text-dim)">/mo</span></div>
1277
1367
  <div class="price-sub"><strong>The free npm package runs your gates locally and never expires.</strong> Pro is what we operate for you: hosted lesson sync across all your machines, adapter matrix kept current as agent runtimes ship breaking changes, and a dashboard you don't have to babysit.</div>
1278
1368
  <ul>
1279
- <li><strong>Block every repeat mistake</strong> — unlimited feedback captures and prevention rules (Free caps at 5 active rules)</li>
1369
+ <li><strong>Block every repeat mistake</strong> — unlimited feedback captures and prevention rules (Free caps at 3 active rules)</li>
1280
1370
  <li><strong>Never re-explain a correction</strong> — lesson recall and search across sessions on every agent surface</li>
1281
1371
  <li><strong>See exactly which rule fired</strong> — <a href="/dashboard#insights" style="color:var(--cyan);text-decoration:underline;">Visual check debugger</a> for every blocked action and the check that fired</li>
1282
1372
  <li><strong>One install, every agent</strong> — Auto-connect so supported agents appear automatically after setup (Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode)</li>
@@ -1291,7 +1381,7 @@ __GA_BOOTSTRAP__
1291
1381
  <div style="font-family:var(--mono);font-size:12px;color:var(--cyan);line-height:1.6;">checks: 36 active<br>feedback: unlimited<br>exports: DPO + lessons</div>
1292
1382
  </div>
1293
1383
  <div style="font-size:11px;letter-spacing:0.08em;text-transform:uppercase;color:var(--cyan);font-weight:800;margin-bottom:8px;">PAY-NOW PRO</div>
1294
- <a href="/checkout/pro?utm_source=pricing&utm_medium=cta&utm_campaign=v2_landing&utm_content=pricing_pro&plan_id=pro" id="pro-checkout-link" class="btn-pro" onclick="handleProCheckout();return false;" style="display:block;width:100%;text-align:center;padding:12px;font-size:15px;">Upgrade to Pro — $19/mo</a>
1384
+ <a href="/checkout/pro?utm_source=pricing&utm_medium=cta&utm_campaign=v2_landing&utm_content=pricing_pro&cta_id=pricing_pro_checkout&cta_placement=pricing&plan_id=pro&landing_path=%2F" id="pro-checkout-link" class="btn-pro" data-revenue-cta data-cta-id="pricing_pro_checkout" data-cta-placement="pricing" data-tier="pro" data-plan-id="pro" data-price="19" onclick="handleProCheckout();return false;" style="display:block;width:100%;text-align:center;padding:12px;font-size:15px;">Upgrade to Pro — $19/mo</a>
1295
1385
  <p style="font-size:11px;color:var(--text-muted);margin-top:8px;text-align:center;">Billed today · cancel anytime.</p>
1296
1386
  <input type="email" id="pro-email" data-buyer-email placeholder="you@company.com" style="margin-top:10px;width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--bg-raised);color:var(--text);font-size:14px;">
1297
1387
  </div>
@@ -1428,7 +1518,7 @@ __GA_BOOTSTRAP__
1428
1518
  </div>
1429
1519
  <div class="faq-item">
1430
1520
  <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">Do I need a cloud account?</div>
1431
- <div class="faq-a">No. Free keeps local enforcement on your machine with unlimited feedback captures, up to 5 active auto-promoted prevention rules, built-in safety checks, and hook blocking. Recall, lesson search, unlimited rules, and exports open up on Pro. No cloud account is required. The business starts when a team wants shared rules, approval boundaries, hosted review views, org dashboard visibility, and proof that survives handoffs. Pro is the optional solo side lane for a personal dashboard, DPO export, and team lesson export/import — share lessons across projects so one team's mistakes become every team's prevention rules.</div>
1521
+ <div class="faq-a">No. Free keeps local enforcement on your machine with 5 feedback captures/day, up to 3 active auto-promoted prevention rules, built-in safety checks, and hook blocking. Recall, lesson search, unlimited rules, unlimited captures, and exports open up on Pro. No cloud account is required. The business starts when a team wants shared rules, approval boundaries, hosted review views, org dashboard visibility, and proof that survives handoffs. Pro is the optional solo side lane for a personal dashboard, DPO export, and team lesson export/import — share lessons across projects so one team's mistakes become every team's prevention rules.</div>
1432
1522
  </div>
1433
1523
  <div class="faq-item">
1434
1524
  <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What if my thumbs-down is vague?</div>
@@ -1438,6 +1528,10 @@ __GA_BOOTSTRAP__
1438
1528
  <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How are pre-action checks different from prompt rules?</div>
1439
1529
  <div class="faq-a">Prompt rules are a starting point, not a finish line. Without prompt evaluation you do not know whether they still hold up under real tool use. ThumbGate adds the human-in-the-loop measurement loop and the enforcement layer: proof lanes, ThumbGate Bench, and self-heal checks show whether behavior improved, and Pre-Action Checks block the action before execution when it did not.</div>
1440
1530
  </div>
1531
+ <div class="faq-item">
1532
+ <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How does ThumbGate fit the agentic development cycle?</div>
1533
+ <div class="faq-a">Agentic development is not just generation. Teams need Guide, Generate, Verify, and Solve working as a repeatable loop. ThumbGate is the pre-action execution gate in that loop: guidance and feedback become rules, generated tool calls are checked before execution, verification evidence is required for risky actions, and solved failures become reusable prevention gates.</div>
1534
+ </div>
1441
1535
  <div class="faq-item">
1442
1536
  <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What does Pro cost?</div>
1443
1537
  <div class="faq-a">Pro is $19/mo or $149/yr for individual operators and bills immediately through Stripe. Team is $49/seat/mo with a 3-seat minimum and starts through the workflow intake so scope, shared rules, and rollout proof are explicit before a team rollout.</div>
@@ -1475,7 +1569,7 @@ __GA_BOOTSTRAP__
1475
1569
  </div>
1476
1570
  <div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap;align-items:center;margin-top:12px;opacity:0.7;">
1477
1571
  <a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-claude-desktop.mcpb" class="btn-gpt-page" target="_blank" rel="noopener" onclick="posthog.capture('final_claude_extension_click',{cta:'install_claude_extension'})" style="padding:8px 16px;font-size:12px;background:#d97706;color:#fff;">Install Claude Extension</a>
1478
- <a href="/go/pro?utm_source=website&utm_medium=final_cta&utm_campaign=pro_upgrade&cta_id=final_go_pro&cta_placement=final_cta&plan_id=pro&landing_path=%2F" onclick="posthog.capture('final_pro_click',{cta:'go_pro'})" class="btn-pro" style="padding:8px 16px;font-size:12px;opacity:0.85;">Upgrade to Pro — $19/mo</a>
1572
+ <a href="/checkout/pro?utm_source=website&utm_medium=final_cta&utm_campaign=pro_upgrade&cta_id=final_go_pro&cta_placement=final_cta&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="final_go_pro" data-cta-placement="final_cta" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);try{posthog.capture('final_pro_click',{cta:'final_go_pro',tier:'pro',price:19})}catch(_){}" class="btn-pro" style="padding:8px 16px;font-size:12px;opacity:0.85;">Upgrade to Pro — $19/mo</a>
1479
1573
  <a href="#workflow-sprint-intake" class="btn-team" style="padding:8px 16px;font-size:12px;">Start Workflow Hardening Sprint</a>
1480
1574
  </div>
1481
1575
  </div>
@@ -1492,7 +1586,7 @@ __GA_BOOTSTRAP__
1492
1586
  <a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
1493
1587
  <a href="/blog">Blog</a>
1494
1588
  </div>
1495
- <span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.23.0</span>
1589
+ <span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.23.2</span>
1496
1590
  </div>
1497
1591
  </footer>
1498
1592
 
@@ -1504,7 +1598,7 @@ __GA_BOOTSTRAP__
1504
1598
  <span class="cmd">npx thumbgate init</span>
1505
1599
  <span class="copy-hint">copy</span>
1506
1600
  </div>
1507
- <a href="/go/pro?utm_source=website&utm_medium=sticky_cta&utm_campaign=pro_upgrade&cta_id=sticky_go_pro&cta_placement=sticky_cta&plan_id=pro&landing_path=%2F" onclick="posthog.capture('sticky_pro_click',{cta:'go_pro'})" class="btn-pro" style="padding:8px 16px;font-size:12px;border-radius:6px;white-space:nowrap;">Go Pro — $19/mo</a>
1601
+ <a href="/checkout/pro?utm_source=website&utm_medium=sticky_cta&utm_campaign=pro_upgrade&cta_id=sticky_go_pro&cta_placement=sticky_cta&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="sticky_go_pro" data-cta-placement="sticky_cta" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);try{posthog.capture('sticky_pro_click',{cta:'sticky_go_pro',tier:'pro',price:19})}catch(_){}" class="btn-pro" style="padding:8px 16px;font-size:12px;border-radius:6px;white-space:nowrap;">Go Pro — $19/mo</a>
1508
1602
  </div>
1509
1603
  <script>
1510
1604
  (function() {
@@ -1582,6 +1676,53 @@ function sendGa4Event(eventName, params) {
1582
1676
  globalThis.gtag('event', eventName, params || {});
1583
1677
  }
1584
1678
 
1679
+ function readRevenueCtaMeta(el) {
1680
+ var label = (el && el.textContent ? el.textContent : '').trim().substring(0, 80);
1681
+ var section = el && el.closest ? el.closest('section') : null;
1682
+ var fallbackPlacement = section ? (section.id || String(section.className || '').split(' ')[0] || 'unknown') : 'unknown';
1683
+ return {
1684
+ ctaId: (el && el.dataset && el.dataset.ctaId) || 'pro_checkout',
1685
+ ctaPlacement: (el && el.dataset && el.dataset.ctaPlacement) || fallbackPlacement,
1686
+ tier: (el && el.dataset && el.dataset.tier) || 'pro',
1687
+ planId: (el && el.dataset && el.dataset.planId) || 'pro',
1688
+ price: Number((el && el.dataset && el.dataset.price) || proPriceDollars || 19),
1689
+ billing: (el && el.dataset && el.dataset.billing) || 'monthly',
1690
+ label: label,
1691
+ };
1692
+ }
1693
+
1694
+ function trackRevenueCta(el) {
1695
+ var meta = readRevenueCtaMeta(el);
1696
+ var plausibleProps = {
1697
+ cta: meta.ctaId,
1698
+ cta_id: meta.ctaId,
1699
+ section: meta.ctaPlacement,
1700
+ tier: meta.tier,
1701
+ plan_id: meta.planId,
1702
+ price: meta.price,
1703
+ billing: meta.billing,
1704
+ label: meta.label,
1705
+ };
1706
+ if (typeof plausible === 'function') {
1707
+ plausible('pricing_cta_click', { props: plausibleProps });
1708
+ plausible('checkout_start', { props: plausibleProps });
1709
+ }
1710
+ sendFirstPartyTelemetry('cta_click', {
1711
+ ctaId: meta.ctaId,
1712
+ ctaPlacement: meta.ctaPlacement,
1713
+ planId: meta.planId,
1714
+ tier: meta.tier,
1715
+ price: meta.price,
1716
+ billing: meta.billing,
1717
+ label: meta.label,
1718
+ });
1719
+ sendGa4Event('begin_checkout', {
1720
+ currency: 'USD',
1721
+ value: meta.price,
1722
+ items: [{ item_id: 'pro_monthly', item_name: 'ThumbGate Pro Monthly' }],
1723
+ });
1724
+ }
1725
+
1585
1726
  function initializeTeamIntakeTelemetry() {
1586
1727
  document.querySelectorAll('[data-team-intake-form]').forEach(function(form) {
1587
1728
  var started = false;
@@ -1680,7 +1821,7 @@ function copyInstall(el) {
1680
1821
  window.handleFaqKeydown = handleFaqKeydown;
1681
1822
 
1682
1823
  /* CTA clicks */
1683
- trackClick('.btn-pro', 'checkout_start', { tier: 'pro', price: 19, billing: 'monthly' });
1824
+ trackClick('.btn-pro:not([data-revenue-cta])', 'checkout_start', { tier: 'pro', price: 19, billing: 'monthly' });
1684
1825
  trackClick('.btn-gpt-page:not(.btn-install-hero)', 'chatgpt_gpt_click', { tier: 'free', source: 'homepage_gpt' });
1685
1826
  trackClick('.btn-install-hero', 'install_guide_click', { tier: 'free', source: 'hero_install' });
1686
1827
  trackClick('.btn-pro-page:not(.btn-install-link)', 'pro_page_click', { tier: 'pro', source: 'hero' });
@@ -1688,12 +1829,13 @@ function copyInstall(el) {
1688
1829
  trackClick('.btn-team', 'workflow_sprint_intake_click', { tier: 'team', offer: 'workflow_hardening_sprint' });
1689
1830
  trackClick('.btn-free', 'install_click', { tier: 'free' });
1690
1831
  trackClick('.btn-demo-link', 'demo_click', { source: 'homepage' });
1691
- trackClick('.nav-cta', 'chatgpt_gpt_click', { tier: 'free', source: 'nav' });
1832
+ trackClick('.nav-cta:not([data-revenue-cta])', 'chatgpt_gpt_click', { tier: 'free', source: 'nav' });
1692
1833
 
1693
1834
  /* Pricing CTA conversion tracking — fires on every Get Started / Pro / Team button click
1694
1835
  with section context so we can distinguish pricing section vs final CTA section clicks */
1695
1836
  document.querySelectorAll('.btn-pro, .btn-gpt-page, .btn-pro-page, .btn-install-hero, .btn-install-link, .btn-team, .btn-free, .btn-demo-link, .nav-cta').forEach(function(el) {
1696
1837
  el.addEventListener('click', function() {
1838
+ if (el.hasAttribute('data-revenue-cta')) return;
1697
1839
  var section = el.closest('section');
1698
1840
  var sectionId = section ? (section.id || section.className.split(' ')[0] || 'unknown') : 'unknown';
1699
1841
  var tier = resolvePricingClickTier(el);
@@ -1752,8 +1894,10 @@ function copyInstall(el) {
1752
1894
  ctaImpressions: [
1753
1895
  { selector: '#pro-checkout-link', ctaId: 'pricing_pro_checkout', ctaPlacement: 'pricing', planId: 'pro' },
1754
1896
  { selector: '.price-card.pro .btn-pro', ctaId: 'pricing_pro_monthly', ctaPlacement: 'pricing', planId: 'pro' },
1755
- { selector: '.hero-actions .btn-pro-page', ctaId: 'hero_workflow_intake', ctaPlacement: 'hero', planId: 'team' },
1756
- { selector: '.hero-actions .hero-pro', ctaId: 'hero_workflow_sprint_recovery_intake', ctaPlacement: 'hero', planId: 'team' },
1897
+ { selector: '.nav-cta[data-revenue-cta]', ctaId: 'nav_start_pro', ctaPlacement: 'nav', planId: 'pro' },
1898
+ { selector: '.hero-actions .hero-pro-primary', ctaId: 'hero_start_pro', ctaPlacement: 'hero', planId: 'pro' },
1899
+ { selector: '.hero-actions .btn-pro-page:not(.hero-pro-primary)', ctaId: 'hero_workflow_intake', ctaPlacement: 'hero', planId: 'team' },
1900
+ { selector: '.hero-actions .hero-pro:not(.hero-pro-primary)', ctaId: 'hero_workflow_sprint_recovery_intake', ctaPlacement: 'hero', planId: 'team' },
1757
1901
  { selector: '.sticky-cta .btn-pro', ctaId: 'sticky_go_pro', ctaPlacement: 'sticky_cta', planId: 'pro' },
1758
1902
  { selector: '.price-card.team .btn-team', ctaId: 'team_workflow_sprint', ctaPlacement: 'pricing', planId: 'team' },
1759
1903
  { selector: '#team-pilot-intake-form', ctaId: 'workflow_sprint_intake', ctaPlacement: 'team_visible_intake', planId: 'team' }
@@ -1768,6 +1912,8 @@ initializeTeamIntakeTelemetry();
1768
1912
  async function handleProCheckout() {
1769
1913
  var buyerIntent = globalThis.ThumbGateBuyerIntent;
1770
1914
  var email = document.getElementById('pro-email');
1915
+ var checkoutLink = document.getElementById('pro-checkout-link');
1916
+ trackRevenueCta(checkoutLink);
1771
1917
  var normalizedEmail = buyerIntent.normalizeBuyerEmail(email && email.value);
1772
1918
  if (!email || !buyerIntent.isValidBuyerEmail(normalizedEmail)) {
1773
1919
  email.style.border = '2px solid #f87171';
@@ -1782,16 +1928,10 @@ async function handleProCheckout() {
1782
1928
  if (globalThis.buyerJourney && typeof globalThis.buyerJourney.markEmailCaptured === 'function') {
1783
1929
  globalThis.buyerJourney.markEmailCaptured();
1784
1930
  }
1785
- var checkoutLink = document.getElementById('pro-checkout-link');
1786
1931
  var checkoutUrl = checkoutLink ? checkoutLink.href : '/checkout/pro';
1787
1932
  if (typeof plausible === 'function') {
1788
1933
  plausible('pro_email_captured', { props: { page: 'homepage', intent: 'checkout' } });
1789
1934
  }
1790
- sendGa4Event('begin_checkout', {
1791
- currency: 'USD',
1792
- value: proPriceDollars,
1793
- items: [{ item_id: 'pro_monthly', item_name: 'ThumbGate Pro Monthly' }],
1794
- });
1795
1935
  try {
1796
1936
  await buyerIntent.submitNewsletterSignup(normalizedEmail);
1797
1937
  } catch (_err) {
package/public/learn.html CHANGED
@@ -10,8 +10,8 @@
10
10
  <meta property="og:title" content="Learn — AI Agent Safety Guides by ThumbGate">
11
11
  <meta property="og:description" content="Practical guides for stopping AI coding agent mistakes with pre-action checks and feedback-driven enforcement.">
12
12
  <meta property="og:type" content="website">
13
- <meta property="og:url" content="https://thumbgate-production.up.railway.app/learn">
14
- <link rel="canonical" href="https://thumbgate-production.up.railway.app/learn">
13
+ <meta property="og:url" content="https://thumbgate.ai/learn">
14
+ <link rel="canonical" href="https://thumbgate.ai/learn">
15
15
  <link rel="icon" type="image/png" href="/thumbgate-icon.png">
16
16
  <link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg">
17
17
 
@@ -21,7 +21,7 @@
21
21
  "@type": "CollectionPage",
22
22
  "name": "ThumbGate Learning Hub",
23
23
  "description": "Practical guides for AI coding agent safety, pre-action checks, and vibe coding guardrails.",
24
- "url": "https://thumbgate-production.up.railway.app/learn",
24
+ "url": "https://thumbgate.ai/learn",
25
25
  "dateModified": "2026-04-20",
26
26
  "author": {
27
27
  "@type": "Person",
@@ -35,7 +35,7 @@
35
35
  "publisher": {
36
36
  "@type": "Organization",
37
37
  "name": "ThumbGate",
38
- "url": "https://thumbgate-production.up.railway.app"
38
+ "url": "https://thumbgate.ai"
39
39
  },
40
40
  "mainEntity": {
41
41
  "@type": "ItemList",
@@ -43,36 +43,42 @@
43
43
  {
44
44
  "@type": "ListItem",
45
45
  "position": 1,
46
- "url": "https://thumbgate-production.up.railway.app/learn/stop-ai-agent-force-push",
46
+ "url": "https://thumbgate.ai/learn/stop-ai-agent-force-push",
47
47
  "name": "How to Stop AI Agents From Force-Pushing to Main"
48
48
  },
49
49
  {
50
50
  "@type": "ListItem",
51
51
  "position": 2,
52
- "url": "https://thumbgate-production.up.railway.app/learn/vibe-coding-safety-net",
52
+ "url": "https://thumbgate.ai/learn/vibe-coding-safety-net",
53
53
  "name": "The Vibe Coding Safety Net You Are Missing"
54
54
  },
55
55
  {
56
56
  "@type": "ListItem",
57
57
  "position": 3,
58
- "url": "https://thumbgate-production.up.railway.app/learn/mcp-pre-action-checks-explained",
58
+ "url": "https://thumbgate.ai/learn/mcp-pre-action-checks-explained",
59
59
  "name": "MCP Pre-Action Checks Explained"
60
60
  },
61
61
  {
62
62
  "@type": "ListItem",
63
63
  "position": 4,
64
- "url": "https://thumbgate-production.up.railway.app/learn/agent-harness-pattern",
64
+ "url": "https://thumbgate.ai/learn/agent-harness-pattern",
65
65
  "name": "The Agent Harness Pattern: Why Your AI Needs a Seatbelt"
66
66
  },
67
67
  {
68
68
  "@type": "ListItem",
69
69
  "position": 5,
70
- "url": "https://thumbgate-production.up.railway.app/learn/ai-agent-persistent-memory",
71
- "name": "How to Give Your AI Coding Agent Persistent Memory Across Sessions"
70
+ "url": "https://thumbgate.ai/learn/background-agent-control-layer",
71
+ "name": "Background Agents Need a Control Layer Outside the Model"
72
72
  },
73
73
  {
74
74
  "@type": "ListItem",
75
75
  "position": 6,
76
+ "url": "https://thumbgate.ai/learn/ai-agent-persistent-memory",
77
+ "name": "How to Give Your AI Coding Agent Persistent Memory Across Sessions"
78
+ },
79
+ {
80
+ "@type": "ListItem",
81
+ "position": 7,
76
82
  "url": "https://thumbgate.ai/learn/from-prototype-to-production",
77
83
  "name": "From git init to v1.17.0 in 70 days: an honest ThumbGate build log"
78
84
  },
@@ -297,6 +303,14 @@
297
303
  <span class="article-tag">Shared Memory</span>
298
304
  </a>
299
305
 
306
+ <a href="/learn/background-agent-control-layer" class="article-card">
307
+ <h3>Background Agents Need a Control Layer Outside the Model</h3>
308
+ <p>Agents can produce work. Production teams still need triggers, isolated runs, context, visibility, and controls. This is where ThumbGate fits in the AI-SDLC stack.</p>
309
+ <span class="article-tag">Background Agents</span>
310
+ <span class="article-tag">AI-SDLC</span>
311
+ <span class="article-tag">Controls</span>
312
+ </a>
313
+
300
314
  <a href="/learn/claude-code-goal-with-rubrics" class="article-card">
301
315
  <h3>Claude Code /goal vs Todo: The 4-Field Pattern That Actually Holds</h3>
302
316
  <p>Treating /goal like a todo wastes the command. The 4-field pattern (clear goal, measurable success, shown proof, hard limits) is the same shape as a ThumbGate rubric. Pair them and the agent cannot fake completion.</p>