Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A rebuild of the Valuation Ledger Streamlit app as a proper React + Postgres web app on Vercel — no cold-sleep, no full-page rerun per click, no synchronous GitHub API write blocking every save.README 전문 보기 ↗
A rebuild of the Valuation Ledger Streamlit app as a proper React + Postgres web app on Vercel — no cold-sleep, no full-page rerun per click, no synchronous GitHub API write blocking every save.
Stack:
api/ (one file per endpoint, Vercel's zero-config
Python runtime — no framework).cache/*.json layout so migration is a straight load).api/_screener_fetch.py is an unmodified copy of the old app's screener_fetch.py —
same Screener.in scraping/parsing logic, works fully anonymously (no session cookie needed).src/lib/model.ts is a line-for-line TypeScript port of app.py's
compute_model()/headline_cagr()/default_case_state() — same formulas, same sequencing.
Runs entirely client-side, so every scenario edit recomputes CAGR instantly with zero
round-trip; only the save itself (debounced 500ms) goes to the server.The old Streamlit Community Cloud deploy was slow for three concrete reasons, not just "Streamlit is slow" in the abstract:
app.py top to bottom on every click/input.This version has none of those: Vercel's static hosting has no cold-sleep, React only re-renders what changed, and scenario saves are a single async Postgres upsert (milliseconds), debounced so a burst of edits costs one write.
npm install
cp .env.example .env # fill in DATABASE_URL and APP_PASSWORD
npm i -g vercel # if you don't already have it
vercel dev # serves both the Vite frontend and /api/*.py together
vercel dev will ask you to log in to Vercel and link the project the first time — that's a
one-time setup step, do it yourself in the terminal.
npm run dev alone (Vite only, no API) also works for pure frontend iteration — it'll show the
login screen since there's no backend to authenticate against.
You'll need to do these yourself (account creation, secrets, and the first deploy are not something I can do on your behalf):
valuation-ledger-web).DATABASE_URL (or
POSTGRES_URL) as a project env var — nothing more to wire up. Supabase/Neon directly also
work fine; just set DATABASE_URL yourself in Project → Settings → Environment Variables.APP_PASSWORD under Project → Settings → Environment Variables — pick whatever
password you want to gate the site with.cd scripts
DATABASE_URL="<paste the same connection string>" ../.venv/bin/python migrate_from_json.py
Run this once, from your own machine, pointed at the real deployed database — it reads
~/valuation-ledger/cache/*.json and inserts everything.vercel --prod from this directory.APP_PASSWORD, confirm all 16 companies are there.src/
lib/model.ts compute engine (CAGR/EPS/PBT math) — client-side, no server round-trip
lib/api.ts typed fetch wrappers for /api/*
pages/ Summary, Companies, Detail, Settings, Login
api/
_db.py Postgres helpers (shared, not a route — see the underscore convention below)
_auth.py cookie-based password gate
_screener_fetch.py unmodified copy of the old app's Screener.in fetch/parse logic
_http.py small JSON request/response + auth-guard helpers
login.py POST (check password, set cookie) / DELETE (log out)
stocks.py GET — the one bootstrap payload the frontend loads on first render
fetch_company.py POST (full fetch+add) / DELETE (remove) / PATCH (toggle owned)
refresh_price.py POST — price-only refresh for one ticker
scenario.py POST — save one case's driver state for one ticker
guidance.py POST — save management-guidance research for one ticker
scripts/
migrate_from_json.py one-off loader from the old repo's cache/*.json into Postgres
Files under api/ prefixed with _ are shared modules, not routes — Vercel's zero-config file
routing skips underscore-prefixed files when deciding what becomes a Serverless Function.
GITHUB_TOKEN, no Contents API, no
"why did my edit disappear on redeploy" (the original reason the old app needed GitHub sync in
the first place — Streamlit Cloud's container disk is ephemeral; Vercel + a real database isn't).