From fd35640fd84749338a94652133f91a11a71d1386 Mon Sep 17 00:00:00 2001
From: jableader
Date: Mon, 20 Oct 2025 00:12:40 +1100
Subject: [PATCH] Squashed commit of the following:
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
commit a94394866d9e957693c7380b846cfee98739b8be
Author: jableader
Date: Mon Oct 20 00:11:28 2025 +1100
Ran codegen
commit affaa0e4a80edbb5185f06b3a252e1790e349ee3
Author: jableader
Date: Mon Oct 20 00:09:36 2025 +1100
Moved shopping.ts into composable
commit 83ced27a549784a35fa2715630d6fdca7f12f4aa
Author: jableader
Date: Sun Oct 19 23:43:09 2025 +1100
Purchase fixed
commit 2fff14016eedaeb773c0f8b4ee9ccf08a1027449
Author: jableader
Date: Sun Oct 19 22:54:36 2025 +1100
typescript migration complete
commit 17651bcc8b0f40ac1579563379c8fc45aba1997d
Author: jableader
Date: Sun Oct 19 22:38:22 2025 +1100
Removing redundant null checks and type checking
commit 0cc3a508cd5c7d723eb76d665443b4d0fdad493f
Author: jableader
Date: Sun Oct 19 22:30:52 2025 +1100
Moving date to sdk layer
commit 35d1189009b27876dd167f353c04f217b7c2805e
Author: jableader
Date: Sun Oct 19 21:42:47 2025 +1100
No components re-parse dates already decoded by the boundary.
commit c4b82a31fad75bd5ec987847847076b537d35a7d
Author: jableader
Date: Sun Oct 19 21:09:03 2025 +1100
Update spec and types
commit 55984bf7c9d51e76eaa6713a3ca86e9a73eb6b03
Author: jableader
Date: Sun Oct 19 20:22:01 2025 +1100
Disallow casting entirely
commit eb02dc6a7b52048281a87924765d9aab1303150f
Author: jableader
Date: Sun Oct 19 19:24:57 2025 +1100
Replaced components[schemas] outside sdk
commit 2f4c1bed56724e4f8a0d586921367604ce127a1a
Author: jableader
Date: Sun Oct 19 19:06:38 2025 +1100
removed persons.ts
commit ae966db8a330c9f521f3c3cb7417c4f201467661
Author: jableader
Date: Sun Oct 19 18:56:27 2025 +1100
Remove casts from sdk
commit 42c253021e504b45963834e56551ded55be377f1
Author: jableader
Date: Sun Oct 19 18:38:05 2025 +1100
Remove *Like types
commit b0a4e21f19005fd69c0e9e16edaa9c10b1ca8567
Author: jableader
Date: Sun Oct 19 18:32:26 2025 +1100
Defined quantity construct
commit bf4666b89e2d395bdd091ffb6ee66a9cfb866c6d
Author: jableader
Date: Sun Oct 19 18:27:55 2025 +1100
Moved shopping view-model mapping (DTO → UI groups/meals) into `useShopping` (`mapItemToUI`, `groupsFrom`, `mealsFrom`).
- Refactored `CurrentShoppingListPage.vue` to consume composable helpers (less duplication, no local cast-heavy mapping).
- Refactored `PurchasedShoppingListPage.vue` to consume composable helpers and return typed SDK result; removed casts.
commit e7f84b453509a8fcffbb9923ec001f5be85e67e4
Author: jableader
Date: Sun Oct 19 18:17:29 2025 +1100
Removing casts, any, unknown and runtime type checking
commit 6346eef4aff4d64b04f7dfa837c5b988645c242c
Author: jableader
Date: Sun Oct 19 17:42:14 2025 +1100
domain/decoders.ts: removed casts; `purchaseDate` and `quantity` now trust API shapes.
commit 8b62eb9a9f2c0fe058d2dd37cc80071089379c34
Author: jableader
Date: Sun Oct 19 17:36:50 2025 +1100
Plan alignment
commit dd81fd454b8e14874930cfc44828abddffd50c41
Author: jableader
Date: Sun Oct 19 17:10:11 2025 +1100
More cast removals
commit 377d143ffc8596f46a3b32746d3710d99eb257cd
Author: jableader
Date: Sun Oct 19 16:53:30 2025 +1100
Type tightening in sdk
commit ce2577f22190b18a52ae0fa4238c6d1beb7e3bb7
Author: jableader
Date: Sun Oct 19 16:24:51 2025 +1100
All mappers removed/neutralized
commit 177205561a2d44aae2683e046960ef5fe8992255
Author: jableader
Date: Sun Oct 19 16:20:34 2025 +1100
Replace ingredientnormalized with ingredient
commit fc75b24977cc89d420dc768fb4dc4ade84ed32c2
Author: jableader
Date: Sun Oct 19 16:16:03 2025 +1100
More type safety tweaks and changes
commit c35cc2d3d58307290bbc2d5978baa48c1eda97b6
Author: jableader
Date: Sun Oct 19 15:46:13 2025 +1100
Update vue-tsc
commit 2cd429804ca34a42c83ea81a3ae68e2cfccb5e36
Author: jableader
Date: Sun Oct 19 15:28:01 2025 +1100
Ongoing SDK changes to tighten datatypes
commit e11847ae515eadf1bd33e88e154125fe361a5191
Author: jableader
Date: Sun Oct 19 14:31:03 2025 +1100
Enforce template type checking
commit 777b8dee7e9ef0807a2b2c039443920671fe9c2d
Author: jableader
Date: Sun Oct 19 14:28:52 2025 +1100
Boilerplate Collapse mappers to “decoders” and delete ad‑hoc view types
commit 4169c69d59cc16a24298351c38a60b4d4845f0c9
Author: jableader
Date: Sun Oct 19 14:25:04 2025 +1100
Plan updates
commit de65164c91d9dc641ec86424bd4fe40f91bb4ada
Author: jableader
Date: Sun Oct 19 14:16:37 2025 +1100
More camelCase changes
commit 4121c2157511f706b4704c5d5f769034d9bce5a0
Author: jableader
Date: Sun Oct 19 14:00:48 2025 +1100
Remove unused js shims and autoformat project
commit d475565529bd0c12f06f85f0bcbf19c857176fa7
Author: jableader
Date: Sun Oct 19 13:59:10 2025 +1100
camelCase conversions and api type propogation
commit 7b3b633a9d21c74977d4de120138fff192faaa78
Author: jableader
Date: Sun Oct 19 13:11:22 2025 +1100
Strategise ts improvements
commit 9396e4928abcf9d8a74a656ad21913f95e8e3e41
Author: jableader
Date: Sun Oct 19 13:06:19 2025 +1100
Linting errors
commit 528fa3bc2f6c42de6de37d9593d2ed31630d0e81
Author: jableader
Date: Sun Oct 19 12:59:21 2025 +1100
Recipe search pagination
commit 4993c3e53f540e098f3275715c86754dee9392af
Author: jableader
Date: Sun Oct 19 12:33:13 2025 +1100
Removed redundant nonnull check
commit c03d0b582d0a8b17e675cdf9bdab09eac4091d44
Author: jableader
Date: Sun Oct 19 12:29:57 2025 +1100
Persons api pagination
commit 67008b4a94a90295ed811594ca0e7f37c80a8305
Author: jableader
Date: Sat Oct 18 22:44:32 2025 +1100
ts pages starting to work
commit 0144e7f70d19289007d6b035594786ce573cbc70
Author: jableader
Date: Sat Oct 18 22:39:17 2025 +1100
More typescript fixes
commit dc429f84b48ca5892c6043db81b89fa6431d872d
Author: jableader
Date: Sat Oct 18 18:28:54 2025 +1100
5) API client and codegen guardrails — DONE (scripts) / PARTIAL (CI wiring)
commit 36ba555d9a600ca8cca4c18571e0d96584243556
Author: jableader
Date: Sat Oct 18 18:26:30 2025 +1100
Tighten composable and UI types (remove last anys) — DONE
commit 97523a9ef6aa972497e62d63c6f666453bb7eefc
Author: jableader
Date: Sat Oct 18 18:24:11 2025 +1100
Align OpenAPI params to remove residual casts, Strengthen MSW tests for the typed client
commit 608f6b751cb982487e90560792aec33317981c60
Author: jableader
Date: Sat Oct 18 18:14:11 2025 +1100
ts complete, rerun codegen
commit ca28376ed7bcb4ff4c7669210ce6eebfd9cb6eaa
Author: jableader
Date: Sat Oct 18 18:09:29 2025 +1100
Document All JS under `src/` is now removed; the source tree is TS-only.
commit ff3338b108bbf094f987302a21f1779d8f23368f
Author: jableader
Date: Sat Oct 18 17:59:49 2025 +1100
Ts tests
commit ce4555a279c715f427f9d00c346561efd74705f8
Author: jableader
Date: Sat Oct 18 17:56:18 2025 +1100
Completed Generate real OpenAPI types and wire them
commit b7304aa7390f33a372acda46c593d6592aabf3f7
Author: jableader
Date: Sat Oct 18 17:02:27 2025 +1100
DatePicker ts conversion
commit cb6ebdba286d44dbaae522ee29d95aa3ccfb5dc1
Author: jableader
Date: Sat Oct 18 16:56:38 2025 +1100
Removed js files
commit 549eefd369499e0a1d35ff88a659c8aecd955a02
Author: jableader
Date: Sat Oct 18 16:49:31 2025 +1100
- Utilities converted to TS: `src/dateformats.ts`, `src/units.ts`; imports updated accordingly.
- Router converted to TS: `src/router/index.ts`; legacy `index.js` removed.
commit 6f7731287f4166df5c02164ec4220e370c6d7a35
Author: jableader
Date: Sat Oct 18 16:48:58 2025 +1100
alerts ts conversion
commit 4b1baec85a74b75e94d2392fea3b5abee294089c
Author: jableader
Date: Sat Oct 18 16:27:35 2025 +1100
use v1 api
commit da11976b96d791935cb16c7b1fdb074a2c87f53c
Author: jableader
Date: Sat Oct 18 16:18:17 2025 +1100
- Shopping pages converted to TS: `MyShoppingPage.vue`, `CurrentShoppingListPage.vue`, `PurchasedShoppingListPage.vue` (typed refs/computed; stable keys; wired to helpers).
commit acf740380bf53386e12e108ba09a507141176733
Author: jableader
Date: Sat Oct 18 16:08:22 2025 +1100
Shopping MyShoppingPage converted to TS with typed refs.
commit 744d7e792d013f0ed04f11280f3351950925beee
Author: jableader
Date: Sat Oct 18 16:05:19 2025 +1100
Shopping gets types
commit 4e576dca94424383bdf753403d7764e22a28f377
Author: jableader
Date: Sat Oct 18 15:57:50 2025 +1100
Error tests
commit ac6ae41b840c30196a370a077e02953c63977908
Author: jableader
Date: Sat Oct 18 15:56:20 2025 +1100
More datatypes
commit d7ea6538b1af6144933a2603d330cb17e04809db
Author: jableader
Date: Sat Oct 18 15:45:49 2025 +1100
spec updates
commit 0d6cfc1328df8ab4a4baf8f31a7a4e1ea50fd850
Author: jableader
Date: Sat Oct 18 15:44:34 2025 +1100
`codegen:check` warns when backend spec is newer than generated types
commit 54bff353b8e7429961364803300b38bc70f963c2
Author: jableader
Date: Sat Oct 18 15:42:24 2025 +1100
PersonList ts
commit e5ffcdde7e9538525704581a82606261596d31f5
Author: jableader
Date: Sat Oct 18 15:40:53 2025 +1100
MealCard ts
commit 5432d8333c023b0c6e25c9a6ac31519c818e6a58
Author: jableader
Date: Sat Oct 18 15:39:29 2025 +1100
ue CLI now serves/builds with TypeScript entry, ESLint configured to parse TS, use ts code
commit aba3fd532550a90adeb957b4ddbb43798bcf9e5a
Author: jableader
Date: Sat Oct 18 15:23:16 2025 +1100
composables typescript
commit 28ba44cc951fddfe64c386e77a91c2f46060cfb8
Author: jableader
Date: Sat Oct 18 15:19:09 2025 +1100
let the typescriptin begin
commit 98e57e4d65cecdd1ed5ed3fbf6b1ebf46ae6af10
Author: jableader
Date: Sat Oct 18 15:13:58 2025 +1100
Added typescript
---
.github/workflows/ci.yml | 45 +
CONTRIBUTING.md | 59 +
README.md | 76 +-
package-lock.json | 3915 +++++++++++++----
package.json | 68 +-
scripts/codegen-check.js | 32 +
src/alert.js | 11 -
src/api/auth.js | 21 -
src/api/auth.ts | 30 +
src/api/client.ts | 20 +
src/api/http.js | 35 -
src/api/mappers/mealMapper.js | 16 -
src/api/mappers/recipeMapper.js | 15 -
src/api/mappers/shoppingListMapper.js | 73 -
src/api/meals.js | 31 -
src/api/persons.js | 9 -
src/api/recipes.js | 36 -
src/api/sdk.ts | 354 ++
src/api/shopping.js | 38 -
src/api/types.ts | 1634 +++++++
src/components/AlertToast.vue | 6 +-
src/components/LoginPage.vue | 16 +-
.../ingredients/CompactParsedIngredient.vue | 6 +-
.../ingredients/EditableIngredientsPanel.vue | 14 +-
src/components/ingredients/IngredientLine.vue | 16 +-
src/components/meals/DatePicker.vue | 23 +-
src/components/meals/EditMealPage.vue | 319 +-
src/components/meals/MealCard.vue | 43 +-
src/components/meals/MealPlanPage.vue | 13 +-
src/components/meals/PersonList.vue | 43 +-
src/components/recipes/EditRecipePage.vue | 83 +-
src/components/recipes/RecipeCard.vue | 16 +-
src/components/recipes/RecipeSearchBox.vue | 135 +-
src/components/recipes/RecipesPage.vue | 9 +-
.../shopping/CurrentShoppingListPage.vue | 79 +-
src/components/shopping/MealSelectionList.vue | 74 +-
src/components/shopping/MyShoppingPage.vue | 28 +-
.../shopping/PurchasedShoppingListPage.vue | 42 +-
src/components/shopping/ShoppingListItem.vue | 105 +-
src/components/shopping/shopping.js | 42 -
src/composables/{useAlert.js => useAlert.ts} | 12 +-
src/composables/{useAuth.js => useAuth.ts} | 5 +-
src/composables/useMeals.js | 25 -
src/composables/useMeals.ts | 46 +
src/composables/usePagination.ts | 107 +
src/composables/useShopping.js | 27 -
src/composables/useShopping.ts | 116 +
src/dateformats.js | 25 -
src/dateformats.ts | 15 +
src/domain/decoders.ts | 83 +
src/domain/pagination.ts | 13 +
src/domain/types.ts | 69 +
src/env.d.ts | 17 +
src/{main.js => main.ts} | 0
src/router/helpers.ts | 27 +
src/router/{index.js => index.ts} | 11 +-
src/shims-vue.d.ts | 10 +
src/units.d.ts | 4 +
src/{units.js => units.ts} | 65 +-
tests/mealMapper.test.js | 24 +-
tests/meals.api.errors.test.js | 14 +
tests/meals.api.test.js | 43 +
tests/parse.api.errors.test.js | 19 +
tests/parse.api.test.js | 48 +
tests/persons.api.errors.test.js | 12 +
tests/persons.api.test.js | 30 +
tests/recipes.api.errors.test.js | 12 +
tests/recipes.api.test.js | 22 +
tests/shopping.api.errors.test.js | 12 +
tests/shopping.api.test.js | 31 +
tests/shoppingListMapper.test.js | 42 +-
tests/test-setup.js | 24 +
tests/useAlert.test.js | 29 +-
tests/useAlert.test.ts | 26 +
tsconfig.eslint.json | 20 +
tsconfig.json | 20 +
vitest.config.js | 1 +
vue.config.js | 2 +
78 files changed, 6953 insertions(+), 1785 deletions(-)
create mode 100644 .github/workflows/ci.yml
create mode 100644 CONTRIBUTING.md
create mode 100644 scripts/codegen-check.js
delete mode 100644 src/alert.js
delete mode 100644 src/api/auth.js
create mode 100644 src/api/auth.ts
create mode 100644 src/api/client.ts
delete mode 100644 src/api/http.js
delete mode 100644 src/api/mappers/mealMapper.js
delete mode 100644 src/api/mappers/recipeMapper.js
delete mode 100644 src/api/mappers/shoppingListMapper.js
delete mode 100644 src/api/meals.js
delete mode 100644 src/api/persons.js
delete mode 100644 src/api/recipes.js
create mode 100644 src/api/sdk.ts
delete mode 100644 src/api/shopping.js
create mode 100644 src/api/types.ts
delete mode 100644 src/components/shopping/shopping.js
rename src/composables/{useAlert.js => useAlert.ts} (60%)
rename src/composables/{useAuth.js => useAuth.ts} (75%)
delete mode 100644 src/composables/useMeals.js
create mode 100644 src/composables/useMeals.ts
create mode 100644 src/composables/usePagination.ts
delete mode 100644 src/composables/useShopping.js
create mode 100644 src/composables/useShopping.ts
delete mode 100644 src/dateformats.js
create mode 100644 src/dateformats.ts
create mode 100644 src/domain/decoders.ts
create mode 100644 src/domain/pagination.ts
create mode 100644 src/domain/types.ts
create mode 100644 src/env.d.ts
rename src/{main.js => main.ts} (100%)
create mode 100644 src/router/helpers.ts
rename src/router/{index.js => index.ts} (86%)
create mode 100644 src/shims-vue.d.ts
create mode 100644 src/units.d.ts
rename src/{units.js => units.ts} (57%)
create mode 100644 tests/meals.api.errors.test.js
create mode 100644 tests/meals.api.test.js
create mode 100644 tests/parse.api.errors.test.js
create mode 100644 tests/parse.api.test.js
create mode 100644 tests/persons.api.errors.test.js
create mode 100644 tests/persons.api.test.js
create mode 100644 tests/recipes.api.errors.test.js
create mode 100644 tests/recipes.api.test.js
create mode 100644 tests/shopping.api.errors.test.js
create mode 100644 tests/shopping.api.test.js
create mode 100644 tests/test-setup.js
create mode 100644 tests/useAlert.test.ts
create mode 100644 tsconfig.eslint.json
create mode 100644 tsconfig.json
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..c2103c3
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,45 @@
+name: CI
+
+on:
+ push:
+ branches: [ main, master ]
+ pull_request:
+
+jobs:
+ build-test:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '20'
+ cache: 'npm'
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Codegen check
+ run: npm run codegen:check || true
+
+ - name: Generate OpenAPI types
+ run: |
+ if [ -f "../munch-ease-backend/openapi.json" ]; then
+ npm run codegen
+ else
+ echo "Backend openapi.json not found. Skipping codegen."
+ fi
+
+ - name: Typecheck
+ run: npm run -s typecheck
+
+ - name: Typecheck Vue SFC templates
+ run: npm run -s typecheck:vue
+
+ - name: Lint
+ run: npm run -s lint
+
+ - name: Test
+ run: npm run -s test
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..1f1ff2f
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,59 @@
+# Contributing to Munch Ease
+
+Thanks for helping make Munch Ease better! This repo aims for a lean, predictable codebase. Please keep changes small, typed, and well‑scoped.
+
+## Core axioms (must follow)
+
+- OpenAPI is the single source of truth for shapes (generated in `src/api/types.ts`).
+- The SDK (`src/api/sdk.ts`) is the only data access surface.
+- Domain types live in `src/domain/types.ts`; minimal normalization in `src/domain/decoders.ts`.
+- No casts (`as`, angle brackets) in app code. Generated files are exempt. Boundary-only normalization allowed.
+- No `any`/`unknown` in app code. Prefer precise types, `Pick`/`Omit`, and inference.
+- Arrays declared in OpenAPI as required are non-nullable in domain types (e.g., `Meal.recipes` is always an array).
+- Disallow runtime type checks in app code (`typeof`, `in`, broad `instanceof`).
+ - Acceptable exceptions: DOM event narrowing (e.g., `HTMLInputElement`), error normalization in SDK, env detection.
+- CamelCase across `src/`; no snake_case.
+
+## Architecture quick tour
+
+- SDK + decoders boundary
+ - `src/api/sdk.ts`: All network calls; returns domain-safe types. Normalize errors via `httpError`.
+ - `src/domain/decoders.ts`: Convert date strings → `Date`, normalize arrays, and decode nested structures.
+- Domain and DTOs
+ - Prefer domain aliases from `src/domain/types.ts` over raw `components['schemas'][...]`.
+ - Use discriminated unions for UI shapes where needed (e.g., `Group` has `type: 'product' | 'name'`).
+- Composables
+ - UI logic in `src/composables/*`. Keep components thin.
+- Routing
+ - Use helpers from `src/router/helpers.ts` (`parseRouteId`, `parseQueryString`) instead of ad-hoc `typeof` checks.
+
+## Coding guidelines
+
+- Keep changes small and incremental. Write a quick unit test when behavior changes.
+- Prefer `computed` over ad-hoc recalculation; avoid prop mutation.
+- No ad-hoc mappers. If a slimmer shape is needed, use `Pick`/`Omit` with a descriptive name (e.g., `*Summary`).
+- Keep runtime guards in the boundary only. UI assumes decoded, normalized types.
+
+## Tooling
+
+- TypeScript strict; ESLint with type-aware rules; Prettier formatting.
+- Tests: Vitest + MSW. Keep tests fast and focused.
+- Node 18+ recommended.
+
+## Useful scripts
+
+```bash
+npm run serve # Dev server
+npm run test # Unit tests (Vitest)
+npm run lint # ESLint
+npm run typecheck # TS + vue-tsc
+npm run build # Production build
+```
+
+## PR checklist
+
+- [ ] Types first: no casts in app code, no `any`/`unknown`
+- [ ] Boundary-only normalization in decoders/SDK
+- [ ] Arrays reflect OpenAPI nullability in domain types
+- [ ] No new mappers; use domain aliases or `Pick`/`Omit`
+- [ ] Tests updated/added if behavior changed
diff --git a/README.md b/README.md
index e836aa7..c6e2253 100644
--- a/README.md
+++ b/README.md
@@ -39,49 +39,35 @@ Environment
## Architecture and conventions
-The codebase follows clear boundaries and Vue 3 Composition API throughout.
+Strict TypeScript, Vue 3 Composition API, and a single typed API boundary.
-- Routing and auth
- - Centralized in `src/router/index.js` with named routes and an auth guard via route meta `requiresAuth`.
- - Components use `useRouter/useRoute` for navigation and route access.
+Key axioms
+- OpenAPI (generated `src/api/types.ts`) is the single source of truth for shapes.
+- SDK (`src/api/sdk.ts`) is the only data access surface; UI uses domain types from `src/domain/types.ts`.
+- Domain normalization is minimal in `src/domain/decoders.ts` (e.g., date strings → `Date`).
+- No casts (`as`, angle brackets) and no `any`/`unknown` in app code. Generated files are exempt.
+- Arrays that are required in OpenAPI are non-nullable in domain types (e.g., `Meal.recipes`).
+- Disallow runtime type checks in app code; acceptable exceptions: DOM event narrowing, error/env handling in the boundary.
-- API layer and mappers
- - `src/api/http.js` is a tiny JSON fetch wrapper that honors `VUE_APP_API_BASE`.
- - Feature services live in `src/api/*` (meals, recipes, shopping, auth, persons).
- - Normalization lives in `src/api/mappers/*` (e.g., date parsing, shape cleanup).
+Layout
+- `src/api/` — Typed client and SDK boundary
+- `src/domain/` — Domain types and decoders
+- `src/composables/` — Reusable app logic (auth, meals, shopping, pagination, alert)
+- `src/components/` — UI components and pages
+- `src/router/` — Routes and helpers (`parseRouteId`, `parseQueryString`)
-- Composables (UI-facing logic)
- - Reusable logic in `src/composables/*` (useAuth, useMeals, useShopping).
- - Components stay thin: data via refs/reactive, effects via computed/watch.
-
-- Components
- - All Single File Components use `
diff --git a/src/components/meals/MealCard.vue b/src/components/meals/MealCard.vue
index 7d2f6e5..9e04311 100644
--- a/src/components/meals/MealCard.vue
+++ b/src/components/meals/MealCard.vue
@@ -25,21 +25,31 @@
somebody?
-
- Purchased {{ ago(meal.purchase_date) }}
+
+ Purchased {{ ago(meal.purchaseDate) }}
-
diff --git a/src/components/recipes/RecipesPage.vue b/src/components/recipes/RecipesPage.vue
index d966deb..b764940 100644
--- a/src/components/recipes/RecipesPage.vue
+++ b/src/components/recipes/RecipesPage.vue
@@ -6,19 +6,22 @@
/>
-
diff --git a/src/components/shopping/MealSelectionList.vue b/src/components/shopping/MealSelectionList.vue
index 3e1b0b0..c6f6c04 100644
--- a/src/components/shopping/MealSelectionList.vue
+++ b/src/components/shopping/MealSelectionList.vue
@@ -7,31 +7,35 @@
-
diff --git a/src/components/shopping/MyShoppingPage.vue b/src/components/shopping/MyShoppingPage.vue
index 06845c1..047e433 100644
--- a/src/components/shopping/MyShoppingPage.vue
+++ b/src/components/shopping/MyShoppingPage.vue
@@ -39,42 +39,42 @@
-->
-