Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Stock
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
주식 포트폴리오·동기화·알림이 포함된 Next.js 앱입니다. 앱 소스는 my-app/ 에 있습니다.README 전문 보기 ↗
주식 포트폴리오·동기화·알림이 포함된 Next.js 앱입니다. 앱 소스는 my-app/ 에 있습니다.
git clone … cd Portfolio) 의존성 설치 (npm install --prefix my-app).my-app/.env.local 생성 — 아래 환경 변수 참고. 예전 PC의 .env.local 복사 또는 Vercel 환경 변수 복사.Portfolio (클론한 폴더). my-app/my-app/ 은 본 앱이 아닌 예전 템플릿 조각이 남아 있을 수 있으니 수정 대상이 아닙니다.npm run dev → 로컬에서 화면 확인.localStorage 에 저장됩니다. 새 PC·새 브라우저에서는 비어 있음이 정상입니다. 예전에 쓰던 동기화 키가 있으면 앱의 서버 동기화(Pull) 로 같은 데이터를 불러오거나, 예전 PC에서 키를 확인해 입력하세요.git pull origin main 으로 맞춥니다.코드 최신본은 GitHub main 기준이며, 배포는 보통 my-app에서 npm run deploy(빌드·푸시) 또는 Vercel Git 연동으로 반영됩니다.
저장소에 Claude Code 설정이 들어 있어 git clone 만 하면 같은 규칙·환경으로 시작됩니다.
CLAUDE.md — 프로젝트 규칙·명령어·구조 (데이터 보호, 검증 절차, 커밋 규칙 포함).claude/settings.json — 공유 권한(린트·타입검사·git 조회 허용, .env* 읽기 금지)과 SessionStart 훅.claude/hooks/session-start.sh — 세션 시작 시 my-app 의존성 자동 설치(npm ci).nvmrc — Node 22Git에 없는 것(직접 옮겨야 함): my-app/.env.local(비밀값), 브라우저 localStorage 데이터(동기화 키로 Pull), 개인용 ~/.claude 설정·메모리.
git clone https://github.com/dkfalfxn-netizen/Portfolio.git
cd Portfolio
저장소 루트에서:
npm install --prefix my-app
또는 my-app 폴더로 들어가 npm install.
my-app/.env.example 을 복사해 my-app/.env.local 로 저장합니다.
PowerShell (Windows)
Copy-Item my-app\.env.example my-app\.env.local
macOS / Linux
cp my-app/.env.example my-app/.env.local
.env.local 을 열어 값을 채웁니다.
| 변수 | 용도 |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase 프로젝트 URL (https://xxx.supabase.co) |
SUPABASE_SERVICE_ROLE_KEY | 서버 전용. /api/sync 등 관리자 API용 (Git에 넣지 말 것) |
NEXT_PUBLIC_SUPABASE_ANON_KEY | 브라우저 Supabase 클라이언트 사용 시 (선택) |
이전 PC에만 있는 값은 다음 중 하나로 가져옵니다.
my-app/.env.local 파일을 복사 (USB·클라우드 등)선택 변수 (기능 켤 때만 — 프로덕션(Vercel)에도 동일 이름으로 등록)
| 변수 | 용도 |
|---|---|
TELEGRAM_BOT_TOKEN | 텔레그램 일일 시세 알림 (/api/alert/kakao-price-move) |
TELEGRAM_CHAT_ID | 수신 채팅 ID |
TELEGRAM_ALERT_SYNC_KEY | (권장) 본인 동기화 키와 동일하게 설정 시, 크론이 그 키의 보유·관심종목만 텔레그램 발송 |
CRON_SECRET | Vercel Cron GET 호출 시 Authorization: Bearer … 검증. 프로덕션에서는 설정 권장 |
OPENAI_API_KEY | AI 마켓 인사이트 등 (/api/cron/analyze-market 수동·실험 호출 시) |
DATABASE_URL | Prisma CLI (prisma migrate 등) 사용 시에만 |
저장소 루트:
npm run dev
또는 cd my-app 후 npm run dev → 브라우저에서 http://localhost:3000
npm run build
(루트 스크립트는 my-app 에서 빌드합니다.)
이 저장소는 my-app 에서 npm run deploy 하면:
my-app 빌드git commit -m "chore: deploy"git push → Vercel이 Git 연동으로 자동 배포Vercel 쪽 설정 참고
my-app 이면 my-app/vercel.json 의 Cron·빌드 설정이 적용됩니다..env.local 은 Git에 없음).my-app/vercel.json 기준 (UTC → 한국은 KST = UTC+9):
| 경로 | UTC | 역할 |
|---|---|---|
/api/cron/daily-snapshot | 0 7 * * *, 0 8 * * * | 모든 동기화 키에 대해 saveAllSnapshots 로 일별 스냅만 저장 |
/api/alert/kakao-price-move | 슬롯별 (0930, 1400, 2400 쿼리) | 텔레그램 브리핑 (TELEGRAM_ALERT_SYNC_KEY 등) |
데이터 분석·이메일·유동성/거시 크론은 현재 vercel.json 에서 제외했습니다. 해당 API 라우트는 필요 시 수동 호출용으로 남아 있습니다.
일별 자산 스냅샷은 daily-snapshot 크론이 담당합니다. 앱에서 서버로 보내는 클라이언트 스냅과 병합됩니다.
Supabase SQL 편집기에서 아래 순서로 실행합니다 (파일은 my-app/supabase/*.sql).
portfolio_snapshots.sql — 동기화 본문(종목·현금)portfolio_snapshots_holdings_sort.sql — 정렬 컬럼 추가(기존 DB 업그레이드용)portfolio_daily_snapshots.sql — 일별 자산 (1번의 sync_key 참조)alert_configs.sql — (레거시) 예전 비중 이메일 기능용 테이블. 현재 UI/API는 비활성화되어 있으며 미적용 가능price_move_alert_logs.sql — 텔레그램 중복 발송 방지 로그watchlist_column.sql — 관심종목 JSON 컬럼 (portfolio_snapshots.watchlist)market_reports.sql — (해당 기능 사용 시)liquidity_briefings.sql — 오전 9시 유동성 지표 시계열/AI 요약 저장| 키 | 의미 |
|---|---|
portfolio_sync_key_v1 | 동기화 키 |
portfolio_last_sync_ts_v1 | 마지막으로 맞춘 서버 updated_at |
portfolio_has_local_changes_v1 | "1" 이면 로컬 수정 후 서버 미반영 |
portfolio_daily_snapshots_v1 | 일별 스냅샷 JSON (달력·추이) |
portfolio_snapshot_pushed_date_v1 / portfolio_snapshot_pushed_total_v1 | 당일 서버 스냅샷 push 여부·총액 |
| 명령 | 설명 |
|---|---|
npm run dev | 개발 서버 |
npm run build | 프로덕션 빌드 |
npm run lint | ESLint |
npm run deploy | 빌드 후 커밋·푸시 ( my-app 에서 실행하는 것과 동일 스크립트 ) |
| 경로 | 내용 |
|---|---|
my-app/ | Next.js 앱 (app/, lib/, vercel.json 등) |
my-app/supabase/*.sql | Supabase 테이블 생성·마이그레이션 (신규 프로젝트 시 순서대로 실행) |
my-app/.env.example | 환경 변수 템플릿 (커밋됨) |
scripts/deploy.cjs | 배포용: 빌드 → 커밋(변경 시) → 푸시 |
비밀 값은 절대 Git에 커밋하지 말고, 새 환경에서는 .env.local 복사 또는 Vercel에서 다시 입력하세요.
.env.local 과 동기화 키(또는 서버 Pull) 만 맞으면, 이전과 같은 서버 데이터를 이어서 쓸 수 있습니다.동기화(클라이언트): 브라우저마다 localStorage에 마지막으로 맞춘 서버 시각(portfolio_last_sync_ts_v1)과 로컬 수정 여부(portfolio_has_local_changes_v1)가 저장됩니다. 새 브라우저에서는 비어 있으므로, 같은 동기화 키로 서버에서 불러오기를 한 번 하면 서버 기준으로 맞춰집니다. 동시에 두 기기에서 편집하면 마지막 저장이 덮어쓸 수 있으니, 한쪽에서 저장이 끝난 뒤 다른 쪽을 여는 것이 안전합니다.
충돌 시 동작: 서버가 더 최신이어도 로컬에 미반영 변경(portfolio_has_local_changes_v1 === "1")이 있으면 서버 데이터로 덮어쓰지 않고 먼저 로컬을 서버에 올립니다. (입력 직후 현금·종목이 사라지는 문제 방지)
/api/alert/kakao-price-move — 보유 전 종목, 종목명 표시, 매일 16:00 KST(크론). 앱에서 진단(전송 없음) 버튼으로 환경변수·시세 점검 가능.my-app 에서 npm run deploy → 빌드 후 변경 시 커밋·git push → Vercel 자동 배포.