← Tutte le idee Strumenti online

RedactSense

Oscura i dati sensibili nei documenti con l'AI, senza caricarli online

Cosa fa

Uno strumento che trova e copre dati sensibili nei documenti (nomi, codici, indirizzi) con l'AI, lavorando completamente offline.

Come guadagna

Startup appena presentata su BetaList, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: licenza per studi professionali, versione per aziende.

Rendilo tuo

  • Per avvocati, commercialisti e HR italiani: codici fiscali, IBAN, dati sanitari.
  • Utile per mandare documenti all'AI senza esporre i dati dei clienti.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Oscura Dati": trova e copre i dati personali nei documenti (codici fiscali, IBAN, email, telefoni, indirizzi, nomi) prima di condividerli, lavorando interamente nel browser: i documenti non lasciano il computer. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina principale: trascina un PDF o incolla un testo
2. Revisione: dati trovati evidenziati, da confermare o togliere uno per uno
3. Esporta il documento oscurato (PDF con i dati davvero rimossi, non solo coperti)
4. Regole personalizzate: parole o codici da cercare sempre
5. Pagina "Perché è sicuro"

Stile: serio e affidabile: sfondo bianco, nero #111827, rettangoli neri per i dati oscurati, giallo #FDE047 per quelli da confermare, carattere "Inter". 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 caricato o salvato
- "profili": piano

Regole di sicurezza obbligatorie:
- i documenti restano sul computer dell'utente
- il PDF esportato non deve contenere il testo oscurato nascosto sotto i rettangoli
- 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. Trovare i dati con regole e controlli

Il testo del documento si legge nel browser con pdf.js. I dati con un formato preciso si trovano con regole e si verificano con le loro cifre di controllo, così si evitano falsi allarmi (codice nei Dettagli tecnici): codice fiscale (con il carattere di controllo), IBAN (con il controllo modulo 97), partita IVA, email, telefoni, targhe.

Per nomi e indirizzi, facoltativamente, un piccolo modello di riconoscimento delle entità gira nel browser (transformers.js), sempre senza inviare nulla.

L'utente rivede ogni dato trovato e conferma. Importante: l'esportazione ricrea il PDF come immagini delle pagine con i rettangoli neri "bruciati", così il testo oscurato non resta nascosto sotto.

4. Regole e Pro

Regole personalizzate: parole, nomi di clienti o codici interni da cercare sempre. Elenco dei dati oscurati in un riepilogo separato, per l'archivio di chi condivide.

Pro: più documenti insieme, Word ed Excel oltre ai PDF, riconoscimento dei nomi con il modello AI locale, e regole salvate.

5. Pagamenti con Stripe

Aggiungi un pagamento singolo di 14,99 € una volta sola. Il pagamento sblocca più documenti insieme, Word ed Excel, il riconoscimento dei nomi e le regole salvate.

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. Rimozione vera: oscura un codice fiscale, esporta il PDF, poi seleziona tutto il testo del PDF esportato e incollalo: il codice non deve comparire.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Riconoscere codice fiscale e IBAN veri

Trova i candidati con le espressioni regolari e tiene solo quelli con le cifre di controllo giuste: carattere finale del codice fiscale e controllo modulo 97 dell'IBAN.

// Codice fiscale: il 16° carattere si calcola dai primi 15
const DISPARI: Record<string, number> = Object.fromEntries(
  "0:1,1:0,2:5,3:7,4:9,5:13,6:15,7:17,8:19,9:21,A:1,B:0,C:5,D:7,E:9,F:13,G:15,H:17,I:19,J:21,K:2,L:4,M:18,N:20,O:11,P:3,Q:6,R:8,S:12,T:14,U:16,V:10,W:22,X:25,Y:24,Z:23"
    .split(",").map((c) => c.split(":")).map(([k, v]) => [k, Number(v)]),
);
const pari = (c: string) => (/\d/.test(c) ? Number(c) : c.charCodeAt(0) - 65);

export function codiceFiscaleValido(cf: string): boolean {
  const s = cf.toUpperCase();
  if (!/^[A-Z]{6}[0-9LMNPQRSTUV]{2}[A-Z][0-9LMNPQRSTUV]{2}[A-Z][0-9LMNPQRSTUV]{3}[A-Z]$/.test(s)) return false;
  let somma = 0;
  for (let i = 0; i < 15; i++) somma += i % 2 === 0 ? DISPARI[s[i]] : pari(s[i]);
  return String.fromCharCode(65 + (somma % 26)) === s[15];
}

// IBAN: spostare i primi 4 caratteri in fondo, lettere -> numeri, resto della divisione per 97 = 1
export function ibanValido(iban: string): boolean {
  const s = iban.replace(/\s+/g, "").toUpperCase();
  if (!/^[A-Z]{2}\d{2}[A-Z0-9]{11,30}$/.test(s)) return false;
  const numeri = (s.slice(4) + s.slice(0, 4)).replace(/[A-Z]/g, (c) => String(c.charCodeAt(0) - 55));
  let resto = 0;
  for (const cifra of numeri) resto = (resto * 10 + Number(cifra)) % 97;
  return resto === 1;
}

export function trovaDati(testo: string) {
  const trovati: { tipo: string; valore: string; indice: number }[] = [];
  for (const m of testo.matchAll(/\b[A-Z]{6}[0-9LMNPQRSTUV]{2}[A-Z][0-9LMNPQRSTUV]{2}[A-Z][0-9LMNPQRSTUV]{3}[A-Z]\b/gi))
    if (codiceFiscaleValido(m[0])) trovati.push({ tipo: "Codice fiscale", valore: m[0], indice: m.index! });
  for (const m of testo.matchAll(/\b[A-Z]{2}\d{2}(?:\s?[A-Z0-9]){11,30}\b/g))
    if (ibanValido(m[0])) trovati.push({ tipo: "IBAN", valore: m[0], indice: m.index! });
  for (const m of testo.matchAll(/[\w.+-]+@[\w-]+\.[\w.]+/g))
    trovati.push({ tipo: "Email", valore: m[0], indice: m.index! });
  return trovati;
}

Pezzi comuni a tutti i progetti

Glossario

Cifra di controllo
Un carattere calcolato dagli altri: se non torna, il codice è scritto male o inventato.
Oscuramento vero
Togliere davvero il testo dal file, non solo coprirlo con un rettangolo sotto cui si può ancora copiare.