Rebrand platform from NetCop Hub to Quantum Tasks AI

- Update domain configuration to quantumtaskai.com
- Change all page titles and branding across templates
- Update Stripe integration with new domain URLs
- Modify settings.py for new domain and cache prefixes
- Update project documentation and test files
- Change company name and contact information

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Claude 2025-07-25 22:21:45 +05:30
parent 9cb8dcb380
commit 8e3cf451a1
21 changed files with 342 additions and 321 deletions

View File

@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Project Overview ## Project Overview
NetCop Hub is a Django-based AI agent marketplace platform where users can purchase and interact with specialized AI agents. The system supports both webhook-based and API-based agents with integrated payment processing via Stripe. Quantum Tasks AI is a Django-based AI agent marketplace platform where users can purchase and interact with specialized AI agents. The system supports both webhook-based and API-based agents with integrated payment processing via Stripe.
## Development Commands ## Development Commands

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}Data Analyzer - NetCop AI Hub{% endblock %} {% block title %}Data Analyzer - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}"> <link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}">

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}Email Writer Agent - NetCop AI Hub{% endblock %} {% block title %}Email Writer Agent - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}"> <link rel="stylesheet" href="{% static 'css/agent-base.css' %}">

View File

@ -1,102 +1,111 @@
{% extends "base.html" %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}5 Whys Analysis Agent - NetCop AI Hub{% endblock %} {% block title %}5 Whys Analysis Agent - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<!-- Optimized Font Loading --> <link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}">
<link rel="preconnect" href="https://fonts.googleapis.com"> {% endblock %}
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<!-- External Stylesheets --> {% block content %}
<link rel="stylesheet" href="{% static 'css/themes.css' %}">
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}">
<!-- Five Whys Analyzer Specific Utilities -->
<script> <script>
// Five Whys Analyzer - Self-contained utilities (no shared dependencies) // Agent Frontend Template - Common JavaScript Utilities
const FiveWhysUtils = {
/** // Quick Agent Access Panel Functions
* Update wallet balance display - Five Whys specific function toggleQuickAgents() {
*/ const panel = document.getElementById('quickAgentsPanel');
updateWalletBalance(newBalance) { const overlay = document.getElementById('quickAgentsOverlay');
// Update header balance (anchor tag with emoji) const toggle = document.querySelector('.quick-agent-toggle');
const headerBalance = document.querySelector('a[data-wallet-balance]');
if (headerBalance) { const isActive = panel.classList.contains('active');
headerBalance.textContent = `💰 ${newBalance.toFixed(2)} AED`;
if (isActive) {
panel.classList.remove('active');
overlay.classList.remove('active');
toggle.classList.remove('active');
toggle.setAttribute('aria-expanded', 'false');
panel.setAttribute('aria-hidden', 'true');
overlay.setAttribute('aria-hidden', 'true');
document.body.style.overflow = 'auto';
} else {
panel.classList.add('active');
overlay.classList.add('active');
toggle.classList.add('active');
toggle.setAttribute('aria-expanded', 'true');
panel.setAttribute('aria-hidden', 'false');
overlay.setAttribute('aria-hidden', 'false');
document.body.style.overflow = 'hidden';
}
} }
// Update page balance (div without emoji) function closeQuickAgents() {
const pageBalance = document.querySelector('div[data-wallet-balance]'); const panel = document.getElementById('quickAgentsPanel');
if (pageBalance) { const overlay = document.getElementById('quickAgentsOverlay');
pageBalance.textContent = `${newBalance.toFixed(2)} AED`; const toggle = document.querySelector('.quick-agent-toggle');
if (panel && overlay && toggle) {
panel.classList.remove('active');
overlay.classList.remove('active');
toggle.classList.remove('active');
toggle.setAttribute('aria-expanded', 'false');
panel.setAttribute('aria-hidden', 'true');
overlay.setAttribute('aria-hidden', 'true');
document.body.style.overflow = 'auto';
}
} }
window.currentWalletBalance = newBalance; // Toast Notification Function
}, function showToast(message, type = 'info') {
document.querySelectorAll('.toast').forEach(toast => toast.remove());
/**
* Show toast notification with duplicate prevention
*/
showToast(message, type = 'info') {
// Prevent duplicate toasts
const existingToast = document.querySelector('.five-whys-toast');
if (existingToast) {
existingToast.remove();
}
const toast = document.createElement('div'); const toast = document.createElement('div');
toast.className = 'five-whys-toast'; toast.className = `toast ${type}`;
toast.style.cssText = `
position: fixed;
top: 16px;
right: 16px;
padding: 8px 12px;
border-radius: 4px;
color: white;
font-size: 13px;
z-index: 1000;
max-width: 300px;
font-weight: 500;
${type === 'success' ? 'background: #10b981;' : 'background: #ef4444;'}
`;
toast.textContent = message; toast.textContent = message;
document.body.appendChild(toast); document.body.appendChild(toast);
setTimeout(() => toast.classList.add('show'), 100);
setTimeout(() => { setTimeout(() => {
if (toast.parentNode) { toast.classList.remove('show');
toast.remove(); setTimeout(() => toast.remove(), 300);
}, 3000);
} }
}, 2000);
},
/** // Processing Status Functions
* Generate text for copy/download functionality function showProcessing() {
*/ const processingStatus = document.getElementById('processingStatus');
generateTextForExport(contentElementId) { processingStatus.style.display = 'block';
const content = document.getElementById(contentElementId); processingStatus.classList.add('active');
if (content) {
return content.innerText || content.textContent || '';
} }
return 'No content available';
},
/** function hideProcessing() {
* Copy content to clipboard const processingStatus = document.getElementById('processingStatus');
*/ processingStatus.style.display = 'none';
copyToClipboard(text, successMessage = 'Content copied to clipboard!') { processingStatus.classList.remove('active');
}
// Wallet Balance Update Function
function updateWalletBalance(newBalance) {
if (newBalance !== undefined) {
const walletBalance = document.getElementById('walletBalance');
if (walletBalance) {
walletBalance.textContent = newBalance.toFixed(2);
}
}
}
// Copy to Clipboard Utility
function copyToClipboard(text, successMessage = 'Copied to clipboard!') {
navigator.clipboard.writeText(text).then(() => { navigator.clipboard.writeText(text).then(() => {
this.showToast(`📋 ${successMessage}`, 'success'); showToast(`📋 ${successMessage}`, 'success');
}).catch(() => { }).catch(() => {
this.showToast('Failed to copy content', 'error'); showToast('Failed to copy to clipboard', 'error');
}); });
}, }
/** // Download as File Utility
* Download content as text file function downloadAsFile(text, filename, successMessage = 'File downloaded!') {
*/
downloadAsFile(text, filename, successMessage = 'File downloaded!') {
const blob = new Blob([text], { type: 'text/plain' }); const blob = new Blob([text], { type: 'text/plain' });
const url = URL.createObjectURL(blob); const url = URL.createObjectURL(blob);
const a = document.createElement('a'); const a = document.createElement('a');
@ -104,30 +113,57 @@ const FiveWhysUtils = {
a.download = filename || `content-${Date.now()}.txt`; a.download = filename || `content-${Date.now()}.txt`;
a.click(); a.click();
URL.revokeObjectURL(url); URL.revokeObjectURL(url);
this.showToast(`💾 ${successMessage}`, 'success'); showToast(`💾 ${successMessage}`, 'success');
}
// Close panel on Escape key
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
closeQuickAgents();
}
});
// Five Whys specific utilities
const FiveWhysUtils = {
copyReport() {
const content = document.getElementById('reportContent');
if (content) {
const text = content.textContent || content.innerText || '';
copyToClipboard(text, '5 Whys report copied to clipboard!');
}
},
downloadReport() {
const content = document.getElementById('reportContent');
if (content) {
const text = content.textContent || content.innerText || '';
downloadAsFile(text, `5-whys-report-${Date.now()}.txt`, '5 Whys report downloaded!');
}
} }
}; };
// For backward compatibility, create AgentUtils alias // Backward compatibility functions
const AgentUtils = FiveWhysUtils; function copyReport() { FiveWhysUtils.copyReport(); }
function downloadReport() { FiveWhysUtils.downloadReport(); }
</script> </script>
{% endblock %}
{% block content %}
<div class="agent-page theme-professional">
<div class="agent-container"> <div class="agent-container">
<!-- Agent Header -->
{% include "components/agent_header.html" with agent_title="5 Whys Analyzer" agent_subtitle="AI-powered root cause analysis using the 5 Whys methodology" %}
<!-- Quick Agent Access Panel --> <!-- Quick Agent Access Panel -->
{% include "components/quick_agents_panel.html" %} {% include "components/quick_agents_panel.html" %}
<!-- Main Content --> <!-- Agent Grid -->
<div> <div class="agent-grid">
<div class="card"> <div class="agent-widget widget-large" style="flex: 1; margin-right: var(--spacing-lg);">
<h3 class="section-title">🔍 {{ agent.name }}</h3> <div class="widget-header">
<p class="form-help">{{ agent.description }}</p> <h3 class="widget-title">
<span class="widget-icon">💬</span>
5 Whys Analysis Chat
</h3>
</div> </div>
<div class="widget-content">
<!-- Chat Messages Container --> <!-- Chat Messages Container -->
<div class="card">
<div id="chatContainer" class="chat-container"> <div id="chatContainer" class="chat-container">
<h4 class="section-subtitle">💬 Chat with 5 Whys Analyst</h4> <h4 class="section-subtitle">💬 Chat with 5 Whys Analyst</h4>
@ -168,10 +204,9 @@ const AgentUtils = FiveWhysUtils;
</button> </button>
</div> </div>
</form> </form>
</div>
<!-- Report Generation Section --> <!-- Report Generation Section -->
<div class="card" id="reportSection"> <div id="reportSection" style="margin-top: var(--spacing-lg);">
<h4 class="section-subtitle">📋 Generate Final Report</h4> <h4 class="section-subtitle">📋 Generate Final Report</h4>
<div id="reportNotReady" class="info-message"> <div id="reportNotReady" class="info-message">
@ -211,40 +246,51 @@ const AgentUtils = FiveWhysUtils;
</div> </div>
</div> </div>
</div> </div>
<!-- Wallet Sidebar -->
<div class="wallet-section">
<div class="card">
<h3 class="section-title">💳 Your Wallet</h3>
<div class="wallet-balance" data-wallet-balance>{% if user.is_authenticated %}{{ user.wallet_balance|floatformat:2 }} AED{% else %}0.00 AED{% endif %}</div>
<div class="balance-label">Available Balance</div>
{% if user.is_authenticated %}
<a href="{% url 'wallet:wallet' %}" class="btn btn-primary" style="text-decoration: none; margin-top: 16px;">
💰 Top Up Wallet
</a>
{% else %}
<a href="{% url 'authentication:login' %}" class="btn btn-primary process-btn" style="text-decoration: none;">
🔑 Login to Continue
</a>
{% endif %}
</div> </div>
<div class="usage-info"> <!-- How It Works Widget -->
<h4>💡 How it works</h4> <div class="agent-widget widget-small" style="min-width: min(280px, 100%); max-width: min(280px, 100%); margin-left: auto;">
<ul> <div class="widget-header">
<h3 class="widget-title">
<span class="widget-icon"></span>
How It Works
</h3>
</div>
<div class="widget-content">
<ol class="info-list">
<li>Chat freely to explore your problem</li> <li>Chat freely to explore your problem</li>
<li>Get guidance and ask questions</li> <li>Get guidance and ask questions</li>
<li>Generate final report when ready</li> <li>Generate final report when ready</li>
<li>Pay only for the final report</li> <li>Pay only for the final report</li>
</ul> </ol>
</div>
<!-- Quick Agents Toggle Button -->
<button class="quick-agent-toggle" onclick="toggleQuickAgents()"
title="Quick access to other agents"
aria-label="Open quick access panel for other AI agents"
aria-expanded="false"
aria-controls="quickAgentsPanel"
style="margin-top: var(--spacing-md);">
<span class="toggle-icon" aria-hidden="true">🚀</span>
<span class="toggle-text">Explore Other Agents</span>
</button>
</div> </div>
</div> </div>
</div> </div>
<!-- Processing Status -->
<div class="agent-grid">
{% include "components/processing_status.html" with status_title="Generating 5 Whys Report..." status_text="Please wait while we analyze your conversation and create a comprehensive report..." %}
</div>
<!-- Results -->
<div class="agent-grid">
{% include "components/results_container.html" with results_title="5 Whys Analysis Report" %}
</div>
</div>
<style> <style>
/* Five Whys Analyzer Specific Styles */
.chat-container { .chat-container {
background: var(--background-subtle); background: var(--background-subtle);
border-radius: 8px; border-radius: 8px;
@ -270,11 +316,6 @@ const AgentUtils = FiveWhysUtils;
margin-bottom: 8px; margin-bottom: 8px;
} }
.message-content {
color: var(--text-primary);
line-height: 1.6;
}
.chat-form { .chat-form {
border-top: 1px solid var(--border-color); border-top: 1px solid var(--border-color);
padding-top: 16px; padding-top: 16px;
@ -306,36 +347,6 @@ const AgentUtils = FiveWhysUtils;
box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1); box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.1);
} }
.input-group .btn {
height: 40px;
padding: 8px 12px;
width: 20%;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
box-sizing: border-box;
font-size: 13px;
}
.info-message {
padding: 16px;
background: var(--background-subtle);
border-radius: 8px;
text-align: center;
color: var(--text-secondary);
margin-bottom: 16px;
}
.success-message {
padding: 16px;
background: #ecfdf5;
border-radius: 8px;
text-align: center;
color: #059669;
margin-bottom: 16px;
}
.message { .message {
margin-bottom: 16px; margin-bottom: 16px;
animation: fadeIn 0.3s ease; animation: fadeIn 0.3s ease;
@ -358,47 +369,6 @@ const AgentUtils = FiveWhysUtils;
line-height: 1.6; line-height: 1.6;
} }
.assistant-message .message-content {
color: var(--text-primary);
line-height: 1.6;
}
.assistant-message .message-content h3 {
color: var(--text-primary);
font-size: 16px;
font-weight: 600;
margin: 16px 0 8px 0;
}
.assistant-message .message-content h3:first-child {
margin-top: 0;
}
.assistant-message .message-content ul {
margin: 8px 0;
padding-left: 20px;
}
.assistant-message .message-content li {
margin: 4px 0;
}
.assistant-message .message-content p {
margin: 8px 0;
}
.assistant-message .message-content p:first-child {
margin-top: 0;
}
.assistant-message .message-content p:last-child {
margin-bottom: 0;
}
.assistant-message .message-content strong {
color: var(--text-primary);
font-weight: 600;
}
@keyframes fadeIn { @keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); } from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); } to { opacity: 1; transform: translateY(0); }
@ -463,7 +433,7 @@ const AgentUtils = FiveWhysUtils;
const message = input.value.trim(); const message = input.value.trim();
if (!message) { if (!message) {
AgentUtils.showToast('Please enter a message', 'error'); showToast('Please enter a message', 'error');
return; return;
} }
@ -503,14 +473,14 @@ const AgentUtils = FiveWhysUtils;
// Check if report button should be enabled // Check if report button should be enabled
checkReportReadiness(); checkReportReadiness();
} else { } else {
AgentUtils.showToast(data.error || 'Failed to send message', 'error'); showToast(data.error || 'Failed to send message', 'error');
} }
}) })
.catch(error => { .catch(error => {
// Hide typing indicator on error // Hide typing indicator on error
hideTypingIndicator(); hideTypingIndicator();
console.error('Error:', error); console.error('Error:', error);
AgentUtils.showToast('Network error occurred', 'error'); showToast('Network error occurred', 'error');
}) })
.finally(() => { .finally(() => {
isProcessing = false; isProcessing = false;
@ -665,12 +635,12 @@ const AgentUtils = FiveWhysUtils;
if (isProcessing) return; if (isProcessing) return;
if (!currentSessionId) { if (!currentSessionId) {
AgentUtils.showToast('Please start a chat session first', 'error'); showToast('Please start a chat session first', 'error');
return; return;
} }
if (messageCount < 2) { if (messageCount < 2) {
AgentUtils.showToast('Please ask at least 2 questions before generating a report', 'error'); showToast('Please ask at least 2 questions before generating a report', 'error');
return; return;
} }
@ -710,17 +680,17 @@ const AgentUtils = FiveWhysUtils;
// Update wallet balance if provided // Update wallet balance if provided
if (data.wallet_balance !== undefined) { if (data.wallet_balance !== undefined) {
AgentUtils.updateWalletBalance(data.wallet_balance); updateWalletBalance(data.wallet_balance);
} }
AgentUtils.showToast('✅ Report generated and payment processed!', 'success'); showToast('✅ Report generated and payment processed!', 'success');
} else { } else {
AgentUtils.showToast(data.error || 'Failed to generate report', 'error'); showToast(data.error || 'Failed to generate report', 'error');
} }
}) })
.catch(error => { .catch(error => {
console.error('Error:', error); console.error('Error:', error);
AgentUtils.showToast('Network error occurred', 'error'); showToast('Network error occurred', 'error');
}) })
.finally(() => { .finally(() => {
isProcessing = false; isProcessing = false;
@ -771,13 +741,27 @@ const AgentUtils = FiveWhysUtils;
function copyReport() { function copyReport() {
const reportText = AgentUtils.generateTextForExport('reportContent'); const reportText = generateTextForExport('reportContent');
AgentUtils.copyToClipboard(reportText, '📋 Report copied to clipboard!'); copyToClipboard(reportText, '📋 Report copied to clipboard!');
} }
function downloadReport() { function downloadReport() {
const reportText = AgentUtils.generateTextForExport('reportContent'); const reportText = generateTextForExport('reportContent');
AgentUtils.downloadAsFile(reportText, `five-whys-analysis-${Date.now()}.txt`, '💾 Report downloaded!'); downloadAsFile(reportText, `five-whys-analysis-${Date.now()}.txt`, '💾 Report downloaded!');
}
function generateTextForExport(elementId) {
const element = document.getElementById(elementId);
if (!element) return '';
// Extract text content while preserving some structure
let text = element.innerText || element.textContent || '';
// Clean up extra whitespace
text = text.replace(/\n\s*\n\s*\n/g, '\n\n');
text = text.trim();
return text;
} }
</script> </script>

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}Job Posting Generator Agent - NetCop AI Hub{% endblock %} {% block title %}Job Posting Generator Agent - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}"> <link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}">

View File

@ -40,11 +40,11 @@ if missing_vars:
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = config('DEBUG', default=True, cast=bool) DEBUG = config('DEBUG', default=True, cast=bool)
ALLOWED_HOSTS = config('ALLOWED_HOSTS', default='localhost,127.0.0.1,testserver,netcop.up.railway.app').split(',') ALLOWED_HOSTS = config('ALLOWED_HOSTS', default='localhost,127.0.0.1,testserver,quantumtaskai.com').split(',')
# Site URL configuration for emails # Site URL configuration for emails
if config('RAILWAY_ENVIRONMENT', default=''): if config('RAILWAY_ENVIRONMENT', default=''):
SITE_URL = 'https://netcop.up.railway.app' SITE_URL = 'https://quantumtaskai.com'
else: else:
SITE_URL = config('SITE_URL', default='http://localhost:8000') SITE_URL = config('SITE_URL', default='http://localhost:8000')
@ -271,7 +271,7 @@ EMAIL_USE_TLS = config('EMAIL_USE_TLS', default=True, cast=bool)
EMAIL_HOST_USER = config('EMAIL_HOST_USER', default='') EMAIL_HOST_USER = config('EMAIL_HOST_USER', default='')
EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD', default='') EMAIL_HOST_PASSWORD = config('EMAIL_HOST_PASSWORD', default='')
EMAIL_FILE_PATH = config('EMAIL_FILE_PATH', default='/tmp/app-messages') EMAIL_FILE_PATH = config('EMAIL_FILE_PATH', default='/tmp/app-messages')
DEFAULT_FROM_EMAIL = config('DEFAULT_FROM_EMAIL', default='NetCop <noreply@netcop.com>') DEFAULT_FROM_EMAIL = config('DEFAULT_FROM_EMAIL', default='Quantum Tasks AI <noreply@quantumtaskai.com>')
# Security settings # Security settings
CSRF_TRUSTED_ORIGINS = [origin.strip() for origin in config('CSRF_TRUSTED_ORIGINS', default='').split(',') if origin.strip()] CSRF_TRUSTED_ORIGINS = [origin.strip() for origin in config('CSRF_TRUSTED_ORIGINS', default='').split(',') if origin.strip()]
@ -281,8 +281,8 @@ if config('RAILWAY_ENVIRONMENT', default=''):
railway_url = config('RAILWAY_PUBLIC_DOMAIN', default='') railway_url = config('RAILWAY_PUBLIC_DOMAIN', default='')
if railway_url: if railway_url:
CSRF_TRUSTED_ORIGINS.append(f'https://{railway_url}') CSRF_TRUSTED_ORIGINS.append(f'https://{railway_url}')
# Also add common Railway domain pattern # Also add production domain
CSRF_TRUSTED_ORIGINS.append('https://netcop.up.railway.app') CSRF_TRUSTED_ORIGINS.append('https://quantumtaskai.com')
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# Default primary key field type # Default primary key field type
@ -298,7 +298,7 @@ CACHES = {
'OPTIONS': { 'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}, },
'KEY_PREFIX': 'netcop', 'KEY_PREFIX': 'quantumtaskai',
'TIMEOUT': 300, # 5 minutes default 'TIMEOUT': 300, # 5 minutes default
'VERSION': 1, 'VERSION': 1,
} }
@ -315,7 +315,7 @@ except (ImportError, Exception):
CACHES = { CACHES = {
'default': { 'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'netcop-cache', 'LOCATION': 'quantumtaskai-cache',
'OPTIONS': { 'OPTIONS': {
'MAX_ENTRIES': 1000, 'MAX_ENTRIES': 1000,
'CULL_FREQUENCY': 3, 'CULL_FREQUENCY': 3,

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}Social Ads Generator - NetCop AI Hub{% endblock %} {% block title %}Social Ads Generator - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}"> <link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}">

View File

@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ agent.name }} - NetCop Hub</title> <title>{{ agent.name }} - Quantum Tasks AI</title>
<style> <style>
body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f5f5f5; } body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f5f5f5; }
.container { max-width: 800px; margin: 0 auto; } .container { max-width: 800px; margin: 0 auto; }

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}AI Marketplace - NetCop AI Hub{% endblock %} {% block title %}AI Marketplace - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/marketplace.css' %}"> <link rel="stylesheet" href="{% static 'css/marketplace.css' %}">

View File

@ -4,7 +4,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}NetCop Hub - AI Platform{% endblock %}</title> <title>{% block title %}Quantum Tasks AI - AI Platform{% endblock %}</title>
<!-- Unified Font Loading - Single Source of Truth --> <!-- Unified Font Loading - Single Source of Truth -->
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
@ -26,7 +26,7 @@
<div class="header-container"> <div class="header-container">
<div class="header-left"> <div class="header-left">
<a href="{% url 'core:homepage' %}" class="logo-section"> <a href="{% url 'core:homepage' %}" class="logo-section">
<img src="{% static 'img/logo.png' %}" alt="NetCop Hub" class="logo-img"> <img src="{% static 'img/logo.png' %}" alt="Quantum Tasks AI" class="logo-img">
</a> </a>
<nav class="header-nav" id="header-nav"> <nav class="header-nav" id="header-nav">
<a href="{% url 'core:homepage' %}" class="nav-link {% if request.resolver_match.url_name == 'homepage' %}active{% endif %}">Home</a> <a href="{% url 'core:homepage' %}" class="nav-link {% if request.resolver_match.url_name == 'homepage' %}active{% endif %}">Home</a>
@ -69,15 +69,15 @@
<!-- Company Info --> <!-- Company Info -->
<div class="footer-company"> <div class="footer-company">
<div class="footer-logo"> <div class="footer-logo">
<img src="{% static 'img/logo.png' %}" alt="NetCop Hub" class="footer-logo-img"> <img src="{% static 'img/logo.png' %}" alt="Quantum Tasks AI" class="footer-logo-img">
</div> </div>
<p class="footer-description"> <p class="footer-description">
Leading cybersecurity consultancy providing comprehensive security solutions and AI-powered automation. Leading cybersecurity consultancy providing comprehensive security solutions and AI-powered automation.
</p> </p>
<div class="footer-contact"> <div class="footer-contact">
<a href="mailto:contact@netcopconsultancy.com" class="footer-contact-item"> <a href="mailto:contact@quantumtaskai.com" class="footer-contact-item">
📧 contact@netcopconsultancy.com 📧 contact@quantumtaskai.com
</a> </a>
<span class="footer-contact-item"> <span class="footer-contact-item">
📍 Dubai, UAE 📍 Dubai, UAE
@ -137,7 +137,7 @@
</div> </div>
<div class="modal-text"> <div class="modal-text">
<p style="margin-bottom: 16px;"> <p style="margin-bottom: 16px;">
<strong>NetCop Consultancy LLC FZ</strong> is committed to protecting your privacy and ensuring the security of your personal information. <strong>Quantum Tasks AI</strong> is committed to protecting your privacy and ensuring the security of your personal information.
</p> </p>
<p style="margin-bottom: 16px;"> <p style="margin-bottom: 16px;">
<strong>Information We Collect:</strong><br> <strong>Information We Collect:</strong><br>
@ -153,7 +153,7 @@
</p> </p>
<p style="margin-bottom: 16px;"> <p style="margin-bottom: 16px;">
<strong>Contact Us:</strong><br> <strong>Contact Us:</strong><br>
If you have any questions about this Privacy Policy, please contact us at contact@netcopconsultancy.com If you have any questions about this Privacy Policy, please contact us at contact@quantumtaskai.com
</p> </p>
<p style="margin: 0; font-size: 12px; color: #9ca3af;"> <p style="margin: 0; font-size: 12px; color: #9ca3af;">
Last updated: January 2025 Last updated: January 2025

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}NetCop AI Hub - AI & Cybersecurity Solutions{% endblock %} {% block title %}Quantum Tasks AI - AI & Task Automation Solutions{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/homepage.css' %}"> <link rel="stylesheet" href="{% static 'css/homepage.css' %}">
@ -61,7 +61,7 @@
<div class="trust-indicators"> <div class="trust-indicators">
<div class="trust-card"> <div class="trust-card">
<div class="trust-number"> <div class="trust-number">
18+ 35+
</div> </div>
<div class="trust-text"> <div class="trust-text">
Years Experience Years Experience
@ -94,13 +94,13 @@
<div class="section-header"> <div class="section-header">
<div class="section-badge"> <div class="section-badge">
<span class="section-badge-icon">🏢</span> <span class="section-badge-icon">🏢</span>
<span class="section-badge-text">About Netcop Consultancy</span> <span class="section-badge-text">About Quantum Tasks AI</span>
</div> </div>
<h2 class="section-title"> <h2 class="section-title">
Your Trusted Digital Guardian Your Trusted Digital Guardian
</h2> </h2>
<p class="section-subtitle"> <p class="section-subtitle">
Pioneering the future of cybersecurity with AI-powered solutions Pioneering the future of Automation & Cybersecurity with AI-powered solutions
</p> </p>
</div> </div>
@ -125,7 +125,7 @@
<div class="company-badges"> <div class="company-badges">
<div class="company-badge company-badge-primary"> <div class="company-badge company-badge-primary">
<div class="company-badge-icon">📅</div> <div class="company-badge-icon">📅</div>
18+ Years Experience 35+ Years Experience
</div> </div>
<div class="company-badge company-badge-purple"> <div class="company-badge company-badge-purple">
<div class="company-badge-icon">🏆</div> <div class="company-badge-icon">🏆</div>
@ -256,9 +256,46 @@
<section class="founder"> <section class="founder">
<div class="founder-container"> <div class="founder-container">
<h2 class="founder-title"> <h2 class="founder-title">
Our Founder Our Founders
</h2> </h2>
<!-- JP Goenka -->
<div class="founder-grid"> <div class="founder-grid">
<div class="founder-card-container">
<div class="founder-card">
<div class="founder-avatar">👨‍💼</div>
<h3 class="founder-name">Mr. JP Goenka</h3>
<p class="founder-role">
Founder & Business Development Leader
</p>
<div class="founder-badges">
<div class="founder-badge">
International Trading Expert
</div>
<div class="founder-badge">
Dubai Business Leader
</div>
<div class="founder-badge">
Global Perspective
</div>
</div>
</div>
</div>
<div class="founder-content">
<p class="founder-text">
Mr. J. P. Goenka
With over 45 years of entrepreneurial and leadership experience, Mr. J. P. Goenka has built a distinguished career across a diverse range of industries, including food processing, printed circuit boards, plastics manufacturing, beans splitting units, and international trade (import & export).
</p>
<p class="founder-text">
Mr. Goenka brings deep global business insight, supported by an extensive international network and a strong understanding of various markets, products, and cultural dynamics. Recognizing the transformative impact of emerging technologies, he co-founded Quantum Task AI LLC FZ in partnership with Mr. Abhay Chauhan, focusing on advancing solutions in Artificial Intelligence and Cybersecurity—two key pillars shaping the future of global business.
</p>
</div>
</div>
<!-- Abhay Pal Chauhan -->
<div class="founder-grid" style="margin-top: 3rem;">
<div class="founder-card-container"> <div class="founder-card-container">
<div class="founder-card"> <div class="founder-card">
<div class="founder-avatar">👨‍💼</div> <div class="founder-avatar">👨‍💼</div>
@ -268,7 +305,7 @@
</p> </p>
<div class="founder-badges"> <div class="founder-badges">
<div class="founder-badge"> <div class="founder-badge">
18+ Years Experience 35+ Years Experience
</div> </div>
<div class="founder-badge"> <div class="founder-badge">
Cybersecurity Expert Cybersecurity Expert
@ -281,7 +318,7 @@
</div> </div>
<div class="founder-content"> <div class="founder-content">
<p class="founder-text"> <p class="founder-text">
Our Founder leverages over <strong>18 years of expertise</strong> in cybersecurity and process automation and optimization, backed by top certifications in Cybersecurity and <strong>Black Belt in Lean Six Sigma</strong>. Our Founder leverages over <strong>35 years of expertise</strong> in cybersecurity and process automation and optimization, backed by top certifications in Cybersecurity and <strong>Black Belt in Lean Six Sigma</strong>.
</p> </p>
<p class="founder-text"> <p class="founder-text">
His unique blend of technical knowledge and operational excellence ensures <strong>tailored, secure, and efficient solutions</strong> for our clients, driving business resilience and maximizing value in every engagement. His unique blend of technical knowledge and operational excellence ensures <strong>tailored, secure, and efficient solutions</strong> for our clients, driving business resilience and maximizing value in every engagement.
@ -377,8 +414,8 @@
<div class="contact-details"> <div class="contact-details">
<h4>Email Address</h4> <h4>Email Address</h4>
<p> <p>
<a href="mailto:abhay@netcopconsultancy.com" class="contact-email"> <a href="mailto:abhay@quantumtaskai.com" class="contact-email">
abhay@netcopconsultancy.com abhay@quantumtaskai.com
</a> </a>
</p> </p>
</div> </div>

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}Pricing - NetCop Hub{% endblock %} {% block title %}Pricing - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}"> <link rel="stylesheet" href="{% static 'css/agent-base.css' %}">

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}Wallet - NetCop Hub{% endblock %} {% block title %}Wallet - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}"> <link rel="stylesheet" href="{% static 'css/agent-base.css' %}">

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}Top Up Wallet - NetCop Hub{% endblock %} {% block title %}Top Up Wallet - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}"> <link rel="stylesheet" href="{% static 'css/agent-base.css' %}">

View File

@ -4,10 +4,10 @@ import sys
import django import django
# Add the project root to Python path # Add the project root to Python path
sys.path.insert(0, '/home/amit/projects/netcop_django') sys.path.insert(0, '/home/amit/projects/quantumtaskai_django')
# Set Django settings # Set Django settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'netcop_hub.settings') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'quantumtaskai_hub.settings')
django.setup() django.setup()
from agent_base.models import BaseAgent from agent_base.models import BaseAgent

View File

@ -7,7 +7,7 @@ import django
sys.path.insert(0, '/home/amit/Desktop/quantum_ai') sys.path.insert(0, '/home/amit/Desktop/quantum_ai')
# Set Django settings # Set Django settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'netcop_hub.settings') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'quantumtaskai_hub.settings')
django.setup() django.setup()
from agent_base.models import BaseAgent from agent_base.models import BaseAgent

View File

@ -4,10 +4,10 @@ import sys
import django import django
# Add the project root to Python path # Add the project root to Python path
sys.path.insert(0, '/home/amit/projects/netcop_django') sys.path.insert(0, '/home/amit/projects/quantumtaskai_django')
# Set Django settings # Set Django settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'netcop_hub.settings') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'quantumtaskai_hub.settings')
django.setup() django.setup()
from django.test import Client from django.test import Client

View File

@ -15,7 +15,7 @@ def test_job_posting_webhook():
form_data = { form_data = {
'user_id': 'test-user-123', 'user_id': 'test-user-123',
'job_title': 'Senior Software Developer', 'job_title': 'Senior Software Developer',
'company_name': 'NetCop Technologies', 'company_name': 'Quantum Tasks AI Technologies',
'industry': 'technology', 'industry': 'technology',
'job_type': 'full-time', 'job_type': 'full-time',
'experience_level': 'senior', 'experience_level': 'senior',

View File

@ -4,10 +4,10 @@ import sys
import django import django
# Add the project root to Python path # Add the project root to Python path
sys.path.insert(0, '/home/amit/projects/netcop_django') sys.path.insert(0, '/home/amit/projects/quantumtaskai_django')
# Set Django settings # Set Django settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'netcop_hub.settings') os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'quantumtaskai_hub.settings')
django.setup() django.setup()
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model

View File

@ -28,8 +28,8 @@ class StripePaymentHandler:
cancel_url = request.build_absolute_uri('/wallet/top-up/cancel/') cancel_url = request.build_absolute_uri('/wallet/top-up/cancel/')
else: else:
# Fallback URLs # Fallback URLs
success_url = 'https://netcop.up.railway.app/wallet/top-up/success/?session_id={CHECKOUT_SESSION_ID}' success_url = 'https://quantumtaskai.com/wallet/top-up/success/?session_id={CHECKOUT_SESSION_ID}'
cancel_url = 'https://netcop.up.railway.app/wallet/top-up/cancel/' cancel_url = 'https://quantumtaskai.com/wallet/top-up/cancel/'
try: try:
print(f"🚀 [STRIPE DEBUG] Starting checkout session creation...") print(f"🚀 [STRIPE DEBUG] Starting checkout session creation...")
@ -39,7 +39,7 @@ class StripePaymentHandler:
print(f"🔑 API Version: {stripe.api_version}") print(f"🔑 API Version: {stripe.api_version}")
print(f"📍 Success URL: {success_url}") print(f"📍 Success URL: {success_url}")
print(f"📍 Cancel URL: {cancel_url}") print(f"📍 Cancel URL: {cancel_url}")
print(f"📍 Expected Webhook URL: https://netcop.up.railway.app/stripe/webhook/") print(f"📍 Expected Webhook URL: https://quantumtaskai.com/stripe/webhook/")
print(f"🌍 Environment: {'production' if 'railway.app' in (request.get_host() if request else '') else 'development'}") print(f"🌍 Environment: {'production' if 'railway.app' in (request.get_host() if request else '') else 'development'}")
# Create session with modern Stripe practices # Create session with modern Stripe practices
@ -52,10 +52,10 @@ class StripePaymentHandler:
'price_data': { 'price_data': {
'currency': 'aed', 'currency': 'aed',
'product_data': { 'product_data': {
'name': 'NetCop Wallet Top-up', 'name': 'Quantum Tasks AI Wallet Top-up',
'description': f'Add {amount} AED to your wallet balance', 'description': f'Add {amount} AED to your wallet balance',
'metadata': { 'metadata': {
'service': 'netcop_wallet', 'service': 'quantumtaskai_wallet',
'user_id': str(user.id) 'user_id': str(user.id)
} }
}, },
@ -82,7 +82,7 @@ class StripePaymentHandler:
'amount': str(amount), 'amount': str(amount),
'currency': 'aed', 'currency': 'aed',
'type': 'wallet_topup', 'type': 'wallet_topup',
'service': 'netcop', 'service': 'quantumtaskai',
'environment': 'production' if 'railway.app' in (request.get_host() if request else '') else 'development', 'environment': 'production' if 'railway.app' in (request.get_host() if request else '') else 'development',
'created_at': str(int(time.time())), 'created_at': str(int(time.time())),
'app_version': '1.0' 'app_version': '1.0'
@ -93,7 +93,7 @@ class StripePaymentHandler:
'metadata': { 'metadata': {
'user_id': str(user.id), 'user_id': str(user.id),
'amount': str(amount), 'amount': str(amount),
'service': 'netcop_wallet' 'service': 'quantumtaskai_wallet'
} }
}, },

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %} {% load static %}
{% block title %}Weather Reporter Agent - NetCop AI Hub{% endblock %} {% block title %}Weather Reporter Agent - Quantum Tasks AI{% endblock %}
{% block extra_css %} {% block extra_css %}
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}"> <link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}">