Licences and activation
One key, N websites, and exactly one thing gated — Publish. What an outage does, what moving domains does, and why your published site contains no check at all.
AstroCraft is sold in website seats: one key, and as many websites as your tier covers — 1 on Solo, 5 on Studio, 25 on Agency. The limit is enforced by Polar’s activation count, so the install past it is refused by Polar rather than by anything in the code. Nothing in the codebase knows which tier it holds.
Activate
Sign in as an admin, open Settings → Licence, paste the key from your Polar receipt and press Activate. That claims one of the key’s slots for this installation. If the key has no slots left, the screen says so rather than failing quietly.
The screen only ever shows you a masked display_key; the key itself is never handed back to a browser.
What the key gates
Publish, and nothing else.
Without a licence the CMS still signs in, edits, saves, commits, previews and serves. What stops is the button that runs your build command and pushes the branch — which you can always do from a terminal.
The check lives in the admin server, at exactly one call site. It is deliberately not in the middleware: a licence server that can lock an author out of their own CMS is the wrong trade, and an outage on our side must never read as a revocation on yours.
Your published site carries no check of any kind. It is your own Astro build, deployed by your own host. A lapsed key cannot take a customer’s website down, because there is nothing in the deployed artifact to lapse.
An answer is not a silence
This is the one distinction the licensing layer exists to get right.
- A confirmed licence is trusted for one day without asking again. A cached grant costs no network call at all.
- If Polar cannot be reached, publishing keeps working for fourteen days from the last confirmation.
- Only an actual answer — a key Polar has stopped granting — refuses straight away.
429 and 408 are 4xx by shape and silence by meaning, and are treated as silence. Recording either as a revocation would be permanent, which is the failure this rule exists to prevent.
Expiry is checked against the stored record before any network call, so an outage cannot rescue a key that has genuinely lapsed.
Moving hosts and domains is free
The activation belongs to the installation, not to the domain. Connecting a domain through Settings → Site does not invalidate it, and neither does moving the container to a different host.
To free a slot for a genuinely different site, press Deactivate on this screen first, which hands the activation back to the key.
If your updates lapse
Your licence is perpetual and includes twelve months of updates from purchase. After that you keep everything you have — including Publish — and simply stop receiving new versions. Nothing stops working.
Troubleshooting
Publish is refused and names the licence. Either no key is activated, the key has expired, or Polar answered that it is no longer granted. The screen distinguishes the three; an outage is not one of them, because an outage rides the fourteen-day grace.
Activate says there are no slots left. The key is at its tier’s activation limit. Deactivate an installation you no longer use, or move up a tier — the tier is a Polar dashboard setting and needs no deploy on your side.
Publish is refused and does not mention the licence. Then it is something else: a malformed entry blocking the push, a build failure, a rejected push, or the 60-second per-account cooldown. Review and publish lists every refusal and its next step.