Commit Graph

  • 91fbf27269 chore: bump package.json + package-lock auf 1.4.2 main v1.4.2 hsiegeln 2026-04-22 17:16:04 +02:00
  • b556eb39b3 chore(shopping): stale Kommentar in clearCheckedItems entfernt hsiegeln 2026-04-22 17:11:02 +02:00
  • c177c1dc5f feat(shopping): clearCheckedItems auf Family-Key umgestellt hsiegeln 2026-04-22 17:08:28 +02:00
  • b2337a5c2a refactor(shopping): listShoppingList - Pipe-safe name/family lookup hsiegeln 2026-04-22 17:05:53 +02:00
  • f2656bd9e3 feat(shopping): listShoppingList konsolidiert g/kg + ml/l hsiegeln 2026-04-22 17:02:27 +02:00
  • fd55a44bfb feat(shopping): Migration 015 — Check-Keys auf Unit-Family hsiegeln 2026-04-22 16:58:37 +02:00
  • 14cf1b1d35 feat(format): formatQuantity app-weit auf de-DE Komma-Dezimal hsiegeln 2026-04-22 16:55:29 +02:00
  • b85f869c09 refactor(shopping): redundanten kg-Check in consolidate() entfernt + Boundary-Test hsiegeln 2026-04-22 16:53:29 +02:00
  • c6a549699a feat(shopping): consolidate() fuer g/kg + ml/l Summierung hsiegeln 2026-04-22 16:50:24 +02:00
  • 29f0245ce0 feat(shopping): unitFamily-Utility fuer Konsolidierung hsiegeln 2026-04-22 16:46:43 +02:00
  • 59b232c5fc docs(plan): Implementation-Plan fuer Einkaufsliste-Konsolidierung hsiegeln 2026-04-22 16:44:18 +02:00
  • b9b06e161c docs(spec): Einkaufsliste Mengen-Konsolidierung ueber Einheiten hsiegeln 2026-04-22 16:39:47 +02:00
  • 2f0a45f487 chore: bump package.json + package-lock auf 1.4.1 v1.4.1 hsiegeln 2026-04-22 16:24:58 +02:00
  • a68b99c807 fix(wishlist): 2-Spalten-Grid auf Mobile statt stacked Footer hsiegeln 2026-04-22 16:05:28 +02:00
  • 2573f80940 style(wishlist): Actions als Card-Footer ohne Trenner hsiegeln 2026-04-22 15:50:12 +02:00
  • 0a97ea2fea fix(wishlist): Card stacked auf Mobile, Titel-Overflow behoben hsiegeln 2026-04-22 15:39:12 +02:00
  • 12f499cb98 fix(home): $effect-Loop bei sort=viewed via untrack hsiegeln 2026-04-22 15:39:02 +02:00
  • 829850aa88 chore: bump package.json + package-lock auf 1.4.0 hsiegeln 2026-04-22 14:58:45 +02:00
  • 2b0bd4dc44 fix(recipe): View-Beacon ueber \$effect statt onMount v1.4.0 hsiegeln 2026-04-22 14:50:54 +02:00
  • e7318164cb fix(home): focus-visible auf section-head + scoped chev-CSS hsiegeln 2026-04-22 14:42:44 +02:00
  • 2216c89a04 feat(home): Collapsible Sections fuer Favoriten + Zuletzt hinzugefuegt hsiegeln 2026-04-22 14:38:43 +02:00
  • 01d29bff0e feat(home): Sort-Chip 'Zuletzt angesehen' + Profile-Switch-Refetch hsiegeln 2026-04-22 14:35:28 +02:00
  • a5321d620a feat(home): profile_id in alle /api/recipes/all-Fetches hsiegeln 2026-04-22 14:33:42 +02:00
  • b31223add5 feat(api): /api/recipes/all akzeptiert sort=viewed + profile_id hsiegeln 2026-04-22 14:31:17 +02:00
  • f495c024c6 feat(recipe): View-Beacon beim oeffnen der Detailseite hsiegeln 2026-04-22 14:28:32 +02:00
  • 1214b9e01d refactor(api): parsePositiveIntParam fuer view-endpoint hsiegeln 2026-04-22 14:27:10 +02:00
  • 82d4348873 feat(api): POST /api/recipes/[id]/view fuer View-Beacon hsiegeln 2026-04-22 14:23:36 +02:00
  • 6f54b004ca test(views): NULL-Tiebreaker explizit verifizieren hsiegeln 2026-04-22 14:20:51 +02:00
  • 226ca5e5ed feat(search): sort=viewed in listAllRecipesPaginated hsiegeln 2026-04-22 14:17:17 +02:00
  • 5357c9787b refactor(views): ON CONFLICT DO UPDATE statt INSERT OR REPLACE hsiegeln 2026-04-22 14:14:44 +02:00
  • 6c8de6fa3a feat(db): recordView/listViews fuer recipe_view hsiegeln 2026-04-22 14:10:52 +02:00
  • 866a222265 docs: plan/spec auf recipe_view (singular) angeglichen hsiegeln 2026-04-22 14:08:54 +02:00
  • 543008b0f2 refactor(db): recipe_views -> recipe_view, TIMESTAMP-Konsistenz hsiegeln 2026-04-22 14:08:17 +02:00
  • 2cd9b47450 feat(db): recipe_views table mit Profil-FK und Recent-Index hsiegeln 2026-04-22 14:04:27 +02:00
  • 98894bb895 docs(plan): Implementation-Plan fuer Views-Sort + Collapsibles hsiegeln 2026-04-22 14:00:22 +02:00
  • 363ea6fbe7 docs(spec): Hauptseite Zuletzt-angesehen-Sort + Collapsibles hsiegeln 2026-04-22 13:54:52 +02:00
  • 005c3ea7b5 fix(home): rehydrate-Trigger aus snapshot.restore, nicht ueber onMount hsiegeln 2026-04-22 09:59:11 +02:00
  • 1d7731edbb chore: ci-log.txt und .claude/ aus dem Repo werfen hsiegeln 2026-04-22 09:42:53 +02:00
  • 0bfeba2c0a feat(home): Pagination-Tiefe per Snapshot, scroll-restore deep-scroll-fest hsiegeln 2026-04-22 09:42:16 +02:00
  • f3e2cebfb4 fix(nav): scroll-restore key auf nav.from.url, nicht location hsiegeln 2026-04-22 09:28:20 +02:00
  • 442076a278 fix(nav): Scroll-Position bei Browser-Back robust wiederherstellen hsiegeln 2026-04-22 09:18:00 +02:00
  • 4afc597689 fix(nav): Header-Back-Pfeil als echtes history.back() hsiegeln 2026-04-22 09:09:45 +02:00
  • 42b1aed023 fix(shopping-e2e): beforeEach-Cleanup + checked-Count statt first-Row hsiegeln 2026-04-22 08:57:17 +02:00
  • a15390f4b8 fix(shopping): requireOnline-Guards + 2-space indent hsiegeln 2026-04-21 23:59:14 +02:00
  • 52bb83cbd5 fix(shopping-e2e): exact match fuer Leeren-Confirm-Button hsiegeln 2026-04-21 23:52:49 +02:00
  • 4e902b1d98 test(shopping): E2E-Spec + clearShoppingCart-Fixture hsiegeln 2026-04-21 23:50:05 +02:00
  • 0346a699b9 feat(shopping): Footer-Actions (Erledigte entfernen, Liste leeren) hsiegeln 2026-04-21 23:47:30 +02:00
  • f4eac4d9c3 feat(shopping): Rezept-Chips mit Portions-Stepper hsiegeln 2026-04-21 23:45:32 +02:00
  • 3c30d1f35a feat(shopping): Zutaten-Rows mit Abhaken hsiegeln 2026-04-21 23:43:00 +02:00
  • 943a645095 feat(shopping): Einkaufslisten-Seite mit Empty-State hsiegeln 2026-04-21 23:40:52 +02:00
  • 7fa1079125 refactor(wishlist): horizontale Actions + Einkaufswagen-Button hsiegeln 2026-04-21 23:38:26 +02:00
  • 0e6d2c93a6 feat(shopping): Header-Badge mit Einkaufswagen-Icon hsiegeln 2026-04-21 23:34:57 +02:00
  • 1bd5dd106f feat(shopping): ShoppingCartStore (Client) hsiegeln 2026-04-21 23:31:29 +02:00
  • dc15cf04a9 feat(shopping): Service-Worker network-only fuer /api/shopping-list/* hsiegeln 2026-04-21 23:28:17 +02:00
  • e53cdc96fe feat(shopping): DELETE /api/shopping-list/checked (Erledigte entfernen) hsiegeln 2026-04-21 23:26:32 +02:00
  • a500a5623e feat(shopping): POST/DELETE /api/shopping-list/check hsiegeln 2026-04-21 23:25:05 +02:00
  • 2750c298e9 feat(shopping): PATCH/DELETE /api/shopping-list/recipe/[id] hsiegeln 2026-04-21 23:23:21 +02:00
  • 7baf60f422 feat(shopping): POST /api/shopping-list/recipe hsiegeln 2026-04-21 23:21:35 +02:00
  • e176b8c3f2 style(shopping): GET/DELETE endpoint 2-space indent hsiegeln 2026-04-21 23:20:03 +02:00
  • 8570d41f53 feat(shopping): GET /api/shopping-list + DELETE (Liste leeren) hsiegeln 2026-04-21 23:18:24 +02:00
  • 76864a6034 feat(shopping): formatQuantity-Utility hsiegeln 2026-04-21 23:16:23 +02:00
  • 2c61d82935 feat(shopping): clearCart hsiegeln 2026-04-21 23:13:58 +02:00
  • 974227590f feat(shopping): clearCheckedItems + Orphan-Cleanup hsiegeln 2026-04-21 23:11:25 +02:00
  • 1889b0dea0 feat(shopping): toggleCheck (idempotent) hsiegeln 2026-04-21 23:08:20 +02:00
  • 494b672e8d fix(shopping): NULLIF-Guard gegen servings_default=0 in Aggregation hsiegeln 2026-04-21 23:06:19 +02:00
  • c31a9c6110 feat(shopping): listShoppingList mit Aggregation + Skalierung hsiegeln 2026-04-21 23:02:05 +02:00
  • 85bf197084 feat(shopping): setCartServings mit Positiv-Validation hsiegeln 2026-04-21 22:59:12 +02:00
  • 83fe95ac76 feat(shopping): removeRecipeFromCart hsiegeln 2026-04-21 22:56:26 +02:00
  • 95ba14ad6f refactor(shopping): DEFAULT_SERVINGS-Konstante + Kommentare hsiegeln 2026-04-21 22:54:54 +02:00
  • 8ceb5e95d7 feat(shopping): addRecipeToCart (idempotent via ON CONFLICT) hsiegeln 2026-04-21 22:50:58 +02:00
  • 7dab267033 feat(shopping): Repository-Skeleton mit Types hsiegeln 2026-04-21 22:47:21 +02:00
  • 45223df86d chore(db): Migration 013 fuer Einkaufsliste-Tabellen hsiegeln 2026-04-21 22:43:50 +02:00
  • fd5d759336 docs(plan): Implementierungs-Plan fuer Einkaufsliste hsiegeln 2026-04-21 22:37:04 +02:00
  • 956357d5ca docs(spec): Einkaufsliste-Design hsiegeln 2026-04-21 22:25:46 +02:00
  • d9490c8073 refactor(search): local search ignores domain filter hsiegeln 2026-04-21 21:59:48 +02:00
  • 0373dc32da feat(ai): Deutsch als starker Prior im OCR-Prompt v1.3.2 hsiegeln 2026-04-21 14:28:38 +02:00
  • 272a07777e feat(ai): OCR-Experten-Framing + expliziter User-Prompt hsiegeln 2026-04-21 14:26:18 +02:00
  • efdcace892 feat(ai): reichhaltigeres Logging fuer AI_FAILED-Diagnose hsiegeln 2026-04-21 14:08:10 +02:00
  • fb7c2f0e9b feat(photo-upload): zwei Buttons fuer Kamera vs. Datei-Picker v1.3.1 hsiegeln 2026-04-21 13:45:37 +02:00
  • 33ee6fbf2e feat(photo-upload): Picker ohne capture -> auch gespeicherte Fotos hsiegeln 2026-04-21 13:39:07 +02:00
  • e2713913e7 feat(photo-upload): Logging fuer Upload-Parse-Fehler hsiegeln 2026-04-21 13:37:42 +02:00
  • 3bc7fa16e2 feat(photo-upload): Limits hochschrauben fuer Tablet-Fotos hsiegeln 2026-04-21 13:31:34 +02:00
  • 173d9d138d fix(ai): sharp via createRequire, nicht ES-Import v1.3.0 hsiegeln 2026-04-21 13:08:53 +02:00
  • 5492d4dc24 fix(deploy): BODY_SIZE_LIMIT=10MB fuer Foto-Upload hsiegeln 2026-04-21 13:05:09 +02:00
  • 39de08abf9 fix(ai): sharp via dynamic import, nicht top-level hsiegeln 2026-04-21 12:33:59 +02:00
  • fd7884e1b2 fix(vite): sharp als ssr.external markieren hsiegeln 2026-04-21 12:27:28 +02:00
  • 13728f9252 fix(docker): expliziter Plattform-Install fuer sharp-Prebuilts hsiegeln 2026-04-21 11:52:55 +02:00
  • 83f5b88d94 fix(docker): node-addon-api + ignore-scripts/rebuild fuer sharp hsiegeln 2026-04-21 11:49:41 +02:00
  • cb93725139 fix(docker): npm install statt npm ci fuer sharp-Prebuilts hsiegeln 2026-04-21 11:46:55 +02:00
  • 80c72b6e5b fix(docker): sharp-Prebuilts beim CI-Build korrekt installieren hsiegeln 2026-04-21 11:44:05 +02:00
  • b88f1fbfa4 chore(release): v1.3.0 — Foto-Rezept-Magie hsiegeln 2026-04-21 10:51:52 +02:00
  • f4aefb8e99 docs: Foto-Rezept-Magie in OPERATIONS/ARCHITECTURE/CLAUDE hsiegeln 2026-04-21 10:51:23 +02:00
  • 6dab36339a test(e2e): Foto-Import Happy-Path und Offline-Icon hsiegeln 2026-04-21 10:50:01 +02:00
  • eea5fb7560 feat(ui): Camera-Icon im Header mit Gemini-Config- und Offline-Gate hsiegeln 2026-04-21 10:48:38 +02:00
  • 47e91de0a1 feat(ui): /new/from-photo Page mit File-Picker, Lade- und Fehler-States hsiegeln 2026-04-21 10:47:33 +02:00
  • bc42f35f8c feat(client): PhotoUploadStore mit idle/loading/success/error hsiegeln 2026-04-21 10:45:36 +02:00
  • 8c23875ba2 feat(editor): Bild-Block skip wenn recipe.id === null hsiegeln 2026-04-21 10:44:48 +02:00
  • 06e60afc88 feat(api): POST /api/recipes fuer Scratch-Insert aus Foto-Import hsiegeln 2026-04-21 10:43:30 +02:00
  • e01f15a2a6 feat(api): POST /api/recipes/extract-from-photo hsiegeln 2026-04-21 10:42:46 +02:00
  • 3f259a7870 feat(ai): simpler In-Memory-Ratelimiter pro IP hsiegeln 2026-04-21 10:41:16 +02:00