Il laboratorio di questo sito è nato da un'esigenza concreta: avevo bisogno di un banco di prova per le tecnologie che uso con i clienti, e volevo che fosse anche utile a chi lavora ogni giorno con i documenti. Oggi conta 13 strumenti — viewer, editor PDF, OCR, scanner, traduzione, riassunto, ricerca di PDF legali, slide con IA e altri — in sette lingue. Questo è il racconto di come l'ho costruito.
Il problema e i vincoli
- Costi bassi: un backend NestJS su un piccolo servizio cloud, nessuna infrastruttura dedicata.
- Privacy: dove possibile, i file non devono lasciare il dispositivo di chi li usa.
- Sette lingue e SEO: ogni strumento deve essere trovabile su Google in ogni lingua.
- Strumenti anonimi: niente registrazione obbligatoria, quindi protezioni contro gli abusi.
Scelta 1: nel browser quando si può, sul server quando serve
Viewer, editor PDF (unire, dividere, ruotare, filigrana) e la prima fase dell'OCR lavorano interamente nel browser, con pdf.js e pdf-lib: il documento non viene mai caricato. Il server entra in gioco solo quando è inevitabile: chiamate ai modelli di IA, OCR pesante con Tesseract, conversioni di formato.
Scelta 2: prima il testo, poi l'OCR
Ogni pagina viene prima interrogata per il suo livello di testo. Sotto i 40 caratteri la considero una scansione e la mando all'OCR; la stessa soglia vale nel browser e sul server, così i due percorsi danno risultati coerenti. L'OCR è lento, quindi c'è un tetto di 20 pagine per documento.
Scelta 3: limiti dichiarati, non nascosti
I documenti lunghi vengono divisi in blocchi per l'IA. Oltre i 15 blocchi preferisco troncare e dirlo all'utente, piuttosto che far esplodere tempi e costi su un file patologico:
// Hard cap on blocks per document: beyond it the file is
// truncated honestly instead of exploding latency and cost.
const chunks = allChunks.slice(0, this.MAX_CHUNKS); // 15
const truncated = allChunks.length > this.MAX_CHUNKS;
// "truncated" goes back to the UI: the user is told, not surprised
Scelta 4: strumenti collegati da un workspace
Il valore vero sta nelle catene: scanner → OCR → traduzione, ricerca → riassunto. Per questo ho aggiunto un workspace che passa il risultato di uno strumento al successivo senza scaricare e ricaricare file. L'ho raccontato nel dettaglio in questo articolo.
Scelta 5: quote sull'IA
Strumenti anonimi e chiamate a modelli di IA sono una combinazione pericolosa per il budget. Oltre al limite al minuto ho introdotto un tetto giornaliero per indirizzo IP e un budget globale di token al giorno, con un interruttore di emergenza. Senza, un solo script automatico potrebbe consumare in un'ora il budget di un mese.
Gli errori da cui ho imparato di più
- Le mie intestazioni di sicurezza bloccavano la mia anteprima. I default di Helmet vietano di mostrare le risposte del backend in un iframe di un'altra origine: ho dovuto aprire un'eccezione mirata, solo su quella rotta e solo per il mio frontend.
- Sui telefoni l'anteprima PDF mostrava solo la prima pagina. Il viewer nativo dei browser mobili spesso fa così: sul mobile ora renderizzo le pagine con pdf.js, passando da un proxy con una lista chiusa di domini consentiti per evitare abusi.
- Le fonti vanno verificate dal vivo. Per la ricerca di PDF legali ho tenuto Internet Archive, Project Gutenberg, arXiv ed Europe PMC; altre fonti promettenti sono state scartate perché, provate davvero, non restituivano PDF ma pagine HTML.
- Titoli in una sola lingua. Per settimane le pagine degli strumenti avevano titolo e descrizione fissi, quasi tutti in inglese: le versioni nelle altre lingue erano di fatto invisibili a Google.
Il risultato
Tredici strumenti in sette lingue, con pagine prerenderizzate per ogni lingua e la maggior parte dell'elaborazione nel browser. Ma il risultato più utile è un altro: un repertorio di soluzioni già collaudate — gestione dei PDF, OCR, quote sull'IA, proxy sicuri, i18n — che riuso nei progetti per i clienti.
In sintesi
Costruire il laboratorio mi ha insegnato tre cose: elaborare nel browser tutto ciò che si può, dichiarare i limiti invece di nasconderli e proteggere ogni risorsa che costa denaro. Se hai un progetto che lavora con documenti o IA, scrivimi: probabilmente ho già affrontato un problema simile.