License & updates
Buyers purchase a license to use the template, not ownership. Tiers differ in seats, themes, and update windows — never in projects (unlimited on all tiers).
| Plan | Price | Seats | Themes | Updates |
|---|---|---|---|---|
| Solo | $129 one-time | 1 | any 3 | 1 year |
| Team & Studio | $249 one-time | up to 5 | any 10 | lifetime |
| Agency | $399 one-time | unlimited | all, present and future | lifetime |
Internal tier ids in the code and database stay stable regardless of the public names: Solo = starter, Team & Studio = pro, Agency = pro_plus.
Update windows
Section titled “Update windows”Updates arrive via the private GitHub repo — pull to receive. Solo covers one year from purchase; Team & Studio and Agency are lifetime, so their windows never close. After a Solo window closes, the buyer keeps everything already downloaded; new versions stop and repo access is removed until they extend.
Extension
Section titled “Extension”$49/yr updates extension applies to Solo licenses. Recurring add-on, same webhook flow. Team & Studio and Agency need no extension.
Upgrades
Section titled “Upgrades”Tier moves (Solo→Team & Studio, Solo→Agency, Team & Studio→Agency) pay the difference only, applied instantly to the existing license and repo access. See Payments for the difference-product mechanism.
Enforcement
Section titled “Enforcement”licenses.updates_until is the source of truth (YYYY-MM-DD or lifetime) and is written at fulfillment.
What actually happens, precisely:
- Payment writes the
ordersandlicensesrows and emails a license key. - The key is a real credential with a checkable status.
POST /api/license/verifywith{ "key": "…" }returnsactive,expired, or 404 — see Payments for the response shape.npm run license:verifycalls it and writes.startplate/license.json; it exits 1 on expired so CI can gate on it. - Expiry is evaluated at verification time, not by a scheduled job. A Solo license stops verifying the day its window closes with nothing having to run. There is no cron in this project and none is needed.
- Delivery of the private repo is still manual — you add the buyer after payment. Verification is how you and the buyer confirm entitlement; GitHub membership is what actually grants it.
- Nothing in your running app phones home. The template never blocks a request based on a license, so local development and offline work are unaffected.