Paykit
Abbonamenti Stripe nella tua app senza il lavoro noioso
Cosa fa
Una libreria per sviluppatori che semplifica l'integrazione degli abbonamenti Stripe: prodotti definiti nel codice, notifiche gestite, stato dell'abbonamento già pronto nell'app.
Come guadagna
Progetto open source su GitHub con oltre 1.000 stelle, che non dichiara incassi. Ha licenza MIT: puoi partire dal suo codice, anche per un prodotto a pagamento, mantenendo il nome degli autori originali. Idee nostre per guadagnare: versione gestita e assistenza a pagamento per chi vende software.
Rendilo tuo
- Lo stesso per i pagamenti più usati in Italia: Satispay, PayPal, bonifico.
- Una guida in italiano per chi crea app con Lovable e vuole far pagare.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Abbonamenti in un File": un kit per sviluppatori che semplifica gli abbonamenti Stripe: piani e prezzi si scrivono in un file di configurazione, uno script li crea o aggiorna su Stripe, e il webhook tiene sincronizzato lo stato dell'abbonamento nel database. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con un esempio di configurazione e i prezzi
2. Documentazione: installazione, configurazione dei piani, webhook, controllo dei permessi
3. Esempi pronti per Next.js, Vite + Supabase, Express
4. Pannello: licenze e download dei modelli Pro
5. Pagina dei prezzi
Stile: da strumento per sviluppatori: sfondo bianco, viola Stripe #635BFF, blocchi di codice scuri, carattere "Inter" e "JetBrains Mono". 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:
- "licenze": chiave, email, piano (singolo progetto o team), collegate all'acquisto
- nel progetto del cliente: "abbonamenti" con utente, piano, stato, fine del periodo
Regole di sicurezza obbligatorie:
- la libreria è open source; i modelli Pro si scaricano con la licenza
- nel progetto del cliente lo stato dell'abbonamento lo scrive solo il webhook
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. Piani scritti nel codice
Lo sviluppatore descrive i piani in un file (nome, prezzo mensile e annuale, funzioni incluse, limiti). Il comando "sincronizza" crea su Stripe prodotti e prezzi che mancano e archivia quelli tolti, usando le lookup key per riconoscerli: si può lanciare più volte senza creare doppioni (codice nei Dettagli tecnici).
Il kit include il webhook già pronto che aggiorna la tabella "abbonamenti" (creato, rinnovato, disdetto, pagamento fallito) e una funzione "puo(utente, 'funzione')" per controllare i permessi nel codice e nel database.
Licenza MIT per la libreria; i modelli Pro (pagine prezzi, portale, email) si vendono a parte.
4. Documentazione ed esempi
Documentazione passo passo con esempi completi per tre stack diversi, test in modalità Stripe di prova, e guida per non sbagliare le cose difficili: verifica della firma del webhook, eventi che arrivano in ordine sparso, proroga dei pagamenti falliti.
Pannello per scaricare i modelli Pro con la licenza e ricevere gli aggiornamenti.
5. Pagamenti con Stripe
Aggiungi un pagamento singolo di 49 € per progetto, 149 € per team. Il pagamento invia la licenza per scaricare i modelli Pro e gli aggiornamenti per un anno.
A pagamento riuscito il webhook imposta "pagata" a true nella tabella "licenze", sulla riga del licenza 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. Idempotenza: lancia la sincronizzazione 3 volte di seguito sull'account Stripe di prova: i prodotti e i prezzi devono restare gli stessi, senza doppioni.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Sincronizzare i piani con Stripe senza doppioni
Legge i piani dalla configurazione e per ogni prezzo usa una lookup key fissa: se esiste già con lo stesso importo non fa nulla, altrimenti crea il nuovo prezzo e gli trasferisce la chiave.
import Stripe from "stripe";
type Piano = { id: string; nome: string; mensile: number; annuale: number }; // importi in centesimi
export const PIANI: Piano[] = [
{ id: "base", nome: "Base", mensile: 900, annuale: 9000 },
{ id: "pro", nome: "Pro", mensile: 2900, annuale: 29000 },
];
export async function sincronizza(stripe: Stripe, piani = PIANI) {
for (const p of piani) {
// Prodotto con id fisso: si crea solo se manca
const prodotto = await stripe.products.retrieve("prod_" + p.id).catch(() =>
stripe.products.create({ id: "prod_" + p.id, name: p.nome }));
for (const [intervallo, importo] of [["month", p.mensile], ["year", p.annuale]] as const) {
const chiave = p.id + "_" + intervallo;
const { data } = await stripe.prices.list({ lookup_keys: [chiave], active: true });
if (data[0]?.unit_amount === importo) continue; // già giusto: niente da fare
await stripe.prices.create({
product: prodotto.id,
currency: "eur",
unit_amount: importo,
recurring: { interval: intervallo },
lookup_key: chiave,
transfer_lookup_key: true, // la chiave passa al nuovo prezzo
});
if (data[0]) await stripe.prices.update(data[0].id, { active: false }); // il vecchio si archivia
console.log("Aggiornato " + chiave + ": " + importo / 100 + " €");
}
}
}
Pezzi comuni a tutti i progetti
Glossario
- Lookup key
- Un nome fisso che si dà a un prezzo su Stripe, per ritrovarlo dal codice anche quando l'importo cambia.
- Idempotente
- Un'operazione che si può ripetere quante volte si vuole ottenendo sempre lo stesso risultato.