2026-05-16 16:38:23 +02:00
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
2026-05-16 16:43:26 +02:00
BitePlan è un'app Android per meal planning, conversione crudo/cotto e lista della spesa. Il progetto è in **riscrittura completa da Vue 3 + Capacitor a Flutter ** . Segui `sop.md` come piano di lavoro: ogni sezione del SOP corrisponde a una fase da completare in ordine. L'obiettivo finale è un APK Android buildabile via Docker. Tutta la UI e la UX sono in **italiano ** .
2026-05-16 16:38:23 +02:00
2026-05-16 16:43:26 +02:00
## Stato attuale
2026-05-16 16:38:23 +02:00
2026-05-16 16:43:26 +02:00
Il codice Vue 3 esistente (`src/` , `tests/` , `vite.config.mjs` , ecc.) è il riferimento funzionale da portare in Flutter — non va esteso. Il nuovo codice Flutter va creato da zero seguendo `sop.md` .
2026-05-16 16:38:23 +02:00
2026-05-16 16:43:26 +02:00
## Roadmap (da sop.md)
2026-05-16 16:38:23 +02:00
2026-05-16 16:43:26 +02:00
1. Struttura progetto Flutter (`lib/` , `pubspec.yaml` , asset JSON)
2. Container dev: Docker + Xvfb + noVNC su porta 6080 (`docker/dev/` )
3. Container build headless APK (`docker/build/` )
4. `StorageService` — persistenza con `shared_preferences`
5. `ConversionService` — rawToCooked / cookedToRaw + asset `lib/data/conversions.json`
6. Modelli dati: `MealPlan` , `DayPlan` , `ShoppingItem`
7. Pagina Meal Planner (accordion per giorno, 3 pasti, add/remove voci)
8. Pagina Converter (ricerca alimento → selezione metodo → calcolo bidirezionale)
9. Pagina Shopping List (checklist, import da meal planner, svuota)
10. `BottomNavigationBar` (Pasti | Converti | Spesa), portrait lock, Material 3
2026-05-16 16:38:23 +02:00
2026-05-16 16:43:26 +02:00
## Comandi (quando il progetto Flutter esisterà)
2026-05-16 16:38:23 +02:00
2026-05-16 16:43:26 +02:00
``` bash
# Sviluppo via container noVNC
cd docker/dev && docker compose up
# → http://localhost:6080 (desktop GUI nel browser)
# Nel terminale noVNC: cd /workspace && flutter pub get && flutter run
# Build APK
bash docker/build/build.sh # debug
bash docker/build/build.sh --release # release firmato → dist/
2026-05-16 16:38:23 +02:00
```
2026-05-16 16:43:26 +02:00
## Architettura target (Flutter)
2026-05-16 16:38:23 +02:00
2026-05-16 16:43:26 +02:00
```
lib/
├── main.dart
├── app.dart # MaterialApp, routing, BottomNavigationBar
├── pages/
│ ├── meal_planner_page.dart
│ ├── converter_page.dart
│ └── shopping_list_page.dart
├── widgets/
│ ├── meal_card.dart
│ └── checkbox_item.dart
├── models/
│ ├── meal_plan.dart
│ └── shopping_item.dart
├── services/
│ ├── storage_service.dart
│ └── conversion_service.dart
└── data/
└── conversions.json # 50+ alimenti × metodi cottura, yield = cotto/crudo
```
2026-05-16 16:38:23 +02:00
2026-05-16 16:43:26 +02:00
**Stato ** : Provider o Riverpod (nessuno store esterno pesante).
**Persistenza ** : `shared_preferences` , chiavi `meals` e `shopping_list` (JSON serializzato).
**Conversione ** : `rawToCooked(raw, yield) = raw * yield` / `cookedToRaw(cooked, yield) = cooked / yield` .
**UI ** : Material 3, seed color `Color(0xFF2d6a4f)` , touch target minimo 48× 48 dp.
## Riferimento funzionale (Vue → Flutter)
| Vue (attuale) | Flutter (target) |
|---|---|
| `src/pages/MealPlanner.vue` | `lib/pages/meal_planner_page.dart` |
| `src/pages/Converter.vue` | `lib/pages/converter_page.dart` |
| `src/pages/ShoppingList.vue` | `lib/pages/shopping_list_page.dart` |
| `src/utils/storage.js` | `lib/services/storage_service.dart` |
| `src/utils/conversion.js` | `lib/services/conversion_service.dart` |
| `src/data/conversions.json` | `lib/data/conversions.json` (asset) |