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
- Pagamenti con Stripe
- Profili, piano e crediti
- Chiamare l'AI dal server
- Controllo finale prima di pubblicare
Glossario
- JSONB
- Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.