# ๐Ÿ  hometri.com: Premium Real Estate Platform
**A comprehensive, high-performance real estate listing and team management portal powered by Django and Python.** [![Django](https://img.shields.io/badge/Django-092E20?style=for-the-badge&logo=django&logoColor=white)](https://www.djangoproject.com/) [![Python](https://img.shields.io/badge/Python-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org/) [![SQLite](https://img.shields.io/badge/SQLite-07405E?style=for-the-badge&logo=sqlite&logoColor=white)](https://www.sqlite.org/) [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-4169E1?style=for-the-badge&logo=postgresql&logoColor=white)](https://www.postgresql.org/) [![Bootstrap](https://img.shields.io/badge/Bootstrap-7952B3?style=for-the-badge&logo=bootstrap&logoColor=white)](https://getbootstrap.com/) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](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](images/demo.png) *Project demo overview* --- ### ๐Ÿ  Home Page ![Home Page 1](images/home/1.png) ![Home Page 2](images/home/2.png) ![Home Page 3](images/home/3.png) ![Home Page 4](images/home/4.png) ![Home Page 5](images/home/5.png) ![Home Page 6](images/home/6.png) ![Home Page 7](images/home/7.png) --- ### ๐Ÿ“– About Page ![About Page 1](images/about/1.png) ![About Page 2](images/about/2.png) ![About Page 3](images/about/3.png) ![About Page 4](images/about/4.png) ![About Page 5](images/about/5.png) ![About Page 6](images/about/6.png) ![About Page 7](images/about/7.png) --- ### ๐Ÿ”ง Admin Panel ![Admin Panel 1](images/admin/1.png) ![Admin Panel 2](images/admin/2.png) ![Admin Panel 3](images/admin/3.png) ![Admin Panel 4](images/admin/4.png) ![Admin Panel 5](images/admin/5.png) ![Admin Panel 6](images/admin/6.png) ![Admin Panel 7](images/admin/7.png) ![Admin Panel 8](images/admin/8.png) ![Admin Panel 9](images/admin/9.png) ![Admin Panel 11](images/admin/11.png) ![Admin Panel 12](images/admin/12.png) ![Admin Panel 13](images/admin/13.png) ![Admin Panel 14](images/admin/14.png) --- ### ๐Ÿข Hometri Admin ![Hometri Admin 1](images/Hometri-admin/1.png) ![Hometri Admin 2](images/Hometri-admin/2.png) ![Hometri Admin 3](images/Hometri-admin/3.png) ![Hometri Admin 4](images/Hometri-admin/4.png) ![Hometri Admin 5](images/Hometri-admin/5.png) ![Hometri Admin 6](images/Hometri-admin/6.png) ![Hometri Admin 7](images/Hometri-admin/7.png) ![Hometri Admin 8](images/Hometri-admin/8.png) --- ### ๐Ÿ‘ฅ Agents - Admin Side ![Agents Admin 1](images/agents/admin-side/1.png) ![Agents Admin 2](images/agents/admin-side/2.png) ![Agents Admin 3](images/agents/admin-side/3.png) ![Agents Admin 4](images/agents/admin-side/4.png) ![Agents Admin 5](images/agents/admin-side/5.png) ![Agents Admin 6](images/agents/admin-side/6.png) ![Agents Admin 7](images/agents/admin-side/7.png) ![Agents Admin 8](images/agents/admin-side/8.png) ![Agents Admin 9](images/agents/admin-side/9.png) ![Agents Admin 10](images/agents/admin-side/10.png) ![Agents Admin 11](images/agents/admin-side/11.png) ![Agents Admin 12](images/agents/admin-side/12.png) ![Agents Admin 13](images/agents/admin-side/13.png) ![Agents Admin 14](images/agents/admin-side/14.png) ![Agents Admin 15](images/agents/admin-side/15.png) ![Agents Admin 16](images/agents/admin-side/16.png) ![Agents Admin 17](images/agents/admin-side/17.png) ![Agents Admin 18](images/agents/admin-side/18.png) --- ### ๐Ÿ‘ฅ Agents - Client Side ![Agents Client 1](images/agents/clinet-side/1.png) ![Agents Client 2](images/agents/clinet-side/2.png) ![Agents Client 3](images/agents/clinet-side/3.png) ![Agents Client 4](images/agents/clinet-side/4.png) ![Agents Client 5](images/agents/clinet-side/5.png) ![Agents Client 6](images/agents/clinet-side/6.png) ![Agents Client 7](images/agents/clinet-side/7.png) ![Agents Client 8](images/agents/clinet-side/8.png) ![Agents Client 9](images/agents/clinet-side/9.png) ![Agents Client 10](images/agents/clinet-side/10.png) ![Agents Client 11](images/agents/clinet-side/11.png) --- ### ๐Ÿ“ž Contact - Admin Side ![Contact Admin 1](images/contact/admin-side/1.png) ![Contact Admin 2](images/contact/admin-side/2.png) ![Contact Admin 3](images/contact/admin-side/3.png) ![Contact Admin 4](images/contact/admin-side/4.png) --- ### ๐Ÿ“ž Contact - Client Side ![Contact Client 1](images/contact/clinet-side/1.png) ![Contact Client 2](images/contact/clinet-side/2.png) ![Contact Client 3](images/contact/clinet-side/3.png) --- ### ๐Ÿ˜๏ธ Property - Admin Side ![Property Admin 1](images/property/admin-side/1.png) ![Property Admin 2](images/property/admin-side/2.png) ![Property Admin 3](images/property/admin-side/3.png) ![Property Admin 4](images/property/admin-side/4.png) ![Property Admin 5](images/property/admin-side/5.png) ![Property Admin 6](images/property/admin-side/6.png) --- ### ๐Ÿ˜๏ธ Property - Client Side ![Property Client 1](images/property/client-side/1.png) ![Property Client 2](images/property/client-side/2.png) ![Property Client 3](images/property/client-side/3.png) ![Property Client 4](images/property/client-side/4.png) ![Property Client 5](images/property/client-side/5.png) ![Property Client 6](images/property/client-side/6.png) ![Property Client 7](images/property/client-side/7.png) --- ### ๐Ÿ” Search Functionality ![Search 1](images/search/1.png) ![Search 2](images/search/2.png) ![Search 3](images/search/3.png) --- ### ๐Ÿ› ๏ธ Services ![Services 1](images/services/1.png) ![Services 2](images/services/2.png) ![Services 3](images/services/3.png) ![Services 4](images/services/4.png) ![Services 5](images/services/5.png) --- ### ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Team - Admin Side ![Team Admin 1](images/team/admin-side/1.png) ![Team Admin 2](images/team/admin-side/2.png) ![Team Admin 3](images/team/admin-side/3.png) ![Team Admin 4](images/team/admin-side/4.png) ![Team Admin 5](images/team/admin-side/5.png) ![Team Admin 6](images/team/admin-side/6.png) ![Team Admin 7](images/team/admin-side/7.png) ![Team Admin 8](images/team/admin-side/8.png) ![Team Admin 9](images/team/admin-side/9.png) ![Team Admin 10](images/team/admin-side/10.png) ![Team Admin 11](images/team/admin-side/11.png) ![Team Admin 12](images/team/admin-side/12.png) ![Team Admin 13](images/team/admin-side/13.png) ![Team Admin 14](images/team/admin-side/14.png) ![Team Admin 15](images/team/admin-side/15.png) ![Team Admin 16](images/team/admin-side/16.png) --- ### ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Team - Client Side ![Team Client 1](images/team/clinet-side/1.png) ![Team Client 2](images/team/clinet-side/2.png) ![Team Client 3](images/team/clinet-side/3.png) ![Team Client 4](images/team/clinet-side/4.png) ![Team Client 5](images/team/clinet-side/5.png) ![Team Client 6](images/team/clinet-side/6.png) ![Team Client 7](images/team/clinet-side/7.png) ![Team Client 8](images/team/clinet-side/8.png) ![Team Client 9](images/team/clinet-side/9.png) ![Team Client 10](images/team/clinet-side/10.png) --- ## ๐Ÿ—๏ธ 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* [![GitHub](https://img.shields.io/badge/GitHub-spyberpolymath-black?style=for-the-badge&logo=github)](https://github.com/spyberpolymath) [![Kaggle](https://img.shields.io/badge/Kaggle-spyberpolymath-orange?style=for-the-badge&logo=kaggle)](https://kaggle.com/spyberpolymath) [![LinkedIn](https://img.shields.io/badge/LinkedIn-spyberpolymath-blue?style=for-the-badge&logo=linkedin)](https://linkedin.com/in/spyberpolymath) [![Telegram](https://img.shields.io/badge/Telegram-spyberpolymath-blue?style=for-the-badge&logo=telegram)](https://t.me/spyberpolymath) **๐Ÿ“ง [aman@spyberpolymath.com](mailto:aman@spyberpolymath.com)** | **๐ŸŒ [spyberpolymath.com](https://spyberpolymath.com)** --- *Made with โค๏ธ by Aman Anil aka (SpyberPolymath)* โœจ