← Tutte le idee Attività locali e immobiliare

Abodient

Automatizza la gestione degli immobili in affitto, restando tu al comando

Cosa fa

Software per chi gestisce case in affitto nel Regno Unito: automatizza i compiti ripetitivi ma lascia le decisioni al proprietario.

Come guadagna

Startup appena presentata su BetaList, che non dichiara incassi. Idee nostre per guadagnare con un progetto simile: abbonamento in base al numero di immobili.

Rendilo tuo

  • Per i piccoli proprietari italiani: scadenze dei contratti, ISTAT, cedolare secca, solleciti di pagamento.
  • Promemoria per le scadenze di registrazione all'Agenzia delle Entrate.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Affitti in Ordine": per chi ha da 1 a 20 case in affitto in Italia: canoni, incassi, scadenze (contratti, registrazione annuale, aggiornamento ISTAT), spese e documenti, con promemoria automatici. Le decisioni restano al proprietario. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con le funzioni e il prezzo
2. Immobili con contratti, inquilini e documenti
3. Canoni: calendario degli incassi, pagati e in ritardo
4. Scadenze: rinnovi, disdette, registrazioni, aggiornamenti ISTAT
5. Riepilogo annuale per la dichiarazione dei redditi

Stile: ordinato e affidabile: sfondo bianco, blu #1E40AF, verde #16A34A per i pagati, rosso #DC2626 per i ritardi, carattere "Inter", calendario dei canoni a 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:
- "immobili": indirizzo, dati catastali, collegati al proprietario
- "contratti": immobile, inquilino, tipo (4+4, 3+2, transitorio, studenti), inizio, durata, canone, regime (cedolare secca o ordinario), data di registrazione
- "canoni": contratto, mese, importo, pagato il
- "spese": immobile, tipo, importo, data, ricevuta

Regole di sicurezza obbligatorie:
- ogni proprietario vede solo i suoi immobili e contratti
- gli inquilini, se invitati, vedono solo il loro contratto e i loro canoni

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. Canoni e scadenze automatiche

Inserito il contratto, il sito genera il calendario dei canoni per tutta la durata e le scadenze: fine del periodo, termine per la disdetta, registrazione annuale (se non in cedolare secca), aggiornamento ISTAT se previsto dal contratto.

L'aggiornamento ISTAT si calcola come da contratto (di solito il 75% della variazione dell'indice FOI, solo in regime ordinario: con la cedolare secca non si applica). Il proprietario inserisce la variazione pubblicata dall'ISTAT e il sito calcola il nuovo canone (codice nei Dettagli tecnici), ma è lui a decidere se chiederlo.

Promemoria via email 60 e 15 giorni prima di ogni scadenza; quando un canone non risulta pagato dopo 5 giorni, propone un messaggio cortese all'inquilino.

4. Spese, documenti e riepilogo

Spese per immobile (condominio, IMU, manutenzioni) con le ricevute, documenti (contratti, APE, verbali) nello Storage privato.

Riepilogo annuale per la dichiarazione dei redditi: canoni incassati per immobile e per regime, da dare al commercialista in Excel o PDF. Ricorda che il sito organizza i dati ma non sostituisce il commercialista.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 6 € al mese. Gratis l'utente ha: un immobile. Con il piano Pro sblocca: fino a 20 immobili, promemoria, accesso inquilini, documenti e riepilogo annuale.

A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.

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. Calcoli: inserisci un contratto 4+4 in regime ordinario con aggiornamento ISTAT e una variazione del 2%: il nuovo canone deve aumentare dell'1,5%.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Aggiornamento ISTAT del canone

Calcola il nuovo canone con la percentuale della variazione ISTAT prevista dal contratto (di solito il 75%), solo se il contratto la prevede e non è in cedolare secca.

type Contratto = {
  canoneCentesimi: number;
  regime: "cedolare_secca" | "ordinario";
  aggiornamentoIstat: boolean;
  percentualeIstat: number;       // di solito 75 (%)
};

export function nuovoCanone(c: Contratto, variazioneIstatPercento: number) {
  if (c.regime === "cedolare_secca") {
    return { canoneCentesimi: c.canoneCentesimi, nota: "Con la cedolare secca l'aggiornamento ISTAT non si applica." };
  }
  if (!c.aggiornamentoIstat || variazioneIstatPercento <= 0) {
    return { canoneCentesimi: c.canoneCentesimi, nota: "Nessun aggiornamento previsto." };
  }
  const aumento = (variazioneIstatPercento * c.percentualeIstat) / 100;   // es. 2% * 75% = 1,5%
  const canone = Math.round(c.canoneCentesimi * (1 + aumento / 100));
  return {
    canoneCentesimi: canone,
    nota: "Aumento del " + aumento.toFixed(2).replace(".", ",") + "%: va richiesto all'inquilino per iscritto.",
  };
}

Calendario dei canoni e ritardi

Genera i canoni mensili di tutta la durata del contratto e trova quelli non pagati da più di 5 giorni.

create table contratti (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,
  immobile_id uuid not null,
  inquilino text not null,
  tipo text not null check (tipo in ('4+4', '3+2', 'transitorio', 'studenti')),
  inizio date not null,
  durata_mesi int not null,
  canone_centesimi int not null,
  giorno_scadenza int not null default 5 check (giorno_scadenza between 1 and 28),
  regime text not null check (regime in ('cedolare_secca', 'ordinario'))
);

create table canoni (
  contratto_id uuid not null references contratti(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  scadenza date not null,
  importo_centesimi int not null,
  pagato_il date,
  primary key (contratto_id, scadenza)
);

alter table contratti enable row level security;
create policy "le mie righe" on contratti
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

alter table canoni enable row level security;
create policy "le mie righe" on canoni
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

-- Crea tutti i canoni del contratto
insert into canoni (contratto_id, utente_id, scadenza, importo_centesimi)
select c.id, c.utente_id,
       (date_trunc('month', c.inizio) + make_interval(months => m) + make_interval(days => c.giorno_scadenza - 1))::date,
       c.canone_centesimi
from contratti c, generate_series(0, c.durata_mesi - 1) as m
where c.id = 'ID-CONTRATTO'
on conflict do nothing;

-- Canoni in ritardo di più di 5 giorni
select c.inquilino, k.scadenza, k.importo_centesimi / 100.0 as euro, current_date - k.scadenza as giorni
from canoni k join contratti c on c.id = k.contratto_id
where k.utente_id = auth.uid() and k.pagato_il is null and k.scadenza < current_date - 5
order by k.scadenza;

Pezzi comuni a tutti i progetti

Glossario

Storage
Lo spazio di Supabase dove si salvano i file, come foto e audio, con le sue regole di accesso.
Cron
Un'operazione programmata che parte da sola a orari fissi, per esempio ogni lunedì mattina.
Cedolare secca
Un modo di tassare gli affitti con un'aliquota fissa; chi la sceglie rinuncia all'aggiornamento ISTAT del canone.
Indice ISTAT (FOI)
L'indice dei prezzi pubblicato dall'ISTAT, usato per aggiornare i canoni d'affitto.