Prompt Completo
Crea un'applicazione web chiamata "Menu Optimizer" - uno strumento professionale per Menu Engineering e analisi Food Cost.
## ARCHITETTURA
Pattern MVC:
- index.html (SPA con navigazione: Dashboard, Ingredienti, Menu, Nuovo Piatto, Simulazione, Analisi Foto)
- Stili inline nel file (o css separato)
- Models/IngredienteEntity.js (id, nome, costoPerUnita, unitaMisura, categoria, fornitore)
- Models/PiattoEntity.js (id, nome, descrizione, categoria, prezzoVendita, ingredienti[], venditeMedie)
- Models/MenuEntity.js (id, nome, piatti[], dataCreazione)
- Models/VenditaEntity.js (piattoId, quantita, settimana)
- DTOs/IngredienteFormDto.js, PiattoFormDto.js, PiattoListDto.js, SimulazioneDto.js
- Repositories/BaseRepository.js (classe base CRUD localStorage)
- Repositories/IngredienteRepository.js, PiattoRepository.js, VenditaRepository.js
- Services/FoodCostService.js (calcolo costi piatti)
- Services/MenuEngineeringService.js (classificazione BCG, suggerimenti)
- Services/SimulazioneService.js (scenari what-if)
- Services/ChatGPTService.js (nomi piatti, analisi foto)
- Assets/js/app.js (inizializzazione, navigazione, event handlers)
## FUNZIONALITÀ
### Dashboard
- 4 stat cards: Piatti nel Menu, Ingredienti, Margine Medio (€), Food Cost Medio (%)
- **Matrice BCG** (griglia 2x2):
- ⭐ Star: alta popolarità + alto margine (sfondo giallo)
- 🧩 Puzzle: bassa popolarità + alto margine (sfondo azzurro)
- 🐴 Cavallo da Traino: alta popolarità + basso margine (sfondo verde)
- 🐕 Cane: bassa popolarità + basso margine (sfondo arancione)
- Ogni quadrante mostra lista piatti classificati
- Pannello Suggerimenti con card colorate per priorità (alta=rosso, media=giallo, bassa=blu)
### Ingredienti
- Upload CSV (drag & drop) formato: Nome;CostoPerUnita;UnitaMisura;Categoria;Fornitore
- Preview dati importati
- Tabella ingredienti con colonne: Nome, Costo/Unità, Unità, Categoria, Fornitore, Azioni
- Bottone Aggiungi ingrediente manuale
- Form modale per nuovo ingrediente
### Menu
- Upload CSV piatti
- Slider "Percentuale Costi Fissi" (0-100%, default 30%)
- Tabella menu: Piatto, Categoria, Costo, Prezzo, Margine, Food Cost %, Vendite/Sett., Classificazione BCG
- Colori condizionali: verde se margine buono, rosso se food cost > 35%
### Nuovo Piatto
- Form creazione piatto fuori menu:
- Nome piatto (input)
- Categoria (select: Antipasti, Primi, Secondi, Contorni, Dolci)
- Selettore ingredienti (dropdown + quantità + bottone aggiungi)
- Lista ingredienti selezionati con tag removibili
- **Calcolo Costo in Tempo Reale** (aggiorna mentre aggiungi ingredienti):
- Costo Base (somma ingredienti)
- Costi Fissi (basato su slider %)
- Costo Totale
- Prezzo Suggerito (costo × 3 per food cost ~33%)
- Bottone "Suggerisci Nomi con AI" → chiama ChatGPT con ingredienti, mostra 5 nomi creativi
- Input prezzo vendita finale
- Bottone Salva Piatto
### Simulazione
- Select tipo simulazione:
- Variazione Prezzo Singolo Piatto
- Variazione Costo Ingrediente
- Aumento Generale Prezzi
- Per ogni tipo, form specifico:
- Prezzo piatto: select piatto + nuovo prezzo
- Costo ingrediente: select ingrediente + nuovo costo
- Aumento generale: slider percentuale (-20% a +30%)
- Risultati simulazione:
- Confronto PRIMA/DOPO con card affiancate
- Differenza evidenziata (verde se positiva, rosso se negativa)
- Impatto su margine totale menu
### Analisi Foto (AI Vision)
- Upload foto piatto (drag & drop, JPG/PNG/WebP)
- Preview immagine
- Bottone "Analizza Impiattamento con AI"
- Risultati (da ChatGPT Vision):
- Punteggio estetico (1-10)
- Commento generale
- Palette colori estratti (5 swatch colorati)
- Punti positivi (lista)
- Suggerimenti miglioramento (lista)
- Bottone "Applica Colori alla UI" → cambia CSS custom properties con colori estratti
## IMPOSTAZIONI (Modal)
- Input API Key OpenAI
- Slider costi fissi default
- Bottone ripristina colori predefiniti
- Gestione dati: Esporta tutto (JSON), Importa, Carica dati esempio, Cancella tutto
## FORMULE
- Food Cost % = (Costo Ingredienti / Prezzo Vendita) × 100
- Margine = Prezzo - Costo Totale
- Costo Totale = Costo Ingredienti × (1 + %CostiFissi/100)
- Prezzo Suggerito = Costo Totale × 3 (target food cost 33%)
- Classificazione BCG: usa mediana vendite e mediana margine come soglie
## STILE
- Palette calda: beige (#E8D5B7), crema (#F5E6CC), oro (#C4A574)
- Theme toggle chiaro/scuro
- Icone emoji nelle intestazioni
- Card con border-radius 12px
- Responsive con breakpoint mobile 768px
## PROMPT CHATGPT PER NOMI PIATTI
"Sei un chef creativo italiano. Dato questo elenco di ingredienti: [lista]. Suggerisci 5 nomi creativi e appetitosi per un piatto che li utilizzi. Rispondi solo con i 5 nomi, uno per riga."
## PROMPT CHATGPT PER ANALISI FOTO
"Analizza questa foto di un piatto. Valuta: 1) Punteggio estetico (1-10), 2) Commento generale, 3) 5 colori dominanti in formato HEX, 4) Punti positivi, 5) Suggerimenti. Rispondi in JSON."