thumbgate 0.9.10 → 0.9.12
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.
- package/.claude-plugin/README.md +2 -2
- package/.claude-plugin/marketplace.json +4 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +115 -312
- package/adapters/README.md +1 -1
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/codex/config.toml +4 -4
- package/adapters/mcp/server-stdio.js +61 -1
- package/adapters/opencode/opencode.json +4 -2
- package/bin/cli.js +156 -8
- package/bin/memory.sh +3 -3
- package/config/e2e-critical-flows.json +4 -0
- package/config/gates/default.json +74 -2
- package/config/github-about.json +1 -1
- package/config/mcp-allowlists.json +27 -0
- package/package.json +22 -5
- package/plugins/amp-skill/INSTALL.md +1 -0
- package/plugins/amp-skill/SKILL.md +1 -0
- package/plugins/claude-codex-bridge/.claude-plugin/plugin.json +1 -1
- package/plugins/claude-codex-bridge/.mcp.json +4 -2
- package/plugins/claude-skill/INSTALL.md +1 -0
- package/plugins/codex-profile/.codex-plugin/plugin.json +1 -1
- package/plugins/codex-profile/.mcp.json +4 -2
- package/plugins/codex-profile/INSTALL.md +1 -1
- package/plugins/codex-profile/README.md +1 -1
- package/plugins/cursor-marketplace/.cursor-plugin/plugin.json +1 -1
- package/plugins/cursor-marketplace/README.md +3 -3
- package/plugins/cursor-marketplace/mcp.json +3 -1
- package/plugins/cursor-marketplace/scripts/gate-check.sh +15 -5
- package/plugins/gemini-extension/INSTALL.md +3 -3
- package/plugins/opencode-profile/INSTALL.md +1 -1
- package/public/dashboard.html +15 -8
- package/public/index.html +125 -185
- package/public/js/buyer-intent.js +252 -0
- package/public/pro.html +1085 -0
- package/scripts/__pycache__/train_from_feedback.cpython-312.pyc +0 -0
- package/scripts/adk-consolidator.js +14 -2
- package/scripts/agent-readiness.js +3 -1
- package/scripts/agent-security-hardening.js +4 -4
- package/scripts/auto-promote-gates.js +2 -0
- package/scripts/auto-wire-hooks.js +105 -17
- package/scripts/behavioral-extraction.js +2 -6
- package/scripts/billing.js +107 -3
- package/scripts/budget-guard.js +2 -2
- package/scripts/build-metadata.js +14 -0
- package/scripts/context-engine.js +1 -0
- package/scripts/deploy-policy.js +3 -17
- package/scripts/dpo-optimizer.js +3 -6
- package/scripts/ensure-repo-bootstrap.js +129 -0
- package/scripts/export-dpo-pairs.js +2 -3
- package/scripts/export-kto-pairs.js +3 -4
- package/scripts/export-training.js +8 -6
- package/scripts/feedback-attribution.js +23 -11
- package/scripts/feedback-loop.js +40 -2
- package/scripts/feedback-to-rules.js +2 -1
- package/scripts/filesystem-search.js +3 -2
- package/scripts/gates-engine.js +760 -29
- package/scripts/generate-pretool-hook.sh +0 -0
- package/scripts/gtm-revenue-loop.js +20 -1
- package/scripts/hook-auto-capture.sh +8 -3
- package/scripts/hook-runtime.js +81 -0
- package/scripts/hook-stop-self-score.sh +3 -3
- package/scripts/hook-thumbgate-cache-updater.js +99 -38
- package/scripts/hosted-config.js +4 -16
- package/scripts/hybrid-feedback-context.js +54 -14
- package/scripts/install-mcp.js +13 -3
- package/scripts/intent-router.js +2 -2
- package/scripts/license.js +52 -14
- package/scripts/local-model-profile.js +3 -2
- package/scripts/mcp-config.js +62 -7
- package/scripts/meta-policy.js +4 -8
- package/scripts/money-watcher.js +166 -16
- package/scripts/obsidian-export.js +1 -0
- package/scripts/operational-integrity.js +480 -0
- package/scripts/post-everywhere.js +35 -12
- package/scripts/pr-manager.js +14 -11
- package/scripts/profile-router.js +2 -0
- package/scripts/prompt-dlp.js +1 -0
- package/scripts/publish-decision.js +10 -0
- package/scripts/published-cli.js +61 -0
- package/scripts/risk-scorer.js +3 -2
- package/scripts/rlhf_session_start.sh +32 -0
- package/scripts/skill-quality-tracker.js +3 -5
- package/scripts/social-analytics/db/social-analytics.db-shm +0 -0
- package/scripts/social-analytics/db/social-analytics.db-wal +0 -0
- package/scripts/social-analytics/engagement-audit.js +202 -0
- package/scripts/social-analytics/instagram-thumbgate-post.js +45 -7
- package/scripts/social-analytics/install-growth-automation.js +114 -0
- package/scripts/social-analytics/load-env.js +46 -0
- package/scripts/social-analytics/poll-all.js +23 -23
- package/scripts/social-analytics/pollers/plausible.js +2 -4
- package/scripts/social-analytics/pollers/zernio.js +3 -0
- package/scripts/social-analytics/publish-instagram-thumbgate.js +22 -3
- package/scripts/social-analytics/publish-thumbgate-launch.js +322 -0
- package/scripts/social-analytics/publishers/reddit.js +7 -12
- package/scripts/social-analytics/publishers/zernio.js +301 -22
- package/scripts/social-analytics/reconcile-thumbgate-campaign.js +165 -0
- package/scripts/social-analytics/schedule-thumbgate-campaign.js +275 -0
- package/scripts/social-analytics/sync-launch-assets.js +185 -0
- package/scripts/social-post-hourly.js +185 -0
- package/scripts/social-quality-gate.js +119 -3
- package/scripts/social-reply-monitor.js +184 -37
- package/scripts/statusline-cache-path.js +27 -0
- package/scripts/statusline-local-stats.js +16 -0
- package/scripts/statusline-meta.js +22 -0
- package/scripts/statusline.sh +40 -33
- package/scripts/sync-version.js +24 -3
- package/scripts/test-coverage.js +21 -13
- package/scripts/tool-registry.js +97 -0
- package/scripts/train_from_feedback.py +32 -9
- package/scripts/validate-feedback.js +3 -2
- package/scripts/vector-store.js +2 -3
- package/scripts/verify-obsidian-setup.sh +3 -3
- package/src/api/server.js +281 -33
package/public/index.html
CHANGED
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
<meta charset="UTF-8">
|
|
20
20
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
21
21
|
__GOOGLE_SITE_VERIFICATION_META__
|
|
22
|
-
<title>ThumbGate —
|
|
23
|
-
<meta name="description" content="Pre-action gates for AI coding agents.
|
|
24
|
-
<meta property="og:title" content="ThumbGate —
|
|
25
|
-
<meta property="og:description" content="Pre-action gates for AI coding agents.
|
|
22
|
+
<title>ThumbGate — Self-improving AI coding agents that learn from every mistake</title>
|
|
23
|
+
<meta name="description" content="Pre-action gates for AI coding agents. 👎 Thumbs down → prevention rule → mistake permanently blocked. 👍 Thumbs up → pattern reinforced. History-aware lessons from your corrections. Team adds shared lessons and org visibility.">
|
|
24
|
+
<meta property="og:title" content="ThumbGate — Self-improving AI coding agents that learn from every mistake">
|
|
25
|
+
<meta property="og:description" content="Pre-action gates for AI coding agents. 👎 Thumbs down → prevention rule → mistake permanently blocked. 👍 Thumbs up → pattern reinforced. History-aware lessons from your corrections. Team adds shared lessons and org visibility.">
|
|
26
26
|
<meta property="og:type" content="website">
|
|
27
|
-
<meta name="keywords" content="ThumbGate, thumbgate, AI agent
|
|
27
|
+
<meta name="keywords" content="ThumbGate, thumbgate, self-improving AI agents, AI agent self-improvement, AI agent learning, AI agent memory, pre-action gates, human-in-the-loop, MCP server, Claude Code, Cursor, Codex, Gemini, Amp, OpenCode, vibe coding safety, SpecLock alternative, Mem0 alternative, AI coding agent feedback loop, PreToolUse hooks, prevention rules, feedback enforcement, context engineering">
|
|
28
28
|
|
|
29
29
|
<!-- Privacy-friendly analytics by Plausible -->
|
|
30
30
|
<script defer data-domain="thumbgate-production.up.railway.app" data-api="/api/event" src="/js/analytics.js"></script>
|
|
@@ -44,7 +44,7 @@ __GA_BOOTSTRAP__
|
|
|
44
44
|
"@type": "SoftwareApplication",
|
|
45
45
|
"name": "ThumbGate",
|
|
46
46
|
"alternateName": "thumbgate",
|
|
47
|
-
"description": "
|
|
47
|
+
"description": "Make your AI coding agent self-improving. Every mistake becomes a prevention rule. Every correction makes it permanently smarter. Turns feedback into enforcement — your agent gets better with every session.",
|
|
48
48
|
"applicationCategory": "DeveloperApplication",
|
|
49
49
|
"operatingSystem": "Cross-platform, Node.js >=18.18.0",
|
|
50
50
|
"license": "https://opensource.org/licenses/MIT",
|
|
@@ -82,7 +82,7 @@ __GA_BOOTSTRAP__
|
|
|
82
82
|
"price": "19",
|
|
83
83
|
"priceCurrency": "USD",
|
|
84
84
|
"description": "Personal local dashboard, DPO export, advanced data exports, and founder-license support for individual operators",
|
|
85
|
-
"url": "https://
|
|
85
|
+
"url": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F"
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
88
|
"@type": "Offer",
|
|
@@ -90,12 +90,12 @@ __GA_BOOTSTRAP__
|
|
|
90
90
|
"price": "149",
|
|
91
91
|
"priceCurrency": "USD",
|
|
92
92
|
"description": "Annual Pro for individual operators who want the personal local dashboard and proof-ready exports",
|
|
93
|
-
"url": "https://
|
|
93
|
+
"url": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&billing_cycle=annual&landing_path=%2F"
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
"@type": "Offer",
|
|
97
97
|
"name": "Team",
|
|
98
|
-
"description": "
|
|
98
|
+
"description": "Shared enforcement memory, review visibility, org dashboard, and pilot rollout support for teams shipping AI-generated changes",
|
|
99
99
|
"url": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake"
|
|
100
100
|
}
|
|
101
101
|
]
|
|
@@ -106,8 +106,8 @@ __GA_BOOTSTRAP__
|
|
|
106
106
|
{
|
|
107
107
|
"@context": "https://schema.org",
|
|
108
108
|
"@type": "HowTo",
|
|
109
|
-
"name": "How to
|
|
110
|
-
"description": "Set up ThumbGate
|
|
109
|
+
"name": "How to make your AI coding agent self-improving",
|
|
110
|
+
"description": "Set up ThumbGate so your AI agent learns from every mistake and never repeats it — a self-improvement loop powered by feedback enforcement.",
|
|
111
111
|
"step": [
|
|
112
112
|
{
|
|
113
113
|
"@type": "HowToStep",
|
|
@@ -250,6 +250,11 @@ __GA_BOOTSTRAP__
|
|
|
250
250
|
.signal-pill { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 999px; border: 1px solid var(--border); background: var(--bg-raised); font-size: 13px; font-weight: 600; letter-spacing: -0.01em; }
|
|
251
251
|
.signal-pill.signal-up { border-color: rgba(74, 222, 128, 0.28); color: #b8f7c8; background: rgba(74, 222, 128, 0.08); }
|
|
252
252
|
.signal-pill.signal-down { border-color: rgba(248, 113, 113, 0.28); color: #ffc0c0; background: rgba(248, 113, 113, 0.08); }
|
|
253
|
+
.hero-actions { display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin: 0 auto 16px; max-width: 760px; }
|
|
254
|
+
.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; }
|
|
255
|
+
.btn-pro-page:hover { opacity: 0.9; transform: translateY(-1px); }
|
|
256
|
+
.hero-paid-note { font-size: 14px; color: var(--text-muted); max-width: 720px; margin: 0 auto 24px; }
|
|
257
|
+
.hero-paid-note strong { color: var(--text); }
|
|
253
258
|
.hero-install { background: var(--bg-raised); border: 1px solid var(--border); border-radius: 10px; padding: 14px 24px; display: inline-flex; align-items: center; gap: 12px; font-family: var(--mono); font-size: 15px; margin-bottom: 40px; cursor: pointer; transition: border-color 0.2s; position: relative; max-width: 100%; overflow-x: auto; }
|
|
254
259
|
.hero-install:hover { border-color: var(--cyan); }
|
|
255
260
|
.hero-install .prompt { color: var(--text-muted); user-select: none; }
|
|
@@ -343,8 +348,10 @@ __GA_BOOTSTRAP__
|
|
|
343
348
|
.price-card li { font-size: 14px; color: var(--text-muted); padding: 6px 0; display: flex; align-items: flex-start; gap: 8px; }
|
|
344
349
|
.price-card li::before { content: "✓"; color: var(--cyan); font-weight: 700; flex-shrink: 0; }
|
|
345
350
|
.price-card.pro li::before { color: var(--cyan); }
|
|
346
|
-
.btn-free
|
|
347
|
-
.btn-
|
|
351
|
+
.btn-free,
|
|
352
|
+
.btn-demo-link { display: block; text-align: center; padding: 10px; border: 1px solid var(--border); border-radius: 8px; color: var(--text); text-decoration: none; font-size: 14px; font-weight: 500; transition: border-color 0.15s; }
|
|
353
|
+
.btn-free:hover,
|
|
354
|
+
.btn-demo-link:hover { border-color: var(--text-muted); }
|
|
348
355
|
.btn-pro { display: block; text-align: center; padding: 10px; background: var(--cyan); color: var(--bg); border-radius: 8px; text-decoration: none; font-size: 14px; font-weight: 600; transition: opacity 0.15s; }
|
|
349
356
|
.btn-pro:hover { opacity: 0.85; }
|
|
350
357
|
.btn-team { display: block; text-align: center; padding: 10px; background: rgba(74,222,128,0.14); color: var(--green); border: 1px solid rgba(74,222,128,0.4); border-radius: 8px; text-decoration: none; font-size: 14px; font-weight: 600; transition: border-color 0.15s, transform 0.15s; }
|
|
@@ -387,6 +394,8 @@ __GA_BOOTSTRAP__
|
|
|
387
394
|
.pricing-grid { grid-template-columns: 1fr; }
|
|
388
395
|
.team-form { grid-template-columns: 1fr; }
|
|
389
396
|
.hero { padding: 72px 0 56px; }
|
|
397
|
+
.hero-actions { flex-direction: column; }
|
|
398
|
+
.hero-actions a { width: 100%; }
|
|
390
399
|
.nav-links a:not(.nav-cta) { display: none; }
|
|
391
400
|
.proof-bar { gap: 16px; }
|
|
392
401
|
.proof-bar .dot { display: none; }
|
|
@@ -409,7 +418,7 @@ __GA_BOOTSTRAP__
|
|
|
409
418
|
<a href="/guide">Setup Guide</a>
|
|
410
419
|
<a href="/learn">Learn</a>
|
|
411
420
|
<a href="/dashboard">Dashboard Demo</a>
|
|
412
|
-
<a href="
|
|
421
|
+
<a href="/pro?utm_source=website&utm_medium=homepage_nav&utm_campaign=pro_page" class="nav-cta">See Pro</a>
|
|
413
422
|
</div>
|
|
414
423
|
</div>
|
|
415
424
|
</nav>
|
|
@@ -418,14 +427,19 @@ __GA_BOOTSTRAP__
|
|
|
418
427
|
<section class="hero">
|
|
419
428
|
<div class="container">
|
|
420
429
|
<div class="hero-thumbs">👍👎</div>
|
|
421
|
-
<div class="hero-badge">●
|
|
422
|
-
<h1>AI
|
|
430
|
+
<div class="hero-badge">● Self-improving AI agents — every mistake makes it smarter</div>
|
|
431
|
+
<h1>Your AI agent learns<br>from every mistake.</h1>
|
|
423
432
|
<div class="hero-signals">
|
|
424
|
-
<div class="signal-pill signal-down">👎
|
|
425
|
-
<div class="signal-pill signal-up">👍
|
|
433
|
+
<div class="signal-pill signal-down">👎 Mistake becomes a prevention rule — permanently blocked</div>
|
|
434
|
+
<div class="signal-pill signal-up">👍 Good pattern reinforced — reused across sessions</div>
|
|
426
435
|
</div>
|
|
427
|
-
<p class="hero-persona">For
|
|
428
|
-
<p><strong>
|
|
436
|
+
<p class="hero-persona">For developers using Claude Code, Cursor, Codex, Gemini, Amp, and OpenCode who want their AI agent to actually get better over time — not repeat the same mistakes every session.</p>
|
|
437
|
+
<p><strong>The self-improvement loop:</strong> Your agent makes a mistake → you give a thumbs-down → ThumbGate auto-generates a prevention rule → a gate physically blocks that mistake from ever happening again. Your agent gets permanently smarter with every correction. No model retraining. No prompt hacking. Just enforcement that compounds.</p>
|
|
438
|
+
<div class="hero-actions">
|
|
439
|
+
<a href="/pro?utm_source=website&utm_medium=homepage_hero&utm_campaign=pro_page" class="btn-pro-page">See Pro for individual operators</a>
|
|
440
|
+
<a href="/dashboard?utm_source=website&utm_medium=homepage_hero&utm_campaign=demo" class="btn-demo-link">Open dashboard demo</a>
|
|
441
|
+
</div>
|
|
442
|
+
<p class="hero-paid-note"><strong>Paid path:</strong> Free stays the local install lane. Pro is the buyer-ready page for your personal local dashboard, DPO export, and review-ready evidence.</p>
|
|
429
443
|
<div class="hero-install" onclick="copyInstall(this)" title="Click to copy">
|
|
430
444
|
<span class="prompt">$</span>
|
|
431
445
|
<span class="cmd">npx thumbgate init</span>
|
|
@@ -477,20 +491,20 @@ __GA_BOOTSTRAP__
|
|
|
477
491
|
<section class="compatibility" id="social-proof">
|
|
478
492
|
<div class="container">
|
|
479
493
|
<div class="section-label">See It In Action</div>
|
|
480
|
-
<h2 class="section-title">
|
|
494
|
+
<h2 class="section-title">See the enforcement before you buy anything</h2>
|
|
481
495
|
<div class="agent-grid">
|
|
482
496
|
<div class="agent-card">
|
|
483
497
|
<h3>🔍 Live Dashboard Demo</h3>
|
|
484
|
-
<p>Search lessons, inspect gates, see
|
|
498
|
+
<p>Search lessons, inspect gates, and see exactly why risky actions were blocked. No signup or install required.</p>
|
|
485
499
|
<a href="/dashboard" style="display:inline-block;margin-top:12px;color:var(--cyan);font-weight:600;text-decoration:underline;">Open Dashboard Demo →</a>
|
|
486
500
|
</div>
|
|
487
501
|
<div class="agent-card">
|
|
488
502
|
<h3>⛔ Gate Reasoning Chains</h3>
|
|
489
|
-
<p>Every block explains
|
|
503
|
+
<p>Every block explains why: which pattern matched, what evidence triggered it, and whether the rule came from your own corrections.</p>
|
|
490
504
|
</div>
|
|
491
505
|
<div class="agent-card">
|
|
492
506
|
<h3>📊 Org Dashboard (Pro)</h3>
|
|
493
|
-
<p>See
|
|
507
|
+
<p>See which agents are creating review churn, which gates are saving time, and where rollout risk is still concentrated.</p>
|
|
494
508
|
</div>
|
|
495
509
|
<div class="agent-card">
|
|
496
510
|
<h3>🧪 Thompson Sampling</h3>
|
|
@@ -540,8 +554,8 @@ __GA_BOOTSTRAP__
|
|
|
540
554
|
<!-- HOW IT WORKS -->
|
|
541
555
|
<section class="how-it-works" id="how-it-works">
|
|
542
556
|
<div class="container">
|
|
543
|
-
<div class="section-label">
|
|
544
|
-
<h2 class="section-title">Three steps to
|
|
557
|
+
<div class="section-label">New in v0.9.12</div>
|
|
558
|
+
<h2 class="section-title">Three steps to stop repeated AI failures</h2>
|
|
545
559
|
<div class="steps">
|
|
546
560
|
<div class="step">
|
|
547
561
|
<div class="step-num">1</div>
|
|
@@ -563,130 +577,27 @@ __GA_BOOTSTRAP__
|
|
|
563
577
|
</section>
|
|
564
578
|
|
|
565
579
|
<!-- PROENTROPIC -->
|
|
566
|
-
|
|
567
|
-
<div class="container">
|
|
568
|
-
<div class="section-label">Proentropic Infrastructure</div>
|
|
569
|
-
<h2 class="section-title">Built to get stronger from chaos, not break from it</h2>
|
|
570
|
-
<div class="agent-grid">
|
|
571
|
-
<div class="agent-card">
|
|
572
|
-
<h3>Errors are fuel</h3>
|
|
573
|
-
<p>Every agent mistake becomes a prevention rule. Every thumbs-down becomes a gate. The more your agents fail, the more ThumbGate learns. Fragile systems break under chaos — ThumbGate feeds on it.</p>
|
|
574
|
-
</div>
|
|
575
|
-
<div class="agent-card">
|
|
576
|
-
<h3>Organizational learning</h3>
|
|
577
|
-
<p>One developer's thumbs-down becomes the whole team's protection. Lessons compound across agents, sessions, and projects. Your 100th agent inherits everything the first 99 learned.</p>
|
|
578
|
-
</div>
|
|
579
|
-
<div class="agent-card">
|
|
580
|
-
<h3>Enterprise-grade governance</h3>
|
|
581
|
-
<p>CISOs fear agent chaos. ThumbGate turns that chaos into structured audit trails, per-agent governance scores, PII scanning, and credential attestation. Compliance officers get a single dashboard, not scattered logs.</p>
|
|
582
|
-
</div>
|
|
583
|
-
</div>
|
|
584
|
-
</div>
|
|
585
|
-
</section>
|
|
586
|
-
|
|
587
|
-
<!-- WHY GUARDRAILS -->
|
|
580
|
+
<!-- GUARDRAILS -->
|
|
588
581
|
<section class="compatibility" id="guardrails">
|
|
589
582
|
<div class="container">
|
|
590
|
-
<div class="section-label">
|
|
591
|
-
<h2 class="section-title">
|
|
583
|
+
<div class="section-label">Enforcement</div>
|
|
584
|
+
<h2 class="section-title">Gates block. They don't ask nicely.</h2>
|
|
592
585
|
<div class="agent-grid">
|
|
593
586
|
<div class="agent-card">
|
|
594
587
|
<h3>Don't trust — verify</h3>
|
|
595
|
-
<p>
|
|
588
|
+
<p>Every block shows why: pattern match, evidence, confidence score.</p>
|
|
596
589
|
</div>
|
|
597
590
|
<div class="agent-card">
|
|
598
591
|
<h3>Real tools, not wishes</h3>
|
|
599
|
-
<p>
|
|
592
|
+
<p>Gates physically block tool calls. Not prompt tricks. Not "please don't."</p>
|
|
600
593
|
</div>
|
|
601
594
|
<div class="agent-card">
|
|
602
595
|
<h3>Force models to show work</h3>
|
|
603
|
-
<p>
|
|
596
|
+
<p>Reasoning chains on every gate decision. Thompson Sampling confidence tiers.</p>
|
|
604
597
|
</div>
|
|
605
598
|
<div class="agent-card">
|
|
606
599
|
<h3>Log everything, learn automatically</h3>
|
|
607
|
-
<p>
|
|
608
|
-
</div>
|
|
609
|
-
<div class="agent-card">
|
|
610
|
-
<h3>Keep one correction thread</h3>
|
|
611
|
-
<p>Feedback sessions let you open, append, and finalize one linked correction instead of spraying follow-up notes across separate records. Better lessons, less operator friction.</p>
|
|
612
|
-
</div>
|
|
613
|
-
</div>
|
|
614
|
-
</div>
|
|
615
|
-
</section>
|
|
616
|
-
|
|
617
|
-
<!-- AI CONTROL TOWER -->
|
|
618
|
-
<section class="compatibility" id="control-tower">
|
|
619
|
-
<div class="container">
|
|
620
|
-
<div class="section-label">Recently shipped</div>
|
|
621
|
-
<h2 class="section-title">AI Control Tower: monitor, alert, and act</h2>
|
|
622
|
-
<div class="agent-grid">
|
|
623
|
-
<div class="agent-card">
|
|
624
|
-
<h3>Domain skill packs</h3>
|
|
625
|
-
<p>Installable best-practice rules for Stripe, Railway, database migrations. Auto-match by task context. 100% eval pass rate with packs vs 0% without.</p>
|
|
626
|
-
</div>
|
|
627
|
-
<div class="agent-card">
|
|
628
|
-
<h3>Tool-level KPIs</h3>
|
|
629
|
-
<p>P50/P90/P95 latency and success rate per tool. Drill from gateway health down to the exact tool causing issues.</p>
|
|
630
|
-
</div>
|
|
631
|
-
<div class="agent-card">
|
|
632
|
-
<h3>SLO alerts</h3>
|
|
633
|
-
<p>Define thresholds for success rate and latency. Breach triggers webhook alerts to Slack, Teams, or Discord automatically.</p>
|
|
634
|
-
</div>
|
|
635
|
-
<div class="agent-card">
|
|
636
|
-
<h3>Access anomaly detection</h3>
|
|
637
|
-
<p>Tracks authorized vs failed access. Moving-average spike detection flags per-agent abuse. Security governance on autopilot.</p>
|
|
638
|
-
</div>
|
|
639
|
-
<div class="agent-card">
|
|
640
|
-
<h3>Metered outcome pricing</h3>
|
|
641
|
-
<p>$0.10 per blocked mistake (Pro). Minimum $19/mo floor. You pay for value delivered, not seats warmed.</p>
|
|
642
|
-
</div>
|
|
643
|
-
<div class="agent-card">
|
|
644
|
-
<h3>Ambient daily digest</h3>
|
|
645
|
-
<p>Push Slack/Teams/Discord summary at 9am. Weekly stats export for build-in-public content. Check in once a day, not babysit.</p>
|
|
646
|
-
</div>
|
|
647
|
-
</div>
|
|
648
|
-
</div>
|
|
649
|
-
</section>
|
|
650
|
-
|
|
651
|
-
<!-- PROGRESSIVE DISCLOSURE -->
|
|
652
|
-
<section class="compatibility" id="progressive-disclosure">
|
|
653
|
-
<div class="container">
|
|
654
|
-
<div class="section-label">New in v0.9.10</div>
|
|
655
|
-
<h2 class="section-title">82% fewer tokens with progressive skill loading</h2>
|
|
656
|
-
<div class="agent-grid">
|
|
657
|
-
<div class="agent-card">
|
|
658
|
-
<h3>3-tier disclosure</h3>
|
|
659
|
-
<p>L1 metadata at startup (27 tokens). L2 rules on activation. L3 reference files on demand. Agents load only what they need.</p>
|
|
660
|
-
</div>
|
|
661
|
-
<div class="agent-card">
|
|
662
|
-
<h3>Skill factory</h3>
|
|
663
|
-
<p>Agent auto-generates new skill packs from recurring failures. Lessons become NEVER/ALWAYS rules. No manual curation needed.</p>
|
|
664
|
-
</div>
|
|
665
|
-
<div class="agent-card">
|
|
666
|
-
<h3>Security hardening</h3>
|
|
667
|
-
<p>Credential attestation per tool call. Privilege escalation detection against MCP profiles. Dependency gate blocks supply chain attacks.</p>
|
|
668
|
-
</div>
|
|
669
|
-
</div>
|
|
670
|
-
</div>
|
|
671
|
-
</section>
|
|
672
|
-
|
|
673
|
-
<!-- BACKGROUND AGENT GOVERNANCE -->
|
|
674
|
-
<section class="compatibility" id="background-agents">
|
|
675
|
-
<div class="container">
|
|
676
|
-
<div class="section-label">For Background Agent Teams</div>
|
|
677
|
-
<h2 class="section-title">Your agents write 57% of PRs. ThumbGate makes sure they don't repeat mistakes.</h2>
|
|
678
|
-
<div class="agent-grid">
|
|
679
|
-
<div class="agent-card">
|
|
680
|
-
<h3>Run governance gate</h3>
|
|
681
|
-
<p>Before a background agent opens a PR, check its failure history. Agents with >50% fail rate get blocked. Protected branches get extra scrutiny.</p>
|
|
682
|
-
</div>
|
|
683
|
-
<div class="agent-card">
|
|
684
|
-
<h3>Auto-capture from CI</h3>
|
|
685
|
-
<p>CI pass/fail auto-generates structured feedback. No human in the loop. The agent learns from every merge and every rejection.</p>
|
|
686
|
-
</div>
|
|
687
|
-
<div class="agent-card">
|
|
688
|
-
<h3>Governance report</h3>
|
|
689
|
-
<p>Per-agent pass rates, gate blocks, run types, blast radius warnings. Know which agents are reliable and which need guardrails.</p>
|
|
600
|
+
<p>Repeated failures auto-promote to gates. Org dashboard shows all agents.</p>
|
|
690
601
|
</div>
|
|
691
602
|
</div>
|
|
692
603
|
</div>
|
|
@@ -721,14 +632,14 @@ __GA_BOOTSTRAP__
|
|
|
721
632
|
<!-- PRICING -->
|
|
722
633
|
<section class="pricing" id="pricing">
|
|
723
634
|
<div class="container">
|
|
724
|
-
<div class="section-label">Pricing
|
|
725
|
-
<h2 class="section-title">Start free.
|
|
635
|
+
<div class="section-label">Pricing</div>
|
|
636
|
+
<h2 class="section-title">Start free. Prove value on a real workflow. Upgrade when review churn costs more than $19/mo.</h2>
|
|
726
637
|
<div class="pricing-grid">
|
|
727
638
|
<div class="price-card">
|
|
728
639
|
<div class="tier">Free</div>
|
|
729
640
|
<div class="price">$0</div>
|
|
730
|
-
<div class="price-sub">Forever free · Local
|
|
731
|
-
<p style="font-size:13px;color:#aaa;margin-bottom:16px;">For solo
|
|
641
|
+
<div class="price-sub">Forever free · Local enforcement for one developer</div>
|
|
642
|
+
<p style="font-size:13px;color:#aaa;margin-bottom:16px;">For solo developers who want to stop the same agent mistake from showing up twice.</p>
|
|
732
643
|
<ul>
|
|
733
644
|
<li>Unlimited feedback captures · 5 lesson searches/day · unlimited recall</li>
|
|
734
645
|
<li>5 auto-promoted gates plus the core safety policy</li>
|
|
@@ -743,9 +654,9 @@ __GA_BOOTSTRAP__
|
|
|
743
654
|
<div class="tier">Pro</div>
|
|
744
655
|
<div class="price">$19<span style="font-size:16px;color:var(--text-dim)">/mo</span></div>
|
|
745
656
|
<div class="price-sub">or $149/yr (save 35%) · Personal dashboard + exports</div>
|
|
746
|
-
<p style="font-size:13px;color:var(--cyan);margin-bottom:16px;font-weight:500;">For individual operators who
|
|
657
|
+
<p style="font-size:13px;color:var(--cyan);margin-bottom:16px;font-weight:500;">For individual operators who need review-ready evidence, faster debugging, and a dashboard of exactly what got blocked.</p>
|
|
747
658
|
<div class="pro-upgrade-triggers" style="font-size:12px;color:#aaa;margin-bottom:12px;">
|
|
748
|
-
<strong style="color:#fff;">Go Pro when:</strong> you
|
|
659
|
+
<strong style="color:#fff;">Go Pro when:</strong> you want review-ready evidence, need your own dashboard, or keep correcting the same failure modes.
|
|
749
660
|
</div>
|
|
750
661
|
<div class="dashboard-preview" style="margin-bottom:16px;border:1px solid #333;border-radius:8px;overflow:hidden;">
|
|
751
662
|
<div style="background:linear-gradient(135deg,#1a1a2e 0%,#16213e 100%);padding:16px;text-align:center;">
|
|
@@ -764,13 +675,13 @@ __GA_BOOTSTRAP__
|
|
|
764
675
|
<li>Auto-connect — activate once with your license key, then your running agents appear automatically on your local dashboard</li>
|
|
765
676
|
<li><a href="/dashboard" style="color:var(--cyan);text-decoration:underline;">DPO training data export →</a> turn real thumbs-downs into ready-to-use preference pairs for fine-tuning (LoRA / JSONL)</li>
|
|
766
677
|
<li><strong>Model Hardening Advisor</strong> — get recommendations on when and how to fine-tune your model to natively avoid recurring failures</li>
|
|
767
|
-
<li>Personal local dashboard — every Pro user gets
|
|
768
|
-
<li>Founder-license support — we help you wire
|
|
678
|
+
<li>Personal local dashboard — every Pro user gets a localhost dashboard without extra cloud setup</li>
|
|
679
|
+
<li>Founder-license support — we help you wire the riskiest flows first: migrations, force-pushes, deploys, and CI</li>
|
|
769
680
|
</ul>
|
|
770
|
-
<a href="
|
|
681
|
+
<a href="/checkout/pro?utm_source=website&utm_medium=homepage_pricing&utm_campaign=pro_pack&cta_id=homepage_pricing_trial&cta_placement=pricing&plan_id=pro&landing_path=%2F" class="btn-pro" style="display:none" id="pro-checkout-link">Start Free Trial — then $19/mo</a>
|
|
771
682
|
<div class="trial-badge" style="background:var(--cyan);color:#000;display:inline-block;padding:4px 12px;border-radius:12px;font-size:12px;font-weight:700;margin-bottom:12px;">7-DAY FREE TRIAL</div>
|
|
772
683
|
<div class="email-gate" style="margin-bottom:12px;">
|
|
773
|
-
<input type="email" id="pro-email" placeholder="Your email to start trial" style="width:100%;padding:10px 14px;border:1px solid #333;border-radius:6px;background:#1a1a2e;color:#fff;font-size:14px;">
|
|
684
|
+
<input type="email" id="pro-email" data-buyer-email placeholder="Your email to start trial" style="width:100%;padding:10px 14px;border:1px solid #333;border-radius:6px;background:#1a1a2e;color:#fff;font-size:14px;">
|
|
774
685
|
</div>
|
|
775
686
|
<button class="btn-pro" id="pro-trial-btn" onclick="handleProTrial()" style="width:100%;cursor:pointer;border:none;">Start 7-Day Free Trial</button>
|
|
776
687
|
<p style="font-size:11px;color:#666;margin-top:8px;">Founder pricing — <a href="https://buy.stripe.com/aFa4gz1M84r419v7mb3sI05" style="color:var(--cyan);text-decoration:underline;">preserved $49 one-time founder link</a> for early buyers who still want that path.</p>
|
|
@@ -779,21 +690,21 @@ __GA_BOOTSTRAP__
|
|
|
779
690
|
<div class="price-card team">
|
|
780
691
|
<div class="tier">Team</div>
|
|
781
692
|
<div class="price">$12<span style="font-size:16px;color:var(--text-dim)">/seat/mo</span></div>
|
|
782
|
-
<div class="price-sub">Starts at $36/mo for 3 seats · or $297/yr · Shared
|
|
783
|
-
<p style="font-size:13px;color:var(--green);margin-bottom:16px;font-weight:500;">For teams
|
|
693
|
+
<div class="price-sub">Starts at $36/mo for 3 seats · or $297/yr · Shared enforcement + org visibility</div>
|
|
694
|
+
<p style="font-size:13px;color:var(--green);margin-bottom:16px;font-weight:500;">For teams shipping AI-generated changes across shared repos who need one correction to protect every reviewer and runtime.</p>
|
|
784
695
|
<div class="pro-upgrade-triggers" style="font-size:12px;color:#aaa;margin-bottom:12px;">
|
|
785
|
-
<strong style="color:#fff;">Start Team when:</strong> you need
|
|
696
|
+
<strong style="color:#fff;">Start Team when:</strong> you need shared enforcement, org-wide proof, or one workflow pilot that proves ROI internally.
|
|
786
697
|
</div>
|
|
787
698
|
<ul>
|
|
788
|
-
<li>
|
|
699
|
+
<li>Shared enforcement memory — a shared lesson database where one developer's 👎 on a bad migration protects every agent on the team</li>
|
|
789
700
|
<li>Org dashboard — active agents, gate hit rates, risk agents, and proof-backed team metrics in one place</li>
|
|
790
|
-
<li>
|
|
701
|
+
<li>Hosted review views — constrained cards, lists, and callouts for rollout, incident, and audit visibility</li>
|
|
791
702
|
<li>Gate template library — pre-built guardrails for force-pushes, skipped tests, destructive SQL, and evidence-before-done</li>
|
|
792
|
-
<li>Workflow
|
|
793
|
-
<li>
|
|
703
|
+
<li>Workflow proof sprint — pilot one painful workflow first, then expand once the before/after evidence is real</li>
|
|
704
|
+
<li>Rollout attribution stays tied to the team funnel instead of disappearing into generic referral traffic</li>
|
|
794
705
|
</ul>
|
|
795
|
-
<a href="#workflow-sprint-intake" class="btn-team">Start Team
|
|
796
|
-
<p style="font-size:11px;color:#666;margin-top:8px;">Hosted
|
|
706
|
+
<a href="#workflow-sprint-intake" class="btn-team">Start Team Pilot</a>
|
|
707
|
+
<p style="font-size:11px;color:#666;margin-top:8px;">Hosted rollout starts with one workflow pilot so the first expansion has measurable before/after proof.</p>
|
|
797
708
|
</div>
|
|
798
709
|
</div>
|
|
799
710
|
</div>
|
|
@@ -801,9 +712,9 @@ __GA_BOOTSTRAP__
|
|
|
801
712
|
|
|
802
713
|
<section class="compatibility" id="workflow-sprint-intake">
|
|
803
714
|
<div class="container">
|
|
804
|
-
<div class="section-label">Team
|
|
805
|
-
<h2 class="section-title">Start
|
|
806
|
-
<p style="color:var(--text-dim);max-width:720px;margin:0 auto 16px;">The recurring value is shared enforcement. Start with one workflow, one owner, and one blocker. The
|
|
715
|
+
<div class="section-label">Team Pilot</div>
|
|
716
|
+
<h2 class="section-title">Start with one repo, one workflow, one repeat failure</h2>
|
|
717
|
+
<p style="color:var(--text-dim);max-width:720px;margin:0 auto 16px;">The recurring value is shared enforcement. Start with one workflow, one owner, and one blocker. The intake is designed to prove that ThumbGate reduces review churn, rollout risk, or repeated agent mistakes before a wider rollout.</p>
|
|
807
718
|
<form class="team-form" action="/v1/intake/workflow-sprint" method="POST">
|
|
808
719
|
<input type="hidden" name="ctaId" value="workflow_sprint_intake">
|
|
809
720
|
<input type="hidden" name="ctaPlacement" value="team_pricing">
|
|
@@ -816,7 +727,7 @@ __GA_BOOTSTRAP__
|
|
|
816
727
|
<textarea class="full" name="blocker" placeholder="What repeat mistake, rollout blocker, or team handoff failure keeps happening?" required></textarea>
|
|
817
728
|
<textarea class="full" name="note" placeholder="Optional context: team size, repos involved, target rollout date, or what you need to prove internally."></textarea>
|
|
818
729
|
<div class="full">
|
|
819
|
-
<button type="submit" class="btn-team">
|
|
730
|
+
<button type="submit" class="btn-team">Start Team Pilot Intake</button>
|
|
820
731
|
</div>
|
|
821
732
|
</form>
|
|
822
733
|
</div>
|
|
@@ -846,7 +757,7 @@ __GA_BOOTSTRAP__
|
|
|
846
757
|
</div>
|
|
847
758
|
<div class="faq-item">
|
|
848
759
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">Do I need a cloud account?</div>
|
|
849
|
-
<div class="faq-a">No. Free keeps local enforcement on your machine with 5 daily feedback captures, 10 lesson searches, unlimited recall, gates, and hook blocking. No cloud account is required. Pro adds a personal local dashboard
|
|
760
|
+
<div class="faq-a">No. Free keeps local enforcement on your machine with 5 daily feedback captures, 10 lesson searches, unlimited recall, gates, and hook blocking. No cloud account is required. Pro adds a personal local dashboard plus DPO export. Team is the hosted rollout lane when your group wants a shared lesson database, hosted review views, org dashboard visibility, and team-wide proof.</div>
|
|
850
761
|
</div>
|
|
851
762
|
<div class="faq-item">
|
|
852
763
|
<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>
|
|
@@ -854,7 +765,7 @@ __GA_BOOTSTRAP__
|
|
|
854
765
|
</div>
|
|
855
766
|
<div class="faq-item">
|
|
856
767
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How are pre-action gates different from prompt rules?</div>
|
|
857
|
-
<div class="faq-a">Prompt rules are suggestions that agents can ignore. Pre-Action Gates are enforcement — they block the action before execution. Gates are auto-generated from your feedback and use Thompson Sampling to adapt over time.</div>
|
|
768
|
+
<div class="faq-a">Prompt rules are suggestions that agents can ignore. Pre-Action Gates are enforcement — they block the action before execution. Gates are auto-generated from your human-in-the-loop feedback and use Thompson Sampling to adapt over time.</div>
|
|
858
769
|
</div>
|
|
859
770
|
<div class="faq-item">
|
|
860
771
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What does Pro cost?</div>
|
|
@@ -867,24 +778,25 @@ __GA_BOOTSTRAP__
|
|
|
867
778
|
<!-- NEWSLETTER SIGNUP -->
|
|
868
779
|
<section class="compatibility" id="newsletter" style="padding: 48px 0;">
|
|
869
780
|
<div class="container" style="text-align: center;">
|
|
870
|
-
<div class="section-label">
|
|
871
|
-
<h2 class="section-title" style="margin-bottom: 16px;">
|
|
872
|
-
<p style="color: var(--text-dim); margin-bottom: 24px; max-width:
|
|
873
|
-
<form action="
|
|
874
|
-
<input type="email" name="email" placeholder="you@company.com" required style="flex: 1; min-width:
|
|
875
|
-
<button type="submit" style="padding: 12px 24px; background: var(--cyan); color: #000; border: none; border-radius: 8px; font-weight: 600; font-size: 15px; cursor: pointer;"
|
|
781
|
+
<div class="section-label">Buyer Follow-Up</div>
|
|
782
|
+
<h2 class="section-title" style="margin-bottom: 16px;">Not ready to buy today? Keep the demo and checkout link one click away.</h2>
|
|
783
|
+
<p style="color: var(--text-dim); margin-bottom: 24px; max-width: 560px; margin-left: auto; margin-right: auto;">Save your work email for launch updates, new gate patterns, and the paid demo path. We also keep it on this device so the Pro checkout can open prefilled instead of making you type it again.</p>
|
|
784
|
+
<form action="/api/newsletter" method="POST" data-newsletter-form data-page="homepage" data-intent="buyer_follow_up" style="display: flex; gap: 8px; max-width: 480px; margin: 0 auto; flex-wrap: wrap; justify-content: center;">
|
|
785
|
+
<input type="email" name="email" data-buyer-email placeholder="you@company.com" required style="flex: 1; min-width: 220px; padding: 12px 16px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-raised); color: var(--text); font-size: 15px;">
|
|
786
|
+
<button type="submit" style="padding: 12px 24px; background: var(--cyan); color: #000; border: none; border-radius: 8px; font-weight: 600; font-size: 15px; cursor: pointer;">Get updates + keep checkout ready</button>
|
|
876
787
|
</form>
|
|
788
|
+
<p data-newsletter-status style="min-height:20px;font-size:12px;color:var(--text-dim);margin-top:10px;" aria-live="polite"></p>
|
|
877
789
|
</div>
|
|
878
790
|
</section>
|
|
879
791
|
|
|
880
792
|
<!-- FINAL CTA -->
|
|
881
793
|
<section class="final-cta">
|
|
882
794
|
<div class="container">
|
|
883
|
-
<h2>
|
|
884
|
-
<p>Try the dashboard demo first
|
|
795
|
+
<h2>Put ThumbGate on your next AI-generated change.</h2>
|
|
796
|
+
<p>Try the dashboard demo first or install in 30 seconds. Prove the value on a real PR, deploy, or migration.</p>
|
|
885
797
|
<div style="display:flex;gap:12px;justify-content:center;flex-wrap:wrap;">
|
|
886
|
-
<a href="/dashboard" class="btn-
|
|
887
|
-
<a href="
|
|
798
|
+
<a href="/dashboard" class="btn-demo-link" style="background:transparent;border:1px solid var(--cyan);color:var(--cyan);">Try Dashboard Demo</a>
|
|
799
|
+
<a href="/checkout/pro?utm_source=website&utm_medium=homepage_final&utm_campaign=pro_pack&cta_id=homepage_final_trial&cta_placement=final&plan_id=pro&landing_path=%2F" class="btn-pro">Try Pro free for 7 days → $19/mo</a>
|
|
888
800
|
</div>
|
|
889
801
|
</div>
|
|
890
802
|
</section>
|
|
@@ -899,11 +811,29 @@ __GA_BOOTSTRAP__
|
|
|
899
811
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
900
812
|
<a href="/blog">Blog</a>
|
|
901
813
|
</div>
|
|
902
|
-
<span class="footer-copy">© 2026 Max Smith KDP LLC · MIT License · v0.9.
|
|
814
|
+
<span class="footer-copy">© 2026 Max Smith KDP LLC · MIT License · v0.9.10</span>
|
|
903
815
|
</div>
|
|
904
816
|
</footer>
|
|
905
817
|
|
|
818
|
+
<script src="/js/buyer-intent.js"></script>
|
|
906
819
|
<script>
|
|
820
|
+
function initializeBuyerIntentForms() {
|
|
821
|
+
globalThis.ThumbGateBuyerIntent.initializeBuyerIntent({
|
|
822
|
+
page: 'homepage',
|
|
823
|
+
duplicateMessage: 'You are already on the list. Checkout on this device is now prefilled.',
|
|
824
|
+
successMessage: 'Saved. We will keep checkout prefilled on this device.',
|
|
825
|
+
});
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
function resolvePricingClickTier(el) {
|
|
829
|
+
if (el.classList.contains('btn-pro')) return 'pro';
|
|
830
|
+
if (el.classList.contains('btn-pro-page')) return 'pro_page';
|
|
831
|
+
if (el.classList.contains('btn-team')) return 'team';
|
|
832
|
+
if (el.classList.contains('btn-free')) return 'free';
|
|
833
|
+
if (el.classList.contains('btn-demo-link')) return 'demo';
|
|
834
|
+
return 'nav';
|
|
835
|
+
}
|
|
836
|
+
|
|
907
837
|
function copyInstall(el) {
|
|
908
838
|
navigator.clipboard.writeText('npx thumbgate init').then(function() {
|
|
909
839
|
var hint = el.querySelector('.copy-hint');
|
|
@@ -938,20 +868,19 @@ function copyInstall(el) {
|
|
|
938
868
|
|
|
939
869
|
/* CTA clicks */
|
|
940
870
|
trackClick('.btn-pro', 'checkout_start', { tier: 'pro', price: 19, billing: 'monthly' });
|
|
871
|
+
trackClick('.btn-pro-page', 'pro_page_click', { tier: 'pro', source: 'hero' });
|
|
941
872
|
trackClick('.btn-team', 'workflow_sprint_intake_click', { tier: 'team', offer: 'workflow_hardening_sprint' });
|
|
942
873
|
trackClick('.btn-free', 'install_click', { tier: 'free' });
|
|
943
|
-
trackClick('.
|
|
874
|
+
trackClick('.btn-demo-link', 'demo_click', { source: 'homepage' });
|
|
875
|
+
trackClick('.nav-cta', 'pro_page_click', { tier: 'pro', source: 'nav' });
|
|
944
876
|
|
|
945
877
|
/* Pricing CTA conversion tracking — fires on every Get Started / Pro / Team button click
|
|
946
878
|
with section context so we can distinguish pricing section vs final CTA section clicks */
|
|
947
|
-
document.querySelectorAll('.btn-pro, .btn-team, .btn-free, .nav-cta').forEach(function(el) {
|
|
879
|
+
document.querySelectorAll('.btn-pro, .btn-pro-page, .btn-team, .btn-free, .btn-demo-link, .nav-cta').forEach(function(el) {
|
|
948
880
|
el.addEventListener('click', function() {
|
|
949
881
|
var section = el.closest('section');
|
|
950
882
|
var sectionId = section ? (section.id || section.className.split(' ')[0] || 'unknown') : 'unknown';
|
|
951
|
-
var tier = el
|
|
952
|
-
: el.classList.contains('btn-team') ? 'team'
|
|
953
|
-
: el.classList.contains('btn-free') ? 'free'
|
|
954
|
-
: 'nav';
|
|
883
|
+
var tier = resolvePricingClickTier(el);
|
|
955
884
|
var label = (el.textContent || '').trim().substring(0, 40);
|
|
956
885
|
if (typeof plausible === 'function') {
|
|
957
886
|
plausible('pricing_cta_click', { props: { tier: tier, section: sectionId, label: label } });
|
|
@@ -992,22 +921,33 @@ function copyInstall(el) {
|
|
|
992
921
|
})();
|
|
993
922
|
</script>
|
|
994
923
|
<script>
|
|
995
|
-
|
|
924
|
+
initializeBuyerIntentForms();
|
|
925
|
+
|
|
926
|
+
async function handleProTrial() {
|
|
927
|
+
var buyerIntent = globalThis.ThumbGateBuyerIntent;
|
|
996
928
|
var email = document.getElementById('pro-email');
|
|
997
|
-
|
|
929
|
+
var normalizedEmail = buyerIntent.normalizeBuyerEmail(email && email.value);
|
|
930
|
+
if (!email || !buyerIntent.isValidBuyerEmail(normalizedEmail)) {
|
|
998
931
|
email.style.border = '2px solid #f87171';
|
|
999
932
|
email.placeholder = 'Please enter a valid email';
|
|
1000
933
|
email.focus();
|
|
1001
934
|
return;
|
|
1002
935
|
}
|
|
1003
936
|
email.style.border = '1px solid #333';
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
937
|
+
buyerIntent.storeBuyerEmail(normalizedEmail);
|
|
938
|
+
buyerIntent.hydrateBuyerEmailInputs(normalizedEmail);
|
|
939
|
+
buyerIntent.applyBuyerEmailToCheckoutLinks(normalizedEmail);
|
|
940
|
+
var checkoutLink = document.getElementById('pro-checkout-link');
|
|
941
|
+
var checkoutUrl = checkoutLink ? checkoutLink.href : '/checkout/pro';
|
|
1007
942
|
if (typeof plausible === 'function') {
|
|
1008
|
-
plausible('trial_email_captured', { props: {
|
|
943
|
+
plausible('trial_email_captured', { props: { page: 'homepage', intent: 'checkout' } });
|
|
944
|
+
}
|
|
945
|
+
try {
|
|
946
|
+
await buyerIntent.submitNewsletterSignup(normalizedEmail);
|
|
947
|
+
} catch (_err) {
|
|
948
|
+
// Continue to checkout even if lead capture fails.
|
|
1009
949
|
}
|
|
1010
|
-
|
|
950
|
+
globalThis.location.assign(checkoutUrl);
|
|
1011
951
|
}
|
|
1012
952
|
</script>
|
|
1013
953
|
</body>
|