← Tutte le idee Marketing e social

Postiz

Programmi i post di tutti i social in un posto, e l'AI li scrive per te

Incasso mensile: 330.353 USD (fonte indicata nella scheda)

Cosa fa

Strumento per pianificare, scrivere con l'AI e pubblicare in automatico i post su più social. È anche open source: il codice è pubblico e chiunque può installarlo.

Come guadagna

Abbonamenti da 29 $ al mese con 7 giorni di prova. Quasi 9.700 abbonati. Nato a luglio 2024. Incassi verificati con Stripe.

Rendilo tuo

  • Solo per attività locali italiane: ristoranti, parrucchieri, palestre, con idee di post per le feste italiane.
  • Calendario editoriale già pronto per settore.
  • Approvazione dei post da parte del cliente, per chi gestisce i social di altri.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Postino Social": un programmatore di post per Instagram, Facebook, LinkedIn e TikTok pensato per le attività locali: l'AI propone e scrive i post, l'utente approva, l'app pubblica all'ora giusta. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con un calendario d'esempio e i prezzi
2. Registrazione e collegamento degli account social
3. Calendario della settimana e del mese con i post programmati
4. Nuovo post: testo, foto, social su cui pubblicare, data e ora
5. Idee: l'AI propone i post della settimana per l'attività

Stile: allegro e ordinato: sfondo #FAFAFA, viola #7C3AED, corallo #FB7185, carattere "Poppins", calendario a schede colorate per social. 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:
- "account_social": tipo di social, nome dell'account, token di accesso cifrato, scadenza
- "post": testo, immagini, social scelti, data e ora di pubblicazione, stato (bozza, programmato, pubblicato, errore)
- "attivita": tipo di attività, città, tono di voce, per le idee dell'AI

Regole di sicurezza obbligatorie:
- ogni utente vede solo i suoi account e i suoi post
- i token dei social non tornano mai al browser: si usano solo nelle Edge Function
- 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. Pubblicazione automatica all'ora giusta

Ogni minuto un cron di Supabase cerca i post "programmati" con l'ora già passata e chiama la Edge Function "pubblica", che li manda ai social con le API ufficiali (Meta Graph API per Instagram e Facebook, LinkedIn API, TikTok Content Posting API). Esito salvato sul post: pubblicato con il link, oppure errore con il motivo in italiano.

Collegamento degli account con il login ufficiale di ogni social (OAuth): l'utente non dà mai la password all'app. I token si salvano cifrati e si rinnovano prima della scadenza.

Nota: per pubblicare su Instagram e TikTok le app devono passare la revisione di Meta e TikTok. Inizia con Facebook e LinkedIn, che sono più rapidi.

4. Le idee della settimana

Ogni lunedì l'AI propone 5 post per l'attività: tipo di attività, città, tono di voce, ricorrenze della settimana (festa del papà, inizio dei saldi, ponte del 2 giugno). L'utente li modifica, sceglie le foto e li mette in calendario trascinandoli.

Statistiche semplici per ogni post pubblicato (mi piace, commenti, visualizzazioni) lette dalle API dei social.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 14,99 € al mese, 7 giorni di prova. Gratis l'utente ha: 2 account social e 10 post al mese. Con il piano Pro sblocca: account e post illimitati, idee dell'AI ogni settimana e statistiche.

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. Pubblicazione: programma un post di prova su una pagina Facebook fra 2 minuti e controlla che esca all'ora giusta e che lo stato diventi "pubblicato".
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Post programmati e cron

La tabella dei post e il cron che ogni minuto avvia la pubblicazione di quelli arrivati all'ora giusta.

create table post (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,
  testo text not null,
  immagini text[] not null default '{}',
  social text[] not null,                       -- es. {facebook, linkedin}
  quando timestamptz not null,
  stato text not null default 'programmato' check (stato in ('bozza', 'programmato', 'in_corso', 'pubblicato', 'errore')),
  esito jsonb
);
create index on post (stato, quando);
alter table post enable row level security;
create policy "le mie righe" on post
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

-- Ogni minuto: chiama la Edge Function "pubblica" (che prende i post con stato = 'programmato' e quando <= now())
select cron.schedule('pubblica-post', '* * * * *', $
  select net.http_post(
    url := 'https://TUO-PROGETTO.supabase.co/functions/v1/pubblica',
    headers := jsonb_build_object('Authorization', 'Bearer ' || (select decrypted_secret from vault.decrypted_secrets where name = 'chiave_cron'))
  );
$);

Pubblicare su una pagina Facebook

Dentro la Edge Function "pubblica": manda il post alla pagina con la Graph API ufficiale, usando il token della pagina salvato in modo sicuro.

export async function pubblicaFacebook(paginaId: string, tokenPagina: string, testo: string, foto?: string) {
  const base = "https://graph.facebook.com/v21.0/" + paginaId;
  const corpo = new URLSearchParams({ access_token: tokenPagina });
  let indirizzo = base + "/feed";
  if (foto) { indirizzo = base + "/photos"; corpo.set("url", foto); corpo.set("caption", testo); }
  else corpo.set("message", testo);

  const r = await fetch(indirizzo, { method: "POST", body: corpo });
  const dati = await r.json();
  if (!r.ok) throw new Error(dati.error?.message ?? "Facebook non ha accettato il post");
  return dati.post_id ?? dati.id;     // salvato nell'esito del post
}

Pezzi comuni a tutti i progetti

Glossario

Cron
Un'operazione programmata che parte da sola a orari fissi, per esempio ogni lunedì mattina.
OAuth
Il login ufficiale di un servizio (es. "Accedi con Facebook") che dà all'app un permesso limitato senza farle conoscere la password.
Open source
Software con il codice pubblico: chiunque può leggerlo e installarlo, spesso si guadagna con la versione già pronta online.