← Tutte le idee Marketing e social

Admirror

Prende una pubblicità che funziona e la adatta al tuo prodotto in 90 secondi

Incasso mensile: 578 USD (fonte indicata nella scheda)

Cosa fa

L'utente carica un'immagine pubblicitaria che ha visto funzionare e il proprio prodotto: l'AI crea una nuova pubblicità con la stessa struttura ma con il prodotto dell'utente.

Come guadagna

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

Rendilo tuo

  • Usa la struttura, mai il marchio o le immagini di altri.
  • Modelli già pronti per negozi italiani: saldi, Natale, Black Friday.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Struttura Vincente": analizza la struttura di una pubblicità che funziona (disposizione, gerarchia dei testi, tipo di messaggio) e crea una pubblicità nuova e originale per il prodotto dell'utente con la stessa struttura. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con un esempio "struttura → nuova pubblicità" e prezzi
2. Registrazione e accesso
3. Carica una pubblicità di riferimento e la foto del tuo prodotto
4. Analisi della struttura e nuova pubblicità con testi modificabili
5. Libreria delle strutture salvate

Stile: da marketing creativo: sfondo bianco, nero #0A0A0A, accento rosso #EF4444, carattere "Inter", tela di lavoro grande con i livelli a lato. 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:
- "strutture": analisi in JSON di una pubblicità di riferimento (zone, gerarchia, tipo di gancio), collegate all'utente
- "creativi": prodotto, struttura usata, testi, immagine finale

Regole di sicurezza obbligatorie:
- ogni utente vede solo le sue strutture e creativi
- l'immagine di riferimento si usa solo per l'analisi e si cancella subito dopo
- 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. Analizzare la struttura, non copiare

L'utente carica una pubblicità di riferimento. La Edge Function "struttura" la mostra a Claude, che restituisce SOLO la struttura in JSON (codice nei Dettagli tecnici): dove stanno prodotto, titolo, testo e pulsante (in percentuale), tipo di gancio (problema/soluzione, prima/dopo, testimonianza, offerta), gerarchia dei testi e colori dominanti. L'immagine di riferimento poi viene cancellata.

Con la struttura e la foto del prodotto dell'utente si crea una pubblicità nuova: testi originali scritti da Claude sui vantaggi indicati dall'utente, colori del suo marchio, impaginazione con la stessa disposizione. Non si copiano mai testi, loghi, persone o immagini della pubblicità di riferimento.

4. Modifica e formati

Editor semplice: si cambiano testi, colori e posizione degli elementi trascinandoli. Esportazione nei formati 1:1, 4:5 e 9:16.

Libreria delle strutture salvate, riutilizzabili con prodotti diversi. Promemoria nella pagina: "Rispetta i diritti altrui: usa la pubblicità di riferimento solo come ispirazione per la struttura".

5. Pagamenti con Stripe

Aggiungi pacchetti di crediti: 20 creativi a 15 €, 80 creativi a 45 €. Ogni nuovo utente riceve 2 crediti gratis. Ogni analisi più nuova pubblicità 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. Originalità: controlla che nelle pubblicità create non compaiano testi o marchi presenti nell'immagine di riferimento, e che questa venga cancellata dallo Storage.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Istruzioni per l'AI: struttura

La Edge Function che analizza la pubblicità di riferimento. Nella "richiesta" il server mette l'immagine in base64; Claude restituisce solo la struttura, mai i testi o i marchi. Il resto della funzione (accesso, crediti, rimborso se l'AI rifiuta) è uguale per tutti i progetti: è nella guida "Chiamare l'AI dal server".

Analizzi la struttura grafica e comunicativa di una pubblicità. NON trascrivere i testi, non descrivere marchi o persone: descrivi solo la struttura. Rispondi solo con JSON: {"zone": [{"elemento": "prodotto"|"titolo"|"testo"|"pulsante"|"logo", "x": %, "y": %, "larghezza": %, "altezza": %}], "gancio": "problema_soluzione"|"prima_dopo"|"testimonianza"|"offerta"|"domanda", "gerarchia": ["elemento più evidente", ...], "lunghezza_titolo": "breve"|"media"|"lunga", "colori": ["#RRGGBB", ...], "perche_funziona": "2 frasi"}.

Impaginare la nuova pubblicità

Usa le zone in percentuale della struttura per posizionare prodotto e testi dell'utente su una tela di qualsiasi formato.

type Zona = { elemento: string; x: number; y: number; larghezza: number; altezza: number };

export async function impagina(
  zone: Zona[], formato: [number, number],
  contenuti: { prodotto: ImageBitmap; titolo: string; testo: string; pulsante: string; colori: string[] },
): Promise<Blob> {
  const [L, A] = formato;                               // es. [1080, 1350] per 4:5
  const tela = new OffscreenCanvas(L, A);
  const ctx = tela.getContext("2d")!;
  ctx.fillStyle = contenuti.colori[0];
  ctx.fillRect(0, 0, L, A);

  for (const z of zone) {
    const x = (z.x / 100) * L, y = (z.y / 100) * A, w = (z.larghezza / 100) * L, h = (z.altezza / 100) * A;
    if (z.elemento === "prodotto") {
      const s = Math.min(w / contenuti.prodotto.width, h / contenuti.prodotto.height);
      ctx.drawImage(contenuti.prodotto, x + (w - contenuti.prodotto.width * s) / 2, y, contenuti.prodotto.width * s, contenuti.prodotto.height * s);
    } else if (z.elemento === "pulsante") {
      ctx.fillStyle = contenuti.colori[1];
      ctx.fillRect(x, y, w, h);
      ctx.fillStyle = "#FFFFFF";
      ctx.font = "700 " + Math.round(h * 0.4) + "px Inter";
      ctx.textAlign = "center"; ctx.textBaseline = "middle";
      ctx.fillText(contenuti.pulsante, x + w / 2, y + h / 2, w * 0.9);
    } else if (z.elemento === "titolo" || z.elemento === "testo") {
      ctx.fillStyle = contenuti.colori[2] ?? "#111111";
      ctx.font = (z.elemento === "titolo" ? "800 " : "400 ") + Math.round(h * 0.5) + "px Inter";
      ctx.textAlign = "left"; ctx.textBaseline = "top";
      ctx.fillText(z.elemento === "titolo" ? contenuti.titolo : contenuti.testo, x, y, w);
    }
  }
  return tela.convertToBlob({ type: "image/png" });
}

Pezzi comuni a tutti i progetti

Glossario

JSONB
Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
Gancio
La parte di una pubblicità che cattura l'attenzione nei primi secondi: un problema, una domanda, un prima/dopo.