Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
DCF 평가·부동산 인수용 금융 웹앱, 투명·테스트 가능한 모델 엔진과 명확한 분석가 규칙 기반
A finance web app for DCF valuation and real estate underwriting, built on a transparent, testable modeling engine with explicit analyst conventions.
금융JavaScript · PythonGitHub @shaungarson온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Valuation Assistance.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A finance web app for real estate underwriting and DCF valuation, with a transparent,
testable financial modeling engine built around explicit analyst conventions — designed to
demonstrate what AI-assisted software development looks like when domain expertise drives
the direction.
Live app: analyst-toolkit-ecru.vercel.app
Source: this repositoryREADME 전문 보기 ↗A finance web app for real estate underwriting and DCF valuation, with a transparent, testable financial modeling engine built around explicit analyst conventions — designed to demonstrate what AI-assisted software development looks like when domain expertise drives the direction.
Live app: analyst-toolkit-ecru.vercel.app Source: this repository
Analyst Toolkit is two connected calculators — real estate underwriting and DCF valuation — that take an analyst's assumptions and return the numbers a real deal or investment committee memo would need: IRR, equity multiple, cash-on-cash, enterprise value, value per share, and the full multi-year schedules behind them. Every material modeling convention and assumption is explicit; nothing is silently embedded in the calculations.
It's built for recruiters, hiring managers, PE professionals, real estate asset management professionals, and finance teams evaluating whether AI-assisted development can produce something genuinely useful — not a toy demo with a spreadsheet's worth of hardcoded numbers behind it.
DCF Valuation — the embedded Costco demo, sourced historical financials, editable assumptions, and the full valuation summary with price-implied FCF growth:
Real Estate Underwriting — the acquisition and financing inputs:
I'm the finance-domain owner: an Honours BComm in Financial Services, background in financial analysis, valuation, and real estate underwriting, limited software engineering experience. Claude Code wrote essentially all of the code. My role was direction and judgment — product scope, financial methodology, what's simplified versus what's configurable, and every genuine modeling-convention decision (debt amortization convention, discounting convention, exit valuation approach, and more) was explicitly flagged and decided together rather than silently assumed by the AI.
This is the honest story: I supplied domain expertise and direction, Claude implemented.
The full decision history — every methodology choice, why it was made, and what was
considered instead — is in docs/decisions.md, with the complete
chronological development log in docs/archive/PROGRESS_HISTORY.md.
Currently frozen pending validation of underwriting conventions with a CRE professional —
see docs/decisions.md.
-3.0% demo assumption for NWC Investment where the
company's own working-capital history is too unstable to seed automatically. Clearly labeled
as a demo snapshot throughout, never presented as live data, and never saved to the scenario
list.The module is laid out as a dense analyst workstation: sourced data, editable assumptions, and the resulting valuation sit side by side in one row on desktop, so the relationship between an input and its effect on the valuation is visible without scrolling.
Both modules ship with a one-click worked example. The Real Estate example is real-world-inspired: purchase price and NOI are sourced from a public industrial/flex listing (100 Symes Road, Toronto), with everything else clearly labeled illustrative rather than presented as sourced fact.
Every calculation is a pure, tested function, separate from the API and UI layers — see
backend/app/calculations/. Full current methodology (all conventions, stated explicitly):
docs/MODELING_CONVENTIONS.md. Highlights:
EBIT × (1 − effective tax rate) + D&A − CapEx − change in NWC — the standard enterprise-value-DCF construction. Any missing
input makes the result undefined rather than silently treating it as zero.docs/ROADMAP.md.Every calculation — cap rate, amortization, IRR, equity multiple, DSCR, debt yield, terminal value, enterprise value, unlevered FCF construction — is backed by automated tests checked against values computed independently by hand, not just "does the code agree with itself." 292 backend tests and 392 frontend tests total, plus a GitHub Actions CI pipeline that runs the backend suite and the frontend lint/build checks on every push and pull request.
Browser (React SPA, static build on Vercel)
│ fetch('/api/...')
▼
FastAPI backend (Render)
│ Pydantic validates input bounds
▼
Pure calculation functions (backend/app/calculations/)
│ no framework code, no side effects
▼
JSON response → rendered in the browser
For the DCF module's ticker search specifically, the backend also acts as a normalization layer in front of external data:
Browser: GET /api/company/{ticker}
▼
FastAPI backend (Render)
│ SEC EDGAR: primary source for historical fundamentals (XBRL company facts, no key
│ required) plus ticker → CIK lookup and a filings-index link
│ Alpha Vantage: fills any field SEC EDGAR can't confidently map for a period, and
│ remains the sole source for the reference price (server-side-only key)
▼
app/services/company_data.py — merges both, field by field, into one provider-agnostic
shape, computes unlevered FCF via app/calculations/company_financials.py (pure, tested).
Alpha Vantage requests are ordered and rationed against its shared free-tier daily
budget: the reference-price quote first (nothing else supplies it), then one profile
call, then the three financial-statement calls only where SEC EDGAR left a gap in what
the forecast modes actually need
▼
JSON response → populates the DCF form; the analyst still reviews and runs it manually
Full technical detail (module-by-module, testing, CI): docs/ARCHITECTURE.md.
docs/decisions.md.Shipped: foundation → real estate + DCF MVPs → scenario saving/export/print →
validation hardening → visual design → deployment → multi-year modeling, sensitivity, and
scenario comparison → real estate risk flags and Deal Summary → DCF ticker search and
workstation redesign → hardened DCF validation → SEC EDGAR as the primary DCF fundamentals
source → SEC-independent DCF data resilience (Alpha Vantage optional, never a hard
dependency) → per-value provenance and an editable, dated reference price → an embedded,
provider-independent Costco DCF demo → compact historical Revenue/Unlevered FCF trend
mini-charts → reverse DCF (price-implied FCF growth) → Driver-Based DCF (evidence-led
forecast entry) → standardized ±1pp driver sensitivity (tornado) → two-way Revenue Growth ×
EBIT Margin driver-interaction grid → DCF traceability (reported-history-to-forecast
continuity and enterprise-value composition) → saved-case source context and
assumption-difference comparison. Detail:
PROGRESS.md, docs/decisions.md.
What's next: docs/ROADMAP.md.
Long-term direction — not yet built: the modeling engine above is the foundation, not the end state. Analyst Toolkit is meant to grow into an AI-powered analyst workflow tool, not just a more elaborate calculator:
raw deal/company information → structured assumptions → financial model → scenarios/sensitivities → risks/insights → decision-ready summary/export
The idea is for AI and automation to progressively reduce the manual effort between those
stages — document extraction from OMs, rent rolls, and T12s; auto-structuring raw inputs;
flagging missing or inconsistent data; generating and comparing scenarios; flagging
underwriting or valuation risk; interpreting sensitivity results in plain language;
generating IC-style investment commentary. None of this is scoped or scheduled — it's
explicitly gated on the modeling engine being solid first, which is the work reflected in
this repository today. Full detail: docs/ROADMAP.md's Parked column.
# Backend
cd backend
python -m venv venv
./venv/Scripts/pip install -r requirements.txt
cp .env.example .env # ALPHA_VANTAGE_API_KEY is optional (free, see below) - ticker search works without it for SEC-supported tickers
./venv/Scripts/python -m uvicorn app.main:app --reload --port 8001
# Frontend (separate terminal)
cd frontend
npm install
npm run dev
Open http://localhost:5173. The Vite dev server proxies /api/* to the backend
automatically — see frontend/vite.config.js.
Run the backend test suite with ./venv/Scripts/python -m pytest from backend/.
A free Alpha Vantage API key (https://www.alphavantage.co/support/#api-key, no credit
card) set as ALPHA_VANTAGE_API_KEY — locally in backend/.env, and as an environment
variable in Render — enriches ticker search with a reference price and a few extra fields.
It's optional: SEC EDGAR is ticker search's independent primary path, so a SEC-supported
ticker loads with no key at all, reference price simply absent (still enterable manually).
React 19 · Vite 8 · FastAPI · Pydantic · pytest · numpy-financial · httpx · SEC EDGAR (primary historical fundamentals via XBRL) · Alpha Vantage (fallback fundamentals & reference price/quotes) · Vercel · Render · GitHub Actions (CI)
start → end (range) with the exact year-by-year schedule one click away, labelled with real
fiscal years when the compared cases agree on the period. Editing mode is not treated as a
difference: two rows holding the same values are the same forecast whether they were typed
cell-by-cell or generated. Cases recorded against genuinely different companies are refused;
an unknown identity is qualified rather than silently treated as a match.