diff --git a/README.md b/README.md
index ccbad4a..56a48eb 100644
--- a/README.md
+++ b/README.md
@@ -1,64 +1,164 @@
-# Django VPS Demo Project
+# đ Django VPS Deployment Toolkit
-Simple Django project optimized for VPS deployment with multi-project support.
+**Universal toolkit to deploy ANY Django project to VPS with zero configuration.**
## ⨠Features
-- **Minimal Dependencies**: Clean, lightweight setup with only essential packages
-- **Environment Configuration**: Production settings managed via environment variables
-- **Database Flexible**: Works with SQLite for development and PostgreSQL for production
-- **Static Files Handling**: Configured with WhiteNoise for efficient static file serving
-- **Contact Form**: Functional contact form with email validation
-- **Simple Blog System**: Basic blog functionality with admin interface
-- **Bootstrap UI**: Responsive design using Bootstrap 5
-- **Production Security**: Security headers, HTTPS support, and production optimizations
-- **VPS Deployment**: Complete deployment scripts and configuration files
+- đ¯ **Universal** - Deploy any Django project from GitHub
+- đˇī¸ **Auto-naming** - Extracts project name from repo URL
+- đ **Multi-project** - Unlimited Django projects per VPS
+- đ§ **Zero config** - Automatic nginx + gunicorn + systemd setup
+- đ **One command** - Complete deployment in minutes
+- đ **Secure** - Non-root deployment with proper permissions
+- đĄ **Auto-deploy** - GitHub webhook integration for CI/CD
-## đ Tech Stack
+## đ Quick Deploy
-- **Backend**: Django 4.2.7
-- **Database**: SQLite (development) / PostgreSQL (production)
-- **Web Server**: Gunicorn + Nginx
-- **Frontend**: Bootstrap 5, Vanilla JavaScript
-- **Static Files**: WhiteNoise
-- **Configuration**: python-decouple
-
-## đ Deploy to VPS
-
-### After VPS Reset:
+### Setup VPS (Once per VPS)
```bash
-# 1. Fix SSH key
-ssh-keygen -f '/home/amit/.ssh/known_hosts' -R '69.62.81.168'
+# 1. Fix SSH after VPS reset
+ssh-keygen -f '~/.ssh/known_hosts' -R 'YOUR_VPS_IP'
-# 2. Setup django user
-scp setup-django-user.sh akvps:/root/
-ssh akvps "sudo bash /root/setup-django-user.sh"
+# 2. Upload and run user setup
+scp setup-django-user.sh root@YOUR_VPS_IP:/root/
+ssh root@YOUR_VPS_IP "sudo bash /root/setup-django-user.sh"
-# 3. Clone and deploy
+# 3. Clone this toolkit
+ssh root@YOUR_VPS_IP "cd /home/django && git clone https://github.com/thecyberlearn/hostinger-django-demo.git django-vps-toolkit"
```
-### Deploy Your Project
+### Deploy Any Django Project
```bash
-ssh akvps "cd /home/django && git clone https://github.com/thecyberlearn/hostinger-django-demo.git"
-ssh akvps "cd /home/django/hostinger-django-demo && sudo bash deploy/deploy-project.sh https://github.com/thecyberlearn/hostinger-django-demo.git"
+# Deploy any Django project with one command!
+ssh root@YOUR_VPS_IP "cd /home/django/django-vps-toolkit && sudo bash deploy-django-project.sh https://github.com/USER/PROJECT.git"
```
-**Your site**: http://69.62.81.168/
+**Examples:**
+```bash
+# Deploy a blog
+sudo bash deploy-django-project.sh https://github.com/johndoe/my-blog.git
+# â Live at: http://YOUR_VPS_IP/my-blog/
-## đ Key Files
+# Deploy an e-commerce site
+sudo bash deploy-django-project.sh https://github.com/company/shop-backend.git
+# â Live at: http://YOUR_VPS_IP/shop-backend/
-**Main Deployment Script:**
-- `deploy/deploy-project.sh` - Deploys any Django project with auto repo naming
+# Deploy a portfolio
+sudo bash deploy-django-project.sh https://github.com/jane/portfolio-site.git
+# â Live at: http://YOUR_VPS_IP/portfolio-site/
+```
-**Documentation:**
-- `MULTI_PROJECT_SETUP.md` - Complete multi-project guide
+## đ¯ What It Does
-**Setup:**
-- `setup-django-user.sh` - Create django user on fresh VPS
-- `requirements.txt` - Python dependencies
+1. **Extracts project name** from GitHub URL
+2. **Clones project** to `/var/www/PROJECT_NAME/`
+3. **Creates virtual environment** and installs dependencies
+4. **Runs Django migrations** and collects static files
+5. **Creates systemd service** `gunicorn-PROJECT_NAME.service`
+6. **Configures nginx** for path-based routing
+7. **Starts everything** and tests deployment
-## đ¯ That's It!
+## đ Toolkit Files
-For detailed multi-project setup, see `MULTI_PROJECT_SETUP.md`
+**đ Main Scripts:**
+- `deploy-django-project.sh` - Deploy any Django project
+- `setup-django-user.sh` - VPS user setup (run once)
-Simple, clean, and no confusion! đ
\ No newline at end of file
+**đ§ Advanced Features:**
+- `setup-multi-webhook.sh` - GitHub auto-deploy webhooks
+- `webhook-router.py` - Multi-project webhook handler
+- `MULTI_PROJECT_SETUP.md` - Advanced webhook guide
+
+**đ Templates:**
+- `templates/nginx.conf.template` - Nginx configuration
+- `templates/gunicorn.service.template` - Systemd service
+- `templates/production_settings.py` - Django production settings
+
+## đ Auto-Deploy Setup
+
+Want GitHub auto-deploy like Render/Vercel?
+
+```bash
+# Setup webhook system
+sudo bash setup-multi-webhook.sh
+
+# Add webhook to your GitHub repos:
+# URL: http://YOUR_VPS_IP/webhook
+# Secret: [from setup output]
+# Events: Push events
+
+# Now push to GitHub â Auto-deploy! đ
+```
+
+## đĄ Examples
+
+### Deploy Multiple Projects
+```bash
+# Each project gets its own URL path
+sudo bash deploy-django-project.sh https://github.com/user/blog.git
+sudo bash deploy-django-project.sh https://github.com/user/shop.git
+sudo bash deploy-django-project.sh https://github.com/user/api.git
+
+# Results:
+# http://YOUR_VPS_IP/blog/
+# http://YOUR_VPS_IP/shop/
+# http://YOUR_VPS_IP/api/
+```
+
+### Project Management
+```bash
+# Check project status
+systemctl status gunicorn-blog.service
+systemctl status gunicorn-shop.service
+
+# View project logs
+journalctl -u gunicorn-blog.service -f
+
+# Restart project
+systemctl restart gunicorn-blog.service
+
+# Update project
+cd /var/www/blog && sudo -u django git pull && systemctl restart gunicorn-blog.service
+```
+
+## đ¯ Requirements
+
+**Your Django Project Needs:**
+- `requirements.txt` file
+- Working `manage.py`
+- Proper Django project structure
+
+**VPS Requirements:**
+- Ubuntu 20.04+ or similar
+- Root/sudo access
+- 1GB+ RAM recommended
+
+## đ¨ Troubleshooting
+
+**Deployment fails?**
+```bash
+# Check logs
+journalctl -u gunicorn-PROJECT_NAME.service -f
+
+# Test Django
+cd /var/www/PROJECT_NAME
+sudo -u django bash -c "source venv/bin/activate && python manage.py check"
+
+# Test nginx
+nginx -t
+```
+
+**Can't access site?**
+```bash
+# Check services
+systemctl status gunicorn-PROJECT_NAME.service nginx
+
+# Check firewall
+ufw status
+```
+
+## đ Success!
+
+You now have a **universal Django deployment toolkit** that can deploy any Django project to VPS with zero configuration!
+
+**Just provide a GitHub URL and get a working Django site!** đ
\ No newline at end of file
diff --git a/core/__init__.py b/core/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/core/admin.py b/core/admin.py
deleted file mode 100644
index e9d3fc7..0000000
--- a/core/admin.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from django.contrib import admin
-from .models import Contact, BlogPost
-
-
-@admin.register(Contact)
-class ContactAdmin(admin.ModelAdmin):
- list_display = ['name', 'email', 'subject', 'created_at']
- list_filter = ['created_at']
- search_fields = ['name', 'email', 'subject']
- readonly_fields = ['created_at']
- ordering = ['-created_at']
-
-
-@admin.register(BlogPost)
-class BlogPostAdmin(admin.ModelAdmin):
- list_display = ['title', 'is_published', 'created_at', 'updated_at']
- list_filter = ['is_published', 'created_at']
- search_fields = ['title', 'content']
- prepopulated_fields = {'slug': ('title',)}
- readonly_fields = ['created_at', 'updated_at']
- ordering = ['-created_at']
diff --git a/core/apps.py b/core/apps.py
deleted file mode 100644
index 8115ae6..0000000
--- a/core/apps.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from django.apps import AppConfig
-
-
-class CoreConfig(AppConfig):
- default_auto_field = 'django.db.models.BigAutoField'
- name = 'core'
diff --git a/core/forms.py b/core/forms.py
deleted file mode 100644
index 78deebf..0000000
--- a/core/forms.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from django import forms
-from .models import Contact
-
-
-class ContactForm(forms.ModelForm):
- class Meta:
- model = Contact
- fields = ['name', 'email', 'subject', 'message']
- widgets = {
- 'name': forms.TextInput(attrs={
- 'class': 'form-control',
- 'placeholder': 'Your Name'
- }),
- 'email': forms.EmailInput(attrs={
- 'class': 'form-control',
- 'placeholder': 'your.email@example.com'
- }),
- 'subject': forms.TextInput(attrs={
- 'class': 'form-control',
- 'placeholder': 'Subject'
- }),
- 'message': forms.Textarea(attrs={
- 'class': 'form-control',
- 'rows': 5,
- 'placeholder': 'Your message...'
- }),
- }
\ No newline at end of file
diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py
deleted file mode 100644
index 587cf58..0000000
--- a/core/migrations/0001_initial.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# Generated by Django 4.2.7 on 2025-08-29 16:12
-
-from django.db import migrations, models
-import django.utils.timezone
-
-
-class Migration(migrations.Migration):
-
- initial = True
-
- dependencies = [
- ]
-
- operations = [
- migrations.CreateModel(
- name='BlogPost',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('title', models.CharField(max_length=200)),
- ('slug', models.SlugField(unique=True)),
- ('content', models.TextField()),
- ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
- ('updated_at', models.DateTimeField(auto_now=True)),
- ('is_published', models.BooleanField(default=True)),
- ],
- options={
- 'ordering': ['-created_at'],
- },
- ),
- migrations.CreateModel(
- name='Contact',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(max_length=100)),
- ('email', models.EmailField(max_length=254)),
- ('subject', models.CharField(max_length=200)),
- ('message', models.TextField()),
- ('created_at', models.DateTimeField(default=django.utils.timezone.now)),
- ],
- options={
- 'ordering': ['-created_at'],
- },
- ),
- ]
diff --git a/core/migrations/__init__.py b/core/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/core/models.py b/core/models.py
deleted file mode 100644
index 8a68930..0000000
--- a/core/models.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from django.db import models
-from django.utils import timezone
-
-
-class Contact(models.Model):
- name = models.CharField(max_length=100)
- email = models.EmailField()
- subject = models.CharField(max_length=200)
- message = models.TextField()
- created_at = models.DateTimeField(default=timezone.now)
-
- def __str__(self):
- return f"{self.name} - {self.subject}"
-
- class Meta:
- ordering = ['-created_at']
-
-
-class BlogPost(models.Model):
- title = models.CharField(max_length=200)
- slug = models.SlugField(unique=True)
- content = models.TextField()
- created_at = models.DateTimeField(default=timezone.now)
- updated_at = models.DateTimeField(auto_now=True)
- is_published = models.BooleanField(default=True)
-
- def __str__(self):
- return self.title
-
- class Meta:
- ordering = ['-created_at']
diff --git a/core/static/core/css/style.css b/core/static/core/css/style.css
deleted file mode 100644
index c892000..0000000
--- a/core/static/core/css/style.css
+++ /dev/null
@@ -1,30 +0,0 @@
-.hero-section {
- background: linear-gradient(135deg, #007bff 0%, #0056b3 100%);
-}
-
-.card {
- transition: transform 0.2s;
-}
-
-.card:hover {
- transform: translateY(-2px);
- box-shadow: 0 4px 8px rgba(0,0,0,0.1);
-}
-
-.navbar-brand {
- font-weight: bold;
-}
-
-footer {
- margin-top: auto;
-}
-
-body {
- min-height: 100vh;
- display: flex;
- flex-direction: column;
-}
-
-main {
- flex: 1;
-}
\ No newline at end of file
diff --git a/core/static/core/js/main.js b/core/static/core/js/main.js
deleted file mode 100644
index eef10fc..0000000
--- a/core/static/core/js/main.js
+++ /dev/null
@@ -1,23 +0,0 @@
-document.addEventListener('DOMContentLoaded', function() {
- // Auto-hide alerts after 5 seconds
- const alerts = document.querySelectorAll('.alert');
- alerts.forEach(function(alert) {
- setTimeout(function() {
- const bsAlert = new bootstrap.Alert(alert);
- bsAlert.close();
- }, 5000);
- });
-
- // Smooth scrolling for internal links
- document.querySelectorAll('a[href^="#"]').forEach(anchor => {
- anchor.addEventListener('click', function (e) {
- e.preventDefault();
- const target = document.querySelector(this.getAttribute('href'));
- if (target) {
- target.scrollIntoView({
- behavior: 'smooth'
- });
- }
- });
- });
-});
\ No newline at end of file
diff --git a/core/templates/core/about.html b/core/templates/core/about.html
deleted file mode 100644
index c5e371e..0000000
--- a/core/templates/core/about.html
+++ /dev/null
@@ -1,63 +0,0 @@
-{% extends 'core/base.html' %}
-
-{% block title %}About - Django Demo Project{% endblock %}
-
-{% block content %}
-
-
-
-
About This Project
-
-
-
-
Purpose
-
This Django demo project is designed as a production-ready template for testing VPS deployment workflows. It serves as a foundation for future Django projects with all the essential configurations already in place.