No description
Find a file
2025-10-18 14:16:34 +11:00
.husky Refactor #6.1 2025-10-18 13:06:25 +11:00
public Refactor #6.2 autoformat 2025-10-18 13:08:22 +11:00
src Autoformat 2025-10-18 14:16:34 +11:00
tests Autoformat 2025-10-18 14:16:34 +11:00
.editorconfig Refactor #3 2025-10-18 12:42:23 +11:00
.env.example Autoformat 2025-10-18 14:16:34 +11:00
.gitignore init 2024-01-07 13:40:35 +11:00
.prettierignore Refactor #6.1 2025-10-18 13:06:25 +11:00
.prettierrc.json Refactor #3 2025-10-18 12:42:23 +11:00
babel.config.js Refactor #6.2 autoformat 2025-10-18 13:08:22 +11:00
jsconfig.json Refactor #6.2 autoformat 2025-10-18 13:08:22 +11:00
package-lock.json Composition #1 2025-10-18 13:39:25 +11:00
package.json Autoformat 2025-10-18 14:16:34 +11:00
README.md Readme updates 2025-10-18 14:06:24 +11:00
vitest.config.js Refactor #7 2025-10-18 13:17:39 +11:00
vue.config.js Refactor #6.2 autoformat 2025-10-18 13:08:22 +11:00

Munch Ease — Plan, Cook, Shop, Repeat

Munch Ease is a snappy Vue 3 app that helps you plan meals, manage recipes, and turn plans into stress-free shopping lists. Search and save recipes, build your weekly meal plan, and seamlessly check items off your shopping list—everything stays in sync so you can focus on whats cooking.

Built with modern Vue patterns, a clean API layer, and lightweight tests, the project is easy to extend and fun to work on.


Quick start

  1. Install dependencies
npm install
  1. Run the dev server
npm run serve
  1. Run unit tests (Vitest)
npm run test
  1. Build for production
npm run build

Environment


Architecture and conventions

The codebase follows clear boundaries and Vue 3 Composition API throughout.

  • 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.
  • 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).
  • 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 <script setup>.
    • Props via defineProps, events via defineEmits, routing via useRouter.
    • Event bus for alerts is in src/alert.js with AlertToast subscribing; can evolve into a useAlert composable.
  • Testing

    • Vitest configured (vitest.config.js) with @ alias to src.
    • Targeted unit tests cover units and API mappers under tests/.
  • Formatting and linting

    • Prettier is the source of truth; Husky + lint-staged auto-format on commit.
    • ESLint configured for Vue 3 and Composition API macros.
    • Recommended: use Volar in your editor for Vue intelligence.

Folder highlights

  • src/api/ — HTTP wrapper, feature services, and data mappers
  • src/composables/ — Reusable app logic (auth, meals, shopping)
  • src/components/ — UI components and pages (all in <script setup>)
  • src/router/ — Route definitions and auth guard

Development tips

  • Prefer composables for shared logic; keep components presentational where possible.
  • Use computed for derived values; avoid mutating props directly.
  • When navigating, prefer named routes for stability.
  • Keep tests small and fast; add a test when you add a new mapper or unit.

Troubleshooting

  • API errors: verify VUE_APP_API_BASE is set and reachable.
  • Type/IDE help: ensure Volar is enabled and ESLint is not conflicting with Prettier.
  • Build issues: this project uses Vue CLI 5. If migrating to Vite, update scripts and configs accordingly.