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.