{"id":18965544,"url":"https://github.com/edbert-fl/team-management-app","last_synced_at":"2026-04-10T13:31:08.363Z","repository":{"id":217795362,"uuid":"741760585","full_name":"edbert-fl/teamify","owner":"edbert-fl","description":"Team Management Application built with Typescript and React Native on the front end with Javascript and Node.js in the back.","archived":false,"fork":false,"pushed_at":"2024-02-15T04:25:19.000Z","size":677,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-01T05:45:13.451Z","etag":null,"topics":["javascript","nodejs","portfolio-project","postgresql","react-native","typescript"],"latest_commit_sha":null,"homepage":"https://edbert-fl.github.io/","language":"TypeScript","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/edbert-fl.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":"2024-01-11T03:49:28.000Z","updated_at":"2024-02-03T11:40:57.000Z","dependencies_parsed_at":"2024-11-08T14:35:41.012Z","dependency_job_id":"cd84ef16-3b7b-4a2d-a3b8-4d0ae582fa5e","html_url":"https://github.com/edbert-fl/teamify","commit_stats":null,"previous_names":["edbert-fl/teamify"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edbert-fl%2Fteamify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edbert-fl%2Fteamify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edbert-fl%2Fteamify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/edbert-fl%2Fteamify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/edbert-fl","download_url":"https://codeload.github.com/edbert-fl/teamify/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239964497,"owners_count":19725950,"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":["javascript","nodejs","portfolio-project","postgresql","react-native","typescript"],"created_at":"2024-11-08T14:29:57.851Z","updated_at":"2025-12-30T20:16:37.635Z","avatar_url":"https://github.com/edbert-fl.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003ch1 align=\"center\"\u003eTeamify Employee Management App\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.typescriptlang.org/\"\u003e\u003cimg alt=\"Typescript\" src=\"https://img.shields.io/badge/typescript-%23007ACC.svg?style=for-the-badge\u0026logo=typescript\u0026logoColor=white\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://reactnative.dev/\"\u003e\u003cimg alt=\"React Native\" src=\"https://img.shields.io/badge/react_native-%2320232a.svg?style=for-the-badge\u0026logo=react\u0026logoColor=%2361DAFB\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.postgresql.org/\"\u003e\u003cimg alt=\"PostgreSQL\" src=\"https://img.shields.io/badge/PostgreSQL-316192?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://nodejs.org/en\"\u003e\u003cimg alt=\"Node.js\" src=\"https://img.shields.io/badge/Node%20js-339933?style=for-the-badge\u0026logo=nodedotjs\u0026logoColor=white\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.javascript.com/\"\u003e\u003cimg alt=\"Javascript\" src=\"https://img.shields.io/badge/JavaScript-323330?style=for-the-badge\u0026logo=javascript\u0026logoColor=F7DF1E\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n\n## About The Project\n\nTeamify is a Team Management application that caters specifically to small businesses employing part-time staff. The frontend is powered by React Native and Typescript, while the backend boasts the efficiency of Javascript, Node.js and PostgreSQL for seamless data management. Elevating user authentication to a new level, we leverage the robust capabilities of Microsoft Azure's Vision API for facial recognition, ensuring a secure and modernized experience for both employers and employees.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Features\n\n### 📱 Cross-Platform Compatibility:\nRuns on both iOS and Android\n\n### 🔐 Authentication:\n- Custom User Authentication\n    - Organization-specific roles and permissions\n    - AI-powered facial recognition for employee clock-in\n\n### 👩‍💼 Admin Features:\n- Admin Dashboard\n    - Organization data overview\n    - (Under Development) Intuitive roles and user management\n    - (Under Development) Setting pay for all users\n\n### 🔄 Organization Management:\n- Admins can create organizations\n- Invite employees using organization codes for user registration\n\n### 📅 Shift Management:\n- Shift creation and assignment to employees\n- (Under Development) View upcoming shifts and receive notifications\n\n\u003c!-- GETTING STARTED --\u003e\n\n# Getting Started\n\nTo get a local copy up and running follow these simple example steps.\n\n## Prerequisites\n\n### Node.js and npm\n\nMake sure you have Node.js and npm installed on your machine. You can download them from https://nodejs.org/.\n\n### React Native CLI\n\nInstall React Native CLI globally by running the following command:\n\n```bash\nnpm install -g react-native-cli\n```\n\n## Installation\n\nClone the repository to your local machine using Git then navigate to the project directory.\n\n```bash\ngit clone \u003crepository_url\u003e\ncd \u003cproject_directory\u003e\n```\n\nThen install the project dependencies using npm.\n\n```bash\nnpm install\n```\n\nTo use the database you can setup a free PostgreSQL database using \u003ca href=\"https://www.elephantsql.com/\"\u003eElephantSQL\u003c/a\u003e and set up a Microsoft Azure account then get a Vision key and Vision Endpoint for their \u003ca href=\"https://azure.microsoft.com/en-us/products/ai-services/ai-vision\"\u003eVision API\u003c/a\u003e. Then create a `.env` file in the backend folder and place the following inside:\n\n```bash\nDATABASE_URL=\u003cyour_database_url\u003e\nVISION_KEY=\u003cyour_vision_key\u003e\nVISION_ENDPOINT=\u003cyour_vision_endpoint\u003e\n```\n\nOnce it's working run the following command to setup the SQL Database.\n\n```bash\ncd backend\nnode sqlsetup\n```\n\nYou can run this to check if everything has been set up correctly.\n\n```bash\nnode sqlsetup -c\n```\n\nOnce setup then create another `.env` file in the root of the project and then add your computer's IP address so that it can connect to your computer for testing while in development. Follow the instructions here to get your computer's IP Address.\n\n- \u003ca href=\"https://support.microsoft.com/en-us/windows/find-your-ip-address-in-windows-f21a9bbc-c582-55cd-35e0-73431160a1b9\"\u003e🖥️ Windows\u003c/a\u003e\n- \u003ca href=\"https://www.security.org/vpn/find-mac-ip-address/\"\u003e🍎 MacOS\u003c/a\u003e\n\nOnce you know your computer's IP address then place it into the root `.env` file:\n\n```bash\nEXPO_PUBLIC_IOS_SERVER_URL=\u003cyour_computers_ip_address\u003e\n```\n\nThen run `npm start` to run the project and scan the QR code to load it on your iOS or Android device with Expo!\n\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Usage\n\n### User Authentication\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/edbert-fl/teamify/assets/102503467/57ac46ff-dd67-4608-8a30-acb90c030e48\" hspace=\"10\" alt=\"Sign Up GIF\" align=\"center\" width=\"200\" /\u003e\n\u003c/p\u003e\n\nUsers of the app are able to create new organizations easily when signing up. Then once the organizatino is created they can sign up for a personal account that is immediately made into the admin of their created organization. As an admin they are able to receive their organization's randomly generated 6 digit alphanumeric organization code on their personal Home page which can then be shared to other employees to create their own accounts which will immediately be registered as part of the parent organization.\n\n```typescript\nconst signUp = async () =\u003e {\n    setLoading(true);\n    try {\n      // Generate a random alphanumeric code of 6 digits\n      const generatedCode = Math.random()\n        .toString(36)\n        .substr(2, 6)\n        .toUpperCase();\n\n      if (organizationName \u0026\u0026 generatedCode) {\n        // Save organization information to be added to database after owner account is created\n        setCurrOrganization({\n          code: generatedCode,\n          name: organizationName,\n        });\n\n        // Sends call to API endpoint with the generated organization code and name to update the database\n        const response = await axios.post(`${SERVER_URL}/organization/add`, {\n          code: generatedCode,\n          name: organizationName,\n        });\n\n        // Navigate to the Registration page\n        navigation.navigate('Registration', { userCreatedOrganization: true });\n      } else {\n        throw new Error(\"Organization name or code is undefined.\");\n      }\n    } catch (error: any) {\n      console.log(error);\n      alert(\"Sign up failed: \" + error.message);\n    } finally {\n      setLoading(false);\n    }\n  };\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### Admin Dashboard\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/edbert-fl/teamify/assets/102503467/397a5769-68ec-41cf-bb7d-a9e861e1464f\" hspace=\"10\" alt=\"Manage Shifts GIF\" align=\"center\" width=\"250\" /\u003e\n\u003c/p\u003e\n\nAdmins have access to the Organization tab which is an admin dashboard that displays different relevant statistics of the whole organization. From here they are also able to manage shifts for their employees. They can choose whether to create a shift for a particular day, or have a repeating shift that occurs every week at the same time. \n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedbert-fl%2Fteam-management-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fedbert-fl%2Fteam-management-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedbert-fl%2Fteam-management-app/lists"}