Public Access
Backend: - POST /api/ingredients now checks name_lower and aliases before inserting - Returns existing ingredient on 409 instead of throwing error Frontend: - Removed fragile 409-recovery logic from Pantry.tsx handleAdd - Added aliases field to Ingredient type for case-insensitive matching Fixes pantry add for ingredients like 'Carrots' whose canonical name is 'Carrot'