import React, { useState, useEffect, useRef } from 'react'; import { ChevronRight, X, Sparkles, Heart, Ghost } from 'lucide-react'; // Character data const characters = [ { id: 1, name: "Aster", tag: "the one who disappears mid-sentence", color: "#a29bfe", image: "https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=400", desc: "speaks softly like every word costs something. leaves rooms quietly but never without echo. knows more about me than they pretend not to.", secret: "i still look for their name in places it will never appear.", details: [ "favorite time: 3am, when the world is asleep", "always carries: a worn notebook with blank pages", "says: 'i'll be back' (never specifies when)" ] }, { id: 2, name: "Rowan", tag: "sunlight with sharp edges", color: "#ffeaa7", image: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=400", desc: "laughs like nothing has ever hurt them. pretends to be simple. isn't. made me believe in warmth again.", secret: "i learned how to want better by watching them exist.", details: [ "favorite time: golden hour, obviously", "always carries: too much optimism", "says: 'it'll be fine' (and somehow it is)" ] }, { id: 3, name: "Nyx", tag: "midnight in human form", color: "#6c5ce7", image: "https://images.unsplash.com/photo-1531746020798-e6953c6e8e04?w=400", desc: "knows the exact right things to say and chooses silence instead. always looking like they're about to leave.", secret: "they never stayed. i never asked them to. i still hoped.", details: [ "favorite time: twilight, between worlds", "always carries: secrets that aren't theirs", "says: nothing (but you hear it anyway)" ] }, { id: 4, name: "Echo", tag: "the one who remembers everything", color: "#fd79a8", image: "https://images.unsplash.com/photo-1517841905240-472988babdf9?w=400", desc: "recalls every conversation like it's scripture. makes you feel seen in ways that are both beautiful and terrifying.", secret: "sometimes being remembered feels heavier than being forgotten.", details: [ "favorite time: whenever you need them", "always carries: your words back to you", "says: 'you told me once...' (always right)" ] } ]; const OCSShowcase = () => { const [selectedChar, setSelectedChar] = useState(characters[0]); const [showSecret, setShowSecret] = useState(false); const [cursorPos, setCursorPos] = useState({ x: 0, y: 0 }); const [sparkles, setSparkles] = useState([]); const [activeTab, setActiveTab] = useState('about'); // Cursor trail effect useEffect(() => { const handleMouseMove = (e) => { setCursorPos({ x: e.clientX, y: e.clientY }); // Add sparkle occasionally if (Math.random() > 0.95) { const newSparkle = { id: Date.now(), x: e.clientX, y: e.clientY }; setSparkles(prev => [...prev, newSparkle]); setTimeout(() => { setSparkles(prev => prev.filter(s => s.id !== newSparkle.id)); }, 1000); } }; window.addEventListener('mousemove', handleMouseMove); return () => window.removeEventListener('mousemove', handleMouseMove); }, []); const handleCharacterSelect = (char) => { setSelectedChar(char); setShowSecret(false); setActiveTab('about'); }; return (
officially, these are original characters.
unofficially… they are people who left fingerprints on me.