import { useState, useEffect, useRef } from "react"; const FONTS = `@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Space+Mono:ital,wght@0,400;0,700;1,400&family=Syne:wght@400;700;800&display=swap');`; const ITEMS = { tops: [ { id: "t1", name: "STATIC CREWNECK", price: "$89", color: "#1a1a1a", accent: "#00ff88", emoji: "๐", tag: "BESTSELLER" }, { id: "t2", name: "VOID HOODIE", price: "$129", color: "#0d0d2b", accent: "#ff3cff", emoji: "๐งฅ", tag: "NEW" }, { id: "t3", name: "CHROME TEE", price: "$59", color: "#e8e8e8", accent: "#ff2020", emoji: "๐", tag: "LIMITED" }, { id: "t4", name: "GRUNGE LONGSLEEVE", price: "$74", color: "#2a1a0a", accent: "#ffa500", emoji: "๐", tag: "HOT" }, { id: "t5", name: "ACID WASH ZIP", price: "$109", color: "#1a2a1a", accent: "#88ff00", emoji: "๐งฅ", tag: "SALE" }, { id: "t6", name: "NEON BOMBER", price: "$149", color: "#0a0a1a", accent: "#00ffff", emoji: "๐งฅ", tag: "NEW" }, ], bottoms: [ { id: "b1", name: "PHANTOM CARGOS", price: "$119", color: "#1a1a1a", accent: "#00ff88", emoji: "๐", tag: "BESTSELLER" }, { id: "b2", name: "GLITCH JEANS", price: "$99", color: "#0d1a2b", accent: "#4488ff", emoji: "๐", tag: "HOT" }, { id: "b3", name: "SHRED SHORTS", price: "$69", color: "#2b1a1a", accent: "#ff4444", emoji: "๐ฉณ", tag: "SUMMER" }, { id: "b4", name: "UTILITY PANTS", price: "$109", color: "#1a2a0d", accent: "#88ff44", emoji: "๐", tag: "NEW" }, { id: "b5", name: "WIDE CORDS", price: "$89", color: "#2a1a2a", accent: "#dd88ff", emoji: "๐", tag: "LIMITED" }, { id: "b6", name: "MESH TRACK", price: "$79", color: "#0a1a1a", accent: "#00ffdd", emoji: "๐ฉณ", tag: "SALE" }, ], shoes: [ { id: "s1", name: "STATIC LOWS", price: "$149", color: "#1a1a1a", accent: "#ff3cff", emoji: "๐", tag: "BESTSELLER" }, { id: "s2", name: "VOID CHUNKY", price: "$189", color: "#2b1a0d", accent: "#ff8800", emoji: "๐", tag: "NEW" }, { id: "s3", name: "CHROME RUNNER", price: "$169", color: "#e8e8e8", accent: "#0044ff", emoji: "๐", tag: "HOT" }, { id: "s4", name: "GRUNGE BOOT", price: "$209", color: "#1a0d0d", accent: "#ff2020", emoji: "๐ข", tag: "COLLAB" }, { id: "s5", name: "MULE PLATFORM", price: "$129", color: "#1a1a2a", accent: "#8844ff", emoji: "๐ฅฟ", tag: "LIMITED" }, { id: "s6", name: "Y2K SANDAL", price: "$89", color: "#2a1a0a", accent: "#ffdd00", emoji: "๐ก", tag: "SUMMER" }, ], accessories: [ { id: "a1", name: "SIGNAL CAP", price: "$49", color: "#1a1a1a", accent: "#00ff88", emoji: "๐งข", tag: "NEW" }, { id: "a2", name: "STATIC CHAIN", price: "$79", color: "#c0c0c0", accent: "#ff3cff", emoji: "โ๏ธ", tag: "HOT" }, { id: "a3", name: "VOID SHADES", price: "$119", color: "#0a0a0a", accent: "#00ffff", emoji: "๐ถ๏ธ", tag: "COLLAB" }, { id: "a4", name: "GLITCH BEANIE", price: "$44", color: "#1a0d2a", accent: "#aa44ff", emoji: "๐งฃ", tag: "WINTER" }, { id: "a5", name: "CHROME BAG", price: "$159", color: "#c8c8c8", accent: "#ff2020", emoji: "๐", tag: "LIMITED" }, { id: "a6", name: "NEON BELT", price: "$54", color: "#0a1a0a", accent: "#88ff00", emoji: "๐ง", tag: "BESTSELLER" }, ], }; const CATEGORY_LABELS = { tops: "TOPS", bottoms: "BOTTOMS", shoes: "SHOES", accessories: "EXTRAS" }; export default function ByxtraApp() { const [activeSection, setActiveSection] = useState("home"); const [activeCategory, setActiveCategory] = useState("tops"); const [outfit, setOutfit] = useState({ tops: null, bottoms: null, shoes: null, accessories: null }); const [glitch, setGlitch] = useState(false); const [ticker, setTicker] = useState(0); const [hoveredItem, setHoveredItem] = useState(null); useEffect(() => { const style = document.createElement("style"); style.textContent = ` ${FONTS} * { box-sizing: border-box; margin: 0; padding: 0; } body { background: #080808; } ::-webkit-scrollbar { width: 4px; } ::-webkit-scrollbar-track { background: #111; } ::-webkit-scrollbar-thumb { background: #00ff88; } @keyframes glitch1 { 0%,100% { clip-path: inset(0 0 95% 0); transform: translate(-2px,0); } 20% { clip-path: inset(30% 0 50% 0); transform: translate(2px,0); } 40% { clip-path: inset(70% 0 5% 0); transform: translate(-2px,0); } 60% { clip-path: inset(10% 0 80% 0); transform: translate(2px,0); } 80% { clip-path: inset(50% 0 30% 0); transform: translate(-2px,0); } } @keyframes glitch2 { 0%,100% { clip-path: inset(80% 0 5% 0); transform: translate(2px,0); color:#ff3cff; } 25% { clip-path: inset(20% 0 60% 0); transform: translate(-3px,0); color:#00ffff; } 50% { clip-path: inset(55% 0 25% 0); transform: translate(3px,0); color:#ff3cff; } 75% { clip-path: inset(5% 0 85% 0); transform: translate(-2px,0); color:#00ffff; } } @keyframes scanline { 0% { top: -10%; } 100% { top: 110%; } } @keyframes pulse-glow { 0%,100% { box-shadow: 0 0 20px #00ff8844, 0 0 40px #00ff8822; } 50% { box-shadow: 0 0 40px #00ff8888, 0 0 80px #00ff8844; } } @keyframes float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-8px); } } @keyframes slide-in-left { from { opacity:0; transform: translateX(-30px); } to { opacity:1; transform: translateX(0); } } @keyframes slide-in-up { from { opacity:0; transform: translateY(20px); } to { opacity:1; transform: translateY(0); } } @keyframes ticker-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } } @keyframes blink { 0%,100% { opacity:1; } 50% { opacity:0; } } @keyframes spin-slow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes noise { 0%,100%{background-position:0 0} 10%{background-position:-5% -10%} 20%{background-position:-15% 5%} 30%{background-position:7% -25%} 40%{background-position:20% 25%} 50%{background-position:-25% 10%} 60%{background-position:15% 5%} 70%{background-position:0 15%} 80%{background-position:25% 35%} 90%{background-position:-10% 10%} } .glitch-text { position:relative; } .glitch-text::before, .glitch-text::after { content: attr(data-text); position: absolute; top:0; left:0; width:100%; height:100%; font: inherit; color: inherit; } .glitch-text::before { animation: glitch1 0.3s infinite linear; color:#00ffff; } .glitch-text::after { animation: glitch2 0.3s infinite linear; color:#ff3cff; } .card-hover { transition: transform 0.2s ease, box-shadow 0.2s ease; } .card-hover:hover { transform: translateY(-4px) scale(1.02); } .nav-btn { background: none; border: none; cursor: pointer; font-family: 'Space Mono', monospace; font-size: 12px; letter-spacing: 2px; padding: 8px 16px; transition: all 0.2s; position: relative; } .nav-btn::after { content: ''; position: absolute; bottom: 0; left: 0; width: 0; height: 2px; background: #00ff88; transition: width 0.2s; } .nav-btn:hover::after, .nav-btn.active::after { width: 100%; } .select-btn { background: none; border: 1px solid #333; color: #888; padding: 6px 12px; font-family: 'Space Mono', monospace; font-size: 10px; cursor: pointer; letter-spacing: 1px; transition: all 0.2s; } .select-btn:hover, .select-btn.selected { border-color: #00ff88; color: #00ff88; background: #00ff8811; } .tag { font-family: 'Space Mono', monospace; font-size: 9px; letter-spacing: 2px; padding: 3px 8px; } `; document.head.appendChild(style); return () => document.head.removeChild(style); }, []); useEffect(() => { const interval = setInterval(() => setTicker(t => t + 1), 30); return () => clearInterval(interval); }, []); const toggleOutfitItem = (category, item) => { setOutfit(prev => ({ ...prev, [category]: prev[category]?.id === item.id ? null : item, })); }; const clearOutfit = () => setOutfit({ tops: null, bottoms: null, shoes: null, accessories: null }); const outfitCount = Object.values(outfit).filter(Boolean).length; const outfitTotal = Object.values(outfit) .filter(Boolean) .reduce((sum, item) => sum + parseInt(item.price.replace("$", "")), 0); const tickerText = "BYXTRA โฆ NEW DROP โฆ COMBINE YOUR FIT โฆ FREE SHIPPING OVER $200 โฆ LIMITED EDITION โฆ "; const repeated = (tickerText + tickerText + tickerText).repeat(3); return (
Clothing built for the static generation. Mix every piece. Create your own frequency. No rules, only fits.
Mix & match tops, bottoms, shoes, and extras. See your complete outfit, get the total price, and cop everything at once.