feat: implement remaining TODO.md feature ideas + fix mobile headers
Implements the six previously-unscoped feature ideas plus a mobile layout fix reported via screenshot: - Mobile: Recipes/Collections/Pantry/Meal Plan/Shopping Lists headers now stack and wrap instead of clipping buttons on narrow viewports. - Recipe diff/compare view: word/list diff against any past version, next to Restore in version history. - Shared meal plans & shopping lists: new shoppingListMembers/ mealPlanMembers tables (viewer/editor roles, mirrors collectionMembers), share dialogs, membership-checked routes. - PDF cookbook export: /print/collection/[id] renders a whole collection with page breaks, using the existing print-CSS pattern instead of adding a PDF rendering dependency. - Grocery delivery handoff: shopping lists can copy-as-text (works today) or send to Instacart once INSTACART_API_KEY is configured (stub adapter — real API needs a partner agreement). - Personalized "For You" feed tab: ranks public recipes by tag/ dietary overlap with the user's favorited/highly-rated history. - PWA: added manifest.json + icons on top of the existing service worker so the app is installable; cook-mode pages were already cached for offline use. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -327,7 +327,8 @@
|
||||
"partialMatches": "Partial matches",
|
||||
"noMatches": "No strong matches found",
|
||||
"missing": "Missing",
|
||||
"ingredientProgress": "{matched}/{total} ingredients"
|
||||
"ingredientProgress": "{matched}/{total} ingredients",
|
||||
"useItUp": "Use it up"
|
||||
},
|
||||
"mealPlan": {
|
||||
"title": "Meal Plan",
|
||||
@@ -386,6 +387,8 @@
|
||||
"following": "Following",
|
||||
"trending": "Trending",
|
||||
"trendingEmpty": "No trending recipes this week.",
|
||||
"forYou": "For You",
|
||||
"forYouEmpty": "Favorite or rate some recipes to get personalized picks here.",
|
||||
"loading": "Loading…"
|
||||
},
|
||||
"shoppingLists": {
|
||||
|
||||
@@ -315,7 +315,8 @@
|
||||
"partialMatches": "Correspondances partielles",
|
||||
"noMatches": "Aucune correspondance trouvée",
|
||||
"missing": "Manquant",
|
||||
"ingredientProgress": "{matched}/{total} ingrédients"
|
||||
"ingredientProgress": "{matched}/{total} ingrédients",
|
||||
"useItUp": "À utiliser vite"
|
||||
},
|
||||
"mealPlan": {
|
||||
"title": "Planning repas",
|
||||
@@ -374,6 +375,8 @@
|
||||
"following": "Abonnements",
|
||||
"trending": "Tendances",
|
||||
"trendingEmpty": "Aucune recette tendance cette semaine.",
|
||||
"forYou": "Pour vous",
|
||||
"forYouEmpty": "Ajoutez des favoris ou notez des recettes pour des suggestions personnalisées.",
|
||||
"loading": "Chargement…"
|
||||
},
|
||||
"shoppingLists": {
|
||||
|
||||
Reference in New Issue
Block a user