🤖 Cos'è Lovable.dev — il "full-stack AI developer"
Lovable.dev (fondato nel 2023, ex GPT Engineer) è una piattaforma che usa l'AI per generare applicazioni web full-stack complete partendo da descrizioni in linguaggio naturale. Non è un builder drag-and-drop come Wix: genera codice React/TypeScript reale, integra Supabase come backend (database + autenticazione + storage) e permette di deployare con un click. Il codice è esportabile su GitHub.
▶ Frontend: React 18 + TypeScript + Tailwind CSS + Shadcn/UI
▶ Backend: Supabase (PostgreSQL + Auth + Storage + Edge Functions)
▶ Pagamenti: Stripe (via Supabase Edge Functions) / PayPal
▶ Hosting: Lovable Cloud (incluso) oppure export su Vercel/Netlify
▶ Versioning: GitHub sync automatico
✅ Scegli Lovable se: vuoi un MVP e-commerce funzionante in ore anziché settimane, hai bisogno di personalizzazione completa (è codice reale), vuoi integrazioni custom non disponibili su Shopify/Wix, o stai prototipando rapidamente per validare un'idea di business.
⚠️ Non scegliere Lovable se: non hai nessuna familiarità con i concetti di sviluppo web (l'AI aiuta ma devi capire cosa genera), hai bisogno di un ecosistema di plugin pronto come Shopify, o il tuo e-commerce è semplice e non richiede personalizzazione (Shopify/Wix sono più veloci).
💰 Piani Lovable.dev 2026
| Piano | Prezzo | Crediti/mese | Note |
| Free | € 0 | 5 messaggi/giorno | Progetti pubblici, hosting Lovable |
| Starter | ~€ 20/mese | 100 crediti | Progetti privati, custom domain |
| Pro | ~€ 50/mese | 500 crediti | Priorità AI, collaboratori |
| Teams | ~€ 40/utente | Illimitati | Team collaboration, white label |
💡 Costi Supabase separati: Lovable usa Supabase come backend — il piano Free di Supabase (500MB DB, 50.000 auth users, 2GB storage) è sufficiente per iniziare. Per produzione con volumi reali considera il piano Pro Supabase ($25/mese).
✍️ Come scrivere prompt efficaci — principi chiave
La qualità del prompt determina la qualità del codice generato. Un buon prompt per Lovable è specifico, strutturato e progressivo: non chiedere tutto in una volta, costruisci per iterazioni.
| Principio | Esempio SBAGLIATO | Esempio CORRETTO |
| Specificità | "Crea un negozio online" | "Crea un negozio React con catalogo prodotti, carrello e checkout Stripe — prodotti salvati in Supabase" |
| Stack esplicito | "Aggiungi pagamenti" | "Integra Stripe Checkout con Supabase Edge Functions — usa stripe-js sul frontend e stripe-node nel backend" |
| Progressività | Prompt da 500 parole tutto insieme | Step 1: struttura → Step 2: database → Step 3: UI → Step 4: pagamenti |
| Contesto tecnico | "Aggiungi un database" | "Crea tabelle Supabase: products (id, name, price, stock, image_url), orders (id, user_id, total, status)" |
| Norma IT esplicita | "Aggiungi i cookie" | "Aggiungi un cookie banner conforme al Garante Privacy italiano con consenso granulare per analytics/marketing" |
📋 Prompt 1 — Struttura iniziale e-commerce
Primo prompt da usare per creare la struttura base del progetto:
PROMPT FONDATIVO — usa questo come primo messaggio:
Crea un'applicazione e-commerce React con TypeScript e Tailwind CSS.
Stack: React 18, Supabase, Shadcn/UI.
Struttura pagine:
- / → Homepage con hero section e prodotti in evidenza
- /products → Catalogo prodotti con filtri categoria e ricerca
- /products/:id → Scheda prodotto con galleria immagini, varianti, aggiungi al carrello
- /cart → Carrello con modifica quantità e riepilogo
- /checkout → Form checkout + integrazione Stripe
- /orders → Storico ordini utente (solo loggati)
- /admin → Dashboard admin: gestione prodotti e ordini
Funzionalità richieste:
- Autenticazione Supabase (email + password + Google OAuth)
- Carrello persistente su Supabase per utenti loggati, localStorage per anonimi
- Wishlist prodotti
- Design: palette neutro con accent viola, mobile-first, responsive
// Non aggiungere ancora i pagamenti — gestiremo Stripe in un secondo step
📋 Prompt 2 — Schema database Supabase
PROMPT DATABASE — da inviare dopo la struttura base:
Crea lo schema SQL Supabase per il negozio. Esegui questo SQL nell'editor Supabase:
Tabelle richieste:
CREATE TABLE products (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
price DECIMAL(10,2) NOT NULL,
stock INTEGER DEFAULT 0,
category TEXT,
image_url TEXT,
images TEXT[], -- array URL immagini
active BOOLEAN DEFAULT true,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE orders (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
user_id UUID REFERENCES auth.users(id),
status TEXT DEFAULT 'pending', -- pending|paid|shipped|delivered|cancelled
total DECIMAL(10,2) NOT NULL,
stripe_payment_id TEXT,
shipping_address JSONB,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE order_items (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
order_id UUID REFERENCES orders(id),
product_id UUID REFERENCES products(id),
quantity INTEGER NOT NULL,
price_at_purchase DECIMAL(10,2) NOT NULL
);
-- Abilita Row Level Security per sicurezza
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
-- Policy: utenti vedono solo i propri ordini
CREATE POLICY "Users see own orders" ON orders
FOR SELECT USING (auth.uid() = user_id);
📋 Prompt 3 — UI catalogo prodotti
PROMPT UI PRODOTTI:
Nella pagina /products implementa:
1. Griglia prodotti con card responsive (4 col desktop, 2 tablet, 1 mobile)
- Immagine prodotto con lazy loading
- Badge "Esaurito" se stock = 0
- Prezzo formattato in EUR con Intl.NumberFormat
- Pulsante "Aggiungi al carrello" disabilitato se esaurito
2. Filtri sidebar:
- Selezione categoria (dropdown o chip)
- Range prezzo (slider min/max)
- Solo disponibili (checkbox)
- Ordinamento: prezzo asc/desc, novità
3. Ricerca full-text in tempo reale con debounce 300ms
4. Paginazione con 12 prodotti per pagina
Query Supabase di riferimento:
supabase.from('products')
.select('*')
.eq('active', true)
.ilike('name', '%' + searchTerm + '%')
.gte('price', minPrice)
.lte('price', maxPrice)
.order('created_at', { ascending: false })
.range(from, to)
🗄️ Supabase — il backend di Lovable
Supabase è il backend open source usato da Lovable. Fornisce PostgreSQL, autenticazione, storage file e Edge Functions (serverless) — tutto ciò che serve per un e-commerce completo.
| Servizio Supabase | Uso in e-commerce | Piano richiesto |
| PostgreSQL Database | Prodotti, ordini, utenti, carrello | Free fino a 500MB |
| Authentication | Login, registrazione, OAuth (Google, Apple) | Free fino a 50.000 utenti |
| Storage | Immagini prodotti, file digitali | Free fino a 1GB |
| Edge Functions | Stripe webhook, logica pagamento, email | Free 500.000 invocazioni/mese |
| Realtime | Aggiornamento stock in tempo reale | Free 2M messaggi/mese |
| Row Level Security | Sicurezza: ogni utente vede solo i propri dati | Free — sempre attivo |
✅ Row Level Security (RLS): è fondamentale abilitarla su tutte le tabelle sensibili. Impedisce che un utente malintenzionato legga ordini o dati di altri utenti tramite query dirette all'API Supabase.
📋 Prompt 4 — Admin dashboard prodotti
PROMPT ADMIN PANEL:
Nella pagina /admin (accessibile solo agli utenti con ruolo 'admin') crea:
1. Lista prodotti con tabella: nome, prezzo, stock, categoria, attivo/disattivo
- Toggle attivo/disattivo inline
- Bottone modifica e cancella per ogni riga
2. Form aggiungi/modifica prodotto:
- Input: nome, descrizione (richtext), prezzo, stock, categoria
- Upload immagine principale → carica su Supabase Storage
- Upload immagini aggiuntive (max 5)
- Preview immagini prima del salvataggio
3. Dashboard ordini:
- Tabella ordini con stato, totale, data, cliente
- Filtro per stato (pending/paid/shipped/delivered)
- Bottone modifica stato ordine
Per il controllo ruolo admin, aggiungi a Supabase:
-- In auth.users metadata o tabella profiles separata
CREATE TABLE profiles (
id UUID REFERENCES auth.users PRIMARY KEY,
role TEXT DEFAULT 'customer'
);
-- Policy admin: solo ruolo 'admin' vede tutti gli ordini
CREATE POLICY "Admin sees all orders" ON orders
FOR ALL USING (
EXISTS (SELECT 1 FROM profiles WHERE id = auth.uid() AND role = 'admin')
);
💳 Integrazione Stripe — architettura corretta
In Lovable/Supabase, Stripe si integra tramite Supabase Edge Functions (serverless) — la chiave segreta Stripe non va mai esposta nel frontend React. Il flusso corretto è: Frontend → Edge Function (verifica + crea sessione) → Stripe → Webhook → Database.
1️⃣ Utente clicca "Paga" nel frontend React
2️⃣ Frontend chiama Supabase Edge Function /create-checkout
3️⃣ Edge Function crea Stripe Checkout Session (chiave segreta sicura)
4️⃣ Frontend riceve URL Stripe → redirect su pagina Stripe
5️⃣ Cliente paga su Stripe (PCI compliant)
6️⃣ Stripe chiama Webhook → Edge Function /stripe-webhook
7️⃣ Webhook aggiorna ordine su Supabase: status → 'paid'
8️⃣ Redirect su /order-success?session_id=...
📋 Prompt 5 — Integrazione Stripe Checkout
PROMPT STRIPE — integrazione pagamenti:
Integra Stripe Checkout nel negozio. Usa Supabase Edge Functions per sicurezza.
Edge Function 1: /functions/v1/create-checkout
- Riceve: { items: [{product_id, quantity}], user_id, success_url, cancel_url }
- Verifica stock disponibile per ogni prodotto
- Calcola totale con IVA 22% (importo × 1.22)
- Crea Stripe Checkout Session con:
- line_items dai prodotti (nome, prezzo, quantità, immagine)
- metadata: { user_id, order_items: JSON.stringify(items) }
- success_url: '/order-success?session_id={CHECKOUT_SESSION_ID}'
- cancel_url: '/cart'
- payment_method_types: ['card']
- billing_address_collection: 'required'
- shipping_address_collection con allowed_countries: ['IT', 'EU']
- Crea ordine in Supabase con status 'pending' e stripe_session_id
- Ritorna: { url: checkoutUrl }
Edge Function 2: /functions/v1/stripe-webhook
- Verifica firma webhook con STRIPE_WEBHOOK_SECRET
- Gestisce evento checkout.session.completed:
- Recupera session.metadata.user_id e order_items
- Aggiorna ordine su Supabase: status → 'paid'
- Scala lo stock di ogni prodotto
- (Opzionale) Invia email conferma tramite Resend/SendGrid
Nel frontend React, in /checkout:
const handlePayment = async () => {
const { data } = await supabase.functions.invoke('create-checkout', {
body: { items: cartItems, user_id: user.id,
success_url: window.location.origin + '/order-success',
cancel_url: window.location.origin + '/cart' }
});
window.location.href = data.url; // redirect a Stripe
};
📋 Prompt 6 — Integrazione PayPal
PROMPT PAYPAL — alternativa a Stripe:
Aggiungi PayPal come secondo metodo di pagamento nel checkout.
Usa @paypal/react-paypal-js per il frontend.
Setup nel componente Checkout:
import { PayPalScriptProvider, PayPalButtons } from '@paypal/react-paypal-js';
Flusso PayPal Orders API v2:
1. Al click PayPal → Edge Function /create-paypal-order
- Crea ordine PayPal con amount.value = totale_con_iva
- currency_code: 'EUR'
- Ritorna: orderId
2. PayPal gestisce il pagamento lato suo
3. onApprove callback → Edge Function /capture-paypal-order
- Cattura il pagamento con orderId
- Verifica capture.status === 'COMPLETED'
- Aggiorna ordine Supabase: status → 'paid', paypal_order_id
Nel component:
<PayPalScriptProvider options={{ 'client-id': import.meta.env.VITE_PAYPAL_CLIENT_ID, currency: 'EUR' }}>
<PayPalButtons
createOrder={async () => (await supabase.functions.invoke('create-paypal-order', { body: { amount: total } })).data.orderId}
onApprove={async (data) => await supabase.functions.invoke('capture-paypal-order', { body: { orderId: data.orderID } })}
/>
</PayPalScriptProvider>
// IMPORTANTE: PayPal client-id va in .env.local come VITE_PAYPAL_CLIENT_ID
// PayPal secret va solo nelle Edge Functions (variabile ambiente Supabase)
⚖️ Normativa IT — prompt per conformità legale
Un e-commerce Lovable deve rispettare la normativa italiana ed europea come qualsiasi altro negozio online. Ecco i prompt specifici per ogni adempimento.
| Obbligo | Normativa | Prompt da usare |
| Cookie Banner conforme IT | Garante 2021 | Prompt 7 — vedi sotto |
| Privacy Policy + T&C | GDPR 679/2016 | "Crea pagine /privacy e /terms con testo placeholder conforme GDPR. Aggiungi link nel footer." |
| IVA 22% in checkout | DPR 633/72 | "Nel riepilogo ordine mostra: subtotale (imponibile), IVA 22% e totale separati" |
| Recesso 14 giorni | D.Lgs. 21/2014 | "In /orders aggiungi pulsante 'Richiedi recesso' disponibile entro 14gg dall'acquisto" |
| Info venditore obbligatorie | Codice Consumo | "Nel footer mostra: P.IVA, ragione sociale, sede legale, email PEC, REA" |
| Consenso esplicito T&C | Codice Consumo | "Nel checkout aggiungi checkbox obbligatoria: 'Accetto i T&C e la Privacy Policy' prima del pulsante Paga" |
| Email conferma ordine | Dir. 2011/83/UE | "Nel webhook Stripe invia email conferma con riepilogo ordine usando Resend API" |
📋 Prompt 7 — Cookie Banner conforme Garante IT
PROMPT COOKIE BANNER GDPR/GARANTE IT:
Aggiungi un cookie banner conforme al Garante Privacy italiano (provvedimento 2021).
Requisiti obbligatori:
- Appare al primo accesso in basso (posizione sticky)
- NON pre-selezionare i cookie non essenziali (violazione GDPR)
- 3 categorie distinte con toggle on/off:
1. Tecnici/necessari → sempre attivi, non modificabili (toggle disabilitato)
2. Analytics (es. Google Analytics) → disattivati di default
3. Marketing → disattivati di default
- Pulsante "Accetta tutti" e "Personalizza" e "Rifiuta tutti"
- Link a Privacy Policy e Cookie Policy
- Scelta salvata in localStorage ('cookie_consent')
- Se l'utente rifiuta: non caricare GA né script marketing
Implementazione React:
- Componente CookieBanner globale in App.tsx
- Hook useCookieConsent() che legge localStorage
- Carica Google Analytics solo se consent.analytics === true
- Rende disponibile bottone "Gestisci preferenze cookie" nel footer
📋 Prompt 8 — IVA italiana nel checkout
PROMPT IVA 22%:
Nel riepilogo carrello e checkout, mostra la scomposizione IVA italiana:
Calcolo corretto per prezzi IVA-inclusi (consumer italiano):
const ivaRate = 0.22;
const totalConIva = cartTotal; // prezzo finale
const imponibile = totalConIva / (1 + ivaRate); // base imponibile
const ivaAmount = totalConIva - imponibile; // IVA
Nel riepilogo ordine mostra:
- Subtotale (imponibile): €XX,XX
- IVA 22%: €XX,XX
- Spedizione: €X,XX (o GRATIS sopra soglia)
- Totale: €XX,XX
A Stripe passa sempre l'importo in centesimi con IVA inclusa:
const amountInCents = Math.round(totalConIva * 100);
// Stripe gestisce automaticamente la valuta EUR
Nel Stripe Dashboard IT:
// Imposta Tax Rates in Stripe per applicare IVA automatica
// oppure gestisci tu la scomposizione come sopra
🔄 Lovable vs piattaforme tradizionali — quando ha senso
| Criterio | Lovable.dev | Shopify | PrestaShop |
| Tempo al primo deploy | Ore (con AI) | Giorni | Settimane |
| Personalizzazione UI | ⭐⭐⭐⭐⭐ Totale | ⭐⭐⭐ Limitata | ⭐⭐⭐⭐ Alta |
| Commissioni piattaforma | 0% | 0-2% | 0% |
| Ecosistema plugin pronto | ❌ No | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Competenze richieste | Base coding/AI | Zero | Intermediate |
| Costo mensile (base) | €20 + €0 Supabase | €29 | €20-50 hosting |
| Export codice | ✅ GitHub | ❌ No | ✅ Sì |
| Funzioni custom | ✅ Illimitate | ⚠️ Solo via app | ⚠️ Via moduli |
| Logica business custom | ✅ Edge Functions | ⚠️ Limitata | ⚠️ PHP custom |
💡 Lovable è ideale per: startup che vogliono un MVP unico e personalizzato, marketplace o logiche di business non standard, negozi con funzionalità custom (preventivi, configuratori prodotto, abbonamenti complessi) o developer che vogliono accelerare il lavoro senza scrivere tutto da zero.
⚠️ Lovable NON sostituisce Shopify per: negozi con catalogo ampio che necessitano di migliaia di integrazioni pronte (ERP, marketplace, logistica), team non tecnici che devono gestire il negozio autonomamente, o chi ha bisogno di supporto 24/7 certificato.