diff --git a/public/.well-known/security.txt b/public/.well-known/security.txt deleted file mode 100644 index 526ccf81..00000000 --- a/public/.well-known/security.txt +++ /dev/null @@ -1,36 +0,0 @@ -# Security Policy - -Contact: mailto:security@agenticgovernance.digital -Expires: 2026-10-09T00:00:00.000Z -Preferred-Languages: en -Canonical: https://agenticgovernance.digital/.well-known/security.txt - -# Encryption -# Please use PGP encryption for sensitive security reports -# Public key available at: https://agenticgovernance.digital/.well-known/pgp-key.txt - -# Policy -# We take security seriously and appreciate responsible disclosure -# Please allow up to 48 hours for initial response -# We aim to patch critical vulnerabilities within 7 days - -# Scope -# In scope: -# - XSS, CSRF, SQL/NoSQL injection -# - Authentication/authorization bypass -# - Sensitive data exposure -# - Server-side vulnerabilities - -# Out of scope: -# - Social engineering -# - Physical security -# - Denial of Service (DoS/DDoS) -# - Self-XSS -# - Clickjacking on pages without sensitive actions - -# Acknowledgments -# https://agenticgovernance.digital/security-researchers - -# Hall of Fame -# Security researchers who responsibly disclosed vulnerabilities: -# (None yet - be the first!) diff --git a/public/docs/research-governance-roi-case-study.pdf b/public/docs/research-governance-roi-case-study.pdf deleted file mode 100644 index 7900466e..00000000 Binary files a/public/docs/research-governance-roi-case-study.pdf and /dev/null differ diff --git a/public/images/tractatus-icon-new.svg b/public/images/tractatus-icon-new.svg deleted file mode 100644 index c41e3123..00000000 --- a/public/images/tractatus-icon-new.svg +++ /dev/null @@ -1,107 +0,0 @@ - - diff --git a/public/images/tractatus-icon.svg b/public/images/tractatus-icon.svg deleted file mode 100644 index ad0423d3..00000000 --- a/public/images/tractatus-icon.svg +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/public/js/admin/newsletter-management.js b/public/js/admin/newsletter-management.js deleted file mode 100644 index 10524914..00000000 --- a/public/js/admin/newsletter-management.js +++ /dev/null @@ -1,286 +0,0 @@ -/** - * Newsletter Management - Admin Interface - */ - -let currentPage = 1; -const perPage = 50; -let currentFilters = { - status: 'active', - verified: 'all' -}; - -/** - * Initialize page - */ -async function init() { - // Event listeners (navbar handles admin name and logout now) - document.getElementById('refresh-btn').addEventListener('click', () => loadAll()); - document.getElementById('export-btn').addEventListener('click', exportSubscribers); - document.getElementById('filter-status').addEventListener('change', handleFilterChange); - document.getElementById('filter-verified').addEventListener('change', handleFilterChange); - document.getElementById('prev-page').addEventListener('click', () => changePage(-1)); - document.getElementById('next-page').addEventListener('click', () => changePage(1)); - - // Load data - await loadAll(); -} - -/** - * Load all data - */ -async function loadAll() { - await Promise.all([ - loadStats(), - loadSubscribers() - ]); -} - -/** - * Load statistics - */ -async function loadStats() { - try { - const token = localStorage.getItem('admin_token'); - const response = await fetch('/api/newsletter/admin/stats', { - headers: { - 'Authorization': `Bearer ${token}` - } - }); - - if (!response.ok) throw new Error('Failed to load stats'); - - const data = await response.json(); - const stats = data.stats; - - document.getElementById('stat-total').textContent = stats.total || 0; - document.getElementById('stat-active').textContent = stats.active || 0; - document.getElementById('stat-verified').textContent = stats.verified || 0; - document.getElementById('stat-recent').textContent = stats.recent_30_days || 0; - } catch (error) { - console.error('Error loading stats:', error); - } -} - -/** - * Load subscribers list - */ -async function loadSubscribers() { - try { - const token = localStorage.getItem('admin_token'); - const skip = (currentPage - 1) * perPage; - - const params = new URLSearchParams({ - limit: perPage, - skip, - active: currentFilters.status === 'all' ? null : currentFilters.status === 'active', - verified: currentFilters.verified === 'all' ? null : currentFilters.verified === 'verified' - }); - - // Remove null values - for (const [key, value] of [...params.entries()]) { - if (value === 'null' || value === null) { - params.delete(key); - } - } - - const response = await fetch(`/api/newsletter/admin/subscriptions?${params}`, { - headers: { - 'Authorization': `Bearer ${token}` - } - }); - - if (!response.ok) throw new Error('Failed to load subscribers'); - - const data = await response.json(); - renderSubscribers(data.subscriptions); - updatePagination(data.pagination); - } catch (error) { - console.error('Error loading subscribers:', error); - document.getElementById('subscribers-table').innerHTML = ` -
'); - html = `
${ html }
`; - - // Line breaks - html = html.replace(/\n/g, '- ${escapeHtml(excerpt)} -
- - -${escapeHtml(message)}
-JavaScript version: ${version}
Handler includes: window.location.href
Downloads should work now!
-JavaScript version loaded: ${version}
Expected: ${expected}
Has new handler: ${hasNewHandler ? '✅ YES' : '❌ NO'}
-Your browser is serving cached files!
-${js.substring(js.indexOf('onclick='), js.indexOf('onclick=') + 200).replace(//g, '>')}
- ${err.message}
-Estimated timing based on current performance data
-- This shows the framework's governance components working together to validate and process each request. Each component has a specific role in ensuring safe, values-aligned AI operation. -
-- Note: Timing values are estimates based on current performance statistics and may vary in production. -
-- Prices are automatically converted from NZD. Your selection is saved for future visits. -
-${metaText}
` : ''} - ${document.sections ? `${document.sections.length} sections
` : ''} -${section.excerpt}
-Loading document...
-Version ${doc.metadata.version}
- ` : ''} -Created: ${new Date(doc.created_at).toLocaleDateString()}
` : ''} - ${doc.updated_at ? `Updated: ${new Date(doc.updated_at).toLocaleDateString()}
` : ''} -Loading document...
-${error.message}
-No documents found
-Try adjusting your search terms or filters
-${doc.metadata?.description || 'Framework documentation'}
-${message}
-${faq.answer.replace(/\n\n/g, '
').replace(/\n/g, '
')}
${faq.answer.replace(/\n\n/g, '
').replace(/\n/g, '
')}
${faq.answer.replace(/\n\n/g, '
').replace(/\n/g, '
')}
${faq.answer.replace(/\n\n/g, '
').replace(/\n/g, '
')}
Failed to load statistics
-Please try again later or contact support if the problem persists.
-Update Available
-- A new version of Tractatus Framework is available - ${versionInfo.serverVersion ? `(v${versionInfo.serverVersion})` : ''} -
- ${versionInfo.changelog ? ` -Install Tractatus App
-- Add to your home screen for quick access and offline support -
-Already Installed
-- Tractatus is already installed on your device. You're using it right now! -
-Installation Not Available
-- Your browser doesn't currently support app installation. Try using Chrome, Edge, or Safari on a supported device. -
-