← Tutte le idee Casa e famiglia

Babycheck

Scansioni un alimento e scopri se va bene per l'età del tuo bambino

Incasso mensile: 192 USD (fonte indicata nella scheda)

Cosa fa

App che analizza i prodotti alimentari per bambini: controlla ingredienti, additivi, zuccheri aggiunti e allergeni in base all'età, e propone alternative più sane.

Come guadagna

Gratis da scaricare, con abbonamento a 9,99 $ al mese o 49,99 $ all'anno. Incassi verificati su TrustMRR tramite RevenueCat; nata a dicembre 2025 in Francia.

Rendilo tuo

  • Per lo svezzamento all'italiana: omogeneizzati, biscotti, pastine.
  • Lista della spesa con i prodotti approvati per l'età del bambino.
  • Profili per fratelli di età diverse.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Pappa Giusta": un'app che scansiona i prodotti alimentari e dice se sono adatti all'età del bambino, controllando zuccheri aggiunti, sale, additivi e allergeni. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con un esempio di scansione e il prezzo
2. Registrazione e profilo dei bambini (soprannome, data di nascita, allergie)
3. Scanner del codice a barre
4. Risultato: semaforo per l'età, motivi, alternative
5. Lista della spesa e prodotti salvati

Stile: fresco e rassicurante: sfondo bianco, verde menta #34D399, giallo #FBBF24, rosso #F87171 per il semaforo, carattere "Nunito", icone tonde e morbide. 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:
- "bambini": soprannome, data di nascita, allergie, collegati al genitore
- "scansioni": codice a barre, nome del prodotto, esito per ogni bambino, data
- "lista": prodotti salvati nella lista della spesa

Regole di sicurezza obbligatorie:
- ogni genitore vede solo i suoi bambini e le sue scansioni
- dei bambini si salvano solo soprannome, data di nascita e allergie
- l'abbonamento 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. Il semaforo per l'età

Il codice a barre si cerca nella banca dati libera Open Food Facts, che contiene ingredienti, valori nutrizionali, additivi e allergeni di milioni di prodotti, anche italiani.

Il semaforo si calcola con regole chiare e uguali per tutti, non a caso (codice nei Dettagli tecnici): sotto i 12 mesi niente zuccheri aggiunti, miele e sale aggiunto; sotto i 3 anni attenzione a zuccheri, sale e additivi discussi; rosso sempre per gli allergeni del bambino. Ogni esito spiega il motivo in una frase.

Se il prodotto non è nella banca dati, il genitore può fotografare l'etichetta (Claude legge ingredienti e valori) e, se vuole, aggiungerlo a Open Food Facts.

4. Alternative e lista della spesa

Sotto ogni risultato, alternative della stessa categoria con un semaforo migliore. Pulsante "Aggiungi alla lista": la lista della spesa si condivide con l'altro genitore.

Avviso fisso: "Indicazioni generali: per allergie e diete particolari segui il tuo pediatra".

5. Pagamenti con Stripe

Aggiungi un abbonamento a 4,99 € al mese o 29,99 € all'anno. Gratis l'utente ha: 10 scansioni al mese e un bambino. Con il piano Pro sblocca: scansioni illimitate, più bambini, alternative e lista condivisa.

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. Regole: scansiona un biscotto con zucchero e un prodotto con miele impostando un bambino di 8 mesi: devono risultare rossi con il motivo giusto.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Il semaforo per l'età del bambino

Legge il prodotto da Open Food Facts e applica regole semplici e trasparenti in base ai mesi del bambino. I limiti sono indicativi e vanno verificati con fonti pediatriche.

type Esito = { colore: "verde" | "giallo" | "rosso"; motivi: string[] };

export async function valutaPerEta(codice: string, mesi: number, allergie: string[]): Promise<Esito | null> {
  const r = await fetch("https://world.openfoodfacts.org/api/v2/product/" + codice +
    ".json?fields=product_name,ingredients_text_it,ingredients_text,nutriments,additives_tags,allergens_tags",
    { headers: { "User-Agent": "PappaGiusta/1.0 (contatto@tuodominio.it)" } });
  const d = await r.json();
  if (d.status !== 1) return null;
  const p = d.product;
  const ingredienti = (p.ingredients_text_it || p.ingredients_text || "").toLowerCase();
  const n = p.nutriments ?? {};
  const motivi: string[] = [];
  let colore: Esito["colore"] = "verde";
  const segna = (c: Esito["colore"], m: string) => {
    motivi.push(m);
    if (c === "rosso" || (c === "giallo" && colore === "verde")) colore = c;
  };

  for (const a of allergie) if ((p.allergens_tags ?? []).some((t: string) => t.includes(a))) segna("rosso", "Contiene " + a + ", a cui il bambino è allergico");
  if (mesi < 12 && /miele/.test(ingredienti)) segna("rosso", "Contiene miele: sconsigliato sotto l'anno");
  if (mesi < 12 && /zucchero|sciroppo|destrosio|fruttosio/.test(ingredienti)) segna("rosso", "Zuccheri aggiunti: sconsigliati sotto l'anno");
  else if (mesi < 36 && (n["sugars_100g"] ?? 0) > 10) segna("giallo", "Molti zuccheri per un bambino piccolo");
  if ((n["salt_100g"] ?? 0) > (mesi < 12 ? 0.1 : 0.5)) segna(mesi < 12 ? "rosso" : "giallo", "Contiene molto sale per l'età");
  if ((p.additives_tags ?? []).length > 2) segna("giallo", "Contiene diversi additivi");
  if (!motivi.length) motivi.push("Nessun problema trovato per l'età indicata");
  return { colore, motivi };
}

Bambini e scansioni

Profili dei bambini e storico delle scansioni, visibili solo al genitore.

create table bambini (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,
  soprannome text not null,
  nato_il date not null,
  allergie text[] not null default '{}'
);

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,
  prodotto text,
  esiti jsonb not null,            -- { bambino_id: { colore, motivi } }
  fatta_il timestamptz not null default now()
);

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

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);

Pezzi comuni a tutti i progetti

Glossario

JSONB
Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
Open Food Facts
Una banca dati libera e gratuita con ingredienti, valori nutrizionali e foto di milioni di prodotti alimentari.