{"id":40167449,"url":"https://github.com/internpulse/property-hive-frontend","last_synced_at":"2026-01-20T18:01:35.294Z","repository":{"id":257400034,"uuid":"851856903","full_name":"InternPulse/property-hive-frontend","owner":"InternPulse","description":"Frontend of Property Hive, A power real estate management applications. ","archived":false,"fork":false,"pushed_at":"2024-10-17T10:14:31.000Z","size":31030,"stargazers_count":0,"open_issues_count":4,"forks_count":10,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2026-01-19T21:18:21.297Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.propertyhive.com.ng","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/InternPulse.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-09-03T20:11:23.000Z","updated_at":"2024-10-17T10:14:34.000Z","dependencies_parsed_at":"2024-09-16T13:56:18.278Z","dependency_job_id":"e51a5b8c-daf4-4477-8af2-423efe3c3175","html_url":"https://github.com/InternPulse/property-hive-frontend","commit_stats":null,"previous_names":["internpulse/property-hive-frontend"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/InternPulse/property-hive-frontend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternPulse%2Fproperty-hive-frontend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternPulse%2Fproperty-hive-frontend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternPulse%2Fproperty-hive-frontend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternPulse%2Fproperty-hive-frontend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/InternPulse","download_url":"https://codeload.github.com/InternPulse/property-hive-frontend/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/InternPulse%2Fproperty-hive-frontend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28607962,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T16:10:39.856Z","status":"ssl_error","status_checked_at":"2026-01-20T16:10:39.493Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-01-19T16:40:18.167Z","updated_at":"2026-01-20T18:01:35.272Z","avatar_url":"https://github.com/InternPulse.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Property Hive Frontend\n\nThis is a `Vite, React and Tailwindcss` project.\n\n## Getting Started\n\nThis project uses `npm workspaces` as default monorepo architecture.\n\n#### First clone the repo\n\n```bash\ngit clone https://github.com/InternPulse/property-hive-frontend.git\n```\n\n#### Install all dependencies\n\n```bash\nnpm install\n```\n\n#### Run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n```\n\n### Project Structure\n\n- `src/assets`: Static assets like images.\n- `src/components`: React components.\n- `src/helpers`: Custom authentication handlers (`withAuth.jsx`, `withoutAuth.jsx`).\n- `src/http`: Axios setup and API call handlers.\n- `src/pages`: Application pages.\n- `src/services`: Services like API integrations.\n- `App.jsx`\n- `index.css`: Global Styles.\n- `main.jsx`\n\n# Commit Standards\n\n## Branches\n\n- **dev** -\u003e pr this branch for everything `frontend` related\n- **main** -\u003e **dont touch** this branch, this is what is running in production.\n\n## Contributions\n\nFamTrust is open to contributions, but I recommend creating an issue or replying in a comment to let us know what you are working on first that way we don't overwrite each other.\n\n## Contribution Guidelines\n\n1. Clone the repo `git clone https://github.com/InternPulse/famtrust-frontend.git`.\n2. Open your terminal \u0026 set the origin branch: `git remote add origin https://github.com/InternPulse/famtrust-frontend.git`\n3. Pull origin `git pull origin dev`\n4. Create a new branch for the task you were assigned to, eg `TicketNumber/(Feat/Bug/Fix/Chore)/Ticket-title` : `git checkout -b NA-001/Feat/Sign-Up-from`\n5. After making changes, do `git add .`\n6. Commit your changes with a descriptive commit message : `git commit -m \"your commit message\"`.\n7. To make sure there are no conflicts, run `git pull origin dev`.\n8. Push changes to your new branch, run `git push -u origin NA-001/Feat/Sign-Up-from`.\n9. Create a pull request to the `dev` branch not `main`.\n10. Ensure to describe your pull request.\n11. \u003e If you've added code that should be tested, add some test examples.\n\n# Merging\n\nUnder any circumstances should you merge a pull request on a specific branch to the `dev` or `main` branch\n\n### _Commit CheatSheet_\n\n| Type     |                          | Description                                                                                                 |\n| -------- | ------------------------ | ----------------------------------------------------------------------------------------------------------- |\n| feat     | Features                 | A new feature                                                                                               |\n| fix      | Bug Fixes                | A bug fix                                                                                                   |\n| docs     | Documentation            | Documentation only changes                                                                                  |\n| style    | Styles                   | Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)      |\n| refactor | Code Refactoring         | A code change that neither fixes a bug nor adds a feature                                                   |\n| perf     | Performance Improvements | A code change that improves performance                                                                     |\n| test     | Tests                    | Adding missing tests or correcting existing tests                                                           |\n| build    | Builds                   | Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)         |\n| ci       | Continuous Integrations  | Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs) |\n| chore    | Chores                   | Other changes that don't modify, frontend or test files                                                     |\n| revert   | Reverts                  | Reverts a previous commit                                                                                   |\n\n\u003e _Sample Commit Messages_\n\n- `chore: Updated README file` := `chore` is used because the commit didn't make any changes to the frontend or test folders in any way.\n- `feat: Added plugin info endpoints` := `feat` is used here because the feature was non-existent before the commit.\n\n## Code Explanation\n\n### API Calls\n\nA separate folder called http contains axios.js and index.js files to handle any outgoing or incoming HTTP requests/responses. The index.js file should contain all outgoing API calls to the backend server.\n\n\u003e ❗❗Do not create any custom http calls inside a page or components. Whatever calls need to be processed by the server should be called within the `index.js` file.\n\n### Custom Authentication Handler\n\nWithin the `helpers` folder contains **two** different files called `withAuth.js` and `withoutAuth.js`.\n\n- **WithAuth.jsx** :- contains two `HOF` called `withUserAuth` and `withAdminAuth` which are functions that wrap every component that needs protection or protected route components for user and admin respectively. for eg `Dashboard` or any other page that require the user to be loggedIn. All you have to do is import the cusstom handler and wrap your component inside it. i.e\n\n```js\nwithUserAuth(Dashboard);\nwithUserAuth(Promotion);\n```\n\nfor e.g `AnalyticsAndReportingLayouts` or any other page that requires the user to be an admin before they access it. All you have to do is import the custom handler and wrap your component inside it. i.e\n\n```js\nwithAdminAuth(AnalyticsAndReportingLayouts);\nwithAdminAuth(SanctionedProducts);\n```\n\n- **WithoutAuth.jsx** :- is the opposite of `withAuth.jsx` HOF. It only meant to be used to prevent loggedIn users from redirecting or navigating to a page. i.e when a user is loggedIn and you dont want them to view a certain page, use this function.\n\n```js\nwithoutAuth(Login);\nwithoutAuth(Signup);\n```\n\n### MainLayout.jsx\n\nWithin this file contains a `MainLayout` component, rather than calling `Footer`, `Sidebar`, `TopBar` component on every file manually, all you have to do is first invoke the `\u003cMainLayout\u003e` component inside any page before adding the children of that page.\n\nfor eg\n\n```js\nimport React from \"react\";\nimport { BrowserRouter as Router, Route, Routes } from \"react-router-dom\";\nimport Home from \"./pages/Home\";\nimport MainLayout from \"./components/Layout/MainLayout\";\n\nfunction App() {\n  return (\n    \u003cRouter\u003e\n      \u003cMainLayout\u003e\n        \u003cRoutes\u003e\n          \u003cRoute path=\"/\" element={\u003cHome /\u003e} /\u003e\n        \u003c/Routes\u003e\n      \u003c/MainLayout\u003e\n    \u003c/Router\u003e\n  );\n}\n\nexport default App;\n```\n\nYou also get to decide whether to show the footer or sidebar using the available props.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finternpulse%2Fproperty-hive-frontend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finternpulse%2Fproperty-hive-frontend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finternpulse%2Fproperty-hive-frontend/lists"}