Landing + support: remove ~21 em-dashes across copy
Same pattern set used on the docs site (elaboration→period, list-intro→colon, tight clarification→comma). The decorative "— Certificate of License —" stamp ornament in the artwork section stays verbatim.
This commit is contained in:
+21
-21
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Keysat — Bitcoin-native self-hosted licensing service for software creators</title>
|
||||
<title>Keysat: Bitcoin-native self-hosted licensing service for software creators</title>
|
||||
<meta name="description" content="Keysat is a Bitcoin-native, self-hosted licensing service for software creators. Runs on Start9. Pays in Bitcoin or fiat. Verifies offline. You own the signing key, the customer list, and the payment rails.">
|
||||
<link rel="icon" type="image/svg+xml" href="assets/favicon.svg">
|
||||
|
||||
@@ -607,7 +607,7 @@ footer.site .bottom a { color:rgba(245,241,232,0.6); }
|
||||
<div class="eyebrow">Software licensing for independent creators</div>
|
||||
<h1>Self-hosted licensing for software creators.</h1>
|
||||
<p class="lede">
|
||||
Keysat is a self-hosted licensing server. Buyers pay you for the software you create, and their license can be verified offline. Your licensing key, customer list, and payment rails all live on your hardware — no SaaS, no middleman, no platform risk.
|
||||
Keysat is a self-hosted licensing server. Buyers pay you for the software you create, and their license can be verified offline. Your licensing key, customer list, and payment rails all live on your hardware. No SaaS, no middleman, no platform risk.
|
||||
</p>
|
||||
<div class="cta-row">
|
||||
<a class="btn primary lg" href="#install">Install Keysat <span class="arrow">→</span></a>
|
||||
@@ -669,7 +669,7 @@ footer.site .bottom a { color:rgba(245,241,232,0.6); }
|
||||
<div class="item">
|
||||
<div class="icon-wrap"><i data-lucide="ticket"></i></div>
|
||||
<h3>Sell however you want</h3><div class="accent-bar"></div>
|
||||
<p>One-time purchases for the whole app. Free / paid splits. Trials. Recurring renewals. Time-limited licenses, multi-seat licenses, comp keys for press. The licensing layer is a primitive — you decide the business model.</p>
|
||||
<p>One-time purchases for the whole app. Free / paid splits. Trials. Recurring renewals. Time-limited licenses, multi-seat licenses, comp keys for press. The licensing layer is a primitive. You decide the business model.</p>
|
||||
</div>
|
||||
<div class="item">
|
||||
<div class="icon-wrap"><i data-lucide="zap"></i></div>
|
||||
@@ -684,7 +684,7 @@ footer.site .bottom a { color:rgba(245,241,232,0.6); }
|
||||
<div class="item">
|
||||
<div class="icon-wrap"><i data-lucide="wrench"></i></div>
|
||||
<h3>SDKs in your language</h3><div class="accent-bar"></div>
|
||||
<p>Rust, TypeScript, Python, Go — wire-compatible offline verifiers. Five lines of code in your app and you're verifying real signatures.</p>
|
||||
<p>Rust, TypeScript, Python, Go: wire-compatible offline verifiers. Five lines of code in your app and you're verifying real signatures.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -724,7 +724,7 @@ footer.site .bottom a { color:rgba(245,241,232,0.6); }
|
||||
<p class="product-tag">Schedule C + 1099 reconciler for solo accountants. Replaces a $1,200/yr software stack with one focused tool.</p>
|
||||
</div>
|
||||
</div>
|
||||
<blockquote>“I worked with bloated tax software for twelve years. With AI I built one that fits how I actually think — in three months, on weekends. Now Keysat lets me sell it to the other solo CPAs who were stuck with the same bad tools.”</blockquote>
|
||||
<blockquote>“I worked with bloated tax software for twelve years. With AI I built one that fits how I actually think, in three months, on weekends. Now Keysat lets me sell it to the other solo CPAs who were stuck with the same bad tools.”</blockquote>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
@@ -750,7 +750,7 @@ footer.site .bottom a { color:rgba(245,241,232,0.6); }
|
||||
<p class="product-tag">RPE-based programming and autoregulation for one-on-one coaches. Built around how strength athletes actually train.</p>
|
||||
</div>
|
||||
</div>
|
||||
<blockquote>“I knew exactly what coaches needed because I was the coach. AI handled the engineering — I handled the design. Now Keysat lets me sell it to the other coaches who recognize how it should actually work.”</blockquote>
|
||||
<blockquote>“I knew exactly what coaches needed because I was the coach. AI handled the engineering. I handled the design. Now Keysat lets me sell it to the other coaches who recognize how it should actually work.”</blockquote>
|
||||
</div>
|
||||
</article>
|
||||
|
||||
@@ -789,7 +789,7 @@ footer.site .bottom a { color:rgba(245,241,232,0.6); }
|
||||
<button class="case-dot" data-target="1" aria-label="Show case 2"></button>
|
||||
<button class="case-dot" data-target="2" aria-label="Show case 3"></button>
|
||||
</div>
|
||||
<div class="footnote">Illustrative examples of the kinds of creators Keysat is built for. Real Keysat creators — come be one of them.</div>
|
||||
<div class="footnote">Illustrative examples of the kinds of creators Keysat is built for. Real Keysat creators. Come be one of them.</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -816,12 +816,12 @@ 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 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>
|
||||
<ul>
|
||||
<li>Wire-compatible across SDKs (TypeScript, Rust, Python, Go)</li>
|
||||
<li>Public key embedded at compile time</li>
|
||||
<li>Returns product, policy, expiry, entitlements</li>
|
||||
<li>Source-available — agents can read the verifier source directly</li>
|
||||
<li>Source-available: agents can read the verifier source directly</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="code-card">
|
||||
@@ -871,13 +871,13 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
|
||||
<div class="section-head">
|
||||
<span class="eyebrow">Agent-friendly</span>
|
||||
<h2>Built so you can hand operations to an AI agent.</h2>
|
||||
<p>Keysat issues, monetizes, and manages licenses through a clean self-service admin UI. It also exposes every operator action through a documented HTTP API with bounded-scope credentials — so if you'd rather have an agent do the day-to-day work, you can give it the keys safely.</p>
|
||||
<p>Keysat issues, monetizes, and manages licenses through a clean self-service admin UI. It also exposes every operator action through a documented HTTP API with bounded-scope credentials, so if you'd rather have an agent do the day-to-day work, you can give it the keys safely.</p>
|
||||
</div>
|
||||
<div class="agent-grid">
|
||||
<div class="install-card">
|
||||
<div class="cap">OpenAPI 3.1</div>
|
||||
<h3>Discovery built in</h3>
|
||||
<p><code>GET /v1/openapi.json</code> returns a curated, stable spec. Drop the URL into Claude (Code or Computer Use), an OpenAI Custom GPT, or Perplexity’s Comet agent browser — the agent learns the endpoints automatically.</p>
|
||||
<p><code>GET /v1/openapi.json</code> returns a curated, stable spec. Drop the URL into Claude (Code or Computer Use), an OpenAI Custom GPT, or Perplexity’s Comet agent browser. The agent learns the endpoints automatically.</p>
|
||||
</div>
|
||||
<div class="install-card">
|
||||
<div class="cap">Scoped API keys</div>
|
||||
@@ -909,7 +909,7 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
|
||||
offline). On load, `loadLiveTiers()` below fetches the master
|
||||
Keysat's product + policies and re-renders this grid with the
|
||||
live prices, marketing bullets, hidden-entitlement filtering, and
|
||||
any active launch-special featured discount applied — matching
|
||||
any active launch-special featured discount applied, matching
|
||||
what the buy page renders.
|
||||
-->
|
||||
<div class="tier-grid" id="tier-grid-live">
|
||||
@@ -929,11 +929,11 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
|
||||
<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>
|
||||
<p class="tier-pitch">For creators monetizing seriously — multiple products, subscriptions, both Bitcoin and card buyers.</p>
|
||||
<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>
|
||||
<li>Recurring subscriptions · trials, grace, auto-renew</li>
|
||||
<li>Zaprite payment gateway — cards, Apple Pay, bank transfers, plus Bitcoin</li>
|
||||
<li>Zaprite payment gateway: cards, Apple Pay, bank transfers, plus Bitcoin</li>
|
||||
<li>In-place tier upgrades (proration handled)</li>
|
||||
<li>Everything in Creator</li>
|
||||
</ul>
|
||||
@@ -1006,11 +1006,11 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
|
||||
</div>
|
||||
<div>
|
||||
<h3>What’s the difference between the three tiers?</h3>
|
||||
<p>Creator is free forever, capped at 5 products / 5 policies per product / 10 active discount codes — plenty for a solo creator selling one-time or perpetual licenses. Pro lifts every cap and unlocks recurring subscriptions plus the Zaprite payment gateway (cards, Apple Pay, bank transfers, in addition to Bitcoin), billed annually. Patron is everything in Pro, sold as a one-time perpetual license instead of an annual subscription, plus direct one-on-one support and a public supporter badge — you’re funding development. See the tier cards above for the full breakdown.</p>
|
||||
<p>Creator is free forever, capped at 5 products / 5 policies per product / 10 active discount codes, plenty for a solo creator selling one-time or perpetual licenses. Pro lifts every cap and unlocks recurring subscriptions plus the Zaprite payment gateway (cards, Apple Pay, bank transfers, in addition to Bitcoin), billed annually. Patron is everything in Pro, sold as a one-time perpetual license instead of an annual subscription, plus direct one-on-one support and a public supporter badge. You’re funding development. See the tier cards above for the full breakdown.</p>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Do I have to use Bitcoin?</h3>
|
||||
<p>BTCPay (Bitcoin / Lightning) is the default and available on every tier. On Pro or Patron you can additionally connect Zaprite, which adds card / Apple Pay / bank transfer / more — with payments still landing in your wallet. Pick whichever your buyers prefer; you can switch the active provider at any time.</p>
|
||||
<p>BTCPay (Bitcoin / Lightning) is the default and available on every tier. On Pro or Patron you can additionally connect Zaprite, which adds card / Apple Pay / bank transfer / more, with payments still landing in your wallet. Pick whichever your buyers prefer; you can switch the active provider at any time.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1085,7 +1085,7 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
|
||||
});
|
||||
});
|
||||
|
||||
// Case-study slider — auto-advance with pause on hover, dot indicators
|
||||
// Case-study slider: auto-advance with pause on hover, dot indicators
|
||||
(function() {
|
||||
const track = document.getElementById('case-track');
|
||||
const slider = document.getElementById('case-slider');
|
||||
@@ -1094,7 +1094,7 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
|
||||
|
||||
const slides = track.querySelectorAll('.case-slide');
|
||||
const SLIDE_COUNT = slides.length;
|
||||
const ADVANCE_MS = 9000; // ~9s per slide — long enough to read
|
||||
const ADVANCE_MS = 9000; // ~9s per slide (long enough to read)
|
||||
let current = 0;
|
||||
let timer = null;
|
||||
|
||||
@@ -1117,7 +1117,7 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
|
||||
// Pause on hover; resume on leave.
|
||||
slider.addEventListener('mouseenter', stop);
|
||||
slider.addEventListener('mouseleave', start);
|
||||
// Also pause when the tab isn't visible — saves CPU.
|
||||
// Also pause when the tab isn't visible (saves CPU).
|
||||
document.addEventListener('visibilitychange', () => {
|
||||
if (document.hidden) stop(); else start();
|
||||
});
|
||||
@@ -1138,7 +1138,7 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
|
||||
<!--
|
||||
Live tier-card render. Fetches the master Keysat's product + policies
|
||||
on page load and re-renders the #tier-grid-live grid with whatever
|
||||
the operator configured — prices, marketing bullets, hidden
|
||||
the operator configured: prices, marketing bullets, hidden
|
||||
entitlements, and any active featured (launch-special) discount.
|
||||
Mirrors the buy page's tier-picker treatment so the landing page
|
||||
and /buy/keysat tell exactly the same pricing story.
|
||||
@@ -1260,7 +1260,7 @@ fmt.<span class="f">Printf</span>(<span class="s">"licensed for %s, expires %s\n
|
||||
});
|
||||
card.appendChild(list);
|
||||
}
|
||||
// Buy CTA — navy pill that links to the master Keysat's buy page
|
||||
// Buy CTA. Navy pill that links to the master Keysat's buy page
|
||||
// with the right policy slug pre-selected. Free tier links to the
|
||||
// same page; it renders "Redeem license" automatically.
|
||||
const buyBtn = document.createElement('a');
|
||||
|
||||
Reference in New Issue
Block a user