✨ New Features
8555451 - add licenseBinding table, migration 0013_licensing, and shared licensing types (PR #339 by @saltbo)
b9cea3e - licensing: v2.6 Z2 — Ed25519 verify + PUBLIC_KEYS + entitlement cache (PR #341 by @saltbo)
86fab77 - licensing: cloud client + binding API (pair, poll, refresh, disconnect) (PR #343 by @saltbo)
c05bfc7 - v2.6 Z3 — ProBadge, UpgradeHint, useEntitlement frontend primitives (PR #342 by @saltbo)
d24c388 - add Settings → Billing page with pairing modal and bound/unbound states (PR #344 by @saltbo)
29102e6 - v2.6 Z6 — 6h background entitlement refresh (PR #345 by @saltbo)
1cbe926 - gate open registration behind Pro feature (Z8) (PR #347 by @saltbo)
c86c773 - v2.6 Z7 white-label branding (logo, favicon, wordmark, hide footer) (PR #346 by @saltbo)
de5ff92 - gate team creation at 3 orgs for community plan (teams_unlimited required for 4th) (PR #348 by @saltbo)
3f2890c - retroactive gate — per-team storage quota Pro-only (Z10) (PR #349 by @saltbo)
04f9d93 - v2.6 Z11 — production public key, Docker cron docs, release notes (PR #350 by @saltbo)
fa943ca - replace license_binding table with system_options keys (commit by @saltbo)
79adf45 - add QR code and countdown timer to pairing modal (commit by @saltbo)
b179db9 - centralize Pro feature definitions into a single registry (commit by @saltbo)
fb3b15a - admin: redesign settings and rename auth to oauth (commit by @saltbo)
736d7c8 - admin: refine pro-gated settings UI (commit by @saltbo)
c4fc8c9 - admin: add site invitation signup flow (commit by @saltbo)
d7f1ceb - licensing: adjust free plan limits (commit by @saltbo)
bf83be3 - admin: add audit logs placeholder (commit by @saltbo)
ec9cc0b - admin: add announcement placeholder (commit by @saltbo)
d75d7e5 - email: add cloudflare worker mail service toggle (commit by @saltbo)
f0e7af2 - licensing: redesign Pro license binding (commit by @saltbo)
57cc834 - share: redesign access page preview (commit by @saltbo)
4537bfa - preview: add microsoft office viewer (commit by @saltbo)
c532f28 - preview: improve file preview controls (commit by @saltbo)
8b67eec - upload: add multi-file upload progress queue (commit by @saltbo)
3321ac9 - music: add music player component and integration (commit by @saltbo)
6314717 - announcements: add site announcement management (commit by @saltbo)
8f4d55d - show oauth provider icons (commit by @saltbo)
7d81ef2 - implement admin audit logs (PR #355 by @saltbo)
1b734c0 - expand audit event coverage across all state-changing operations (PR #357 by @saltbo)
cce398a - admin: streamline overview dashboard (commit by @saltbo)
41877d3 - add quota store backend (PR #361 by @saltbo)
8a185c4 - add quota store UI (PR #363 by @saltbo)
5eac0f4 - branding: add pro theme settings (PR #362 by @saltbo)
2363ca1 - manage quota store redemption codes (commit by @saltbo)
ec832b0 - storage: refine storage plan experience (commit by @saltbo)
3a88c17 - add monthly traffic quotas (commit by @saltbo)
df2e2a8 - manage Cloud storage packages (commit by @saltbo)
bf0bf99 - separate storage code revoke and delete (commit by @saltbo)
be58015 - quota-store: support store reversal delivery (commit by @saltbo)
9cabe3c - align Storage Plans with combined package model (commit by @saltbo)
bf8a4f5 - add quota entitlements (PR #383 by @saltbo)
52a8dc4 - clarify storage plans and traffic metering UI (PR #385 by @saltbo)
25416a5 - quota: support plan and extra entitlement quotas (commit by @saltbo)
58d94c3 - cloud-store: accept opaque store deliveries (commit by @saltbo)
0b2e7d4 - store: support subscription and fixed quota packages (commit by @saltbo)
1ebc46f - store: manage workspace subscription plans (commit by @saltbo)
25c4a3c - billing: configure traffic overage price on plans (commit by @saltbo)
ae3f368 - billing: configure per-currency metered plan pricing (commit by @saltbo)
46cacc0 - storage: redesign plan catalog (commit by @saltbo)
0f0ea65 - storage: allow metered traffic overage (commit by @saltbo)
73a592c - pro: tighten gates and unify upgrade prompts (commit by @saltbo)
🐛 Bug Fixes
76645d4 - align licensing client with zpan-cloud API contract (commit by @saltbo)
134d325 - update cloud public key for production keypair (commit by @saltbo)
784b54a - move billing page from user settings to admin panel (commit by @saltbo)
7cb8560 - remove QR code, keep countdown timer in pairing modal (commit by @saltbo)
45b623e - reject invalid cloud refresh certificates (commit by @saltbo)
4872f97 - align licensing pairing with cloud certificates (commit by @saltbo)
8fcd677 - admin: reorder users page actions (commit by @saltbo)
2657724 - e2e: stabilize admin and site invitation flows (commit by @saltbo)
115aa4a - test: correct teams upgrade hint scenario (commit by @saltbo)
7b9206f - test: stabilize cloudflare storages coverage (commit by @saltbo)
69bc492 - cf: remove email sender allowlist (commit by @saltbo)
d28dbe7 - email: require explicit provider selection (commit by @saltbo)
7c7ab03 - files: improve grid file icons (commit by @saltbo)
54d9d6a - e2e: prevent music popover from blocking CI (commit by @saltbo)
ad4bff0 - announcements: describe announcement dialogs (commit by @saltbo)
fecff6d - announcements: use full markdown editor (commit by @saltbo)
65b0c50 - announcements: simplify publishing controls (commit by @saltbo)
95254c1 - announcements: align pinned form field (commit by @saltbo)
ff5ef9b - announcements: highlight pinned items (commit by @saltbo)
4518507 - admin: align settings actions and user pagination (commit by @saltbo)
db166f3 - admin: support quota units (commit by @saltbo)
e15334e - admin: show user quota and avatars (commit by @saltbo)
13ff831 - admin: prevent user table overflow (commit by @saltbo)
5632cbb - use pro binding auth for quota store (PR #367 by @saltbo)
da62c9e - enforce monthly traffic on download URL issuance (commit by @saltbo)
9908953 - drop local quota store package table (commit by @saltbo)
88f6e22 - traffic: sync cloud usage in background (commit by @saltbo)
3363c4e - storage: distinguish product cards (commit by @saltbo)
7cfe929 - store: use unified delivery webhook route (commit by @saltbo)
0c36b73 - store: avoid d1 transaction for cloud webhooks (commit by @saltbo)
5830da0 - store: detect d1 webhook conflicts (commit by @saltbo)
4a22044 - store: use d1 batch for webhook transaction (commit by @saltbo)
b6c20d7 - db: wrap multi-write flows in transactions (commit by @saltbo)
14a0723 - cloud: keep staging e2e licenses isolated (commit by @saltbo)
b9386e1 - cloud: unbind license through cloud first (commit by @saltbo)
d9d17e7 - billing: avoid premature pairing expiry (commit by @saltbo)
d8139b1 - cloud: use billing store endpoints (commit by @saltbo)
07caccd - admin: keep pro badges and theme colors in sync (commit by @saltbo)
♻️ Refactors
faed8cb - admin: streamline admin navigation and licensing management (commit by @saltbo)
bf7c338 - site: centralize default site metadata (commit by @saltbo)
a4f9e3f - proxy quota store through cloud (commit by @saltbo)
11ab430 - quota-store: unify orders and gift cards (commit by @saltbo)
0365e50 - store: centralize database write transactions (commit by @saltbo)
bfc6978 - admin: redesign branding settings card (commit by @saltbo)
👷 Build System
🔧 Chores
Docker
docker pull ghcr.io/saltbo/zpan:v2.6.0