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
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

View File

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

View File

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

View File

@ -1,102 +1,111 @@
{% extends "base.html" %}
{% extends 'base.html' %}
{% 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 %}
<!-- Optimized Font Loading -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<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">
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}?v={{ timestamp }}">
{% endblock %}
<!-- External Stylesheets -->
<link rel="stylesheet" href="{% static 'css/themes.css' %}">
<link rel="stylesheet" href="{% static 'css/agent-base.css' %}">
<!-- Five Whys Analyzer Specific Utilities -->
{% block content %}
<script>
// Five Whys Analyzer - Self-contained utilities (no shared dependencies)
const FiveWhysUtils = {
/**
* Update wallet balance display - Five Whys specific
*/
updateWalletBalance(newBalance) {
// Update header balance (anchor tag with emoji)
const headerBalance = document.querySelector('a[data-wallet-balance]');
if (headerBalance) {
headerBalance.textContent = `💰 ${newBalance.toFixed(2)} AED`;
// Agent Frontend Template - Common JavaScript Utilities
// Quick Agent Access Panel Functions
function toggleQuickAgents() {
const panel = document.getElementById('quickAgentsPanel');
const overlay = document.getElementById('quickAgentsOverlay');
const toggle = document.querySelector('.quick-agent-toggle');
const isActive = panel.classList.contains('active');
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)
const pageBalance = document.querySelector('div[data-wallet-balance]');
if (pageBalance) {
pageBalance.textContent = `${newBalance.toFixed(2)} AED`;
function closeQuickAgents() {
const panel = document.getElementById('quickAgentsPanel');
const overlay = document.getElementById('quickAgentsOverlay');
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;
},
/**
* Show toast notification with duplicate prevention
*/
showToast(message, type = 'info') {
// Prevent duplicate toasts
const existingToast = document.querySelector('.five-whys-toast');
if (existingToast) {
existingToast.remove();
}
// Toast Notification Function
function showToast(message, type = 'info') {
document.querySelectorAll('.toast').forEach(toast => toast.remove());
const toast = document.createElement('div');
toast.className = 'five-whys-toast';
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.className = `toast ${type}`;
toast.textContent = message;
document.body.appendChild(toast);
setTimeout(() => toast.classList.add('show'), 100);
setTimeout(() => {
if (toast.parentNode) {
toast.remove();
toast.classList.remove('show');
setTimeout(() => toast.remove(), 300);
}, 3000);
}
}, 2000);
},
/**
* Generate text for copy/download functionality
*/
generateTextForExport(contentElementId) {
const content = document.getElementById(contentElementId);
if (content) {
return content.innerText || content.textContent || '';
// Processing Status Functions
function showProcessing() {
const processingStatus = document.getElementById('processingStatus');
processingStatus.style.display = 'block';
processingStatus.classList.add('active');
}
return 'No content available';
},
/**
* Copy content to clipboard
*/
copyToClipboard(text, successMessage = 'Content copied to clipboard!') {
function hideProcessing() {
const processingStatus = document.getElementById('processingStatus');
processingStatus.style.display = 'none';
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(() => {
this.showToast(`📋 ${successMessage}`, 'success');
showToast(`📋 ${successMessage}`, 'success');
}).catch(() => {
this.showToast('Failed to copy content', 'error');
showToast('Failed to copy to clipboard', 'error');
});
},
}
/**
* Download content as text file
*/
downloadAsFile(text, filename, successMessage = 'File downloaded!') {
// Download as File Utility
function downloadAsFile(text, filename, successMessage = 'File downloaded!') {
const blob = new Blob([text], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
@ -104,30 +113,57 @@ const FiveWhysUtils = {
a.download = filename || `content-${Date.now()}.txt`;
a.click();
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
const AgentUtils = FiveWhysUtils;
// Backward compatibility functions
function copyReport() { FiveWhysUtils.copyReport(); }
function downloadReport() { FiveWhysUtils.downloadReport(); }
</script>
{% endblock %}
{% block content %}
<div class="agent-page theme-professional">
<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 -->
{% include "components/quick_agents_panel.html" %}
<!-- Main Content -->
<div>
<div class="card">
<h3 class="section-title">🔍 {{ agent.name }}</h3>
<p class="form-help">{{ agent.description }}</p>
<!-- Agent Grid -->
<div class="agent-grid">
<div class="agent-widget widget-large" style="flex: 1; margin-right: var(--spacing-lg);">
<div class="widget-header">
<h3 class="widget-title">
<span class="widget-icon">💬</span>
5 Whys Analysis Chat
</h3>
</div>
<div class="widget-content">
<!-- Chat Messages Container -->
<div class="card">
<div id="chatContainer" class="chat-container">
<h4 class="section-subtitle">💬 Chat with 5 Whys Analyst</h4>
@ -168,10 +204,9 @@ const AgentUtils = FiveWhysUtils;
</button>
</div>
</form>
</div>
<!-- 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>
<div id="reportNotReady" class="info-message">
@ -211,40 +246,51 @@ const AgentUtils = FiveWhysUtils;
</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 class="usage-info">
<h4>💡 How it works</h4>
<ul>
<!-- How It Works Widget -->
<div class="agent-widget widget-small" style="min-width: min(280px, 100%); max-width: min(280px, 100%); margin-left: auto;">
<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>Get guidance and ask questions</li>
<li>Generate final report when ready</li>
<li>Pay only for the final report</li>
</ul>
</div>
</ol>
<!-- 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>
<!-- 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>
/* Five Whys Analyzer Specific Styles */
.chat-container {
background: var(--background-subtle);
border-radius: 8px;
@ -270,11 +316,6 @@ const AgentUtils = FiveWhysUtils;
margin-bottom: 8px;
}
.message-content {
color: var(--text-primary);
line-height: 1.6;
}
.chat-form {
border-top: 1px solid var(--border-color);
padding-top: 16px;
@ -306,36 +347,6 @@ const AgentUtils = FiveWhysUtils;
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 {
margin-bottom: 16px;
animation: fadeIn 0.3s ease;
@ -358,47 +369,6 @@ const AgentUtils = FiveWhysUtils;
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 {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
@ -463,7 +433,7 @@ const AgentUtils = FiveWhysUtils;
const message = input.value.trim();
if (!message) {
AgentUtils.showToast('Please enter a message', 'error');
showToast('Please enter a message', 'error');
return;
}
@ -503,14 +473,14 @@ const AgentUtils = FiveWhysUtils;
// Check if report button should be enabled
checkReportReadiness();
} else {
AgentUtils.showToast(data.error || 'Failed to send message', 'error');
showToast(data.error || 'Failed to send message', 'error');
}
})
.catch(error => {
// Hide typing indicator on error
hideTypingIndicator();
console.error('Error:', error);
AgentUtils.showToast('Network error occurred', 'error');
showToast('Network error occurred', 'error');
})
.finally(() => {
isProcessing = false;
@ -665,12 +635,12 @@ const AgentUtils = FiveWhysUtils;
if (isProcessing) return;
if (!currentSessionId) {
AgentUtils.showToast('Please start a chat session first', 'error');
showToast('Please start a chat session first', 'error');
return;
}
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;
}
@ -710,17 +680,17 @@ const AgentUtils = FiveWhysUtils;
// Update wallet balance if provided
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 {
AgentUtils.showToast(data.error || 'Failed to generate report', 'error');
showToast(data.error || 'Failed to generate report', 'error');
}
})
.catch(error => {
console.error('Error:', error);
AgentUtils.showToast('Network error occurred', 'error');
showToast('Network error occurred', 'error');
})
.finally(() => {
isProcessing = false;
@ -771,13 +741,27 @@ const AgentUtils = FiveWhysUtils;
function copyReport() {
const reportText = AgentUtils.generateTextForExport('reportContent');
AgentUtils.copyToClipboard(reportText, '📋 Report copied to clipboard!');
const reportText = generateTextForExport('reportContent');
copyToClipboard(reportText, '📋 Report copied to clipboard!');
}
function downloadReport() {
const reportText = AgentUtils.generateTextForExport('reportContent');
AgentUtils.downloadAsFile(reportText, `five-whys-analysis-${Date.now()}.txt`, '💾 Report downloaded!');
const reportText = generateTextForExport('reportContent');
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>

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %}
{% 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 %}
<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!
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
if config('RAILWAY_ENVIRONMENT', default=''):
SITE_URL = 'https://netcop.up.railway.app'
SITE_URL = 'https://quantumtaskai.com'
else:
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_PASSWORD = config('EMAIL_HOST_PASSWORD', default='')
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
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='')
if railway_url:
CSRF_TRUSTED_ORIGINS.append(f'https://{railway_url}')
# Also add common Railway domain pattern
CSRF_TRUSTED_ORIGINS.append('https://netcop.up.railway.app')
# Also add production domain
CSRF_TRUSTED_ORIGINS.append('https://quantumtaskai.com')
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# Default primary key field type
@ -298,7 +298,7 @@ CACHES = {
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
},
'KEY_PREFIX': 'netcop',
'KEY_PREFIX': 'quantumtaskai',
'TIMEOUT': 300, # 5 minutes default
'VERSION': 1,
}
@ -315,7 +315,7 @@ except (ImportError, Exception):
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'netcop-cache',
'LOCATION': 'quantumtaskai-cache',
'OPTIONS': {
'MAX_ENTRIES': 1000,
'CULL_FREQUENCY': 3,

View File

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

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<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>
body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f5f5f5; }
.container { max-width: 800px; margin: 0 auto; }

View File

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

View File

@ -4,7 +4,7 @@
<head>
<meta charset="UTF-8">
<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 -->
<link rel="preconnect" href="https://fonts.googleapis.com">
@ -26,7 +26,7 @@
<div class="header-container">
<div class="header-left">
<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>
<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>
@ -69,15 +69,15 @@
<!-- Company Info -->
<div class="footer-company">
<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>
<p class="footer-description">
Leading cybersecurity consultancy providing comprehensive security solutions and AI-powered automation.
</p>
<div class="footer-contact">
<a href="mailto:contact@netcopconsultancy.com" class="footer-contact-item">
📧 contact@netcopconsultancy.com
<a href="mailto:contact@quantumtaskai.com" class="footer-contact-item">
📧 contact@quantumtaskai.com
</a>
<span class="footer-contact-item">
📍 Dubai, UAE
@ -137,7 +137,7 @@
</div>
<div class="modal-text">
<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 style="margin-bottom: 16px;">
<strong>Information We Collect:</strong><br>
@ -153,7 +153,7 @@
</p>
<p style="margin-bottom: 16px;">
<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 style="margin: 0; font-size: 12px; color: #9ca3af;">
Last updated: January 2025

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %}
{% load static %}
{% block title %}NetCop AI Hub - AI & Cybersecurity Solutions{% endblock %}
{% block title %}Quantum Tasks AI - AI & Task Automation Solutions{% endblock %}
{% block extra_css %}
<link rel="stylesheet" href="{% static 'css/homepage.css' %}">
@ -61,7 +61,7 @@
<div class="trust-indicators">
<div class="trust-card">
<div class="trust-number">
18+
35+
</div>
<div class="trust-text">
Years Experience
@ -94,13 +94,13 @@
<div class="section-header">
<div class="section-badge">
<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>
<h2 class="section-title">
Your Trusted Digital Guardian
</h2>
<p class="section-subtitle">
Pioneering the future of cybersecurity with AI-powered solutions
Pioneering the future of Automation & Cybersecurity with AI-powered solutions
</p>
</div>
@ -125,7 +125,7 @@
<div class="company-badges">
<div class="company-badge company-badge-primary">
<div class="company-badge-icon">📅</div>
18+ Years Experience
35+ Years Experience
</div>
<div class="company-badge company-badge-purple">
<div class="company-badge-icon">🏆</div>
@ -256,9 +256,46 @@
<section class="founder">
<div class="founder-container">
<h2 class="founder-title">
Our Founder
Our Founders
</h2>
<!-- JP Goenka -->
<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">
<div class="founder-avatar">👨‍💼</div>
@ -268,7 +305,7 @@
</p>
<div class="founder-badges">
<div class="founder-badge">
18+ Years Experience
35+ Years Experience
</div>
<div class="founder-badge">
Cybersecurity Expert
@ -281,7 +318,7 @@
</div>
<div class="founder-content">
<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 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.
@ -377,8 +414,8 @@
<div class="contact-details">
<h4>Email Address</h4>
<p>
<a href="mailto:abhay@netcopconsultancy.com" class="contact-email">
abhay@netcopconsultancy.com
<a href="mailto:abhay@quantumtaskai.com" class="contact-email">
abhay@quantumtaskai.com
</a>
</p>
</div>

View File

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

View File

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

View File

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

View File

@ -4,10 +4,10 @@ import sys
import django
# 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
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'netcop_hub.settings')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'quantumtaskai_hub.settings')
django.setup()
from agent_base.models import BaseAgent

View File

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

View File

@ -4,10 +4,10 @@ import sys
import django
# 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
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'netcop_hub.settings')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'quantumtaskai_hub.settings')
django.setup()
from django.test import Client

View File

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

View File

@ -4,10 +4,10 @@ import sys
import django
# 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
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'netcop_hub.settings')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'quantumtaskai_hub.settings')
django.setup()
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/')
else:
# Fallback URLs
success_url = 'https://netcop.up.railway.app/wallet/top-up/success/?session_id={CHECKOUT_SESSION_ID}'
cancel_url = 'https://netcop.up.railway.app/wallet/top-up/cancel/'
success_url = 'https://quantumtaskai.com/wallet/top-up/success/?session_id={CHECKOUT_SESSION_ID}'
cancel_url = 'https://quantumtaskai.com/wallet/top-up/cancel/'
try:
print(f"🚀 [STRIPE DEBUG] Starting checkout session creation...")
@ -39,7 +39,7 @@ class StripePaymentHandler:
print(f"🔑 API Version: {stripe.api_version}")
print(f"📍 Success URL: {success_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'}")
# Create session with modern Stripe practices
@ -52,10 +52,10 @@ class StripePaymentHandler:
'price_data': {
'currency': 'aed',
'product_data': {
'name': 'NetCop Wallet Top-up',
'name': 'Quantum Tasks AI Wallet Top-up',
'description': f'Add {amount} AED to your wallet balance',
'metadata': {
'service': 'netcop_wallet',
'service': 'quantumtaskai_wallet',
'user_id': str(user.id)
}
},
@ -82,7 +82,7 @@ class StripePaymentHandler:
'amount': str(amount),
'currency': 'aed',
'type': 'wallet_topup',
'service': 'netcop',
'service': 'quantumtaskai',
'environment': 'production' if 'railway.app' in (request.get_host() if request else '') else 'development',
'created_at': str(int(time.time())),
'app_version': '1.0'
@ -93,7 +93,7 @@ class StripePaymentHandler:
'metadata': {
'user_id': str(user.id),
'amount': str(amount),
'service': 'netcop_wallet'
'service': 'quantumtaskai_wallet'
}
},

View File

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