Case Study
9 min lettura

Wiloo: SaaS di content marketing AI per PMI, con parità tra web app e bot WhatsApp

E

Elia Zavatta

Wiloo: SaaS di content marketing AI per PMI, con parità tra web app e bot WhatsApp

Le piccole imprese sanno di dover essere presenti sui social, ma spesso non hanno tempo, competenze o budget per un social media manager dedicato. Wiloo è un SaaS commissionato da un cliente esterno per risolvere esattamente questo problema: genera piani editoriali mensili per Instagram e Facebook, gestisce l'approvazione dei contenuti e permette il caricamento di foto, il tutto disponibile in parallelo su web app e bot WhatsApp.

Il mio ruolo è stato la progettazione tecnica e lo sviluppo end-to-end: dall'architettura del database al motore AI, fino al billing e all'integrazione con WhatsApp.

Il problema iniziale

L'agenzia che commissiona il progetto lavora con clienti che sanno di dover pubblicare contenuti regolarmente, ma delegano volentieri ideazione, scrittura e grafica: vogliono solo poter approvare o chiedere una modifica, nel modo più semplice possibile.

  • Molti titolari di piccole imprese usano quasi esclusivamente WhatsApp, non un'app dedicata.
  • Serve un flusso di approvazione rapido, senza login complessi o passaggi su più strumenti.
  • Il contenuto deve essere coerente con tono di voce, settore e obiettivi dell'azienda, non generico.
  • Serve un modello di billing sostenibile con crediti mensili per le operazioni AI.
  • La pubblicazione automatica su Instagram/Facebook richiede permessi Meta non immediati da ottenere.

La soluzione sviluppata

Ho costruito un'unica architettura con due aree applicative (`/admin` per l'agenzia, `/client` per l'azienda cliente) che condividono lo stesso database e lo stesso motore conversazionale. La scelta più importante è stata trattare web e WhatsApp come lo stesso prodotto: ogni azione disponibile in app deve funzionare identica via chat, perché per molti clienti il telefono è l'unica interfaccia che useranno davvero.

  • Onboarding guidato via form web o via bot WhatsApp che costruisce il profilo AI dell'azienda e genera subito un primo mini-piano editoriale.
  • Generazione del piano editoriale mensile: caption, hashtag e formato (post, carosello, story) coerenti col profilo aziendale.
  • Generazione ed editing reale di immagini AI, non solo rigenerazione della caption.
  • Approvazione contenuti dall'app o da un bottone interattivo su WhatsApp, con richiesta di modifica testuale.
  • Billing Stripe con piani, crediti mensili per operazione AI, trial, upgrade/downgrade con proration e portale clienti self-service.
  • Memoria cliente: l'assistente estrae automaticamente preferenze e richieste ricorrenti dalle conversazioni e le riusa nelle generazioni successive.

Decisioni tecniche interessanti

Invece di duplicare la logica di business tra webhook WhatsApp e chat web, ogni intent (approva, chiedi modifica, genera immagine, rigenera caption) vive in funzioni core condivise, richiamate sia dalle Server Action web sia dal webhook: una feature nuova diventa così automaticamente disponibile su entrambi i canali.

  • Crediti con reset mensile, non accumulo: un webhook Stripe può arrivare due volte e le fatture di proration non devono regalare crediti extra, quindi l'accredito è idempotente e ancorato all'ID fattura.
  • Feature complete ma spente dietro un gate: la pubblicazione automatica su Meta è sviluppata per intero (claim atomico, cifratura token, recovery job bloccati) ma resta disattivata da un singolo flag finché l'app review di Meta non approva i permessi.
  • Test con mock ai confini, non ai moduli interni: la suite Vitest intercetta le chiamate verso l'API OpenAI a livello di fetch, così il codice di produzione resta testato per intero e un solo interruttore permette di ripetere gli stessi test contro l'AI reale.

Sfide affrontate

  • Sincronizzazione stato asincrono: il flusso Checkout → webhook Stripe → attivazione abbonamento è intrinsecamente asincrono, risolto con una schermata di attesa che fa polling dello stato invece di un redirect immediato.
  • Doppio addebito crediti: un bug in cui due punti diversi del codice autorizzavano la stessa operazione AI, scoperto grazie ai test automatici.
  • Drift di schema tra database locale e produzione: essendo due Supabase separati, ogni modifica va propagata manualmente, gestita con script SQL idempotenti quando lo strumento di migrazione andava in crash su una tabella interna di Supabase.

Stack tecnico

  • Framework: Next.js 15 (App Router, Turbopack), TypeScript strict.
  • UI: TailwindCSS v4 e shadcn/ui.
  • Database: PostgreSQL su Supabase via Drizzle ORM, con Supabase Auth SSR e Storage.
  • AI: Vercel AI SDK con OpenAI GPT-4o per il testo, generazione ed editing immagini via API OpenAI.
  • Pagamenti: Stripe (Checkout, Customer Portal, webhook).
  • WhatsApp: Meta Cloud API v25. Email: Resend. Hosting: Vercel.
  • Test: Vitest, con database dedicato e mock a livello fetch per le chiamate OpenAI.

Risultato

Fase 1 (MVP funzionale) e Fase 2 (billing commerciale) sono completate e in produzione. La Fase 3, la pubblicazione automatica su Meta, è pronta a livello di codice e attivabile senza toccare una riga, in attesa dell'approvazione dei permessi da parte di Meta.

  • Un solo motore conversazionale invece di due prodotti separati da mantenere per web e WhatsApp.
  • Billing a crediti robusto anche a fronte di webhook duplicati e proration su upgrade/downgrade.
  • Automazioni AI già pronte per la pubblicazione diretta sui social, attivabili con un flag.
  • Suite di test che copre anche l'integrazione con provider AI esterni, non solo la logica interna.

Cosa può copiare un'altra azienda

Lo schema è replicabile da qualsiasi agenzia o software house che vuole offrire un servizio AI ricorrente a clienti PMI poco tecnici:

  • Un'agenzia di marketing può trasformare un servizio manuale in un prodotto SaaS scalabile con billing automatico.
  • Qualsiasi prodotto rivolto a clienti non tecnici beneficia di un canale WhatsApp con parità funzionale rispetto alla web app.
  • Un modello a crediti AI idempotente evita sorprese di fatturazione quando si integrano webhook di pagamento esterni.
  • Sviluppare feature complete ma dietro feature flag permette di non bloccarsi sui tempi di approvazione di terze parti (Meta, App Store, ecc).

Vuoi trasformare un servizio che offri manualmente in un SaaS con AI, billing e canale WhatsApp? Posso progettare e sviluppare l'intera piattaforma, dall'architettura alla produzione.

Tecnologie

Next.jsNext.jsSupabaseSupabaseStripeOpenAIDrizzle ORM

Hai un progetto in mente?

Hai un progetto simile? Possiamo definire insieme architettura, roadmap e rilascio.

Contattami ora