diff --git a/README.md b/README.md index 397e92f..cdae82b 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@
- Self-hosted, Bitcoin-paid software-licensing service for Start9. + Bitcoin-native self-hosted licensing service for software creators. Runs on Start9.
> **About this README.** Keysat is a from-scratch service authored for diff --git a/assets/ABOUT.md b/assets/ABOUT.md index 3953012..8e83afd 100644 --- a/assets/ABOUT.md +++ b/assets/ABOUT.md @@ -1,6 +1,6 @@ # About Keysat -**Keysat** is a self-hosted, Bitcoin-paid software licensing server: every operator runs their own instance on their own hardware, so there is no central authority, no shared database, and no lock-in. You own the signing key, the customer records, and the payment rails. +**Keysat** is a Bitcoin-native, self-hosted licensing service for software creators: every operator runs their own instance on their own hardware, so there is no central authority, no shared database, and no lock-in. You own the signing key, the customer records, and the payment rails. After installing: diff --git a/licensing-service/Cargo.toml b/licensing-service/Cargo.toml index b553254..aa118cd 100644 --- a/licensing-service/Cargo.toml +++ b/licensing-service/Cargo.toml @@ -3,7 +3,7 @@ name = "keysat" version = "0.1.0" edition = "2021" rust-version = "1.75" -description = "Keysat — self-hosted Bitcoin-paid software licensing server for Start9" +description = "Keysat — Bitcoin-native self-hosted licensing service for software creators" license-file = "LICENSE" publish = false diff --git a/licensing-service/README.md b/licensing-service/README.md index c9ec601..e38240a 100644 --- a/licensing-service/README.md +++ b/licensing-service/README.md @@ -1,6 +1,6 @@ # Keysat -**Keysat** is a self-hosted Bitcoin-paid software licensing server, designed to run as a [Start9](https://start9.com) 0.4.0.x service alongside [BTCPay Server](https://btcpayserver.org). One instance can sell, issue, validate, and revoke licenses for any number of software products you own. +**Keysat** is a Bitcoin-native, self-hosted licensing service for software creators, designed to run as a [Start9](https://start9.com) 0.4.0.x service alongside [BTCPay Server](https://btcpayserver.org) (or [Zaprite](https://zaprite.com) for Bitcoin + cards). One instance can sell, issue, validate, and revoke licenses for any number of software products you own. > The repository directory is still called `licensing-service/` on disk for continuity with earlier revisions. The crate, the binary, the StartOS package id, and all user-visible strings use **Keysat**. diff --git a/startos/manifest/i18n.ts b/startos/manifest/i18n.ts index bcfdcda..4880369 100644 --- a/startos/manifest/i18n.ts +++ b/startos/manifest/i18n.ts @@ -2,15 +2,17 @@ // later. Only English is filled in here; add more locales as needed. export const short = { - en_US: 'Keysat — self-hosted Bitcoin-paid software license server.', + en_US: 'Bitcoin-native self-hosted licensing service for software creators.', } export const long = { - en_US: `Keysat lets you sell licenses to your own software products using -Bitcoin payments via BTCPay Server. Every instance runs on the operator's own -StartOS — there is no central authority. The service issues Ed25519-signed -license keys that downstream software can verify offline, with optional -expiry, entitlements, fingerprint binding, and per-seat activation caps. -Supports multiple products per instance and closed-source, open-core, and + en_US: `Keysat is a Bitcoin-native, self-hosted licensing service for +software creators. Sell licenses to your own software products with payments +via BTCPay Server (Bitcoin / Lightning) or Zaprite (Bitcoin + cards). Every +instance runs on the operator's own StartOS — there is no central authority. +The service issues Ed25519-signed license keys that downstream software can +verify offline, with optional expiry, entitlements, fingerprint binding, and +per-seat activation caps. Supports multiple products per instance, recurring +subscriptions, in-place tier upgrades, and closed-source, open-core, and open-source distribution models.`, } diff --git a/startos/versions/v0.2.0.ts b/startos/versions/v0.2.0.ts index 352b47e..0a93a46 100644 --- a/startos/versions/v0.2.0.ts +++ b/startos/versions/v0.2.0.ts @@ -58,6 +58,8 @@ const RELEASE_NOTES = [ // in RELEASE_NOTES above (the milestone). Subsequent revisions // append here. const ROUTINE_NOTES = [ + '0.2.0:7 — Marketing-copy alignment. Package short and long descriptions now read "Bitcoin-native self-hosted licensing service for software creators" — matches keysat.xyz and the new positioning. Long description also calls out Zaprite (Bitcoin + cards), recurring subscriptions, and tier upgrades, all of which shipped in earlier :N revisions but weren\'t reflected in the registry listing. Same change applied to the daemon Cargo.toml description, repo READMEs, and the in-StartOS About panel for consistency. No code changes; pure copy.', + '', '0.2.0:6 — **Recurring subs + trials + self-tier live refresh actually work now.** Major bug-and-UX-fix release driven by hands-on testing of v0.2.0:5. The recurring-sub feature shipped in :4 had a critical gap: buying a recurring policy issued a license but never created the corresponding subscription row, so the renewal worker never picked it up — purchases silently behaved like one-shots. The trial flow shipped with `trial_days` configurable in admin but the field had zero effect on the purchase path. And admin tier changes on the daemon\'s own license never propagated to the running daemon, making it impossible to test Creator-tier gates on the master Keysat. This release fixes all three plus a slate of UX papercuts found during testing.', '', '**Recurring purchases now create subscriptions.** `issue_license_for_invoice` calls `subscriptions::create_subscription` whenever the resolved policy has `is_recurring=1`. The Subscriptions tab populates correctly; the renewal worker sees the row; cancellation works. Idempotent against webhook re-delivery.', @@ -155,7 +157,7 @@ const ROUTINE_NOTES = [ ].join('\n\n') export const v0_2_0 = VersionInfo.of({ - version: '0.2.0:6', + version: '0.2.0:7', releaseNotes: { en_US: ROUTINE_NOTES }, // No on-disk transformation needed — v0.2.0:0 is a label change. // SQLite-level migrations live separately under