Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
A finance web app for DCF valuation and real estate underwriting, built on a transparent, testable modeling engine with explicit analyst conventions.
FinanceJavaScript · PythonGitHub @shaungarsonOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Valuation Assistance.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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 repositoryRead the full 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 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.