← Tutte le idee Casa e famiglia

Citron

Le ricette dei video di Instagram e TikTok, trasformate in ricette vere

Incasso mensile: 1400 USD (fonte indicata nella scheda)

Cosa fa

Si incolla il link di un video di cucina da Instagram, TikTok o YouTube e l'app ne ricava una ricetta ordinata con ingredienti e passaggi.

Come guadagna

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

Rendilo tuo

  • Ricettario personale diviso per occasione: cena veloce, domenica, dolci.
  • Lista della spesa automatica dalle ricette scelte.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Ricetta Salvata": trasforma la descrizione di un video di cucina visto su Instagram, TikTok o YouTube in una ricetta ordinata con ingredienti e passaggi, salvata nel proprio ricettario con il link al creatore. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con esempio "video → ricetta" e prezzi
2. Registrazione e accesso
3. Aggiungi: incolla il link del video e il testo della descrizione
4. Il mio ricettario con ricerca e categorie
5. Scheda della ricetta con porzioni regolabili e lista della spesa

Stile: da quaderno di ricette: sfondo carta #FFFDF7, arancione #EA580C, verde #65A30D, carattere "Caveat" per i titoli e "Nunito" 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:
- "ricette": titolo, link al video originale, nome del creatore, ingredienti in JSON, passaggi, porzioni, categoria, collegate all'utente

Regole di sicurezza obbligatorie:
- ogni utente vede solo il suo ricettario
- i crediti non si modificano 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. Dalla descrizione alla ricetta

L'utente incolla il link del video e il testo della descrizione o dei commenti fissati (dove i creatori di solito scrivono la ricetta); per YouTube il sito può leggere titolo e descrizione con l'API ufficiale YouTube Data. Non si scaricano mai i video.

La Edge Function "ricetta" (un credito) chiede a Claude di ricavare una ricetta strutturata in JSON: titolo, porzioni, ingredienti con quantità e unità, passaggi numerati. Se mancano le quantità, Claude scrive "q.b." invece di inventarle.

Ogni ricetta mostra sempre in alto "Ricetta di @creatore" con il link al video originale.

4. Ricettario, porzioni e spesa

Il ricettario ha ricerca per ingrediente, categorie (primi, secondi, dolci...) e preferiti. Nella scheda il selettore delle porzioni ricalcola tutte le quantità (codice nei Dettagli tecnici).

Si possono scegliere più ricette e ottenere una lista della spesa unica con le quantità sommate, da condividere su WhatsApp.

5. Pagamenti con Stripe

Aggiungi pacchetti di crediti: 30 ricette a 3,99 €, 100 ricette a 7,99 €. Ogni nuovo utente riceve 5 crediti gratis. Ogni ricetta ricavata costa un credito; ricettario e liste sono gratis. Mostra sempre in alto quanti crediti restano e, quando finiscono, un riquadro per comprarne altri.

A pagamento riuscito il webhook aggiunge i crediti del pacchetto con la funzione aggiungi_crediti.

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. Fedeltà: prova con una descrizione senza quantità e controlla che la ricetta scriva "q.b." e non inventi numeri.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Ricalcolare le porzioni

Moltiplica le quantità per le nuove porzioni e arrotonda in modo sensato (niente "1,33 uova"). Le voci "q.b." restano uguali.

type Ingrediente = { nome: string; quantita: number | null; unita: string };

const INTERE = ["uova", "uovo", "spicchi", "spicchio", "foglie", "pz"];

function arrotonda(valore: number, unita: string, nome: string): number {
  if (INTERE.some((p) => nome.toLowerCase().includes(p) || unita === p)) return Math.max(1, Math.round(valore));
  if (unita === "g" || unita === "ml") return valore >= 100 ? Math.round(valore / 10) * 10 : Math.round(valore);
  return Math.round(valore * 4) / 4;   // cucchiai e tazze: a quarti
}

export function scalaPorzioni(ingredienti: Ingrediente[], da: number, a: number): Ingrediente[] {
  const fattore = a / da;
  return ingredienti.map((i) =>
    i.quantita === null ? i : { ...i, quantita: arrotonda(i.quantita * fattore, i.unita, i.nome) },
  );
}

Tabella del ricettario

Le ricette salvate, sempre con il link al video e il nome del creatore.

create table ricette (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,
  titolo text not null,
  link_video text not null,
  creatore text not null,
  porzioni int not null default 2,
  ingredienti jsonb not null,
  passaggi text[] not null,
  categoria text,
  preferita boolean not null default false,
  creato_il timestamptz not null default now()
);

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

-- Ricerca per ingrediente dentro il JSON
create index on ricette using gin (ingredienti jsonb_path_ops);

Istruzioni per l'AI: ricetta

Le istruzioni fisse che la Edge Function "ricetta" dà a Claude, che risponde in JSON. Il resto della funzione (accesso, crediti, rimborso se l'AI rifiuta) è uguale per tutti i progetti: è nella guida "Chiamare l'AI dal server".

Ricavi una ricetta ordinata dal testo della descrizione di un video di cucina. Usa solo le informazioni presenti: se una quantità non c'è, metti quantita null e unita "q.b.". Non inventare ingredienti o passaggi. Rispondi solo con JSON: {"titolo", "porzioni", "categoria", "ingredienti": [{"nome", "quantita", "unita"}], "passaggi": ["..."]}.

Pezzi comuni a tutti i progetti

Glossario

JSONB
Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.