Back to Projects
Personal Project

House Rent Management System

JavaFX Desktop Application — Built End-to-End for a Real User

A complete offline Windows desktop application for rental property management. Built from real-world requirements, covering tenants, flats, monthly rent collection, PDF receipt generation, repair logs, audit trails, and full installer packaging — demonstrating both development depth and QA mindset.

JavaFX + SQLite
Windows Desktop App
Personal Project
Installer Packaged

Project Overview

This project was built to solve a real problem: a family property owner managing multiple flats needed a simple, offline-capable tool to replace their manual spreadsheet-based records. There was no internet requirement, no cloud dependency — just a reliable desktop app that works every time.

Building this end-to-end — from requirements gathering through to a packaged Windows installer — gave me direct experience with the full software development lifecycle. As a QA engineer, this project sharpened my understanding of how software is built, which makes me a more effective tester when evaluating requirements, edge cases, and failure modes.

Features Built

Flat Management

Add, edit, and deactivate flats. Track flat numbers, floor, type, monthly rent, status (occupied/vacant), and associated amenities.

Tenant Management

Full tenant profiles: NID number, contact, emergency contact, move-in date, advance/deposit amounts, and tenancy documents reference.

Rent Collection

Monthly rent recording with due date, payment date, amount paid, outstanding balance, and payment method (cash/bKash/bank).

PDF Receipt Generation

Automated A5/A4 rent receipts generated using Apache PDFBox — formatted, printable, with landlord name, tenant details, and payment breakdown.

Repair & Maintenance Log

Track repair requests by flat — description, date reported, contractor, cost, status (pending/in-progress/resolved) with photo attachment support.

Move-out Settlement

Calculate final settlement on tenant departure: outstanding rent, advance deductions, utility dues, and damage charges with PDF summary.

Excel Export

Export tenant and payment records to Excel sheets using Apache POI — monthly summaries and full history exports for external record keeping.

Audit Log & Backup

Every data modification is time-stamped in an audit log. One-click SQLite database backup to a chosen directory with date-stamped filename.

Technical Decisions

01

JavaFX for UI

Chosen over Swing for its modern FXML-based UI separation, CSS styling capability, and superior look. Scene Builder was used for layout design, keeping UI and logic cleanly separated.

02

SQLite for Storage

A single-file embedded database — no server setup, no network dependency. Perfect for a single-user offline desktop app. JDBC connectivity via the SQLite JDBC driver.

03

Apache PDFBox for Receipts

PDFBox was chosen over iText due to its open-source Apache 2.0 license. Custom A5 layout built with PDFBox's PDPageContentStream API.

04

Maven for Build Management

All dependencies managed via pom.xml. Maven Shade plugin used to produce a fat JAR with all dependencies bundled for distribution.

05

Inno Setup for Windows Installer

The final application was packaged into a Windows .exe installer using Inno Setup — includes JRE bundling so the user does not need Java pre-installed.

QA Perspective

Building this application end-to-end gave me direct insight into where software breaks from a developer's point of view — which has made me a significantly sharper manual QA tester:

Boundary Awareness

I know exactly what happens when a rent amount field receives alphabetic input, or when a date picker receives a past date — because I had to handle those edge cases in code.

Database Integrity

Designing foreign key relationships and cascade behaviours gave me deep understanding of data consistency bugs — what to look for when testing CRUD-heavy applications.

Packaging & Install Testing

Distributing a packaged installer taught me to think about environment-specific failures — missing runtime dependencies, file permission issues, and first-run configuration errors.

Real User Feedback

The app was used by a real end-user, which produced genuine usability feedback — a practical lesson in the difference between what passes a test and what actually works for a person.