Files
web-page/src/routes.jsx
gahusb 0eb55fe731 realestate: 프론트 청약 페이지를 realestate-lab API로 전면 리디자인
- Subscription.jsx: /api/subscription/* → /api/realestate/* 전환
- 4탭 구성: 대시보드, 공고 목록, 매칭 결과, 내 프로필
- 대시보드: 수집 상태/실행, 진행중 공고, 신규 매칭 통계
- 공고 목록: 자동 수집 공고 카드 그리드 + 필터 + 상세 패널
- 매칭 결과: 프로필 기반 추천 점수순 목록
- 내 프로필: 자격 조건 + 선호 조건 폼
- routes.jsx: /realestate/property 라우트 제거 (RealEstate.jsx 미사용)
- 구 API 경로(/api/subscription/*, /api/realestate/complexes) 완전 제거

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 04:35:30 +09:00

176 lines
4.4 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',
},
];
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 />,
},
];