{"id":24504015,"url":"https://github.com/rajkp10/rentalsphere","last_synced_at":"2026-04-10T12:32:28.400Z","repository":{"id":254298797,"uuid":"846082534","full_name":"rajkp10/RentalSphere","owner":"rajkp10","description":"RentalSphere is a versatile platform that addresses the complexities of property management, streamlining operations for landlords while enhancing the rental experience for tenants through innovative features and analytics-driven insights.","archived":false,"fork":false,"pushed_at":"2024-08-22T13:55:33.000Z","size":12501,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-21T00:32:16.260Z","etag":null,"topics":["cloudinary","daisy-ui","docker","docker-compose","junit5","jwt","lombok","mysql","react-router-dom","reactjs","spring-boot","spring-boot-starter-mail","spring-jpa","spring-security","tailwindcss","thymeleaf"],"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/rajkp10.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-08-22T13:51:12.000Z","updated_at":"2024-08-22T14:40:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"84507ece-3e5a-4058-8373-94ba9c81e9a0","html_url":"https://github.com/rajkp10/RentalSphere","commit_stats":null,"previous_names":["rajkp10/rentalsphere"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rajkp10/RentalSphere","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rajkp10%2FRentalSphere","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rajkp10%2FRentalSphere/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rajkp10%2FRentalSphere/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rajkp10%2FRentalSphere/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rajkp10","download_url":"https://codeload.github.com/rajkp10/RentalSphere/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rajkp10%2FRentalSphere/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31642821,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"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":["cloudinary","daisy-ui","docker","docker-compose","junit5","jwt","lombok","mysql","react-router-dom","reactjs","spring-boot","spring-boot-starter-mail","spring-jpa","spring-security","tailwindcss","thymeleaf"],"created_at":"2025-01-21T23:19:51.899Z","updated_at":"2026-04-10T12:32:28.382Z","avatar_url":"https://github.com/rajkp10.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\n  \u003cmeta charset=\"UTF-8\"\u003e\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n  \u003cdiv class=\"container\" \u003e\n    \u003cdiv class=\"header\" style=\"width: 100%; display: flex; justify-content: center;\"\u003e\n      \u003ca href=\"https://imgur.com/GjpA6cF\"\u003e\u003cimg src=\"https://i.imgur.com/GjpA6cF.jpg?1\" alt=\"RentalSphere Logo \" width=\"80px\"\u003e\u003c/a\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"content\" \u003e\n        \u003cdiv class=\"summary-app\" style=\"text-align: center;\"\u003e\n      \u003cp\u003eRentalSphere is a versatile platform that addresses the complexities of property management, streamlining operations for landlords while enhancing the rental experience for tenants through innovative features and analytics-driven insights.\u003c/p\u003e\n         \u003c/div\u003e\n      \u003chr\u003e\n      \u003cdiv class=\"feature\"\u003e\n        \u003ch3\u003eBuild Rentalsphere\u003c/h3\u003e\n        \u003col\u003e\n          \u003cli\u003eIn the backend directory, run \u003ccode\u003e./mvnw install\u003c/code\u003e.\u003c/li\u003e\n          \u003cli\u003eAfter successful compilation and build, go to the root directory of the repository and run \u003ccode\u003edocker-compose build\u003c/code\u003e.\u003c/li\u003e\n          \u003cli\u003eAfter docker images are built successfully, run \u003ccode\u003edocker-compose up\u003c/code\u003e.\u003c/li\u003e\n          \u003cli\u003e\u003ckbd style=\"color: black; font-weight: bold;\"\u003eCtrl + c\u003c/kbd\u003e to stop the containers.\u003c/li\u003e\n          \u003cli\u003ePlease run \u003ccode\u003edocker-compose down\u003c/code\u003e after stopping the containers.\u003c/li\u003e\n        \u003c/ol\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n\u003c/div\u003e\n\n\u003ch3\u003eFeature: Registration/Login\u003c/h3\u003e\n\nScenario: User registers on the website\n\n    Given a person visits the website for the first time\n    When the person fills out the registration form with their details\n    Then the person should submit the registration form\n    And the person should be successfully registered as a user\n    And their role on the website should be set as user\n\nScenario: User logs in with valid credentials\n\n    Given a registered user wants to access the website\n    When the user enters their username and password\n    Then the user should be able to successfully log in\n    And should gain access to user-specific features and functionalities\n\nScenario: Property manager's role gets added after property approval\n\n    Given a user has registered and posted a property on the website\n    And the property has been approved by the admin\n    When the property manager logs in\n    Then the user's role should be updated to include the property manager role\n\nScenario: Tenant's role gets added after tenant request approval\n\n    Given a user has registered and applied for a property as a tenant\n    And the tenant application has been approved by the property manager\n    When the user logs in\n    Then the user's role should be updated to include the tenant role\n\n\u003ch3\u003eFeature: Property Postings\u003c/h3\u003e\n\nScenario: User fills out property posting form\n\n    Given a normal user is logged in\n    When the user fills out the property posting form with relevant details\n    Then the user should submit the property posting request\n    And the request should be sent to the admin for review\n\nScenario: Admin approves property posting request\n\n    Given the admin is logged in\n    And there is a pending property posting request\n    When the admin reviews and approves the property posting request\n    Then the property should be successfully posted on the website\n    And the user's role should be changed to property manager\n\nScenario: Property manager adds further properties\n\n    Given a user has the role of property manager\n    When the property manager wants to add a new property posting\n    Then the property manager should be able to add the property without admin approval\n    And the newly added property should be immediately visible on the website\n\n\u003ch3\u003eFeature: Tenant Requests\u003c/h3\u003e\n\nScenario: User applies for a property posting\n\n    Given a normal user is logged in\n    And the user is viewing a property posting they are interested in\n    When the user fills out the tenant application form for that property\n    Then the user should submit the tenant application request\n    And the request should be sent to the respective property manager for review\n\nScenario: Property manager reviews tenant application\n\n    Given the property manager is logged in\n    And there is a pending tenant application request for their property\n    When the property manager reviews the tenant application\n    Then the property manager should have the option to approve or decline the request\n\nScenario: Property manager approves tenant application\n\n    Given the property manager approves a tenant application request\n    Then the user who applied should be granted tenant access to the property\n    And the user's role on the website should be updated to include both user and tenant roles\n\nScenario: User views property as a tenant\n\n    Given a user has been granted tenant access to a property\n    When the user views the property listing\n    Then the user should see the tenant view of the property details\n    And the user should have access to tenant-specific features and information\n\n\u003ch3\u003eFeature: Admin Page\u003c/h3\u003e\n\nScenario: Admin views property requests\n\n    Given the admin is logged in with admin credentials\n    When the admin accesses the admin page\n    Then the admin should be able to view a list of property requests\n    And each request should display relevant details for review\n\nScenario: Admin reviews property request\n\n    Given the admin is viewing a property request on the admin page\n    When the admin reviews the details of the property request\n    Then the admin should have the option to accept or decline the request\n\nScenario: Admin accepts property request\n\n    Given the admin decides to accept a property request\n    Then the property associated with the request should be approved and posted on the website\n\nScenario: Admin declines property request\n\n    Given the admin decides to decline a property request\n    Then the property associated with the request should not be approved or posted on the website\n\n\u003ch3\u003eFeature: Lease Management\u003c/h3\u003e\n\nScenario: Property manager adds a new lease\n\n    Given a property manager is logged in\n    When the property manager adds a new lease for their property with start date, end date, rent, etc.\n    Then the new lease should be successfully added to the property\n\nScenario: Property manager updates an existing lease\n\n    Given a property manager is logged in\n    And there exists an existing lease for their property\n    When the property manager updates the lease with new details such as start date, end date, or rent\n    Then the lease should be successfully updated with the new information\n\nScenario: Property manager removes a lease\n\n    Given a property manager is logged in\n    And there exists an existing lease for their property\n    When the property manager removes the lease\n    Then the lease should be successfully removed from the property\n\nScenario: Tenant views property lease\n\n    Given a tenant is connected to a property\n    When the tenant views the property details\n    Then the tenant should be able to view the lease details for that property\n\n\u003ch3\u003eFeature: Announcements\u003c/h3\u003e\n\nScenario: Property manager adds a new announcement\n\n    Given a property manager is logged in\n    When the property manager adds a new announcement with a title and description\n    Then the new announcement should be successfully added for all tenants connected to their properties\n\nScenario: Property manager updates an existing announcement\n\n    Given a property manager is logged in\n    And there exists an existing announcement\n    When the property manager updates the announcement with new title and/or description\n    Then the announcement should be successfully updated for all tenants connected to their properties\n\nScenario: Property manager deletes an announcement\n\n    Given a property manager is logged in\n    And there exists an existing announcement\n    When the property manager deletes the announcement\n    Then the announcement should be successfully removed for all tenants connected to their properties\n\nScenario: Tenant views property announcements\n\n    Given a tenant is connected to a property\n    When the tenant views the property details\n    Then the tenant should be able to view the announcements posted by the property manager for that property\n\n\u003ch3\u003eFeature: Marketplace\u003c/h3\u003e\n\nScenario: Tenant posts an item for sale\n\n    Given a tenant with the role of tenant is logged in\n    When the tenant posts an item for sale in the marketplace with relevant details\n    Then the item should be successfully posted for other tenants to view\n\nScenario: Tenant views items for sale in the marketplace\n\n    Given a tenant with the role of tenant is logged in\n    When the tenant accesses the marketplace\n    Then the tenant should be able to view all items posted for sale by other tenants\n\nScenario: Tenant expresses interest in buying an item\n\n    Given a tenant with the role of tenant is logged in\n    And the tenant views an item they are interested in buying\n    When the tenant clicks on the item for more details\n    Then the tenant should be redirected to their mail application with the receiver set as the posting tenant's email address for further communication\n\n\u003ch3\u003eFeature: Violation Log System\u003c/h3\u003e\n\nScenario: Property manager logs a violation\n\n    Given a property manager is logged in\n    When the property manager logs a violation on their property with a description, intensity, and any associated monetary cost\n    Then the violation should be successfully added to the violation log for the property\n\nScenario: Tenant views violation log\n\n    Given a tenant is connected to a property\n    When the tenant views the property details\n    Then the tenant should be able to view the violation log for that property, including descriptions, intensity, and any associated monetary costs\n    \u003ch3\u003eFeature: Dashboard Analytics (Property Manager)\u003c/h3\u003e\n\n\u003ch3\u003eFeature: Dashboard Analytics (Property Manager)\u003c/h3\u003e\n\nScenario: Property manager views dashboard analytics\n\n    Given a property manager is logged in\n    When the property manager accesses their dashboard\n    Then the property manager should be able to see an overview of all related features, such as lease management, announcements, violation log, etc.\n    And clicking on each feature should allow the property manager to navigate to that specific feature for further details and actions\n\n\u003ch3\u003eFeature: Dashboard Analytics (Tenant)\u003c/h3\u003e\n\nScenario: Tenant views dashboard analytics\n\n    Given a tenant is logged in\n    When the tenant accesses their dashboard\n    Then the tenant should be able to see an overview of all related features, such as property details, marketplace, violation log, etc.\n    And clicking on each feature should allow the tenant to navigate to that specific feature for further details and actions\n\n## Dependency\n\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eDependency\u003c/th\u003e\n\u003cth\u003eVersion\u003c/th\u003e\n\u003cth\u003eUsage\u003c/th\u003e\n\u003cth\u003eLink\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eSpringBoot\u003c/td\u003e\n\u003ctd\u003e3.1.4\u003c/td\u003e\n\u003ctd\u003eJava Framework for REST APIs\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://spring.io/projects/spring-boot\"\u003eLink\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSpring Security\u003c/td\u003e\n\u003ctd\u003e3.1.4\u003c/td\u003e\n\u003ctd\u003eAuthentication and access-control framework\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://spring.io/projects/spring-security\"\u003eLink\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eLombok\u003c/td\u003e\n\u003ctd\u003e1.18.30\u003c/td\u003e\n\u003ctd\u003eAutogenerate getter setters in POJO classes.\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://projectlombok.org/\"\u003eLink\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMySQL Connector\u003c/td\u003e\n\u003ctd\u003e8.1.0\u003c/td\u003e\n\u003ctd\u003eConnects application to the MySQL\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://mvnrepository.com/artifact/mysql/mysql-connector-java\"\u003eLink\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJSON WebToken\u003c/td\u003e\n\u003ctd\u003e0.11.2\u003c/td\u003e\n\u003ctd\u003eGenerates JWTs in the application for authorization.\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-impl\"\u003eLink\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCloudinary\u003c/td\u003e\n\u003ctd\u003e1.34.0\u003c/td\u003e\n\u003ctd\u003eCloud storage and image/video manipulation service.\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://cloudinary.com/documentation/java_integration\"\u003eLink\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJUnit5\u003c/td\u003e\n\u003ctd\u003e5.9.2\u003c/td\u003e\n\u003ctd\u003eUnit testing of the modules.\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://junit.org/junit5/docs/current/user-guide/\"\u003eLink\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eThymeleaf\u003c/td\u003e\n\u003ctd\u003e3.1.4\u003c/td\u003e\n\u003ctd\u003eTemplating engine for HTML emails.\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://www.thymeleaf.org/\"\u003eLink\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJSON WebToken (jjwt-jackson)\u003c/td\u003e\n\u003ctd\u003e2.15.3\u003c/td\u003e\n\u003ctd\u003eGenerates JWTs in the application for authorization. \u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-jackson\"\u003eLink\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003chr /\u003e\n\n## Code Coverage\n\n![Static Badge](https://img.shields.io/badge/JUnit_Test_Cases-141-blue)\n![Static Badge](https://img.shields.io/badge/Class_Coverage-92%25-blue)\n![Static Badge](https://img.shields.io/badge/Method_Coverage-72%25-blue)\n![Static Badge](https://img.shields.io/badge/Line_Coverage-77%25-blue)\n\n\u003chr /\u003e\n\n## Our Contributors\n\nYash Walia  \n[LinkedIn](https://www.linkedin.com/in/yash-walia/)  \n[GitHub](https://github.com/ywalia01)\n\nRaj Patel  \n[LinkedIn](https://www.linkedin.com/in/raj-patel-160711244?utm_source=share\u0026utm_campaign=share_via\u0026utm_content=profile\u0026utm_medium=android_app)  \n[GitHub](https://github.com/rajkp10)\n\nKaushal Sapara  \n[LinkedIn](https://www.linkedin.com/in/sapara-kaushal/)  \n[GitHub](https://github.com/Kaushal0904)\n\nHarsh Maisuri  \n[LinkedIn](https://www.linkedin.com/in/harsh-maisuri-797b1616b/)  \n[GitHub](https://github.com/HarshMaisuri)\n\nYukta Gurnani  \n[LinkedIn](https://www.linkedin.com/in/yukta-gurnani-765b61213?utm_source=share\u0026utm_campaign=share_via\u0026utm_content=profile\u0026utm_medium=android_app)  \n[GitHub](https://github.com/Yukta-Gurnani)\n\n\u003chr /\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frajkp10%2Frentalsphere","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frajkp10%2Frentalsphere","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frajkp10%2Frentalsphere/lists"}