diff --git a/README.md b/README.md new file mode 100644 index 0000000..c9665db --- /dev/null +++ b/README.md @@ -0,0 +1,123 @@ +# 🍞 Karby β€” Koolhydratenteller + +Een Nederlandse **Progressive Web App** om snel en eenvoudig koolhydraten te tellen per eetmoment. + +> Gemaakt voor **Chavalie**, die haar koolhydraatinname wil bijhouden. +> Gebaseerd op de officiΓ«le **NEVO-dataset** van het RIVM met 2.328 voedingsmiddelen. + +--- + +## ✨ Features + +### πŸ” Zoeken & Vinden +- **2.328 NEVO-voedingsmiddelen** met koolhydraten per 100g +- **Infinite scroll** β€” soepel door duizenden resultaten bladeren +- **Fuzzy search** β€” vindt ook meervoud/enkelvoud varianten +- **Categorie-filter** (🍞 brood, πŸ₯› zuivel, πŸ₯© vlees, 🍎 fruit, etc.) +- **Voedingscentrum-link** per product β€” direct doorklikken naar voedingsinfo + +### πŸ“… Dagboek +- **6 eetmomenten**: Ontbijt, Lunch, Avondeten, Tussendoor 1/2/3 +- **Datumnavigatie** β€” terug- en vooruitbladeren door dagen +- **Koolhydraten-totaal** per eetmoment met visuele voortgangsbalk +- **LED-kleuren**: groen βœ… / oranje ⚠️ / rood 🚫 (aanpasbare daglimiet) +- **Glucose-metingen** inline per eetmoment β€” nuchter + 2u na maaltijd +- **Infinite scroll** β€” soepel door duizenden resultaten bladeren + +### πŸ§‘β€πŸ³ Maaltijden +- **Maaltijden opslaan** β€” combineer 2+ ingrediΓ«nten tot herbruikbare maaltijd +- **Slimme naamsuggestie** op basis van gekozen ingrediΓ«nten +- **Checkbox-selectie** β€” kies welke items je wilt opslaan +- **Geneste weergave** in dagboek β€” maaltijden uitklappen voor detail +- **Eenmalig/permanent aanpassen** β€” wijzig porties zonder recept te veranderen +- **Bulk-delete** via checkboxes met bevestigingsdialoog + +### βš–οΈ Porties +- **IntuΓ―tieve portiekeuze**: 1 snee 🍞, 1 glas πŸ₯›, 100g, 50g +- **Portie-steppers** (+/βˆ’) voor snelle aanpassing +- **Directe koolhydraten-berekening** β€” zie meteen hoeveel kh je toevoegt + +### 🎨 UX +- **Amber/goud Vorteq-thema** β€” warm en toegankelijk +- **Animaties**: fade/slide op modals, tabs, toasts, meal-groups +- **Haptic feedback** bij knoppen en checkboxes +- **Bottom sheets** met swipe-down sluiten +- **Toast-meldingen** op exacte klik-positie +- **Dark mode via systeemvoorkeur** (geen handmatige toggle) + +### πŸ“± PWA +- **Installeerbaar** op iOS en Android (Add to Home Screen) +- **Offline-ready** via Service Worker +- **Sticky header + zoekbalk** β€” blijft in beeld bij scrollen +- **Touch-optimized** β€” minimale knoppen 44Γ—44px, geen hover-afhankelijkheid + +--- + +## πŸ§ͺ Tests + +**39 Playwright e2e-tests** β€” 38 passing, 1 legitiem skipped: + +```bash +npm install +npx playwright install chromium +npx playwright test +``` + +Tests dekken: zoeken, dagboek CRUD, maaltijden opslaan/bewerken, portie-aanpassing, bulk-delete, glucose-metingen, en UX-flow. + +--- + +## πŸ—οΈ Tech Stack + +| Laag | Technologie | +|---|---| +| Frontend | Vanilla HTML/CSS/JS β€” single `index.html` (SPA) | +| Styling | CSS Custom Properties, Flexbox, geen framework | +| Iconen | Font Awesome 6.5 (gratis set) | +| Data | NEVO-2023 via RIVM, verwerkt tot JSON | +| Tests | Playwright (Chromium, headless) | +| Deploy | Docker + Nginx op homelab NAS | +| CI/CD | Git push β†’ handmatige `scp` + `docker cp` | + +--- + +## πŸš€ Deploy + +```bash +# Build & run locally +cd docker +docker compose up -d + +# Deploy naar homelab +scp index.html core@homelab:/opt/stacks/eetdagboek/ +ssh core@homelab "docker cp /opt/stacks/eetdagboek/index.html eetdagboek:/usr/share/nginx/html/" +``` + +Live op: **[eetdagboek.vantwout.dev](https://eetdagboek.vantwout.dev)** + +--- + +## πŸ“„ Licentie + +MIT β€” wordt binnenkort geopensourcet. + +--- + +## πŸ“ Changelog + +### v1.0.0 β€” 25 juli 2026 + +**Eerste productie-release πŸŽ‰** + +- πŸ” Zoekfunctie met 2.328 NEVO-voedingsmiddelen + infinite scroll + fuzzy search +- πŸ“… Dagboek met 6 eetmomenten, datumnavigatie, koolhydraten-teller +- 🩸 Glucose-metingen per eetmoment (nuchter + postprandiaal) +- πŸ§‘β€πŸ³ Maaltijden opslaan, herbruiken, aanpassen β€” nested in dagboek +- βš–οΈ Portie-steppers met intuΓ―tieve maten (snee, glas, 100g, 50g) +- πŸ—‘οΈ Bulk-delete met checkbox-selectie + confirmatiedialoog +- πŸ“Š Dagelijkse koolhydratenlimiet met progressbar (groen/oranje/rood) +- πŸ”— Voedingscentrum-links per product +- 🎨 Amber/goud thema, animaties, haptic feedback, touch-optimized +- πŸ“± PWA β€” installeerbaar, offline-ready +- πŸ§ͺ 39 Playwright e2e-tests (38 passing) +- 🐳 Dockerized deployment op homelab NAS