diff --git a/app/models/schemas/recipe.py b/app/models/schemas/recipe.py
index c0b434d..0fc8d0a 100644
--- a/app/models/schemas/recipe.py
+++ b/app/models/schemas/recipe.py
@@ -137,7 +137,8 @@ class RecipeRequest(BaseModel):
pantry_match_only: bool = False # when True, only return recipes with zero missing ingredients
complexity_filter: str | None = None # 'easy' | 'moderate' | 'involved' — None = any
max_time_min: int | None = None # filter by estimated cooking time ceiling
- max_total_min: int | None = None # filter by parsed total time from recipe directions
+ max_total_min: int | None = None # filter by parsed total time (active + passive)
+ max_active_min: int | None = None # filter by hands-on active time only
unit_system: str = "metric" # "metric" | "imperial"
diff --git a/app/services/recipe/recipe_engine.py b/app/services/recipe/recipe_engine.py
index 817479b..6d8b901 100644
--- a/app/services/recipe/recipe_engine.py
+++ b/app/services/recipe/recipe_engine.py
@@ -918,6 +918,14 @@ class RecipeEngine:
elif row_time_min > req.max_total_min:
continue
+ # Active (hands-on) time filter — independent of total time.
+ # Lets users request "≤30 min hands-on, any total" to include slow braises.
+ # Skips recipes where active_min == 0 (no time signals parsed) to avoid
+ # hiding valid results when the parser couldn't extract timing.
+ if req.max_active_min is not None and row_time_effort.active_min > 0:
+ if row_time_effort.active_min > req.max_active_min:
+ continue
+
# Level 2: also add dietary constraint swaps from substitution_pairs
if req.level == 2 and req.constraints:
for ing in ingredient_names:
diff --git a/frontend/src/components/RecipesView.vue b/frontend/src/components/RecipesView.vue
index 79547f6..04b3219 100644
--- a/frontend/src/components/RecipesView.vue
+++ b/frontend/src/components/RecipesView.vue
@@ -142,22 +142,40 @@
-
-
-
+
+
+ Hands-on time
+
+
+
+
+
+
+ Total time
+
+
+
+
+
- Filters by time found in recipe steps.
- No time limit set.
+ Both limits apply when set. Hands-on excludes wait time (marinating, baking, etc.).