From 029940b07925941433422dcf6f1917591f1db736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aerilyn=20Dziedzel=C4=97?= Date: Thu, 14 May 2026 14:47:23 +0900 Subject: [PATCH] Phases 6-7 --- .antigravity/settings.local.json | 29 + .github/copilot-instructions.md | 3 +- ANTIGRAVITY.md | 164 +++++ CLAUDE.md | 3 +- docs/PLAN.md | 139 ++++- docs/instructions/conventions.md | 13 + docs/phases/phase-5-product-library.md | 66 +- docs/phases/phase-8-meal-planning.md | 331 +++------- docs/phases/phase-9-grocery.md | 24 +- package-lock.json | 392 +++++++----- packages/api/package.json | 2 + packages/api/src/main.ts | 8 + .../freshness-rules.repository.test.ts | 162 +++++ .../freshness-rules.repository.ts | 86 +++ .../freshness-rules.routes.test.ts | 204 ++++++ .../freshness-rules/freshness-rules.routes.ts | 154 +++++ .../freshness-rules.service.test.ts | 137 ++++ .../freshness-rules.service.ts | 64 ++ .../src/modules/llm/llm-provider.interface.ts | 62 ++ .../modules/llm/no-op-llm.provider.test.ts | 59 ++ .../api/src/modules/llm/no-op-llm.provider.ts | 48 ++ .../freshness-calculator.service.test.ts | 158 +++++ .../pantry/freshness-calculator.service.ts | 89 +++ .../modules/pantry/pantry.repository.test.ts | 254 ++++++++ .../src/modules/pantry/pantry.repository.ts | 198 ++++++ .../src/modules/pantry/pantry.routes.test.ts | 393 ++++++++++++ .../api/src/modules/pantry/pantry.routes.ts | 285 +++++++++ .../src/modules/pantry/pantry.service.test.ts | 434 +++++++++++++ .../api/src/modules/pantry/pantry.service.ts | 295 +++++++++ .../modules/products/barcode.service.test.ts | 487 +++++++++++++++ .../src/modules/products/barcode.service.ts | 210 +++++++ .../src/modules/products/csv-parser.test.ts | 173 +++++ .../api/src/modules/products/csv-parser.ts | 167 +++++ .../products/products.repository.test.ts | 298 +++++++++ .../modules/products/products.repository.ts | 98 +++ .../modules/products/products.routes.test.ts | 579 +++++++++++++++++ .../src/modules/products/products.routes.ts | 308 +++++++++ .../modules/products/products.service.test.ts | 297 +++++++++ .../src/modules/products/products.service.ts | 134 ++++ .../nutrition-calculator.service.test.ts | 279 +++++++++ .../recipes/nutrition-calculator.service.ts | 127 ++++ .../recipes/recipes.repository.test.ts | 217 +++++++ .../src/modules/recipes/recipes.repository.ts | 141 +++++ .../modules/recipes/recipes.routes.test.ts | 471 ++++++++++++++ .../api/src/modules/recipes/recipes.routes.ts | 353 +++++++++++ .../modules/recipes/recipes.service.test.ts | 344 ++++++++++ .../src/modules/recipes/recipes.service.ts | 309 +++++++++ .../recipes/unit-conversion.service.test.ts | 132 ++++ .../recipes/unit-conversion.service.ts | 119 ++++ .../api/src/schemas/freshness-rule.schema.ts | 34 + .../api/src/schemas/pantry-item.schema.ts | 59 ++ .../api/src/schemas/product.schema.test.ts | 32 + packages/api/src/schemas/product.schema.ts | 66 ++ packages/api/src/schemas/recipe.schema.ts | 94 +++ packages/api/vitest.config.ts | 1 + packages/shared/src/enums/index.ts | 3 + .../shared/src/enums/pantry.enums.test.ts | 53 ++ packages/shared/src/enums/pantry.enums.ts | 34 + .../shared/src/enums/product.enums.test.ts | 41 ++ packages/shared/src/enums/product.enums.ts | 40 ++ .../shared/src/enums/recipe.enums.test.ts | 18 + packages/shared/src/enums/recipe.enums.ts | 9 + packages/shared/src/types/freshness.ts | 17 + packages/shared/src/types/index.ts | 4 + packages/shared/src/types/pantry.ts | 36 ++ packages/shared/src/types/product.ts | 33 + packages/shared/src/types/recipe.ts | 58 ++ .../validation/freshness-rule.schemas.test.ts | 78 +++ .../src/validation/freshness-rule.schemas.ts | 56 ++ packages/shared/src/validation/index.ts | 4 + .../src/validation/pantry.schemas.test.ts | 164 +++++ .../shared/src/validation/pantry.schemas.ts | 143 +++++ .../shared/src/validation/product.schemas.ts | 75 +++ .../src/validation/recipe.schemas.test.ts | 87 +++ .../shared/src/validation/recipe.schemas.ts | 124 ++++ packages/shared/vitest.config.ts | 1 + .../dashboard/__tests__/page.test.tsx | 290 ++++++++- .../schedule/__tests__/page.test.tsx | 305 +++++++++ .../src/app/(dashboard)/pantry/PantryList.tsx | 339 ++++++++++ .../pantry/__tests__/page.test.tsx | 317 ++++++++++ .../web/src/app/(dashboard)/pantry/page.tsx | 72 +++ .../app/(dashboard)/products/ImportDialog.tsx | 235 +++++++ .../app/(dashboard)/products/ProductList.tsx | 349 +++++++++++ .../app/(dashboard)/products/ProductModal.tsx | 533 ++++++++++++++++ .../products/__tests__/ImportDialog.test.tsx | 157 +++++ .../products/__tests__/ProductModal.test.tsx | 280 +++++++++ .../products/__tests__/page.test.tsx | 228 +++++++ .../web/src/app/(dashboard)/products/page.tsx | 72 +++ .../app/(dashboard)/recipes/RecipeEditor.tsx | 589 ++++++++++++++++++ .../app/(dashboard)/recipes/RecipeList.tsx | 331 ++++++++++ .../recipes/[id]/__tests__/page.test.tsx | 231 +++++++ .../recipes/[id]/edit/__tests__/page.test.tsx | 103 +++ .../(dashboard)/recipes/[id]/edit/page.tsx | 61 ++ .../src/app/(dashboard)/recipes/[id]/page.tsx | 420 +++++++++++++ .../recipes/__tests__/RecipeEditor.test.tsx | 229 +++++++ .../recipes/__tests__/page.test.tsx | 423 +++++++++++++ .../recipes/new/__tests__/page.test.tsx | 61 ++ .../src/app/(dashboard)/recipes/new/page.tsx | 40 ++ .../web/src/app/(dashboard)/recipes/page.tsx | 72 +++ .../src/components/__tests__/Sidebar.test.tsx | 84 +++ .../__tests__/ThemeProvider.test.tsx | 125 ++++ .../src/components/__tests__/TopBar.test.tsx | 42 ++ .../web/src/components/__tests__/ui.test.tsx | 84 +++ .../web/src/components/layout/Sidebar.tsx | 21 + .../web/src/services/__tests__/pantry.test.ts | 124 ++++ .../src/services/__tests__/products.test.ts | 163 +++++ .../src/services/__tests__/recipes.test.ts | 118 ++++ packages/web/src/services/pantry.ts | 113 ++++ packages/web/src/services/products.ts | 107 ++++ packages/web/src/services/recipes.ts | 101 +++ packages/web/vitest.config.ts | 12 +- 111 files changed, 17247 insertions(+), 447 deletions(-) create mode 100644 .antigravity/settings.local.json create mode 100644 ANTIGRAVITY.md create mode 100644 packages/api/src/modules/freshness-rules/freshness-rules.repository.test.ts create mode 100644 packages/api/src/modules/freshness-rules/freshness-rules.repository.ts create mode 100644 packages/api/src/modules/freshness-rules/freshness-rules.routes.test.ts create mode 100644 packages/api/src/modules/freshness-rules/freshness-rules.routes.ts create mode 100644 packages/api/src/modules/freshness-rules/freshness-rules.service.test.ts create mode 100644 packages/api/src/modules/freshness-rules/freshness-rules.service.ts create mode 100644 packages/api/src/modules/llm/llm-provider.interface.ts create mode 100644 packages/api/src/modules/llm/no-op-llm.provider.test.ts create mode 100644 packages/api/src/modules/llm/no-op-llm.provider.ts create mode 100644 packages/api/src/modules/pantry/freshness-calculator.service.test.ts create mode 100644 packages/api/src/modules/pantry/freshness-calculator.service.ts create mode 100644 packages/api/src/modules/pantry/pantry.repository.test.ts create mode 100644 packages/api/src/modules/pantry/pantry.repository.ts create mode 100644 packages/api/src/modules/pantry/pantry.routes.test.ts create mode 100644 packages/api/src/modules/pantry/pantry.routes.ts create mode 100644 packages/api/src/modules/pantry/pantry.service.test.ts create mode 100644 packages/api/src/modules/pantry/pantry.service.ts create mode 100644 packages/api/src/modules/products/barcode.service.test.ts create mode 100644 packages/api/src/modules/products/barcode.service.ts create mode 100644 packages/api/src/modules/products/csv-parser.test.ts create mode 100644 packages/api/src/modules/products/csv-parser.ts create mode 100644 packages/api/src/modules/products/products.repository.test.ts create mode 100644 packages/api/src/modules/products/products.repository.ts create mode 100644 packages/api/src/modules/products/products.routes.test.ts create mode 100644 packages/api/src/modules/products/products.routes.ts create mode 100644 packages/api/src/modules/products/products.service.test.ts create mode 100644 packages/api/src/modules/products/products.service.ts create mode 100644 packages/api/src/modules/recipes/nutrition-calculator.service.test.ts create mode 100644 packages/api/src/modules/recipes/nutrition-calculator.service.ts create mode 100644 packages/api/src/modules/recipes/recipes.repository.test.ts create mode 100644 packages/api/src/modules/recipes/recipes.repository.ts create mode 100644 packages/api/src/modules/recipes/recipes.routes.test.ts create mode 100644 packages/api/src/modules/recipes/recipes.routes.ts create mode 100644 packages/api/src/modules/recipes/recipes.service.test.ts create mode 100644 packages/api/src/modules/recipes/recipes.service.ts create mode 100644 packages/api/src/modules/recipes/unit-conversion.service.test.ts create mode 100644 packages/api/src/modules/recipes/unit-conversion.service.ts create mode 100644 packages/api/src/schemas/freshness-rule.schema.ts create mode 100644 packages/api/src/schemas/pantry-item.schema.ts create mode 100644 packages/api/src/schemas/product.schema.test.ts create mode 100644 packages/api/src/schemas/product.schema.ts create mode 100644 packages/api/src/schemas/recipe.schema.ts create mode 100644 packages/shared/src/enums/pantry.enums.test.ts create mode 100644 packages/shared/src/enums/pantry.enums.ts create mode 100644 packages/shared/src/enums/product.enums.test.ts create mode 100644 packages/shared/src/enums/product.enums.ts create mode 100644 packages/shared/src/enums/recipe.enums.test.ts create mode 100644 packages/shared/src/enums/recipe.enums.ts create mode 100644 packages/shared/src/types/freshness.ts create mode 100644 packages/shared/src/types/pantry.ts create mode 100644 packages/shared/src/types/product.ts create mode 100644 packages/shared/src/types/recipe.ts create mode 100644 packages/shared/src/validation/freshness-rule.schemas.test.ts create mode 100644 packages/shared/src/validation/freshness-rule.schemas.ts create mode 100644 packages/shared/src/validation/pantry.schemas.test.ts create mode 100644 packages/shared/src/validation/pantry.schemas.ts create mode 100644 packages/shared/src/validation/product.schemas.ts create mode 100644 packages/shared/src/validation/recipe.schemas.test.ts create mode 100644 packages/shared/src/validation/recipe.schemas.ts create mode 100644 packages/web/src/app/(dashboard)/medicines/schedule/__tests__/page.test.tsx create mode 100644 packages/web/src/app/(dashboard)/pantry/PantryList.tsx create mode 100644 packages/web/src/app/(dashboard)/pantry/__tests__/page.test.tsx create mode 100644 packages/web/src/app/(dashboard)/pantry/page.tsx create mode 100644 packages/web/src/app/(dashboard)/products/ImportDialog.tsx create mode 100644 packages/web/src/app/(dashboard)/products/ProductList.tsx create mode 100644 packages/web/src/app/(dashboard)/products/ProductModal.tsx create mode 100644 packages/web/src/app/(dashboard)/products/__tests__/ImportDialog.test.tsx create mode 100644 packages/web/src/app/(dashboard)/products/__tests__/ProductModal.test.tsx create mode 100644 packages/web/src/app/(dashboard)/products/__tests__/page.test.tsx create mode 100644 packages/web/src/app/(dashboard)/products/page.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/RecipeEditor.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/RecipeList.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/[id]/__tests__/page.test.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/[id]/edit/__tests__/page.test.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/[id]/edit/page.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/[id]/page.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/__tests__/RecipeEditor.test.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/__tests__/page.test.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/new/__tests__/page.test.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/new/page.tsx create mode 100644 packages/web/src/app/(dashboard)/recipes/page.tsx create mode 100644 packages/web/src/components/__tests__/Sidebar.test.tsx create mode 100644 packages/web/src/components/__tests__/ThemeProvider.test.tsx create mode 100644 packages/web/src/components/__tests__/TopBar.test.tsx create mode 100644 packages/web/src/components/__tests__/ui.test.tsx create mode 100644 packages/web/src/services/__tests__/pantry.test.ts create mode 100644 packages/web/src/services/__tests__/products.test.ts create mode 100644 packages/web/src/services/__tests__/recipes.test.ts create mode 100644 packages/web/src/services/pantry.ts create mode 100644 packages/web/src/services/products.ts create mode 100644 packages/web/src/services/recipes.ts diff --git a/.antigravity/settings.local.json b/.antigravity/settings.local.json new file mode 100644 index 0000000..62de4bd --- /dev/null +++ b/.antigravity/settings.local.json @@ -0,0 +1,29 @@ +{ + "permissions": { + "allow": [ + "run_command(npm run *)", + "run_command(npm test *)", + "run_command(npm install)", + "view_file(*)", + "list_dir(*)", + "grep_search(*)", + "replace_file_content(*)", + "multi_replace_file_content(*)", + "write_to_file(*)", + "command_status(*)" + ], + "deny": [ + "run_command(grep *)", + "run_command(ls *)", + "run_command(cat *)", + "run_command(head *)", + "run_command(tail *)", + "run_command(npx *)", + "run_command(*|*)", + "run_command(*>*)", + "run_command(*&*)", + "run_command(*Select-Object*)", + "run_command(*Select-String*)" + ] + } +} diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index bb676cf..0fd7093 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -42,7 +42,8 @@ The `docs/instructions/` directory contains best practices and conventions that - **Always use `grep_search` or `file_search` to find files and patterns** — never use `Select-String`, `grep`, `find`, or `rg` in terminal commands. - **Run scripts only via `npm run