**A comprehensive, high-performance real estate listing and team management portal powered by Django and Python.**
[](https://www.djangoproject.com/)
[](https://www.python.org/)
[](https://www.sqlite.org/)
[](https://www.postgresql.org/)
[](https://getbootstrap.com/)
[](LICENSE)
*Designed to manage agents, properties, team units, and clients with a custom-themed admin center and lightweight responsive frontend.*
[Features](#-features) โข [Installation](#-installation) โข [Configuration](#-configuration) โข [Database Setup](#%EF%B8%8F-database-migrations) โข [Architecture](#%EF%B8%8F-architecture-diagram) โข [Visual Showcase](#%EF%B8%8F-adding-images)
---
## ๐ Table of Contents
- [๐ฏ Project Overview](#-project-overview)
- [โจ Features](#-features)
- [๐ Installation](#-installation)
- [โ๏ธ Configuration](#-configuration)
- [๐๏ธ Database Migrations](#%EF%B8%8F-database-migrations)
- [โถ๏ธ Running the Project](#%EF%B8%8F-running-the-project)
- [๐ฆ Static & Media Files](#-static--media-files)
- [๐จโ๐ผ Admin Panel](#-admin-panel)
- [๐งช Testing](#-testing)
- [๐ผ๏ธ Visual Showcase](#%EF%B8%8F-adding-images)
- [๐๏ธ System Architecture](#%EF%B8%8F-architecture-diagram)
- [๐ค Contributing](#-contributing)
- [๐ License](#-license)
---
## ๐ฏ Project Overview
**hometri.com** is a scalable, Django-based real estate hub designed for modern agencies, housing networks, and property managers. By dividing core features into dedicated modular sub-apps (agents, team, users, and hometri core), it maintains a highly decoupled code structure. It offers rich CRUD capabilities for listing properties, maintaining team directories, hosting interactive search bars, and serving customized dashboard controls for internal admins.
> **Built for**: Real estate agencies, property management companies, and housing platforms
>
> **Tech Stack**: Django, Python, SQLite/PostgreSQL, Bootstrap
---
## โจ Features
- ๐งฑ **Decoupled Architecture**: Features clean app modularity divided into `agents`, `team`, `users`, and `hometri`.
- ๐ **Advanced Property Search**: Dynamic filtering for listings matching user preferences.
- ๐๏ธ **Bespoke Admin Workspace**: High-efficiency overrides and stylesheets located inside `hometri/templates/admin/`.
- ๐ **Production-Ready File Handlers**: Auto-organized local static pipeline and media uploads for high-resolution property imagery.
- ๐จ **Mobile-First Client UI**: Modern, sleek frontend interfaces powered by responsive Bootstrap layouts.
- ๐๏ธ **Multi-DBMS Compatibility**: Support for SQLite out of the box with drop-in configs for PostgreSQL production setups.
---
## ๐ Installation
### Prerequisites
- Python 3.8 or higher
- pip (Python package manager)
- Virtual environment (recommended)
- PostgreSQL (optional, for production)
### Step-by-Step Setup
**1๏ธโฃ Clone the repository:**
```bash
git clone https://github.com/spyberpolymath/hometri.com.git
cd hometri.com
```
**2๏ธโฃ Create and activate a virtual environment:**
```bash
# Windows
python -m venv venv
venv\Scripts\activate
# Linux/Mac
python -m venv venv
source venv/bin/activate
```
**3๏ธโฃ Install dependencies:**
```bash
pip install -r requirements.txt
```
> [!TIP]
> Always verify that your virtual environment is actively running in your shell before initiating `pip install` to prevent system-wide package pollution.
---
## โ๏ธ Configuration
### Settings Configuration
Main settings are located in `server/settings.py`. Key configurations to update:
#### SQLite Configuration (Default - Development)
```python
# Database Configuration
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
```
#### PostgreSQL Configuration (Recommended - Production)
```python
# Database Configuration
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'hometri_db',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'localhost',
'PORT': '5432',
}
}
```
#### Other Key Settings
```python
# Allowed Hosts
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
# Static Files
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATIC_URL = '/static/'
# Media Files
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'
```
### Environment Variables
For production setups, secure credentials by keeping them in a `.env` file:
```bash
# Create a .env file
SECRET_KEY=your-secret-key-here
DEBUG=False
DATABASE_URL=postgresql://user:password@localhost:5432/hometri_db
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
```
> [!CAUTION]
> Never commit your environment configuration (`.env`) or any live secret keys into public source control repositories.
### PostgreSQL Setup
**Install PostgreSQL:**
```bash
# Ubuntu/Debian
sudo apt-get install postgresql postgresql-contrib
# macOS (using Homebrew)
brew install postgresql
# Windows
# Download installer from postgresql.org
```
**Create Database:**
```bash
# Access PostgreSQL
sudo -u postgres psql
# Create database and user
CREATE DATABASE hometri_db;
CREATE USER your_db_user WITH PASSWORD 'your_db_password';
GRANT ALL PRIVILEGES ON DATABASE hometri_db TO your_db_user;
\q
```
**Install psycopg2:**
```bash
pip install psycopg2-binary
```
---
## ๐๏ธ Database Migrations
Generate schemas and push model modifications using standard migration commands:
```bash
# Create migration files
python manage.py makemigrations
# Apply migrations to database
python manage.py migrate
```
### Migration Tips
- Run migrations after every model change
- Check migration status: `python manage.py showmigrations`
- Rollback if needed: `python manage.py migrate `
---
## โถ๏ธ Running the Project
Start the local web server:
```bash
python manage.py runserver
```
**๐ Access your application:**
- Main site: [http://127.0.0.1:8000/](http://127.0.0.1:8000/)
- Admin panel: [http://127.0.0.1:8000/admin/](http://127.0.0.1:8000/admin/)
### Custom Port
```bash
python manage.py runserver 8080
```
---
## ๐ฆ Static & Media Files
### Static Files Management
**Development:**
- Place static assets in `hometri/static/` or app-specific static folders.
- Django automatically serves them in DEBUG mode.
**Production:**
```bash
# Collect all static files
python manage.py collectstatic
```
Configuration in `settings.py`:
```python
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
STATICFILES_DIRS = [BASE_DIR / 'static']
```
### Bootstrap Integration
Bootstrap is loaded inside the base page layout template:
```html
```
---
## ๐จโ๐ผ Admin Panel
### Accessing the Admin Panel
**URL:** `/admin/`
### Create Superuser
```bash
python manage.py createsuperuser
```
---
## ๐งช Testing
### Run All Tests
```bash
python manage.py test
```
### Run Specific App Tests
```bash
python manage.py test agents
python manage.py test team
python manage.py test users
```
---
## ๐ผ๏ธ Adding Images
### ๐ธ Project Demo Overview

*Project demo overview*
---
### ๐ Home Page







---
### ๐ About Page







---
### ๐ง Admin Panel













---
### ๐ข Hometri Admin








---
### ๐ฅ Agents - Admin Side


















---
### ๐ฅ Agents - Client Side











---
### ๐ Contact - Admin Side




---
### ๐ Contact - Client Side



---
### ๐๏ธ Property - Admin Side






---
### ๐๏ธ Property - Client Side







---
### ๐ Search Functionality



---
### ๐ ๏ธ Services





---
### ๐จโ๐ฉโ๐งโ๐ฆ Team - Admin Side
















---
### ๐จโ๐ฉโ๐งโ๐ฆ Team - Client Side










---
## ๐๏ธ Architecture Diagram
```mermaid
%%{ init: { "theme": "neutral" } }%%
graph TD
A[๐ค User Request] --> B[๐ server/urls.py]
B --> C1[๐ agents/urls.py]
B --> C2[๐ hometri/urls.py]
B --> C3[๐ team/urls.py]
B --> C4[๐ users/urls.py]
C1 --> D1[๐ง agents/views.py]
C2 --> D2[๐ง hometri/views.py]
C3 --> D3[๐ง team/views.py]
C4 --> D4[๐ง users/views.py]
D1 --> E1[๐๏ธ agents/models.py]
D2 --> E2[๐๏ธ hometri/models.py]
D3 --> E3[๐๏ธ team/models.py]
D4 --> E4[๐๏ธ users/models.py]
E1 --> G1[(๐พ db.sqlite3)]
E2 --> G1
E3 --> G1
D4 --> G1
E1 --> G2[(๐ PostgreSQL)]
E2 --> G2
E3 --> G2
D4 --> G2
E1 --> F1[๐ผ๏ธ agents/templates/]
E2 --> F2[๐ผ๏ธ hometri/templates/]
E3 --> F3[๐ผ๏ธ team/templates/]
D4 --> F4[๐ผ๏ธ users/templates/]
B --> H1[๐ฆ static/]
B --> H2[๐๏ธ media/]
classDef urls fill:#E3F2FD,stroke:#2196F3,stroke-width:1px;
classDef views fill:#FFF3E0,stroke:#FF9800,stroke-width:1px;
classDef models fill:#E8F5E9,stroke:#4CAF50,stroke-width:1px;
classDef templates fill:#F3E5F5,stroke:#9C27B0,stroke-width:1px;
classDef database fill:#E0F7FA,stroke:#0288D1,stroke-width:2px;
classDef static fill:#ECEFF1,stroke:#607D8B;
classDef request fill:#FFEBEE,stroke:#D32F2F;
class A request;
class B,C1,C2,C3,C4 urls;
class D1,D2,D3,D4 views;
class E1,E2,E3,E4 models;
class F1,F2,F3,F4 templates;
class G1,G2 database;
class H1,H2 static;
```
---
## ๐ค Contributing
We welcome contributions! Here's how you can help:
### Contribution Workflow
1. **Fork the repository** on GitHub.
2. **Create a new feature branch** (`git checkout -b feature/your-feature-name`).
3. **Commit your changes** ensuring PEP 8 compliance.
4. **Push to your branch** (`git push origin feature/your-feature-name`).
5. **Open a Pull Request** describing your work.
---
## ๐ License
This project is licensed under the terms of the [LICENSE](LICENSE) file.
---
## ๐จโ๐ป Author
**๐จโ๐ป Aman Anil** (aka **SpyberPolymath**)
*Crafting digital experiences with passion and precision*
[](https://github.com/spyberpolymath)
[](https://kaggle.com/spyberpolymath)
[](https://linkedin.com/in/spyberpolymath)
[](https://t.me/spyberpolymath)
**๐ง [aman@spyberpolymath.com](mailto:aman@spyberpolymath.com)** | **๐ [spyberpolymath.com](https://spyberpolymath.com)**
---
*Made with โค๏ธ by Aman Anil aka (SpyberPolymath)* โจ