Skip to content

[FEAT] Home 페이지 UI 구현#5

Merged
theSnackOverflow merged 38 commits intomainfrom
feat/home
Feb 27, 2026
Merged

[FEAT] Home 페이지 UI 구현#5
theSnackOverflow merged 38 commits intomainfrom
feat/home

Conversation

@theSnackOverflow
Copy link
Collaborator

@theSnackOverflow theSnackOverflow commented Feb 26, 2026

Pull Request Title

feat: Home 페이지 UI 구현


PR 설명

Home 페이지의 전체 UI를 구현했습니다.

  • HomeGreetingSection 구현 (배너, 인사말, 지갑)
  • HomeStockSection 구현 (내 종목 리스트, 필터, 드래그앤드롭 정렬, AI 분석 요약)
  • HomeMarketSection 구현 (한국/미국/CRYPTO 카테고리별 종목 카드, 가로 스크롤)
  • MarketCard에 styleVariants 적용 (horizontal/vertical 분기)
  • Mock 데이터를 .mock.ts 파일로 분리 및 props 주입 방식으로 리팩토링
  • ESLint 설정에 react-hooks, react-refresh 플러그인 추가
  • tsconfig.node.json include 경로 오타 수정
  • mobileFrame 불완전한 backgroundColor 값 제거
  • index.html lang, favicon type 수정 및 meta description 추가

스크린샷

UI 변경이 있을 경우 스크린샷을 첨부해주세요.


추가 설명

  • MarketCard는 styleVariants로 가로형(한국/미국)과 세로형(CRYPTO) 레이아웃을 분기합니다
  • 한국/미국 카테고리는 2행 x 가로 스크롤 그리드, CRYPTO는 1행 x 가로 스크롤 그리드로 구성됩니다
  • HomeGreetingSection은 props로 데이터를 주입받아 API 연동 시 컴포넌트 수정 없이 교체 가능합니다
  • 현재 Mock 데이터를 사용하고 있으며, 추후 API 연동이 필요합니다

theSnackOverflow and others added 30 commits January 23, 2026 14:57
* chore:VE 세팅을 위한 TailwindCSS 설정 주석 처리

* chore:모바일레이아웃 및 뷰포트 세팅

* chore:컬러 팔레트 세팅

* chore:컬러 시스템 적용

* chore:테스트용 라우팅 설정

* chore: alias 설정?
- vite-plugin-svgr 의존성 및 플러그인 설정 추가
- SVG to React 컴포넌트 변환 스크립트 추가
- 아이콘 SVG 파일 및 SVGR 생성 컴포넌트 추가
- 미사용 react.svg 에셋 삭제
- 홈 페이지 컴포넌트 및 라우트 추가
HomeBanner를 HomeGreetingSection으로 교체하고
HomeWallet 컴포넌트 추가. 모바일 프레임 배경색 조정.
@gemini-code-assist
Copy link

Summary of Changes

Hello @theSnackOverflow, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 애플리케이션의 핵심 UI인 홈, 시장, 종목 상세 페이지를 구현합니다. 사용자에게 개인화된 주식 정보, 시장 동향, 그리고 특정 종목에 대한 심층적인 데이터를 제공하는 데 중점을 둡니다. 새로운 라우팅 시스템과 스타일링 솔루션을 도입하여 확장 가능하고 유지보수하기 쉬운 프론트엔드 아키텍처를 구축했습니다. 또한, 사용자 경험을 향상시키기 위한 드래그앤드롭 정렬 및 SVG 아이콘 처리와 같은 기능도 포함되어 있습니다.

Highlights

  • Home 페이지 UI 구현: 배너, 인사말, 지갑, 내 종목 리스트, 필터, 드래그앤드롭 정렬, AI 분석 요약, 시장 카테고리별 종목 카드 (가로 스크롤) 등 홈 페이지의 주요 UI 섹션을 구현했습니다.
  • 시장 페이지 UI 구현: 주요 뉴스, 시장 지수, 오늘의 픽, 소셜 트레이딩 섹션을 포함하는 시장 페이지 UI를 구현했습니다.
  • 종목 상세 페이지 UI 구현: 종목 헤더, 탭 내비게이션, 기간 선택기, 차트 영역, 시세 정보, 카테고리 태그, 재무제표 요약, 산업/기업 소식, 피드 섹션 등 종목 상세 페이지의 다양한 컴포넌트를 구현했습니다.
  • 기술 스택 및 아키텍처 개선: react-router-dom을 이용한 라우팅 시스템을 도입하고, @vanilla-extract/css를 활용한 타입스크립트 기반의 스타일링 시스템을 구축했습니다. 또한 @dnd-kit을 사용하여 내 종목 리스트의 드래그앤드롭 정렬 기능을 추가하고, vite-plugin-svgr로 SVG 아이콘을 React 컴포넌트로 변환하여 사용하도록 설정했습니다.
  • 개발 환경 설정 업데이트: ESLint 설정을 업데이트하고 TypeScript 경로 별칭(@/*)을 설정하여 개발 편의성을 높였습니다.
Changelog
  • eslint.config.js
    • 불필요한 ESLint 플러그인 및 설정을 제거하고 eslint-plugin-import 및 TypeScript 리졸버를 추가했습니다.
  • index.html
    • 파비콘을 vite.svg에서 stocat.png로 변경하고 페이지 타이틀을 'Vite + React + TS'에서 'Stocat'으로 업데이트했습니다.
  • package-lock.json
    • @dnd-kit 관련 패키지, react-router-dom, @vanilla-extract/vite-plugin, eslint-import-resolver-typescript, vite-plugin-svgr 등 다수의 의존성을 추가하고 기존 의존성 버전을 업데이트했습니다.
  • package.json
    • @dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities, react-router-dom 의존성을 추가했습니다.
    • 개발 의존성으로 @vanilla-extract/vite-plugin, eslint-import-resolver-typescript, vite-plugin-svgr을 추가했습니다.
    • SVG 파일을 React 컴포넌트로 변환하는 svgr 스크립트를 추가했습니다.
  • public/svg/Ai-Sparkle.svg
    • AI 스파클 아이콘 SVG 파일을 추가했습니다.
  • public/svg/Vector-Right.svg
    • 오른쪽 화살표 아이콘 SVG 파일을 추가했습니다.
  • src/App.css
    • Tailwind CSS import를 주석 처리했습니다.
  • src/App.tsx
    • 기존의 테스트용 App.tsx 파일을 삭제했습니다.
  • src/app/App.tsx
    • 새로운 메인 App 컴포넌트를 추가하여 Header, Outlet, BottomAppBar를 포함하는 기본 레이아웃을 정의했습니다.
  • src/app/app.css.ts
    • 애플리케이션의 뷰포트, 모바일 프레임, 콘텐츠 영역에 대한 스타일을 vanilla-extract로 정의했습니다.
  • src/app/routes.tsx
    • react-router-dom을 사용하여 애플리케이션의 라우팅 구조를 설정하고, 홈, 시장, 종목 상세, 테스트 페이지 라우트를 정의했습니다.
  • src/assets/icons/components/AiSparkle.tsx
    • Ai-Sparkle.svg 파일을 React 컴포넌트로 변환한 파일을 추가했습니다.
  • src/assets/icons/components/VectorRight.tsx
    • Vector-Right.svg 파일을 React 컴포넌트로 변환한 파일을 추가했습니다.
  • src/assets/icons/components/index.ts
    • SVG 아이콘 컴포넌트들을 내보내는 인덱스 파일을 추가했습니다.
  • src/assets/react.svg
    • 기존의 react.svg 파일을 삭제했습니다.
  • src/global.css
    • Tailwind CSS import와 @theme 블록을 주석 처리했습니다.
  • src/index.css
    • Tailwind CSS import와 전역 box-sizing 규칙을 주석 처리했습니다.
  • src/layout/BottomAppBar/BottomAppBar.css.ts
    • 하단 앱 바 및 거래 바에 대한 스타일을 vanilla-extract로 정의했습니다.
  • src/layout/BottomAppBar/BottomAppBar.tsx
    • 현재 라우트에 따라 내비게이션 바 또는 거래 바를 렌더링하는 BottomAppBar 컴포넌트를 추가했습니다.
  • src/layout/BottomAppBar/index.ts
    • BottomAppBar 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/layout/Header/Header.css.ts
    • 헤더 컴포넌트에 대한 스타일을 vanilla-extract로 정의했습니다.
  • src/layout/Header/Header.mock.ts
    • 시장 지수 정보에 대한 목업 데이터를 추가했습니다.
  • src/layout/Header/Header.tsx
    • 앱 로고, 시장 지수 정보, 검색/알림/메뉴 버튼을 포함하는 Header 컴포넌트를 추가했습니다.
  • src/layout/Header/Header.types.ts
    • 시장 지수 정보에 대한 TypeScript 타입을 정의했습니다.
  • src/layout/Header/index.ts
    • Header 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/layout/Header/useIndexInfo.ts
    • 시장 지수 데이터를 가져오거나 목업 데이터를 사용하는 useIndexInfo 커스텀 훅을 추가했습니다.
  • src/main.tsx
    • react-router-domRouterProvider를 사용하여 애플리케이션을 렌더링하도록 main.tsx 파일을 수정했습니다.
  • src/pages/home/Home.css.ts
    • 홈 페이지의 레이아웃 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/home/Home.tsx
    • HomeGreetingSection, HomeStockSection, HomeMarketSection으로 구성된 홈 페이지 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeGreetingSection/HomeBanner/HomeBanner.css.ts
    • 홈 배너 컴포넌트의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/home/components/HomeGreetingSection/HomeBanner/HomeBanner.tsx
    • 튜토리얼 메시지와 장식용 원형 요소를 포함하는 HomeBanner 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeGreetingSection/HomeGreetingSection.css.ts
    • 홈 인사말 섹션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/home/components/HomeGreetingSection/HomeGreetingSection.tsx
    • 인사말, 타이머, 지갑 정보를 표시하는 HomeGreetingSection 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeGreetingSection/HomeWallet/HomeWallet.css.ts
    • 홈 지갑 섹션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/home/components/HomeGreetingSection/HomeWallet/HomeWallet.tsx
    • 현재 통화 잔액과 '나의 지갑' 링크를 표시하는 HomeWallet 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeMarketSection/HomeMarketSection.css.ts
    • 홈 시장 섹션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/home/components/HomeMarketSection/HomeMarketSection.tsx
    • 한국, 미국, 암호화폐 시장 카테고리별 종목 데이터를 표시하는 HomeMarketSection 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeMarketSection/MarketCard/MarketCard.css.ts
    • 시장 카드 컴포넌트의 스타일을 vanilla-extractstyleVariants를 사용하여 가로 및 세로 레이아웃으로 정의했습니다.
  • src/pages/home/components/HomeMarketSection/MarketCard/MarketCard.tsx
    • variant prop에 따라 다른 레이아웃으로 주식 정보를 표시하는 MarketCard 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeMarketSection/MarketCategory/MarketCategory.css.ts
    • 시장 카테고리 컴포넌트의 그리드 레이아웃 스타일을 vanilla-extractstyleVariants를 사용하여 정의했습니다.
  • src/pages/home/components/HomeMarketSection/MarketCategory/MarketCategory.tsx
    • MarketCard 목록을 가로 또는 세로 레이아웃으로 렌더링하는 MarketCategory 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeStockSection/HomeStockSection.css.ts
    • 홈 주식 섹션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/home/components/HomeStockSection/HomeStockSection.tsx
    • 사용자 주식 잔액, 필터링 가능한 주식 목록, AI 분석을 표시하는 HomeStockSection 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeStockSection/StockAnalysis/StockAnalysis.css.ts
    • 주식 분석 컴포넌트의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/home/components/HomeStockSection/StockAnalysis/StockAnalysis.tsx
    • AI 분석 요약 정보를 캐릭터 아이콘과 함께 표시하는 StockAnalysis 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeStockSection/StockList/MyStockContent.css.ts
    • 주식 목록의 개별 종목 아이템 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/home/components/HomeStockSection/StockList/MyStockContent.tsx
    • 단일 주식의 상세 정보를 표시하는 MyStockContent 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeStockSection/StockList/SortableStockItem.tsx
    • @dnd-kit을 사용하여 드래그앤드롭 기능을 제공하는 SortableStockItem 컴포넌트를 추가했습니다.
  • src/pages/home/components/HomeStockSection/StockList/StockList.css.ts
    • 주식 목록 및 필터 배지 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/home/components/HomeStockSection/StockList/StockList.tsx
    • 주식 데이터 관리, 필터링, 드래그앤드롭 재정렬 기능을 포함하는 StockList 컴포넌트를 추가했습니다.
  • src/pages/home/components/index.ts
    • 홈 페이지 컴포넌트들을 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/home/routes.tsx
    • 홈 페이지 라우트를 정의했습니다.
  • src/pages/market/Market.css.ts
    • 시장 페이지의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/market/Market.tsx
    • MajorNewsSection, MarketIndexSection, TodaysPick, SocialTrading으로 구성된 시장 페이지 컴포넌트를 추가했습니다.
  • src/pages/market/components/MajorNewsSection/MajorNewsSection.css.ts
    • 주요 뉴스 섹션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/market/components/MajorNewsSection/MajorNewsSection.tsx
    • 헤드라인 뉴스 카드를 표시하는 MajorNewsSection 컴포넌트를 추가했습니다.
  • src/pages/market/components/MajorNewsSection/index.ts
    • MajorNewsSection 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/market/components/MarketIndexSection/IndexItem.tsx
    • 개별 시장 지수 데이터를 표시하는 IndexItem 컴포넌트를 추가했습니다.
  • src/pages/market/components/MarketIndexSection/MarketIndexSection.css.ts
    • 시장 지수 섹션의 탭 및 지수 표시 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/market/components/MarketIndexSection/MarketIndexSection.mock.ts
    • 다양한 탭(한국, 미국, 암호화폐)에 대한 시장 지수 목업 데이터를 추가했습니다.
  • src/pages/market/components/MarketIndexSection/MarketIndexSection.tsx
    • 탭 내비게이션과 함께 시장 지수를 표시하는 MarketIndexSection 컴포넌트를 추가했습니다.
  • src/pages/market/components/MarketIndexSection/MarketIndexSection.types.ts
    • 시장 지수 데이터에 대한 TypeScript 타입을 정의했습니다.
  • src/pages/market/components/MarketIndexSection/index.ts
    • MarketIndexSection 컴포넌트들을 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/market/components/MarketIndexSection/useMarketIndex.ts
    • 활성 탭을 관리하고 시장 지수 데이터를 가져오거나 목업 데이터를 사용하는 useMarketIndex 커스텀 훅을 추가했습니다.
  • src/pages/market/components/SocialTrading/CTACard.css.ts
    • 소셜 트레이딩 섹션의 CTA 카드 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/market/components/SocialTrading/CTACard.tsx
    • 콜투액션 요소를 위한 CTACard 컴포넌트를 추가했습니다.
  • src/pages/market/components/SocialTrading/SocialTrading.css.ts
    • 소셜 트레이딩 섹션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/market/components/SocialTrading/SocialTrading.tsx
    • 두 개의 CTA 카드를 표시하는 SocialTrading 컴포넌트를 추가했습니다.
  • src/pages/market/components/SocialTrading/index.ts
    • SocialTrading 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/market/components/TodaysPick/TodaysPick.css.ts
    • '오늘의 픽' 섹션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/market/components/TodaysPick/TodaysPick.mock.ts
    • 다양한 카테고리(인기, 거래대금 등)에 대한 '오늘의 픽' 주식 목업 데이터를 추가했습니다.
  • src/pages/market/components/TodaysPick/TodaysPick.tsx
    • 탭 기반 필터링 및 즐겨찾기 토글 기능을 포함하는 주식 목록을 표시하는 TodaysPick 컴포넌트를 추가했습니다.
  • src/pages/market/components/TodaysPick/TodaysPick.types.ts
    • '오늘의 픽' 주식 및 탭에 대한 TypeScript 타입을 정의했습니다.
  • src/pages/market/components/TodaysPick/components/CategoryTag/CategoryTag.css.ts
    • 카테고리 태그의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/market/components/TodaysPick/components/CategoryTag/CategoryTag.tsx
    • CategoryTag 컴포넌트를 추가했습니다.
  • src/pages/market/components/TodaysPick/components/CategoryTag/index.ts
    • CategoryTag 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/market/components/TodaysPick/components/StockCard/StockCard.css.ts
    • '오늘의 픽' 섹션의 주식 카드 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/market/components/TodaysPick/components/StockCard/StockCard.tsx
    • 주식 상세 정보와 즐겨찾기 버튼을 표시하는 StockCard 컴포넌트를 추가했습니다.
  • src/pages/market/components/TodaysPick/components/StockCard/index.ts
    • StockCard 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/market/components/TodaysPick/components/TabNavigation/TabNavigation.css.ts
    • 탭 내비게이션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/market/components/TodaysPick/components/TabNavigation/TabNavigation.tsx
    • 주식 필터링을 위한 TabNavigation 컴포넌트를 추가했습니다.
  • src/pages/market/components/TodaysPick/components/TabNavigation/index.ts
    • TabNavigation 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/market/components/TodaysPick/components/index.ts
    • '오늘의 픽' 섹션의 하위 컴포넌트들을 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/market/components/TodaysPick/index.ts
    • TodaysPick 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/market/components/TodaysPick/useTodaysPick.ts
    • 활성 탭, 주식 데이터, 즐겨찾기 토글을 관리하는 useTodaysPick 커스텀 훅을 추가했습니다.
  • src/pages/market/routes.tsx
    • 시장 페이지 라우트를 정의했습니다.
  • src/pages/stockDetail/StockDetail.css.ts
    • 종목 상세 페이지의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/StockDetail.mock.ts
    • 종목 상세 정보, 탭, 기간, 시세 정보, 뉴스에 대한 목업 데이터를 추가했습니다.
  • src/pages/stockDetail/StockDetail.tsx
    • '정보' 및 '나의 주식' 탭을 포함하여 상세 주식 정보를 표시하는 StockDetail 페이지 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/StockDetail.types.ts
    • 종목 상세 데이터에 대한 TypeScript 타입을 정의했습니다.
  • src/pages/stockDetail/components/CategoryTags/CategoryTags.css.ts
    • 종목 상세 페이지의 카테고리 태그 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/components/CategoryTags/CategoryTags.tsx
    • 주식 카테고리를 표시하는 CategoryTags 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/components/CategoryTags/index.ts
    • CategoryTags 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/components/ChartArea/ChartArea.css.ts
    • 차트 영역의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/components/ChartArea/ChartArea.tsx
    • 플레이스홀더가 있는 ChartArea 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/components/ChartArea/index.ts
    • ChartArea 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/components/FeedSection/FeedSection.css.ts
    • 피드 섹션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/components/FeedSection/FeedSection.tsx
    • 종목 관련 피드를 표시하는 FeedSection 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/components/FeedSection/index.ts
    • FeedSection 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/components/FinancialSummary/FinancialSummary.css.ts
    • 재무제표 요약 버튼의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/components/FinancialSummary/FinancialSummary.tsx
    • 버튼이 있는 FinancialSummary 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/components/FinancialSummary/index.ts
    • FinancialSummary 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/components/NewsSection/NewsSection.css.ts
    • 뉴스 섹션의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/components/NewsSection/NewsSection.tsx
    • 뉴스 아이템을 표시하는 NewsSection 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/components/NewsSection/index.ts
    • NewsSection 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/components/PeriodSelector/PeriodSelector.css.ts
    • 기간 선택기 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/components/PeriodSelector/PeriodSelector.tsx
    • 차트 기간을 선택하는 PeriodSelector 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/components/PeriodSelector/index.ts
    • PeriodSelector 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/components/PriceInfo/PriceInfo.css.ts
    • 시세 정보 표시 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/components/PriceInfo/PriceInfo.tsx
    • 일일 및 연간 가격 범위를 표시하는 PriceInfo 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/components/PriceInfo/index.ts
    • PriceInfo 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/components/StockHeader/StockHeader.css.ts
    • 종목 상세 헤더의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/components/StockHeader/StockHeader.tsx
    • 종목 이름, 현재 가격, 변동률을 표시하는 StockHeader 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/components/StockHeader/index.ts
    • StockHeader 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/components/TabNav/TabNav.css.ts
    • 종목 상세 페이지의 탭 내비게이션 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/stockDetail/components/TabNav/TabNav.tsx
    • 종목 정보와 나의 주식 뷰를 전환하는 TabNav 컴포넌트를 추가했습니다.
  • src/pages/stockDetail/components/TabNav/index.ts
    • TabNav 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/index.ts
    • StockDetail 컴포넌트를 내보내는 인덱스 파일을 추가했습니다.
  • src/pages/stockDetail/routes.tsx
    • 종목 상세 페이지 라우트를 정의했습니다.
  • src/pages/test/ColorTestPage.css.ts
    • 색상 테스트 페이지의 스타일을 vanilla-extract로 정의했습니다.
  • src/pages/test/ColorTestPage.tsx
    • 정의된 색상 팔레트를 시각적으로 테스트하는 ColorTestPage 컴포넌트를 추가했습니다.
  • src/pages/test/routes.tsx
    • 테스트 페이지 라우트를 정의했습니다.
  • src/shared/styles/color.scale.css.ts
    • vanilla-extract를 위한 색상 스케일 정의를 추가했습니다.
  • src/shared/styles/color.semantic.css.ts
    • 색상 스케일을 기반으로 한 의미론적 색상 정의를 추가했습니다.
  • src/shared/styles/global.css.ts
    • vanilla-extract를 사용하여 전역 CSS 스타일을 추가했습니다.
  • src/shared/styles/vars.css.ts
    • vanilla-extract 테마 변수를 추가했습니다.
  • tsconfig.app.json
    • 절대 경로 임포트를 위해 baseUrlpaths를 업데이트했습니다.
  • tsconfig.node.json
    • include 필드에 srccustom.d.ts를 포함하도록 업데이트했습니다.
  • vite.config.ts
    • @vanilla-extract/vite-plugin, vite-plugin-svgr 플러그인 및 경로 별칭을 사용하도록 Vite 설정을 구성했습니다.
Activity
  • theSnackOverflow 님이 'feat: Home 페이지 UI 구현' 제목으로 풀 리퀘스트를 생성했습니다.
  • 풀 리퀘스트 설명에 홈 페이지의 주요 UI 섹션 구현 목록과 스크린샷을 첨부했습니다.
  • MarketCard의 styleVariants 적용 및 Mock 데이터 사용에 대한 추가 설명을 제공했습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@theSnackOverflow theSnackOverflow changed the title feat: Home 페이지 UI 구현 [FEAT] Home 페이지 UI 구현 Feb 26, 2026
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

전반적으로 Home 페이지의 UI 구현이 잘 이루어졌습니다. 컴포넌트 구조화와 vanilla-extract를 사용한 스타일링이 인상적입니다. 몇 가지 수정이 필요한 부분과 개선점을 발견하여 아래에 코멘트를 남겼습니다. 특히 tsconfig.node.json의 오타와 app.css.ts의 잘못된 CSS 속성 값은 빌드 또는 런타임 오류를 유발할 수 있으니 확인이 필요합니다. 또한, 여러 컴포넌트에서 아이콘이 인라인 SVG로 작성되어 있는데, svgr 설정을 활용하여 컴포넌트로 분리하면 코드 가독성과 유지보수성을 높일 수 있을 것입니다.

Comment on lines +25 to +45
<button className={styles.iconButton} aria-label="Search">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11 19C15.4183 19 19 15.4183 19 11C19 6.58172 15.4183 3 11 3C6.58172 3 3 6.58172 3 11C3 15.4183 6.58172 19 11 19Z" stroke="#1A1A1A" strokeLinecap="round" strokeLinejoin="round"/>
<path d="M20.9984 21.0004L16.6484 16.6504" stroke="#1A1A1A" strokeLinecap="round" strokeLinejoin="round"/>
</svg>
</button>
<button className={styles.iconButton} aria-label="Bell">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18 9C18 7.4087 17.3679 5.88258 16.2426 4.75736C15.1174 3.63214 13.5913 3 12 3C10.4087 3 8.88258 3.63214 7.75736 4.75736C6.63214 5.88258 6 7.4087 6 9C6 16 3 18 3 18H21C21 18 18 16 18 9Z" stroke="#1A1A1A" strokeLinecap="round" strokeLinejoin="round"/>
<path d="M13.7295 20C13.5537 20.3031 13.3014 20.5547 12.9978 20.7295C12.6941 20.9044 12.3499 20.9965 11.9995 20.9965C11.6492 20.9965 11.3049 20.9044 11.0013 20.7295C10.6977 20.5547 10.4453 20.3031 10.2695 20" stroke="#1A1A1A" strokeLinecap="round" strokeLinejoin="round"/>
<circle cx="17" cy="6" r="4" fill="#F46163"/>
</svg>
</button>
<button className={styles.iconButton} aria-label="Menu">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 12H21" stroke="#1A1A1A" strokeLinecap="round" strokeLinejoin="round"/>
<path d="M3 6H21" stroke="#1A1A1A" strokeLinecap="round" strokeLinejoin="round"/>
<path d="M3 18H21" stroke="#1A1A1A" strokeLinecap="round" strokeLinejoin="round"/>
</svg>
</button>
</div>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

아이콘을 인라인 SVG로 직접 사용하고 있습니다. vite-plugin-svgr이 설정되어 있으므로, SVG 파일들을 아이콘 컴포넌트로 변환하여 사용하는 것이 일관성 있고 유지보수하기 좋습니다. 아이콘들을 src/assets/icons/components와 같은 곳에 컴포넌트로 추가하고 임포트해서 사용하면 코드가 더 깔끔해질 것입니다. BottomAppBar.tsx 파일에도 동일하게 적용할 수 있습니다.

className={styles.ctaMyWalletVector}
/>
</button>
<div className={styles.currentTime}>20:42 기준</div>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

기준 시간이 "20:42 기준"으로 하드코딩되어 있습니다. 이 부분은 실제 데이터가 표시될 때 동적으로 생성되어야 합니다. 현재 시간을 포맷팅하여 표시하는 유틸리티 함수를 만들어 사용하는 것을 추천합니다.

Suggested change
<div className={styles.currentTime}>20:42 기준</div>
<div className={styles.currentTime}>{new Date().toLocaleTimeString('ko-KR', { hour: '2-digit', minute: '2-digit' })} 기준</div>

@vercel
Copy link

vercel bot commented Feb 26, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
stocat Ready Ready Preview, Comment Feb 26, 2026 2:59am

- tsconfig.node.json에서 src 제거 (tsconfig.app.json에서만 처리)
- @vanilla-extract/css를 devDependencies에 명시 추가
- useIndexInfo 미사용 setError 변수 제거
- React 플러그인 추가 및 vendor chunk 분리 (react, react-router-dom)
- 전 페이지 React.lazy 동적 import 적용
- 1.3MB Base64 SVG 컴포넌트를 img 태그로 교체
- 단일 번들 1,728KB에서 초기 로드 ~306KB로 감소
@theSnackOverflow theSnackOverflow added feat 새로운 기능 요청/추가 design UI/디자인 변경 labels Feb 26, 2026
@tmdcks1103
Copy link
Collaborator

고생하셨습니다! [gemini-code-assist] 피드백 확인 후 merge 해도 될 것 같습니다!

@gemini-code-assist
Copy link

안녕하세요, @tmdcks1103 님! PR에 대한 피드백을 확인해 주셔서 감사합니다. 요청하신 대로 전체 변경 사항에 대한 상세 리뷰를 진행했습니다.

전반적으로 이번 PR은 react-router-dom을 이용한 라우팅 시스템, @vanilla-extract/css를 활용한 타입스크립트 기반 스타일링 시스템, @dnd-kit을 사용한 드래그앤드롭 정렬 기능 등 애플리케이션의 핵심 UI와 기술 스택을 성공적으로 구현했습니다. 코드 구조가 잘 정리되어 있고, 각 컴포넌트와 페이지가 명확하게 분리되어 있어 유지보수성이 높습니다. 특히 vanilla-extractstyleVariants를 효과적으로 사용하여 재사용 가능한 스타일을 정의한 점이 인상 깊습니다.

몇 가지 사소한 개선 사항이 있지만, 전체적인 기능 구현과 코드 품질은 매우 훌륭합니다. 아래에 발견된 몇 가지 사항을 공유드립니다.

발견된 개선 사항

  • 일관된 SVG 아이콘 사용 (낮음): src/layout/BottomAppBar/BottomAppBar.tsx, src/layout/Header/Header.tsx, src/pages/market/components/MajorNewsSection/MajorNewsSection.tsx, src/pages/market/components/TodaysPick/components/StockCard/StockCard.tsx 파일에서 SVG 아이콘을 직접 인라인으로 삽입하고 있습니다. vite-plugin-svgr을 통해 src/assets/icons/components에 생성된 React 컴포넌트(AiSparkle, VectorRight 등)를 사용하는 것이 일관성과 유지보수 측면에서 더 좋습니다. 이렇게 하면 아이콘의 크기나 색상 등을 props로 쉽게 제어할 수 있습니다.
  • StrictMode 재고 (낮음): src/main.tsx에서 StrictMode가 제거되었습니다. StrictMode는 개발 모드에서 잠재적인 문제를 식별하는 데 도움이 되므로, 개발 환경에서는 유지하는 것을 권장합니다. 프로덕션 빌드에는 영향을 미치지 않습니다.

위의 사항들은 낮음 수준의 개선 제안이며, 현재 PR의 기능이나 안정성에 중대한 영향을 미치지 않습니다. 전반적인 구현이 잘 되어 있으므로, 이 PR은 병합해도 좋을 것 같습니다.

훌륭한 작업에 감사드립니다!

@theSnackOverflow theSnackOverflow merged commit a997600 into main Feb 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

design UI/디자인 변경 feat 새로운 기능 요청/추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants