No description
| .husky | ||
| public | ||
| src | ||
| tests | ||
| .editorconfig | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc.json | ||
| babel.config.js | ||
| jsconfig.json | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| refactor-strategy.md | ||
| vitest.config.js | ||
| vue.config.js | ||
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 what’s 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
- Install dependencies
npm install
- Run the dev server
npm run serve
- Run unit tests (Vitest)
npm run test
- Build for production
npm run build
Environment
- API base URL: set VUE_APP_API_BASE (e.g. http://localhost:8081)
Architecture and conventions
The codebase follows clear boundaries and Vue 3 Composition API throughout.
-
Routing and auth
- Centralized in
src/router/index.jswith named routes and an auth guard via route metarequiresAuth. - Components use
useRouter/useRoutefor navigation and route access.
- Centralized in
-
API layer and mappers
src/api/http.jsis a tiny JSON fetch wrapper that honorsVUE_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.
- Reusable logic in
-
Components
- All Single File Components use
<script setup>. - Props via
defineProps, events viadefineEmits, routing viauseRouter. - Event bus for alerts is in
src/alert.jswithAlertToastsubscribing; can evolve into auseAlertcomposable.
- All Single File Components use
-
Testing
- Vitest configured (
vitest.config.js) with@alias tosrc. - Targeted unit tests cover units and API mappers under
tests/.
- Vitest configured (
-
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 mapperssrc/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_BASEis 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.