Commit Graph

49 Commits

Author SHA1 Message Date
55257f849d fix: aggiungi permesso CAMERA all'AndroidManifest.xml generato da Capacitor 2026-03-31 10:44:09 +02:00
7dd1bce80f chore: merge main nel branch qrcode (fix vulnerabilità npm)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 10:20:03 +02:00
9b099dac83 fix: risolvi 6 vulnerabilità npm aggiornando vite e vitest
- Upgrade vite 5 → 6 (fix GHSA-67mh-4wv8-2f99: esbuild CORS dev server)
- Upgrade vitest 2 → 3 e @vitest/coverage-v8 2 → 3
- Rinomina vite.config.js → vite.config.mjs (richiesto da vite 6 ESM)
- Aggiorna requisito Node.js in README: 18.x → >= 20.x LTS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 10:15:55 +02:00
8685ea0aca feat: condivisione piano pasti via QR code
Aggiunge due pulsanti in fondo alla schermata Piano Pasti:
- "Condividi": genera un QR code con i dati della settimana
- "Ricevi": apre la fotocamera per scansionare il QR e importare il piano

Dipendenze aggiunte: qrcode, jsqr

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30 23:13:21 +02:00
7a63706af5 chore: aggiorna versione a 1.0.0 e CHANGELOG
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 12:16:45 +01:00
5df7956069 fix: crea dist/ prima del docker run per evitare ownership root
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 11:57:33 +01:00
76cf672d80 fix: APK con --head ora copiato in dist/ invece di andare perso nella tmpdir
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>
2026-03-28 11:50:55 +01:00
96f75df6f2 feat: supporto build APK release firmato nella pipeline Docker
- Dockerfile: CMD condizionale su BUILD_TYPE (debug default, release con
  assembleRelease + zipalign + apksigner)
- build.sh: flag --release, richiesta password interattiva, mount keystore
  come volume read-only (mai nell'immagine)
- .gitignore: aggiunto *.jks
- docker/README.md: documentazione build debug/release, keytool, flag combinabili

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 10:10:43 +01:00
0c2a227be2 chore: aggiorna versione a 0.9.1 e CHANGELOG
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 14:47:57 +01:00
e10bb2df4c test: aggiungi suite completa unit, integration ed e2e
- Unit (12+9): conversion.js (rawToCooked/cookedToRaw, edge case, inversa)
  e storage.js (save/load, round-trip, default fallback)
- Integration (17+12+14): Converter (ricerca, selezione, calcolo, swap, reset),
  MealPlanner (rendering, add/remove, generateShopping, deduplicazione),
  ShoppingList (add, toggle, remove, clearAll, contatore)
- E2E Playwright (6+6+7+10): navigation, meal-planner, converter, shopping-list
- Configurazione: vitest.config.js + playwright.config.js + tests/setup.js
- Script: test, test:coverage, test:e2e, test:e2e:ui

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 14:45:31 +01:00
09c9706938 docs: aggiungi requisiti di sviluppo al README
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 14:35:11 +01:00
ecbae836b3 feat: guida utente in-app e fix grafici Convertitore
- DocsPanel: pannello documentazione slide-from-right con nav a pill,
  IntersectionObserver per sezione attiva, card con step numerati e callout tip
- InfoPanel: bottone "Guida" emette open-docs invece di aprire link esterno
- App: integra DocsPanel con v-model showDocs
- Converter: fix capitalize food names (capFirst invece di text-transform),
  simmetria visiva input/output (stesso underline e font-size 1.6rem),
  rimosso CSS morto (doppio align-items, doppio background, visibility hack)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 14:32:36 +01:00
f24e591ca0 docs: riscrivi guida utente allineata allo stato attuale dell'app
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 14:10:00 +01:00
eef38a74cc Merge branch 'new-logo' 2026-03-27 14:07:32 +01:00
c44fc6b4ec chore: aggiorna icona app e favicon circolare con sfondo trasparente 2026-03-27 13:31:14 +01:00
32d8a267b9 chore: aggiorna CHANGELOG per v0.9.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 10:39:39 +01:00
74084767af fix docs: correggi percorso APK da output/ a dist/ in docker/README.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 10:24:49 +01:00
d2e6ac9186 docs: riscrivi README con funzionalità aggiornate e accesso da mobile
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 10:24:42 +01:00
91e2bf5664 chore: aggiorna versione a 0.9.0 2026-03-27 09:58:25 +01:00
b12ab225cd fix Converter: sentence case per metodo di cottura
Sostituisce text-transform:capitalize (che maiuscolava ogni parola)
con capFirst() — solo la prima lettera del metodo è maiuscola.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 09:55:06 +01:00
bf18165dd5 espandi metodi di cottura per tutte le verdure
Aggiunge forno e friggitrice ad aria a ogni voce verdura dove
applicabile; aggiunge padella alle verdure che ne erano prive.
Documenta ogni valore derivato con metodologia e k-factor.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 09:54:58 +01:00
864d004cbd aggiungi generazione lista spesa dal piano pasti
Bottone "Genera lista della spesa" in fondo alla pagina Piano Pasti:
- raccoglie tutti gli item da tutti i giorni e pasti
- deduplica (case-insensitive) e salta item già presenti in lista
- aggiunge come non spuntati alla lista esistente
- naviga automaticamente alla tab Lista della spesa

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 23:35:14 +01:00
a3726ae3cc dev: esponi server Vite sulla rete locale (--host)
Permette di connettersi da altri dispositivi sulla stessa rete
tramite http://<ip>:5173 durante lo sviluppo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 19:51:00 +01:00
414153f7d3 fix App.vue: usa safe-area-inset-top per btn-info su telefoni con notch
Su dispositivi con status bar alta o notch il bottone info finiva
sotto l'area di sistema e non era toccabile. Aggiunto env(safe-area-inset-top)
per posizionarlo sempre nell'area visibile.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 19:48:07 +01:00
79ecbb0729 aggiorna conversioni: dati reali con fonti verificate, aggiunge friggitrice ad aria
- docs/conversioni.md: sostituisce coefficienti placeholder con dati da fonti
  ufficiali (SINU, Istituto Muzzone, AEMMEDI, Nutrizionistadoc); aggiunge
  sezione friggitrice ad aria con regola derivata dal forno; nuovi alimenti:
  orzo, riso (4 varietà), spigola, sogliola, vitello, uova, verdure miste
- src/data/conversions.json: allineato al documento, include metodi friggitrice
  ad aria per pollo, tacchino, pesce, verdure e tuberi

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 19:41:52 +01:00
13ae623531 aggiorna docs/conversioni: dati reali da alimentinutrizione.it
- Sostituisce coefficienti placeholder con dati verificati (39 voci)
- Riorganizza in 5 categorie: cereali e pasta, legumi, verdure, carne, pesce
- Patate e funghi inclusi in Verdure
- Fonte: https://www.alimentinutrizione.it/presentazione-dati

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 13:45:45 +01:00
0e78955fe4 aggiungi documentazione e changelog
- README.md: panoramica app, stack, avvio dev, build APK, link docs
- CHANGELOG.md: standard Keep a Changelog, release 0.1.0-alpha completa
- docs/guida-utente.md: istruzioni Piano Pasti, Convertitore, Lista spesa
- docs/conversioni.md: tabella coefficienti con fonte alimentinutrizione.it

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 14:53:32 +01:00
053c84aaa0 Merge branch 'wip-docker-build'
Aggiunge pipeline Docker per build APK Android:
- Dockerfile con Java 21, Android SDK 34, ImageMagick per icone
- build.sh con flag --head per build da ultimo commit
- Icone generate da assets/icon-only.png via ImageMagick
- Fix kotlin-stdlib conflict e versione da package.json
2026-03-25 12:30:20 +01:00
595fe4310f fix Dockerfile: icone custom e versione da package.json
- 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
2026-03-25 12:29:07 +01:00
083a38f858 fix Dockerfile: usa ImageMagick per icone Android invece di @capacitor/assets
@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>
2026-03-25 11:49:26 +01:00
51ad99d8c0 fix Dockerfile: genera icone Android da assets/icon-only.png
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>
2026-03-25 11:27:18 +01:00
e499ce6945 fix docker: APK in dist/ invece di output/
Rimuove la cartella output/ e monta dist/ in lettura/scrittura
così l'APK viene scritto direttamente in dist/biteplan.apk
2026-03-25 11:25:22 +01:00
0516d1e819 fix Dockerfile: risolvi conflitto kotlin-stdlib duplicato
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`
2026-03-25 11:17:00 +01:00
a4e605d914 fix Dockerfile: cambia base image per Java 21
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>
2026-03-25 11:02:51 +01:00
32c535410c fix Dockerfile: aggiorna Java 17 → 21 per Capacitor Android
Capacitor Android richiede source release 21, OpenJDK 17 causava
"error: invalid source release: 21" durante compileDebugJavaWithJavac.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 11:01:36 +01:00
674e8ecd31 fix build.sh: esegue npm ci prima del build Vite
Senza node_modules installati (host fresh) vite non era nel PATH.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 10:27:50 +01:00
d1b0cdd8e0 aggiungi setup Docker per build APK Android
- 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>
2026-03-25 10:24:19 +01:00
644ae01f7e aggiungi icona app a favicon e pannello info
- index.html: favicon PNG dal file assets/icon-only.png
- InfoPanel: sostituisce placeholder "B" con immagine reale dell'icona
- InfoPanel: pulizia CSS .app-icon (rimossi stili da div, aggiunto object-fit)
- public/favicon.png: copia dell'icona servita staticamente da Vite

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 09:47:31 +01:00
023a938872 aggiungi icona sorgente per Capacitor Assets
- assets/icon-only.png: icona 1024×1024 da usare con
  npx @capacitor/assets generate per generare le icone Android/iOS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 09:42:29 +01:00
0c15ea71d7 Ristruttura InfoPanel: rimuove duplicati, layout professionale
- Rimuove versione duplicata (era nell'header e nella lista)
- Rimuove descrizione ridondante e bottone Chiudi full-width
- Aggiunge icona app (quadrato verde con iniziale B)
- X per chiudere in alto a destra, tap overlay per dismissione
- Righe info in card con bordo, pattern iOS/Android settings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 08:43:20 +01:00
f8ce9b859f Aggiunge pannello info app (bottom sheet)
- InfoPanel.vue: bottom sheet con nome, versione (da package.json),
  autore (Davide Grilli), licenza EUPL v1.2 e link documentazione
- App.vue: bottone info fisso in alto a destra, visibile da tutte
  le pagine, con animazione slide-up sul pannello

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 08:38:47 +01:00
d14f56cced Migliora header pagine e ridisegna Convertitore
MealPlanner:
- Titolo "Piano Pasti" (più breve e da app)
- Sottotitolo "Oggi, mercoledì 25 marzo" con data completa formattata

Converter:
- Layout calcolatrice: input sinistra | swap | risultato destra
- Card unificata con header alimento e footer fattore di resa
- Icona ricerca nell'input, stato iniziale con hint
- Titolo "Convertitore", sottotitolo descrittivo
- Tasto swap per invertire direzione invece del toggle

MealCard:
- Fix emoji pranzo 🌤️🍽️ (rendering universale)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 08:33:10 +01:00
76135e404a Migliora UI: design moderno, accordion pasti, fix UX
- style.css: shadows, transizioni, variabili --radius-sm/full,
  --color-primary-muted, --color-danger-muted
- BottomNav: icone SVG cross-platform, indicatore pill attivo,
  shadow verso l'alto
- MealCard: accordion (solo oggi aperto di default), badge voci
  quando chiusa, icone pasto, fix touch target btn-remove
- MealPlanner: rileva giorno corrente, mostra come sottotitolo
- Converter: chip alimento selezionato, result box con formula
  (es. 140g x 0.75 = 105g), layout migliorato
- ShoppingList: contatore X/Y completati, sezione separata voci
  spuntate, btn-clear ghost invece di solid rosso, empty state
- CheckboxItem: touch target 44px garantito, transizione checked,
  icona SVG per rimuovere, fix plurale "1 voce / N voci"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 08:20:57 +01:00
4413c8e7b6 Aggiunge skill /ux per frontend e UX design
Slash command che attiva il profilo senior frontend/UX designer.
Include checklist di revisione (touch, accessibilità, CSS, Vue 3)
e pattern di riferimento con le variabili CSS e componenti del progetto.
Formato SKILL.md conforme alla documentazione ufficiale Claude Code.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 00:10:09 +01:00
14e89fee7c Aggiunge package-lock.json
Lockfile npm generato dopo l'installazione delle dipendenze iniziali.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 00:10:03 +01:00
76dd13a1d8 Aggiunge licenza EUPL v1.2
Licenza europea copyleft: chi distribuisce o modifica il software
deve rilasciare il sorgente sotto EUPL o licenza compatibile.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 23:22:14 +01:00
3b69857be6 Implementazione completa dell'app BitePlan
- App.vue: root con navigazione tra le tre pagine
- BottomNav.vue: barra navigazione inferiore (Pasti, Converti, Spesa)
- MealPlanner.vue + MealCard.vue: pianificatore settimanale con lista voci per pasto
- Converter.vue: convertitore crudo/cotto con ricerca testuale
- ShoppingList.vue + CheckboxItem.vue: lista spesa con checkbox
- utils/storage.js: wrapper LocalStorage (save/load)
- utils/conversion.js: rawToCooked e cookedToRaw
- data/conversions.json: 14 alimenti con coefficienti di resa

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 23:19:26 +01:00
3eb0860a3d Scaffold iniziale Vue 3 + Vite
Aggiunge struttura base del progetto: package.json, vite.config.js,
index.html con viewport mobile, main.js, CSS globale mobile-first
e .gitignore.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 23:13:49 +01:00
f7c4a34772 Aggiunge SOP iniziale del progetto
Documento di specifiche per BitePlan: meal planner settimanale,
convertitore peso crudo/cotto e lista della spesa.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 23:11:46 +01:00