Sostituisce le istruzioni per il container dev con Flutter host +
emulatore Android; aggiorna i path docker/build/build.sh → docker/build.sh.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Con la rimozione di docker/dev/ non serve più distinguere due
container: Dockerfile e build.sh salgono di un livello, con i path
relativi (PROJECT_ROOT, keystore) aggiornati di conseguenza.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Lo sviluppo passa da hot reload via Docker/web a Flutter installato
sull'host con emulatore Android dedicato (vedi CLAUDE.md).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Rimuove il blocco flutter create da build.sh: android/ è ora versionata
con la configurazione corretta (com.davide.biteplan), il fallback era
diventato codice morto con un --org errato
- Aggiorna docker/README.md: distingue collaboratore (riceve keystore
dall'autore) da fork/uso personale (genera keystore proprio), spiega
l'impatto sulla compatibilità degli aggiornamenti sui dispositivi
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Valida BITEPLAN_KEYSTORE_PASS prima della build e stampa istruzioni chiare
- Passa --ks-pass a apksigner tramite env var (stdin era chiuso nel container)
- Aggiunge rm -f su biteplan-aligned.apk prima di zipalign per evitare errori
su run consecutive
- Documenta export BITEPLAN_KEYSTORE_PASS nel docker/README.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Pinna Flutter a 3.41.9 (ARG FLUTTER_VERSION) in entrambi i Dockerfile
- Aggiunge /opt/android-sdk/build-tools/34.0.0 al PATH (zipalign era missing)
- Sostituisce mount ${HOME}/.gradle con named volume gradle-cache
- Aggiunge --enforce-lockfile a flutter pub get per bloccare le dipendenze
- Aggiunge .flutter-version con la versione Flutter attesa
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CLAUDE.md: rimossi riferimenti a noVNC/Vue3/sop.md, aggiornata
architettura reale (features/*/presentation/), rimossi file fantasma
(checkbox_item.dart, conversion_service.dart), aggiunta feature guide,
corretta struttura test, aggiornati comandi Docker.
README.md: riscritto per Flutter (rimosso stack Vue3/Node.js), aggiunta
sezione test con comandi e struttura cartelle, link docs/.
docker/README.md: aggiunta sezione test completa con comandi per tutti
i test, singolo file e singola feature; aggiornato flusso completo.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
build.sh: il permesso CAMERA viene iniettato dentro il container
Docker subito dopo flutter create (sed gira come root, evita il
problema di permessi su android/ owned by root).
entrypoint.sh: stesso approccio, sed eseguito già dentro il container.
Il sed inserisce <uses-permission android:name="android.permission.CAMERA" />
prima di <application>, posizione corretta nel manifest Android.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Guida utente:
- Pulsante info nell'AppBar principale
- InfoBottomSheet: icona app, versione, autore, licenza, link alla guida
- GuidePage: tre tab (Pasti / Converti / Spesa) con card e step numerati,
portata dalla DocsPanel Vue originale
AppBar globale in app.dart con titolo dinamico per tab corrente.
Icona launcher:
- flutter_launcher_icons eseguito in build.sh prima di flutter build apk
(sia debug che release) per applicare assets/icon-only.png all'APK.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
docker/build/: build headless APK Android
- Dockerfile: Ubuntu 22.04 + Java 17 + Flutter stable + Android SDK
- build.sh: genera android/ automaticamente se mancante, poi
flutter build apk; --release aggiunge zipalign + apksigner
docker/dev/: ambiente di sviluppo web con hot reload
- Dockerfile: Ubuntu 22.04 + Flutter stable (solo web, senza Android SDK)
- docker-compose.yml: espone porta 5173, monta il progetto come volume
- entrypoint.sh: inizializza web/ se mancante, flutter pub get,
flutter run -d web-server su 0.0.0.0:5173
docker/README.md: documentazione aggiornata per entrambi i container;
rimossi Dockerfile e build.sh Vue/Capacitor non più usati.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Dockerfile: aggiunge android:screenOrientation="portrait" all'activity
in AndroidManifest.xml per bloccare il portrait nativamente sull'APK
- App.vue: fixOrientation() rileva il landscape tramite dimensioni viewport
e applica un counter-rotate CSS in modo che l'app rimanga visivamente
in portrait anche da browser mobile (dev server)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Con --head la DIST_DIR puntava alla directory temporanea che veniva cancellata
dal trap EXIT prima che l'utente potesse recuperare l'APK. L'APK viene ora
copiato esplicitamente in PROJECT_ROOT/dist/ dopo il docker run.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rimuove mipmap-anydpi-v26 per usare i PNG custom al posto delle
adaptive icons di default; semplifica il loop con bash parameter
expansion e cp invece di doppio convert
- Patcha android/app/build.gradle con versionName/versionCode letti
da package.json prima della compilazione Gradle
@capacitor/assets usa sharp (nativo Node.js) che falliva silenziosamente
nel container Docker. ImageMagick è più affidabile e senza dipendenze native.
Genera ic_launcher.png e ic_launcher_round.png per tutte le densità mipmap.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Aggiunge COPY assets/ e npx @capacitor/assets generate --android
per popolare i mipmap Android prima della build Gradle.
Senza questo step l'app mostrava l'icona di default di Capacitor.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Kotlin 1.8+ incorpora jdk7/jdk8 nel main stdlib; Capacitor generava
un conflitto tra kotlin-stdlib:1.8.22 e kotlin-stdlib-jdk8:1.6.21.
Aggiunge una resolutionStrategy Gradle per forzare tutte le varianti
stdlib alla versione 1.8.22 dopo `npx cap add android`
node:20-slim (Debian Bookworm) non ha openjdk-21 nei repo.
Usa eclipse-temurin:21-jdk-jammy (Adoptium/Ubuntu) come base
e installa Node.js 20 via NodeSource.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- docker/Dockerfile: ambiente Node 20 + OpenJDK 17 + Android SDK 34
dist/ ricevuto come volume montato dall'host (non buildata nel container)
- docker/build.sh: esegue npm run build locale poi lancia il container
flag --head per buildare da HEAD ignorando modifiche non committate
- docker/README.md: requisiti host (x86_64 obbligatorio), utilizzo,
pipeline e note su prima build (~10-15 min)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>