← Tutte le idee Strumenti online

BentoPDF

Tutti gli strumenti per i PDF, senza caricare i file da nessuna parte

Cosa fa

Una raccolta di strumenti per i PDF (unire, dividere, comprimere, convertire, firmare) che funziona interamente nel browser: i documenti non vengono mai caricati su un server.

Come guadagna

Progetto open source su GitHub con oltre 16.000 stelle, che non dichiara incassi. Ha licenza AGPL: puoi partire dal suo codice, ma se offri la tua versione online devi pubblicare anche il tuo codice modificato. Idee nostre per guadagnare: versione per aziende con il proprio marchio, funzioni avanzate a pagamento, pubblicità discreta.

Rendilo tuo

  • Per studi professionali italiani: documenti dei clienti che non devono uscire dall'ufficio.
  • Strumenti per i formati italiani: firma digitale .p7m, documenti per la PA.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "PDF Privato": una raccolta di strumenti per i PDF (unire, dividere, estrarre pagine, ruotare, comprimere, aggiungere numeri di pagina, filigrana, firma) che funziona interamente nel browser: i documenti non vengono mai caricati. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con tutti gli strumenti e "I tuoi PDF non lasciano il computer"
2. Pagina di ogni strumento con area di trascinamento e anteprima delle pagine
3. Organizza: miniature delle pagine da riordinare, ruotare, eliminare
4. Pagina "Perché è sicuro" con la prova da fare staccando internet
5. Pagina Pro

Stile: pulito e affidabile: sfondo bianco, rosso PDF #DC2626 solo per i dettagli, blu #1D4ED8 per le azioni, carattere "Inter", miniature delle pagine in griglia. Nessuna immagine generica di stock.

Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.

2. Database, account e sicurezza

Collega il progetto a Supabase e attiva la registrazione con email e password.

Crea queste tabelle:
- nessun documento viene salvato o caricato
- "profili": piano

Regole di sicurezza obbligatorie:
- i PDF restano sul dispositivo dell'utente
- il piano non si modifica dal browser

Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.

3. Strumenti che lavorano nel browser

Tutti gli strumenti usano pdf-lib (modifica dei PDF) e pdf.js (miniature delle pagine) nel browser. Per dividere un PDF l'utente scrive gli intervalli come in stampa, "1-3, 5, 8-10", e il sito crea un file per ogni intervallo (codice nei Dettagli tecnici).

La pagina "Organizza" mostra le miniature: si trascinano per riordinare, si ruotano, si eliminano, si inseriscono pagine da un altro PDF.

Il sito funziona anche offline come PWA: è la prova più semplice che i file non vengono inviati. I PDF protetti da password si aprono solo se l'utente la inserisce.

4. Pro e pubblicità

Gratis: tutti gli strumenti per file fino a 50 MB, con una pubblicità discreta fuori dall'area di lavoro.

Pro: file più grandi, lavorazione di più file insieme, compressione più forte, nessuna pubblicità.

5. Pagamenti con Stripe

Aggiungi un pagamento singolo di 7,99 € una volta sola. Il pagamento sblocca file grandi, lavorazione in blocco, compressione forte e toglie la pubblicità.

A pagamento riuscito il webhook imposta "piano" a "pro" nella tabella "profili", sulla riga dell'utente indicata in client_reference_id.

Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.

6. Controlli specifici di questo progetto

Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Intervalli: dividi un PDF di 10 pagine con "1-3, 5, 8-10, 12": deve creare 3 file e segnalare che la pagina 12 non esiste.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Dividere un PDF per intervalli

Legge intervalli scritti come in stampa ("1-3, 5, 8-10") e crea un nuovo PDF per ciascuno, nel browser.

import { PDFDocument } from "pdf-lib";

export function leggiIntervalli(testo: string, totalePagine: number) {
  const intervalli: number[][] = [];
  const errori: string[] = [];
  for (const parte of testo.split(",").map((s) => s.trim()).filter(Boolean)) {
    const m = parte.match(/^(\d+)(?:\s*-\s*(\d+))?$/);
    if (!m) { errori.push("Non capisco \"" + parte + "\""); continue; }
    const da = Number(m[1]), a = Number(m[2] ?? m[1]);
    if (da < 1 || a > totalePagine || da > a) { errori.push("Pagine " + parte + " non valide (il PDF ne ha " + totalePagine + ")"); continue; }
    intervalli.push(Array.from({ length: a - da + 1 }, (_, i) => da + i - 1));   // indici da 0
  }
  return { intervalli, errori };
}

export async function dividi(file: File, testoIntervalli: string): Promise<{ file: Blob[]; errori: string[] }> {
  const originale = await PDFDocument.load(await file.arrayBuffer());
  const { intervalli, errori } = leggiIntervalli(testoIntervalli, originale.getPageCount());
  const risultati: Blob[] = [];
  for (const pagine of intervalli) {
    const nuovo = await PDFDocument.create();
    const copiate = await nuovo.copyPages(originale, pagine);
    copiate.forEach((p) => nuovo.addPage(p));
    risultati.push(new Blob([await nuovo.save()], { type: "application/pdf" }));
  }
  return { file: risultati, errori };
}

Pezzi comuni a tutti i progetti

Glossario

pdf-lib
Una libreria gratuita che crea e modifica PDF direttamente nel browser.
PWA
Un sito che si installa come un'app e funziona anche senza connessione.