{"id":20791715,"url":"https://github.com/dzenis-h/mars-ems","last_synced_at":"2025-05-05T21:24:25.129Z","repository":{"id":40733402,"uuid":"138218054","full_name":"dzenis-h/Mars-EMS","owner":"dzenis-h","description":"This is an Employee Management system [EMS] for Accounting and HR built using the MERN+ stack. 📊  📉  📆","archived":false,"fork":false,"pushed_at":"2024-03-12T13:27:42.000Z","size":5004,"stargazers_count":25,"open_issues_count":43,"forks_count":9,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T23:51:08.367Z","etag":null,"topics":["bootstrap4","css3","gas","google-sheets-api","html5","javascript","jquery","lodash","mlab","mongodb","mongoose","nodejs","oauth2","react-router","reactjs","redux","redux-form","redux-thunk","rest-api","sailsjs"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dzenis-h.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-21T20:23:58.000Z","updated_at":"2025-01-10T17:55:52.000Z","dependencies_parsed_at":"2024-11-17T15:48:12.548Z","dependency_job_id":"38543425-2eb2-4c84-943f-8c7fae76fc3f","html_url":"https://github.com/dzenis-h/Mars-EMS","commit_stats":null,"previous_names":[],"tags_count":3,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzenis-h%2FMars-EMS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzenis-h%2FMars-EMS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzenis-h%2FMars-EMS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzenis-h%2FMars-EMS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dzenis-h","download_url":"https://codeload.github.com/dzenis-h/Mars-EMS/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252577651,"owners_count":21770846,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstrap4","css3","gas","google-sheets-api","html5","javascript","jquery","lodash","mlab","mongodb","mongoose","nodejs","oauth2","react-router","reactjs","redux","redux-form","redux-thunk","rest-api","sailsjs"],"created_at":"2024-11-17T15:46:56.932Z","updated_at":"2025-05-05T21:24:25.111Z","avatar_url":"https://github.com/dzenis-h.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"##\n![GitHub repo size](https://img.shields.io/github/repo-size/dzenis-h/Mars-EMS)\n![GitHub contributors](https://img.shields.io/github/contributors/dzenis-h/Mars-EMS)\n![GitHub stars](https://img.shields.io/github/stars/dzenis-h/Mars-EMS?style=social)\n![GitHub forks](https://img.shields.io/github/forks/dzenis-h/Mars-EMS?style=social)\n[![LinkedIn Follow](https://img.shields.io/badge/-Follow-blue?style=social\u0026logo=linkedin\u0026link=https://www.linkedin.com/in/dzenis-h/)](https://www.linkedin.com/in/dzenis-h/)\n[![GitHub Follow](https://img.shields.io/badge/-Follow-black?style=social\u0026logo=github\u0026link=https://github.com/dzenis-h)](https://github.com/dzenis-h)\n##\n# \u003cimg src=\"https://raw.githubusercontent.com/dzenis-h/Mars-EMS/master/frontend/public/favicon.ico\" width=\"32\" height=\"32\" style=\"padding: 5px\"\u003e Mars-EMS\n\n## Overview 📂\n\nMars-EMS is a full-stack web application that simulates an Employee Management System for, both, the accountant and HR departments. It uses Google Sheets as a database and Google OAuth 2.0 for authentication. It allows users to manage employees, their salaries, bonuses, penalties, and more. It also calculates the total payroll for each month and displays it in a dashboard. The EMS stands for an employee management system which was built to help companies reduce their time spent regarding the Accounting and HR departments.\nIt helps with generating salaries, penalties, bonuses, etc. Employing a new staff member is only a few clicks away or giving an end date takes one click. It contains many other features, like giving loans to employees, tracking their installments, making annual/ monthly reports, and much more. It looks and feels great thanks to great structure and design, and even though it possesses many features, the complexity is hidden from the end-user. So it always appears easy to use, no matter what functionality level you choose. It uses ReactJS (AND its entire ecosystem) on the frontend and NodeJS (SailsJS) + MongoDB/ Mongoose on the backend.\n\n![Screenshot of Mars-EMS](https://drive.google.com/uc?export=view\u0026id=1xNayKUTncYEUe6kOEE1QCAgVMzJaHEiM)\n\n## Tech Stack 🛠\n\n| Tech                                                                                                                                 | Docs                                                                         | Description                                                                                                       |\n| ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |\n| \u003cimg src=\"https://img.shields.io/badge/-ReactJS-blue?logo=react\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                        | [ReactJS](https://reactjs.org/docs/getting-started.html)                     | A JavaScript library for building user interfaces                                                                 |\n| \u003cimg src=\"https://img.shields.io/badge/-Node.js-green?logo=node.js\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                     | [Node.js](https://nodejs.org/en/docs/)                                       | A JavaScript runtime environment that executes JavaScript code outside a web browser                              |\n| \u003cimg src=\"https://img.shields.io/badge/-Express-yellow?logo=express\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                    | [Express](https://expressjs.com/en/4x/api.html)                              | A web application framework for Node.js                                                                           |\n| \u003cimg src=\"https://img.shields.io/badge/-MongoDB-brightgreen?logo=mongodb\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e               | [MongoDB](https://docs.mongodb.com/)                                         | A cross-platform document-oriented database program                                                               |\n| \u003cimg src=\"https://img.shields.io/badge/-Bootstrap-purple?logo=bootstrap\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                | [Bootstrap](https://getbootstrap.com/docs/5.0/getting-started/introduction/) | A popular front-end framework for building responsive web pages                                                   |\n| \u003cimg src=\"https://img.shields.io/badge/-Redux-pink?logo=redux\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                          | [Redux](https://redux.js.org/introduction/getting-started)                   | A state management library for JavaScript applications                                                            |\n| \u003cimg src=\"https://img.shields.io/badge/-OAuth2-orange?logo=oauth\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                       | [OAuth2](https://oauth.net/2/)                                               | An open standard for access delegation                                                                            |\n| \u003cimg src=\"https://img.shields.io/badge/-React_Router-red?logo=react-router\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e             | [React Router](https://reactrouter.com/web/guides/quick-start)               | A collection of navigational components for React applications                                                    |\n| \u003cimg src=\"https://img.shields.io/badge/-CSS3-blue?logo=css3\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                            | [CSS3](https://developer.mozilla.org/en-US/docs/Web/CSS)                     | A style sheet language for describing the presentation of web pages                                               |\n| \u003cimg src=\"https://img.shields.io/badge/-Redux_Forms-purple?logo=redux\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                  | [Redux Forms](https://redux-form.com/8.3.0/docs/gettingstarted.md/)          | A library for managing form state in Redux applications                                                           |\n| \u003cimg src=\"https://img.shields.io/badge/-Redux_Thunk-green?logo=redux\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                   | [Redux Thunk](https://github.com/reduxjs/redux-thunk)                        | A middleware for writing async logic that interacts with the Redux store                                          |\n| \u003cimg src=\"https://img.shields.io/badge/-Google_Sheets_API-yellow?logo=google-sheets\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e    | [Google Sheets API](https://developers.google.com/sheets/api)                | An API for reading and writing data to Google Sheets                                                              |\n| \u003cimg src=\"https://img.shields.io/badge/-Sails.JS-black?logo=sails.js\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                   | [Sails.JS](https://sailsjs.com/documentation/reference)                      | A framework for building Node.js applications with a modern MVC architecture                                      |\n| \u003cimg src=\"https://img.shields.io/badge/-Lodash-gray?logo=lodash\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                        | [Lodash](https://lodash.com/docs/)                                           | A utility library for manipulating and iterating over arrays, objects, and strings                                |\n| \u003cimg src=\"https://img.shields.io/badge/-Google_App_Scripts-red?logo=google-apps-script\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e | [Google App Scripts](https://developers.google.com/apps-script)              | A scripting platform for automating tasks across Google products and third-party services                         |\n| \u003cimg src=\"https://img.shields.io/badge/-Restful_API-brown?logo=rest\u0026style=for-the-badge\" width=\"100\" height=\"30\"\u003e                    | [Restful API](https://restfulapi.net/)                                       | An architectural style for designing web services that provide a uniform interface for interacting with resources |\n\n\u003cimg src=\"https://raw.githubusercontent.com/dzenis-h/Mars-EMS/c0ea5eaad953548777c7f006faf65081f41b0ea1/stack.svg\" width=\"500\" height=\"300\"\u003e\n\n## Instructions 📝\n\nIn order to run \u0026 use this app locally, follow these steps:\n\n- Clone the repository: `git clone https://github.com/dzenis-h/Mars-EMS`\n- Install the necessary dependencies: Run `npm install` in all three folders:\n  - ROOT folder (`Mars-EMS`).\n  - BACKEND folder (`Mars-EMS\\backend`).\n  - FRONTEND folder (`Mars-EMS\\frontend`).\n- Add your own credentials:\n  - Go to [Google Cloud Console](https://console.cloud.google.com/)\n  - Create a new project.\n  - Enable the Google Spreadsheets API.\n  - Create OAuth credentials - for the client choose Web client\n  - Copy the Client ID and paste it inside of the config file (`frontend\\src\\config\\config.js`).\n  - Don't forget to do similar for the backend -Look into the 'client_secret' JSON file for more info.\n  - For the backend, you’ll have to choose 'Other’ aka Installed.\n  - Download the file and save it inside of the backend (its root) folder under the name 'client_secret.json'.\n  - NOTE: Both of them have to point to the same project. Additionally, if you want to use a remote MongoDB storage, you’ll have to edit the `connections.js` file and change your preferences. The file is located inside of the `backend\\config\\connections.js` file.\n- Now let’s start the project:\n  - Run an instance of your local MongoDB: `mongod` [ Important – this needs to start first ]\n  - Run the following command inside of the root folder: `npm start`\n  - NOTE: It will start the NodeJS backend and the ReactJS frontend at the same time.\n- It’s time to log in: The login restriction has been removed (by default). To log in, you can use your Gmail account.\n  - Previously, the login was restricted, and to log in you had to use the email which I was providing. If you’re still interested in changing the default behavior, you can achieve that, on a basic level, by editing the config file located in `frontend\\src\\config\\config.js`\n  - This part is very important: After you get redirected, copy the code received from Google, go back to localhost: 3000 or Heroku (depending on where you're doing the testing), paste it into your app, and confirm.\n\n## Contributing 🙌\n\nContributions are always welcome! If you would like to contribute to this project, please follow these steps:\n\n1. Fork the repository. 🍴\n2. Create a new branch. 🌵\n3. Make your changes and test them thoroughly. 👨‍💻\n4. Submit a pull request. ✔\n\n## License 📄\n\nThis project is licensed under the MIT License. See the [LICENSE](https://docs.google.com/document/d/11WK7tVoTFRMcWCuGZQCRWxEsDUEJ_6ArtfV-NjWcBCU/edit?usp=sharing) file for more details.\n\n## Credits 👾\n\nThis project was created by [Dzenis H.](https://dzenis.tech)\n\n\"If you like what you see, please consider giving a ⭐️\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdzenis-h%2Fmars-ems","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdzenis-h%2Fmars-ems","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdzenis-h%2Fmars-ems/lists"}