|
|
|
@@ -1,6 +1,6 @@ |
|
|
|
# Captive Portal CMS — Casa della Scuola |
|
|
|
|
|
|
|
CMS per portali captive: gestione di card informative, gallerie, flip-book e contenuti kiosk a schermo intero, con un'area di amministrazione locale. Stack: Next.js 16 (App Router, Turbopack), React 19, TypeScript, Tailwind v4. Persistenza su file (nessun database). Pensato per girare su **server Ubuntu offline**. |
|
|
|
CMS per portali captive: gestione di card informative, gallerie, flip-book e contenuti kiosk a schermo intero, con un'area di amministrazione locale. Stack: Next.js 16 (App Router, Turbopack), React 19, TypeScript, Tailwind v4. Persistenza su file (nessun database). Pensato per girare su **server offline**. |
|
|
|
|
|
|
|
--- |
|
|
|
|
|
|
|
@@ -36,7 +36,7 @@ npm run build |
|
|
|
npm start |
|
|
|
``` |
|
|
|
|
|
|
|
> **Server offline:** la macchina di produzione non ha accesso a internet. NON eseguire `npm install` lì. Installa le dipendenze su una macchina con internet (stesso OS, Linux), poi copia l'intera cartella `node_modules` sul server insieme al progetto buildato. Su Ubuntu basta `npm run build` (se `node_modules` è presente) + `npm start`. |
|
|
|
> **Server offline:** la macchina di produzione non ha accesso a internet. NON eseguire `npm install` lì. Installa le dipendenze su una macchina con internet (stesso OS, Linux), poi copia l'intera cartella `node_modules` sul server insieme al progetto buildato. Sul server basta `npm run build` (se `node_modules` è presente) + `npm start`. |
|
|
|
|
|
|
|
--- |
|
|
|
|
|
|
|
@@ -132,6 +132,11 @@ Ogni campo compilabile dall'admin ha un limite (vedi [`TEXT_LIMITS`](#limiti-tes |
|
|
|
|
|
|
|
Gli URL (`actionUrl`) accettano solo gli schemi `http`, `https`, `mailto`, `tel`. Schemi come `javascript:` vengono rifiutati. |
|
|
|
|
|
|
|
### Caratteri non-ASCII (emoji, cirillico, CJK…) |
|
|
|
|
|
|
|
- **Nei campi di testo**: conservati integralmente (il salvataggio è UTF-8). Due avvertenze: (1) il conteggio caratteri usa le unità UTF-16, quindi un emoji "pesa" 2 o più posizioni del limite (es. `🎉` ne conta 11), mentre cirillico/CJK contano 1 ciascuno; (2) se il font scelto non ha i glifi (es. un font latino con testo cirillico), il browser fa fallback a un font di sistema o mostra quadratini □. |
|
|
|
- **Nei nomi dei file caricati**: i caratteri non-ASCII vengono rimossi dalla normalizzazione del nome (`città_🎉.jpg` → `…-citta.jpg`, `日本語.png` → `…-file.png`). Il file funziona sempre, ma il nome originale non-ASCII non viene preservato. Vedi [Sicurezza degli input → Nomi file](#sicurezza-degli-input). |
|
|
|
|
|
|
|
--- |
|
|
|
|
|
|
|
## Sicurezza degli input |
|
|
|
@@ -245,14 +250,11 @@ Sul server servono alcuni binari di sistema (richiamati direttamente, non via np |
|
|
|
| `zip` | Creazione backup / preset | Pulsante "Scarica backup" e "Salva preset" → `503` | |
|
|
|
| `unzip` | Ripristino backup / factory reset | Pulsanti di ripristino → `503` | |
|
|
|
|
|
|
|
Verifica su Ubuntu: |
|
|
|
Verifica su server: |
|
|
|
```bash |
|
|
|
which ffmpeg ffprobe zip unzip |
|
|
|
``` |
|
|
|
Se mancano: |
|
|
|
```bash |
|
|
|
sudo apt install ffmpeg zip unzip |
|
|
|
``` |
|
|
|
Se mancano, installali con il gestore pacchetti del sistema (i nomi dei pacchetti sono `ffmpeg`, `zip`, `unzip`). |
|
|
|
|
|
|
|
--- |
|
|
|
|
|
|
|
|