Skip to content

Latest commit

Β 

History

257 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

RentEase Portal - Property Rental Management System

Angular Version Spring Boot MongoDB Razorpay Cloudinary

RentEase Portal is a comprehensive, full-stack real estate platform engineered to automate property onboarding, lease contract signatures, automated invoice billing, online payment gateway settlement, and tenant maintenance ticketing. The system integrates a robust Spring Boot 3 REST API Engine (Java 21) with a highly responsive, standalone Angular 21 Web Application backed by a reactive NgRx global state store.


🌐 Live Demos & Deployment Links


πŸ“Œ Table of Contents

  1. Screenshots & User Interface Walkthrough
  2. Project Overview & Philosophy
  3. Full-Stack Architecture Topology
  4. Role-Based Feature Matrix
  5. Role-Based Use Case Diagrams
  6. Database Schema & ERD Overview
  7. Technology Stack & Rationales
  8. Detailed REST API Endpoints Summary
  9. Local Environment Setup & Configuration
  10. Detailed Documentation Modules
  11. Contact & Support

πŸ“Έ Screenshots & User Interface Walkthrough

Below are high-fidelity user interface previews demonstrating the application's key modules, designed with a premium HSL color palette, custom glassmorphism, responsive dashboard grids, and complete light/dark theme adaptation.

Main UI Preview

Preview

Looking for screenshots? Please check out the /docs/screenshots/ folder in this repository for complete visual steps. Click to expand the sections below to see previews of the Tenant and Landlord workspaces.

Click to expand: Tenant (Customer) Panel Walkthrough
  • Tenant Dashboard Overview: Comprehensive customer control panel displaying active rentals, quick navigation, and recent activities. Tenant Dashboard

  • Property Filter Catalog: Browse listings with real-time budget sliders, room filters, locality searches, and availability toggles. Property Catalog

  • Property Detail & Reviews: Extended descriptions, geographic details, photos, reviews, and average rating computations. Property Detail

  • Rental Application Form: Onboarding portal where applicants upload document proof (managed by Cloudinary) and state move-in preferences. Rental Application

  • My Applications Tracker: Real-time application tracker showing under-review, approved, or rejected statuses. My Applications

  • Digital Lease Canvas E-Signature: Interactive base64 canvas capture designed for tenants to read contract text and attach sign proof. Digital Lease Signing

  • Lease Agreement View: Digital lease contract terms, payment schedules, and verified signatures. Lease Agreement

  • Rent Transactions Ledger: Monthly ledger checking payment histories and triggering online Razorpay checkouts. Rent Ledger

  • Razorpay Payment Gateway: Secure modal payment checkout integration supporting card, UPI, and net banking options. Razorpay Payment

  • PDF Invoice Receipt: Custom generated styled PDF receipt file available for immediate download post-payment. Payment Receipt

  • Submit Maintenance Request: Reporting portal for issues with photograph attachments and urgency levels. Maintenance Request

  • Maintenance Ticket Tracking: Real-time status tracking for raised issues with administrative notes. Maintenance Ticket

  • Notification Alerts Center: Personal alert feed for application updates, rent invoices, and general announcements. Notification Center

Click to expand: Landlord / Admin Panel Walkthrough
  • Admin Dashboard & Analytics: High-level platform metrics showing revenue summaries, maintenance metrics, and listing counts. Admin Dashboard

  • Property Inventory Management: Listing creator, editor, status monitoring, and availability toggles. Property Inventory

  • Add / Edit Property Listing: Comprehensive property listing creator with photo uploads, amenities checklist, and pricing details. Add Property Listing

  • Tenant Applications Verification: Document inspector and status resolver to approve or reject rental requests. Application Review

  • Lease Agreements Generator: Custom lease contract generator to set terms, monthly rent, deposit, and condition clauses. Lease Generator

  • Tenant Registry & Directory: Database tracker of registered tenant profiles, contact details, and assigned properties. Tenant Directory

  • Rent Billing & Invoicing Management: Manual invoice creator, payment tracking, and ledger management for tenant accounts. Rent Management

  • Maintenance Issues Resolution: Dispatched contractor coordinator, ticket status updates, and note logger. Maintenance Management

  • System Broadcast & Announcements: Platform-wide messaging tool to dispatch system notifications and maintenance updates. System Broadcast


πŸ’‘ Project Overview

The project is architected around the core goal of eliminating operational bottlenecks in residential and commercial leasing. RentEase Portal provides a secure, fully automated path from a tenant's initial search query to moving in and settling rent bills.

πŸ›‘οΈ Key Architectural Security Features

1. Multi-Tenant / Multi-Landlord Isolation (Scenario 2)

  • Isolated Dashboards: Each Landlord/Admin manages only their own property listings, received rental applications, drafted leases, monthly invoices, and tenant maintenance tickets.
  • Strict Security Boundaries: Cross-landlord access is blocked at the database and service layers. For example, trying to view or mutate an application, lease, rent record, or maintenance request for a property owned by another landlord throws an AccessDeniedException (HTTP 403).
  • Dynamic Tenant-to-Landlord Mapping: Customer interfaces adapt dynamically to display the specific landlord's name, email, and signature across rental applications, digitally signed leases, and generated PDF invoice receipts instead of generic portal branding.

2. Guest Mode (Read-Only Exploration)

  • Zero-Credential Access: Users can explore both the Tenant and Landlord dashboards directly from the login/register forms using "Guest Customer" or "Guest Landlord" buttons.
  • Strict Mutation Interception: Guest accounts (identified by a "guest-" prefix) are restricted from write operations. Any attempt to post property, submit an application, sign a lease, create invoices, pay rents, file maintenance tickets, or modify profiles returns a block from the backend and triggers a premium global signup prompt modal on the frontend.
  • Ephemeral Uploads: Image uploads (properties, tickets, or signatures) during guest mode are converted directly to temporary client-rendered Base64 data URLs, completely bypassing third-party Cloudinary APIs.
  • Privacy-Enhanced Directories: Tenant listings in the guest admin panel are filtered, showing only other guest profiles to prevent exposure of real customer credentials.

πŸ”„ Architecture Topology

The application utilizes a classic Spring 3-Tier Layered Architecture (Controller -> Service -> Repository) coupled with custom Servlet security filters and third-party SaaS engines on the backend, communicating with an Angular 21 Single Page Application via REST.

graph TD
    classDef client fill:#38bdf8,stroke:#0369a1,stroke-width:2px,color:#0f172a;
    classDef gateway fill:#a78bfa,stroke:#6d28d9,stroke-width:2px,color:#0f172a;
    classDef security fill:#fb7185,stroke:#be123c,stroke-width:2px,color:#0f172a;
    classDef logic fill:#34d399,stroke:#047857,stroke-width:2px,color:#0f172a;
    classDef db fill:#facc15,stroke:#a16207,stroke-width:2px,color:#0f172a;
    classDef external fill:#f472b6,stroke:#be185d,stroke-width:2px,color:#0f172a;

    A[Client Web App / Angular SPA]:::client -->|HTTP Request| B(API Entrypoint / Port 8080):::gateway
    B --> C{Security Context Filter}:::security
    C -->|Bearer JWT Validated| D[Protected REST Controllers]:::logic
    C -->|Public / Open Routes| E[Public REST Controllers]:::logic
    
    D --> F[Business Service Layer]:::logic
    E --> F
    
    F --> G[(MongoDB Database Store)]:::db
    F --> H[Cloudinary CDN API]:::external
    F --> I[Razorpay Payment API]:::external
    F --> J[OpenPDF Printing Engine]:::external
Loading

🏒 Role-Based Feature Matrix

The platform dynamically adjusts UI capabilities based on active JSON Web Token roles.

Feature Module Guest User Tenant (Customer) Landlord / Admin
Interactive Landing Page Read Only View & Navigate Dashboard Access
Property Directory Catalog Browse / Filter Search / Add to Wishlist Full Inventory Control
Property Review Ratings Read Reviews Write & Submit Reviews Delete / Audit Reviews
Authentication & Registration Create Account Read Profile Details Audit Registered Tenants
Rental Application Submission ✘ Submit Forms & Income Proof Approve / Reject Applications
Digital Lease Contracts ✘ Read & Sign on Canvas Pad Create / Edit Agreement Terms
Online Rent Payments ✘ Razorpay Payments & Mock View Ledger / Create Bills
PDF Invoices Download ✘ Download Invoice PDFs Track and Audit Payments
Maintenance Tickets ✘ Raise Tickets & Upload photos Update Status & Add notes
Notification Center ✘ Read personal alerts Receive system-wide alerts
Admin Stats & Charts ✘ View personal expenses Revenue & maintenance graphs

πŸ‘₯ Role-Based Use Case Diagrams

The following diagrams illustrate system capabilities separated by role to ensure clean, readable layout structures:

Guest User Use Cases

flowchart TD
    Guest[πŸ‘€ Guest User] -->|Explore| Landing["Landing Page / Hero Section"]
    Guest -->|Browse| Search["Property Catalog & Advanced Filters"]
    Guest -->|Register & Login| Auth["Authentication & Registration Module"]
    Guest -->|One-Click Entry| GuestDashboard["Dashboard (Guest Customer / Landlord)"]
Loading

Tenant (Customer) Use Cases

flowchart TD
    Customer[πŸ”‘ Authenticated Tenant] -->|Apply| AppSubmit["Submit Rental Application"]
    Customer -->|Review & Sign| LeaseSign["E-Signature on Lease Canvas"]
    Customer -->|Pay Bills| PayRent["Razorpay Online Rent Checkout"]
    Customer -->|Report Problems| MainReq["Raise Maintenance Ticket"]
    Customer -->|Read Alerts| Alerts["Notifications Center"]
    Customer -->|Preferences| Profile["Manage Profile & Wishlist"]
Loading

Landlord / Admin Use Cases

flowchart TD
    Admin[🏒 Administrator / Landlord] -->|Monitor| AdminDash["Analytics & Revenue Graphs"]
    Admin -->|Control Listings| PropertyCRUD["Property Listings CRUD"]
    Admin -->|Verify Docs| AppAudit["Approve/Reject Applications"]
    Admin -->|Draft Leases| LeaseGen["Generate Lease Agreements"]
    Admin -->|Invoice Management| RentBill["Create/Manage Rent Invoices"]
    Admin -->|Dispatch Repairs| ResolveMain["Update Maintenance Tickets"]
Loading

πŸ—„οΈ Database Schema & ERD Overview

The database structure is document-oriented (MongoDB), mapping to the following schemas:

erDiagram
    USER {
        string id PK
        string name
        string email
        string password
        string role "customer | admin"
        string phone
        string city
        list preferredLocations
        int budgetMin
        int budgetMax
        string createdAt
        boolean emailAlerts
        boolean smsAlerts
        set wishlist "propertyIds"
    }

    PROPERTY {
        string id PK
        string title
        string city
        string locality
        string type
        int bedrooms
        int bathrooms
        double rent
        double deposit
        string furnishing
        boolean available
        string availableFrom
        int area
        string description
        list amenities
        list images
        string ownerId FK
        string ownerName
        string postedAt
        double averageRating
        int totalReviews
    }

    REVIEW {
        string id PK
        string propertyId FK
        string userId FK
        string userName
        int rating
        string comment
        string createdAt
    }

    RENTAL_APPLICATION {
        string id PK
        string applicantName
        string applicantEmail
        string applicantPhone
        string moveInDate
        double monthlyIncome
        int occupants
        string message
        string propertyId FK
        string customerId FK
        list documents
        string status "under_review | approved | rejected"
        string appliedAt
    }

    LEASE {
        string id PK
        string applicationId FK
        string propertyId FK
        string tenantId FK
        string landlordName
        string startDate
        string endDate
        double monthlyRent
        double deposit
        string status "pending_signature | active | terminated"
        string conditions
        string propertyTitle
        string signatureImage "base64"
        string contractText
        string createdAt
    }

    RENT {
        string id PK
        string leaseId FK
        string tenantId FK
        string month "e.g., June 2026"
        double amount
        string dueDate
        string paidDate
        string status "pending | paid | overdue"
        string transactionId
        string razorpayOrderId
        string razorpayPaymentId
        string razorpaySignature
    }

    MAINTENANCE_REQUEST {
        string id PK
        string category
        string description
        string urgency "low | medium | high | emergency"
        string propertyId FK
        string tenantId FK
        string status "raised | in progress | resolved"
        string raisedAt
        string resolvedAt
        string adminNote
        list images
    }

    NOTIFICATION {
        string id PK
        string userId FK
        string title
        string message
        string type "success | info | warning | alert | error"
        boolean isRead
        string createdAt
    }

    USER ||--o{ PROPERTY : "owns"
    USER ||--o{ REVIEW : "writes"
    USER ||--o{ RENTAL_APPLICATION : "submits"
    USER ||--o{ LEASE : "enters"
    USER ||--o{ RENT : "settles"
    USER ||--o{ MAINTENANCE_REQUEST : "reports"
    USER ||--o{ NOTIFICATION : "receives"
    PROPERTY ||--o{ REVIEW : "hosts"
    PROPERTY ||--o{ RENTAL_APPLICATION : "receives"
    PROPERTY ||--o{ LEASE : "binds"
    RENTAL_APPLICATION ||--o| LEASE : "converts_to"
    LEASE ||--o{ RENT : "invoices"
Loading

πŸ› οΈ Technology Stack & Rationales

Frontend Technology Stack

Library/Framework Version Purpose Rationale
Angular 21 21.2.0 Core Web Architecture Standalone elements, fast change detection, and native route structures.
NgRx Store/Effects 21.1.1 Global State Container Unified event loops for clean, predictable page modifications.
TypeScript 5.9 Strongly Typed Script Reduces runtime object errors and provides seamless type validation.
ngx-sonner 3.1.0 Alert Notification Toasts Highly responsive visual messages without blocking UI interactions.
CSS Standard Visual Design Maximum control over HSL tokens, animations, and custom theme switches.
Vitest 4.0.8 Component Testing runner Sub-second testing execution speeds compared to standard Karma/Jasmine.

Backend Technology Stack

Library/Framework Version Purpose Rationale
Java Platform 21 (LTS) Runtime Environment High concurrency handling with virtual threads, pattern matching, and record models.
Spring Boot 4.1.0 REST API Server Engine Configures MVC servlet bindings, dependency injection, and automatic configuration mapping.
Spring Security Included Authorization & Filter Pipelines Handles CORS permissions, CSRF blocks, and parses incoming stateless JWT tokens.
MongoDB Driver Included NoSQL Database Client High performance data retrieval with flexible schemas.
JJWT (JJWT-API) 0.13.0 Token Sign & Parse Standardized cryptographic claims verification for secure API route controls.
Razorpay Java SDK 1.4.8 Payment Gateway Adapter Integrates checkout processing and calculates signature checksum verifications.
Cloudinary SDK 2.4.0 Image Storage CDN Dynamic asset uploads, CDN file mapping, and custom sizing features.
OpenPDF 3.0.5 Document PDF Drawer Programmatic layout designer rendering styled transactional PDF invoice sheets.
Lombok Runtime Compile-Time Boilerplate Automatically generates constructors, getter methods, and builder patterns.
SpringDoc OpenApi 2.8.5 Swagger UI Document Generator Generates dynamic endpoint documentation pages and interactive execution testers.

Detailed REST API Endpoints Summary

Authentication Module (/auth)

HTTP Method API Path Access Role Description
POST /auth/register Public / Anonymous Creates a new user profile inside database (defaults as customer).
POST /auth/login Public / Anonymous Validates password matching and issues client JWT tokens.

User Module (/users)

HTTP Method API Path Access Role Description
GET /users ADMIN only Retrieves a list of users filtered by query param role.
GET /users/{id} Account Owner / ADMIN Retrieves specific profile properties excluding credential hash.
PATCH /users/{id} Account Owner only Partially updates settings, preferred locations, or alerts preferences.
POST /users/{userId}/wishlist/{propertyId} Account Owner only Appends a property item to the user's saved wishlist set.
DELETE /users/{userId}/wishlist/{propertyId} Account Owner only Removes a property item from the user's saved wishlist set.

Property Module (/properties)

HTTP Method API Path Access Role Description
GET /properties Public / Anonymous Searches properties using query filters (min/max budget, city, type).
GET /properties/{id} Public / Anonymous Retrieves specific details of a property listing.
POST /properties ADMIN only Inserts a new real estate inventory post with image endpoints.
PATCH /properties/{id} ADMIN only Updates specifications, prices, availability, or images.
DELETE /properties/{id} ADMIN only Purges a property listing record from database.
GET /properties/{id}/reviews Public / Anonymous Fetches reviews and rating grades for the property.
POST /properties/{id}/reviews Authenticated Users Inserts a new review rating and triggers property average recalculation.

Rental Application Module (/applications)

HTTP Method API Path Access Role Description
GET /applications Authenticated Users Lists applications filtered by customerId (tenant view) or propertyId (admin view).
GET /applications/{id} Authenticated Users Retrieves detailed application variables.
POST /applications Authenticated Users Submits a new tenancy application, flagging status as under_review.
PATCH /applications/{id} ADMIN only Updates status (approved / rejected). Automatically toggles property availability.
DELETE /applications/{id} Authenticated Users Deletes application records.

Leases Module (/leases)

HTTP Method API Path Access Role Description
GET /leases Authenticated Users Retrieves active/pending leases filtered by tenantId.
GET /leases/{id} Authenticated Users Fetches contract text, signature files, and dates.
POST /leases ADMIN only Drafts a lease agreement based on an approved application.
PATCH /leases/{id} ADMIN only Modifies conditions, dates, or lease terms.
POST /leases/{id}/sign Lease Tenant only Appends a base64 signature image, updates status to active, and bills rent.

Rent & Billing Module (/rents)

HTTP Method API Path Access Role Description
GET /rents Authenticated Users Returns a list of rent invoices filtered by tenantId and status.
POST /rents ADMIN / System Creates a manual rent invoice.
PATCH /rents/{id} ADMIN / System Modifies rent invoice amounts, dates, or status fields.
POST /rents/{id}/pay Authenticated Tenant Quick mock payment endpoint flagging rents as paid and creating dummy TXN- logs.
POST /rents/{id}/order Authenticated Tenant Binds a Razorpay transaction order ID to the rent billing record.
POST /rents/{id}/verify Authenticated Tenant Validates HMAC-SHA-256 signatures from Razorpay and marks status as paid.
GET /rents/{id}/invoice Authenticated Tenant Generates and downloads a custom styled PDF receipt file.

Maintenance Module (/maintenanceRequests)

HTTP Method API Path Access Role Description
GET /maintenanceRequests Authenticated Users Returns maintenance tickets filtered by tenantId.
POST /maintenanceRequests Authenticated Tenant Files a ticket with attachments (photos), categorizing the issue.
PATCH /maintenanceRequests/{id} ADMIN only Resolves tickets, updates status, and appends admin resolution notes.

Notifications Module (/notifications)

HTTP Method API Path Access Role Description
GET /notifications Authenticated Users Fetches system notifications matching the user ID.
POST /notifications System / ADMIN Dispatches new warning/alert objects.
PATCH /notifications/{id} Authenticated Users Toggles notification status from unread to read (isRead = true).

Media Upload Module (/upload)

HTTP Method API Path Access Role Description
POST /upload Authenticated Users Uploads files to Cloudinary and returns a secure image/file CDN URL.

Analytics Module (/analytics)

HTTP Method API Path Access Role Description
GET /analytics/admin ADMIN only Returns portal metrics (revenues, properties, maintenance, active tenants).
GET /analytics/customer/{userId} User / ADMIN Returns tenant stats (total paid, active leases, complaints, expenses).

Local Environment Setup & Configuration

Parent Workspace Setup (.env)

The project is configured to read credential imports directly from a parent folder configuration. In the root workspace directory (parent folder of both backend and frontend projects), create a .env file containing the environment settings shown below:

# System Server Port
PORT=8080

# Database Bindings
MONGODB_URI=mongodb://localhost:27017
MONGODB_DATABASE=rental_portal

# JSON Web Token Secret (Provide a secure string at least 256 bits long)
SECURITY_JWT_SECRET=YourStrongAndSecure256BitSecretKeyHereMustBeLongEnough
JWT_EXPIRATION_MS=86400000

# Cloudinary CDN Configuration (Optional: Empty fallback triggers mock Unsplash images)
CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secret

# Razorpay Payment Gateway Keys (Use test keys for development)
RAZORPAY_KEY_ID=rzp_test_YourKeyIdHere
RAZORPAY_KEY_SECRET=YourRazorpayKeySecretHere

# Multipart Files Constraints
MAX_FILE_SIZE=10MB
MAX_REQUEST_SIZE=10MB

# CORS Allowed Client Domain (Matches your frontend development URL)
FRONTEND_URL=http://localhost:4200

🐳 Setup Option A: Unified Containerized Setup (Docker Compose - Recommended)

You can build and spin up the database, backend services, and frontend client in a single command.

Ensure you have created the parent .env file and installed Docker, then execute the following in the root workspace folder:

# Build and launch all services in the background
docker-compose up -d --build

This starts the following:

  • MongoDB Container: Exposed on port 27017 with persistent volume mappings.
  • Spring Boot API Backend: Running on host port 8080.
  • Angular Web App: Running on host port 4200.

πŸ› οΈ Setup Option B: Manual Local Setup (Step-by-Step)

1. Backend Service Setup

Prerequisites
  • JDK 21 or later installed.
  • Apache Maven 3.8+ (or use the included ./mvnw script wrapper).
  • MongoDB instance running locally on port 27017 (or Atlas cloud link).
Database Launch (Fast Docker option)

To run a local MongoDB container in the background, navigate to the parent workspace and run:

docker run -d -p 27017:27017 --name local-mongo mongo:latest
Build and Start Backend

Navigate to the backend module folder:

cd rental-portal-backend

Run using the Maven Wrapper:

# Windows
mvnw.cmd spring-boot:run

# Linux / MacOS
./mvnw spring-boot:run

On start, the backend console prints a confirmation log validating the database link:

=================================================
Validating MongoDB connection...
MongoDB Connection Status: SUCCESSFUL!
=================================================

The server will boot on port 8080.

2. Frontend Web App Setup

Prerequisites
  • Node.js v20+ or v22+ installed.
  • npm (comes packaged with Node).
Install Dependencies & Start

Navigate to the frontend module folder:

cd rental-portal-frontend
npm install

Start the local webpack development server:

npm start

The application compiles and runs on http://localhost:4200. (Communicates with the backend API target configured in src/app/core/global/api-service.ts).


πŸ“ Detailed Documentation Modules

For module-specific architecture summaries, component breakdowns, dependencies configurations, and execution guides, explore the sub-project documentation modules:

  • Backend API Engine Documentation: See README.md
  • Frontend Web Client Documentation: See README.md

πŸ™Œ Contributing

Contributions are welcome! If you have suggestions or want to fix bugs, feel free to open a Pull Request.

πŸ”— Contact & Support



Made with ❀️ by Saksham Agrahari

About

A full-stack Property Rental and Tenant Management Portal built with Angular and Spring Boot, featuring role-based access for administrators and tenants. It supports property management, tenant onboarding, lease tracking, rent payments, maintenance requests, secure authentication, and many more rental management features.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages