Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UHXzpsZQxKG9hQmNRfZjRS
303 lines
8.0 KiB
JavaScript
303 lines
8.0 KiB
JavaScript
import React, { lazy } from 'react';
|
||
import {
|
||
IconHome,
|
||
IconBlog,
|
||
IconLotto,
|
||
IconStock,
|
||
IconBuilding,
|
||
IconTravel,
|
||
IconMusic,
|
||
IconLab,
|
||
IconTodo,
|
||
IconInsta,
|
||
IconPortfolio,
|
||
IconTarot,
|
||
IconSaju,
|
||
} from './components/Icons';
|
||
|
||
const Home = lazy(() => import('./pages/home/Home'));
|
||
const Blog = lazy(() => import('./pages/blog/Blog'));
|
||
const Lotto = lazy(() => import('./pages/lotto/Lotto'));
|
||
const Evolver = lazy(() => import('./pages/lotto/Evolver'));
|
||
const Travel = lazy(() => import('./pages/travel/Travel'));
|
||
const Stock = lazy(() => import('./pages/stock/Stock'));
|
||
const StockTrade = lazy(() => import('./pages/stock/StockTrade'));
|
||
const Screener = lazy(() => import('./pages/stock/screener/Screener'));
|
||
const Subscription = lazy(() => import('./pages/subscription/Subscription'));
|
||
const Listings = lazy(() => import('./pages/listings/Listings'));
|
||
const EffectLab = lazy(() => import('./pages/effect-lab/EffectLab'));
|
||
const SwordStream = lazy(() => import('./pages/effect-lab/SwordStream'));
|
||
const DayCalc = lazy(() => import('./pages/effect-lab/DayCalc'));
|
||
const Todo = lazy(() => import('./pages/todo/Todo'));
|
||
const MusicStudio = lazy(() => import('./pages/music/MusicStudio'));
|
||
const InstaCards = lazy(() => import('./pages/insta/InstaCards'));
|
||
const Portfolio = lazy(() => import('./pages/portfolio/Portfolio'));
|
||
const Tarot = lazy(() => import('./pages/tarot/Tarot'));
|
||
const TarotTodayCard = lazy(() => import('./pages/tarot/TodayCard'));
|
||
const TarotReading = lazy(() => import('./pages/tarot/Reading'));
|
||
const TarotHistory = lazy(() => import('./pages/tarot/History'));
|
||
const Saju = lazy(() => import('./pages/saju/Saju'));
|
||
const SajuResult = lazy(() => import('./pages/saju/SajuResult'));
|
||
const SajuToday = lazy(() => import('./pages/saju/Today'));
|
||
const Compatibility = lazy(() => import('./pages/saju/Compatibility'));
|
||
const CompatibilityResult = lazy(() => import('./pages/saju/CompatibilityResult'));
|
||
const SajuMe = lazy(() => import('./pages/saju/Me'));
|
||
const InfraMonitor = lazy(() => import('./pages/infra/InfraMonitor'));
|
||
|
||
export const navLinks = [
|
||
{
|
||
id: 'home',
|
||
label: 'Home',
|
||
path: '/',
|
||
subtitle: 'PERSONAL ARCHIVE',
|
||
description: '첫 인상과 최신 업데이트를 모아둔 허브',
|
||
icon: <IconHome />,
|
||
accent: '#f7a8a5',
|
||
},
|
||
{
|
||
id: 'portfolio',
|
||
label: 'Portfolio',
|
||
path: '/portfolio',
|
||
subtitle: 'RESUME',
|
||
description: '개인 포트폴리오 — 프로필, 이력, 프로젝트 쇼케이스',
|
||
icon: <IconPortfolio />,
|
||
accent: '#06b6d4',
|
||
},
|
||
{
|
||
id: 'blog',
|
||
label: 'Blog',
|
||
path: '/blog',
|
||
subtitle: 'JOURNAL',
|
||
description: '생각과 기록, 코드 스니펫을 모으는 공간',
|
||
icon: <IconBlog />,
|
||
accent: '#c084fc',
|
||
},
|
||
{
|
||
id: 'travel',
|
||
label: 'Travel',
|
||
path: '/travel',
|
||
subtitle: 'VISUAL DIARY',
|
||
description: '여행에서 담은 색과 장면을 전시하는 갤러리',
|
||
icon: <IconTravel />,
|
||
accent: '#fb923c',
|
||
},
|
||
{
|
||
id: 'lotto',
|
||
label: 'Lotto',
|
||
path: '/lotto',
|
||
subtitle: 'PLAYGROUND',
|
||
description: '숫자를 뽑고 통계를 확인하는 실험실',
|
||
icon: <IconLotto />,
|
||
accent: '#34d399',
|
||
},
|
||
{
|
||
id: 'stock',
|
||
label: 'Stock',
|
||
path: '/stock',
|
||
subtitle: '마켓 랩',
|
||
description: '아침 시장 흐름을 확인하는 주식 연구실',
|
||
icon: <IconStock />,
|
||
accent: '#60a5fa',
|
||
},
|
||
{
|
||
id: 'music',
|
||
label: 'Music',
|
||
path: '/music',
|
||
subtitle: 'SONIC FORGE',
|
||
description: 'AI로 세상에 하나뿐인 음악을 만드는 스튜디오',
|
||
icon: <IconMusic />,
|
||
accent: '#f5a623',
|
||
},
|
||
{
|
||
id: 'realestate',
|
||
label: 'Realestate',
|
||
path: '/realestate',
|
||
subtitle: '부동산',
|
||
description: '청약 공고 자동 수집, 매칭, 프로필 기반 자격 분석',
|
||
icon: <IconBuilding />,
|
||
accent: '#f43f5e',
|
||
},
|
||
{
|
||
id: 'insta',
|
||
label: 'Insta',
|
||
path: '/insta',
|
||
subtitle: 'CARD FEED',
|
||
description: '뉴스에서 키워드 발굴 → AI 카드 10장 자동 생성 → 인스타 업로드',
|
||
icon: <IconInsta />,
|
||
accent: '#ec4899',
|
||
},
|
||
{
|
||
id: 'todo',
|
||
label: 'Todo',
|
||
path: '/todo',
|
||
subtitle: 'TASK BOARD',
|
||
description: '할 일을 관리하는 태스크 보드',
|
||
icon: <IconTodo />,
|
||
accent: '#f472b6',
|
||
},
|
||
{
|
||
id: 'agent-office',
|
||
label: 'Agent Office',
|
||
path: '/agent-office',
|
||
subtitle: 'AI LAB',
|
||
description: 'AI 에이전트 사무실',
|
||
icon: <span style={{fontSize:'1.2em'}}>🏢</span>,
|
||
accent: '#8b5cf6',
|
||
},
|
||
{
|
||
id: 'infra',
|
||
label: 'Infra',
|
||
path: '/infra',
|
||
subtitle: 'NODE PIPELINE',
|
||
description: 'NAS↔Windows 워커 파이프라인 실시간 관측',
|
||
icon: <span style={{fontSize:'1.2em'}}>🛰️</span>,
|
||
accent: '#22d3ee',
|
||
},
|
||
{
|
||
id: 'lab',
|
||
label: 'Lab',
|
||
path: '/lab',
|
||
subtitle: 'STREAM',
|
||
description: '실험적인 UI/UX 효과를 테스트하는 공간',
|
||
icon: <IconLab />,
|
||
accent: '#fbbf24',
|
||
},
|
||
{
|
||
id: 'tarot',
|
||
label: 'Tarot',
|
||
path: '/tarot',
|
||
subtitle: 'ARCANA',
|
||
description: '라이더-웨이트 카드로 오늘과 내일을 비추는 리딩 랩',
|
||
icon: <IconTarot />,
|
||
accent: '#a78bfa',
|
||
},
|
||
{
|
||
id: 'saju',
|
||
label: 'Saju',
|
||
path: '/saju',
|
||
subtitle: 'DESTINY',
|
||
description: '사주와 궁합으로 운명을 분석하는 동양 이학 랩',
|
||
icon: <IconSaju />,
|
||
accent: '#d4a574',
|
||
},
|
||
];
|
||
|
||
export const appRoutes = [
|
||
{
|
||
index: true,
|
||
element: <Home />,
|
||
},
|
||
{
|
||
path: 'blog',
|
||
element: <Blog />,
|
||
},
|
||
{
|
||
path: 'lotto',
|
||
element: <Lotto />,
|
||
},
|
||
{
|
||
path: 'lotto/evolver',
|
||
element: <Evolver />,
|
||
},
|
||
{
|
||
path: 'stock',
|
||
element: <Stock />,
|
||
},
|
||
{
|
||
path: 'stock/trade',
|
||
element: <StockTrade />,
|
||
},
|
||
{
|
||
path: 'stock/screener',
|
||
element: <Screener />,
|
||
},
|
||
{
|
||
path: 'realestate',
|
||
element: <Subscription />,
|
||
},
|
||
{
|
||
path: 'realestate/listings',
|
||
element: <Listings />,
|
||
},
|
||
{
|
||
path: 'travel',
|
||
element: <Travel />,
|
||
},
|
||
{
|
||
path: 'lab',
|
||
element: <EffectLab />,
|
||
},
|
||
{
|
||
path: 'lab/sword-stream',
|
||
element: <SwordStream />,
|
||
},
|
||
{
|
||
path: 'lab/day-calc',
|
||
element: <DayCalc />,
|
||
},
|
||
{
|
||
path: 'music',
|
||
element: <MusicStudio />,
|
||
},
|
||
{
|
||
path: 'insta',
|
||
element: <InstaCards />,
|
||
},
|
||
{
|
||
path: 'todo',
|
||
element: <Todo />,
|
||
},
|
||
{
|
||
path: 'portfolio',
|
||
element: <Portfolio />,
|
||
},
|
||
{
|
||
path: 'agent-office',
|
||
lazy: () => import('./pages/agent-office/AgentOffice'),
|
||
},
|
||
{
|
||
path: 'infra',
|
||
element: <InfraMonitor />,
|
||
},
|
||
{
|
||
path: 'tarot',
|
||
element: <Tarot />,
|
||
},
|
||
{
|
||
path: 'tarot/today',
|
||
element: <TarotTodayCard />,
|
||
},
|
||
{
|
||
path: 'tarot/reading',
|
||
element: <TarotReading />,
|
||
},
|
||
{
|
||
path: 'tarot/history',
|
||
element: <TarotHistory />,
|
||
},
|
||
{
|
||
path: 'saju',
|
||
element: <Saju />,
|
||
},
|
||
{
|
||
path: 'saju/result',
|
||
element: <SajuResult />,
|
||
},
|
||
{
|
||
path: 'saju/today',
|
||
element: <SajuToday />,
|
||
},
|
||
{
|
||
path: 'saju/compatibility',
|
||
element: <Compatibility />,
|
||
},
|
||
{
|
||
path: 'saju/compatibility/result',
|
||
element: <CompatibilityResult />,
|
||
},
|
||
{
|
||
path: 'saju/me',
|
||
element: <SajuMe />,
|
||
},
|
||
];
|