import React from 'react'; import { Link } from 'react-router-dom'; import './EffectLab.css'; const LAB_ITEMS = [ { id: 'sword-stream', path: '/lab/sword-stream', title: 'Sword Stream', category: '3D · 인터랙티브', desc: '1,500개의 검 파티클이 마우스를 따라 흐릅니다. 클릭하면 나선형 궤도로 전환됩니다.', tags: ['Three.js', '파티클', '인터랙티브'], accent: '#44aadd', icon: '⚔️', status: 'live', }, { id: 'day-calc', path: '/lab/day-calc', title: '일수 계산기', category: '유틸리티 · 날짜', desc: '두 날짜 사이의 기간을 일, 주, 월, 연 단위로 계산하고 기념일 날짜를 확인합니다.', tags: ['날짜', '계산기', '기념일'], accent: '#fbbf24', icon: '📅', status: 'live', }, { id: 'agent-office', path: '/agent-office', title: 'Agent Office', category: 'AI · 자동화', desc: 'AI 에이전트들이 사무실에서 자동으로 작업하는 가상 오피스', tags: ['Canvas 2D', 'WebSocket', 'AI Agent', 'Telegram'], accent: '#8b5cf6', icon: '🏢', status: 'wip', }, ]; const STATUS_LABEL = { live: { label: 'LIVE', color: '#34d399' }, wip: { label: 'WIP', color: '#fbbf24' }, planned: { label: 'PLANNED', color: '#94a3b8' }, }; const LabCard = ({ item }) => { const st = STATUS_LABEL[item.status] || STATUS_LABEL.planned; return (
{item.icon} {st.label}

{item.category}

{item.title}

{item.desc}

{item.tags.map((t) => ( {t} ))}
); }; const EffectLab = () => (

STREAM

Lab

실험적인 UI, 인터랙티브 효과, 유틸리티 도구를 테스트하고 탐구하는 공간입니다.

{LAB_ITEMS.map((item) => ( ))}
); export default EffectLab;