v1.7.0: piani Basic/Pro/Premium/Annual + quota giornaliera
Pricing model: subscription mensili (Basic 2.99 / Pro 5.99 / Premium 9.99) piu' Annual 49.90 one-time. Feature gating per piano (Basic = solo audio, Pro+ = tutto). Quota giornaliera (10/30/150) con reset mezzanotte Europe/Rome. Server: tabella daily_usage, endpoint /api/usage/consume e /status, webhook LS gestisce subscription_* events + mappatura variant_id -> plan via .env (LS_VARIANT_BASIC|PRO|PREMIUM|ANNUAL). Client: gating tab in sidebar in base ai features del piano, contatore "X/Y oggi" + bottone Upgrade, modal blocco con CTA verso landing.
This commit is contained in:
1 parent
bcd4f22b1e
commit
61459099f9
15 files changed
+1395
-108
No files matched your search
+9
-1
@@ -5,7 +5,7 @@ import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
VERSION = "v1.6.0"
|
||||
VERSION = "v1.7.0"
|
||||
|
||||
|
||||
APP_NAME = "MusicTools"
|
||||
@@ -77,6 +77,14 @@ DEFAULTS = {
|
||||
"license_activated_at": 0, # epoch della prima attivazione
|
||||
"last_validated_at": 0, # epoch dell'ultima revalidate online riuscita
|
||||
"device_id": "", # UUID generato al primo avvio
|
||||
# ---- Piano (snapshot dei claims JWT) ----
|
||||
"plan_code": "", # "basic" | "pro" | "premium" | "annual"
|
||||
"plan_name": "", # nome user-facing
|
||||
"plan_features": [], # ["audio", "video", "record", "metadata", "upgrade"]
|
||||
"plan_daily_limit": None, # None = unlimited (annual), altrimenti int
|
||||
"plan_is_subscription": False,
|
||||
"plan_expires_at": 0, # solo per annual one-time
|
||||
"plan_period_end": 0, # solo per subscription mensili
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user