Files
biteplan/CLAUDE.md
T

93 lines
3.7 KiB
Markdown
Raw Normal View History

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
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**.
## Stato attuale
Il codice Dart Flutter è stato scritto e si trova in `lib/`. Il codice Vue 3 è stato rimosso.
**Passo successivo obbligatorio**: eseguire `flutter create .` nel container dev (noVNC) per generare lo scaffolding Android (`android/`, `ios/`, `test/`). Senza questo passo il progetto non è buildabile.
## Roadmap (da sop.md)
1. ✅ Struttura progetto Flutter (`lib/`, `pubspec.yaml`, `assets/data/conversions.json`)
2.`StorageService`, `ConversionService`, modelli dati
3. ✅ Tutte e 3 le pagine + widget + provider
4.`BottomNavigationBar`, portrait lock, Material 3
5. ✅ Container dev: Docker + Xvfb + noVNC (`docker/dev/`)
6. ✅ Container build headless APK (`docker/build/`)
7. ⬜ Eseguire `flutter create .` nel container + `flutter pub get`
8. ⬜ Configurare icona con `flutter pub run flutter_launcher_icons`
## Comandi
```bash
# Avvia container dev con GUI noVNC
cd docker/dev && docker compose up
# → http://localhost:6080/vnc.html
# Prima volta nel container (dal terminale noVNC):
flutter create --project-name biteplan --org com.biteplan .
flutter pub get && flutter pub run flutter_launcher_icons
# Sviluppo nel container:
flutter run -d linux # app desktop nella GUI
flutter run -d chrome # app web
# Test (nel container o con Flutter installato localmente):
flutter test # unit + widget
flutter test integration_test/ # e2e (richiede device/emulatore)
# Build APK (headless, da host):
bash docker/build/build.sh # debug → dist/biteplan-debug.apk
bash docker/build/build.sh --release # release firmato → dist/biteplan-release.apk
```
## Architettura target (Flutter)
```
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
```
**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.
## Testing
```
test/
├── unit/
│ ├── models/ # DayPlan, MealPlan, ConversionEntry, ShoppingItem
│ └── providers/ # MealPlannerProvider, ShoppingListProvider
└── widget/ # MealCard, ShoppingItemTile
integration_test/
└── app_test.dart # navigazione, shopping list, converter, meal planner
```
- **Unit/widget**: `flutter test` — non richiedono dispositivo, usano `SharedPreferences.setMockInitialValues({})` per isolare lo storage
- **Integration**: `flutter test integration_test/` — richiedono emulatore o device fisico