Vai al contenuto

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

desk.invoicetronic.com
Invoicetronic Desk screenshot
Scorri per esplorare · Clicca per ingrandire

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.

  1. Recupera la tua chiave test dalla sezione Chiavi della Dashboard
  2. Registrati su desk.invoicetronic.com e inserisci la chiave nel profilo
  3. 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

  1. Abilita una postazione Desk dalla sezione Chiavi della Dashboard (clicca Abilita Desk su una chiave API live)
  2. Registrati su desk.invoicetronic.com e inserisci la tua chiave live nel profilo
  3. 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.

# desk.yml
desk:
  api_key: YOUR_API_KEY

Non salvare segreti nei file di configurazione

Passa la API key tramite variabile d'ambiente invece di salvarla in desk.yml:

# docker-compose.yml
services:
  desk:
    image: invoicetronic/desk
    ports:
      - "8080:8080"
    environment:
      - Desk__api_key=YOUR_API_KEY
docker compose up -d

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.

docker compose up -d

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:

# Estrarre l'archivio, creare desk.yml, poi:
.\desk.exe

Linux:

unzip desk-linux-x64.zip -d desk
chmod +x desk/desk
./desk/desk

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:

./desk --urls http://0.0.0.0:8080
# oppure
export ASPNETCORE_URLS=http://0.0.0.0:8080

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;
}
# docker-compose.yml
volumes:
  - ./my-theme.css:/app/wwwroot/custom/theme.css

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:

# docker-compose.yml
environment:
  - Desk__smtp__host=smtp.example.com
  - Desk__smtp__port=587
  - Desk__smtp__username=user@example.com
  - Desk__smtp__password=secret
  - Desk__smtp__sender_email=noreply@example.com

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:

tail -f logs/$(date +%Y%m%d).log

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.