← Tutte le idee Strumenti online

Pulse Local

Un'app per il budget familiare dove i dati non lasciano il computer

Cosa fa

App per gestire spese ed entrate con l'aiuto dell'AI, ma tutto gira sul computer dell'utente: nessun dato finanziario viene inviato su internet.

Come guadagna

Presentato su Hacker News dal suo creatore, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: app a pagamento una tantum, che con la privacy come argomento si vende bene.

Rendilo tuo

  • Categorie italiane: bollette, mutuo, mensa scolastica, bollo auto, 730.
  • Importa gli estratti conto delle banche italiane in PDF o CSV.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Conti di Casa": un'app per gestire spese ed entrate di famiglia in cui tutti i dati restano nel computer o nel telefono dell'utente: nessun dato finanziario viene inviato su internet. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con "I tuoi conti restano a casa tua" e il prezzo
2. Importazione dei movimenti da file CSV o Excel della banca
3. Movimenti con categorie automatiche e modificabili
4. Budget mensile per categoria con barre di avanzamento
5. Grafici dell'anno e obiettivi di risparmio

Stile: rassicurante e chiaro: sfondo bianco, verde #15803D, blu #1D4ED8, rosso #DC2626 per gli sforamenti, carattere "Inter", grafici semplici. 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:
- nessuna tabella per i movimenti: stanno solo nel browser dell'utente (IndexedDB), con esportazione e backup su file
- "profili": solo piano (gratis o completo) per la licenza, collegato all'utente

Regole di sicurezza obbligatorie:
- i movimenti non lasciano mai il dispositivo
- il backup è un file che l'utente scarica, facoltativamente cifrato con una password
- 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. Importazione e categorie, tutto nel browser

L'utente importa il file CSV o Excel scaricato dalla sua banca. Il sito riconosce le colonne (data, descrizione, importo o dare/avere) e chiede conferma una volta per banca. Tutto viene letto nel browser e salvato in IndexedDB.

Le categorie si assegnano con regole sulle parole della descrizione (codice nei Dettagli tecnici): "ESSELUNGA" → Spesa, "ENEL" → Bollette. Quando l'utente corregge una categoria, il sito propone di creare la regola, così la volta dopo è automatico.

Funziona anche offline come PWA. Mostra in grande: "I tuoi dati non vengono inviati a nessuno: puoi verificarlo staccando internet".

4. Budget, grafici e backup

Budget mensile per categoria con barre (verde, giallo all'80%, rosso oltre il 100%), grafico delle spese per mese, e obiettivi di risparmio con la stima di quando si raggiungono.

Backup: esporta tutto in un file (cifrato con una password a scelta) da salvare dove si vuole, e reimportalo su un altro dispositivo. Avviso: "Se cancelli i dati del browser senza backup, i movimenti si perdono".

5. Pagamenti con Stripe

Aggiungi un pagamento singolo di 14,99 € una volta sola. Il pagamento sblocca più conti, regole illimitate, obiettivi di risparmio e backup cifrati.

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. Privacy: con la scheda Rete degli strumenti del browser aperta, importa un file e usa l'app per 5 minuti: nessuna richiesta deve contenere movimenti.
2. Backup: esporta, cancella i dati del browser, reimporta: tutto deve tornare uguale.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Categorie automatiche con regole

Assegna una categoria a ogni movimento cercando parole nella descrizione. Le regole create dall'utente vengono prima di quelle predefinite.

type Regola = { parola: string; categoria: string };
type Movimento = { data: string; descrizione: string; importo: number; categoria?: string };

const PREDEFINITE: Regola[] = [
  { parola: "esselunga", categoria: "Spesa" }, { parola: "coop", categoria: "Spesa" },
  { parola: "conad", categoria: "Spesa" }, { parola: "lidl", categoria: "Spesa" },
  { parola: "enel", categoria: "Bollette" }, { parola: "hera", categoria: "Bollette" },
  { parola: "telepass", categoria: "Auto" }, { parola: "eni ", categoria: "Auto" },
  { parola: "stipendio", categoria: "Entrate" }, { parola: "netflix", categoria: "Abbonamenti" },
];

const normalizza = (s: string) => s.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");

export function categorizza(movimenti: Movimento[], mieRegole: Regola[]): Movimento[] {
  const regole = [...mieRegole, ...PREDEFINITE];
  return movimenti.map((m) => {
    if (m.categoria) return m;                          // già scelta dall'utente
    const testo = normalizza(m.descrizione);
    const regola = regole.find((r) => testo.includes(normalizza(r.parola)));
    return { ...m, categoria: regola?.categoria ?? (m.importo > 0 ? "Altre entrate" : "Da classificare") };
  });
}

// Totale per categoria nel mese, per le barre del budget
export function spesePerCategoria(movimenti: Movimento[], mese: string) {
  const totali = new Map<string, number>();
  for (const m of movimenti) {
    if (!m.data.startsWith(mese) || m.importo >= 0) continue;
    totali.set(m.categoria!, (totali.get(m.categoria!) ?? 0) - m.importo);
  }
  return totali;
}

Pezzi comuni a tutti i progetti

Glossario

CSV
Un file di testo con i dati separati da virgole, che si apre con Excel.
IndexedDB
Un piccolo database dentro il browser: i dati restano sul tuo dispositivo.
PWA
Un sito che si installa come un'app e funziona anche senza connessione.