← Tutte le idee Gestionali per aziende

TAC & TSC

Clienti, contratti, attrezzature e richieste di assistenza in una sola piattaforma

Cosa fa

Piattaforma web per gestire i clienti, i contratti, le attrezzature installate e le richieste di assistenza (ticket).

Come guadagna

Il progetto è presentato in vetrina su SideProjectors; come guadagna non è indicato pubblicamente.

Rendilo tuo

  • Per installatori di caldaie, condizionatori o allarmi: scadenze delle manutenzioni e storico interventi.
  • Il cliente apre la richiesta di assistenza da WhatsApp.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Assistenza Pronta": per aziende che installano e mantengono impianti (caldaie, condizionatori, ascensori, sistemi informatici): clienti, contratti di assistenza, impianti installati e richieste di intervento con i tempi garantiti. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con le funzioni e il prezzo
2. Clienti con contratti e impianti installati (marca, modello, matricola, data di installazione)
3. Richieste di intervento (ticket) con priorità e scadenza
4. Area clienti: apri una richiesta, segui lo stato, scarica i rapporti
5. Scadenze: contratti da rinnovare e manutenzioni periodiche

Stile: tecnico e affidabile: sfondo bianco, blu #1E40AF, arancione #EA580C per le urgenze, carattere "Inter", elenco richieste con badge colorati di priorità. 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:
- "contratti": cliente, livello (base, plus, premium), tempo di intervento garantito in ore, inizio e fine
- "impianti": cliente, tipo, marca, modello, matricola, installato il, ultima manutenzione
- "richieste": impianto, descrizione, priorità, stato, aperta il, scadenza, tecnico assegnato, rapporto finale

Regole di sicurezza obbligatorie:
- i clienti vedono solo i loro impianti e richieste
- i tecnici vedono le richieste dell'azienda; solo i responsabili gestiscono contratti
- la scadenza della richiesta la calcola il database dal contratto

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. Richieste con tempi garantiti

Il cliente apre una richiesta dall'area clienti scegliendo l'impianto, descrivendo il problema e allegando foto. La priorità (bassa, normale, urgente) e il contratto determinano la scadenza: il database la calcola da solo (codice nei Dettagli tecnici).

Il responsabile vede le richieste ordinate per scadenza, con quelle vicine al limite in arancione e quelle scadute in rosso, e le assegna a un tecnico. Il tecnico, dal telefono, cambia stato (presa in carico, in corso, risolta) e compila il rapporto con ore, materiali e firma del cliente.

Il cliente riceve email a ogni cambio di stato e il rapporto in PDF alla chiusura.

4. Contratti e manutenzioni

Pagina scadenze: contratti in scadenza nei prossimi 60 giorni con il pulsante per inviare la proposta di rinnovo, e manutenzioni periodiche da programmare (es. ogni 12 mesi dall'ultima).

Statistiche: richieste per cliente e per tipo di impianto, percentuale risolta entro il tempo garantito, ore per contratto (per capire quali contratti rendono).

5. Pagamenti con Stripe

Aggiungi un abbonamento a 39 € al mese. Gratis l'utente ha: 50 impianti e 2 tecnici. Con il piano Pro sblocca: impianti e tecnici illimitati, area clienti, rapporti firmati e statistiche dei tempi.

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. Tempi: apri una richiesta urgente per un cliente con contratto premium (4 ore) e controlla che la scadenza calcolata sia giusta.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Scadenza calcolata dal contratto

Un trigger calcola la scadenza di ogni richiesta dal contratto del cliente e dalla priorità; una vista mostra quelle a rischio.

create table contratti (
  id uuid primary key default gen_random_uuid(),
  azienda_id uuid not null,
  cliente_id uuid not null,
  livello text not null check (livello in ('base', 'plus', 'premium')),
  ore_intervento int not null,          -- es. base 48, plus 24, premium 4
  inizio date not null,
  fine date not null
);

create table richieste (
  id bigint generated always as identity primary key,
  azienda_id uuid not null,
  cliente_id uuid not null,
  impianto_id uuid not null,
  descrizione text not null,
  priorita text not null default 'normale' check (priorita in ('bassa', 'normale', 'urgente')),
  stato text not null default 'aperta' check (stato in ('aperta', 'in_carico', 'in_corso', 'risolta')),
  aperta_il timestamptz not null default now(),
  scadenza timestamptz,
  risolta_il timestamptz
);

create function calcola_scadenza() returns trigger language plpgsql as $
declare ore int;
begin
  select c.ore_intervento into ore from contratti c
  where c.cliente_id = new.cliente_id and current_date between c.inizio and c.fine
  order by c.ore_intervento limit 1;

  ore := coalesce(ore, 72);                                    -- senza contratto: 72 ore
  if new.priorita = 'bassa' then ore := ore * 2; end if;
  if new.priorita = 'urgente' then ore := greatest(ore / 2, 2); end if;
  new.scadenza := new.aperta_il + make_interval(hours => ore);
  return new;
end $;
create trigger scadenza_richiesta before insert on richieste
  for each row execute function calcola_scadenza();

-- Richieste a rischio: aperte con meno del 25% del tempo rimasto
select id, descrizione, priorita, scadenza,
       case when scadenza < now() then 'scaduta' else 'a rischio' end as situazione
from richieste
where stato <> 'risolta'
  and now() > scadenza - (scadenza - aperta_il) * 0.25
order by 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.
SLA
Il tempo di intervento garantito dal contratto: per esempio "entro 4 ore lavorative".
Ticket
Una richiesta di assistenza con un numero, uno stato e una storia, per non perderla di vista.