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.
Valuation Ledger – a fast React/Vercel/Postgres rebuild that replaces the Streamlit Community Cloud deployment.
AI translation
Valuation Ledger — fast React/Vercel/Postgres rebuild (replaces the Streamlit Community Cloud deploy)
FinanceTypeScript · PythonGitHub @harishavenue1OnlineOwner 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
Loading the full README. The saved excerpt is shown below.
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.Read the full 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).