← Tutte le idee Strumenti online

AppLaunchFlow

Tutto il materiale per lanciare un'app sugli store, in un unico posto

Incasso mensile: 2700 USD (fonte indicata nella scheda)

Cosa fa

Crea gli screenshot per App Store e Play Store, i testi della scheda, i video promozionali, le icone e le traduzioni, e controlla la posizione nelle ricerche.

Come guadagna

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

Rendilo tuo

  • Parti solo dagli screenshot, la parte che tutti odiano fare.
  • Traduzioni automatiche della scheda in italiano, spagnolo, tedesco.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Vetrina App": aiuta chi pubblica un'app a creare gli screenshot per App Store e Google Play nelle misure giuste, e a scrivere i testi della scheda nei limiti di caratteri. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con esempi di vetrine prima/dopo e prezzi
2. Registrazione e accesso
3. Editor degli screenshot: sfondo, titolo, cornice del telefono, schermata
4. Testi della scheda per i due store, con i contatori di caratteri
5. Esportazione di tutte le misure in uno zip

Stile: da strumento per creatori di app: sfondo bianco, blu #0071E3, verde Play #01875F, carattere "Inter", tela dell'editor grande al centro. 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:
- "app": nome, descrizione, pubblico, colori, collegate all'utente
- "vetrine": per ogni app gli screenshot con titolo, sfondo, schermata caricata e ordine
- "testi": nome, sottotitolo, parole chiave, descrizione breve e lunga per ogni store e lingua

Regole di sicurezza obbligatorie:
- ogni utente vede e modifica solo le sue app, vetrine e testi
- il piano non si modifica 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. L'editor degli screenshot

Crea l'editor: l'utente carica le schermate della sua app e per ognuna sceglie sfondo (colore, sfumatura), titolo grande in alto, posizione e cornice del telefono. Si lavora su un solo modello e l'esportazione crea tutte le misure richieste (elenco e codice di disegno nei Dettagli tecnici).

Funzioni utili: stesso stile su tutti gli screenshot in un clic, anteprima di come appaiono nello store, e versioni tradotte cambiando solo i testi.

Lo zip finale ha cartelle ordinate per store e misura, con i file numerati nell'ordine scelto.

4. Testi della scheda

Pagina dei testi con contatori che diventano rossi oltre i limiti: App Store nome 30, sottotitolo 30, parole chiave 100, descrizione 4.000; Google Play titolo 30, descrizione breve 80, descrizione completa 4.000.

Il pulsante "Proponi testi" chiama Claude con la descrizione dell'app e restituisce testi già nei limiti, in italiano e inglese, senza parole vietate dagli store (es. "migliore", "n.1", nomi di altre app).

5. Pagamenti con Stripe

Aggiungi un abbonamento a 15 € al mese. Gratis l'utente ha: una app, 3 screenshot e il marchio nell'angolo. Con il piano Pro sblocca: app illimitate, tutte le misure, traduzioni e testi suggeriti.

A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.

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. Misure: carica gli screenshot esportati in App Store Connect e Google Play Console (anche senza pubblicare): devono essere accettati senza errori.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Misure e disegno degli screenshot

Disegna uno screenshot su una tela con sfondo, titolo e schermata dell'app, nella misura richiesta dallo store. Si ripete per ogni misura dell'elenco.

// Misure in pixel (verticale) accettate dagli store
export const MISURE = {
  "iphone-6.9": [1320, 2868],
  "iphone-6.5": [1284, 2778],
  "ipad-13": [2064, 2752],
  "android-telefono": [1080, 1920],
} as const;

export async function disegnaScreenshot(
  misura: keyof typeof MISURE,
  opz: { sfondo: string; titolo: string; coloreTitolo: string; schermata: ImageBitmap },
): Promise<Blob> {
  const [l, a] = MISURE[misura];
  const tela = new OffscreenCanvas(l, a);
  const ctx = tela.getContext("2d")!;

  ctx.fillStyle = opz.sfondo;
  ctx.fillRect(0, 0, l, a);

  // Titolo in alto, grande il 6% della larghezza
  ctx.fillStyle = opz.coloreTitolo;
  ctx.font = "700 " + Math.round(l * 0.06) + "px Inter, sans-serif";
  ctx.textAlign = "center";
  ctx.fillText(opz.titolo, l / 2, a * 0.1, l * 0.9);

  // Schermata dell'app: 78% della larghezza, sotto il titolo
  const largh = l * 0.78;
  const alt = (opz.schermata.height / opz.schermata.width) * largh;
  ctx.drawImage(opz.schermata, (l - largh) / 2, a * 0.16, largh, Math.min(alt, a * 0.82));

  return tela.convertToBlob({ type: "image/png" });
}

Tabelle del database

Le app, gli screenshot e i testi per ogni store e lingua.

create table app (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,
  nome text not null,
  descrizione text not null default '',
  colori jsonb not null default '{}'
);

create table vetrine (
  id uuid primary key default gen_random_uuid(),
  app_id uuid not null references app(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  ordine int not null,
  titolo text not null,
  sfondo text not null default '#0071E3',
  schermata_path text not null
);

create table testi (
  app_id uuid not null references app(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  store text not null check (store in ('apple', 'google')),
  lingua text not null default 'it',
  nome text not null check (length(nome) <= 30),
  sottotitolo text check (length(sottotitolo) <= 30),       -- solo Apple
  parole_chiave text check (length(parole_chiave) <= 100),  -- solo Apple
  breve text check (length(breve) <= 80),                   -- solo Google
  descrizione text not null check (length(descrizione) <= 4000),
  primary key (app_id, store, lingua)
);

alter table app enable row level security;
create policy "le mie righe" on app
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

alter table vetrine enable row level security;
create policy "le mie righe" on vetrine
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

alter table testi enable row level security;
create policy "le mie righe" on testi
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

Pezzi comuni a tutti i progetti

Glossario

JSONB
Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
Canvas
Una tela del browser su cui il codice disegna immagini, che poi si possono scaricare come file.