← Tutte le idee Casa e famiglia

Buma Baby Tracker

Pappe, sonno e pannolini del neonato, in un diario condiviso

Incasso mensile: 1300 USD (fonte indicata nella scheda)

Cosa fa

App semplice per i genitori: si segnano sonno, poppate, pannolini e attività del bambino in una linea del tempo condivisa tra mamma e papà.

Come guadagna

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

Rendilo tuo

  • Condivisione con nonni e babysitter, che segnano anche loro.
  • Riepilogo da mostrare al pediatra alla visita.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Diario Nanna": permette ai genitori di segnare in un tocco sonno, poppate, pannolini e altro del neonato, in un diario condiviso in tempo reale tra mamma, papà e nonni. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con l'app in azione e prezzi
2. Registrazione e creazione del profilo del bambino
3. Schermata principale con i pulsanti grandi: poppata, nanna, pannolino, altro
4. Linea del tempo della giornata
5. Statistiche e invito dei familiari

Stile: dolce e riposante: sfondo crema #FFF9F2, azzurro polvere #93C5FD, rosa #F9A8D4, verde salvia #86EFAC, carattere "Nunito" arrotondato, pulsanti enormi usabili con una mano di notte, tema scuro attenuato. 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": nome, data di nascita
- "famiglie": chi può vedere e scrivere nel diario di un bambino (genitore, nonno, tata)
- "eventi": tipo (poppata, biberon, nanna, pannolino, bagnetto, medicina), inizio, fine, dettagli, chi l'ha segnato

Regole di sicurezza obbligatorie:
- vede e scrive nel diario solo chi fa parte della famiglia di quel bambino
- si entra in una famiglia solo con un invito
- 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. Segnare in un tocco, insieme

Crea la schermata principale con 4 pulsanti grandi. "Nanna" e "Poppata" partono come cronometro (con lato sinistro/destro per l'allattamento) e si fermano con un altro tocco; "Pannolino" chiede solo bagnato/sporco/entrambi. Tutto deve richiedere al massimo due tocchi.

In alto, sempre visibile: "Ultima poppata 2 ore e 10 minuti fa (sinistro)" e "Dorme da 45 minuti".

Il diario è condiviso: quando il papà segna un pannolino, la mamma lo vede comparire subito (Supabase Realtime). L'accesso si basa sull'appartenenza alla famiglia (regole nei Dettagli tecnici).

4. Linea del tempo, statistiche, inviti

Linea del tempo della giornata con gli eventi colorati, modificabili con un tocco per correggere un orario.

Statistiche: ore di sonno totali e notturne, numero di poppate e pannolini al giorno negli ultimi 14 giorni. Esporta un riepilogo in PDF da mostrare al pediatra.

Invito dei familiari con un link valido 48 ore.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 2,99 € al mese. Gratis l'utente ha: un solo genitore e storico di 7 giorni. Con il piano Pro sblocca: famiglia condivisa illimitata, storico completo, statistiche ed esportazione per il pediatra.

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. Famiglia: con un account non invitato prova a leggere gli eventi di un bambino conoscendone l'id: deve essere bloccato.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Diario condiviso con la famiglia

Le regole controllano l'appartenenza alla famiglia del bambino: chi non è stato invitato non vede nulla. La funzione di controllo evita regole che si richiamano a vicenda.

create table bambini (
  id uuid primary key default gen_random_uuid(),
  nome text not null,
  nato_il date not null
);

create table famiglie (
  bambino_id uuid not null references bambini(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  ruolo text not null default 'genitore' check (ruolo in ('genitore', 'nonno', 'tata')),
  primary key (bambino_id, utente_id)
);

create table eventi (
  id uuid primary key default gen_random_uuid(),
  bambino_id uuid not null references bambini(id) on delete cascade,
  tipo text not null check (tipo in ('poppata', 'biberon', 'nanna', 'pannolino', 'bagnetto', 'medicina')),
  inizio timestamptz not null default now(),
  fine timestamptz,
  dettagli jsonb not null default '{}',
  segnato_da uuid not null default auth.uid() references auth.users(id)
);

-- Faccio parte della famiglia di questo bambino?
create function in_famiglia(bambino uuid) returns boolean
language sql stable security definer set search_path = public as $
  select exists (select 1 from famiglie where bambino_id = bambino and utente_id = auth.uid());
$;

alter table bambini enable row level security;
alter table famiglie enable row level security;
alter table eventi enable row level security;

create policy "vedo i miei bambini" on bambini for select using (in_famiglia(id));
create policy "vedo la famiglia" on famiglie for select using (in_famiglia(bambino_id));
create policy "diario di famiglia" on eventi for all
  using (in_famiglia(bambino_id)) with check (in_famiglia(bambino_id));

-- Per gli aggiornamenti in tempo reale
alter publication supabase_realtime add table eventi;

Sonno degli ultimi 14 giorni

Ore di sonno al giorno, sommando le nanne finite.

select date_trunc('day', inizio)::date as giorno,
       round(sum(extract(epoch from (fine - inizio))) / 3600, 1) as ore_sonno
from eventi
where bambino_id = 'ID-BAMBINO'
  and tipo = 'nanna'
  and fine is not null
  and inizio > now() - interval '14 days'
group by 1
order by 1;

Pezzi comuni a tutti i progetti

Glossario

JSONB
Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
Realtime
Una funzione di Supabase che aggiorna la pagina da sola quando cambia un dato, senza ricaricare.