← Tutte le idee Strumenti online

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.