Commit Graph

  • 520dae5adf feat(recipes): add image upload, fix save 500, seed HelloFresh data Marcel Raddatz 2026-04-09 20:23:28 +02:00
  • f139dce82c docs(specs): add planner desktop redesign spec — flip tiles Marcel Raddatz 2026-04-09 18:19:57 +02:00
  • 0596fddcd3 refactor(planning): extract applyPenalties helper to unify score formula Marcel Raddatz 2026-04-09 15:08:49 +02:00
  • 008c725813 test(planner): verify mobile swap sheet triggers suggestion fetch Marcel Raddatz 2026-04-09 15:04:20 +02:00
  • 1739b70d54 feat(planner): change neutral badge copy to Kein Einfluss Marcel Raddatz 2026-04-09 15:03:39 +02:00
  • 3b829325f2 feat(planner): hide RecipePicker inner header in swap context Marcel Raddatz 2026-04-09 15:02:56 +02:00
  • d139e5e28c refactor(planner): delete orphaned SwapSuggestionList component and tests Marcel Raddatz 2026-04-09 15:02:07 +02:00
  • c9d6564fbe refactor(planner): remove dead SwapSuggestionList import and sortedRecipes derived Marcel Raddatz 2026-04-09 15:01:37 +02:00
  • ba79cff4e7 feat(planner): show variety score in swap menu via RecipePicker Marcel Raddatz 2026-04-09 13:40:17 +02:00
  • 55285e7d5d feat(planner): show score badges for all recipes in RecipePicker Marcel Raddatz 2026-04-09 13:03:10 +02:00
  • 055ae11fa3 feat(planner): show yellow neutral badge for scoreDelta = 0 in RecipePicker Marcel Raddatz 2026-04-09 12:54:31 +02:00
  • bf18f2bd84 fix(planner): format variety score to one decimal place Marcel Raddatz 2026-04-09 12:52:56 +02:00
  • da21a12222 feat(planner): replace Variationskonflikt with red delta badge Marcel Raddatz 2026-04-09 12:50:03 +02:00
  • e9dc04b2a5 feat(planner): add remove meal with undo; fix RecipePicker badge for neutral delta Marcel Raddatz 2026-04-09 12:47:53 +02:00
  • 8dfc3df06b fix(planning): hasConflict only when scoreDelta strictly negative Marcel Raddatz 2026-04-09 12:47:41 +02:00
  • ea070b4760 fix(planning): replace existing slot in simulation instead of appending Marcel Raddatz 2026-04-09 12:31:24 +02:00
  • aecdf249d6 feat(planner): add onremove prop and Entfernen button to MealActionSheet Marcel Raddatz 2026-04-09 12:25:22 +02:00
  • e4345350ad fix(planner): RecipePicker UI polish from review Marcel Raddatz 2026-04-09 12:17:09 +02:00
  • 56decf155d test(planner): clarify server.test.ts error-branch test name Marcel Raddatz 2026-04-09 12:16:29 +02:00
  • 1de4b15e34 refactor(planner): extract Suggestion type to $lib/planner/types.ts Marcel Raddatz 2026-04-09 12:16:02 +02:00
  • ccec0baa99 feat(planner): add AbortController to suggestion fetch $effect Marcel Raddatz 2026-04-09 12:15:17 +02:00
  • 9928591b48 refactor(planner): extract computeCurrentScore helper in PlanningService Marcel Raddatz 2026-04-09 12:11:44 +02:00
  • 89a549a1c8 test(planner): assert hasConflict=true for neutral scoreDelta on empty plan Marcel Raddatz 2026-04-09 12:11:00 +02:00
  • c24281dd4c test(planner): cover topN=0 and topN=-1 boundary in SuggestionsTest Marcel Raddatz 2026-04-09 12:10:33 +02:00
  • 8051fcbe22 refactor(planner): extract MAX_VARIETY_SCORE constant in PlanningService Marcel Raddatz 2026-04-09 12:09:08 +02:00
  • b45ab0fd46 fix(planner): guard scoreDelta against undefined in RecipePicker badge Marcel Raddatz 2026-04-09 12:00:37 +02:00
  • 2bbc3762e2 feat(planner): lazy-fetch variety suggestions in RecipePicker for empty slots Marcel Raddatz 2026-04-09 11:46:25 +02:00
  • a751b0758a feat(planner): add server.test.ts for GET /planner, fix sort + add error handling Marcel Raddatz 2026-04-09 11:39:50 +02:00
  • 8234c2f162 feat(planner): RecipePicker uses scoreDelta/hasConflict, drop currentVarietyScore, add isLoading Marcel Raddatz 2026-04-09 11:38:47 +02:00
  • 257808016d chore(api): update SuggestionItem schema — scoreDelta + hasConflict replace simulatedScore Marcel Raddatz 2026-04-09 11:35:57 +02:00
  • cd7f4a1ea0 chore(planner): delete orphaned SuggestionCard component and test Marcel Raddatz 2026-04-09 11:35:33 +02:00
  • b673a466e9 feat(planner): replace simulatedScore with scoreDelta + hasConflict in SuggestionItem Marcel Raddatz 2026-04-09 11:33:52 +02:00
  • e3066ec3e5 docs(specs): add C3 variety page rework mockups and V1 implementation spec Marcel Raddatz 2026-04-09 16:31:14 +02:00
  • bd1604fc1d docs(specs): add detailed implementation spec for E4 variety settings (V2 Kontext-Preset) Marcel Raddatz 2026-04-09 16:13:17 +02:00
  • c297403506 docs(specs): add 3 mockup variations for E4 variety settings screen Marcel Raddatz 2026-04-09 16:00:02 +02:00
  • fa4a4c9ef7 docs(specs): add J9 variety score config user journey and variety page rework spec Marcel Raddatz 2026-04-09 15:51:26 +02:00
  • 116e400a91 refactor(planning): extract applyPenalties helper to unify score formula Marcel Raddatz 2026-04-09 15:08:49 +02:00
  • 6dd0b7ac93 docs(specs): add final frontend specs for members and settings Kachel views Marcel Raddatz 2026-04-09 15:06:11 +02:00
  • 49ed75a989 test(planner): verify mobile swap sheet triggers suggestion fetch Marcel Raddatz 2026-04-09 15:04:20 +02:00
  • 813ddf8214 feat(planner): change neutral badge copy to Kein Einfluss Marcel Raddatz 2026-04-09 15:03:39 +02:00
  • 7359eba946 feat(planner): hide RecipePicker inner header in swap context Marcel Raddatz 2026-04-09 15:02:56 +02:00
  • 16162d80f4 refactor(planner): delete orphaned SwapSuggestionList component and tests Marcel Raddatz 2026-04-09 15:02:07 +02:00
  • 148f6a7b5b refactor(planner): remove dead SwapSuggestionList import and sortedRecipes derived Marcel Raddatz 2026-04-09 15:01:37 +02:00
  • f4503b0220 feat(planner): show variety score in swap menu via RecipePicker Marcel Raddatz 2026-04-09 13:40:17 +02:00
  • f4648cc382 feat(planner): show score badges for all recipes in RecipePicker Marcel Raddatz 2026-04-09 13:03:10 +02:00
  • 081b8dcaf0 feat(planner): show yellow neutral badge for scoreDelta = 0 in RecipePicker Marcel Raddatz 2026-04-09 12:54:31 +02:00
  • f33302e012 fix(planner): format variety score to one decimal place Marcel Raddatz 2026-04-09 12:52:56 +02:00
  • 06bf567b90 feat(planner): replace Variationskonflikt with red delta badge Marcel Raddatz 2026-04-09 12:50:03 +02:00
  • 1de9dfc314 feat(planner): add remove meal with undo; fix RecipePicker badge for neutral delta Marcel Raddatz 2026-04-09 12:47:53 +02:00
  • 77cdccb26c fix(planning): hasConflict only when scoreDelta strictly negative Marcel Raddatz 2026-04-09 12:47:41 +02:00
  • 1611ddabf6 fix(planning): replace existing slot in simulation instead of appending Marcel Raddatz 2026-04-09 12:31:24 +02:00
  • f55d938b32 feat(planner): add onremove prop and Entfernen button to MealActionSheet Marcel Raddatz 2026-04-09 12:25:22 +02:00
  • cb921b3c0f fix(planner): RecipePicker UI polish from review Marcel Raddatz 2026-04-09 12:17:09 +02:00
  • 8686f9eb9f test(planner): clarify server.test.ts error-branch test name Marcel Raddatz 2026-04-09 12:16:29 +02:00
  • f7a239655a refactor(planner): extract Suggestion type to $lib/planner/types.ts Marcel Raddatz 2026-04-09 12:16:02 +02:00
  • 539ca5d231 feat(planner): add AbortController to suggestion fetch $effect Marcel Raddatz 2026-04-09 12:15:17 +02:00
  • 0a9e8032cf refactor(planner): extract computeCurrentScore helper in PlanningService Marcel Raddatz 2026-04-09 12:11:44 +02:00
  • f84a647b8d test(planner): assert hasConflict=true for neutral scoreDelta on empty plan Marcel Raddatz 2026-04-09 12:11:00 +02:00
  • e17e8d4630 test(planner): cover topN=0 and topN=-1 boundary in SuggestionsTest Marcel Raddatz 2026-04-09 12:10:33 +02:00
  • 482597bb6a refactor(planner): extract MAX_VARIETY_SCORE constant in PlanningService Marcel Raddatz 2026-04-09 12:09:08 +02:00
  • 387d0705a4 fix(planner): guard scoreDelta against undefined in RecipePicker badge Marcel Raddatz 2026-04-09 12:00:37 +02:00
  • ab66269131 feat(planner): lazy-fetch variety suggestions in RecipePicker for empty slots Marcel Raddatz 2026-04-09 11:46:25 +02:00
  • 59366b6e9c feat(planner): add server.test.ts for GET /planner, fix sort + add error handling Marcel Raddatz 2026-04-09 11:39:50 +02:00
  • 4549e9a7fd feat(planner): RecipePicker uses scoreDelta/hasConflict, drop currentVarietyScore, add isLoading Marcel Raddatz 2026-04-09 11:38:47 +02:00
  • b6ad64ea53 chore(api): update SuggestionItem schema — scoreDelta + hasConflict replace simulatedScore Marcel Raddatz 2026-04-09 11:35:57 +02:00
  • 7e97d2dc58 chore(planner): delete orphaned SuggestionCard component and test Marcel Raddatz 2026-04-09 11:35:33 +02:00
  • d008a17735 feat(planner): replace simulatedScore with scoreDelta + hasConflict in SuggestionItem Marcel Raddatz 2026-04-09 11:33:52 +02:00
  • f0bbb3b009 fix(planner): exclude current recipe from swap suggestions Marcel Raddatz 2026-04-09 10:38:30 +02:00
  • b4fa3ca23e feat(planner): add isLoading prop to SwapSuggestionList — disables Pick buttons during PATCH Marcel Raddatz 2026-04-09 10:32:59 +02:00
  • 9482ecbf36 fix(planner): add truncation and title attribute to replacing-name span Marcel Raddatz 2026-04-09 10:31:13 +02:00
  • 278fda7d90 fix(planner): translate MealActionSheet button labels to German Marcel Raddatz 2026-04-09 10:30:39 +02:00
  • 8e3256d960 fix(planner): translate SwapSuggestionList copy to German Marcel Raddatz 2026-04-09 10:29:54 +02:00
  • 30722d9bcc refactor(planner): extract shared recipe info markup into DayMealCard snippet Marcel Raddatz 2026-04-09 10:28:56 +02:00
  • dd9a86d4e9 feat(planner): wire J4 swap flow — mobile action sheet + desktop inline panel Marcel Raddatz 2026-04-09 10:13:45 +02:00
  • c8c2605f31 feat(planner): add SwapSuggestionList component for J4 swap context Marcel Raddatz 2026-04-09 10:10:44 +02:00
  • 1b2a02881d feat(planner): add MealActionSheet component for mobile swap trigger Marcel Raddatz 2026-04-09 10:07:46 +02:00
  • 8756bf93d9 feat(planner): add sortEasiestFirst utility for J4 swap context Marcel Raddatz 2026-04-09 10:03:47 +02:00
  • dac83c70ea feat(planner): DayMealCard gains onactionsheet prop for full-card mobile tap target Marcel Raddatz 2026-04-09 10:02:47 +02:00
  • 5b8d336d21 fix(planner): map backend role 'planner' to 'planer' and enlarge nav buttons to 40px touch targets Marcel Raddatz 2026-04-09 09:51:32 +02:00
  • e5d96cd85a fix(frontend): address all PR review concerns Marcel Raddatz 2026-04-09 08:19:37 +02:00
  • ea7113ec53 fix(backend): add role guard to variety-preview and extract shared scoring method Marcel Raddatz 2026-04-09 08:11:45 +02:00
  • 4333dc0d84 refactor(planner): remove C2 suggestions route, replace with callback-based DayMealCard Marcel Raddatz 2026-04-08 23:25:35 +02:00
  • cbafe783e9 feat(planner): integrate C4 RecipePicker with PanelState machine + slot actions Marcel Raddatz 2026-04-08 23:23:26 +02:00
  • 178c888635 feat(recipes): add C6 day-picker flow — week plan load + slot actions + DayPicker sheet Marcel Raddatz 2026-04-08 23:09:40 +02:00
  • f5adc051e8 feat(recipes): add C5 quick action buttons to RecipeCard Marcel Raddatz 2026-04-08 22:58:50 +02:00
  • 90c9ea1894 feat(planner): add UndoBar component with 4s auto-dismiss Marcel Raddatz 2026-04-08 22:57:05 +02:00
  • ba41f6984b feat(planner): add DayPicker component (C6) Marcel Raddatz 2026-04-08 22:44:29 +02:00
  • 25c575c167 feat(planner): add RecipePicker component (C4) and suggestions API endpoint Marcel Raddatz 2026-04-08 22:42:10 +02:00
  • 36ae82af5d feat(ui): add BottomSheet.svelte shared wrapper component Marcel Raddatz 2026-04-08 22:38:59 +02:00
  • 7175b56833 feat(planning): add GET /v1/week-plans/{planId}/variety-preview endpoint Marcel Raddatz 2026-04-08 22:36:03 +02:00
  • a52b0a9d24 feat(planning): enforce planner role on slot mutation endpoints Marcel Raddatz 2026-04-08 22:34:28 +02:00
  • f6265efa92 test(shopping): add component tests for ShoppingHeader, ChecklistItem, AddCustomItem Marcel Raddatz 2026-04-06 19:58:28 +02:00
  • 3cd9154550 refactor(shopping): extract ShoppingChecklist.svelte to eliminate mobile/desktop duplication Marcel Raddatz 2026-04-06 19:55:54 +02:00
  • be43fe94b6 fix(shopping): address frontend review concerns Marcel Raddatz 2026-04-06 19:54:25 +02:00
  • e3afe1b4f2 test(shopping): add HTTP-level role guard test and blank customName validation test Marcel Raddatz 2026-04-06 19:52:09 +02:00
  • eb5ee1ab5a test(shopping): add missing service tests for stale items, dedup, and household isolation Marcel Raddatz 2026-04-06 19:50:27 +02:00
  • 9d210befa1 fix(security): add @Valid constraints on AddItemRequest to prevent oversized input Marcel Raddatz 2026-04-06 19:49:06 +02:00
  • 40a6a0e92d fix(security): use generic forbidden message to avoid leaking required role Marcel Raddatz 2026-04-06 19:46:24 +02:00
  • 40ee4dad53 refactor(shopping): extract mergeKey helper to eliminate duplicate key construction Marcel Raddatz 2026-04-06 19:44:44 +02:00
  • 741141168b feat(shopping): build main +page.svelte with responsive layout and empty states Marcel Raddatz 2026-04-04 18:56:42 +02:00