Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
카드 혜택 트래커 (Card Benefit Tracker) 국내 카드 카탈로그를 둘러보고, 내 카드를 담아 지출 패턴에 맞는 최적의 카드를 추천해주는 개인용 웹앱 Giheon-Jeon / card-recommend 합리적인 카드 소비를 위한 개인 맞춤형 혜택 계산기 📌 목차 • 주요 기능 • 🛠 기술 스택 및 선정 이유 • 🏗 아키텍처 및 폴더 구조 • 🤝 협업 및 자동화 규칙 • 🚀 시작하기 • 🔄 카드 카탈로그 자동 수집 • ⚡️ 성능 최적화README 전문 보기 ↗
@tailwindcss/vite 기반으로 빠르고 조화로운 UI 레이아웃 설계.유지보수성과 계산 로직의 격리를 고려한 구조 채택. 서버 없이 전부 클라이언트에서 동작하는 SPA입니다.
card-recommend/
├── 📁 data/
│ ├── categories.json # 지출 카테고리 정의 파일
│ ├── 📁 catalog/ # fetch:catalog로 수집한 전체 카드 원본 데이터 (cards-catalog.json)
│ └── 📁 cards/ # (선택) 전월실적 구간까지 직접 구조화한 수동 카드 데이터
├── 📁 src/
│ ├── 📁 contexts/ # 전역 상태 관리 (GeminiApiKeyContext - API Key 로컬 보안 보관)
│ ├── 📁 hooks/ # 커스텀 훅 (useDebounce 등)
│ ├── 📁 types/ # Card, CatalogEntry, SpendingProfile 등 공통 타입 정의
│ ├── 📁 lib/ # 혜택 계산기, 추천 엔진, 지출 파서, myCards(JSON 백업/검증), spendingProfile(영구저장/스케일링)
│ ├── 📁 components/
│ │ ├── 📁 catalog/ # CatalogGallery(카드 갤러리/다중정렬), MyCardsPage(내 카드/백업 UI), CardDetailModal(카드 상세 모달)
│ │ ├── SimulatorPage.tsx # 혜택 시뮬레이터 탭 (내 카드 / 전체 카드 추천, 지출 입력, 결과)
│ │ ├── SpendingSimulator.tsx # 지출 금액 슬라이더 및 전체 예산 스케일링/초기화 컴포넌트
│ │ ├── SpendingImporter.tsx # 외부 지출 내역 가져오기 (데모/텍스트/이미지 영수증 검증 탭)
│ │ ├── ParsedItemsTable.tsx # 지출 파싱 결과 검토/수정, 행 직접 추가 및 일괄 삭제 테이블
│ │ ├── ApiKeySettings.tsx # Gemini API Key 보안 등록/관리 모달 팝오버
│ │ ├── ErrorBoundary.tsx # 전역 런타임 오류 포착 및 안전 복구 폴백 UI
│ │ └── RecommendationResult.tsx # 추천 결과 카드 및 세부 혜택 계산 내역 표시
│ └── App.tsx # 탭 전환 셸 (카드 갤러리 / 내 카드 / 혜택 시뮬레이터)
├── 📁 tests/ # Vitest 단위 테스트 파일 (컴포넌트, 유틸리티, 접근성 검증)
└── 📁 scripts/
├── fetchCardCatalog.ts # 카드고릴라 카탈로그 수집 스크립트
└── validateCardData.ts # data/cards 스키마 유효성 검사 스크립트
data/catalog/cards-catalog.json(카탈로그)을 기준으로 동작합니다.src/lib/cardConverter.ts가 카탈로그의 자연어 혜택 요약(benefitSummary)을 키워드 매칭으로 파싱해, 계산기가 이해하는 카테고리별 할인/적립률(Card 타입)로 변환합니다. 카탈로그에는 전월실적 구간 정보가 없어, 모든 카탈로그 카드는 실적 조건 없이(0원부터) 혜택이 적용되는 것으로 근사합니다.data/cards/*.json에 수동으로 작성할 수 있습니다.main 브랜치 직접 커밋 금지, BE-전기헌-(이슈번호) 형태의 Feature 브랜치 전략 준수.아래 명령어를 통해 프로젝트 패키지를 설치하고 개발 서버를 가동합니다.
npm install
npm run dev
기타 스크립트:
npm run build # 타입 체크 + 프로덕션 빌드
npm run test # Vitest 단위 테스트 실행
npm run test:coverage # Vitest 테스트 커버리지 리포트 생성
npm run lint # oxlint 코드 정적 분석
npm run lint:a11y # jsx-a11y 웹 접근성 정적 분석
npm run fetch:catalog # 카드 카탈로그 수집/갱신
scripts/fetchCardCatalog.ts는 카드고릴라(card-gorilla.com) 상세 페이지에 SEO용으로 정적 렌더링되는 application/ld+json을 읽어 카드명 / 카드사 / 연회비 / 이미지 URL / 혜택 요약을 data/catalog/cards-catalog.json에 모아줍니다. 앱의 카드 갤러리·내 카드·혜택 시뮬레이터는 이 파일을 기준으로 동작합니다.
npm run fetch:catalog # 전체 카드 수집
npm run fetch:catalog -- --limit=50 # 개수 제한 (테스트용)
sitemap-cards.xml)에서 카드 ID 목록을 가져온 뒤, 요청 간 0.3초 간격을 두고 순회합니다.tiers)까지는 수집하지 않으므로, 실적 구간을 정확히 반영하려면 아래 방법으로 직접 작성해야 합니다.약 1,400여 개의 대용량 카드 카탈로그 데이터(768KB)를 쾌적하게 렌더링하고 검색하기 위해 다양한 성능 최적화를 적용했습니다.
useDebounce): 입력 반응성은 0ms로 즉각 유지하면서, 250ms 디바운스를 적용하여 1,400여 개 배열의 연속적인 필터링 부하를 대폭 줄였습니다.manualChunks로 대용량 카탈로그 JSON과 벤더 라이브러리를 분리하고, 서브 페이지를 React.lazy로 지연 로드하여 진입 JS 크기를 **953kB에서 18kB(98.1% 절감)**로 최적화했습니다.content-visibility: auto와 IntersectionObserver를 적용하여 반응형 Grid 구조를 유지하면서 뷰포트 밖의 렌더링 비용을 0으로 단축했습니다.자세한 전/후 벤치마크 및 가상화 비교 분석은 성능 최적화 보고서에서 확인하실 수 있습니다.