Nine wording fixes: - Hero lede: drop "Bitcoin payment via BTCPay" → "payment via BTCPay" (matches landing-page de-emphasis); split the dense one-paragraph lede into two. - Products: "price in sats" → "price (sats / USD / EUR)"; introduce the entitlements catalog concept. - Policies table: add is_recurring + renewal_period_days, marketing_bullets, hidden_entitlements. Fix "default slug is canonical" myth — multi-tier ladders (Basic / Pro / Max) are first-class and the buy page renders a tier picker for products with 2+ public policies. Note tier_rank + drag-and-drop ordering. Split "private policies" out as a paragraph. - Discounts: add set_price as a 4th kind. Note discount_currency on fixed-amount codes. Add multi-policy scope. Add featured / launch-special section (ribbon, auto-apply, pre-filled input). - Revocation: "v0.2 will ship recurring renewals" → past-tense. Recurring is shipped. - New "Operator tiers" section: explains Keysat self-licenses (Creator / Pro / Patron), notes caps are enforce-on-create (existing rows grandfathered), and lists four canonical sources for the live tier list (keysat.xyz, pricing.html, the public /v1/products/keysat/policies endpoint, the admin /v1/admin/tier endpoint). "As of this writing" framing for the current cap values so they don't go stale silently. - TOC: add #operator-tiers anchor. Pricing.html, install.html, integrate.html, wire-format.html, operate.html — not touched; this is the introduction page only. A separate pass should audit those too.
Keysat Docs
Operator-facing documentation for Keysat — the Bitcoin-native self-hosted software licensing service for StartOS.
This repo is a static HTML site. No build step. The deployed version lives at keysat.xyz/docs.
Pages
- index.html — Introduction. What Keysat is, why it exists, and the sovereignty thesis behind it.
- install.html — Operator setup walkthrough. Installing the .s9pk on StartOS, connecting BTCPay, creating your first product and policy, and sharing your buy URL.
- integrate.html — Wiring Keysat licensing into your own software. Code examples for the TypeScript, Python, and Rust SDKs; entitlement-gating patterns; offline verification.
- operate.html — Day-to-day operations. Managing licenses, suspending / revoking, search, audit log, discount codes, refund flows.
- wire-format.html — Specification of the signed license key format (LIC1 envelope, base32 alphabet, Ed25519 signature scheme). Useful for porting the SDK to a new language.
Local development
The site is self-contained — open any .html file in a browser, or serve
the directory with any static file server:
# Python
python3 -m http.server 8000
# or
npx serve .
Then visit http://localhost:8000.
Styling
All pages share docs.css. Brand assets live in assets/. The visual
language matches the rest of the Keysat surface (cream paper-textured
background, navy ink, gold accents, classical type — Manrope for display,
Inter for body, JetBrains Mono for code).
Contributing
Issues and pull requests welcome. Substantive changes — new sections, restructuring, factual corrections to the wire-format spec — are best discussed in an issue first.
License
MIT. See LICENSE.