Desk
Desk è un'app web open-source e white-label per la fatturazione elettronica italiana (FatturaPA/SDI). È un frontend pronto all'uso per la Invoicetronic API, disponibile come servizio cloud o self-hosted con Docker o binari nativi.
Non è necessario studiare la API o implementare nulla: con Desk puoi inviare e ricevere fatture elettroniche immediatamente. ISV e sviluppatori possono anche ospitarla autonomamente, applicare il proprio branding e offrire ai propri clienti un'interfaccia completa per la fatturazione — senza scrivere una sola riga di codice UI.
Prova Gratis Desk Cloud GitHub
Funzionalità
- Invio e ricezione fatture — ricerca full-text, filtri per data, paginazione server-side, download XML
- Dettaglio fattura — metadati e timeline completa degli stati SDI
- Upload — drag-and-drop multi-file
- Export — filtro per mese/trimestre/intervallo date, download in ZIP
- Gestione aziende — CRUD per le aziende collegate alla API key
- Dashboard — panoramica fatture recenti e contatori
- Localizzazione — italiano (default) e inglese
Dashboard vs Desk
Invoicetronic ha due app web con scopi diversi:
- Dashboard è per sviluppatori e amministratori. Serve a gestire le API key, configurare webhook, consultare i log delle chiamate API, passare da ambiente test a live, e gestire la sottoscrizione.
- Desk (questa pagina) è per chi lavora con le fatture ogni giorno. Serve a inviare, ricevere, cercare, caricare, esportare fatture e gestire le aziende — senza toccare codice o API.
| Dashboard | Desk | |
|---|---|---|
| Utente tipo | Sviluppatore / admin | Commercialista / operatore / ISV (uso interno o test dell'integrazione) |
| API key | Crea, ruota, gestisci | Ne usa una (configurata o per utente) |
| Webhook | Configura endpoint ed eventi | — |
| Log API | Consulta storico richieste/risposte | — |
| Modalità test/live | Cambio ambiente | Determinata dalla API key |
| Billing | Gestisci abbonamento e pagamento | — |
| Invio e ricezione fatture | — | Ricerca full-text, filtri, paginazione |
| Dettaglio fattura e timeline SDI | — | Storico completo degli stati |
| Upload fatture | — | Drag-and-drop multi-file |
| Export | — | Download ZIP per intervallo date |
| Gestione aziende | — | CRUD per aziende collegate |
| White-label / self-host | No | Sì (Docker, branding personalizzato) |
In sintesi: Dashboard è dove si configura l'infrastruttura; Desk è dove tu (o i tuoi clienti) lavorate con le fatture. La maggior parte degli utenti usa entrambe: Dashboard una volta in fase di setup, Desk tutti i giorni — eventualmente affiancato alle proprie integrazioni.
Ottenere una API key
Registrati su dashboard.invoicetronic.com e ottieni la tua API key. Desk funziona sia con API key sandbox che live — l'ambiente è determinato dalla chiave utilizzata. Inizia con una chiave sandbox per i test, poi passa alla live quando sei pronto. Consulta le pagine Sandbox e API Keys per i dettagli.
Prerequisiti per l'ambiente live
Per utilizzare Desk in ambiente live, il tuo account Invoicetronic deve soddisfare i prerequisiti della API (accreditamento presso SDI, ecc.). Consulta i Prerequisiti per l'ambiente live per la checklist completa. Per la sandbox non è richiesto alcun prerequisito — puoi iniziare a testare immediatamente.
Cloud o self-hosted
| Cloud | Self-hosted | |
|---|---|---|
| Setup | Registrati e inizia subito | Docker compose o binario nativo su un proprio server |
| Manutenzione | Zero — ci pensiamo noi | Manuale |
| Aggiornamenti | Automatici — ci pensiamo noi | Manuali (docker pull o download nuova release) |
| Personalizzazione | Limitata | Completa (CSS, logo, nome app) |
| Costo | Per postazione (vedi Prezzi) | Gratuito |
Cloud
Il modo più rapido per iniziare. Nessun Docker, nessun server, nessuna configurazione.
Provare Desk gratis con una chiave sandbox
Le chiavi sandbox (test) funzionano in Desk senza postazione: nessun limite di tempo, nessuna carta di credito. È il modo più semplice per valutare Desk senza impegno.
- Recupera la tua chiave test dalla sezione Chiavi della Dashboard
- Registrati su desk.invoicetronic.com e inserisci la chiave nel profilo
- Esplora tutte le funzionalità di Desk con dati di test — nessun documento reale viene inviato allo SDI
Usare Desk in produzione con una chiave live
- Abilita una postazione Desk dalla sezione Chiavi della Dashboard (clicca Abilita Desk su una chiave API live)
- Registrati su desk.invoicetronic.com e inserisci la tua chiave live nel profilo
- Inizia a lavorare con fatture reali
Ogni postazione è legata a una specifica chiave API live. Vedi Chiavi con restrizioni — Postazione Desk per i dettagli su acquisto, gestione e spostamento delle postazioni.
Self-hosted con Docker
Modalità standalone (singola API key, nessun login — ideale per reti interne):
# docker-compose.yml
services:
desk:
image: invoicetronic/desk
ports:
- "8080:8080"
volumes:
- ./desk.yml:/app/desk.yml
- ./logs:/app/logs # log giornalieri rotanti (vedi sezione Logging)
Crea la directory logs prima del primo up
Docker Compose valida le source dei bind mount allo startup e rifiuta di creare il container se la dir host manca. Esegui mkdir logs prima del primo docker compose up.
Non salvare segreti nei file di configurazione
Passa la API key tramite variabile d'ambiente invece di salvarla in desk.yml:
Apri http://localhost:8080 — nessuna registrazione necessaria.
Modalità multi-utente (ogni utente si registra e inserisce la propria API key):
# docker-compose.yml
services:
desk:
image: invoicetronic/desk
ports:
- "8080:8080"
volumes:
- ./desk.yml:/app/desk.yml # opzionale
- ./data:/app/data # persistenza database utenti
- ./logs:/app/logs # log giornalieri rotanti (vedi sezione Logging)
Crea le directory data e logs prima del primo up
Docker Compose valida le source dei bind mount allo startup e rifiuta di creare il container se le dir host mancano. Esegui mkdir data logs prima del primo docker compose up.
Apri http://localhost:8080, registrati e inserisci la tua API key nella pagina profilo.
Binari nativi
Ogni release su GitHub include binari self-contained e single-file — non è necessario installare .NET.
| File | Sistema operativo | Architettura |
|---|---|---|
desk-win-x64.zip |
Windows | x86-64 (Intel/AMD) |
desk-linux-x64.zip |
Linux | x86-64 (Intel/AMD) |
desk-linux-arm64.zip |
Linux | ARM64 (Raspberry Pi 4/5, AWS Graviton) |
desk-osx-x64.zip |
macOS | Intel |
desk-osx-arm64.zip |
macOS | Apple Silicon (M1/M2/M3/M4) |
Windows:
Linux:
macOS:
unzip desk-osx-arm64.zip -d desk # oppure desk-osx-x64.zip per Intel
chmod +x desk/desk
xattr -d com.apple.quarantine desk/desk # rimuovere la quarantena Gatekeeper
./desk/desk
L'app ascolta su http://localhost:5000 di default. Posiziona un file desk.yml nella stessa directory del binario per la configurazione.
Cambiare indirizzo o porta di ascolto
Usa il flag --urls o la variabile d'ambiente ASPNETCORE_URLS:
Due modalità di autenticazione
| Standalone | Multi-utente | |
|---|---|---|
| Quando | api_key impostata in desk.yml |
api_key assente |
| Autenticazione | Nessuna — tutte le pagine accessibili | Registrazione + login |
| API key | Condivisa, da configurazione | Per utente, nel profilo |
| Database | In-memory | SQLite (default) o PostgreSQL |
| Caso d'uso | Rete interna, VPN, singolo tenant | SaaS, multi-tenant |
Attenzione
In modalità standalone chiunque possa raggiungere l'host ha pieno accesso. Usare solo in reti fidate.
White-label e theming
Personalizza colori, logo e favicon direttamente in desk.yml:
desk:
branding:
app_name: La Mia App di Fatturazione
footer_text: "Powered by <a href=\"https://example.com\">La Mia Azienda</a>"
logo_url: https://example.com/logo-light.svg # navbar (sfondo scuro)
logo_dark_url: https://example.com/logo-dark.svg # pagine auth (sfondo chiaro)
favicon_url: https://example.com/favicon.png
primary_color: "#1A237E"
accent_color: "#E91E63"
Tutte le proprietà sono opzionali — se omesse, vengono usati i valori predefiniti Invoicetronic.
Per un controllo completo sul design system, è possibile montare un file custom/theme.css che sovrascrive qualsiasi variabile CSS:
/* custom/theme.css */
:root {
--brand-primary: #1A237E;
--brand-accent: #E91E63;
--brand-font-heading: "Poppins", sans-serif;
}
Recupero password (SMTP)
In modalità multi-utente, gli utenti possono reimpostare la password dimenticata tramite email. Per abilitare questa funzionalità, configura un server SMTP in desk.yml:
desk:
smtp:
host: smtp.example.com
port: 587 # 587 (StartTLS) | 465 (SSL)
username: user@example.com
password: secret
sender_email: noreply@example.com
sender_name: La Mia App
Tutte le proprietà tranne host e sender_email sono opzionali. Se la sezione smtp non è configurata, il link "Password dimenticata?" non viene mostrato nella pagina di login.
Non salvare segreti nei file di configurazione
Passa le credenziali SMTP tramite variabili d'ambiente:
Logging
In produzione Desk scrive file di log giornalieri rotanti sotto logs/ e mantiene gli ultimi 30 giorni. I file docker-compose di default bind-montano ./logs:/app/logs, quindi dall'host puoi fare:
Per cambiare path, retention o verbosità, aggiungi una sezione logging: a desk.yml:
desk:
logging:
directory: logs # path relativo alla working directory
retained_files: 30 # numero di file giornalieri mantenuti prima della rotazione
min_level: Information # Verbose | Debug | Information | Warning | Error | Fatal
Tutte le chiavi sono opzionali. Errori e warning vengono comunque inoltrati anche a docker logs, così puoi individuare i problemi al volo con docker logs <container>.
Stack tecnologico
| Layer | Tecnologia |
|---|---|
| Backend | ASP.NET Core 10.0 + Razor Pages |
| Data grid | AG Grid Community (MIT) |
| UI | Design system CSS custom (no Bootstrap) |
| Auth | ASP.NET Core Identity |
| Database | SQLite (default) / PostgreSQL |
| Config | YAML (desk.yml) |
| Container | Docker multi-platform (amd64/arm64) |
Licenza
Apache License 2.0 — usa, modifica e redistribuisci liberamente, anche per scopi commerciali.
