← Tutte le idee Strumenti online

Capgo

Aggiorni la tua app sul telefono degli utenti senza aspettare l'App Store

Incasso mensile: 33.349 USD (fonte indicata nella scheda)

Cosa fa

Servizio per chi crea app con Capacitor (app per telefono fatte con tecnologie web): manda gli aggiornamenti direttamente sui telefoni degli utenti, con canali di prova, ritorno alla versione precedente e build automatiche.

Come guadagna

Abbonamenti con 14 giorni di prova senza carta, oltre 1.200 abbonati, 587.000 $ incassati in totale. Nato nel 2021 in Estonia, il codice è open source. Incassi verificati con Stripe.

Rendilo tuo

  • Per agenzie che fanno app per tanti clienti: un pannello per tutti.
  • Statistiche degli errori dopo ogni aggiornamento, con ritorno automatico.
  • Versione per app fatte con l'AI, guidata passo passo.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Aggiorna Subito": un servizio per sviluppatori di app Capacitor: caricano il nuovo pacchetto web dell'app e gli utenti lo ricevono all'apertura successiva, con canali (prova, produzione) e ritorno automatico se la nuova versione si blocca. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale per sviluppatori con prezzi
2. Registrazione
3. Le mie app e i canali
4. Versioni caricate con percentuale di diffusione
5. Statistiche: aggiornamenti scaricati, errori, ritorni

Stile: da sviluppatori: sfondo #09090B, viola #A855F7, verde #22C55E, carattere "Geist" e "Geist Mono". 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, identificativo, chiave pubblica
- "versioni": app, numero, file zip, impronta, data
- "canali": app, nome, versione attiva, percentuale
- "dispositivi": app, id anonimo, versione installata, ultimo contatto, esito

Regole di sicurezza obbligatorie:
- ogni sviluppatore vede solo le sue app
- i pacchetti stanno in uno Storage con link firmati
- 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. Controllo dell'aggiornamento all'apertura

Il plugin nell'app, all'apertura, chiama l'indirizzo "controlla" con l'id dell'app, il canale e la versione installata. La Edge Function risponde con la nuova versione e un link firmato, oppure "sei aggiornato" (codice nei Dettagli tecnici).

Il plugin scarica lo zip, ne controlla l'impronta, lo installa e lo usa alla prossima apertura. Se l'app non segnala "tutto ok" entro 10 secondi dall'avvio, torna da sola alla versione precedente e lo comunica: gli utenti non restano mai con un'app rotta.

Regola dei negozi: si possono aggiornare così solo il codice web e i contenuti, non le parti native dell'app né la sua funzione principale.

4. Diffusione graduale e statistiche

Si pubblica una versione al 10% dei dispositivi, si guardano gli errori, poi si sale al 50% e al 100%. Pulsante "ritira" che rimette la versione precedente a tutti.

Statistiche per versione: quanti l'hanno ricevuta, quanti sono tornati indietro.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 14 € al mese fino a 1.000 utenti, 49 € fino a 10.000. Gratis l'utente ha: 14 giorni di prova. Con il piano Pro sblocca: aggiornamenti illimitati, canali, diffusione graduale e statistiche.

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. Ritorno: pubblica apposta una versione che si blocca all'avvio e controlla che il dispositivo torni da solo alla precedente.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Controllo dell'aggiornamento

Edge Function chiamata dall'app: decide se c'è una versione nuova per quel dispositivo, anche con la diffusione graduale.

import { createClient } from "npm:@supabase/supabase-js@2";

// stesso dispositivo -> stesso numero da 0 a 99, così la percentuale è stabile
async function quota(idDispositivo: string) {
  const h = new Uint8Array(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(idDispositivo)));
  return h[0] % 100;
}

Deno.serve(async (req) => {
  const { app, canale, versione, dispositivo } = await req.json();
  const db = createClient(Deno.env.get("SUPABASE_URL")!, Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!);
  const { data: c } = await db.from("canali").select("versione_attiva, percentuale, versioni(numero, file, impronta)")
    .eq("app_id", app).eq("nome", canale).single();
  if (!c || c.versioni.numero === versione || (await quota(dispositivo)) >= c.percentuale)
    return Response.json({ aggiorna: false });
  const { data: link } = await db.storage.from("pacchetti").createSignedUrl(c.versioni.file, 600);
  return Response.json({ aggiorna: true, versione: c.versioni.numero, url: link!.signedUrl, impronta: c.versioni.impronta });
});

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.
Capacitor
Uno strumento che trasforma un'app web in un'app per iPhone e Android.
Aggiornamento OTA
Over The Air: un aggiornamento che arriva direttamente sul telefono, senza passare dal negozio di app.