Files
keysat-docs/pricing.html
T
Keysat 8e55b6ee8b Drop "What's coming" section now that v0.3 features have shipped
Recurring subscriptions and Zaprite payments — the two v0.3
features the section advertised as upcoming — both shipped in the
v0.2 line and gate on the recurring_billing / card_payments
entitlements as planned. Section copy was stale and confusing.
2026-05-11 17:48:50 -05:00

196 lines
7.5 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Keysat Docs — Pricing</title>
<link rel="icon" type="image/svg+xml" href="assets/favicon.svg">
<link rel="stylesheet" href="docs.css">
<style>
.tier-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:18px; margin:24px 0; }
@media (max-width:760px) { .tier-grid { grid-template-columns:1fr; } }
.tier-card {
background:var(--cream-50);
border:1px solid var(--border-1);
border-radius:12px;
padding:24px 22px;
display:flex; flex-direction:column;
}
.tier-card.featured {
border-color:var(--gold-500);
box-shadow:0 0 0 3px rgba(191,160,104,0.10), 0 8px 16px rgba(14,31,51,0.10);
position:relative;
}
.tier-card .badge {
position:absolute; top:-10px; left:50%; transform:translateX(-50%);
background:var(--gold-500); color:var(--navy-950);
font-size:10px; font-weight:700; letter-spacing:0.16em; text-transform:uppercase;
padding:4px 10px; border-radius:999px;
}
.tier-card h3 {
font-family:var(--font-display); font-size:22px; font-weight:600;
color:var(--navy-950); margin:0 0 6px; letter-spacing:-0.01em;
}
.tier-card .price {
font-family:var(--font-display); font-size:28px; font-weight:700;
color:var(--navy-950); letter-spacing:-0.02em; line-height:1.1;
margin-bottom:4px;
}
.tier-card .price .unit {
font-family:var(--font-body); font-size:13px; font-weight:500; color:var(--ink-500);
margin-left:6px;
}
.tier-card .frequency { font-size:12px; color:var(--ink-500); margin-bottom:18px; }
.tier-card ul {
list-style:none; padding:0; margin:0 0 22px;
font-size:14px; line-height:1.55; color:var(--ink-700);
flex:1;
}
.tier-card li { padding:4px 0 4px 22px; position:relative; }
.tier-card li::before {
content:'\2713'; position:absolute; left:0; top:5px;
color:var(--gold-700); font-weight:700;
}
.tier-card .cta {
display:inline-block; text-align:center;
padding:10px 16px;
background:var(--navy-800); color:var(--cream-50);
font-weight:600; font-size:14px;
border-radius:8px; text-decoration:none;
}
.tier-card .cta.secondary {
background:transparent; color:var(--navy-800);
border:1px solid var(--border-2);
}
.note {
background:var(--cream-100); border:1px solid var(--border-1);
border-radius:10px; padding:16px 18px; margin:24px 0;
font-size:14px; line-height:1.55;
}
</style>
</head>
<body>
<div class="topnav">
<a href="https://keysat.xyz" class="brand" title="Back to keysat.xyz"><img src="assets/keysat-mark.svg" alt=""><span>Keysat</span></a>
<span class="docs-tag">Docs</span>
</div>
<div class="layout">
<aside class="side">
<a href="#overview">Overview</a>
<a href="#tiers">The three tiers</a>
<a href="#what-counts">What the caps count</a>
<a href="#changing-tiers">Switching tiers</a>
<a href="#unlicensed">Running unlicensed</a>
</aside>
<main class="main">
<h1 id="overview">Pricing</h1>
<p class="lede">
Keysat dogfoods its own licensing — the Keysat daemon is itself licensed by a Keysat
instance running at <a href="https://licensing.keysat.xyz">licensing.keysat.xyz</a>.
The same primitive operators use to gate features in their own software gates a few
Keysat features behind paid tiers. The <strong>free tier is genuinely useful</strong>
most hobbyist operators will never need to upgrade.
</p>
<div id="tiers" class="tier-grid">
<div class="tier-card">
<h3>Creator</h3>
<div class="price">21,000<span class="unit">sats</span></div>
<div class="frequency">one-time, perpetual</div>
<ul>
<li>Up to 5 products</li>
<li>Up to 5 policies per product</li>
<li>Up to 5 active discount codes</li>
<li>BTCPay payments (Bitcoin / Lightning)</li>
<li>One-time purchases</li>
<li>Self-host on Start9 (always)</li>
<li>Distributed via free codes — ask</li>
</ul>
<a class="cta secondary" href="https://licensing.keysat.xyz/buy/keysat?policy=creator">Get Creator</a>
</div>
<div class="tier-card featured">
<div class="badge">Most popular</div>
<h3>Pro</h3>
<div class="price">250,000<span class="unit">sats</span></div>
<div class="frequency">per year</div>
<ul>
<li>Unlimited products / policies / codes</li>
<li>Recurring subscriptions <em>(when shipped, v0.3)</em></li>
<li>Zaprite payments — accept BTC + cards <em>(when shipped, v0.3)</em></li>
<li>Multi-operator admin <em>(when shipped)</em></li>
<li>Everything in Creator</li>
</ul>
<a class="cta" href="https://licensing.keysat.xyz/buy/keysat?policy=pro">Upgrade to Pro</a>
</div>
<div class="tier-card">
<h3>Patron</h3>
<div class="price">500,000<span class="unit">sats</span></div>
<div class="frequency">per year</div>
<ul>
<li>Same features as Pro</li>
<li>"Patron" badge in your admin UI</li>
<li>Funds Keysat development</li>
<li>Honest upsell — no fake feature gate</li>
</ul>
<a class="cta secondary" href="https://licensing.keysat.xyz/buy/keysat?policy=patron">Become a Patron</a>
</div>
</div>
<div class="note">
<strong>Note on what's gated.</strong> Today the only enforced gates are the
capacity caps — number of products, policies, and active discount codes. Pro
will gate the new payment-provider features (recurring billing, Zaprite card
payments) when those ship in v0.3. Patron is functionally identical to Pro —
its tier exists for operators who want to fund development beyond what Pro
needs to stay in the green.
</div>
<h2 id="what-counts">What the caps count</h2>
<p>
All caps fire at <strong>create-time only</strong>. Once you're under the cap,
you're never retroactively kicked off. A Creator-tier operator who currently
has 5 products keeps all 5 if you ever lower the caps in the future. The cap
just stops them from creating a 6th.
</p>
<ul>
<li><strong>Products</strong>: counts every product row (active + inactive). Operators don't get to evade the cap by toggling old rows inactive.</li>
<li><strong>Policies per product</strong>: counts policies on a single product, regardless of public/active state.</li>
<li><strong>Active discount codes</strong>: counts only <code>active=true</code> codes. Disable old codes to free up slots without deleting them — disabled codes don't function but stay in the audit trail.</li>
</ul>
<h2 id="changing-tiers">Switching tiers</h2>
<p>
Buy a higher-tier license at <a href="https://licensing.keysat.xyz/buy/keysat">licensing.keysat.xyz/buy/keysat</a>,
then activate it via StartOS → Keysat → Actions → <em>Activate Keysat license</em>.
The daemon picks up the new entitlements on next request — no restart needed.
The persistent banner in your admin sidebar always shows your current tier
and the next-tier CTA.
</p>
<p>
<strong>Downgrading</strong>: drop your license file (or replace with a lower
tier). Existing rows stay; new ones are subject to the new caps. No data loss.
</p>
<h2 id="unlicensed">Running unlicensed</h2>
<p>
Keysat works without any license at all — you'll see "Unlicensed" in the
sidebar and get the same caps as a Creator-tier operator (5/5/5). The
license exists primarily so operators get a real "I bought it" experience
and so we can offer the upgrade path to Pro. Hobbyists can run Keysat
indefinitely without paying us a sat.
</p>
</main>
</div>
</body>
</html>