Velaric's picture
Upload 71 files
0459956 verified
raw
history blame
16.8 kB
"use client"
import type React from "react"
import { useState } from "react"
import { Button } from "@/components/ui/button"
import {
Download,
Monitor,
Smartphone,
Apple,
Copy,
CheckCircle,
Key,
Check,
ExternalLink,
Menu,
X,
Palette,
MessageCircle,
} from "lucide-react"
import { cn } from "@/lib/utils"
const platforms = [
{ id: "windows", name: "Windows", icon: Monitor },
{ id: "ios", name: "iOS", icon: Smartphone },
{ id: "android", name: "Android", icon: Smartphone },
{ id: "macos", name: "macOS", icon: Apple },
]
const scripts = [
{
id: "bloxfruits",
name: "Blox Fruits",
code: 'loadstring(game:HttpGet("https://raw.githubusercontent.com/Overgustx2/Main/refs/heads/main/BloxFruits_25.html"))()',
image: "/images/blox-fruits.png",
available: true,
},
{
id: "garden",
name: "Grow a Garden",
code: "",
image: "/images/grow-garden.png",
available: false,
},
{
id: "brainrot",
name: "Steal a Brainrot",
code: "",
image: "/images/brainrot.png",
available: false,
},
]
const navigationItems = [
{ id: "download", label: "Download" },
{ id: "script", label: "Script" },
{ id: "getkey", label: "GetKey" },
{ id: "premiums", label: "Premiums" },
]
const themes = [
{ id: "red", name: "Red", primary: "#ff0000", secondary: "#dc2626", accent: "#ff6666" },
{ id: "blue", name: "Blue", primary: "#0066ff", secondary: "#0052cc", accent: "#3399ff" },
{ id: "purple", name: "Purple", primary: "#8b5cf6", secondary: "#7c3aed", accent: "#a78bfa" },
{ id: "green", name: "Green", primary: "#10b981", secondary: "#059669", accent: "#34d399" },
{ id: "orange", name: "Orange", primary: "#f97316", secondary: "#ea580c", accent: "#fb923c" },
{ id: "pink", name: "Pink", primary: "#ec4899", secondary: "#db2777", accent: "#f472b6" },
{ id: "cyan", name: "Cyan", primary: "#06b6d4", secondary: "#0891b2", accent: "#22d3ee" },
{ id: "yellow", name: "Yellow", primary: "#eab308", secondary: "#ca8a04", accent: "#facc15" },
]
export default function VortexExecutor() {
const [currentPage, setCurrentPage] = useState("download")
const [selectedPlatform, setSelectedPlatform] = useState<string | null>(null)
const [copiedScript, setCopiedScript] = useState<string | null>(null)
const [menuOpen, setMenuOpen] = useState(false)
const [themeMenuOpen, setThemeMenuOpen] = useState(false)
const [currentTheme, setCurrentTheme] = useState(themes[0])
const copyToClipboard = async (code: string, scriptId: string) => {
try {
await navigator.clipboard.writeText(code)
setCopiedScript(scriptId)
setTimeout(() => setCopiedScript(null), 2000)
} catch (err) {
console.error("Failed to copy:", err)
}
}
const handleNavigation = (pageId: string) => {
setCurrentPage(pageId)
setMenuOpen(false)
setSelectedPlatform(null)
}
const handleThemeChange = (theme: (typeof themes)[0]) => {
setCurrentTheme(theme)
setThemeMenuOpen(false)
// Update CSS custom properties
document.documentElement.style.setProperty("--theme-primary", theme.primary)
document.documentElement.style.setProperty("--theme-secondary", theme.secondary)
document.documentElement.style.setProperty("--theme-accent", theme.accent)
}
const openDiscord = () => {
window.open("https://discord.gg/3gGZCs7tPt", "_blank", "noopener,noreferrer")
}
const renderPage = () => {
switch (currentPage) {
case "download":
return (
<div className="page-container">
<div className="page-header">
<h1 className="page-title">Download Vortex</h1>
</div>
<div className="download-center">
<div className="platform-dropdown">
<button
className="dropdown-toggle"
onClick={() => setSelectedPlatform(selectedPlatform ? null : "dropdown")}
>
<div className="dropdown-content">
<span className="dropdown-text">
{selectedPlatform && selectedPlatform !== "dropdown"
? platforms.find((p) => p.id === selectedPlatform)?.name
: "Select Platform"}
</span>
<div className={`dropdown-arrow ${selectedPlatform === "dropdown" ? "dropdown-arrow-up" : ""}`}>
</div>
</div>
</button>
{selectedPlatform === "dropdown" && (
<div className="dropdown-menu">
{platforms.map((platform) => {
const IconComponent = platform.icon
return (
<button
key={platform.id}
className="dropdown-item"
onClick={() => setSelectedPlatform(platform.id)}
>
<IconComponent className="dropdown-icon" />
<span>{platform.name}</span>
</button>
)
})}
</div>
)}
</div>
<Button className="main-download-button" disabled={!selectedPlatform || selectedPlatform === "dropdown"}>
<Download className="w-5 h-5 mr-2" />
Download
</Button>
</div>
</div>
)
case "script":
return (
<div className="page-container">
<div className="page-header">
<h1 className="page-title">Script Library</h1>
</div>
<div className="scripts-container">
{scripts.map((script) => (
<div key={script.id} className={cn("script-item", !script.available && "script-disabled")}>
<div className="script-image-small">
<img src={script.image || "/placeholder.svg"} alt={script.name} />
{!script.available && (
<div className="coming-soon-badge">
<span>In Development</span>
</div>
)}
</div>
<div className="script-info">
<h3 className="script-title">{script.name}</h3>
{script.available ? (
<div className="script-status-available">
<div className="keyless-indicator">
<Key className="w-4 h-4" />
<span>Keyless</span>
</div>
</div>
) : (
<div className="script-status-unavailable">
<span>In Development</span>
</div>
)}
</div>
<div className="script-actions-inline">
{script.available ? (
<Button
onClick={() => copyToClipboard(script.code, script.id)}
className="copy-btn-small"
size="sm"
>
{copiedScript === script.id ? (
<>
<CheckCircle className="w-4 h-4 mr-1" />
Copied!
</>
) : (
<>
<Copy className="w-4 h-4 mr-1" />
Copy
</>
)}
</Button>
) : (
<Button className="development-btn-small" size="sm" disabled>
In Development
</Button>
)}
</div>
</div>
))}
</div>
</div>
)
case "getkey":
return (
<div className="page-container">
<div className="page-header">
<h1 className="page-title">How to Get a Key</h1>
</div>
<div className="steps-container">
<div className="step-card">
<div className="step-number">1</div>
<div className="step-content">
<h3 className="step-title">Join Our Discord</h3>
<p className="step-description">Connect with our community and get the latest updates.</p>
</div>
</div>
<div className="step-card">
<div className="step-number">2</div>
<div className="step-content">
<h3 className="step-title">Complete Verification</h3>
<p className="step-description">Follow the verification process in our Discord server.</p>
</div>
</div>
<div className="step-card">
<div className="step-number">3</div>
<div className="step-content">
<h3 className="step-title">Get Your Key</h3>
<p className="step-description">Receive your unique access key and start using Vortex.</p>
</div>
</div>
</div>
<div className="key-info">
<div className="info-card">
<Key className="w-8 h-8 text-yellow-400" />
<h3>Key System Status</h3>
<p>Our key system is currently being developed. Most scripts are keyless for now!</p>
</div>
</div>
</div>
)
case "premiums":
return (
<div className="page-container">
<div className="page-header">
<h1 className="page-title">Vortex Premium Features</h1>
</div>
<div className="premium-grid">
<div className="premium-card">
<div className="premium-header">
<h3 className="premium-tier">Free</h3>
<div className="premium-price">$0</div>
</div>
<div className="premium-features">
<div className="feature-item">
<Check className="w-5 h-5 theme-primary-text" />
<span>Basic Scripts</span>
</div>
<div className="feature-item">
<Check className="w-5 h-5 theme-primary-text" />
<span>Community Support</span>
</div>
<div className="feature-item">
<Check className="w-5 h-5 theme-primary-text" />
<span>Regular Updates</span>
</div>
</div>
<Button variant="outline" className="premium-button bg-transparent">
Current Plan
</Button>
</div>
<div className="premium-card premium-featured">
<div className="premium-header">
<h3 className="premium-tier">Premium</h3>
<div className="premium-price">$9.99</div>
</div>
<div className="premium-features">
<div className="feature-item">
<Check className="w-5 h-5 theme-primary-text" />
<span>Early Access Scripts</span>
</div>
<div className="feature-item">
<Check className="w-5 h-5 theme-primary-text" />
<span>No Key System</span>
</div>
<div className="feature-item">
<Check className="w-5 h-5 theme-primary-text" />
<span>Priority Support</span>
</div>
<div className="feature-item">
<Check className="w-5 h-5 theme-primary-text" />
<span>Exclusive Features</span>
</div>
<div className="feature-item">
<Check className="w-5 h-5 theme-primary-text" />
<span>Beta Access</span>
</div>
</div>
<Button className="premium-button premium-upgrade">Upgrade Now</Button>
</div>
</div>
</div>
)
default:
return null
}
}
return (
<div className="app">
{/* Background Effects */}
<div className="background-effects">
<div className="red-particles"></div>
<div className="gradient-orb orb-1"></div>
<div className="gradient-orb orb-2"></div>
</div>
{/* Top Navigation */}
<nav className="navbar">
<div className="nav-container">
<div className="nav-logo">
<span className="logo-text">VORTEX</span>
</div>
<div className="nav-buttons">
{/* Discord Button */}
<button className="discord-button" onClick={openDiscord} title="Join Discord">
<MessageCircle className="w-5 h-5" />
</button>
{/* Theme Button */}
<button className="theme-button" onClick={() => setThemeMenuOpen(!themeMenuOpen)} title="Change Theme">
<Palette className="w-5 h-5" />
</button>
{/* Menu Button */}
<button className="menu-button" onClick={() => setMenuOpen(!menuOpen)} title="Open Menu">
{menuOpen ? <X className="w-6 h-6" /> : <Menu className="w-6 h-6" />}
</button>
</div>
</div>
</nav>
{/* Theme Menu */}
{themeMenuOpen && (
<div className="theme-overlay">
<div className="theme-content">
<div className="theme-header">
<h2 className="theme-title">Choose Theme</h2>
<button className="theme-close" onClick={() => setThemeMenuOpen(false)}>
<X className="w-6 h-6" />
</button>
</div>
<div className="theme-grid">
{themes.map((theme) => (
<button
key={theme.id}
className={cn("theme-option", currentTheme.id === theme.id && "theme-option-active")}
onClick={() => handleThemeChange(theme)}
style={
{
"--preview-primary": theme.primary,
"--preview-secondary": theme.secondary,
"--preview-accent": theme.accent,
} as React.CSSProperties
}
>
<div className="theme-preview">
<div className="theme-preview-primary"></div>
<div className="theme-preview-secondary"></div>
<div className="theme-preview-accent"></div>
</div>
<span className="theme-name">{theme.name}</span>
</button>
))}
</div>
</div>
</div>
)}
{/* Navigation Menu */}
{menuOpen && (
<div className="menu-overlay">
<div className="menu-content">
<div className="menu-header">
<h2 className="menu-title">Navigation</h2>
<button className="menu-close" onClick={() => setMenuOpen(false)}>
<X className="w-8 h-8" />
</button>
</div>
<div className="menu-items">
{navigationItems.map((item) => (
<button
key={item.id}
onClick={() => handleNavigation(item.id)}
className={cn("menu-item", currentPage === item.id && "menu-item-active")}
>
{item.label}
</button>
))}
</div>
</div>
</div>
)}
{/* Main Content */}
<main className="main-content">{renderPage()}</main>
{/* Footer */}
<footer className="footer">
<div className="footer-content">
<div className="footer-left">
<p>Copyright © Vortex 2025</p>
</div>
<div className="footer-right">
<p>Join our Discord:</p>
<a href="https://discord.gg/3gGZCs7tPt" className="discord-link" target="_blank" rel="noopener noreferrer">
<ExternalLink className="w-4 h-4 mr-1" />
https://discord.gg/3gGZCs7tPt
</a>
</div>
</div>
</footer>
</div>
)
}