Files
web-page/src/routes.jsx

303 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 />,
},
];