diff --git a/src/frontend/index.html b/src/frontend/index.html index 211c1c4..233abf5 100644 --- a/src/frontend/index.html +++ b/src/frontend/index.html @@ -2,9 +2,95 @@ - - AeThex Passport - Domain Verification + + + AeThex Connect - Secure, Open-Source Communication Platform + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/frontend/mockup/components/HeroVideo.css b/src/frontend/mockup/components/HeroVideo.css new file mode 100644 index 0000000..9cad1d2 --- /dev/null +++ b/src/frontend/mockup/components/HeroVideo.css @@ -0,0 +1,70 @@ +/* ============================================ + AETHEX CONNECT - HERO VIDEO CANVAS + ============================================ */ + +.hero-video-container { + position: absolute; + inset: 0; + overflow: hidden; + z-index: 0; +} + +.hero-video-canvas { + width: 100%; + height: 100%; + background: #0a0a0a; +} + +.hero-video-overlay { + position: absolute; + inset: 0; + background: + radial-gradient(ellipse at center, transparent 0%, rgba(10, 10, 10, 0.3) 50%, rgba(10, 10, 10, 0.8) 100%), + linear-gradient(180deg, transparent 0%, transparent 50%, rgba(10, 10, 10, 0.9) 100%); + pointer-events: none; +} + +.hero-video-toggle { + position: absolute; + bottom: 20px; + right: 20px; + width: 40px; + height: 40px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.1); + border: 1px solid rgba(255, 255, 255, 0.2); + color: #fff; + font-size: 14px; + cursor: pointer; + opacity: 0.5; + transition: all 0.3s ease; + display: flex; + align-items: center; + justify-content: center; + z-index: 10; +} + +.hero-video-toggle:hover { + opacity: 1; + background: rgba(255, 255, 255, 0.2); + transform: scale(1.1); +} + +/* ============================================ + SCANLINES OVERLAY (Optional CRT effect) + ============================================ */ + +.hero-video-container::after { + content: ''; + position: absolute; + inset: 0; + background: repeating-linear-gradient( + 0deg, + transparent, + transparent 2px, + rgba(0, 0, 0, 0.1) 2px, + rgba(0, 0, 0, 0.1) 4px + ); + pointer-events: none; + opacity: 0.3; +} diff --git a/src/frontend/mockup/components/HeroVideo.jsx b/src/frontend/mockup/components/HeroVideo.jsx new file mode 100644 index 0000000..d28de98 --- /dev/null +++ b/src/frontend/mockup/components/HeroVideo.jsx @@ -0,0 +1,251 @@ +import React, { useEffect, useRef, useState } from 'react'; +import './HeroVideo.css'; + +export default function HeroVideo() { + const canvasRef = useRef(null); + const [isPlaying, setIsPlaying] = useState(true); + + useEffect(() => { + const canvas = canvasRef.current; + if (!canvas) return; + + const ctx = canvas.getContext('2d'); + let animationId; + let particles = []; + let connections = []; + let time = 0; + + const resize = () => { + canvas.width = canvas.offsetWidth * window.devicePixelRatio; + canvas.height = canvas.offsetHeight * window.devicePixelRatio; + ctx.scale(window.devicePixelRatio, window.devicePixelRatio); + }; + + const colors = { + foundation: '#ff0000', + corporation: '#0066ff', + labs: '#ffa500' + }; + + class Particle { + constructor() { + this.reset(); + } + + reset() { + this.x = Math.random() * canvas.offsetWidth; + this.y = Math.random() * canvas.offsetHeight; + this.vx = (Math.random() - 0.5) * 0.5; + this.vy = (Math.random() - 0.5) * 0.5; + this.radius = Math.random() * 2 + 1; + this.color = Object.values(colors)[Math.floor(Math.random() * 3)]; + this.alpha = Math.random() * 0.5 + 0.3; + this.pulse = Math.random() * Math.PI * 2; + } + + update() { + this.x += this.vx; + this.y += this.vy; + this.pulse += 0.02; + + if (this.x < 0 || this.x > canvas.offsetWidth) this.vx *= -1; + if (this.y < 0 || this.y > canvas.offsetHeight) this.vy *= -1; + } + + draw() { + const pulseRadius = this.radius + Math.sin(this.pulse) * 0.5; + ctx.beginPath(); + ctx.arc(this.x, this.y, pulseRadius, 0, Math.PI * 2); + ctx.fillStyle = this.color; + ctx.globalAlpha = this.alpha; + ctx.fill(); + + // Glow effect + ctx.beginPath(); + ctx.arc(this.x, this.y, pulseRadius * 3, 0, Math.PI * 2); + const gradient = ctx.createRadialGradient( + this.x, this.y, 0, + this.x, this.y, pulseRadius * 3 + ); + gradient.addColorStop(0, this.color + '40'); + gradient.addColorStop(1, 'transparent'); + ctx.fillStyle = gradient; + ctx.fill(); + ctx.globalAlpha = 1; + } + } + + class Diamond { + constructor(x, y, size) { + this.x = x; + this.y = y; + this.size = size; + this.rotation = 0; + this.pulsePhase = 0; + } + + update() { + this.rotation += 0.005; + this.pulsePhase += 0.03; + } + + draw() { + const pulse = 1 + Math.sin(this.pulsePhase) * 0.05; + const s = this.size * pulse; + + ctx.save(); + ctx.translate(this.x, this.y); + ctx.rotate(this.rotation); + + // Outer diamond + ctx.beginPath(); + ctx.moveTo(0, -s); + ctx.lineTo(s, 0); + ctx.lineTo(0, s); + ctx.lineTo(-s, 0); + ctx.closePath(); + + const gradient = ctx.createLinearGradient(-s, -s, s, s); + gradient.addColorStop(0, colors.foundation); + gradient.addColorStop(0.5, colors.corporation); + gradient.addColorStop(1, colors.labs); + + ctx.strokeStyle = gradient; + ctx.lineWidth = 2; + ctx.stroke(); + + // Inner glow + ctx.beginPath(); + ctx.arc(0, 0, s * 0.3, 0, Math.PI * 2); + const coreGradient = ctx.createRadialGradient(0, 0, 0, 0, 0, s * 0.3); + coreGradient.addColorStop(0, 'rgba(255, 255, 255, 0.8)'); + coreGradient.addColorStop(0.5, 'rgba(255, 100, 50, 0.3)'); + coreGradient.addColorStop(1, 'transparent'); + ctx.fillStyle = coreGradient; + ctx.fill(); + + ctx.restore(); + } + } + + const init = () => { + resize(); + particles = []; + const particleCount = Math.min(80, Math.floor((canvas.offsetWidth * canvas.offsetHeight) / 10000)); + + for (let i = 0; i < particleCount; i++) { + particles.push(new Particle()); + } + }; + + const drawConnections = () => { + const maxDist = 150; + + for (let i = 0; i < particles.length; i++) { + for (let j = i + 1; j < particles.length; j++) { + const dx = particles[i].x - particles[j].x; + const dy = particles[i].y - particles[j].y; + const dist = Math.sqrt(dx * dx + dy * dy); + + if (dist < maxDist) { + const alpha = (1 - dist / maxDist) * 0.2; + ctx.beginPath(); + ctx.moveTo(particles[i].x, particles[i].y); + ctx.lineTo(particles[j].x, particles[j].y); + ctx.strokeStyle = `rgba(255, 255, 255, ${alpha})`; + ctx.lineWidth = 0.5; + ctx.stroke(); + } + } + } + }; + + const drawGrid = () => { + const gridSize = 60; + ctx.strokeStyle = 'rgba(255, 255, 255, 0.02)'; + ctx.lineWidth = 1; + + for (let x = 0; x < canvas.offsetWidth; x += gridSize) { + ctx.beginPath(); + ctx.moveTo(x, 0); + ctx.lineTo(x, canvas.offsetHeight); + ctx.stroke(); + } + + for (let y = 0; y < canvas.offsetHeight; y += gridSize) { + ctx.beginPath(); + ctx.moveTo(0, y); + ctx.lineTo(canvas.offsetWidth, y); + ctx.stroke(); + } + }; + + const drawScanline = () => { + const y = (time * 50) % (canvas.offsetHeight + 100) - 50; + const gradient = ctx.createLinearGradient(0, y - 50, 0, y + 50); + gradient.addColorStop(0, 'transparent'); + gradient.addColorStop(0.5, 'rgba(255, 100, 50, 0.1)'); + gradient.addColorStop(1, 'transparent'); + + ctx.fillStyle = gradient; + ctx.fillRect(0, y - 50, canvas.offsetWidth, 100); + }; + + const centralDiamond = new Diamond( + canvas.offsetWidth / 2, + canvas.offsetHeight / 2, + 80 + ); + + const animate = () => { + if (!isPlaying) return; + + ctx.fillStyle = 'rgba(10, 10, 10, 0.1)'; + ctx.fillRect(0, 0, canvas.offsetWidth, canvas.offsetHeight); + + drawGrid(); + drawScanline(); + + particles.forEach(p => { + p.update(); + p.draw(); + }); + + drawConnections(); + + centralDiamond.x = canvas.offsetWidth / 2; + centralDiamond.y = canvas.offsetHeight / 2; + centralDiamond.update(); + centralDiamond.draw(); + + time += 0.016; + animationId = requestAnimationFrame(animate); + }; + + init(); + animate(); + + window.addEventListener('resize', () => { + init(); + }); + + return () => { + cancelAnimationFrame(animationId); + window.removeEventListener('resize', init); + }; + }, [isPlaying]); + + return ( +
+ +
+ +
+ ); +} diff --git a/src/frontend/mockup/components/IntroAnimation.css b/src/frontend/mockup/components/IntroAnimation.css new file mode 100644 index 0000000..8c990f3 --- /dev/null +++ b/src/frontend/mockup/components/IntroAnimation.css @@ -0,0 +1,326 @@ +/* ============================================ + AETHEX CONNECT - CINEMATIC INTRO ANIMATION + ============================================ */ + +.intro-animation { + position: fixed; + inset: 0; + z-index: 10000; + background: #000; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + overflow: hidden; + transition: opacity 1s ease-out; +} + +.intro-animation.fade { + opacity: 0; + pointer-events: none; +} + +/* ============================================ + PARTICLE FIELD + ============================================ */ + +.intro-particles { + position: absolute; + inset: 0; + overflow: hidden; +} + +.intro-particle { + position: absolute; + left: var(--x); + top: var(--y); + width: var(--size); + height: var(--size); + background: var(--color); + border-radius: 50%; + opacity: 0; + animation: particle-float var(--duration) var(--delay) infinite; + box-shadow: 0 0 10px var(--color); +} + +@keyframes particle-float { + 0% { + opacity: 0; + transform: translateY(0) scale(0); + } + 10% { + opacity: 0.8; + transform: scale(1); + } + 90% { + opacity: 0.8; + } + 100% { + opacity: 0; + transform: translateY(-100px) scale(0); + } +} + +/* ============================================ + ANIMATED LOGO + ============================================ */ + +.intro-logo-container { + position: relative; + margin-bottom: 40px; + animation: logo-appear 1s ease-out forwards; +} + +@keyframes logo-appear { + 0% { + opacity: 0; + transform: scale(0.5) rotate(-180deg); + } + 60% { + transform: scale(1.1) rotate(10deg); + } + 100% { + opacity: 1; + transform: scale(1) rotate(0deg); + } +} + +.intro-logo { + filter: drop-shadow(0 0 30px rgba(255, 100, 50, 0.5)); +} + +/* Diamond outer - draw animation */ +.intro-diamond-outer { + stroke-dasharray: 1000; + stroke-dashoffset: 1000; + animation: draw-diamond 1.5s ease-out forwards; +} + +@keyframes draw-diamond { + to { + stroke-dashoffset: 0; + } +} + +/* Diamond inner - fade in */ +.intro-diamond-inner { + opacity: 0; + animation: fade-in 0.5s ease-out 1s forwards; +} + +/* Core pulse */ +.intro-core { + animation: core-pulse 1.5s ease-in-out infinite; +} + +@keyframes core-pulse { + 0%, 100% { + r: 15; + filter: drop-shadow(0 0 20px rgba(255, 100, 50, 0.8)); + } + 50% { + r: 18; + filter: drop-shadow(0 0 40px rgba(255, 100, 50, 1)); + } +} + +/* Orbiting dots */ +.intro-orbit { + transform-origin: 100px 100px; +} + +.intro-orbit-1 { + animation: orbit 3s linear infinite; +} + +.intro-orbit-2 { + animation: orbit 3s linear infinite; + animation-delay: -1s; +} + +.intro-orbit-3 { + animation: orbit 3s linear infinite; + animation-delay: -2s; +} + +@keyframes orbit { + 0% { + transform: rotate(0deg) translateX(70px) rotate(0deg); + } + 100% { + transform: rotate(360deg) translateX(70px) rotate(-360deg); + } +} + +/* ============================================ + TEXT REVEAL + ============================================ */ + +.intro-text-container { + text-align: center; + opacity: 0; + transform: translateY(20px); +} + +.intro-animation.text .intro-text-container, +.intro-animation.fade .intro-text-container { + animation: text-reveal 1s ease-out forwards; +} + +@keyframes text-reveal { + to { + opacity: 1; + transform: translateY(0); + } +} + +.intro-title { + font-size: 4rem; + font-weight: 700; + color: #fff; + margin: 0; + letter-spacing: 0.1em; + display: flex; + justify-content: center; + gap: 2px; +} + +.intro-letter { + display: inline-block; + opacity: 0; + transform: translateY(40px) rotateX(-90deg); + animation: letter-flip 0.6s ease-out forwards; + animation-delay: calc(var(--i) * 0.05s + 1.5s); + background: linear-gradient(135deg, #ff0000, #0066ff, #ffa500); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; +} + +@keyframes letter-flip { + to { + opacity: 1; + transform: translateY(0) rotateX(0); + } +} + +.intro-space { + width: 0.3em; +} + +.intro-tagline { + font-size: 1.2rem; + color: #666; + margin-top: 12px; + opacity: 0; + animation: fade-in 0.8s ease-out 2.5s forwards; + letter-spacing: 0.3em; + text-transform: uppercase; +} + +@keyframes fade-in { + to { + opacity: 1; + } +} + +/* ============================================ + SCAN LINE EFFECT + ============================================ */ + +.intro-scanline { + position: absolute; + left: 0; + width: 100%; + height: 2px; + background: linear-gradient(90deg, transparent, #ff0000, #0066ff, #ffa500, transparent); + opacity: 0.6; + animation: scanline 3s linear infinite; + box-shadow: 0 0 20px rgba(255, 100, 50, 0.5); +} + +@keyframes scanline { + 0% { + top: -2px; + } + 100% { + top: 100%; + } +} + +/* ============================================ + CORNER ACCENTS + ============================================ */ + +.intro-corner { + position: absolute; + width: 60px; + height: 60px; + opacity: 0; + animation: corner-appear 0.5s ease-out 0.5s forwards; +} + +.intro-corner-tl { + top: 30px; + left: 30px; + border-top: 2px solid #ff0000; + border-left: 2px solid #ff0000; +} + +.intro-corner-tr { + top: 30px; + right: 30px; + border-top: 2px solid #0066ff; + border-right: 2px solid #0066ff; +} + +.intro-corner-bl { + bottom: 30px; + left: 30px; + border-bottom: 2px solid #ffa500; + border-left: 2px solid #ffa500; +} + +.intro-corner-br { + bottom: 30px; + right: 30px; + border-bottom: 2px solid #fff; + border-right: 2px solid #fff; + opacity: 0.3; +} + +@keyframes corner-appear { + 0% { + opacity: 0; + transform: scale(0.5); + } + 100% { + opacity: 1; + transform: scale(1); + } +} + +/* ============================================ + RESPONSIVE + ============================================ */ + +@media (max-width: 768px) { + .intro-title { + font-size: 2.5rem; + } + + .intro-tagline { + font-size: 0.9rem; + letter-spacing: 0.15em; + } + + .intro-logo-container svg { + width: 150px; + height: 150px; + } + + .intro-corner { + width: 40px; + height: 40px; + } +} diff --git a/src/frontend/mockup/components/IntroAnimation.jsx b/src/frontend/mockup/components/IntroAnimation.jsx new file mode 100644 index 0000000..a5beb11 --- /dev/null +++ b/src/frontend/mockup/components/IntroAnimation.jsx @@ -0,0 +1,126 @@ +import React, { useState, useEffect } from 'react'; +import './IntroAnimation.css'; + +export default function IntroAnimation({ onComplete }) { + const [phase, setPhase] = useState('logo'); // logo -> text -> fade + const [visible, setVisible] = useState(true); + + useEffect(() => { + const timers = [ + setTimeout(() => setPhase('text'), 1500), + setTimeout(() => setPhase('fade'), 3500), + setTimeout(() => { + setVisible(false); + onComplete?.(); + }, 4500) + ]; + + return () => timers.forEach(clearTimeout); + }, [onComplete]); + + if (!visible) return null; + + return ( +
+ {/* Particle field background */} +
+ {[...Array(50)].map((_, i) => ( +
+ ))} +
+ + {/* Animated logo */} +
+ + + + + + + + + + + + + + + + + {/* Outer diamond */} + + + {/* Inner diamond */} + + + {/* Center pulse */} + + + {/* Orbiting dots */} + + + + +
+ + {/* Text reveal */} +
+

+ A + e + T + h + e + x + + C + o + n + n + e + c + t +

+

The Trinity of Communication

+
+ + {/* Scan line effect */} +
+ + {/* Corner accents */} +
+
+
+
+
+ ); +} diff --git a/src/frontend/mockup/pages/LandingPage.jsx b/src/frontend/mockup/pages/LandingPage.jsx index d6b84c0..4387627 100644 --- a/src/frontend/mockup/pages/LandingPage.jsx +++ b/src/frontend/mockup/pages/LandingPage.jsx @@ -1,5 +1,6 @@ import React from 'react'; import { Link } from 'react-router-dom'; +import HeroVideo from '../components/HeroVideo'; export default function LandingPage() { return ( @@ -23,6 +24,7 @@ export default function LandingPage() { {/* Hero Section */}
+
diff --git a/src/frontend/public/.well-known/security.txt b/src/frontend/public/.well-known/security.txt new file mode 100644 index 0000000..607e52d --- /dev/null +++ b/src/frontend/public/.well-known/security.txt @@ -0,0 +1,16 @@ +# AeThex Connect Security Policy +# https://aethex.online/.well-known/security.txt + +Contact: mailto:security@aethex.online +Contact: https://github.com/AeThex-Corporation/AeThex-Connect/security/advisories +Expires: 2027-02-05T00:00:00.000Z +Encryption: https://aethex.online/.well-known/pgp-key.txt +Preferred-Languages: en +Canonical: https://aethex.online/.well-known/security.txt +Policy: https://aethex.online/security-policy + +# We take security seriously. If you discover a vulnerability, +# please report it responsibly. We offer a bug bounty program +# for qualifying security issues. + +# Acknowledgments: https://aethex.online/security/hall-of-fame diff --git a/src/frontend/public/apple-touch-icon.png b/src/frontend/public/apple-touch-icon.png new file mode 100644 index 0000000..4595280 Binary files /dev/null and b/src/frontend/public/apple-touch-icon.png differ diff --git a/src/frontend/public/brand-kit.png b/src/frontend/public/brand-kit.png new file mode 100644 index 0000000..85512e7 Binary files /dev/null and b/src/frontend/public/brand-kit.png differ diff --git a/src/frontend/public/brand-kit.svg b/src/frontend/public/brand-kit.svg new file mode 100644 index 0000000..e22eef2 --- /dev/null +++ b/src/frontend/public/brand-kit.svg @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AeThex Connect Brand Kit + + + + + PRIMARY LOGOS + + + + + + + + Full Color + + + + + + + + + White (Dark BG) + + + + + + + + + Black (Light BG) + + + + + + + Minimal Icon + + + + TRINITY DIVISIONS + + + + + + + Foundation + #ff0000 | RGB(255,0,0) + + + + + + + + Corporation + #0066ff | RGB(0,102,255) + + + + + + + + Labs + #ffa500 | RGB(255,165,0) + + + + COLOR PALETTE + + + + + #ff0000 + Foundation Red + + + + + #0066ff + Corporation Blue + + + + + #ffa500 + Labs Orange + + + + + + #0a0a0a + Background + + + + + #1a1a1a + Surface + + + + + #2a2a2a + Elevated + + + + WORDMARKS + + + + + + AeThex Connect + + + + + THE TRINITY OF COMMUNICATION + + + + USAGE GUIDELINES + + + + • Minimum logo size: 32px + • Always maintain clear space equal to the diamond height + • Do not rotate, stretch, or distort the logo + • Do not change the trinity colors + • Use white logo on dark backgrounds, black on light + + + + + + © 2026 AeThex Corporation. All rights reserved. + + diff --git a/src/frontend/public/discord-banner.png b/src/frontend/public/discord-banner.png new file mode 100644 index 0000000..9d9e56f Binary files /dev/null and b/src/frontend/public/discord-banner.png differ diff --git a/src/frontend/public/discord-banner.svg b/src/frontend/public/discord-banner.svg new file mode 100644 index 0000000..41d58de --- /dev/null +++ b/src/frontend/public/discord-banner.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AeThex Connect + The Trinity of Communication + + + Foundation + + Corporation + + Labs + + + + + + + + + + + diff --git a/src/frontend/public/favicon-16x16.png b/src/frontend/public/favicon-16x16.png new file mode 100644 index 0000000..ee3a6e7 Binary files /dev/null and b/src/frontend/public/favicon-16x16.png differ diff --git a/src/frontend/public/favicon-192x192.png b/src/frontend/public/favicon-192x192.png new file mode 100644 index 0000000..57b0ee7 Binary files /dev/null and b/src/frontend/public/favicon-192x192.png differ diff --git a/src/frontend/public/favicon-32x32.png b/src/frontend/public/favicon-32x32.png new file mode 100644 index 0000000..c4485f4 Binary files /dev/null and b/src/frontend/public/favicon-32x32.png differ diff --git a/src/frontend/public/favicon-512x512.png b/src/frontend/public/favicon-512x512.png new file mode 100644 index 0000000..d3b2032 Binary files /dev/null and b/src/frontend/public/favicon-512x512.png differ diff --git a/src/frontend/public/favicon.svg b/src/frontend/public/favicon.svg new file mode 100644 index 0000000..ce4b263 --- /dev/null +++ b/src/frontend/public/favicon.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/frontend/public/hero-bg.svg b/src/frontend/public/hero-bg.svg new file mode 100644 index 0000000..1b7537d --- /dev/null +++ b/src/frontend/public/hero-bg.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/frontend/public/logo-400.png b/src/frontend/public/logo-400.png new file mode 100644 index 0000000..9619e34 Binary files /dev/null and b/src/frontend/public/logo-400.png differ diff --git a/src/frontend/public/logo-animated.svg b/src/frontend/public/logo-animated.svg new file mode 100644 index 0000000..7c143ea --- /dev/null +++ b/src/frontend/public/logo-animated.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/frontend/public/og-image.png b/src/frontend/public/og-image.png new file mode 100644 index 0000000..384dbae Binary files /dev/null and b/src/frontend/public/og-image.png differ diff --git a/src/frontend/public/og-image.svg b/src/frontend/public/og-image.svg new file mode 100644 index 0000000..a776a0e --- /dev/null +++ b/src/frontend/public/og-image.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AeThex Connect + + + + + Secure, Open-Source Communication + + + + + + Foundation + + + Corporation + + + Labs + + + + + 🔐 End-to-End Encrypted + 📞 Voice & Video + 🌐 Cross-Platform + + + + + aethex.online + + + + + + diff --git a/src/frontend/public/robots.txt b/src/frontend/public/robots.txt new file mode 100644 index 0000000..6d07f23 --- /dev/null +++ b/src/frontend/public/robots.txt @@ -0,0 +1,23 @@ +# AeThex Connect - robots.txt +# https://aethex.online + +User-agent: * +Allow: / +Disallow: /api/ +Disallow: /app/ + +# Sitemaps +Sitemap: https://aethex.online/sitemap.xml + +# Crawl-delay for politeness +Crawl-delay: 1 + +# Block specific bots if needed +User-agent: GPTBot +Disallow: / + +User-agent: ChatGPT-User +Disallow: / + +User-agent: CCBot +Disallow: / diff --git a/src/frontend/public/site.webmanifest b/src/frontend/public/site.webmanifest new file mode 100644 index 0000000..56ccac4 --- /dev/null +++ b/src/frontend/public/site.webmanifest @@ -0,0 +1,66 @@ +{ + "name": "AeThex Connect", + "short_name": "AeThex", + "description": "Privacy-first communication platform with end-to-end encryption", + "start_url": "/", + "display": "standalone", + "background_color": "#0a0a0a", + "theme_color": "#0a0a0a", + "orientation": "portrait-primary", + "icons": [ + { + "src": "/favicon.svg", + "sizes": "any", + "type": "image/svg+xml", + "purpose": "any maskable" + }, + { + "src": "/favicon-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/favicon-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "categories": ["communication", "social", "utilities"], + "screenshots": [ + { + "src": "/screenshots/desktop.png", + "sizes": "1920x1080", + "type": "image/png", + "form_factor": "wide" + }, + { + "src": "/screenshots/mobile.png", + "sizes": "750x1334", + "type": "image/png", + "form_factor": "narrow" + } + ], + "related_applications": [ + { + "platform": "play", + "url": "https://play.google.com/store/apps/details?id=online.aethex.connect" + }, + { + "platform": "itunes", + "url": "https://apps.apple.com/app/aethex-connect/id123456789" + } + ], + "prefer_related_applications": false, + "shortcuts": [ + { + "name": "New Message", + "url": "/app?action=new-message", + "icons": [{ "src": "/icons/message.png", "sizes": "96x96" }] + }, + { + "name": "Join Call", + "url": "/app?action=join-call", + "icons": [{ "src": "/icons/call.png", "sizes": "96x96" }] + } + ] +} diff --git a/src/frontend/public/sitemap.xml b/src/frontend/public/sitemap.xml new file mode 100644 index 0000000..1759fa9 --- /dev/null +++ b/src/frontend/public/sitemap.xml @@ -0,0 +1,47 @@ + + + + + + https://aethex.online/ + 2026-02-05 + weekly + 1.0 + + + + + https://aethex.online/features + 2026-02-05 + monthly + 0.9 + + + + + https://aethex.online/about + 2026-02-05 + monthly + 0.8 + + + + + https://aethex.online/login + 2026-02-05 + yearly + 0.6 + + + + + https://aethex.online/register + 2026-02-05 + yearly + 0.7 + + + diff --git a/src/frontend/public/twitter-banner.png b/src/frontend/public/twitter-banner.png new file mode 100644 index 0000000..5e77f0f Binary files /dev/null and b/src/frontend/public/twitter-banner.png differ diff --git a/src/frontend/public/twitter-banner.svg b/src/frontend/public/twitter-banner.svg new file mode 100644 index 0000000..c0cdd8d --- /dev/null +++ b/src/frontend/public/twitter-banner.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AeThex Connect + + + Secure, Open-Source Communication Platform + + + + + + Foundation + + + Corporation + + + Labs + + + + + aethex.online + + + + + + diff --git a/src/frontend/public/youtube-banner.png b/src/frontend/public/youtube-banner.png new file mode 100644 index 0000000..f7e711a Binary files /dev/null and b/src/frontend/public/youtube-banner.png differ diff --git a/src/frontend/public/youtube-banner.svg b/src/frontend/public/youtube-banner.svg new file mode 100644 index 0000000..29c8834 --- /dev/null +++ b/src/frontend/public/youtube-banner.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WELCOME TO + + + AeThex Connect + + + Secure, Open-Source Communication + + + + + + Foundation + + + Corporation + + + Labs + + + + + + + + + + + + + + + + +