Files
biteplan/CLAUDE.md
T
davide aa88e2095b chore: aggiorna .gitignore e CLAUDE.md per Flutter
.gitignore: aggiunti scaffold Flutter (/android/, /ios/, /web/, ecc.),
file IDE (/.idea/, *.iml), .metadata; corretto /build/ (solo root).

CLAUDE.md: aggiornato con architettura Flutter, comandi dev/build/test
e stato avanzamento roadmap (checklist SOP).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 17:41:45 +02:00

93 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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