← Tutte le idee Negozi e community

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.