| @@ -253,7 +253,7 @@ Per avere uno stato di partenza noto su ogni macchina nuova, includere nel pacch | |||||
| Disponibile dall'admin in **Settings → Backup & Restore**. | Disponibile dall'admin in **Settings → Backup & Restore**. | ||||
| ### Dall'interfaccia | ### Dall'interfaccia | ||||
| - **⬇ Save backup (ZIP)** — scarica `interceptop-backup-YYYYMMDD-hhmmss.zip` con card, configurazione, media e font (esclude i file temporanei). | |||||
| - **⬇ Save backup (ZIP)** — scarica `interceptor-backup-YYYYMMDD-hhmmss.zip` con card, configurazione, media e font (esclude i file temporanei). | |||||
| - **⤴ Restore from ZIP** — carica uno zip; dopo conferma sovrascrive lo stato attuale e ricarica la pagina. La cartella `data/` precedente viene conservata come `data.bak-<timestamp>/` come rete di sicurezza. | - **⤴ Restore from ZIP** — carica uno zip; dopo conferma sovrascrive lo stato attuale e ricarica la pagina. La cartella `data/` precedente viene conservata come `data.bak-<timestamp>/` come rete di sicurezza. | ||||
| ### Da riga di comando (Linux) | ### Da riga di comando (Linux) | ||||
| @@ -967,7 +967,7 @@ export default function AdminDashboard() { | |||||
| <div className="mt-10 pt-6 border-t border-gray-200"> | <div className="mt-10 pt-6 border-t border-gray-200"> | ||||
| <h3 className="text-sm font-bold uppercase tracking-wider text-gray-600 mb-3">Backup & Restore</h3> | <h3 className="text-sm font-bold uppercase tracking-wider text-gray-600 mb-3">Backup & Restore</h3> | ||||
| <p className="text-xs text-gray-500 mb-4"> | <p className="text-xs text-gray-500 mb-4"> | ||||
| The backup contains cards, portal configuration, media (images, videos, PDFs), and uploaded fonts. Restoring overwrites the current state. Clicking the “Save backup (ZIP)” button saves the Cards structure as <code>interceptop-backup-YYYYMMDD-hhmmss.zip</code>. | |||||
| The backup contains cards, portal configuration, media (images, videos, PDFs), and uploaded fonts. Restoring overwrites the current state. Clicking the “Save backup (ZIP)” button saves the Cards structure as <code>interceptor-backup-YYYYMMDD-hhmmss.zip</code>. | |||||
| </p> | </p> | ||||
| <div className="flex flex-wrap gap-3"> | <div className="flex flex-wrap gap-3"> | ||||
| <button | <button | ||||
| @@ -52,7 +52,7 @@ export async function GET() { | |||||
| return new Response(stream, { | return new Response(stream, { | ||||
| headers: { | headers: { | ||||
| 'Content-Type': 'application/zip', | 'Content-Type': 'application/zip', | ||||
| 'Content-Disposition': `attachment; filename="interceptop-backup-${timestamp()}.zip"`, | |||||
| 'Content-Disposition': `attachment; filename="interceptor-backup-${timestamp()}.zip"`, | |||||
| 'Cache-Control': 'no-store', | 'Cache-Control': 'no-store', | ||||
| }, | }, | ||||
| }); | }); | ||||