Files
web-page/src/routes.jsx
gahusb 25715a2198 feat: Agent Office — AI 에이전트 가상 오피스 (#2)
## Summary
- Canvas 2D 픽셀아트 오피스 렌더링 (SpriteSheet + TileMap + AgentSprite)
- WebSocket 실시간 에이전트 상태 동기화 (useAgentManager)
- ChatPanel (명령/승인) + TaskHistory (작업 이력) UI
- 다크 테마 + glassmorphism 패널

## Changes (7 commits)
- API helpers + route + Lab entry
- Canvas engine: SpriteSheet, TileMap, AgentSprite, OfficeRenderer
- React hooks: useAgentManager, useOfficeCanvas
- Components: ChatPanel, TaskHistory
- Main page + CSS
- Code review fixes: claude agent 참조 제거, rejected 배지 추가

Reviewed-on: #2
2026-04-11 13:35:35 +09:00

189 lines
4.8 KiB
JavaScript

import React, { lazy } from 'react';
import {
IconHome,
IconBlog,
IconLotto,
IconStock,
IconBuilding,
IconTravel,
IconMusic,
IconLab,
IconTodo,
IconBlogMarketing,
} 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 Travel = lazy(() => import('./pages/travel/Travel'));
const Stock = lazy(() => import('./pages/stock/Stock'));
const StockTrade = lazy(() => import('./pages/stock/StockTrade'));
const Subscription = lazy(() => import('./pages/subscription/Subscription'));
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 BlogMarketing = lazy(() => import('./pages/blog-marketing/BlogMarketing'));
export const navLinks = [
{
id: 'home',
label: 'Home',
path: '/',
subtitle: 'PERSONAL ARCHIVE',
description: '첫 인상과 최신 업데이트를 모아둔 허브',
icon: <IconHome />,
accent: '#f7a8a5',
},
{
id: 'blog',
label: 'Blog',
path: '/blog',
subtitle: 'JOURNAL',
description: '생각과 기록, 코드 스니펫을 모으는 공간',
icon: <IconBlog />,
accent: '#c084fc',
},
{
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: 'realestate',
label: 'Realestate',
path: '/realestate',
subtitle: '부동산',
description: '청약 공고 자동 수집, 매칭, 프로필 기반 자격 분석',
icon: <IconBuilding />,
accent: '#f43f5e',
},
{
id: 'travel',
label: 'Travel',
path: '/travel',
subtitle: 'VISUAL DIARY',
description: '여행에서 담은 색과 장면을 전시하는 갤러리',
icon: <IconTravel />,
accent: '#fb923c',
},
{
id: 'music',
label: 'Music',
path: '/music',
subtitle: 'SONIC FORGE',
description: 'AI로 세상에 하나뿐인 음악을 만드는 스튜디오',
icon: <IconMusic />,
accent: '#f5a623',
},
{
id: 'blog-lab',
label: 'Blog Lab',
path: '/blog-lab',
subtitle: 'MONETIZE',
description: 'AI 블로그 마케팅으로 수익을 만드는 연구소',
icon: <IconBlogMarketing />,
accent: '#10b981',
},
{
id: 'lab',
label: 'Lab',
path: '/lab',
subtitle: 'STREAM',
description: '실험적인 UI/UX 효과를 테스트하는 공간',
icon: <IconLab />,
accent: '#fbbf24',
},
{
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',
},
];
export const appRoutes = [
{
index: true,
element: <Home />,
},
{
path: 'blog',
element: <Blog />,
},
{
path: 'lotto',
element: <Lotto />,
},
{
path: 'stock',
element: <Stock />,
},
{
path: 'stock/trade',
element: <StockTrade />,
},
{
path: 'realestate',
element: <Subscription />,
},
{
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: 'blog-lab',
element: <BlogMarketing />,
},
{
path: 'todo',
element: <Todo />,
},
{
path: 'agent-office',
lazy: () => import('./pages/agent-office/AgentOffice'),
},
];