thumbgate 1.27.18 → 1.27.20
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/commands/dashboard.md +15 -0
- package/.claude/commands/thumbgate-blocked.md +27 -0
- package/.claude/commands/thumbgate-dashboard.md +15 -0
- package/.claude/commands/thumbgate-doctor.md +30 -0
- package/.claude/commands/thumbgate-guard.md +36 -0
- package/.claude/commands/thumbgate-protect.md +30 -0
- package/.claude/commands/thumbgate-rules.md +30 -0
- package/.claude-plugin/plugin.json +4 -3
- package/.well-known/agentic-verify.txt +1 -0
- package/.well-known/llms.txt +33 -12
- package/.well-known/mcp/server-card.json +8 -8
- package/README.md +246 -30
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/codex/config.toml +2 -2
- package/adapters/gcp/dfcx-webhook-gate.js +295 -0
- package/adapters/gemini/function-declarations.json +1 -0
- package/adapters/letta/README.md +41 -0
- package/adapters/letta/thumbgate-letta-adapter.js +133 -0
- package/adapters/mcp/server-stdio.js +263 -11
- package/adapters/opencode/opencode.json +1 -1
- package/adapters/policy-engine/ethicore-guardian-client.js +68 -0
- package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +260 -0
- package/bench/observability-eval-suite.json +26 -0
- package/bench/thumbgate-bench.json +2 -2
- package/bin/cli.js +1456 -122
- package/bin/dashboard-cli.js +7 -0
- package/bin/postinstall.js +11 -27
- package/commands/dashboard.md +15 -0
- package/commands/thumbgate-dashboard.md +15 -0
- package/config/gate-classifier-routing.json +98 -0
- package/config/gate-templates.json +216 -0
- package/config/gates/claim-verification.json +12 -0
- package/config/gates/default.json +31 -2
- package/config/github-about.json +2 -2
- package/config/mcp-allowlists.json +23 -13
- package/config/merge-quality-checks.json +0 -1
- package/config/model-candidates.json +121 -6
- package/config/post-deploy-marketing-pages.json +80 -0
- package/config/tessl-tiles.json +1 -3
- package/openapi/openapi.yaml +12 -0
- package/package.json +225 -100
- package/public/about.html +162 -0
- package/public/agent-manager.html +179 -0
- package/public/agents-cost-savings.html +153 -0
- package/public/ai-malpractice-prevention.html +818 -0
- package/public/assets/brand/github-social-preview.png +0 -0
- package/public/assets/brand/thumbgate-icon-512.png +0 -0
- package/public/assets/brand/thumbgate-icon-pro-512.png +0 -0
- package/public/assets/brand/thumbgate-icon-team-512.png +0 -0
- package/public/assets/brand/thumbgate-logo-1200x360.png +0 -0
- package/public/assets/brand/thumbgate-logo-transparent.svg +28 -0
- package/public/assets/brand/thumbgate-mark-inline-v3.svg +18 -0
- package/public/assets/brand/thumbgate-mark-pro.svg +23 -0
- package/public/assets/brand/thumbgate-mark-team.svg +26 -0
- package/public/assets/brand/thumbgate-mark.svg +21 -0
- package/public/assets/brand/thumbgate-wordmark.svg +20 -0
- package/public/assets/claude-thumbgate-statusbar.svg +8 -0
- package/public/assets/codex-thumbgate-statusbar-test.svg +9 -0
- package/public/assets/legal-intake-control-flow.svg +66 -0
- package/public/blog.html +4 -4
- package/public/brand/thumbgate-mark.svg +19 -0
- package/public/brand/thumbgate-og.svg +16 -0
- package/public/chatgpt-app.html +330 -0
- package/public/codex-enterprise.html +123 -0
- package/public/codex-plugin.html +72 -20
- package/public/compare.html +31 -8
- package/public/dashboard.html +930 -166
- package/public/diagnostic.html +345 -0
- package/public/federal.html +2 -2
- package/public/guide.html +33 -13
- package/public/index.html +469 -111
- package/public/install.html +193 -0
- package/public/js/buyer-intent.js +672 -0
- package/public/learn.html +183 -18
- package/public/lessons.html +168 -10
- package/public/numbers.html +7 -7
- package/public/pricing.html +399 -0
- package/public/pro.html +34 -11
- package/scripts/action-receipts.js +324 -0
- package/scripts/activation-quickstart.js +187 -0
- package/scripts/agent-memory-lifecycle.js +211 -0
- package/scripts/agent-operations-planner.js +621 -0
- package/scripts/agent-readiness.js +20 -3
- package/scripts/agent-reward-model.js +53 -1
- package/scripts/ai-component-inventory.js +367 -0
- package/scripts/async-eval-observability.js +236 -0
- package/scripts/audit.js +65 -0
- package/scripts/auto-promote-gates.js +82 -10
- package/scripts/auto-wire-hooks.js +14 -0
- package/scripts/aws-blocks-guardrails.js +272 -0
- package/scripts/billing.js +93 -1
- package/scripts/bot-detection.js +61 -3
- package/scripts/build-metadata.js +50 -10
- package/scripts/classifier-routing.js +130 -0
- package/scripts/cli-feedback.js +4 -2
- package/scripts/cli-schema.js +97 -0
- package/scripts/cli-telemetry.js +6 -1
- package/scripts/commercial-offer.js +82 -2
- package/scripts/context-manager.js +74 -6
- package/scripts/dashboard-chat.js +332 -0
- package/scripts/dashboard.js +68 -2
- package/scripts/export-databricks-bundle.js +5 -1
- package/scripts/export-dpo-pairs.js +7 -2
- package/scripts/feedback-aggregate.js +281 -0
- package/scripts/feedback-loop.js +123 -1
- package/scripts/feedback-quality.js +87 -0
- package/scripts/feedback-sanitizer.js +105 -0
- package/scripts/filesystem-search.js +35 -10
- package/scripts/gate-stats.js +89 -0
- package/scripts/gates-engine.js +1176 -85
- package/scripts/gemini-embedding-policy.js +2 -1
- package/scripts/hook-runtime.js +20 -14
- package/scripts/hook-stop-anti-claim.js +301 -0
- package/scripts/hook-thumbgate-cache-updater.js +18 -2
- package/scripts/hybrid-feedback-context.js +142 -7
- package/scripts/install-shim.js +87 -0
- package/scripts/lesson-inference.js +8 -3
- package/scripts/lesson-search.js +17 -1
- package/scripts/license.js +10 -10
- package/scripts/llm-client.js +169 -4
- package/scripts/local-model-profile.js +15 -8
- package/scripts/mcp-config.js +7 -1
- package/scripts/mcp-oauth.js +293 -0
- package/scripts/memory-scope-readiness.js +159 -0
- package/scripts/meta-agent-loop.js +36 -0
- package/scripts/noop-detect.js +285 -0
- package/scripts/operational-integrity.js +39 -5
- package/scripts/oss-pr-opportunity-scout.js +35 -5
- package/scripts/parallel-workflow-orchestrator.js +293 -0
- package/scripts/plan-gate.js +243 -0
- package/scripts/plausible-domain-config.js +99 -0
- package/scripts/plausible-server-events.js +9 -6
- package/scripts/pro-local-dashboard.js +4 -4
- package/scripts/proxy-pointer-rag-guardrails.js +42 -1
- package/scripts/published-cli.js +0 -8
- package/scripts/qa-scenario-planner.js +136 -0
- package/scripts/rate-limiter.js +64 -13
- package/scripts/repeat-metric.js +137 -0
- package/scripts/secret-fixture-tokens.js +61 -0
- package/scripts/secret-redaction.js +166 -0
- package/scripts/secret-scanner.js +44 -5
- package/scripts/security-scanner.js +260 -10
- package/scripts/self-distill-agent.js +3 -1
- package/scripts/self-harness-optimizer.js +141 -0
- package/scripts/self-healing-check.js +193 -0
- package/scripts/self-protection.js +90 -0
- package/scripts/seo-gsd.js +916 -7
- package/scripts/silent-failure-cluster.js +531 -0
- package/scripts/statusline-cache-path.js +17 -2
- package/scripts/statusline-cache-read.js +57 -0
- package/scripts/statusline-local-stats.js +9 -1
- package/scripts/statusline-meta.js +28 -2
- package/scripts/statusline.sh +20 -4
- package/scripts/sync-telemetry-from-prod.js +374 -0
- package/scripts/telemetry-analytics.js +357 -0
- package/scripts/thompson-sampling.js +31 -10
- package/scripts/thumbgate-bench.js +16 -1
- package/scripts/thumbgate-search.js +85 -19
- package/scripts/tool-contract-validator.js +76 -0
- package/scripts/tool-registry.js +169 -1
- package/scripts/trajectory-scorer.js +63 -0
- package/scripts/vector-store.js +45 -0
- package/scripts/verify-marketing-pages-deployed.js +212 -0
- package/scripts/visitor-journey.js +172 -0
- package/scripts/workflow-sentinel.js +286 -53
- package/scripts/workspace-evolver.js +62 -2
- package/src/api/server.js +2683 -319
- package/.claude-plugin/marketplace.json +0 -85
- package/adapters/chatgpt/openapi.yaml +0 -1695
- package/scripts/bot-detector.js +0 -50
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
__GOOGLE_SITE_VERIFICATION_META__
|
|
7
|
+
<title>Pricing — ThumbGate</title>
|
|
8
|
+
<meta name="description" content="ThumbGate pricing: free CLI forever, $19/mo Pro dashboard, and custom Enterprise enforcement scoped after intake. One clear subscription path.">
|
|
9
|
+
<meta property="og:title" content="Pricing — ThumbGate">
|
|
10
|
+
<meta property="og:description" content="Free CLI, Pro self-serve, and Enterprise after workflow scope. No mixed consulting checkout maze.">
|
|
11
|
+
<meta property="og:type" content="website">
|
|
12
|
+
<meta property="og:url" content="__APP_ORIGIN__/pricing">
|
|
13
|
+
<meta property="og:image" content="/og.png">
|
|
14
|
+
<link rel="canonical" href="__APP_ORIGIN__/pricing">
|
|
15
|
+
<link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
|
|
16
|
+
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
17
|
+
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg">
|
|
18
|
+
|
|
19
|
+
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.tagged-events.js"></script>
|
|
20
|
+
__GA_BOOTSTRAP__
|
|
21
|
+
|
|
22
|
+
<script>
|
|
23
|
+
const gaMeasurementId = '__GA_MEASUREMENT_ID__';
|
|
24
|
+
const serverVisitorId = '__SERVER_VISITOR_ID__';
|
|
25
|
+
const serverSessionId = '__SERVER_SESSION_ID__';
|
|
26
|
+
const serverAcquisitionId = '__SERVER_ACQUISITION_ID__';
|
|
27
|
+
const serverTelemetryCaptured = '__SERVER_TELEMETRY_CAPTURED__' === 'true';
|
|
28
|
+
const proPriceDollars = Number('__PRO_PRICE_DOLLARS__') || 19;
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<script>
|
|
32
|
+
window.thumbgatePricingTelemetry = window.thumbgatePricingTelemetry || {};
|
|
33
|
+
window.trackPricingTelemetry = function(eventType, data) {
|
|
34
|
+
const params = new URLSearchParams(window.location.search);
|
|
35
|
+
const payload = Object.assign({
|
|
36
|
+
eventType,
|
|
37
|
+
clientType: 'web',
|
|
38
|
+
page: '/pricing',
|
|
39
|
+
source: params.get('utm_source') || 'pricing',
|
|
40
|
+
utmSource: params.get('utm_source') || 'pricing',
|
|
41
|
+
utmMedium: params.get('utm_medium') || 'pricing_page',
|
|
42
|
+
utmCampaign: params.get('utm_campaign') || 'pricing_page',
|
|
43
|
+
utmContent: params.get('utm_content') || null,
|
|
44
|
+
utmTerm: params.get('utm_term') || null,
|
|
45
|
+
traceId: params.get('trace_id') || null,
|
|
46
|
+
acquisitionId: params.get('acquisition_id') || serverAcquisitionId || null,
|
|
47
|
+
visitorId: params.get('visitor_id') || serverVisitorId || null,
|
|
48
|
+
sessionId: params.get('visitor_session_id') || params.get('session_id') || serverSessionId || null,
|
|
49
|
+
referrer: document.referrer || null,
|
|
50
|
+
landingPath: '/pricing'
|
|
51
|
+
}, data || {});
|
|
52
|
+
const body = JSON.stringify(payload);
|
|
53
|
+
if (navigator.sendBeacon) {
|
|
54
|
+
navigator.sendBeacon('/v1/telemetry/ping', new Blob([body], { type: 'application/json' }));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
fetch('/v1/telemetry/ping', {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: { 'content-type': 'application/json' },
|
|
60
|
+
body,
|
|
61
|
+
keepalive: true
|
|
62
|
+
}).catch(function(){});
|
|
63
|
+
};
|
|
64
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
65
|
+
trackPricingTelemetry('pricing_page_view', { serverTelemetryCaptured });
|
|
66
|
+
document.querySelectorAll('[data-pricing-cta]').forEach(function(link) {
|
|
67
|
+
link.addEventListener('click', function() {
|
|
68
|
+
trackPricingTelemetry('pricing_cta_click', {
|
|
69
|
+
ctaId: link.getAttribute('data-cta-id') || null,
|
|
70
|
+
ctaPlacement: link.getAttribute('data-cta-placement') || 'pricing',
|
|
71
|
+
tier: link.getAttribute('data-tier') || null,
|
|
72
|
+
planId: link.getAttribute('data-plan-id') || null,
|
|
73
|
+
billingCycle: link.getAttribute('data-billing-cycle') || null,
|
|
74
|
+
price: link.getAttribute('data-price') || null,
|
|
75
|
+
href: link.getAttribute('href') || null
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
</script>
|
|
81
|
+
|
|
82
|
+
<script type="application/ld+json">
|
|
83
|
+
{
|
|
84
|
+
"@context": "https://schema.org",
|
|
85
|
+
"@type": "SoftwareApplication",
|
|
86
|
+
"name": "ThumbGate",
|
|
87
|
+
"applicationCategory": "DeveloperApplication",
|
|
88
|
+
"operatingSystem": "Cross-platform, Node.js >=18.18.0",
|
|
89
|
+
"url": "__APP_ORIGIN__/pricing",
|
|
90
|
+
"offers": [
|
|
91
|
+
{ "@type": "Offer", "name": "ThumbGate CLI (Free)", "price": "0", "priceCurrency": "USD" },
|
|
92
|
+
{ "@type": "Offer", "name": "ThumbGate Pro Monthly", "price": "__PRO_PRICE_DOLLARS__", "priceCurrency": "USD", "url": "__APP_ORIGIN__/checkout/pro?confirm=1&plan_id=pro&billing_cycle=monthly&landing_path=%2Fpricing" },
|
|
93
|
+
{ "@type": "Offer", "name": "ThumbGate Pro Annual", "price": "149", "priceCurrency": "USD", "url": "__APP_ORIGIN__/checkout/pro?confirm=1&plan_id=pro&billing_cycle=annual&landing_path=%2Fpricing" },
|
|
94
|
+
{ "@type": "Offer", "name": "ThumbGate Enterprise", "priceCurrency": "USD", "url": "__APP_ORIGIN__/#workflow-sprint-intake" }
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
<script type="application/ld+json">
|
|
100
|
+
{
|
|
101
|
+
"@context": "https://schema.org",
|
|
102
|
+
"@type": "FAQPage",
|
|
103
|
+
"mainEntity": [
|
|
104
|
+
{ "@type": "Question", "name": "What does Pro add over the free CLI?", "acceptedAnswer": { "@type": "Answer", "text": "Free gives you 2 captures/day and 3 active rules, running entirely on your machine. Pro is the hosted layer: unlimited captures, unlimited rules, lesson sync across machines, a dashboard without self-hosting, managed adapter updates, and DPO export. You're paying for infrastructure we run, not features we hide." } },
|
|
105
|
+
{ "@type": "Question", "name": "Does ThumbGate send my code to the cloud?", "acceptedAnswer": { "@type": "Answer", "text": "No. The CLI is local-first — no data leaves your machine. Pro and Enterprise add hosted sync for dashboards and shared lessons, but your source code stays local." } },
|
|
106
|
+
{ "@type": "Question", "name": "When should I pick Enterprise over Pro?", "acceptedAnswer": { "@type": "Answer", "text": "When one engineer's correction should protect the whole team. Enterprise shares the lesson database across the org so a fix in one repo prevents the same mistake in every repo." } },
|
|
107
|
+
{ "@type": "Question", "name": "Can I cancel anytime?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Pro and Enterprise are month-to-month with a 7-day refund window on the first charge. Cancel from the billing portal and your subscription ends at the period close." } }
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
</script>
|
|
111
|
+
|
|
112
|
+
<style>
|
|
113
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
114
|
+
|
|
115
|
+
:root {
|
|
116
|
+
--bg: #0a0a0b;
|
|
117
|
+
--bg-raised: #111113;
|
|
118
|
+
--bg-card: #161618;
|
|
119
|
+
--border: #232327;
|
|
120
|
+
--text: #ececf1;
|
|
121
|
+
--text-muted: #9a9aa6;
|
|
122
|
+
--text-dim: #6b6b78;
|
|
123
|
+
--cyan: #22d3ee;
|
|
124
|
+
--cyan-dim: rgba(34, 211, 238, 0.12);
|
|
125
|
+
--cyan-glow: rgba(34, 211, 238, 0.22);
|
|
126
|
+
--green: #4ade80;
|
|
127
|
+
--green-dim: rgba(74, 222, 128, 0.12);
|
|
128
|
+
--font: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', Roboto, sans-serif;
|
|
129
|
+
--mono: 'SF Mono', 'Cascadia Code', 'JetBrains Mono', 'Fira Code', Consolas, monospace;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
html { scroll-behavior: smooth; }
|
|
133
|
+
body {
|
|
134
|
+
margin: 0;
|
|
135
|
+
font-family: var(--font);
|
|
136
|
+
background:
|
|
137
|
+
radial-gradient(circle at top, rgba(34, 211, 238, 0.16) 0%, rgba(34, 211, 238, 0) 28%),
|
|
138
|
+
linear-gradient(180deg, #0a0a0b 0%, #0d1016 48%, #0a0a0b 100%);
|
|
139
|
+
color: var(--text);
|
|
140
|
+
line-height: 1.6;
|
|
141
|
+
-webkit-font-smoothing: antialiased;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
a { color: inherit; }
|
|
145
|
+
.container { max-width: 1080px; margin: 0 auto; padding: 0 24px; }
|
|
146
|
+
|
|
147
|
+
/* NAV */
|
|
148
|
+
nav {
|
|
149
|
+
position: sticky; top: 0; z-index: 50;
|
|
150
|
+
backdrop-filter: blur(12px);
|
|
151
|
+
background: rgba(10, 10, 11, 0.86);
|
|
152
|
+
border-bottom: 1px solid rgba(35, 35, 39, 0.92);
|
|
153
|
+
}
|
|
154
|
+
nav .container { min-height: 68px; display: flex; align-items: center; justify-content: space-between; gap: 20px; }
|
|
155
|
+
.nav-logo { font-size: 15px; font-weight: 700; letter-spacing: -0.02em; text-decoration: none; }
|
|
156
|
+
.nav-links { display: flex; gap: 20px; align-items: center; }
|
|
157
|
+
.nav-links a { font-size: 13px; color: var(--text-muted); text-decoration: none; transition: color 0.15s; }
|
|
158
|
+
.nav-links a:hover { color: var(--text); }
|
|
159
|
+
.nav-cta { background: var(--cyan); color: var(--bg); padding: 7px 16px; border-radius: 6px; font-size: 13px; font-weight: 600; text-decoration: none; transition: opacity 0.15s; }
|
|
160
|
+
.nav-cta:hover { opacity: 0.85; }
|
|
161
|
+
|
|
162
|
+
/* HERO */
|
|
163
|
+
.pricing-hero { padding: 80px 0 24px; text-align: center; }
|
|
164
|
+
.pricing-hero h1 { font-size: clamp(28px, 4vw, 40px); font-weight: 700; letter-spacing: -0.03em; margin: 0 0 12px; }
|
|
165
|
+
.pricing-hero .lede { color: var(--text-muted); font-size: 17px; max-width: 560px; margin: 0 auto; }
|
|
166
|
+
|
|
167
|
+
/* GRID */
|
|
168
|
+
.pricing-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin: 40px 0 32px; }
|
|
169
|
+
@media (max-width: 768px) { .pricing-grid { grid-template-columns: 1fr; } }
|
|
170
|
+
|
|
171
|
+
/* CARDS */
|
|
172
|
+
.price-card {
|
|
173
|
+
background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px;
|
|
174
|
+
padding: 32px 28px; display: flex; flex-direction: column;
|
|
175
|
+
}
|
|
176
|
+
.price-card.highlight {
|
|
177
|
+
border-color: var(--cyan);
|
|
178
|
+
box-shadow: 0 0 40px var(--cyan-dim), inset 0 1px 0 rgba(34, 211, 238, 0.15);
|
|
179
|
+
position: relative;
|
|
180
|
+
}
|
|
181
|
+
.price-card.highlight::before {
|
|
182
|
+
content: "Most popular";
|
|
183
|
+
position: absolute; top: -10px; left: 50%; transform: translateX(-50%);
|
|
184
|
+
background: var(--cyan); color: var(--bg);
|
|
185
|
+
padding: 3px 12px; border-radius: 6px;
|
|
186
|
+
font-size: 11px; font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.tier { font-size: 13px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); font-weight: 600; margin-bottom: 8px; }
|
|
190
|
+
.price-card.highlight .tier { color: var(--cyan); }
|
|
191
|
+
|
|
192
|
+
.price { font-size: 40px; font-weight: 700; letter-spacing: -0.03em; margin-bottom: 4px; }
|
|
193
|
+
.price span { font-size: 16px; color: var(--text-dim); }
|
|
194
|
+
.price-sub { font-size: 13px; color: var(--text-muted); margin-bottom: 24px; line-height: 1.55; }
|
|
195
|
+
|
|
196
|
+
.price-card ul { list-style: none; padding: 0; margin: 0 0 28px; }
|
|
197
|
+
.price-card li { font-size: 14px; color: var(--text-muted); padding: 6px 0; display: flex; align-items: flex-start; gap: 8px; }
|
|
198
|
+
.price-card li::before { content: "\2713"; color: var(--cyan); font-weight: 700; flex-shrink: 0; }
|
|
199
|
+
|
|
200
|
+
/* BUTTONS */
|
|
201
|
+
.btn-install {
|
|
202
|
+
display: block; text-align: center; padding: 12px; border: 1px solid var(--border);
|
|
203
|
+
border-radius: 8px; color: var(--text); text-decoration: none; font-size: 14px; font-weight: 500;
|
|
204
|
+
transition: border-color 0.15s; margin-top: auto;
|
|
205
|
+
}
|
|
206
|
+
.btn-install:hover { border-color: var(--text-muted); }
|
|
207
|
+
|
|
208
|
+
.btn-pro {
|
|
209
|
+
display: block; text-align: center; padding: 12px;
|
|
210
|
+
background: var(--cyan); color: var(--bg); border-radius: 8px;
|
|
211
|
+
text-decoration: none; font-size: 14px; font-weight: 600; transition: opacity 0.15s;
|
|
212
|
+
margin-top: auto;
|
|
213
|
+
}
|
|
214
|
+
.btn-pro:hover { opacity: 0.85; }
|
|
215
|
+
|
|
216
|
+
.btn-team {
|
|
217
|
+
display: block; text-align: center; padding: 12px;
|
|
218
|
+
background: rgba(74, 222, 128, 0.14); color: var(--green);
|
|
219
|
+
border: 1px solid rgba(74, 222, 128, 0.4); border-radius: 8px;
|
|
220
|
+
text-decoration: none; font-size: 14px; font-weight: 600;
|
|
221
|
+
transition: border-color 0.15s, transform 0.15s; margin-top: auto;
|
|
222
|
+
}
|
|
223
|
+
.btn-team:hover { border-color: var(--green); transform: translateY(-1px); }
|
|
224
|
+
|
|
225
|
+
.btn-sub { font-size: 11px; color: var(--text-muted); margin-top: 8px; text-align: center; }
|
|
226
|
+
|
|
227
|
+
/* FAQ */
|
|
228
|
+
.faq { padding: 48px 0; }
|
|
229
|
+
.faq h2 { text-align: center; font-size: 24px; margin-bottom: 24px; }
|
|
230
|
+
.faq-list { max-width: 640px; margin: 0 auto; }
|
|
231
|
+
.faq-item { border-bottom: 1px solid var(--border); }
|
|
232
|
+
.faq-q {
|
|
233
|
+
padding: 20px 0; font-size: 15px; font-weight: 600; cursor: pointer;
|
|
234
|
+
display: flex; justify-content: space-between; align-items: center;
|
|
235
|
+
}
|
|
236
|
+
.faq-q::after { content: "+"; font-size: 18px; color: var(--text-muted); transition: transform 0.2s; }
|
|
237
|
+
.faq-item.open .faq-q::after { transform: rotate(45deg); }
|
|
238
|
+
.faq-a { font-size: 14px; color: var(--text-muted); line-height: 1.65; padding-bottom: 20px; display: none; }
|
|
239
|
+
.faq-item.open .faq-a { display: block; }
|
|
240
|
+
|
|
241
|
+
/* FOOTER */
|
|
242
|
+
footer { border-top: 1px solid var(--border); padding: 32px 0; margin-top: 48px; }
|
|
243
|
+
footer .container { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; }
|
|
244
|
+
.footer-links { display: flex; gap: 20px; }
|
|
245
|
+
.footer-links a { color: var(--text-muted); text-decoration: none; font-size: 13px; transition: color 0.15s; }
|
|
246
|
+
.footer-links a:hover { color: var(--text); }
|
|
247
|
+
.footer-copy { font-size: 12px; color: var(--text-muted); }
|
|
248
|
+
</style>
|
|
249
|
+
<script>
|
|
250
|
+
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace("/ingest","")+ "/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group identify setPersonProperties setPersonPropertiesForFlags".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
|
|
251
|
+
posthog.init('__POSTHOG_API_KEY__', {
|
|
252
|
+
api_host: '/ingest',
|
|
253
|
+
ui_host: 'https://us.posthog.com',
|
|
254
|
+
person_profiles: 'identified_only',
|
|
255
|
+
});
|
|
256
|
+
posthog.capture('$pageview');
|
|
257
|
+
</script>
|
|
258
|
+
</head>
|
|
259
|
+
<body>
|
|
260
|
+
|
|
261
|
+
<nav>
|
|
262
|
+
<div class="container">
|
|
263
|
+
<a href="/" class="nav-logo">ThumbGate</a>
|
|
264
|
+
<div class="nav-links">
|
|
265
|
+
<a href="/#how-it-works">Features</a>
|
|
266
|
+
<a href="/pricing" style="color:var(--text);">Pricing</a>
|
|
267
|
+
<a href="/guide">Guide</a>
|
|
268
|
+
<a href="/dashboard">Dashboard</a>
|
|
269
|
+
<a class="nav-cta" href="/checkout/pro?confirm=1&utm_source=pricing&utm_medium=nav&utm_campaign=pricing_page&cta_id=pricing_nav_start_pro&cta_placement=nav&plan_id=pro&landing_path=%2Fpricing" data-pricing-cta data-cta-id="pricing_nav_start_pro" data-cta-placement="nav" data-tier="pro" data-plan-id="pro" data-billing-cycle="monthly" data-price="19">Start Pro</a>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
</nav>
|
|
273
|
+
|
|
274
|
+
<section class="pricing-hero">
|
|
275
|
+
<div class="container">
|
|
276
|
+
<h1>Stop paying for the same AI mistake twice.</h1>
|
|
277
|
+
<p class="lede">One self-serve paid path for solo operators. Teams start with workflow scope so shared enforcement is mapped before checkout.</p>
|
|
278
|
+
</div>
|
|
279
|
+
</section>
|
|
280
|
+
|
|
281
|
+
<section class="container">
|
|
282
|
+
<div class="pricing-grid">
|
|
283
|
+
|
|
284
|
+
<div class="price-card">
|
|
285
|
+
<div class="tier" style="color:var(--cyan);">Free</div>
|
|
286
|
+
<div class="price">$0</div>
|
|
287
|
+
<div class="price-sub">Block repeated mistakes daily. Forever free for solo devs.</div>
|
|
288
|
+
<ul>
|
|
289
|
+
<li>2 feedback captures/day (10 total) — enough to see the value</li>
|
|
290
|
+
<li>Up to 3 active prevention rules</li>
|
|
291
|
+
<li>All MCP integrations (Claude Code, Cursor, Codex, Gemini, Amp)</li>
|
|
292
|
+
<li>PreToolUse hook blocking with built-in safety checks</li>
|
|
293
|
+
<li>Runs 100% local — no account, no signup, no data leaves your machine</li>
|
|
294
|
+
</ul>
|
|
295
|
+
<a class="btn-install" href="/go/install?utm_source=pricing&utm_medium=free_card&cta_id=pricing_install_free&cta_placement=free_card" data-pricing-cta data-cta-id="pricing_install_free" data-cta-placement="free_card" data-tier="free" data-plan-id="free" data-price="0" onclick="try{posthog.capture('pricing_cta_click',{cta:'install_free',tier:'free',placement:'pricing_page'})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'install_free',tier:'free'}})}catch(_){}">Install free</a>
|
|
296
|
+
</div>
|
|
297
|
+
|
|
298
|
+
<div class="price-card highlight" id="pro">
|
|
299
|
+
<div class="tier">Pro</div>
|
|
300
|
+
<div class="price">$19<span>/mo</span></div>
|
|
301
|
+
<div class="price-sub">
|
|
302
|
+
<strong>Don't buy a tool — buy hosted sync + compatibility insurance.</strong> The free CLI runs your gates locally, but Pro is what we operate for you: secure SQLite sync across all your machines (saving you from managing database migrations manually across developer boxes) and active adapter maintenance to stay compatible with weekly breaking updates in Claude Code, Cursor, and Cline.
|
|
303
|
+
</div>
|
|
304
|
+
<ul>
|
|
305
|
+
<li><strong>Hosted lesson sync</strong> — corrections follow you across machines, no manual export</li>
|
|
306
|
+
<li><strong>Managed adapter matrix</strong> — we track runtime changes in Claude Code, Cursor, Codex, Gemini, Amp so you don't</li>
|
|
307
|
+
<li><strong>Hosted dashboard</strong> — see every blocked action, every rule that fired, without running your own server</li>
|
|
308
|
+
<li><strong>Unlimited prevention rules</strong> — free caps at 3 auto-promoted rules</li>
|
|
309
|
+
<li><strong>DPO + HuggingFace export</strong> — training data from your real corrections</li>
|
|
310
|
+
<li><strong>Auto-connect</strong> — new agent surfaces appear automatically after setup</li>
|
|
311
|
+
<li>7-day refund window. Cancel anytime.</li>
|
|
312
|
+
</ul>
|
|
313
|
+
<a class="btn-pro" href="/checkout/pro?confirm=1&utm_source=pricing&utm_medium=hero_card&utm_campaign=pricing_page&cta_id=pricing_pro&cta_placement=pricing&plan_id=pro&billing_cycle=monthly&landing_path=%2Fpricing" data-pricing-cta data-cta-id="pricing_pro" data-cta-placement="pricing" data-tier="pro" data-plan-id="pro" data-billing-cycle="monthly" data-price="19" onclick="try{posthog.capture('pricing_cta_click',{cta:'start_pro',tier:'pro',placement:'pricing_page',price:19})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'start_pro',tier:'pro'}})}catch(_){}">Start Pro — $19/mo</a>
|
|
314
|
+
<p class="btn-sub">or <a href="/checkout/pro?confirm=1&utm_source=pricing&utm_medium=hero_card_annual&utm_campaign=pricing_page&cta_id=pricing_pro_annual&cta_placement=pricing&plan_id=pro&billing_cycle=annual&landing_path=%2Fpricing" data-pricing-cta data-cta-id="pricing_pro_annual" data-cta-placement="pricing" data-tier="pro" data-plan-id="pro" data-billing-cycle="annual" data-price="149" onclick="try{posthog.capture('pricing_cta_click',{cta:'start_pro_annual',tier:'pro',placement:'pricing_page',price:149})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'start_pro_annual',tier:'pro'}})}catch(_){}" style="color:var(--cyan);text-decoration:none;font-weight:600;">$149/year (save 35%) →</a></p>
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
<div class="price-card enterprise-card" id="enterprise">
|
|
318
|
+
<div class="tier">Enterprise</div>
|
|
319
|
+
<div class="price">Custom<span> / scoped after intake</span></div>
|
|
320
|
+
<div class="price-sub">Shared enforcement for the whole team and regulated workflows. One engineer's save protects every agent.</div>
|
|
321
|
+
<ul>
|
|
322
|
+
<li>Everything in Pro, for every developer and agent</li>
|
|
323
|
+
<li><strong>Shared lesson database</strong> — one engineer's fix protects every agent on the team</li>
|
|
324
|
+
<li><strong>Org dashboard</strong> — visibility across all agent surfaces and developers</li>
|
|
325
|
+
<li><strong>Dialogflow CX fulfillment guard</strong> — put ThumbGate's pre-action gate in front of your Dialogflow CX webhook fulfillment, in your own GCP tenant, so risky or repeat turns are blocked before they touch a DB, CRM, or billing system (white-glove design-partner pilot)</li>
|
|
326
|
+
<li><strong>Vertex AI / VPC gating</strong> — route agent checks through Gemini in your own Google Cloud project (<code>npx thumbgate setup-vertex</code>)</li>
|
|
327
|
+
<li><strong>Regulatory gate templates</strong> — legal intake, financial compliance, healthcare</li>
|
|
328
|
+
<li>Custom policy layers, compliance audit export, approval boundaries, SSO, and dedicated onboarding with SLA</li>
|
|
329
|
+
<li>Rollout starts only after workflow and proof review are explicit</li>
|
|
330
|
+
</ul>
|
|
331
|
+
<a class="btn-team" href="/?utm_source=pricing&utm_medium=enterprise_card&utm_campaign=enterprise_intake&cta_id=pricing_enterprise_intake&cta_placement=pricing&plan_id=enterprise#workflow-sprint-intake" data-pricing-cta data-cta-id="pricing_enterprise_intake" data-cta-placement="pricing" data-tier="enterprise" data-plan-id="enterprise" data-price="0" onclick="try{posthog.capture('pricing_cta_click',{cta:'enterprise_intake',tier:'enterprise',placement:'pricing_page',price:0})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'enterprise_intake',tier:'enterprise'}})}catch(_){}">Talk to us</a>
|
|
332
|
+
<p class="btn-sub">Custom pricing, scoped through intake so the workflow is explicit before checkout.</p>
|
|
333
|
+
</div>
|
|
334
|
+
|
|
335
|
+
</div>
|
|
336
|
+
|
|
337
|
+
<div style="text-align:center;margin:32px 0;color:var(--text-muted);font-size:14px;">
|
|
338
|
+
Need founder help? Do not buy a blind diagnostic from a pricing table.
|
|
339
|
+
<a href="/?utm_source=pricing&utm_medium=scope_first&utm_campaign=enterprise_intake&cta_id=pricing_scope_first&cta_placement=pricing_note&plan_id=enterprise#workflow-sprint-intake" data-pricing-cta data-cta-id="pricing_scope_first" data-cta-placement="pricing_note" data-tier="enterprise" data-plan-id="enterprise" data-price="0" style="color:var(--cyan);text-decoration:none;font-weight:600;" onclick="try{posthog.capture('pricing_cta_click',{cta:'scope_first',tier:'enterprise',price:0})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'scope_first',tier:'enterprise'}})}catch(_){}">Send the workflow first</a> — then we scope the smallest paid rollout that can prove one repeated failure is blocked.
|
|
340
|
+
</div>
|
|
341
|
+
</section>
|
|
342
|
+
|
|
343
|
+
<section class="faq">
|
|
344
|
+
<div class="container">
|
|
345
|
+
<h2>Questions</h2>
|
|
346
|
+
<div class="faq-list">
|
|
347
|
+
<div class="faq-item">
|
|
348
|
+
<div class="faq-q">What does Pro add over the free CLI?</div>
|
|
349
|
+
<div class="faq-a">Free gives you 2 captures/day and 3 active rules, running entirely on your machine. Pro is the hosted layer: unlimited captures, unlimited rules, lesson sync across machines, a dashboard without self-hosting, managed adapter updates, and DPO export. You're paying for infrastructure we run, not features we hide.</div>
|
|
350
|
+
</div>
|
|
351
|
+
<div class="faq-item">
|
|
352
|
+
<div class="faq-q">Why not just use an enterprise AI control plane?</div>
|
|
353
|
+
<div class="faq-a">Enterprise control planes govern agents from a server-side gateway, sold to platform teams on a Fortune-500 timeline. ThumbGate runs local-first, in the PreToolUse hook on your machine, and ships enforcement for the coding agents developers actually use today — Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode — with an <code>npm install</code> and minutes to value, not a procurement cycle.</div>
|
|
354
|
+
</div>
|
|
355
|
+
<div class="faq-item">
|
|
356
|
+
<div class="faq-q">Does ThumbGate send my code to the cloud?</div>
|
|
357
|
+
<div class="faq-a">No. The CLI is local-first and no source code leaves your machine. Pro and Enterprise add hosted sync for dashboards and shared lessons, but your code stays local.</div>
|
|
358
|
+
</div>
|
|
359
|
+
<div class="faq-item">
|
|
360
|
+
<div class="faq-q">When should I pick Enterprise over Pro?</div>
|
|
361
|
+
<div class="faq-a">When one engineer's correction should protect the whole team. Enterprise shares the lesson database across the org so a fix in one repo prevents the same mistake in every repo.</div>
|
|
362
|
+
</div>
|
|
363
|
+
<div class="faq-item">
|
|
364
|
+
<div class="faq-q">Can I cancel anytime?</div>
|
|
365
|
+
<div class="faq-a">Yes. Pro and Enterprise are month-to-month with a 7-day refund window on the first charge. Cancel from the billing portal and your subscription ends at the period close.</div>
|
|
366
|
+
</div>
|
|
367
|
+
<div class="faq-item">
|
|
368
|
+
<div class="faq-q">What happens if I stop paying?</div>
|
|
369
|
+
<div class="faq-a">You keep the free CLI with 5-rule cap. Your existing rules and captures stay on your machine. You lose dashboard access, lesson search, exports, and auto-connect.</div>
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
373
|
+
</section>
|
|
374
|
+
|
|
375
|
+
<footer>
|
|
376
|
+
<div class="container">
|
|
377
|
+
<div class="footer-links">
|
|
378
|
+
<a href="/">Home</a>
|
|
379
|
+
<a href="/guide">Guide</a>
|
|
380
|
+
<a href="/support">Support</a>
|
|
381
|
+
<a href="/privacy">Privacy</a>
|
|
382
|
+
<a href="/terms">Terms</a>
|
|
383
|
+
</div>
|
|
384
|
+
<span class="footer-copy">One source of truth for ThumbGate pricing. Numbers here override anything stale elsewhere.</span>
|
|
385
|
+
</div>
|
|
386
|
+
</footer>
|
|
387
|
+
|
|
388
|
+
<script>
|
|
389
|
+
document.querySelectorAll('.faq-q').forEach(function(q) {
|
|
390
|
+
q.addEventListener('click', function() {
|
|
391
|
+
this.parentElement.classList.toggle('open');
|
|
392
|
+
});
|
|
393
|
+
});
|
|
394
|
+
</script>
|
|
395
|
+
<script>
|
|
396
|
+
window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) };
|
|
397
|
+
</script>
|
|
398
|
+
</body>
|
|
399
|
+
</html>
|
package/public/pro.html
CHANGED
|
@@ -11,11 +11,12 @@ __GOOGLE_SITE_VERIFICATION_META__
|
|
|
11
11
|
<meta property="og:type" content="website">
|
|
12
12
|
<meta property="og:url" content="__APP_ORIGIN__/pro">
|
|
13
13
|
<link rel="canonical" href="__APP_ORIGIN__/pro">
|
|
14
|
+
<link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
|
|
14
15
|
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
15
16
|
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg">
|
|
16
17
|
<meta property="og:image" content="/og.png">
|
|
17
18
|
|
|
18
|
-
<script defer data-domain="thumbgate
|
|
19
|
+
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
|
|
19
20
|
__GA_BOOTSTRAP__
|
|
20
21
|
|
|
21
22
|
<script>
|
|
@@ -36,7 +37,7 @@ __GA_BOOTSTRAP__
|
|
|
36
37
|
<script type="application/ld+json">
|
|
37
38
|
{
|
|
38
39
|
"@context": "https://schema.org",
|
|
39
|
-
"@type": "FAQPage", "mainEntity": [{ "@type": "Question", "name": "How is Pro different from the free install?", "acceptedAnswer": { "@type": "Answer", "text": "Free keeps local recall, checks, and MCP. Pro adds the personal dashboard, DPO export, auto-connect, and founder support." } }, { "@type": "Question", "name": "Does Pro require a cloud account?", "acceptedAnswer": { "@type": "Answer", "text": "No. Pro stays local-first;
|
|
40
|
+
"@type": "FAQPage", "mainEntity": [{ "@type": "Question", "name": "How is Pro different from the free install?", "acceptedAnswer": { "@type": "Answer", "text": "Free keeps local recall, checks, and MCP. Pro adds the personal dashboard, DPO export, auto-connect, and founder support." } }, { "@type": "Question", "name": "Does Pro require a cloud account?", "acceptedAnswer": { "@type": "Answer", "text": "No. Pro stays local-first; Enterprise is the hosted rollout lane for shared lessons, org visibility, and reviews." } }, { "@type": "Question", "name": "What happens after checkout?", "acceptedAnswer": { "@type": "Answer", "text": "You activate Pro, connect the local dashboard, and inspect blocked actions, lessons, and exports." } }, { "@type": "Question", "name": "When should I choose Enterprise instead of Pro?", "acceptedAnswer": { "@type": "Answer", "text": "Choose Enterprise when one correction needs to protect multiple developers or agents across shared repositories." } }]
|
|
40
41
|
}
|
|
41
42
|
</script>
|
|
42
43
|
|
|
@@ -711,7 +712,7 @@ __GA_BOOTSTRAP__
|
|
|
711
712
|
<body>
|
|
712
713
|
<nav>
|
|
713
714
|
<div class="container">
|
|
714
|
-
<a href="/" class="nav-logo"><img src="/assets/brand/thumbgate-mark-inline.svg" alt="ThumbGate" class="logo-mark" width="28" height="28"><span class="logo-text">ThumbGate Pro</span></a>
|
|
715
|
+
<a href="/" class="nav-logo"><img src="/assets/brand/thumbgate-mark-inline-v3.svg" alt="ThumbGate" class="logo-mark" width="28" height="28"><span class="logo-text">ThumbGate Pro</span></a>
|
|
715
716
|
<div class="nav-links">
|
|
716
717
|
<a href="#why-pay">Why Pro</a>
|
|
717
718
|
<a href="#proof">Proof</a>
|
|
@@ -730,7 +731,7 @@ __GA_BOOTSTRAP__
|
|
|
730
731
|
<h1>Buy the operator loop that proves your AI agent stopped repeating the mistake.</h1>
|
|
731
732
|
<p style="font-size:13px;opacity:0.8;margin-bottom:0.5rem;">Updated: <time datetime="2026-04-20">2026-04-20</time> · by <a href="https://github.com/IgorGanapolsky" style="color:inherit;">Igor Ganapolsky</a></p>
|
|
732
733
|
<p>ThumbGate Pro is for one operator who already hit a repeated AI-agent failure and now needs proof: what was blocked, why it was blocked, and what changed before the next risky run.</p>
|
|
733
|
-
<p>Start Pro when you want the local dashboard, DPO export, and a single proof lane for the repeated mistake you need to stop.
|
|
734
|
+
<p>Start Pro when you want the local dashboard, DPO export, and a single proof lane for the repeated mistake you need to stop. Enterprise diagnostics and custom services are handled through intake, not this buyer path.</p>
|
|
734
735
|
<div class="hero-proof">
|
|
735
736
|
<div class="proof-pill">Personal local dashboard</div>
|
|
736
737
|
<div class="proof-pill">DPO export from real corrections</div>
|
|
@@ -815,6 +816,28 @@ __GA_BOOTSTRAP__
|
|
|
815
816
|
</div>
|
|
816
817
|
</section>
|
|
817
818
|
|
|
819
|
+
<section class="section" id="deterministic-loop">
|
|
820
|
+
<div class="container">
|
|
821
|
+
<div class="section-label">Why Pro now</div>
|
|
822
|
+
<h2 class="section-title">Black-box thumbs do not prove prevention. Pro gives the operator an audit loop.</h2>
|
|
823
|
+
<p class="section-intro">Native rating buttons can tell a vendor that an answer felt wrong. ThumbGate Pro gives you the operational record: the correction, the lesson, the rule, the blocked tool call, and the export path.</p>
|
|
824
|
+
<div class="grid-3">
|
|
825
|
+
<div class="feature-card">
|
|
826
|
+
<h3>Inspectable memory</h3>
|
|
827
|
+
<p>Search the exact lesson that came from a thumbs-down and see whether it is still active, warning-only, or blocking.</p>
|
|
828
|
+
</div>
|
|
829
|
+
<div class="feature-card">
|
|
830
|
+
<h3>Deterministic checks</h3>
|
|
831
|
+
<p>The enforcement layer evaluates tool name, arguments, working directory, command shape, confidence, and required evidence before the action runs.</p>
|
|
832
|
+
</div>
|
|
833
|
+
<div class="feature-card">
|
|
834
|
+
<h3>Exportable proof</h3>
|
|
835
|
+
<p>Take the same correction history into JSONL, DPO export, review packets, and team rollout conversations instead of trusting hidden memory.</p>
|
|
836
|
+
</div>
|
|
837
|
+
</div>
|
|
838
|
+
</div>
|
|
839
|
+
</section>
|
|
840
|
+
|
|
818
841
|
<section class="section" id="why-pay">
|
|
819
842
|
<div class="container">
|
|
820
843
|
<div class="section-label">Why operators pay</div>
|
|
@@ -901,11 +924,11 @@ __GA_BOOTSTRAP__
|
|
|
901
924
|
|
|
902
925
|
<div class="pricing-sidebar">
|
|
903
926
|
<div class="team-card">
|
|
904
|
-
<div class="section-label" style="text-align:left;margin-bottom:8px;">When
|
|
927
|
+
<div class="section-label" style="text-align:left;margin-bottom:8px;">When Enterprise is better</div>
|
|
905
928
|
<h3>Need shared enforcement?</h3>
|
|
906
|
-
<p>Choose
|
|
929
|
+
<p>Choose Enterprise when one correction must protect multiple developers or agents across shared repositories, CI, approval policies, and audit trails. Enterprise is custom pricing, scoped after intake.</p>
|
|
907
930
|
<div class="hero-actions" style="margin-top:18px;">
|
|
908
|
-
<a class="btn-secondary" href="/#workflow-sprint-intake">Book
|
|
931
|
+
<a class="btn-secondary" href="/#workflow-sprint-intake">Book an Enterprise Pilot Call</a>
|
|
909
932
|
</div>
|
|
910
933
|
</div>
|
|
911
934
|
<div class="team-card">
|
|
@@ -928,15 +951,15 @@ __GA_BOOTSTRAP__
|
|
|
928
951
|
</div>
|
|
929
952
|
<div class="faq-item">
|
|
930
953
|
<button class="faq-q" type="button" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)" aria-expanded="false">Does Pro require a cloud account?</button>
|
|
931
|
-
<div class="faq-a">No. Pro is still local-first for the individual operator lane.
|
|
954
|
+
<div class="faq-a">No. Pro is still local-first for the individual operator lane. Enterprise is the hosted rollout lane for shared lessons, org visibility, and hosted review views.</div>
|
|
932
955
|
</div>
|
|
933
956
|
<div class="faq-item">
|
|
934
957
|
<button class="faq-q" type="button" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)" aria-expanded="false">What happens after checkout?</button>
|
|
935
958
|
<div class="faq-a">You activate Pro, connect the personal local dashboard, and your running agents can appear automatically so you can inspect blocked actions, active lessons, and exportable DPO pairs without adding a separate cloud dashboard dependency.</div>
|
|
936
959
|
</div>
|
|
937
960
|
<div class="faq-item">
|
|
938
|
-
<button class="faq-q" type="button" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)" aria-expanded="false">When should I choose
|
|
939
|
-
<div class="faq-a">Choose
|
|
961
|
+
<button class="faq-q" type="button" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)" aria-expanded="false">When should I choose Enterprise instead of Pro?</button>
|
|
962
|
+
<div class="faq-a">Choose Enterprise when one thumbs-down should protect multiple people or agents across shared repositories, or when you need shared hosted lessons, org dashboard visibility, and a workflow hardening pilot with rollout review views.</div>
|
|
940
963
|
</div>
|
|
941
964
|
</div>
|
|
942
965
|
</div>
|
|
@@ -964,7 +987,7 @@ __GA_BOOTSTRAP__
|
|
|
964
987
|
<a href="__VERIFICATION_URL__" target="_blank" rel="noopener">Verification Evidence</a>
|
|
965
988
|
<a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
|
|
966
989
|
</div>
|
|
967
|
-
<div class="footer-copy">ThumbGate Pro for individual operators.
|
|
990
|
+
<div class="footer-copy">ThumbGate Pro for individual operators. Enterprise stays intake-first.</div>
|
|
968
991
|
</div>
|
|
969
992
|
</footer>
|
|
970
993
|
|