Client (Python/JS):
- core/license.py: attivazione, validazione, deactivate (HTTP client + JWT decode)
- core/config.py: campi license_* + URL endpoint + costanti grace/revalidate
- api/bridge.py: get_init_data ritorna license status; activate_license/
deactivate_license/revalidate_license/open_purchase_page
- check_update riscritto: punta a musictools.djluza.com/api/latest con
Bearer token, URL di download firmato dal server solo se licensed
- webui: schermata di attivazione bloccante all'avvio; sezione Licenza
in Impostazioni con verifica/disattiva
Backend (server/):
- Cloudflare Worker + D1 + R2 (vedi server/README.md)
- Endpoints: /api/license/{activate,validate,deactivate}, /api/latest,
/api/webhook/lemonsqueezy, /api/health
- JWT HS256 con rotazione; max 3 attivazioni/licenza
- Generazione licenze via webhook Lemon Squeezy + email Resend
- Schema D1 in migrations/0001_init.sql
Memory: nuova musictools-commercial-launch.md, rimosso pending obsoleto
NON taggare finche backend non e' deployato (l'app e' bloccante)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
52 lines
676 B
Plaintext
52 lines
676 B
Plaintext
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*$py.class
|
|
*.egg-info/
|
|
.venv/
|
|
venv/
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# IDE
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|
|
|
|
# PyInstaller
|
|
build/
|
|
dist/
|
|
*.spec
|
|
bundle_bin/
|
|
|
|
# App data — sensibili o specifici dell'utente
|
|
config.json
|
|
cookies.txt
|
|
MUSICA/
|
|
|
|
# Logs
|
|
*.log
|
|
.downloaded_tracks
|
|
.upgraded_tracks
|
|
|
|
# Claude
|
|
.claude/
|
|
Apri con claude-social.command
|
|
|
|
# Playlist personali (non vanno nel repo)
|
|
Vibes_List.txt
|
|
Beatport Top 100*.txt
|
|
PlayList_2026.txt
|
|
PlayList_da_scaricare.txt
|
|
|
|
# Asset intermedi rigenerabili (vedi assets/generate_icon.py)
|
|
assets/icon.iconset/
|
|
|
|
# Backend (server/) build artifacts e secrets
|
|
server/node_modules/
|
|
server/.wrangler/
|
|
server/.dev.vars
|
|
server/dist/
|