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.
