← Tutte le idee Gestionali per aziende

Car Dealer Tracker

Il gestionale per chi compra e vende auto, dal telefono

Incasso mensile: 950 USD (fonte indicata nella scheda)

Cosa fa

App per concessionari e rivenditori di auto usate: veicoli in vendita, spese, vendite, clienti e accessi per il team.

Come guadagna

Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.

Rendilo tuo

  • Per i piccoli rivenditori italiani: margine per auto, passaggi di proprietà, garanzie.
  • Pubblicazione automatica degli annunci sui portali.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Salone Auto": un gestionale semplice per piccoli rivenditori di auto usate: veicoli in stock, spese per ognuno, vendite, margini e clienti, con accesso per i collaboratori. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con le funzioni e prezzi
2. Registrazione e creazione del salone
3. Veicoli: elenco con foto, stato e giorni in stock
4. Scheda del veicolo: dati, spese, documenti, vendita
5. Statistiche: margini, tempi di vendita, spese per categoria

Stile: concreto e professionale: sfondo grigio chiaro #F3F4F6, blu acciaio #1E3A5F, verde #16A34A per i margini positivi, rosso #DC2626 per quelli negativi, carattere "Inter", tabelle leggibili anche su tablet. 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:
- "saloni" e "membri": il salone e chi ci lavora (titolare, venditore)
- "veicoli": marca, modello, anno, km, targa, telaio, prezzo d'acquisto, prezzo di vendita esposto, stato (in arrivo, in vendita, venduto), foto
- "spese": categoria (carrozzeria, meccanica, pulizia, passaggio), importo, data
- "vendite": cliente, prezzo finale, data

Regole di sicurezza obbligatorie:
- ogni salone vede solo i suoi dati
- i venditori vedono i veicoli ma non i prezzi d'acquisto e i margini: solo il titolare
- 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. Veicoli, spese e margini

Crea l'elenco dei veicoli con foto, marca e modello, prezzo esposto, stato e "giorni in stock" (in rosso oltre 60). Filtri per stato, marca e alimentazione.

La scheda del veicolo raccoglie dati, foto, documenti (libretto, perizia) nello Storage, e le spese aggiunte nel tempo. Il margine si calcola da solo: prezzo di vendita meno acquisto e spese (vista nei Dettagli tecnici).

I venditori vedono veicoli e prezzi esposti, ma non prezzi d'acquisto, spese e margini: questa regola la applica il database, non solo l'interfaccia.

4. Statistiche del salone

Pagina statistiche solo per il titolare: margine totale e medio del mese, tempo medio di vendita, veicoli fermi da più di 60 giorni con il capitale bloccato, spese per categoria.

Elenco clienti con i veicoli comprati e i contatti, ed esportazione delle vendite in CSV per il commercialista.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 29 € al mese. Gratis l'utente ha: 20 veicoli e un solo utente. Con il piano Pro sblocca: veicoli illimitati, collaboratori, documenti, statistiche ed esportazione.

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. Permessi: entra come venditore e prova a leggere il prezzo d'acquisto di un veicolo chiamando direttamente il database: deve essere bloccato.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Salone, ruoli e margini protetti

I dati riservati (acquisto e spese) stanno in tabelle che solo il titolare può leggere; il margine si calcola in una vista.

create table saloni (
  id uuid primary key default gen_random_uuid(),
  nome text not null
);

create table membri (
  salone_id uuid not null references saloni(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  ruolo text not null check (ruolo in ('titolare', 'venditore')),
  primary key (salone_id, utente_id)
);

create function mio_ruolo(salone uuid) returns text
language sql stable security definer set search_path = public as $
  select ruolo from membri where salone_id = salone and utente_id = auth.uid();
$;

create table veicoli (
  id uuid primary key default gen_random_uuid(),
  salone_id uuid not null references saloni(id) on delete cascade,
  marca text not null, modello text not null, anno int, km int,
  targa text, telaio text,
  prezzo_esposto int,
  stato text not null default 'in_vendita' check (stato in ('in_arrivo', 'in_vendita', 'venduto')),
  arrivato_il date not null default current_date
);

-- Dati riservati al titolare
create table acquisti (
  veicolo_id uuid primary key references veicoli(id) on delete cascade,
  salone_id uuid not null references saloni(id) on delete cascade,
  prezzo_acquisto int not null
);
create table spese (
  id uuid primary key default gen_random_uuid(),
  veicolo_id uuid not null references veicoli(id) on delete cascade,
  salone_id uuid not null references saloni(id) on delete cascade,
  categoria text not null,
  importo int not null
);
create table vendite (
  veicolo_id uuid primary key references veicoli(id) on delete cascade,
  salone_id uuid not null references saloni(id) on delete cascade,
  cliente text not null,
  prezzo_finale int not null,
  venduto_il date not null default current_date
);

alter table veicoli enable row level security;
alter table acquisti enable row level security;
alter table spese enable row level security;
alter table vendite enable row level security;

create policy "tutto il salone" on veicoli for all
  using (mio_ruolo(salone_id) is not null) with check (mio_ruolo(salone_id) is not null);
create policy "solo titolare" on acquisti for all
  using (mio_ruolo(salone_id) = 'titolare') with check (mio_ruolo(salone_id) = 'titolare');
create policy "solo titolare" on spese for all
  using (mio_ruolo(salone_id) = 'titolare') with check (mio_ruolo(salone_id) = 'titolare');
create policy "vendite del salone" on vendite for all
  using (mio_ruolo(salone_id) is not null) with check (mio_ruolo(salone_id) is not null);

-- Margine per veicolo (rispetta le regole: un venditore non vede righe)
create view margini with (security_invoker = true) as
  select v.id, v.marca, v.modello, a.prezzo_acquisto,
         coalesce(sum(s.importo), 0) as spese,
         ve.prezzo_finale,
         ve.prezzo_finale - a.prezzo_acquisto - coalesce(sum(s.importo), 0) as margine,
         ve.venduto_il - v.arrivato_il as giorni_per_vendere
  from veicoli v
  join acquisti a on a.veicolo_id = v.id
  left join spese s on s.veicolo_id = v.id
  left join vendite ve on ve.veicolo_id = v.id
  group by v.id, a.prezzo_acquisto, ve.prezzo_finale, ve.venduto_il;

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.
CSV
Un file di testo con i dati separati da virgole, che si apre con Excel.
Ruoli
Livelli di accesso diversi per persone diverse dello stesso team: il titolare vede tutto, il venditore solo una parte.