MyMeals - Admin & Mobile App, food lunch app, Google Cloud
Food ordering app with web app administration
MyMeals - Admin & Mobile App, food lunch app, Google Cloud
Food ordering app with web app administration
![[1] MyMeals - Admin & Mobile App, food lunch app, Google Cloud, Food ordering app with web app administration](/projects/my-meals/my-meals.mobile.app.jpg)
![[1] MyMeals - Admin & Mobile App, food lunch app, Google Cloud, Food ordering app with web app administration](/projects/my-meals/my-meals.admin_notification_list.jpg)
![[2] MyMeals - Admin & Mobile App, food lunch app, Google Cloud, Food ordering app with web app administration](/projects/my-meals/my-meals.admin_notification_list_delete.jpg)
![[2] MyMeals - Admin & Mobile App, food lunch app, Google Cloud, Food ordering app with web app administration](/projects/my-meals/my-meals.admin_order_history.jpg)
![[3] MyMeals - Admin & Mobile App, food lunch app, Google Cloud, Food ordering app with web app administration](/projects/my-meals/my-meals.admin_order_summary.jpg)
![[3] MyMeals - Admin & Mobile App, food lunch app, Google Cloud, Food ordering app with web app administration](/projects/my-meals/my-meals.admin_restaurant_list.jpg)
![[4] MyMeals - Admin & Mobile App, food lunch app, Google Cloud, Food ordering app with web app administration](/projects/my-meals/my-meals.admin_schedule.jpg)
![[4] MyMeals - Admin & Mobile App, food lunch app, Google Cloud, Food ordering app with web app administration](/projects/my-meals/my-meals.admin_user_list.jpg)
![[5] MyMeals - Admin & Mobile App, food lunch app, Google Cloud, Food ordering app with web app administration](/projects/my-meals/my-meals.web.vsc_stack.jpg)
Project performed during employment, original branding and name has been altered from original. The project may have since updated.
Overview
MyMeals is a full-stack food ordering application for company staff, including a React web portal for administration and a React Native mobile app for end users. The project integrates Google Firebase for backend services and Azure AAD for authentication.
Features
- Web portal for admin and order management.
- Mobile app for end users available on Google and Apple stores.
- User authentication via Azure Active Directory with role-based permissions.
- Cloud Functions and hosting on Google Firebase.
- Multi-stage food ordering system with schedule and notifications.
- Monorepo architecture with React, Node.js, and Express.js.
Tech Summary
- Frontend: React, React Native, MUI, Typescript.
- Backend: Node.js, Express.js, Firebase functions.
- DevOps: Azure Pipelines, git-flow branching, ESLINT, Husky.
- Other: Swagger/Postman API docs, environment management (.ENV), functional programming, monorepo structure.
Outcome
- Successfully delivered a secure and scalable food ordering system.
- Implemented full-stack architecture and CI/CD pipelines.
- Provided technical leadership and mentoring to a development team of 4-10 members.
- Ongoing maintenance and enhancements post-launch.
Technologies:
Node.js
Node.js is a JavaScript runtime built on Chrome's V8 engine for building server-side applications. Why use it? Node.js offers fast performance and scalability, making it ideal for real-time applications and APIs. Best practices include using async/await, modularizing code, and using event-driven programming. Node.js was first released in 2009.
React v16
React v16 is a major release of the popular JavaScript library React, used for building user interfaces. Why use it? React v16 introduced new features like the Fiber architecture, improved rendering, and error boundaries. Best practices include using functional components and hooks to take advantage of React’s features. React v16 was released in 2017.
Mui
Material-UI (MUI) is a popular React UI framework that implements Google’s Material Design guidelines. Why use it? MUI provides a consistent design system and pre-designed components that make UI development faster and easier. Best practices include customizing MUI components to match your app's brand and ensuring accessibility. MUI was first released in 2014.
Monorepo
A monorepo is a software development strategy where all the code for multiple projects is stored in a single repository. Why use it? Monorepos enable easier code sharing, consistent dependency management, and simplified testing across projects. Best practices include using build tools like Bazel and maintaining modularity within the repo. Monorepos gained popularity in the 2010s.
Express.js
Express.js is a fast and minimalist web application framework for Node.js. Why use it? Express simplifies routing, middleware, and server setup, making it ideal for building APIs and web applications. Best practices include using middleware for handling errors and request validation. Express.js was first released in 2010.
Crud
CRUD stands for Create, Read, Update, and Delete—the basic operations for managing data in applications. Why use it? CRUD operations are foundational to database management, allowing developers to create and manage records in a structured way. Best practices include using proper validation and error handling to ensure data integrity. CRUD has been a core concept since the early days of computing.
Typescript
TypeScript is a superset of JavaScript that adds static types to the language. Why use it? TypeScript improves code quality by enabling type checking, autocompletion, and error detection during development. Best practices include using strict typing and leveraging TypeScript's powerful interfaces and generics. TypeScript was first released in 2012.
State management
State management refers to the practice of managing and storing the state of an application in a central place. Why use it? State management ensures consistency across an application and enables smoother updates to the UI. Best practices include using state management libraries like Redux and MobX. State management has been a challenge in web development since the 2010s.
Husky
Husky is a tool for managing Git hooks, allowing you to run scripts before or after certain Git commands. Why use it? Husky helps enforce code quality by running linters or tests before committing code. Best practices include using Husky for pre-commit hooks to automatically format and lint code. Husky was first released in 2017.
Eslint
ESLint is a static code analysis tool for identifying and fixing problems in JavaScript code. Why use it? ESLint helps ensure consistent code quality by enforcing coding standards and catching errors early. Best practices include setting up a shared configuration for teams and using auto-fix features. ESLint was first released in 2013.
Dt (definitely typed)
Definitely Typed is a repository of high-quality TypeScript type definitions for popular JavaScript libraries. Why use it? Definitely Typed enables TypeScript developers to use type definitions for JavaScript libraries, improving the developer experience. Best practices include adding type definitions for third-party libraries and using type-safe code. Definitely Typed was first launched in 2012.
Separation of concerns (soc)
Separation of concerns (SoC) is a design principle for separating a computer program into distinct sections. Why use it? SoC promotes modularity, making code easier to maintain and understand. Best practices include keeping business logic separate from UI code and handling different concerns in isolated modules. SoC has been widely adopted in software engineering since the 1970s.
Lean software development (lsd)
Lean Software Development (LSD) is a methodology that focuses on eliminating waste and improving efficiency in the software development process. Why use it? LSD helps teams deliver software faster by focusing on customer value and streamlining development workflows. Best practices include using iterative development cycles and frequent releases. Lean principles have been in use since the early 2000s.
Functional programming
Functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions. Why use it? Functional programming promotes immutability, higher-order functions, and declarative code, leading to cleaner, more predictable code. Best practices include avoiding side effects and using pure functions. Functional programming gained prominence in the 1950s.
Semantic versioning
Semantic versioning is a versioning scheme for software that conveys meaning about the changes. Why use it? Semantic versioning helps developers understand the impact of changes based on version numbers, aiding in compatibility management. Best practices include following semantic versioning rules strictly for releases. It was introduced in 2011.
Google firebase/cloud
Google Firebase is a platform for building and managing web and mobile apps, while Google Cloud offers cloud computing services. Why use it? Firebase simplifies backend operations with tools like Firestore, authentication, and serverless functions. Google Cloud offers scalable infrastructure for web applications. Best practices include using Firebase’s Firestore for data storage and using Firebase Authentication for secure sign-ins. Firebase was first released in 2011, while Google Cloud launched in 2008.
Firebase functions and hosting
Firebase Functions and Hosting is a serverless platform provided by Google for building and deploying apps and websites. Why use it? Firebase offers easy scalability, integrated features like authentication, and rapid deployment for cloud-based applications. Best practices include leveraging Firebase's real-time database and cloud storage. Firebase was first released in 2011.
Cloud functions
Cloud Functions is a serverless computing service from Google Cloud, where you can run code in response to events. Why use it? Cloud Functions allows developers to deploy scalable, event-driven code without managing infrastructure. Best practices include structuring functions for reusability and handling errors gracefully. Cloud Functions was first released in 2017.
Azure (aad) auth
Azure Active Directory (AAD) Auth is a cloud-based identity and access management service from Microsoft. Why use it? AAD Auth simplifies authentication and authorization, enabling secure access to applications. Best practices include using multi-factor authentication (MFA) and conditional access policies. Azure AD has been available since 2010.
Environments (.env)
Environment variables (often stored in .env files) are key-value pairs used to configure application settings. Why use it? They enable you to store sensitive data like API keys and configurations outside the codebase. Best practices include storing environment-specific configurations and using libraries like dotenv. Environment variables have been used for decades in software development.
Yarn
Yarn is a package manager for JavaScript, designed to be faster, more secure, and more reliable than npm. Why use it? Yarn improves performance by caching dependencies and supports deterministic builds. Best practices include using Yarn for managing dependencies in large-scale projects. Yarn was first released in 2016.
Swagger/postman
Swagger and Postman are tools for testing and documenting RESTful APIs. Why use them? Swagger allows for automatic generation of API documentation, while Postman helps developers test API requests and responses. Best practices include using these tools for consistent API testing and validation. Swagger was first released in 2011, and Postman in 2014.
D2lang
D2Lang is a domain-specific language used for defining structured documents and diagrams. Why use it? D2Lang makes it easier to represent information visually, ideal for creating complex flowcharts or system designs. Best practices include using it for documentation and project visualization. D2Lang has been used since the early 2010s.
Devops azure pipeline
Azure DevOps Pipelines is a cloud service that automates the building, testing, and deployment of applications. Why use it? It integrates with Azure services and supports multi-platform environments, improving continuous integration and deployment. Best practices include automating testing and deployment pipelines for faster delivery. Azure Pipelines was introduced in 2018.