Fix SDK snippets, tier-card fallback prices, and BTCPay-connect copy

This commit is contained in:
Grant
2026-06-17 15:24:55 -05:00
parent e24f6c1aab
commit b7eb9e0e4a
2 changed files with 13 additions and 13 deletions
+11 -11
View File
@@ -826,7 +826,7 @@ footer.site .bottom a { color:rgba(245,241,232,0.6); }
</div>
<ol class="flow">
<li class="step"><div class="num">01</div><h3>Install on your Start9</h3><p>One click from <code>registry.keysat.xyz</code> in the StartOS marketplace. (Sideload the <code>.s9pk</code> directly if you prefer.)</p></li>
<li class="step"><div class="num">02</div><h3>Connect BTCPay</h3><p>One click in the StartOS Actions tab. Authorize once on BTCPay's consent page; Keysat registers a webhook automatically.</p></li>
<li class="step"><div class="num">02</div><h3>Connect BTCPay</h3><p>In the admin UI, open Settings &rarr; Payment providers &rarr; Connect BTCPay. Authorize once on BTCPay's consent page; Keysat registers a webhook automatically.</p></li>
<li class="step"><div class="num">03</div><h3>Define products + policies</h3><p>Declare a product, set its price in sats, define a policy (duration, seat cap, trial, entitlements).</p></li>
<li class="step"><div class="num">04</div><h3>Embed your public key</h3><p>Copy your Keysat public key into your app. Add the SDK. Five lines of code verifies a signature at startup.</p></li>
<li class="step"><div class="num">05</div><h3>Share your purchase URL</h3><p>Buyers hit your public URL, pay for your software, and get a signed license that can be verified offline.</p></li>
@@ -840,7 +840,7 @@ footer.site .bottom a { color:rgba(245,241,232,0.6); }
<div class="pitch">
<span class="eyebrow" style="color:var(--gold-700); font-size:11.5px; font-weight:700; letter-spacing:0.18em; text-transform:uppercase;">For developers and AI agents</span>
<h3>Five lines, in the language you or your AI agents already write.</h3>
<p>Keysat licenses are Ed25519-signed and Crockford base32-encoded. Verification is pure-function: no network, no daemon, no shared state. Hand the docs to your coding agent and tell it to wire licensing into your software; the integration is small enough to fit in one prompt.</p>
<p>Keysat licenses are Ed25519-signed and base32-encoded (RFC 4648, no padding). Verification is pure-function: no network, no daemon, no shared state. Hand the docs to your coding agent and tell it to wire licensing into your software; the integration is small enough to fit in one prompt.</p>
<ul>
<li>Wire-compatible across SDKs (TypeScript, Rust, Python, Go)</li>
<li>Public key embedded at compile time</li>
@@ -863,9 +863,9 @@ footer.site .bottom a { color:rgba(245,241,232,0.6); }
)
<span class="k">const</span> ok = verifier.<span class="f">verify</span>(licenseKeyFromUser)
console.<span class="f">log</span>(<span class="s">'licensed:'</span>, ok.productId, ok.expires)</pre>
console.<span class="f">log</span>(<span class="s">'licensed:'</span>, ok.productId, ok.payload.expiresAt)</pre>
<pre class="code" id="code-rs" style="display:none"><span class="c">// Cargo.toml</span>
<span class="c">// licensing-client = "0.1"</span>
<span class="c">// keysat-licensing-client = "0.3"</span>
<span class="k">use</span> licensing_client::{<span class="f">Verifier</span>, <span class="f">PublicKeyPem</span>};
@@ -879,12 +879,12 @@ verifier = <span class="f">Verifier</span>(<span class="f">PublicKey</span>.<spa
ok = verifier.<span class="f">verify</span>(license_key_from_user)
<span class="k">print</span>(<span class="s">"licensed for"</span>, ok.product_id)</pre>
<pre class="code" id="code-go" style="display:none"><span class="k">import</span> keysat <span class="s">"github.com/keysat-xyz/licensing-client-go"</span>
<pre class="code" id="code-go" style="display:none"><span class="k">import</span> keysat <span class="s">"github.com/keysat-xyz/keysat-client-go"</span>
payload, err := keysat.<span class="f">ParseAndVerify</span>(licenseKey, ISSUER_PEM)
<span class="k">if</span> err != <span class="k">nil</span> { <span class="f">log</span>.<span class="f">Fatal</span>(err) }
fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n"</span>,
payload.ProductSlug, payload.ExpiresAt)</pre>
fmt.<span class="f">Printf</span>(<span class="s">"licensed for %x, expires %d\n"</span>,
payload.ProductID, payload.ExpiresAt)</pre>
</div>
</div>
</div>
@@ -957,7 +957,7 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
</div>
<div class="tier-card featured">
<div class="tier-cap gold">Pro</div>
<div class="tier-price"><span class="price-num">250k sats</span><span class="price-sub">/ year</span></div>
<div class="tier-price"><span class="price-num">100k sats</span><span class="price-sub">/ year</span></div>
<p class="tier-pitch">For creators monetizing seriously: multiple products, subscriptions, both Bitcoin and card buyers.</p>
<ul>
<li>Unlimited products, tiers, and codes</li>
@@ -969,7 +969,7 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
</div>
<div class="tier-card">
<div class="tier-cap">Patron</div>
<div class="tier-price"><span class="price-num">500k sats</span><span class="price-sub">/ year</span></div>
<div class="tier-price"><span class="price-num">250k sats</span><span class="price-sub">/ year</span></div>
<p class="tier-pitch">Perpetual license + direct one-on-one support, for creators who want Keysat to keep getting better.</p>
<ul>
<li>Everything in Pro</li>
@@ -1087,9 +1087,9 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
// Tab switching for code samples
const installCmds = {
ts: 'npm install @keysat/licensing-client',
rs: 'cargo add licensing-client',
rs: 'cargo add keysat-licensing-client',
py: 'pip install keysat-licensing-client',
go: 'go get github.com/keysat-xyz/licensing-client-go',
go: 'go get github.com/keysat-xyz/keysat-client-go',
};
document.querySelectorAll('.code-tabs button').forEach(btn => {
btn.addEventListener('click', () => {