← Tutte le idee Marketing e social

BlackTwist

Gli strumenti per crescere su Threads

Incasso mensile: 2300 USD (fonte indicata nella scheda)

Cosa fa

Raccolta di strumenti per chi crea contenuti su Threads: programmazione dei post, statistiche, idee.

Come guadagna

Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.

Rendilo tuo

  • Concentrati su un solo social nuovo che cresce: chi arriva prima prende gli utenti.
  • In italiano, per creator italiani.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Filo": aiuta chi crea contenuti su Threads a programmare i post, vedere le statistiche e trovare idee, usando le API ufficiali di Meta. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con calendario di esempio e prezzi
2. Registrazione e collegamento dell'account Threads
3. Calendario dei post programmati
4. Editor del post con anteprima e contatore di 500 caratteri
5. Statistiche dei post: visualizzazioni, like, risposte

Stile: minimal come Threads: sfondo bianco, nero #000000, grigi, un solo accento viola #7C3AED, carattere "Inter", molto spazio. 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": id dell'utente Threads e token di accesso (salvato cifrato, letto solo dal server), collegati all'utente
- "post": testo, data e ora programmata, stato (bozza, programmato, pubblicato, errore), id del post su Threads, statistiche

Regole di sicurezza obbligatorie:
- ogni utente vede solo i suoi post
- i token di Threads non sono mai leggibili dal browser
- la pubblicazione la fa solo la Edge Function

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. Programmare e pubblicare

Collega l'account con il login ufficiale di Threads (Threads API di Meta), chiedendo solo i permessi per pubblicare e leggere le statistiche. Salva il token lato server; rinnovalo prima della scadenza.

Editor del post: testo fino a 500 caratteri con contatore, anteprima, divisione automatica di un testo lungo in una serie di post collegati, e scelta di data e ora. Il calendario mostra la settimana con i post programmati, spostabili trascinandoli.

Ogni 5 minuti una Edge Function pubblica i post arrivati all'orario, con i due passaggi richiesti dall'API (codice nei Dettagli tecnici). Se fallisce, il post passa a "errore" con il motivo e l'utente riceve un'email.

4. Statistiche e idee

Ogni giorno leggi dall'API le statistiche dei post pubblicati: visualizzazioni, like, risposte, ricondivisioni. Pagina statistiche con i post migliori, il giorno e l'ora in cui i post rendono di più, e l'andamento dei follower.

Pulsante "Idee": partendo dai 5 post migliori, Claude propone 10 spunti nello stesso stile, da modificare prima di programmarli.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 9 € al mese. Gratis l'utente ha: 5 post programmati e statistiche di 7 giorni. Con il piano Pro sblocca: post illimitati, serie di post, statistiche complete e idee con l'AI.

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 tra 6 minuti e controlla che esca una volta sola, anche se la funzione parte due volte.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Pubblicare su Threads in due passaggi

L'API ufficiale chiede prima di creare il post (un "contenitore") e poi di pubblicarlo. Il token resta sul server.

const API = "https://graph.threads.net/v1.0";

export async function pubblicaSuThreads(utenteThreads: string, token: string, testo: string) {
  // 1. Crea il contenitore del post
  const crea = await fetch(API + "/" + utenteThreads + "/threads", {
    method: "POST",
    body: new URLSearchParams({ media_type: "TEXT", text: testo, access_token: token }),
  });
  const contenitore = await crea.json();
  if (!crea.ok) throw new Error(contenitore.error?.message ?? "Creazione non riuscita");

  // 2. Pubblica il contenitore
  const pubblica = await fetch(API + "/" + utenteThreads + "/threads_publish", {
    method: "POST",
    body: new URLSearchParams({ creation_id: contenitore.id, access_token: token }),
  });
  const risultato = await pubblica.json();
  if (!pubblica.ok) throw new Error(risultato.error?.message ?? "Pubblicazione non riuscita");
  return risultato.id as string;                       // id del post pubblicato
}

Post programmati senza doppioni

La funzione prende i post arrivati all'orario e li segna "in pubblicazione" in un colpo solo: anche se parte due volte, ogni post viene preso una volta.

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 check (length(testo) <= 500),
  programmato_il timestamptz,
  stato text not null default 'bozza'
    check (stato in ('bozza', 'programmato', 'in_pubblicazione', 'pubblicato', 'errore')),
  id_threads text,
  errore text,
  statistiche jsonb not null default '{}'
);

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);

create function post_da_pubblicare() returns setof post
language sql security definer set search_path = public as $
  update post set stato = 'in_pubblicazione'
  where id in (
    select id from post
    where stato = 'programmato' and programmato_il <= now()
    for update skip locked
  )
  returning *;
$;
revoke execute on function post_da_pubblicare() from public, anon, authenticated;
grant execute on function post_da_pubblicare() to service_role;

select cron.schedule('pubblica-threads', '*/5 * * * *', $
  select net.http_post(
    url := 'https://TUO-PROGETTO.supabase.co/functions/v1/pubblica',
    headers := jsonb_build_object('Authorization', 'Bearer TUA-CHIAVE-CRON')
  );
$);

Pezzi comuni a tutti i progetti

Glossario

Cron
Un'operazione programmata che parte da sola a orari fissi, per esempio ogni lunedì mattina.
JSONB
Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
Token di accesso
Una chiave temporanea che Threads dà al sito per agire a nome dell'utente, solo per i permessi concessi.