Portfolio
Loading Shiham's portfolio
Preparing the latest projects, skills, and contact paths with a quiet production-ready polish.
Initializing portfolio
Projects · Skills · Contact
Portfolio
Preparing the latest projects, skills, and contact paths with a quiet production-ready polish.
Initializing portfolio
Projects · Skills · Contact
Apartment rental web application for renters to explore property listings, save favourites, contact the platform, and manage accounts through a PHP/MySQL system.
City Nest was built by a four-person team as a learning-focused PHP and MySQL apartment rental application for people comparing available homes. It presents prices, locations, bedroom and bathroom counts, floor area, furnishing status, images, and direct WhatsApp contact links. The project demonstrates end-to-end web development with database-backed content and account workflows.
Visitors can browse listings and open detailed property views. Registered users can sign in, save or remove apartments from a persistent wishlist, submit contact messages, and log out. A separate admin area supports viewing and deleting messages, creating, editing, and deleting listing records, and viewing or removing registered users.
The implementation uses page-oriented procedural PHP: PHP pages render HTML and issue MySQLi queries through a shared database connection, while dedicated process scripts handle form submissions and redirects. Session data stores the signed-in email, and vanilla JavaScript provides client-side form validation, an edit modal, and delete confirmations.
Related projects
Jan 2026 – Jun 2026
A multi-vendor commerce platform connecting buyers, sellers, and administrators through dedicated storefronts, dashboards, payments, chat, and personalized discovery.
City Nest is a page-oriented procedural PHP application that combines server-rendered HTML with direct MySQLi database access through a shared config file. Form-processing scripts perform CRUD operations and redirects, while sessions track the signed-in email and client-side JavaScript handles validation and UI interactions.
City Nest is a web-based apartment rental platform developed as a university project during my 2nd Year 1st Semester in April 2025. The system allows users to browse apartment listings, view detailed property information, save apartments to a wishlist, contact the platform, and manage user sessions through login and registration.
The project also includes an admin section where the admin can manage apartment listings, view contact messages, add new listings, edit existing listings, delete listings, and manage registered users.
City Nest is designed to make apartment searching simple and convenient. Users can explore available apartments with details such as price, location, number of bedrooms, bathrooms, furnished status, area, images, and WhatsApp contact links.
The platform includes two main user roles:
Normal Users
Admin
src/
│
├── images/
│ ├── heroBanner.png
│ ├── aboutCover.jpg
│ ├── aboutUs.jpg
│ ├── img1.jpg
│ ├── img1_1.jpg
│ ├── img1_2.jpg
│ └── ...
│
├── js/
│ ├── contact.js
│ ├── editListingAdmin.js
│ ├── mangeUser.js
│ ├── message.js
│ ├── register.js
│ └── wishlist.js
│
├── styles/
│ ├── about.css
│ ├── addListingAdmin.css
│ ├── adminheader.css
│ ├── apartment.css
│ ├── contact.css
│ ├── footer.css
│ ├── header.css
│ ├── home.css
│ ├── login.css
│ ├── manageListingAdmin.css
│ ├── manageUserAdmin.css
│ ├── messageAdmin.css
│ ├── overView.css
│ ├── register.css
│ ├── termsAndCondition.css
│ └── wishList.css
│
├── about.php
├── addListingAdmin.php
├── addListing_process.php
├── apartments.php
├── config.php
├── contact.php
├── contact_process.php
├── deleteListing_process.php
├── deleteMessage_process.php
├── deleteUser_process.php
├── deleteWishList_process.php
├── editListing_process.php
├── home.php
├── login.html
├── login_process.php
├── logoff.php
├── manageListingAdmin.php
├── manageUserAdmin.php
├── messageAdmin.php
├── overView.php
├── register.html
├── register_process.php
├── termsAndCondition.php
├── wishList.php
├── wishList_processApartments.php
├── wishList_processHome.php
└── wishList_processOverview.php
The project uses the following database tables:
registered_userStores normal user account details.
| Column | Description |
|---|---|
user_id | Unique user ID |
password | User password |
email | User email |
f_name | User first name |
l_name | User last name |
apartmentStores main apartment listing information.
| Column | Description |
|---|---|
apartment_id | Unique apartment ID |
title | Apartment title |
discription | Apartment description |
no_of_bedrooms | Number of bedrooms |
no_of_bathroom | Number of bathrooms |
area | Apartment area in square feet |
furnished_status | Furnished status |
apart_address | Apartment address |
apartment_imagesStores additional apartment images.
| Column | Description |
|---|---|
id | Unique image record ID |
apartment_id | Related apartment ID |
images | Image file name |
messageStores contact form messages.
| Column | Description |
|---|---|
message_id | Unique message ID |
name | Sender name |
phone_no | Sender phone number |
email | Sender email |
message | Message content |
wishlistStores user wishlist items.
| Column | Description |
|---|---|
wishlist_id | Unique wishlist item ID |
email | User email |
apartment_id | Saved apartment ID |
Before running this project, install the following:
git clone <your-repository-url>
Or download the project as a ZIP file from GitHub and extract it.
htdocsCopy the project folder into the XAMPP htdocs directory.
Example:
C:\xampp\htdocs\citynest
Your folder should look like this:
C:\xampp\htdocs\citynest\home.php
C:\xampp\htdocs\citynest\config.php
C:\xampp\htdocs\citynest\login.html
C:\xampp\htdocs\citynest\images\
C:\xampp\htdocs\citynest\styles\
If your folder name is src, the path may look like:
C:\xampp\htdocs\src
Open XAMPP Control Panel and start:
Apache
MySQL
In this project setup, MySQL is running on port:
3307
Open MySQL Workbench or phpMyAdmin.
Create a database named:
test
Then select the database:
USE test;
Run the following SQL query in MySQL Workbench or phpMyAdmin:
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE IF NOT EXISTS registered_user (
user_id INT AUTO_INCREMENT PRIMARY KEY,
password VARCHAR(255) NOT NULL,
email VARCHAR(150) NOT NULL UNIQUE,
f_name VARCHAR(100) NOT NULL,
l_name VARCHAR(100) NOT NULL
);
CREATE TABLE IF NOT EXISTS apartment (
apartment_id VARCHAR(50) PRIMARY KEY,
title VARCHAR(255) NOT NULL,
discription TEXT NOT NULL,
no_of_bedrooms INT,
no_of_bathroom INT,
area INT,
furnished_status VARCHAR(50),
apart_address VARCHAR(255),
price DECIMAL(12,2),
whatsappLink VARCHAR(255),
thumbnail VARCHAR(255)
);
CREATE TABLE IF NOT EXISTS apartment_images (
id INT AUTO_INCREMENT PRIMARY KEY,
apartment_id VARCHAR(50) NOT NULL,
images VARCHAR(255) NOT NULL,
FOREIGN KEY (apartment_id) REFERENCES apartment(apartment_id)
ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS message (
message_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(150) NOT NULL,
phone_no VARCHAR(50),
email VARCHAR(150),
message TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS wishlist (
wishlist_id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(150) NOT NULL,
apartment_id VARCHAR(50) NOT NULL,
FOREIGN KEY (apartment_id) REFERENCES apartment(apartment_id)
ON DELETE CASCADE
);
The database connection is configured inside config.php.
Current configuration:
<?php
$server = "localhost";
$un = "root";
$pw = "";
$db = "test";
$port = 3307;
$con = new mysqli($server, $un, $pw, $db, $port);
if ($con->connect_error) {
die("Connection Failed: " . $con->connect_error);
}
?>
If your MySQL server is running on port 3306, change this line:
$port = 3307;
to:
$port = 3306;
For XAMPP MySQL running on port 3307, keep it as:
$port = 3307;
After starting Apache and MySQL in XAMPP, open the project in your browser.
If your folder name is citynest, use:
http://localhost/citynest/home.php
If your folder name is src, use:
http://localhost/src/home.php
| Page | URL |
|---|---|
| Home | home.php |
| Apartments | apartments.php |
| Apartment Details | overView.php?id=APT001 |
| About | about.php |
| Contact | contact.php |
| Login | login.html |
| Register | register.html |
| Wishlist | wishList.php |
| Terms and Conditions |
| Page | URL |
|---|---|
| Admin Messages | messageAdmin.php |
| Manage Listings | manageListingAdmin.php |
| Add Listing | addListingAdmin.php |
| Manage Users | manageUserAdmin.php |
Email: admin@citynest.com
Password: 123
The admin login is hardcoded inside login_process.php.
If sample users are inserted into the database, you can login with:
Email: amaya.silva@gmail.com
Password: user123
or
Email: kasun.jayasinghe@gmail.com
Password: user123
Normal users can also create an account from the registration page.
For demonstration purposes, sample apartments, users, messages, and wishlist records can be inserted into the database. The project already includes apartment images inside the images folder, so sample apartment records should use image file names such as:
img1.jpg
img1_1.jpg
img1_2.jpg
img1_3.jpg
img1_4.jpg
img2.jpg
img2_1.jpg
...
img10.jpg
This makes the apartment listing pages look complete during a demonstration.
This project was created as an academic project and demonstrates the basic concepts of a PHP and MySQL web application.
The project currently uses:
This project was developed for learning and academic demonstration purposes. Some areas can be improved before using it as a real production system.
Current limitations include:
Possible improvements for future development:
password_hash()Before using this project in a real environment, the following security improvements are recommended:
This project was developed as part of a university assignment to practice web development using PHP, MySQL, HTML, CSS, and JavaScript. It helped improve understanding of:
Developed by Shiham Ahamed
This project is for educational purposes. You may modify and improve it for learning, portfolio, or academic demonstration use.
The case-study preview is collapsed. Activate the button to make the full content available.
Aug 2025 – Oct 2025
A marketplace for verified Sri Lankan homestays, supporting guest bookings, host onboarding, admin approval, and test-mode payments.
Oct 2025 – Nov 2025
A full-stack developer Q&A platform where programmers can ask, answer, vote, save questions, explore tags, and generate AI-assisted responses.
price |
| Monthly rental price |
whatsappLink | WhatsApp contact link |
thumbnail | Main apartment image |
termsAndCondition.php |