From 53b6cd1c7c2dad043df74c65abf3d371300960e0 Mon Sep 17 00:00:00 2001 From: Bryan Fawcett Date: Tue, 13 Oct 2026 17:37:55 +0000 Subject: [PATCH] docs: after paying, a one-time claim link, never the key The checkout note on the extension page said the licence key is emailed. The licence server now emails a one-time claim link instead (72 hours, single use): the note says so, how to use it, how to get a new one, and how a school licence differs. tests/purchase.test.ts holds it to that. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01CoDNYz27iJ7o8PPztCzTpq --- CHANGELOG.md | 7 ++++ src/data/legal.ts | 2 +- src/pages/toddle-enhancement-extension.astro | 17 +++++--- tests/purchase.test.ts | 44 ++++++++++++++++++++ 4 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 tests/purchase.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 52ed713..04d6f01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,13 @@ numbers below were the site's earlier, hand-kept numbering and are retired; the ### Changed +- **After paying: a claim link, not a key.** The extension page's checkout + note now says the licence email carries a one-time link (never the key), + that it works once for 72 hours and a new one can be asked for, that + **Add it to Chrome** adds the licence with no key to copy, and that a + school licence's buyer sets it up through the Nyuchi console and Chrome + policy. Merge with the licence server's claim links + (nyuchi-licence-server, `claude/licence-onboarding`). - **0.10.0 is on the Chrome Web Store.** The Releases page shows it as on the store since 13 October 2026, and the test builds 0.9.9 and 0.9.10 open its notes. - **The Toddle Enhancement Extension 0.9.0 is on the Chrome Web Store**, published on 7 October 2026. The Releases page marks it "On the Chrome Web diff --git a/src/data/legal.ts b/src/data/legal.ts index fa11922..b7fb253 100644 --- a/src/data/legal.ts +++ b/src/data/legal.ts @@ -82,7 +82,7 @@ export const pricing = [ price: "US$5", period: "per year", who: "One teacher.", - /** Checkout. Buy Me a Coffee for now; the key is issued by email. */ + /** Checkout. Buy Me a Coffee for now; the licence arrives as a one-time claim link by email, never the key. */ buy: "https://buymeacoffee.com/bryany/e/581737", includes: [ "Every assessment tool expanded into per-criterion columns", diff --git a/src/pages/toddle-enhancement-extension.astro b/src/pages/toddle-enhancement-extension.astro index 5f69170..0169141 100644 --- a/src/pages/toddle-enhancement-extension.astro +++ b/src/pages/toddle-enhancement-extension.astro @@ -589,12 +589,17 @@ const schema = [

- Checkout is through Buy Me a Coffee, and your licence key is emailed to you - automatically, usually within a minute of paying. It is checked on your own machine, so activating it contacts - nothing and works offline — and one key covers your laptop and your classroom - desktop. It follows your Chrome account, so you - enter it once; Chrome's sync carries it, and it is never sent to us. While a key is entered, the extension checks at most once a day for cancelled keys, - sending nothing about you. + Checkout is through Buy Me a Coffee. Usually within a minute of paying, you get an + email with a one-time link to your licence, never the key itself. Open it in + Chrome, click Add it to Chrome, and the extension adds your licence: + there is no key to copy. The link works once, for 72 hours; if it runs out, open + it anyway and ask for a new one, which goes to the same address. A school + licence's link goes to whoever bought it, who sets it up for every teacher + through the Nyuchi console and Chrome policy. Once added, your licence is + checked on your own machine, so it works offline, and it follows your Chrome + account to your laptop and your classroom desktop; Chrome's sync carries it, and + it is never sent to us. While a licence is in use, the extension checks at most + once a day for cancelled keys, sending nothing about you.

Upgrading.{" "} diff --git a/tests/purchase.test.ts b/tests/purchase.test.ts new file mode 100644 index 0000000..ac728c3 --- /dev/null +++ b/tests/purchase.test.ts @@ -0,0 +1,44 @@ +/** + * What a buyer is told happens after paying. The licence server emails a + * one-time claim link, never the key (nyuchi-licence-server: src/claims.js, + * CLAIM_TTL_S = 72 hours), so the page must not promise a key by email. + */ +import { describe, expect, it } from "vite-plus/test"; +import { readFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); +const page = readFileSync( + join(root, "src/pages/toddle-enhancement-extension.astro"), + "utf8", +); +/* The paragraph under the plans, as one line of text. */ +const checkout = (() => { + const at = page.indexOf("Checkout is through Buy Me a Coffee."); + expect(at).toBeGreaterThan(-1); + return page + .slice(at, page.indexOf("

", at)) + .replace(/<[^>]+>/g, "") + .replace(/\s+/g, " "); +})(); + +describe("after paying", () => { + it("says the email carries a one-time link, never the key", () => { + expect(checkout).toContain( + "one-time link to your licence, never the key itself", + ); + expect(checkout).toContain("there is no key to copy"); + expect(page).not.toMatch(/licence key is emailed/); + }); + + it("says how long the link works, as the licence server does (72 hours)", () => { + expect(checkout).toContain("The link works once, for 72 hours"); + expect(checkout).toContain("ask for a new one"); + }); + + it("says how to use it, and how a school licence differs", () => { + expect(checkout).toContain("Add it to Chrome"); + expect(checkout).toContain("Nyuchi console and Chrome policy"); + }); +});