← Tutte le idee Giochi e hobby

App collezione di energy drink

Scansioni ogni lattina di energy drink e la aggiungi alla collezione

Incasso mensile: 41 USD (fonte indicata nella scheda)

Cosa fa

App per iPhone che trasforma ogni energy drink scansionato in un pezzo da collezione, con rarità, classifiche e squadre, e tiene il conto della caffeina. Venduta per circa 1.000 $.

Come guadagna

Incasso annuo dichiarato di circa 490 $ nell'annuncio di vendita su Microns, che verifica i dati. Il nome del progetto non è pubblico.

Rendilo tuo

  • La stessa idea per birre artigianali, vini, caffè: collezionare i prodotti assaggiati.
  • Con un po' di gioco (rarità, classifiche) anche un'app semplice diventa coinvolgente.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Lattinario": trasforma ogni lattina di bibita scansionata (energy drink, bibite rare, edizioni limitate) in un pezzo da collezione, con rarità e classifiche, e tiene il conto della caffeina della giornata. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con l'album di esempio e il prezzo
2. Registrazione con conferma della maggiore età
3. Scanner del codice a barre con la fotocamera
4. Album della collezione per marca e rarità
5. Caffeina di oggi e classifica tra amici

Stile: energico e da collezione: sfondo nero #09090B, verde elettrico #84CC16, viola #A855F7 per le rare, oro per le leggendarie, carattere "Bungee" per i titoli e "Inter" per i testi. 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:
- "lattine": codice a barre, marca, nome, gusto, caffeina in mg, edizione limitata, rarità
- "collezione": lattine scansionate dall'utente con data e quante volte
- "proposte": nuove lattine segnalate dagli utenti, da approvare

Regole di sicurezza obbligatorie:
- il catalogo delle lattine è pubblico, lo modificano solo gli amministratori
- ogni utente vede solo la sua collezione; la classifica mostra solo nome e punti
- 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. Scansione e collezione

Lo scanner usa la fotocamera e legge il codice a barre (codice nei Dettagli tecnici, con la funzione BarcodeDetector del browser e una libreria di riserva per Safari). Se la lattina è nel catalogo, appare la carta con animazione e rarità; se no, l'utente la propone con foto, nome e caffeina, e un amministratore la approva.

Album della collezione per marca, con le lattine mancanti in grigio, percentuale di completamento e punti (comune 10, rara 50, leggendaria 200).

Il conto della caffeina somma le lattine "bevute oggi" e avvisa in arancione sopra i 200 mg e in rosso oltre i 400 mg al giorno (soglia indicata dall'EFSA per gli adulti), con il consiglio di non esagerare. App riservata ai maggiorenni.

4. Classifiche e scambi

Classifica tra amici con codice d'invito e classifica generale per punti. Sfide del mese ("Trova 3 edizioni limitate").

Pagina "Doppie": le lattine che l'utente ha più volte, per organizzare scambi tra collezionisti tramite messaggi interni.

5. Pagamenti con Stripe

Aggiungi un pagamento singolo di 3,99 € una volta sola. Il pagamento sblocca album illimitati, statistiche della caffeina e la pagina degli scambi.

A pagamento riuscito il webhook imposta "piano" a "pro" nella tabella "profili", sulla riga dell'utente indicata in client_reference_id.

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. Caffeina: scansiona 5 lattine da 160 mg in un giorno: devono comparire l'avviso arancione e poi quello rosso.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Leggere il codice a barre con la fotocamera

Usa il lettore di codici a barre integrato nel browser dove c'è (Chrome, Android), e la libreria ZXing come riserva (Safari).

import { BrowserMultiFormatReader } from "@zxing/browser";

export async function leggiCodice(video: HTMLVideoElement): Promise<string> {
  // 1. Lettore integrato nel browser (veloce, senza librerie)
  if ("BarcodeDetector" in window) {
    const lettore = new (window as any).BarcodeDetector({ formats: ["ean_13", "ean_8", "upc_a"] });
    const flusso = await navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment" } });
    video.srcObject = flusso;
    await video.play();
    try {
      while (true) {
        const trovati = await lettore.detect(video);
        if (trovati.length) return trovati[0].rawValue as string;
        await new Promise((ok) => setTimeout(ok, 200));
      }
    } finally {
      flusso.getTracks().forEach((t) => t.stop());
    }
  }

  // 2. Riserva: libreria ZXing
  const zxing = new BrowserMultiFormatReader();
  const risultato = await zxing.decodeOnceFromVideoDevice(undefined, video);
  return risultato.getText();
}

Catalogo, collezione e caffeina di oggi

Il catalogo pubblico, la collezione dell'utente e la somma della caffeina bevuta oggi.

create table lattine (
  codice text primary key,               -- codice a barre EAN
  marca text not null,
  nome text not null,
  caffeina_mg int not null default 0,
  rarita text not null default 'comune' check (rarita in ('comune', 'rara', 'leggendaria'))
);
alter table lattine enable row level security;
create policy "catalogo pubblico" on lattine for select using (true);

create table scansioni (
  id bigint generated always as identity primary key,
  utente_id uuid not null references auth.users(id) on delete cascade,
  codice text not null references lattine(codice),
  bevuta boolean not null default false,
  scansionata_il timestamptz not null default now()
);
alter table scansioni enable row level security;
create policy "le mie righe" on scansioni
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

-- Caffeina bevuta oggi
select coalesce(sum(l.caffeina_mg), 0) as mg_oggi
from scansioni s join lattine l on l.codice = s.codice
where s.utente_id = auth.uid() and s.bevuta and s.scansionata_il >= date_trunc('day', now());

Pezzi comuni a tutti i progetti

Glossario

EAN
Il codice a barre stampato sui prodotti in vendita, uguale in tutti i negozi.