Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
남은 현금을 확인하고 자산을 추적하며 은퇴 시점을 알려주는 예산·투자·은퇴 관리 도구
See your leftover cash, follow what you own, and know when you can stop working. Budget, Invest, and Retire in one place. Educational, not advice.
금융TypeScript · CSSGitHub @0xamars온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Investment App
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Product direction is in ROADMAP.md. Read that first and follow its product rules.
A modern, beautiful web app for tracking your investment portfolio and planning your retirement.
Built with Next.js, Supabase, and Tailwind CSS.
Portfolio Management — Add and track stocks, crypto, and other assets
Real-time Prices — Live market data for stocks and cryptocurrencies
Performance Tracking — Profit/Loss, returns, and portfolio allocation
Clean Dashboard — Beautiful, responsive UI
Node.js (v18+)
Supabase account
Clone the repository:
git clone [https://github.com/0xamars/My-Invest-Master.git](https://github.com/0xamars/My-Invest-Master.git)
cd My-Invest-Master
npm install
.env.local and add credentials (see below).| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Yes | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Yes | Supabase anon key |
FMP_API_KEY | Yes | Financial Modeling Prep API key — quotes, batch quotes, history, news, symbol search, crypto prices, and Analysis fundamentals. Results are cached in the Supabase warehouse |
FMP_API_BASE | No | Override FMP API base (default https://financialmodelingprep.com/stable) |
FMP_DISPLAY_GATE_ENABLED | No | 1 or true limits FMP-backed market data to confirmed emails in FMP_DISPLAY_ALLOWED_EMAILS. Unset or 0 leaves every surface unchanged. Turning this on needs a Vercel env change and a redeploy |
FMP_DISPLAY_ALLOWED_EMAILS | No | Comma-separated emails that may see FMP data while the display gate is on. Do not commit a real address. Changing the list needs a Vercel env change and a redeploy |
NEXT_PUBLIC_BANK_CONNECT_ENABLED | No | 1 or true shows Connect bank. Unset keeps it hidden. Changing it needs a redeploy |
BANK_CONNECT_ENABLED | No | Server switch. 1 or true turns the API on. 0 turns it off even if the public flag is on |
PLAID_CLIENT_ID | No | Plaid client id. Server-only |
PLAID_SECRET | No | Plaid secret. Server-only |
PLAID_ENV | No | sandbox (default), development, or production |
PLAID_WEBHOOK_URL | No | https://<domain>/api/plaid/webhook — set in the Plaid dashboard |
PLAID_REDIRECT_URI | No | OAuth redirect for some banks. Usually https://<domain>/budget |
PLAID_TOKEN_ENCRYPTION_KEY | No | 32-byte key for access tokens at rest. Server-only. openssl rand -base64 32 |
SUPABASE_SERVICE_ROLE_KEY | Yes for bank link | Stores encrypted Plaid access tokens. Never expose to the browser |
Bank connection setup, sandbox credentials, production access, and security notes are in docs/plaid.md. The flag stays off until those steps are done. Apply supabase/migrations/013_user_plaid_items.sql and supabase/migrations/018_plaid_access_token_encryption.sql before the first bank link. An admin can turn bank connection on for one account from /admin while everyone else stays off. See docs/admin.md.
Crypto prices, charts, and headlines come from FMP (cached). CoinGecko remains for crypto search and logos, because those responses carry CoinGecko ids the logo route still uses. Set FMP_API_KEY in Vercel project settings for production. Apply supabase/migrations/015_market_cache.sql so news and symbol search share one warehouse row. That table has row level security and no anon or authenticated policies, so only the server (service role) reads and writes it. If production already ran the older 015 that created a public read policy, run drop policy if exists "Public read market_cache" on public.market_cache; in the Supabase SQL editor. Search and news rows older than 7 days are deleted opportunistically on later writes.
When FMP_DISPLAY_GATE_ENABLED is 1, stock pages, portfolio live prices, the heatmap, market news, stock ticker search, and analysis quote and fundamentals are served only to a signed-in, confirmed email listed in FMP_DISPLAY_ALLOWED_EMAILS, or to a confirmed account whose market-data override is on in /admin. Everyone else sees “Market data is not available on your account yet”, and those API routes return 403. Crypto ticker search stays on CoinGecko and is not part of this gate. Leave the flag unset until you choose to turn the gate on. Turning the gate on, or changing the allowlist, needs a Vercel environment change and a redeploy before it takes effect. A per-user override does not need a redeploy. See docs/admin.md.
Example .env.local fragment:
FMP_API_KEY=your_fmp_key_here
# FMP_DISPLAY_GATE_ENABLED=1
# [email protected]
Bash
npm run dev