AlgoFuse.ai
Le immagini dei prodotti per Amazon, create guardando chi vende di più
Incasso mensile: 980 USD (fonte indicata nella scheda)
Cosa fa
Analizza le immagini dei concorrenti meglio piazzati per una parola chiave e crea immagini per la scheda prodotto di Amazon del venditore.
Come guadagna
Ha entrate ricorrenti ogni mese, verificate su TrustMRR. Prezzi e piani esatti sono indicati sul sito del progetto.
Rendilo tuo
- Per Etsy, eBay o Shopify, non solo Amazon.
- Pacchetto pronto per i venditori artigiani italiani.
Le frasi da scrivere all'AI
1. Base del sito e grafica
Crea un'app web in italiano chiamata "Vetrina Amazon": aiuta chi vende su Amazon a creare le 7 immagini della scheda prodotto (principale su bianco, vantaggi, misure, ambientazione) rispettando le regole di Amazon. Usa React, Vite, TypeScript e Tailwind CSS.
Pagine da creare:
1. Pagina iniziale con una scheda prima/dopo e prezzi
2. Registrazione e accesso
3. Nuovo prodotto: foto, nome, vantaggi, misure
4. Editor delle 7 immagini con modelli
5. Controllo delle regole ed esportazione
Stile: commerciale e pulito: sfondo bianco, arancione #FF9900, blu scuro #232F3E, carattere "Inter", anteprima come appare nella pagina Amazon. 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:
- "prodotti": nome, vantaggi, misure, foto, collegati all'utente
- "immagini": posizione da 1 a 7, modello usato, testi, file nello Storage, esito dei controlli
Regole di sicurezza obbligatorie:
- ogni utente vede solo i suoi prodotti e immagini
- 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. Le 7 immagini con i modelli
L'utente carica le foto del prodotto (scontornate con un servizio di rimozione sfondo) e compila nome, 5 vantaggi, misure e materiali. Il sito propone le 7 immagini con modelli pronti:
1. principale su bianco puro, prodotto all'85%;
2. i 3 vantaggi principali con icone;
3. misure con le quote;
4. dettaglio dei materiali;
5. il prodotto in uso (ambientazione con un'API di modifica immagini);
6. cosa c'è nella confezione;
7. confronto con le versioni o garanzia.
Claude propone i testi brevi per ogni immagine dai vantaggi scritti, senza promesse non verificabili. Per studiare la concorrenza l'utente carica lui gli screenshot: il sito non scarica dati da Amazon.
4. Controllo delle regole
Prima dell'esportazione il sito controlla l'immagine principale (codice nei Dettagli tecnici): sfondo bianco puro sui bordi, prodotto tra l'80 e il 90% della tela, almeno 1.600 pixel sul lato lungo (2.000 consigliati per lo zoom), nessun testo aggiunto. Mostra cosa sistemare.
Esportazione in uno zip con le immagini numerate da 1 a 7, in JPG.
5. Pagamenti con Stripe
Aggiungi pacchetti di crediti: 5 prodotti a 15 €, 20 prodotti a 49 €. Ogni nuovo utente riceve 1 crediti gratis. Ogni prodotto (7 immagini) costa un credito. 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. Regole: carica un'immagine principale con sfondo grigio chiaro e una con il prodotto piccolo: il controllo deve segnalarle entrambe.
Correggi quello che non va e scrivimi cosa hai cambiato.
Dettagli tecnici
Controllo dell'immagine principale
Verifica le regole principali di Amazon per l'immagine principale: misura, sfondo bianco puro ai bordi e quanto spazio occupa il prodotto.
export async function controllaPrincipale(file: Blob) {
const img = await createImageBitmap(file);
const tela = new OffscreenCanvas(img.width, img.height);
const ctx = tela.getContext("2d")!;
ctx.drawImage(img, 0, 0);
const { data, width, height } = ctx.getImageData(0, 0, img.width, img.height);
const bianco = (i: number) => data[i] >= 250 && data[i + 1] >= 250 && data[i + 2] >= 250;
// 1. Bordi bianchi puri (riga e colonna esterne)
let bordiNonBianchi = 0;
for (let x = 0; x < width; x++) {
if (!bianco(x * 4)) bordiNonBianchi++;
if (!bianco(((height - 1) * width + x) * 4)) bordiNonBianchi++;
}
for (let y = 0; y < height; y++) {
if (!bianco(y * width * 4)) bordiNonBianchi++;
if (!bianco((y * width + width - 1) * 4)) bordiNonBianchi++;
}
// 2. Riquadro del prodotto (tutto ciò che non è bianco)
let minX = width, minY = height, maxX = 0, maxY = 0;
for (let y = 0; y < height; y += 2) {
for (let x = 0; x < width; x += 2) {
if (!bianco((y * width + x) * 4)) {
minX = Math.min(minX, x); maxX = Math.max(maxX, x);
minY = Math.min(minY, y); maxY = Math.max(maxY, y);
}
}
}
const occupazione = Math.max((maxX - minX) / width, (maxY - minY) / height);
return [
{ regola: "Lato lungo di almeno 1.600 pixel", ok: Math.max(width, height) >= 1600 },
{ regola: "Sfondo bianco puro", ok: bordiNonBianchi < (width + height) * 0.01 },
{ regola: "Prodotto tra l'80% e il 90% dell'immagine", ok: occupazione >= 0.8 && occupazione <= 0.9,
valore: Math.round(occupazione * 100) + "%" },
];
}Prodotti e immagini
I prodotti e le loro 7 immagini, con l'esito dei controlli.
create table prodotti (
id uuid primary key default gen_random_uuid(),
utente_id uuid not null references auth.users(id) on delete cascade,
nome text not null,
vantaggi text[] not null default '{}',
misure jsonb,
foto_path text[] not null default '{}'
);
create table immagini (
prodotto_id uuid not null references prodotti(id) on delete cascade,
utente_id uuid not null references auth.users(id) on delete cascade,
posizione int not null check (posizione between 1 and 7),
modello text not null,
testi jsonb not null default '{}',
file_path text,
controlli jsonb,
primary key (prodotto_id, posizione)
);
alter table prodotti enable row level security;
create policy "le mie righe" on prodotti
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
alter table immagini enable row level security;
create policy "le mie righe" on immagini
for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);
insert into storage.buckets (id, name, public) values ('amazon', 'amazon', false);
create policy "la mia cartella amazon" on storage.objects for all to authenticated
using (bucket_id = 'amazon' and (storage.foldername(name))[1] = auth.uid()::text)
with check (bucket_id = 'amazon' and (storage.foldername(name))[1] = auth.uid()::text);
Pezzi comuni a tutti i progetti
Glossario
- Storage
- Lo spazio di Supabase dove si salvano i file, come foto e audio, con le sue regole di accesso.
- JSONB
- Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
- Immagine principale
- La prima foto della scheda Amazon, quella che si vede nei risultati di ricerca: ha regole più severe delle altre.