Help
RSS
API
Feed
Maltego
Contact
Domain > 9999bet8.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2025-12-11
104.21.36.17
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Thu, 11 Dec 2025 08:01:19 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: keep-aliveServer: cloudflareNel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}Last-Modified: Tue, 02 Dec 2025 12:01:20 GMTX-Frame-Options: SAMEORIGINX-Content-Type-Options: nosniffX-XSS-Protection: 1; modeblockcf-cache-status: DYNAMICReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?sQgPOUI%2BtXfwFJ9xRrHlo6VYmdemMUy9vz2pqmZJ3Wem0ws4GY8Db%2FG5eZPtxYueLmPU36o17tc2ar%2B2AIU12D73m7gJTu7YE%2B4g%3D}}CF-RAY: 9ac3740e7c02ff07-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langen>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> meta http-equivCache-Control contentno-cache, no-store, must-revalidate> meta http-equivPragma contentno-cache> meta http-equivExpires content0> title>AI SEO - Platform Dashboard/title> link relstylesheet hrefcss/styles.css?v20251120v10> link relstylesheet hrefcss/legend.css?v20251119v11> link relstylesheet hrefcss/analytics.css?v20251120v7> link relicon hrefdata:image/svg+xml,svg xmlns%22http://www.w3.org/2000/svg%22 viewBox%220 0 100 100%22>text y%22.9em%22 font-size%2290%22>🤖/text>/svg>> !-- Material Icons --> link relstylesheet hrefhttps://fonts.googleapis.com/css2?familyMaterial+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200 /> !-- Chart.js for performance charts --> script srchttps://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js>/script>/head>body> !-- Top Navigation Bar --> div classtop-navbar> div classtop-navbar-left> button classmobile-menu-btn idmobileMenuBtn onclicktoggleSidebar()> span classmaterial-symbols-outlined>menu/span> /button> div classtop-logo> span classlogo-text>AI SEO/span> /div> /div> div classtop-navbar-center> div classai-search-bar> input typetext classai-search-input idaiSearchInput placeholderSearch deployments or ask AI... onkeypresshandleAiSearchKeyPress(event) /> button classsearch-clear-btn idsearchClearBtn onclickclearAiSearch() styledisplay: none;> span classmaterial-symbols-outlined>close/span> /button> /div> /div> div classtop-navbar-right> div classtop-user-menu> div classtop-user-avatar> span classmaterial-symbols-outlined>account_circle/span> /div> /div> /div> /div> !-- Sidebar Navigation --> div classsidebar idsidebar> div classsidebar-header> h2>AI SEO/h2> /div> nav classsidebar-nav> div classnav-section> div classnav-section-title>Dashboard/div> a href#deployments classnav-item active data-pagedeployments onclickswitchPage(deployments)> span classnav-icon material-symbols-outlined>rocket_launch/span> span classnav-text>Website Deployments/span> /a> a href#overview classnav-item data-pageoverview onclickswitchPage(overview)> span classnav-icon material-symbols-outlined>dashboard/span> span classnav-text>Deployment Dashboard/span> /a> /div> div classnav-section> div classnav-section-title>SEO Tools/div> a href#keyword-research classnav-item data-pagekeyword-research onclickswitchPage(keyword-research)> span classnav-icon material-symbols-outlined>search/span> span classnav-text>Keyword Research/span> /a> a href#content-optimizer classnav-item data-pagecontent-optimizer onclickswitchPage(content-optimizer)> span classnav-icon material-symbols-outlined>edit_note/span> span classnav-text>Content Optimizer/span> /a> a href#competitor-analysis classnav-item data-pagecompetitor-analysis onclickswitchPage(competitor-analysis)> span classnav-icon material-symbols-outlined>bar_chart/span> span classnav-text>Competitor Analysis/span> /a> a href#backlink-monitor classnav-item data-pagebacklink-monitor onclickswitchPage(backlink-monitor)> span classnav-icon material-symbols-outlined>link/span> span classnav-text>Backlink Monitor/span> /a> /div> div classnav-section> div classnav-section-title>Analytics/div> a href#performance classnav-item data-pageperformance onclickswitchPage(performance)> span classnav-icon material-symbols-outlined>speed/span> span classnav-text>Performance Metrics/span> /a> a href#rankings classnav-item data-pagerankings onclickswitchPage(rankings)> span classnav-icon material-symbols-outlined>analytics/span> span classnav-text>Ranking Tracker/span> /a> /div> div classnav-section> div classnav-section-title>Settings/div> a href#api-config classnav-item data-pageapi-config onclickswitchPage(api-config)> span classnav-icon material-symbols-outlined>key/span> span classnav-text>API Configuration/span> /a> /div> /nav> /div> !-- Sidebar Overlay for Mobile --> div classsidebar-overlay idsidebarOverlay onclickcloseMobileSidebar()>/div> !-- Main Content Area --> div classmain-content idmainContent> !-- Page: Website Deployments --> div classpage-content active idpage-deployments> !-- Header --> div classpage-header> div> h1>Website Deployments/h1> p classpage-description>Monitor and manage automated website deployments with real-time status tracking/p> /div> /div> !-- Statistics Cards --> div classstats-container idstatsContainer> div classstat-card total> div classnumber idstatTotal>0/div> div classlabel>Total Deployments/div> /div> div classstat-card completed> div classnumber idstatCompleted>0/div> div classlabel>Completed/div> /div> div classstat-card in-progress> div classnumber idstatInProgress>0/div> div classlabel>In Progress/div> /div> div classstat-card pending> div classnumber idstatPending>0/div> div classlabel>Pending/div> /div> div classstat-card failed> div classnumber idstatFailed>0/div> div classlabel>Failed/div> /div> /div> !-- Filters --> div classfilters> div classfilter-buttons> button classfilter-btn active data-filterall onclickdashboard.setFilter(all)> All (span idfilterCountAll>0/span>) /button> button classfilter-btn data-filtercompleted onclickdashboard.setFilter(completed)> Completed (span idfilterCountCompleted>0/span>) /button> button classfilter-btn data-filterin_progress onclickdashboard.setFilter(in_progress)> In Progress (span idfilterCountInProgress>0/span>) /button> button classfilter-btn data-filterpending onclickdashboard.setFilter(pending)> Pending (span idfilterCountPending>0/span>) /button> button classfilter-btn data-filterfailed onclickdashboard.setFilter(failed)> Failed (span idfilterCountFailed>0/span>) /button> /div> div classfilter-controls> div classfilter-group> label classfilter-label> span classmaterial-symbols-outlined>swap_vert/span> Sort by: /label> select idsortBy onchangedashboard.changeSorting() classfilter-select> option valueupdated_at_desc>Newest Updated/option> option valueupdated_at_asc>Oldest Updated/option> option valuecreated_at_desc>Newest Created/option> option valuecreated_at_asc>Oldest Created/option> option valuedomain_asc>Domain A-Z/option> option valuedomain_desc>Domain Z-A/option> /select> /div> div classauto-refresh-toggle> label> input typecheckbox idautoRefreshToggle checked onchangedashboard.toggleAutoRefresh()> Auto-refresh /label> select idrefreshInterval onchangedashboard.changeRefreshInterval() classrefresh-interval-select> option value3000>3s/option> option value5000>5s/option> option value10000 selected>10s/option> option value30000>30s/option> option value60000>1m/option> option valuecustom>Custom.../option> /select> input typenumber idcustomInterval classcustom-interval-input placeholderSeconds min1 max3600 styledisplay: none; onchangedashboard.setCustomInterval()> /div> /div> /div> !-- Deployment List --> div classdeployment-list iddeploymentList> div classloading> div classspinner>/div> Loading deployments... /div> /div> !-- Pagination Controls --> div classpagination idpaginationControls styledisplay: none;> !-- Pagination will be dynamically generated --> /div> !-- Last Update --> div classlast-update-footer> Last updated: span idlastUpdate>Never/span> /div> /div> !-- End Page: Deployments --> !-- Page: Coming Soon Template (for other pages) --> div classpage-content idpage-overview> !-- Deployment Statistics Section --> div classdeployment-stats-section> div classstats-header> h3> span classmaterial-symbols-outlined>bar_chart/span> Deployment Statistics div classinfo-tooltip idtooltip-deployment-stats> div classtooltip-title>Deployment Statistics Overview/div> div classtooltip-content> Comprehensive metrics tracking your website deployment pipeline performance and outcomes. /div> div classtooltip-formula> strong>• Total Deployments:/strong> Total number of all deployments since the beginningbr> strong>• Completed:/strong> Deployments that successfully finished all stagesbr> strong>• In Progress:/strong> Deployments currently being processedbr> strong>• Pending:/strong> Deployments queued and waiting to startbr> strong>• Failed:/strong> Deployments that encountered errors (check logs for details)br> strong>• Success Rate:/strong> Percentage of deployments that completed successfully /div> div classtooltip-example> These metrics help you monitor deployment pipeline health, identify bottlenecks, and track performance trends. /div> /div> /h3> /div> !-- Summary Cards --> div classstats-grid> div classstat-card total> div classnumber idoverviewTotalDeployments>-/div> div classlabel>Total Deployments/div> /div> div classstat-card completed> div classnumber idoverviewCompletedDeployments>-/div> div classlabel>Completed/div> /div> div classstat-card in-progress> div classnumber idoverviewInProgressDeployments>-/div> div classlabel>In Progress/div> /div> div classstat-card pending> div classnumber idoverviewPendingDeployments>-/div> div classlabel>Pending/div> /div> div classstat-card failed> div classnumber idoverviewFailedDeployments>-/div> div classlabel>Failed/div> /div> div classstat-card success-rate> div classnumber idoverviewSuccessRate>-/div> div classlabel>Success Rate/div> /div> /div> !-- Period Selector for Charts --> div classoverview-period-selector-container> div classstats-period-selector> select idoverviewStatsPeriod onchangedashboard.loadOverviewStats() classstats-period-select> option value24hours>Last 24 Hours/option> option valueweek selected>Last 7 Days/option> option valuemonth>Last 28 Days/option> option valuecustom>Custom Period/option> /select> div classstats-custom-dates idoverviewCustomDates styledisplay: none;> input typedate idoverviewStartDate /> span>to/span> input typedate idoverviewEndDate /> button onclickdashboard.applyCustomOverviewPeriod() classstats-apply-btn>Apply/button> /div> /div> /div> !-- Charts --> div idoverviewStatsContent> div classloading> div classspinner>/div> Loading statistics... /div> /div> /div> !-- Aggregate Search Performance Section --> div classdeployment-stats-section stylemargin-top: 30px;> div classstats-header> h3> span classmaterial-symbols-outlined>analytics/span> Search Performance Analytics div classinfo-tooltip idtooltip-aggregate-performance> div classtooltip-title>Search Performance Analytics/div> div classtooltip-content> Comprehensive Google Search Console performance metrics across all completed deployments. Includes aggregate metrics, timeline trends, and individual domain performance analysis. /div> div classtooltip-formula> strong>• Total Clicks:/strong> Sum of all clicks across all domainsbr> strong>• Total Impressions:/strong> Sum of all impressions across all domainsbr> strong>• Average CTR:/strong> Average click-through rate across all domainsbr> strong>• Average Position:/strong> Average search position across all domainsbr> strong>• Domains with Data:/strong> Number of domains with GSC data availablebr> strong>• Individual Metrics:/strong> Per-domain performance timeline charts /div> div classtooltip-example> This section provides both aggregate insights and individual domain performance, helping you monitor overall SEO trends and identify top performers in your portfolio. /div> /div> /h3> /div> !-- Aggregate Performance Content --> div idaggregatePerformanceContent> div classloading> div classspinner>/div> Loading aggregate performance data... /div> /div> /div> !-- Aggregate Google Analytics Section --> div idgoogle-analytics-section classdeployment-stats-section analytics-section stylemargin-top: 30px;> div classstats-header> h3> span classmaterial-symbols-outlined>bar_chart/span> Google Analytics Performance div classinfo-tooltip idtooltip-aggregate-analytics> div classtooltip-title>Google Analytics Performance/div> div classtooltip-content> Comprehensive Google Analytics 4 (GA4) metrics across all deployed domains. Includes user behavior, session data, pageview analytics, and engagement metrics. /div> div classtooltip-formula> strong>• Total Users:/strong> Sum of all users across all domainsbr> strong>• New Users:/strong> Sum of new users across all domainsbr> strong>• Total Sessions:/strong> Sum of all sessions across all domainsbr> strong>• Total Pageviews:/strong> Sum of all pageviews across all domainsbr> strong>• Avg Bounce Rate:/strong> Average bounce rate percentagebr> strong>• Avg Session Duration:/strong> Average time users spend per sessionbr> strong>• Individual Metrics:/strong> Per-domain performance timeline charts /div> div classtooltip-example> This section provides both aggregate insights and individual domain analytics, helping you understand user behavior and engagement patterns across your entire portfolio. /div> /div> /h3> /div> !-- Aggregate Analytics Content --> div idaggregateAnalyticsContent> div classloading> div classspinner>/div> Loading Google Analytics data... /div> /div> /div> /div> div classpage-content idpage-keyword-research> div classcoming-soon> div classcoming-soon-icon>🔍/div> h2>Keyword Research/h2> p>AI-powered keyword research and opportunity discovery./p> div classcoming-soon-features> div classfeature-item>✓ Keyword suggestions/div> div classfeature-item>✓ Search volume analysis/div> div classfeature-item>✓ Competition analysis/div> div classfeature-item>✓ Long-tail keywords/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-content-optimizer> div classcoming-soon> div classcoming-soon-icon>✍️/div> h2>Content Optimizer/h2> p>Optimize your content for better search engine rankings./p> div classcoming-soon-features> div classfeature-item>✓ Content analysis/div> div classfeature-item>✓ SEO score/div> div classfeature-item>✓ Improvement suggestions/div> div classfeature-item>✓ Readability check/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-competitor-analysis> div classcoming-soon> div classcoming-soon-icon>🎯/div> h2>Competitor Analysis/h2> p>Analyze your competitors and find opportunities./p> div classcoming-soon-features> div classfeature-item>✓ Competitor tracking/div> div classfeature-item>✓ Keyword gaps/div> div classfeature-item>✓ Content gaps/div> div classfeature-item>✓ Backlink comparison/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-backlink-monitor> div classcoming-soon> div classcoming-soon-icon>🔗/div> h2>Backlink Monitor/h2> p>Track and manage your backlink profile./p> div classcoming-soon-features> div classfeature-item>✓ Backlink discovery/div> div classfeature-item>✓ Link quality analysis/div> div classfeature-item>✓ New/lost links tracking/div> div classfeature-item>✓ Disavow file generator/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-performance> div classcoming-soon> div classcoming-soon-icon>⚡/div> h2>Performance Metrics/h2> p>Monitor website performance and Core Web Vitals./p> div classcoming-soon-features> div classfeature-item>✓ Core Web Vitals/div> div classfeature-item>✓ Page speed insights/div> div classfeature-item>✓ Mobile performance/div> div classfeature-item>✓ Performance trends/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-rankings> div classcoming-soon> div classcoming-soon-icon>📊/div> h2>Ranking Tracker/h2> p>Track your keyword rankings across search engines./p> div classcoming-soon-features> div classfeature-item>✓ Daily rank tracking/div> div classfeature-item>✓ Multi-location tracking/div> div classfeature-item>✓ Competitor rankings/div> div classfeature-item>✓ Rank history/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-api-config> div classcoming-soon> div classcoming-soon-icon>🔑/div> h2>API Configuration/h2> p>Manage API keys and integration settings./p> div classcoming-soon-features> div classfeature-item>✓ Google API settings/div> div classfeature-item>✓ Cloudflare settings/div> div classfeature-item>✓ Domain registrar settings/div> div classfeature-item>✓ Server configuration/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> /div> !-- AI Chatbot Modal --> div classai-chat-modal idaiChatModal> div classai-chat-container> div classai-chat-header> div classai-chat-title> span classmaterial-symbols-outlined>smart_toy/span> h3>AI SEO Assistant/h3> /div> button classai-chat-close onclickcloseAiChat()> span classmaterial-symbols-outlined>close/span> /button> /div> div classai-chat-messages idaiChatMessages> div classai-message> span classmaterial-symbols-outlined>smart_toy/span> div classmessage-content> p>Hi! Im your AI SEO Assistant. How can I help you today?/p> /div> /div> /div> div classai-chat-input-container> input typetext classai-chat-input idaiChatInput placeholderAsk me anything about SEO... onkeypresshandleChatKeyPress(event) /> button classai-chat-send onclicksendChatMessage()> span classmaterial-symbols-outlined>send/span> /button> /div> /div> /div> !-- Logs Modal --> div classmodal idlogModal> div classmodal-content> div classmodal-header> div> h2>Deployment Logsspan classmodal-domain idmodalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closeLogsModal()>×/button> /div> div classmodal-body idlogContent> div classloading> div classspinner>/div> Loading logs... /div> /div> /div> /div> !-- Verification Modal --> div classmodal idverifyModal> div classmodal-content> div classmodal-header> div> h2>Deployment Verificationspan classmodal-domain idverifyModalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closeVerifyModal()>×/button> /div> div classmodal-body idverifyContent> div classloading> div classspinner>/div> Running verification... /div> /div> /div> /div> !-- Indexing Modal --> div classmodal idindexingModal> div classmodal-content> div classmodal-header> div> h2>Google Indexing Statusspan classmodal-domain idindexingModalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closeIndexingModal()>×/button> /div> div classmodal-body idindexingContent> div classloading> div classspinner>/div> Checking indexing status... /div> /div> /div> /div> !-- Performance Modal --> div classmodal idperformanceModal> div classmodal-content> div classmodal-header> div> h2>Search Performance Dataspan classmodal-domain idperformanceModalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closePerformanceModal()>×/button> /div> div classmodal-body idperformanceContent> div classloading> div classspinner>/div> Loading performance data... /div> /div> /div> /div> !-- Google Analytics Modal --> div classmodal idanalyticsModal> div classmodal-content> div classmodal-header> div> h2>Google Analytics Dataspan classmodal-domain idanalyticsModalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closeAnalyticsModal()>×/button> /div> div classmodal-body idanalyticsContent> div classloading> div classspinner>/div> Loading analytics data... /div> /div> /div> /div> script srcjs/dashboard.js?v20251202v02>/script> script> // Tooltip functionality function toggleTooltip(event, tooltipId) { event.stopPropagation(); const tooltip document.getElementById(tooltipId); // Close all other tooltips document.querySelectorAll(.info-tooltip).forEach(t > { if (t.id ! tooltipId) { t.classList.remove(show); } }); // Toggle current tooltip const isShowing tooltip.classList.toggle(show); // Adjust position if tooltip goes off-screen (desktop only) if (isShowing && window.innerWidth > 768) { setTimeout(() > { const rect tooltip.getBoundingClientRect(); const viewportWidth window.innerWidth; // Check if tooltip goes off right edge if (rect.right > viewportWidth - 20) { const overflow rect.right - viewportWidth + 20; tooltip.style.left `calc(50% - ${overflow}px)`; } // Check if tooltip goes off left edge if (rect.left 20) { const overflow 20 - rect.left; tooltip.style.left `calc(50% + ${overflow}px)`; } }, 10); } else if (!isShowing) { // Reset position when hiding tooltip.style.left ; } } // Close tooltips when clicking outside document.addEventListener(click, function(event) { if (!event.target.closest(.info-tooltip-container)) { document.querySelectorAll(.info-tooltip).forEach(t > { t.classList.remove(show); t.style.left ; // Reset position }); } }); // Close tooltips on scroll (prevent floating tooltips) let scrollTimeout; window.addEventListener(scroll, function() { clearTimeout(scrollTimeout); scrollTimeout setTimeout(() > { document.querySelectorAll(.info-tooltip.show).forEach(t > { t.classList.remove(show); t.style.left ; }); }, 100); }, true); // Page switching functionality function switchPage(pageName) { // Hide all pages document.querySelectorAll(.page-content).forEach(page > { page.classList.remove(active); }); // Remove active class from all nav items document.querySelectorAll(.nav-item).forEach(item > { item.classList.remove(active); }); // Show selected page const selectedPage document.getElementById(page- + pageName); if (selectedPage) { selectedPage.classList.add(active); } // Add active class to selected nav item const selectedNav document.querySelector(`.nav-itemdata-page${pageName}`); if (selectedNav) { selectedNav.classList.add(active); } // Load data for specific pages if (pageName overview) { dashboard.loadOverviewStats(); dashboard.loadAggregatePerformance(); } // Close mobile sidebar after selecting page if (window.innerWidth 768) { closeMobileSidebar(); } // Prevent default anchor behavior return false; } // Sidebar toggle functionality (desktop/mobile aware) function toggleSidebar() { const sidebar document.getElementById(sidebar); const mainContent document.getElementById(mainContent); const overlay document.getElementById(sidebarOverlay); // Check if mobile view if (window.innerWidth 768) { // On mobile: toggle sidebar overlay sidebar.classList.toggle(mobile-open); overlay.classList.toggle(active); } else { // On desktop: collapse/expand sidebar.classList.toggle(collapsed); mainContent.classList.toggle(sidebar-collapsed); } } // Mobile sidebar toggle function toggleMobileSidebar() { const sidebar document.getElementById(sidebar); const overlay document.getElementById(sidebarOverlay); const menuBtn document.getElementById(mobileMenuBtn); sidebar.classList.toggle(mobile-open); overlay.classList.toggle(active); menuBtn.classList.toggle(active); } // Close mobile sidebar function closeMobileSidebar() { const sidebar document.getElementById(sidebar); const overlay document.getElementById(sidebarOverlay); const menuBtn document.getElementById(mobileMenuBtn); sidebar.classList.remove(mobile-open); overlay.classList.remove(active); menuBtn.classList.remove(active); } // AI Chat functions function toggleAiChat() { const modal document.getElementById(aiChatModal); modal.classList.toggle(active); // Focus modal input when opening if (modal.classList.contains(active)) { setTimeout(() > { document.getElementById(aiChatInput).focus(); }, 100); } } function openAiChatWithMessage(message) { const modal document.getElementById(aiChatModal); modal.classList.add(active); // Clear any previous messages except the initial AI greeting const messagesContainer document.getElementById(aiChatMessages); messagesContainer.innerHTML ` div classai-message> span classmaterial-symbols-outlined>smart_toy/span> div classmessage-content> p>Hi! Im your AI SEO Assistant. How can I help you today?/p> /div> /div> `; if (message && message.trim()) { // Add the users message const userMessageDiv document.createElement(div); userMessageDiv.className user-message; userMessageDiv.innerHTML ` div classmessage-content> p>${message}/p> /div> span classmaterial-symbols-outlined>person/span> `; messagesContainer.appendChild(userMessageDiv); messagesContainer.scrollTop messagesContainer.scrollHeight; // Simulate AI response (placeholder) setTimeout(() > { const aiMessageDiv document.createElement(div); aiMessageDiv.className ai-message; aiMessageDiv.innerHTML ` span classmaterial-symbols-outlined>smart_toy/span> div classmessage-content> p>You asked: ${message}/p> p>This is a placeholder response. The AI assistant feature is coming soon!/p> /div> `; messagesContainer.appendChild(aiMessageDiv); messagesContainer.scrollTop messagesContainer.scrollHeight; }, 500); } // Focus modal input setTimeout(() > { document.getElementById(aiChatInput).focus(); }, 100); } function closeAiChat() { document.getElementById(aiChatModal).classList.remove(active); } function sendChatMessage() { const input document.getElementById(aiChatInput); const message input.value.trim(); if (!message) return; // Add user message const messagesContainer document.getElementById(aiChatMessages); const userMessageDiv document.createElement(div); userMessageDiv.className user-message; userMessageDiv.innerHTML ` div classmessage-content> p>${message}/p> /div> span classmaterial-symbols-outlined>person/span> `; messagesContainer.appendChild(userMessageDiv); // Clear input input.value ; // Scroll to bottom messagesContainer.scrollTop messagesContainer.scrollHeight; // Simulate AI response (placeholder) setTimeout(() > { const aiMessageDiv document.createElement(div); aiMessageDiv.className ai-message; aiMessageDiv.innerHTML ` span classmaterial-symbols-outlined>smart_toy/span> div classmessage-content> p>This is a placeholder response. The AI assistant feature is coming soon!/p> /div> `; messagesContainer.appendChild(aiMessageDiv); messagesContainer.scrollTop messagesContainer.scrollHeight; }, 500); } function handleChatKeyPress(event) { if (event.key Enter) { sendChatMessage(); } } // AI Search Bar functions function handleAiSearchKeyPress(event) { if (event.key Enter) { const input document.getElementById(aiSearchInput); const message input.value.trim(); if (message) { // Open chatbot with the message openAiChatWithMessage(message); // Clear the search input input.value ; toggleClearButton(); } } } function clearAiSearch() { const input document.getElementById(aiSearchInput); input.value ; input.focus(); toggleClearButton(); // Clear the deployment search filter if (dashboard && dashboard.filterDeploymentsBySearch) { dashboard.filterDeploymentsBySearch(); } } function toggleClearButton() { const input document.getElementById(aiSearchInput); const clearBtn document.getElementById(searchClearBtn); if (input.value.trim()) { clearBtn.style.display flex; } else { clearBtn.style.display none; } } // Handle real-time search filtering function handleAiSearchInput() { const input document.getElementById(aiSearchInput); const searchQuery input.value.trim(); toggleClearButton(); // Filter deployments in real-time if (dashboard && dashboard.filterDeploymentsBySearch) { dashboard.filterDeploymentsBySearch(searchQuery); } } // Initialize on load document.addEventListener(DOMContentLoaded, function() { // Check URL hash and restore correct page on page load/refresh const hash window.location.hash.slice(1); // Remove # from hash if (hash) { // If theres a hash (e.g., #overview), switch to that page switchPage(hash); } // Add hashchange listener to handle browser back/forward buttons window.addEventListener(hashchange, function() { const newHash window.location.hash.slice(1); if (newHash) { switchPage(newHash); } }); // Add AI search input handler const aiSearchInput document.getElementById(aiSearchInput); if (aiSearchInput) { aiSearchInput.addEventListener(input, function() { toggleClearButton(); handleAiSearchInput(); }); aiSearchInput.addEventListener(focus, function() { this.parentElement.classList.add(focused); }); aiSearchInput.addEventListener(blur, function() { this.parentElement.classList.remove(focused); }); } // Close AI chat when clicking outside const aiChatModal document.getElementById(aiChatModal); if (aiChatModal) { aiChatModal.addEventListener(click, function(e) { if (e.target this) { closeAiChat(); } }); } }); /script> !-- GA4 Analytics Module --> script srcjs/ga4-analytics.js?v20251202v25>/script>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Thu, 11 Dec 2025 08:01:19 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: keep-aliveServer: cloudflareNel: {report_to:cf-nel,success_fraction:0.0,max_age:604800}Last-Modified: Tue, 02 Dec 2025 12:01:20 GMTX-Frame-Options: SAMEORIGINX-Content-Type-Options: nosniffX-XSS-Protection: 1; modeblockcf-cache-status: DYNAMICReport-To: {group:cf-nel,max_age:604800,endpoints:{url:https://a.nel.cloudflare.com/report/v4?swemxmkSjqACaNGzCao3XUQwcMA9jRa7L%2BVZUrmYa7iNWsN6MTHe6YIYEdwExKhQc5wnuz5CjZOWbxVtAdtPjE8Jnory91FeFA80%3D}}CF-RAY: 9ac3740f3dcdfeff-PDXalt-svc: h3:443; ma86400 !DOCTYPE html>html langen>head> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> meta http-equivCache-Control contentno-cache, no-store, must-revalidate> meta http-equivPragma contentno-cache> meta http-equivExpires content0> title>AI SEO - Platform Dashboard/title> link relstylesheet hrefcss/styles.css?v20251120v10> link relstylesheet hrefcss/legend.css?v20251119v11> link relstylesheet hrefcss/analytics.css?v20251120v7> link relicon hrefdata:image/svg+xml,svg xmlns%22http://www.w3.org/2000/svg%22 viewBox%220 0 100 100%22>text y%22.9em%22 font-size%2290%22>🤖/text>/svg>> !-- Material Icons --> link relstylesheet hrefhttps://fonts.googleapis.com/css2?familyMaterial+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200 /> !-- Chart.js for performance charts --> script srchttps://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js>/script>/head>body> !-- Top Navigation Bar --> div classtop-navbar> div classtop-navbar-left> button classmobile-menu-btn idmobileMenuBtn onclicktoggleSidebar()> span classmaterial-symbols-outlined>menu/span> /button> div classtop-logo> span classlogo-text>AI SEO/span> /div> /div> div classtop-navbar-center> div classai-search-bar> input typetext classai-search-input idaiSearchInput placeholderSearch deployments or ask AI... onkeypresshandleAiSearchKeyPress(event) /> button classsearch-clear-btn idsearchClearBtn onclickclearAiSearch() styledisplay: none;> span classmaterial-symbols-outlined>close/span> /button> /div> /div> div classtop-navbar-right> div classtop-user-menu> div classtop-user-avatar> span classmaterial-symbols-outlined>account_circle/span> /div> /div> /div> /div> !-- Sidebar Navigation --> div classsidebar idsidebar> div classsidebar-header> h2>AI SEO/h2> /div> nav classsidebar-nav> div classnav-section> div classnav-section-title>Dashboard/div> a href#deployments classnav-item active data-pagedeployments onclickswitchPage(deployments)> span classnav-icon material-symbols-outlined>rocket_launch/span> span classnav-text>Website Deployments/span> /a> a href#overview classnav-item data-pageoverview onclickswitchPage(overview)> span classnav-icon material-symbols-outlined>dashboard/span> span classnav-text>Deployment Dashboard/span> /a> /div> div classnav-section> div classnav-section-title>SEO Tools/div> a href#keyword-research classnav-item data-pagekeyword-research onclickswitchPage(keyword-research)> span classnav-icon material-symbols-outlined>search/span> span classnav-text>Keyword Research/span> /a> a href#content-optimizer classnav-item data-pagecontent-optimizer onclickswitchPage(content-optimizer)> span classnav-icon material-symbols-outlined>edit_note/span> span classnav-text>Content Optimizer/span> /a> a href#competitor-analysis classnav-item data-pagecompetitor-analysis onclickswitchPage(competitor-analysis)> span classnav-icon material-symbols-outlined>bar_chart/span> span classnav-text>Competitor Analysis/span> /a> a href#backlink-monitor classnav-item data-pagebacklink-monitor onclickswitchPage(backlink-monitor)> span classnav-icon material-symbols-outlined>link/span> span classnav-text>Backlink Monitor/span> /a> /div> div classnav-section> div classnav-section-title>Analytics/div> a href#performance classnav-item data-pageperformance onclickswitchPage(performance)> span classnav-icon material-symbols-outlined>speed/span> span classnav-text>Performance Metrics/span> /a> a href#rankings classnav-item data-pagerankings onclickswitchPage(rankings)> span classnav-icon material-symbols-outlined>analytics/span> span classnav-text>Ranking Tracker/span> /a> /div> div classnav-section> div classnav-section-title>Settings/div> a href#api-config classnav-item data-pageapi-config onclickswitchPage(api-config)> span classnav-icon material-symbols-outlined>key/span> span classnav-text>API Configuration/span> /a> /div> /nav> /div> !-- Sidebar Overlay for Mobile --> div classsidebar-overlay idsidebarOverlay onclickcloseMobileSidebar()>/div> !-- Main Content Area --> div classmain-content idmainContent> !-- Page: Website Deployments --> div classpage-content active idpage-deployments> !-- Header --> div classpage-header> div> h1>Website Deployments/h1> p classpage-description>Monitor and manage automated website deployments with real-time status tracking/p> /div> /div> !-- Statistics Cards --> div classstats-container idstatsContainer> div classstat-card total> div classnumber idstatTotal>0/div> div classlabel>Total Deployments/div> /div> div classstat-card completed> div classnumber idstatCompleted>0/div> div classlabel>Completed/div> /div> div classstat-card in-progress> div classnumber idstatInProgress>0/div> div classlabel>In Progress/div> /div> div classstat-card pending> div classnumber idstatPending>0/div> div classlabel>Pending/div> /div> div classstat-card failed> div classnumber idstatFailed>0/div> div classlabel>Failed/div> /div> /div> !-- Filters --> div classfilters> div classfilter-buttons> button classfilter-btn active data-filterall onclickdashboard.setFilter(all)> All (span idfilterCountAll>0/span>) /button> button classfilter-btn data-filtercompleted onclickdashboard.setFilter(completed)> Completed (span idfilterCountCompleted>0/span>) /button> button classfilter-btn data-filterin_progress onclickdashboard.setFilter(in_progress)> In Progress (span idfilterCountInProgress>0/span>) /button> button classfilter-btn data-filterpending onclickdashboard.setFilter(pending)> Pending (span idfilterCountPending>0/span>) /button> button classfilter-btn data-filterfailed onclickdashboard.setFilter(failed)> Failed (span idfilterCountFailed>0/span>) /button> /div> div classfilter-controls> div classfilter-group> label classfilter-label> span classmaterial-symbols-outlined>swap_vert/span> Sort by: /label> select idsortBy onchangedashboard.changeSorting() classfilter-select> option valueupdated_at_desc>Newest Updated/option> option valueupdated_at_asc>Oldest Updated/option> option valuecreated_at_desc>Newest Created/option> option valuecreated_at_asc>Oldest Created/option> option valuedomain_asc>Domain A-Z/option> option valuedomain_desc>Domain Z-A/option> /select> /div> div classauto-refresh-toggle> label> input typecheckbox idautoRefreshToggle checked onchangedashboard.toggleAutoRefresh()> Auto-refresh /label> select idrefreshInterval onchangedashboard.changeRefreshInterval() classrefresh-interval-select> option value3000>3s/option> option value5000>5s/option> option value10000 selected>10s/option> option value30000>30s/option> option value60000>1m/option> option valuecustom>Custom.../option> /select> input typenumber idcustomInterval classcustom-interval-input placeholderSeconds min1 max3600 styledisplay: none; onchangedashboard.setCustomInterval()> /div> /div> /div> !-- Deployment List --> div classdeployment-list iddeploymentList> div classloading> div classspinner>/div> Loading deployments... /div> /div> !-- Pagination Controls --> div classpagination idpaginationControls styledisplay: none;> !-- Pagination will be dynamically generated --> /div> !-- Last Update --> div classlast-update-footer> Last updated: span idlastUpdate>Never/span> /div> /div> !-- End Page: Deployments --> !-- Page: Coming Soon Template (for other pages) --> div classpage-content idpage-overview> !-- Deployment Statistics Section --> div classdeployment-stats-section> div classstats-header> h3> span classmaterial-symbols-outlined>bar_chart/span> Deployment Statistics div classinfo-tooltip idtooltip-deployment-stats> div classtooltip-title>Deployment Statistics Overview/div> div classtooltip-content> Comprehensive metrics tracking your website deployment pipeline performance and outcomes. /div> div classtooltip-formula> strong>• Total Deployments:/strong> Total number of all deployments since the beginningbr> strong>• Completed:/strong> Deployments that successfully finished all stagesbr> strong>• In Progress:/strong> Deployments currently being processedbr> strong>• Pending:/strong> Deployments queued and waiting to startbr> strong>• Failed:/strong> Deployments that encountered errors (check logs for details)br> strong>• Success Rate:/strong> Percentage of deployments that completed successfully /div> div classtooltip-example> These metrics help you monitor deployment pipeline health, identify bottlenecks, and track performance trends. /div> /div> /h3> /div> !-- Summary Cards --> div classstats-grid> div classstat-card total> div classnumber idoverviewTotalDeployments>-/div> div classlabel>Total Deployments/div> /div> div classstat-card completed> div classnumber idoverviewCompletedDeployments>-/div> div classlabel>Completed/div> /div> div classstat-card in-progress> div classnumber idoverviewInProgressDeployments>-/div> div classlabel>In Progress/div> /div> div classstat-card pending> div classnumber idoverviewPendingDeployments>-/div> div classlabel>Pending/div> /div> div classstat-card failed> div classnumber idoverviewFailedDeployments>-/div> div classlabel>Failed/div> /div> div classstat-card success-rate> div classnumber idoverviewSuccessRate>-/div> div classlabel>Success Rate/div> /div> /div> !-- Period Selector for Charts --> div classoverview-period-selector-container> div classstats-period-selector> select idoverviewStatsPeriod onchangedashboard.loadOverviewStats() classstats-period-select> option value24hours>Last 24 Hours/option> option valueweek selected>Last 7 Days/option> option valuemonth>Last 28 Days/option> option valuecustom>Custom Period/option> /select> div classstats-custom-dates idoverviewCustomDates styledisplay: none;> input typedate idoverviewStartDate /> span>to/span> input typedate idoverviewEndDate /> button onclickdashboard.applyCustomOverviewPeriod() classstats-apply-btn>Apply/button> /div> /div> /div> !-- Charts --> div idoverviewStatsContent> div classloading> div classspinner>/div> Loading statistics... /div> /div> /div> !-- Aggregate Search Performance Section --> div classdeployment-stats-section stylemargin-top: 30px;> div classstats-header> h3> span classmaterial-symbols-outlined>analytics/span> Search Performance Analytics div classinfo-tooltip idtooltip-aggregate-performance> div classtooltip-title>Search Performance Analytics/div> div classtooltip-content> Comprehensive Google Search Console performance metrics across all completed deployments. Includes aggregate metrics, timeline trends, and individual domain performance analysis. /div> div classtooltip-formula> strong>• Total Clicks:/strong> Sum of all clicks across all domainsbr> strong>• Total Impressions:/strong> Sum of all impressions across all domainsbr> strong>• Average CTR:/strong> Average click-through rate across all domainsbr> strong>• Average Position:/strong> Average search position across all domainsbr> strong>• Domains with Data:/strong> Number of domains with GSC data availablebr> strong>• Individual Metrics:/strong> Per-domain performance timeline charts /div> div classtooltip-example> This section provides both aggregate insights and individual domain performance, helping you monitor overall SEO trends and identify top performers in your portfolio. /div> /div> /h3> /div> !-- Aggregate Performance Content --> div idaggregatePerformanceContent> div classloading> div classspinner>/div> Loading aggregate performance data... /div> /div> /div> !-- Aggregate Google Analytics Section --> div idgoogle-analytics-section classdeployment-stats-section analytics-section stylemargin-top: 30px;> div classstats-header> h3> span classmaterial-symbols-outlined>bar_chart/span> Google Analytics Performance div classinfo-tooltip idtooltip-aggregate-analytics> div classtooltip-title>Google Analytics Performance/div> div classtooltip-content> Comprehensive Google Analytics 4 (GA4) metrics across all deployed domains. Includes user behavior, session data, pageview analytics, and engagement metrics. /div> div classtooltip-formula> strong>• Total Users:/strong> Sum of all users across all domainsbr> strong>• New Users:/strong> Sum of new users across all domainsbr> strong>• Total Sessions:/strong> Sum of all sessions across all domainsbr> strong>• Total Pageviews:/strong> Sum of all pageviews across all domainsbr> strong>• Avg Bounce Rate:/strong> Average bounce rate percentagebr> strong>• Avg Session Duration:/strong> Average time users spend per sessionbr> strong>• Individual Metrics:/strong> Per-domain performance timeline charts /div> div classtooltip-example> This section provides both aggregate insights and individual domain analytics, helping you understand user behavior and engagement patterns across your entire portfolio. /div> /div> /h3> /div> !-- Aggregate Analytics Content --> div idaggregateAnalyticsContent> div classloading> div classspinner>/div> Loading Google Analytics data... /div> /div> /div> /div> div classpage-content idpage-keyword-research> div classcoming-soon> div classcoming-soon-icon>🔍/div> h2>Keyword Research/h2> p>AI-powered keyword research and opportunity discovery./p> div classcoming-soon-features> div classfeature-item>✓ Keyword suggestions/div> div classfeature-item>✓ Search volume analysis/div> div classfeature-item>✓ Competition analysis/div> div classfeature-item>✓ Long-tail keywords/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-content-optimizer> div classcoming-soon> div classcoming-soon-icon>✍️/div> h2>Content Optimizer/h2> p>Optimize your content for better search engine rankings./p> div classcoming-soon-features> div classfeature-item>✓ Content analysis/div> div classfeature-item>✓ SEO score/div> div classfeature-item>✓ Improvement suggestions/div> div classfeature-item>✓ Readability check/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-competitor-analysis> div classcoming-soon> div classcoming-soon-icon>🎯/div> h2>Competitor Analysis/h2> p>Analyze your competitors and find opportunities./p> div classcoming-soon-features> div classfeature-item>✓ Competitor tracking/div> div classfeature-item>✓ Keyword gaps/div> div classfeature-item>✓ Content gaps/div> div classfeature-item>✓ Backlink comparison/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-backlink-monitor> div classcoming-soon> div classcoming-soon-icon>🔗/div> h2>Backlink Monitor/h2> p>Track and manage your backlink profile./p> div classcoming-soon-features> div classfeature-item>✓ Backlink discovery/div> div classfeature-item>✓ Link quality analysis/div> div classfeature-item>✓ New/lost links tracking/div> div classfeature-item>✓ Disavow file generator/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-performance> div classcoming-soon> div classcoming-soon-icon>⚡/div> h2>Performance Metrics/h2> p>Monitor website performance and Core Web Vitals./p> div classcoming-soon-features> div classfeature-item>✓ Core Web Vitals/div> div classfeature-item>✓ Page speed insights/div> div classfeature-item>✓ Mobile performance/div> div classfeature-item>✓ Performance trends/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-rankings> div classcoming-soon> div classcoming-soon-icon>📊/div> h2>Ranking Tracker/h2> p>Track your keyword rankings across search engines./p> div classcoming-soon-features> div classfeature-item>✓ Daily rank tracking/div> div classfeature-item>✓ Multi-location tracking/div> div classfeature-item>✓ Competitor rankings/div> div classfeature-item>✓ Rank history/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> div classpage-content idpage-api-config> div classcoming-soon> div classcoming-soon-icon>🔑/div> h2>API Configuration/h2> p>Manage API keys and integration settings./p> div classcoming-soon-features> div classfeature-item>✓ Google API settings/div> div classfeature-item>✓ Cloudflare settings/div> div classfeature-item>✓ Domain registrar settings/div> div classfeature-item>✓ Server configuration/div> /div> span classcoming-soon-badge>Coming Soon/span> /div> /div> /div> !-- AI Chatbot Modal --> div classai-chat-modal idaiChatModal> div classai-chat-container> div classai-chat-header> div classai-chat-title> span classmaterial-symbols-outlined>smart_toy/span> h3>AI SEO Assistant/h3> /div> button classai-chat-close onclickcloseAiChat()> span classmaterial-symbols-outlined>close/span> /button> /div> div classai-chat-messages idaiChatMessages> div classai-message> span classmaterial-symbols-outlined>smart_toy/span> div classmessage-content> p>Hi! Im your AI SEO Assistant. How can I help you today?/p> /div> /div> /div> div classai-chat-input-container> input typetext classai-chat-input idaiChatInput placeholderAsk me anything about SEO... onkeypresshandleChatKeyPress(event) /> button classai-chat-send onclicksendChatMessage()> span classmaterial-symbols-outlined>send/span> /button> /div> /div> /div> !-- Logs Modal --> div classmodal idlogModal> div classmodal-content> div classmodal-header> div> h2>Deployment Logsspan classmodal-domain idmodalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closeLogsModal()>×/button> /div> div classmodal-body idlogContent> div classloading> div classspinner>/div> Loading logs... /div> /div> /div> /div> !-- Verification Modal --> div classmodal idverifyModal> div classmodal-content> div classmodal-header> div> h2>Deployment Verificationspan classmodal-domain idverifyModalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closeVerifyModal()>×/button> /div> div classmodal-body idverifyContent> div classloading> div classspinner>/div> Running verification... /div> /div> /div> /div> !-- Indexing Modal --> div classmodal idindexingModal> div classmodal-content> div classmodal-header> div> h2>Google Indexing Statusspan classmodal-domain idindexingModalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closeIndexingModal()>×/button> /div> div classmodal-body idindexingContent> div classloading> div classspinner>/div> Checking indexing status... /div> /div> /div> /div> !-- Performance Modal --> div classmodal idperformanceModal> div classmodal-content> div classmodal-header> div> h2>Search Performance Dataspan classmodal-domain idperformanceModalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closePerformanceModal()>×/button> /div> div classmodal-body idperformanceContent> div classloading> div classspinner>/div> Loading performance data... /div> /div> /div> /div> !-- Google Analytics Modal --> div classmodal idanalyticsModal> div classmodal-content> div classmodal-header> div> h2>Google Analytics Dataspan classmodal-domain idanalyticsModalDomain>/span>/h2> /div> button classmodal-close onclickdashboard.closeAnalyticsModal()>×/button> /div> div classmodal-body idanalyticsContent> div classloading> div classspinner>/div> Loading analytics data... /div> /div> /div> /div> script srcjs/dashboard.js?v20251202v02>/script> script> // Tooltip functionality function toggleTooltip(event, tooltipId) { event.stopPropagation(); const tooltip document.getElementById(tooltipId); // Close all other tooltips document.querySelectorAll(.info-tooltip).forEach(t > { if (t.id ! tooltipId) { t.classList.remove(show); } }); // Toggle current tooltip const isShowing tooltip.classList.toggle(show); // Adjust position if tooltip goes off-screen (desktop only) if (isShowing && window.innerWidth > 768) { setTimeout(() > { const rect tooltip.getBoundingClientRect(); const viewportWidth window.innerWidth; // Check if tooltip goes off right edge if (rect.right > viewportWidth - 20) { const overflow rect.right - viewportWidth + 20; tooltip.style.left `calc(50% - ${overflow}px)`; } // Check if tooltip goes off left edge if (rect.left 20) { const overflow 20 - rect.left; tooltip.style.left `calc(50% + ${overflow}px)`; } }, 10); } else if (!isShowing) { // Reset position when hiding tooltip.style.left ; } } // Close tooltips when clicking outside document.addEventListener(click, function(event) { if (!event.target.closest(.info-tooltip-container)) { document.querySelectorAll(.info-tooltip).forEach(t > { t.classList.remove(show); t.style.left ; // Reset position }); } }); // Close tooltips on scroll (prevent floating tooltips) let scrollTimeout; window.addEventListener(scroll, function() { clearTimeout(scrollTimeout); scrollTimeout setTimeout(() > { document.querySelectorAll(.info-tooltip.show).forEach(t > { t.classList.remove(show); t.style.left ; }); }, 100); }, true); // Page switching functionality function switchPage(pageName) { // Hide all pages document.querySelectorAll(.page-content).forEach(page > { page.classList.remove(active); }); // Remove active class from all nav items document.querySelectorAll(.nav-item).forEach(item > { item.classList.remove(active); }); // Show selected page const selectedPage document.getElementById(page- + pageName); if (selectedPage) { selectedPage.classList.add(active); } // Add active class to selected nav item const selectedNav document.querySelector(`.nav-itemdata-page${pageName}`); if (selectedNav) { selectedNav.classList.add(active); } // Load data for specific pages if (pageName overview) { dashboard.loadOverviewStats(); dashboard.loadAggregatePerformance(); } // Close mobile sidebar after selecting page if (window.innerWidth 768) { closeMobileSidebar(); } // Prevent default anchor behavior return false; } // Sidebar toggle functionality (desktop/mobile aware) function toggleSidebar() { const sidebar document.getElementById(sidebar); const mainContent document.getElementById(mainContent); const overlay document.getElementById(sidebarOverlay); // Check if mobile view if (window.innerWidth 768) { // On mobile: toggle sidebar overlay sidebar.classList.toggle(mobile-open); overlay.classList.toggle(active); } else { // On desktop: collapse/expand sidebar.classList.toggle(collapsed); mainContent.classList.toggle(sidebar-collapsed); } } // Mobile sidebar toggle function toggleMobileSidebar() { const sidebar document.getElementById(sidebar); const overlay document.getElementById(sidebarOverlay); const menuBtn document.getElementById(mobileMenuBtn); sidebar.classList.toggle(mobile-open); overlay.classList.toggle(active); menuBtn.classList.toggle(active); } // Close mobile sidebar function closeMobileSidebar() { const sidebar document.getElementById(sidebar); const overlay document.getElementById(sidebarOverlay); const menuBtn document.getElementById(mobileMenuBtn); sidebar.classList.remove(mobile-open); overlay.classList.remove(active); menuBtn.classList.remove(active); } // AI Chat functions function toggleAiChat() { const modal document.getElementById(aiChatModal); modal.classList.toggle(active); // Focus modal input when opening if (modal.classList.contains(active)) { setTimeout(() > { document.getElementById(aiChatInput).focus(); }, 100); } } function openAiChatWithMessage(message) { const modal document.getElementById(aiChatModal); modal.classList.add(active); // Clear any previous messages except the initial AI greeting const messagesContainer document.getElementById(aiChatMessages); messagesContainer.innerHTML ` div classai-message> span classmaterial-symbols-outlined>smart_toy/span> div classmessage-content> p>Hi! Im your AI SEO Assistant. How can I help you today?/p> /div> /div> `; if (message && message.trim()) { // Add the users message const userMessageDiv document.createElement(div); userMessageDiv.className user-message; userMessageDiv.innerHTML ` div classmessage-content> p>${message}/p> /div> span classmaterial-symbols-outlined>person/span> `; messagesContainer.appendChild(userMessageDiv); messagesContainer.scrollTop messagesContainer.scrollHeight; // Simulate AI response (placeholder) setTimeout(() > { const aiMessageDiv document.createElement(div); aiMessageDiv.className ai-message; aiMessageDiv.innerHTML ` span classmaterial-symbols-outlined>smart_toy/span> div classmessage-content> p>You asked: ${message}/p> p>This is a placeholder response. The AI assistant feature is coming soon!/p> /div> `; messagesContainer.appendChild(aiMessageDiv); messagesContainer.scrollTop messagesContainer.scrollHeight; }, 500); } // Focus modal input setTimeout(() > { document.getElementById(aiChatInput).focus(); }, 100); } function closeAiChat() { document.getElementById(aiChatModal).classList.remove(active); } function sendChatMessage() { const input document.getElementById(aiChatInput); const message input.value.trim(); if (!message) return; // Add user message const messagesContainer document.getElementById(aiChatMessages); const userMessageDiv document.createElement(div); userMessageDiv.className user-message; userMessageDiv.innerHTML ` div classmessage-content> p>${message}/p> /div> span classmaterial-symbols-outlined>person/span> `; messagesContainer.appendChild(userMessageDiv); // Clear input input.value ; // Scroll to bottom messagesContainer.scrollTop messagesContainer.scrollHeight; // Simulate AI response (placeholder) setTimeout(() > { const aiMessageDiv document.createElement(div); aiMessageDiv.className ai-message; aiMessageDiv.innerHTML ` span classmaterial-symbols-outlined>smart_toy/span> div classmessage-content> p>This is a placeholder response. The AI assistant feature is coming soon!/p> /div> `; messagesContainer.appendChild(aiMessageDiv); messagesContainer.scrollTop messagesContainer.scrollHeight; }, 500); } function handleChatKeyPress(event) { if (event.key Enter) { sendChatMessage(); } } // AI Search Bar functions function handleAiSearchKeyPress(event) { if (event.key Enter) { const input document.getElementById(aiSearchInput); const message input.value.trim(); if (message) { // Open chatbot with the message openAiChatWithMessage(message); // Clear the search input input.value ; toggleClearButton(); } } } function clearAiSearch() { const input document.getElementById(aiSearchInput); input.value ; input.focus(); toggleClearButton(); // Clear the deployment search filter if (dashboard && dashboard.filterDeploymentsBySearch) { dashboard.filterDeploymentsBySearch(); } } function toggleClearButton() { const input document.getElementById(aiSearchInput); const clearBtn document.getElementById(searchClearBtn); if (input.value.trim()) { clearBtn.style.display flex; } else { clearBtn.style.display none; } } // Handle real-time search filtering function handleAiSearchInput() { const input document.getElementById(aiSearchInput); const searchQuery input.value.trim(); toggleClearButton(); // Filter deployments in real-time if (dashboard && dashboard.filterDeploymentsBySearch) { dashboard.filterDeploymentsBySearch(searchQuery); } } // Initialize on load document.addEventListener(DOMContentLoaded, function() { // Check URL hash and restore correct page on page load/refresh const hash window.location.hash.slice(1); // Remove # from hash if (hash) { // If theres a hash (e.g., #overview), switch to that page switchPage(hash); } // Add hashchange listener to handle browser back/forward buttons window.addEventListener(hashchange, function() { const newHash window.location.hash.slice(1); if (newHash) { switchPage(newHash); } }); // Add AI search input handler const aiSearchInput document.getElementById(aiSearchInput); if (aiSearchInput) { aiSearchInput.addEventListener(input, function() { toggleClearButton(); handleAiSearchInput(); }); aiSearchInput.addEventListener(focus, function() { this.parentElement.classList.add(focused); }); aiSearchInput.addEventListener(blur, function() { this.parentElement.classList.remove(focused); }); } // Close AI chat when clicking outside const aiChatModal document.getElementById(aiChatModal); if (aiChatModal) { aiChatModal.addEventListener(click, function(e) { if (e.target this) { closeAiChat(); } }); } }); /script> !-- GA4 Analytics Module --> script srcjs/ga4-analytics.js?v20251202v25>/script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]