This website requires JavaScript.
6cc79836d5
feat(shopping): add RecipeReferencePanel.svelte component
Marcel Raddatz
2026-04-04 18:55:31 +02:00
5ac8f1768f
feat(shopping): add AddCustomItem.svelte component
Marcel Raddatz
2026-04-04 18:54:47 +02:00
7bdadbe962
feat(shopping): add ChecklistItem.svelte component
Marcel Raddatz
2026-04-04 18:54:12 +02:00
2151dff4db
feat(shopping): add ShoppingHeader.svelte component
Marcel Raddatz
2026-04-04 18:53:36 +02:00
e831480860
feat(shopping): add +page.server.ts with load function and form actions
Marcel Raddatz
2026-04-04 18:52:44 +02:00
92922533ac
feat(shopping): finalize GET /v1/shopping-list endpoint and regenerate OpenAPI types
Marcel Raddatz
2026-04-04 18:49:08 +02:00
16b70bd818
feat(shopping): add GET /v1/shopping-lists endpoint and planner-only guard
Marcel Raddatz
2026-04-04 18:35:31 +02:00
5325f4827e
feat(shopping): refactor generateFromPlan to merge strategy
Marcel Raddatz
2026-04-04 18:33:15 +02:00
c26c2e1973
feat(shopping): add getByWeekStart to ShoppingService
Marcel Raddatz
2026-04-04 18:30:41 +02:00
93e8bf9e41
feat(shopping): extend response with generatedAt, filteredStaplesCount, RecipeRef
Marcel Raddatz
2026-04-04 18:29:07 +02:00
7e254fc280
feat(shopping): add week-based shopping list repository query
Marcel Raddatz
2026-04-04 18:23:43 +02:00
3be9f502c6
feat(auth): add @RequiresHouseholdRole annotation with interceptor
Marcel Raddatz
2026-04-04 18:22:47 +02:00
2f690eb3cb
feat(common): add ForbiddenException with 403 handler
Marcel Raddatz
2026-04-04 18:18:27 +02:00
2253c76287
feat(shopping): add generated_at column to shopping_list
Marcel Raddatz
2026-04-04 18:17:12 +02:00
e12fb72fc2
refactor(specs): remove real-time sync from D1 shopping list spec
Marcel Raddatz
2026-04-04 16:45:30 +02:00
693ec2b997
feat(specs): Add-to-Plan flows — screens C4, C5, C6
Marcel Raddatz
2026-04-04 16:43:18 +02:00
e73a84af5f
fix(recipes): correct effort map casing to match backend values
Marcel Raddatz
2026-04-04 08:16:04 +02:00
27e09a77d6
fix(recipes): cast JPQL null params to avoid lower(bytea) error on PostgreSQL
Marcel Raddatz
2026-04-03 22:47:47 +02:00
6d76da5542
Merge pull request 'feat: C3 — Variety review screen (Issue #28 )' (#41 ) from feat/issue-28-variety-review into master
marcel
2026-04-03 11:37:53 +02:00
8e82213d1e
fix(variety): remove unused total, add warning border, fix abbreviation, aria
Marcel Raddatz
2026-04-03 11:37:26 +02:00
cb15143c30
refactor(variety): fix \$derived.by pattern, remove dead import, use pure functions
Marcel Raddatz
2026-04-03 11:36:00 +02:00
9adf786b8f
test(variety): extract and test sub-score/warnings pure functions
Marcel Raddatz
2026-04-03 11:32:20 +02:00
1bf929280b
test(variety): add all-zero edge case test for EffortBar
Marcel Raddatz
2026-04-03 11:30:19 +02:00
75c860a62b
test(variety): add boundary tests for VarietyScoreHero (score=0,4,7,10)
Marcel Raddatz
2026-04-03 11:29:26 +02:00
8ad636f825
feat(variety): implement C3 variety review screen (Issue #28 )
Marcel Raddatz
2026-04-03 11:23:29 +02:00
7c07bc443b
feat(suggestions): C2 — Meal suggestions (variety-aware) (#40 )
Marcel Raddatz
2026-04-03 11:18:45 +02:00
05e47c3dac
feat(planner): C1 — Weekly planner home screen
marcel
2026-04-03 11:07:56 +02:00
5d2bb9e84e
fix(planner): address all PR review blockers
Marcel Raddatz
2026-04-03 11:07:47 +02:00
e3f8d8ad73
feat(planner): implement C1 weekly planner home screen (#26 )
Marcel Raddatz
2026-04-03 11:01:17 +02:00
0511a735a5
Merge pull request 'feat(recipes): B3 — Add/edit recipe form with dynamic ingredients, steps, tag chips' (#38 ) from feat/issue-23-recipe-form into master
marcel
2026-04-03 10:36:19 +02:00
33f3b30cb4
feat(recipes): style RecipeForm with design system + split-panel layout
Marcel Raddatz
2026-04-03 10:35:35 +02:00
e4d3008139
feat(recipes): display form error from \$page.form in RecipeForm
Marcel Raddatz
2026-04-03 10:31:18 +02:00
6505cb4251
test(recipes): add action tests and harden create/update form actions
Marcel Raddatz
2026-04-03 10:27:54 +02:00
3d49e6b7bf
feat(recipes): add /recipes/[id]/edit route with update action
Marcel Raddatz
2026-04-03 10:20:45 +02:00
4e2b0b5727
feat(recipes): add /recipes/new route with create action
Marcel Raddatz
2026-04-03 10:19:27 +02:00
2cef8a1169
feat(recipes): add RecipeForm component — add/edit two-state form
Marcel Raddatz
2026-04-03 10:17:17 +02:00
fcf0f297bb
Merge pull request 'feat(recipes): B2 — Recipe detail view with hero, ingredients, steps' (#37 ) from feat/issue-24-recipe-detail into master
marcel
2026-04-03 10:07:27 +02:00
0256b4360b
fix(recipes): address B2 review — tags, sort, edit link, types, a11y, tests
Marcel Raddatz
2026-04-03 10:07:19 +02:00
00c48a7c96
feat(recipes): implement B2 recipe detail page with mobile/desktop layout
Marcel Raddatz
2026-04-03 10:02:20 +02:00
ce860d68e4
feat(recipes): add recipe detail load function with 404 handling
Marcel Raddatz
2026-04-03 10:00:02 +02:00
b39d04acce
feat(recipes): add StepList component with numbered circles
Marcel Raddatz
2026-04-03 09:58:39 +02:00
c7e56a173d
feat(recipes): add IngredientList component (read-only)
Marcel Raddatz
2026-04-03 09:57:36 +02:00
86a25eb038
feat(recipes): add RecipeHero component with image/no-image variants
Marcel Raddatz
2026-04-03 09:56:35 +02:00
a34c6f30f2
Merge pull request 'feat(recipes): B1 — Recipe Library page with search and effort filtering' (#36 ) from feat/issue-22-recipe-library into master
marcel
2026-04-03 09:53:38 +02:00
9bb6293d9f
fix(recipes): address review feedback — shared type, design system tokens, test coverage
Marcel Raddatz
2026-04-03 09:53:32 +02:00
47c748145d
feat(recipes): implement recipe library page with search and effort filtering
Marcel Raddatz
2026-04-03 09:49:39 +02:00
a25286e385
feat(recipes): load recipe list from API in page server
Marcel Raddatz
2026-04-03 09:45:43 +02:00
a733e8dd66
feat(recipes): add RecipeGrid with 2/4-col responsive grid and empty state
Marcel Raddatz
2026-04-03 09:44:05 +02:00
35ed6ca878
feat(recipes): add FilterChipRow with effort filter chips
Marcel Raddatz
2026-04-03 09:43:06 +02:00
dc99459a2e
feat(recipes): add RecipeCard component with compact/full image variants
Marcel Raddatz
2026-04-03 09:41:56 +02:00
021d308a71
feat(staples): A3/D3 — Pantry staples toggle UI
marcel
2026-04-03 09:35:03 +02:00
df95462094
refactor(staples): convert dynamic userEvent import to static in CategorySection test
feat/issue-20-pantry-staples
Marcel Raddatz
2026-04-03 09:30:19 +02:00
2d6ddf0e48
fix(staples): apply design-system styles to nav links and settings heading
Marcel Raddatz
2026-04-03 09:29:53 +02:00
73b33ee956
fix(staples): apply design-system button spec to StapleChip (13px, tracking, font-sans)
Marcel Raddatz
2026-04-03 09:28:50 +02:00
8daaa0e21d
fix(staples): pass ctx from URL through load function; fix script order in page
Marcel Raddatz
2026-04-03 09:27:43 +02:00
45b7e7b003
fix(staples): add role guard — only planer role can toggle staples
Marcel Raddatz
2026-04-03 09:25:40 +02:00
3581af2bf9
fix(staples): forward backend error status code instead of always 500
Marcel Raddatz
2026-04-03 09:25:06 +02:00
21b873b85b
fix(staples): validate isStaple is boolean before forwarding to backend
Marcel Raddatz
2026-04-03 09:24:35 +02:00
65f18cfb43
test(staples): cover API failure fallback in page load
Marcel Raddatz
2026-04-03 09:24:07 +02:00
7b497be1c1
test(staples): add empty categories edge case to StaplesManager
Marcel Raddatz
2026-04-03 09:23:48 +02:00
7979076f5e
feat(invite): stub household invite page as onboarding Continue target
Marcel Raddatz
2026-04-02 20:16:46 +02:00
d68a9d9312
refactor(setup): redirect to /household/staples?ctx=onboarding after household creation
Marcel Raddatz
2026-04-02 20:16:33 +02:00
97175e7d9d
feat(staples): add staples page with onboarding and settings layouts
Marcel Raddatz
2026-04-02 20:16:08 +02:00
3550d681dc
feat(staples): load categories and ingredients, group by category
Marcel Raddatz
2026-04-02 20:14:25 +02:00
54df70a442
feat(staples): add PATCH proxy server route for ingredient staple toggle
Marcel Raddatz
2026-04-02 20:13:02 +02:00
d577e0231c
feat(staples): add StaplesManager with optimistic toggle and debounced PATCH
Marcel Raddatz
2026-04-02 20:11:51 +02:00
376dc03646
feat(staples): add CategorySection component with eyebrow heading and chip row
Marcel Raddatz
2026-04-02 20:07:51 +02:00
7bdc049461
feat(staples): add StapleChip component with aria-pressed toggle and focus ring
Marcel Raddatz
2026-04-02 20:06:32 +02:00
7c66dcad3a
refactor(onboarding): clarify test comment and remove unused response mock
Marcel Raddatz
2026-04-02 19:32:44 +02:00
01a321caa9
test(onboarding): add ProgressSidebar test for currentStep=3 (all prior steps completed)
Marcel Raddatz
2026-04-02 19:31:56 +02:00
2d1604492d
feat(onboarding): add max-length validation for household name (100 chars)
Marcel Raddatz
2026-04-02 19:31:13 +02:00
3742364956
fix(onboarding): make HouseholdSetupForm subtitle responsive (12px mobile, 14px desktop)
Marcel Raddatz
2026-04-02 19:30:23 +02:00
36dfea34cc
fix(onboarding): make HouseholdSetupForm heading responsive and use font-medium
Marcel Raddatz
2026-04-02 19:29:52 +02:00
66525484a6
fix(onboarding): correct Tailwind arbitrary font-family syntax in HouseholdSetupForm
Marcel Raddatz
2026-04-02 19:29:21 +02:00
e5614ccf30
refactor(onboarding): remove aria-hidden workaround from progress sidebar
Marcel Raddatz
2026-04-02 19:28:46 +02:00
6de7f5a9b5
feat(onboarding): add A2 household setup page with responsive progress sidebar layout
Marcel Raddatz
2026-04-02 19:20:02 +02:00
e85a7ca313
feat(onboarding): add household setup page server action and load guard
Marcel Raddatz
2026-04-02 19:14:39 +02:00
175bfbe7dd
feat(onboarding): add HouseholdSetupForm component with disabled-until-valid continue button
Marcel Raddatz
2026-04-02 19:13:41 +02:00
b9ef06fd73
feat(onboarding): add ProgressSidebar component with 3-step active/completed/future states
Marcel Raddatz
2026-04-02 19:08:38 +02:00
09333ccc0a
test(auth): verify security context is stored in session after login and signup
Marcel Raddatz
2026-04-02 18:55:25 +02:00
93ce1eaeac
refactor(auth): add comments, clearContext on logout, explain session auth
Marcel Raddatz
2026-04-02 18:52:16 +02:00
61249af086
feat(auth): add secure flag to JSESSIONID cookie and test JSESSIONID cookie setting
Marcel Raddatz
2026-04-02 18:50:34 +02:00
16f0feb8d5
fix(auth): fix mock responses in tests and block open redirect in login
Marcel Raddatz
2026-04-02 18:48:48 +02:00
0aa65214fc
fix(auth): resolve broken signup/login flow end-to-end
Marcel Raddatz
2026-04-02 17:31:29 +02:00
ab3363eeec
refactor(auth): use shared BrandPanel on login page
Marcel Raddatz
2026-04-02 16:45:22 +02:00
999e54de86
feat(auth): build login page with LoginForm, brand panel, and title
Marcel Raddatz
2026-04-02 16:21:31 +02:00
73acc0c638
feat(auth): add login server action with validation and redirect
Marcel Raddatz
2026-04-02 16:20:02 +02:00
c27c97ff7d
feat(auth): add LoginForm component with validation and password toggle
Marcel Raddatz
2026-04-02 16:18:49 +02:00
b3607ca47a
test(auth): add password length boundary tests (7 fails, 8 passes)
Marcel Raddatz
2026-04-02 15:07:42 +02:00
7de18740f2
test(auth): add multi-error test for empty form submission
Marcel Raddatz
2026-04-02 15:07:07 +02:00
6d0f00c8fb
feat(auth): add use:enhance and server error display to signup form
Marcel Raddatz
2026-04-02 15:06:21 +02:00
bd9e1334e0
feat(auth): add server-side validation to signup form action
Marcel Raddatz
2026-04-02 15:02:33 +02:00
82840bb420
fix(auth): center signup form on wide desktop screens
Marcel Raddatz
2026-04-02 15:01:03 +02:00
845e669cde
feat(auth): add page title to signup screen
Marcel Raddatz
2026-04-02 15:00:02 +02:00
afcea6590d
feat(auth): add autocomplete attributes to signup form inputs
Marcel Raddatz
2026-04-02 14:58:59 +02:00
75a13d9df1
fix(auth): style login link green/font-medium per spec
Marcel Raddatz
2026-04-02 14:57:47 +02:00
b71c98662b
fix(auth): use --green-dark on submit button for WCAG AA contrast
Marcel Raddatz
2026-04-02 14:56:49 +02:00
bfa8f20fe3
test(auth): add no-nav-chrome regression test for signup page
Marcel Raddatz
2026-04-02 14:48:23 +02:00
596652d6e4
feat(auth): add signup page with form action
Marcel Raddatz
2026-04-02 14:47:36 +02:00
d3a8518298
feat(auth): add SignupForm component with validation and password toggle
Marcel Raddatz
2026-04-02 14:45:54 +02:00