![MealsTable](https://private-user-images.githubusercontent.com/46215033/287523287-dc2f0a02-e2d6-4360-a9cf-5ad0cbac94c0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMyODctZGMyZjBhMDItZTJkNi00MzYwLWE5Y2YtNWFkMGNiYWM5NGMwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJmNDdmNDZjYjM5Mjc4OTlhZTRlNzQwODhlMjhkMDBiY2YyZWY5ZWM1ODkzMzM4ZjI3MzllMzgzMmEyYTg4ZjcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.mL1ZsHVXrDzT5Lwh-FivDZXIe9ZhwMOdHJf8x5LFlno)
Welcome to GoodFoodRecipes, your go-to app for exploring delicious meals and connecting with experienced cooking coaches. Whether you're a food enthusiast looking for new recipes or a budding chef eager to enhance your skills, GoodFoodRecipes has you covered. The app can be cheked at https://vuemealsandcooks.web.app/ .
- Random Recipes: Explore 10 random meal recipes to discover new and exciting dishes.
- Dynamic Search: Find meals by entering keywords, letters, or ingredients in the search bar.
- Alphabetical Search: Browse meals by clicking on the letter corresponding to the recipe's initial letter.
- Ingredient Search: Explore a list of ingredients and find meals based on your preferred ingredients.
- Table View: Access a paginated table showcasing a variety of meals.
- Pin and Unpin: Pin your favorite meals to easily access them later.
- Pin Limit: Users can pin a maximum of 5 meals.
- Coaches List: Explore a list of cooking coaches available for mentorship.
- View Coach Details: Get detailed information about a cooking coach's expertise and experience.
- Register as a Cook: Users can register as a cooking coach by logging in.
- Contact Coach: Connect with a coach for personalized guidance.
- View Incoming Requests: Logged-in users can view incoming requests from aspiring cooking enthusiasts.
To create GoodFoodRecipes, I utilized the following technologies and tools as prerequisites:
- TailwindCSS: TailwindCSS served as the styling framework, providing a visually appealing user interface. The integration details can be found in the TailwindCSS Vite Guide.
- Vue Router 4: Vue Router 4 was used for navigation, enabling the creation of a seamless single-page application experience.
- Vuex 4: Vuex 4 played a crucial role in state management, allowing for the efficient handling of application data. The Vuex store was modularized to manage various aspects of the app.
- TailwindCSS Forms: TailwindCSS Forms enhanced form styling, contributing to an improved user experience. The installation and usage details can be found in the TailwindCSS Forms GitHub repository.
- Axios: Axios, a promise-based HTTP client, was used for making API requests. It facilitated seamless communication with external APIs, such as fetching data from TheMealDB Recipe API.
- Firebase: Firebase services, including the database and authentication, were employed for securely storing user data. Firebase Hosting was utilized for deploying and hosting the app.
- TheMealDB Recipe API: External API for fetching meal recipes and ingredients.
In GoodFoodRecipes, the application's logic is efficiently managed through the Vuex store, which is divided into modular sections to handle different aspects of the app:
-
State:
userId
: The unique identifier of the authenticated user.token
: The authentication token associated with the user.didAutoLogout
: A flag indicating whether the user has been automatically logged out.
-
Mutations, Actions, Getters:
- Manage user authentication, token storage, and auto-logout functionality.
-
State:
coaches
: An array of cooking coaches, each containing details such asid
,firstName
,lastName
,areas
,description
, andhourlyRate
.
-
Mutations, Actions, Getters:
- Handle the retrieval and manipulation of coaching information.
- Allow users to register as coaches.
-
State:
requests
: An array containing user requests.
-
Mutations, Actions, Getters:
- Manage incoming requests from users seeking coaching.
-
State:
searchedMeals
: An array of meals resulting from a user's search query.mealsByLetter
: An array of meals categorized alphabetically.mealsByIngredient
: An array of meals based on selected ingredients.pinnedMeals
: An array to store up to 5 user-pinned favorite meals.ingredient
: An object representing a selected ingredient.
-
Mutations, Actions, Getters:
- Handle the retrieval and display of various meal-related data.
- Allow users to pin and unpin favorite meals.
- Manage the storage and retrieval of ingredients.
The modular structure of the Vuex store ensures a clean separation of concerns, making the application scalable and maintainable. Each module focuses on a specific aspect of the app, providing a clear and organized structure for handling state, mutations, actions, and getters.
-
Clone the Repository:
git clone https://github.com/your-username/VueMealsAndCooks.git
-
Install Dependencies:
cd VueMealsAndCooks npm install
-
Run the App:
npm run dev
-
Explore and Enjoy: Open your browser and navigate to http://localhost:3000 to start using VueMealsAndCooks.
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 <script setup>
SFCs, check out the script setup docs to learn more.
- VS Code + Volar (and disable Vetur) + TypeScript Vue Plugin (Volar).
TypeScript cannot handle type information for .vue
imports by default, so we replace the tsc
CLI with vue-tsc
for type checking. In editors, we need TypeScript Vue Plugin (Volar) to make the TypeScript language service aware of .vue
types.
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a Take Over Mode that is more performant. You can enable it by the following steps:
- Disable the built-in TypeScript Extension
- Run
Extensions: Show Built-in Extensions
from VSCode's command palette - Find
TypeScript and JavaScript Language Features
, right click and selectDisable (Workspace)
- Run
- Reload the VSCode window by running
Developer: Reload Window
from the command palette.
![Home](https://private-user-images.githubusercontent.com/46215033/287523147-22b26c2a-82b4-480e-a4b3-8198e5d93fb2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMxNDctMjJiMjZjMmEtODJiNC00ODBlLWE0YjMtODE5OGU1ZDkzZmIyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI1OTczNWY5OTA3MjQyMzUxYzA2ODU1NzI1Mjc2MzEzYTgwNzcwYmE0MmRiZDEwMDk3ZWNlMDdjOWM0NTJlMzImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.sW-x88eHxPvqPwLp0qjNBFfu83hIRWpoFFJJ3iInhgI)
![SearchMeals](https://private-user-images.githubusercontent.com/46215033/287523160-cba5d183-1240-44d8-80bf-91887dc37526.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMxNjAtY2JhNWQxODMtMTI0MC00NGQ4LTgwYmYtOTE4ODdkYzM3NTI2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQyYjZkY2I2YWNkZjQ0ZThhMDZlMTFlNDIwZDI3NWZmZDJhOWYxZDdmMWUxYjQ4YWFmMmI3MGY4ZjYzZDVjZDcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.y6hrGYNz5PuKXRd47EvzTspBtJ6upFhw3bl6L40GCJg)
![MealsByLetter](https://private-user-images.githubusercontent.com/46215033/287523175-c9a1d1f3-febf-430e-af9f-6bb4e333e3e4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMxNzUtYzlhMWQxZjMtZmViZi00MzBlLWFmOWYtNmJiNGUzMzNlM2U0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI3ZTkzZTlmZjg4ODc3ZjM5ZDBlNjI3Y2FkMzFhZjJkNWY0MDkzNWI3ZDRmMTM3YzkyMjAzNWNhNDJkNmQzYmMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.bOwmvB1bPKcApXv1KT0wiGSmGWwEwUgfv7x54Ctz7Wk)
![MealsByIngredients](https://private-user-images.githubusercontent.com/46215033/287523187-562aac1e-067f-42aa-8796-542a70a1a4e1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMxODctNTYyYWFjMWUtMDY3Zi00MmFhLTg3OTYtNTQyYTcwYTFhNGUxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ3YTg3MTQzYmI5MDY3OGVkYjIwODM3YTNmYmNlNjU0MTZhZDUyOGFhYjNkOWMwNDJhZDEyNWUzMjJiMWYzMzgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Qfqv3_EGsFwcu6n9L43NB5SgmbDhXOqH0KICPwjEVaQ)
![Coaches](https://private-user-images.githubusercontent.com/46215033/287523202-8978f413-7ca8-4298-a295-386a063a47ce.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMyMDItODk3OGY0MTMtN2NhOC00Mjk4LWEyOTUtMzg2YTA2M2E0N2NlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM0MDM0OGFiOTBjMjA1ODNhZTBlOGU0MGIzMWM2OGJlOWQxMTIwZDc2NzU3ZmZkYzZlMDg2ZmVkN2FkNjQwNzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.MEaJXEP0urUXZ44u2JVP0jTohq6EUK_l6cWKQyDKDio)
![CoachDetails](https://private-user-images.githubusercontent.com/46215033/287523213-0a16fed7-31ed-4dc6-9c6d-1c79aaa022fb.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMyMTMtMGExNmZlZDctMzFlZC00ZGM2LTljNmQtMWM3OWFhYTAyMmZiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ5Y2Y0NzlkYTZiNjkzMjViMWFiYTY0ODNjNjYyY2YzNTJlZjMyZDU5Mjg3ZTBlMjVlODI2NWEyZmQ5ZTFmZTUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.xnw_g6PhB7BDV4s-8gvqyZG4pd5MTnqN8SFCHDpYTzA)
![ContactCoach](https://private-user-images.githubusercontent.com/46215033/287523231-4bb7c028-2495-420b-81cc-b2eb72f8b868.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMyMzEtNGJiN2MwMjgtMjQ5NS00MjBiLTgxY2MtYjJlYjcyZjhiODY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTlkMGNkNDNlN2U4ODliOTZjNzJhNGJlN2Y4MWQ0YjY2NGYyMWJhOTMwNTkzMDcyMzMyZjcxMzljNDQwYjU2OGQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.PX7qCumCtED-QTZFLeTPCPwwMCJG10qjl6y352F3zHo)
![Login](https://private-user-images.githubusercontent.com/46215033/287523251-a15a5fee-e30c-4653-a414-510c927602ef.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMyNTEtYTE1YTVmZWUtZTMwYy00NjUzLWE0MTQtNTEwYzkyNzYwMmVmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTcyYzkzZTY0ODNmNWQ5ZGUzMTA0ZmI5NTdkMDdiNjk4MDNiYWQ1YjNmMjkzMDUyNGIyZmFlZTk0Mjc3OTIxZDYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.ENRim0nmmV1q-Lb7Gu6SeBeoa5bQUBj6BvukKAdtkkU)
![sign up](https://private-user-images.githubusercontent.com/46215033/287523255-a544a396-ca6a-44c0-9f58-6a1725d29d49.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMyNTUtYTU0NGEzOTYtY2E2YS00NGMwLTlmNTgtNmExNzI1ZDI5ZDQ5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWExNWE4MzNhY2FhMjM4MzcwMDdhZjM2ODEzNmZlZjNlNzA3YmEzMzc4YWExNDUxMjZiMjU4NWUxNzBjNDk5YWYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.IpB2zOxu4gwDQ7L-iiC8iv7-S4TjI93Io3ilh72BFmk)
![RegisterCoach](https://private-user-images.githubusercontent.com/46215033/287523273-735fb61b-97e2-47a8-98e0-614b97fef14d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMyNzMtNzM1ZmI2MWItOTdlMi00N2E4LTk4ZTAtNjE0Yjk3ZmVmMTRkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWVhNTg2NTVlNGRiMDgxMmI0MzMwYjhkYzZjMmMyYzYyOTU4Y2JiZDI3MTZkMmJjM2JkMjFjOTRkNDFjNjk0MjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.rxXI58JKuKO2vuhuKwiEi9yyciXxlUx39nHgjmjlQC0)
![Requests](https://private-user-images.githubusercontent.com/46215033/287523277-3972323e-77af-4662-bdec-155cd23d4970.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMyNzctMzk3MjMyM2UtNzdhZi00NjYyLWJkZWMtMTU1Y2QyM2Q0OTcwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYwZTNiMmYyZjg0MmI5NjhlMDM2OWJjOTdmN2JkYjZhNWU0ZmJhOWQyZDMyY2U4ZjA4MWIxYWE1ZmU4MzYzZTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.onIMB97hfN1doPtWxp6qX5zT-cptzVIlAWM3H1BizGs)
![MealsTable](https://private-user-images.githubusercontent.com/46215033/287523297-cd134853-9703-4cb9-baa7-be75249716dd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjYxNjY3OTEsIm5iZiI6MTcyNjE2NjQ5MSwicGF0aCI6Ii80NjIxNTAzMy8yODc1MjMyOTctY2QxMzQ4NTMtOTcwMy00Y2I5LWJhYTctYmU3NTI0OTcxNmRkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA5MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwOTEyVDE4NDEzMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTgyZGUyYjJiN2JmMTg5ZTUyMzAxOGQwNzA1Y2E5MDdhOTZiYmM1Nzc0YzNhYmYwZTU1MDVjNDM4OWJkZmY0NTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.ZAmFrn3Dyl74_1yCtE_4_XJVIAiLIaV5DcB0PKt_Qj0)