← Tutte le idee Marketing e social

Strumento AI per crescere su YouTube

Giudica copertine e titoli dei video su YouTube e li migliora

Incasso mensile: 942 USD (fonte indicata nella scheda)

Cosa fa

Strumenti AI per chi ha un canale YouTube: "stronca" le copertine e i titoli, li riscrive, analizza il canale e fa test tra copertine diverse.

Come guadagna

Incasso annuo dichiarato di circa 11.300 $ nell'annuncio di vendita su Microns, che verifica i dati; è stato venduto per circa 3.000 $. Il nome del progetto non è pubblico.

Rendilo tuo

  • Per creator italiani, con esempi di canali italiani che funzionano.
  • La "stroncatura" divertente da condividere è un ottimo modo per farsi conoscere.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Copertina Giusta": aiuta chi ha un canale YouTube a migliorare copertine e titoli: giudizio onesto dell'AI, proposte di titoli e test tra due copertine sullo stesso video. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con un esempio di giudizio e prezzi
2. Registrazione e collegamento del canale YouTube
3. Giudizio: carica copertina e titolo, ricevi voto e consigli
4. Test A/B: due copertine alternate su un video, con i risultati
5. Analisi del canale: video migliori e peggiori

Stile: da creator: sfondo scuro #0F0F0F, rosso YouTube #FF0033, bianco, carattere "Roboto", anteprime delle copertine come appaiono su YouTube da telefono e da computer. 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:
- "canali": id del canale YouTube e token (solo lato server), collegati all'utente
- "giudizi": copertina, titolo, voto, consigli
- "test": video, copertina A e B, data di inizio, visualizzazioni per ogni giorno con l'una o l'altra copertina, vincitrice

Regole di sicurezza obbligatorie:
- ogni utente vede solo i suoi canali, giudizi e test
- i token di YouTube non sono mai leggibili dal browser
- i crediti non si modificano 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. Il giudizio sulla copertina

L'utente carica la copertina (1280×720) e scrive il titolo. La Edge Function "giudizio" (un credito) mostra l'immagine a Claude, che risponde in JSON: voto da 1 a 10, cosa si capisce in 1 secondo, leggibilità del testo da telefono, contrasto, emozione del volto se c'è, coerenza con il titolo, e 3 correzioni concrete. In più 5 titoli alternativi, onesti e senza clickbait ingannevole.

Mostra la copertina rimpicciolita come appare nei risultati da telefono, accanto alle 3 copertine di video simili che l'utente vuole confrontare (le carica lui).

4. Test tra due copertine

Con il canale collegato (login Google e YouTube Data API, permesso di gestire le miniature) l'utente sceglie un video e due copertine. Una funzione programmata cambia la copertina ogni 24 ore per 8 giorni (codice nei Dettagli tecnici) e ogni giorno legge le visualizzazioni dall'API YouTube Analytics.

Alla fine mostra le visualizzazioni medie al giorno con la copertina A e con la B e lascia attiva la vincitrice. Avviso: "Il risultato è indicativo: le visualizzazioni cambiano anche per altri motivi".

5. Pagamenti con Stripe

Aggiungi pacchetti di crediti: 20 giudizi a 9 €, 60 giudizi a 19 € (test inclusi: 5 crediti ciascuno). Ogni nuovo utente riceve 3 crediti gratis. Ogni giudizio costa un credito, ogni test di 8 giorni 5 crediti. Mostra sempre in alto quanti crediti restano e, quando finiscono, un riquadro per comprarne altri.

A pagamento riuscito il webhook aggiunge i crediti del pacchetto con la funzione aggiungi_crediti.

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. Test: verifica che al termine del test resti la copertina vincente e che, se l'utente scollega il canale, il test si fermi con la copertina originale.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Cambiare la copertina e leggere le visualizzazioni

Le due chiamate alle API ufficiali di YouTube usate dal test: caricare una nuova miniatura e leggere le visualizzazioni giorno per giorno.

// Carica la copertina come miniatura del video (serve il permesso youtube.upload o youtube)
export async function impostaCopertina(token: string, videoId: string, immagine: Blob) {
  const r = await fetch(
    "https://www.googleapis.com/upload/youtube/v3/thumbnails/set?videoId=" + videoId,
    { method: "POST", headers: { Authorization: "Bearer " + token, "Content-Type": immagine.type }, body: immagine },
  );
  if (!r.ok) throw new Error("YouTube ha risposto " + r.status);
}

// Visualizzazioni per giorno di un video (YouTube Analytics API)
export async function visualizzazioniPerGiorno(token: string, videoId: string, dal: string, al: string) {
  const parametri = new URLSearchParams({
    ids: "channel==MINE",
    startDate: dal,               // "2026-10-01"
    endDate: al,
    metrics: "views",
    dimensions: "day",
    filters: "video==" + videoId,
  });
  const r = await fetch("https://youtubeanalytics.googleapis.com/v2/reports?" + parametri, {
    headers: { Authorization: "Bearer " + token },
  });
  const dati = await r.json();
  return (dati.rows ?? []).map(([giorno, viste]: [string, number]) => ({ giorno, viste }));
}

Test con risultato

I test tra due copertine e la query che confronta le visualizzazioni medie di ciascuna.

create table test (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,
  video_id text not null,
  copertina_a text not null,
  copertina_b text not null,
  iniziato_il date not null default current_date,
  vincitrice text check (vincitrice in ('a', 'b'))
);

create table giorni_test (
  test_id uuid not null references test(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  giorno date not null,
  copertina text not null check (copertina in ('a', 'b')),
  viste int not null,
  primary key (test_id, giorno)
);

alter table test enable row level security;
create policy "le mie righe" on test
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
alter table giorni_test enable row level security;
create policy "leggo i miei giorni" on giorni_test for select using (auth.uid() = utente_id);

-- Visualizzazioni medie al giorno per copertina
select copertina, round(avg(viste)) as viste_medie, count(*) as giorni
from giorni_test
where test_id = 'ID-TEST'
group by copertina;

Pezzi comuni a tutti i progetti

Glossario

Cron
Un'operazione programmata che parte da sola a orari fissi, per esempio ogni lunedì mattina.
Test A/B
Provare due versioni della stessa cosa per vedere con i numeri quale funziona meglio.
OAuth
Il sistema con cui l'utente dà al sito il permesso di agire sul suo account (qui YouTube) senza dargli la password.