Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기new scam dunk by claude code
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
ScamDunk - Stock Scam Red Flag Detector
ScamDunk is a web application that helps retail investors identify potential scam-like red flags in stock pitches they receive. Users enter a stock ticker and the pitch text, and the app analyzes both market data and behavioral patterns to surface potential risks.README 전문 보기 ↗ScamDunk is a web application that helps retail investors identify potential scam-like red flags in stock pitches they receive. Users enter a stock ticker and the pitch text, and the app analyzes both market data and behavioral patterns to surface potential risks.
scamdunk/
├── prisma/
│ └── schema.prisma # Database schema
├── src/
│ ├── app/
│ │ ├── (auth)/
│ │ │ ├── login/ # Login page
│ │ │ └── signup/ # Signup page
│ │ ├── (protected)/
│ │ │ ├── account/ # Account management page
│ │ │ └── check/ # Main stock check page
│ │ ├── api/
│ │ │ ├── auth/ # NextAuth routes + register
│ │ │ ├── billing/ # PayPal config/activate/cancel/subscription
│ │ │ ├── check/ # Main stock analysis endpoint
│ │ │ └── user/usage/ # Usage tracking endpoint
│ │ ├── globals.css # Global styles + CSS variables
│ │ ├── layout.tsx # Root layout with SessionProvider
│ │ └── page.tsx # Landing page
│ ├── components/
│ │ ├── ui/ # shadcn/ui components
│ │ ├── LimitReached.tsx # Limit reached component
│ │ ├── LoadingStepper.tsx # Loading progress component
│ │ └── RiskCard.tsx # Risk analysis result display
│ ├── lib/
│ │ ├── auth.config.ts # Edge-compatible auth config
│ │ ├── auth.ts # Full auth config with providers
│ │ ├── billing.ts # PayPal integration
│ │ ├── config.ts # App configuration
│ │ ├── db.ts # Prisma client singleton
│ │ ├── marketData.ts # Alpha Vantage API integration
│ │ ├── narrative.ts # OpenAI narrative generation
│ │ ├── scoring.ts # Risk scoring engine
│ │ ├── types.ts # TypeScript types
│ │ ├── usage.ts # Usage tracking
│ │ └── utils.ts # Utility functions
│ ├── middleware.ts # Route protection middleware
│ └── tests/
│ └── scoring.test.ts # Scoring logic tests
├── .env.example # Example environment variables
├── package.json
├── tailwind.config.ts
└── tsconfig.json
Clone the repository:
git clone https://github.com/Elimiz21/scam-dunk-re-write-claude-code.git
cd scam-dunk-re-write-claude-code
Install dependencies:
npm install
Set up environment variables:
cp .env.example .env
# Edit .env with your values
Set up the database:
npx prisma generate
npx prisma db push
Run the development server:
npm run dev
Create a .env file with the following variables:
# Database (PostgreSQL/Supabase)
DATABASE_URL="postgresql://user:password@host:5432/database"
DIRECT_URL="postgresql://user:password@host:5432/database"
# NextAuth
NEXTAUTH_SECRET="your-secret-key-here"
NEXTAUTH_URL="http://localhost:3000"
# OpenAI (for narrative generation)
OPENAI_API_KEY="sk-..."
# Alpha Vantage (for real market data)
ALPHA_VANTAGE_API_KEY="your-key"
# PayPal (for subscription processing)
PAYPAL_CLIENT_ID="your-paypal-client-id"
PAYPAL_CLIENT_SECRET="your-paypal-client-secret"
PAYPAL_PLAN_ID="P-..."
PAYPAL_WEBHOOK_ID="your-webhook-id" # optional, for webhook verification
PAYPAL_MODE="sandbox" # "sandbox" or "live"
# Supabase (optional - for direct access)
NEXT_PUBLIC_SUPABASE_URL="https://xxx.supabase.co"
NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJ..."
id: Primary key (cuid)email: Unique email addresshashedPassword: Bcrypt hashed passwordname: Optional display nameplan: "FREE" or "PAID"billingCustomerId: PayPal subscription IDid: Primary keyuserId: Foreign key to UsermonthKey: Format "YYYY-MM"scanCount: Number of scans this monthPOST /api/auth/registerRegister a new user with email/password.
POST /api/checkMain stock analysis endpoint. Requires authentication.
Request Body:
{
"ticker": "ABCD",
"pitchText": "This stock is going to 10x...",
"context": {
"unsolicited": true,
"promisesHighReturns": false,
"urgencyPressure": false,
"secrecyInsideInfo": false
}
}
Response:
{
"riskLevel": "HIGH",
"totalScore": 9,
"signals": [...],
"stockSummary": {...},
"narrative": {...},
"usage": {...}
}
GET /api/user/usageGet current user's usage information.
GET /api/billing/paypal/configReturn the public PayPal client/plan IDs used to render the subscribe button.
POST /api/billing/paypal/activateActivate a PayPal subscription after the buyer approves it.
POST /api/billing/paypal/cancelCancel the current user's active PayPal subscription.
The scoring system is deterministic - no LLM is used for scoring, only for generating human-readable narratives.
| Category | Signals |
|---|---|
| STRUCTURAL | MICROCAP_PRICE (price < $5), SMALL_MARKET_CAP (< $300M), MICRO_LIQUIDITY (< $150k/day), OTC_EXCHANGE |
| PATTERN | SPIKE_7D (50%+ or 100%+ in 7 days), VOLUME_EXPLOSION (5x or 10x average), SPIKE_THEN_DROP |
| ALERT | ALERT_LIST_HIT (regulatory alerts) |
| BEHAVIORAL | UNSOLICITED, PROMISED_RETURNS, URGENCY, SECRECY, SPECIFIC_RETURN_CLAIM |
| Signal | Weight |
|---|---|
| MICROCAP_PRICE | 2 |
| SMALL_MARKET_CAP | 2 |
| MICRO_LIQUIDITY | 2 |
| OTC_EXCHANGE | 3 |
| SPIKE_7D (50-99%) | 3 |
| SPIKE_7D (100%+) | 4 |
| VOLUME_EXPLOSION (5-9x) | 2 |
| VOLUME_EXPLOSION (10x+) | 3 |
| SPIKE_THEN_DROP | 3 |
| ALERT_LIST_HIT | 5 |
| UNSOLICITED | 1 |
| PROMISED_RETURNS | 2 |
| URGENCY | 2 |
| SECRECY | 2 |
| SPECIFIC_RETURN_CLAIM | 1 |
Authentication uses NextAuth.js v5 with:
The auth system is split into two files:
auth.config.ts: Edge-compatible configuration (used by middleware)auth.ts: Full configuration with bcryptjs (used by API routes)Run the test suite:
npm test
Tests cover:
Build the project:
npm run build
Start the production server:
npm start
npm testnpm run buildMIT License
For issues and feature requests, please use GitHub Issues.