Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
Roth 전환 계획: 최소 배분 시작 전 저세율 기간을 찾아 연도별 전환 일정 수립
Roth conversion planning. Find the low-tax window before required minimum distributions begin and build a year-by-year conversion schedule.
금융HTML · TypeScriptGitHub @bwolfson978온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Multi-year Roth conversion planning for the in-between years: sabbaticals, career changes, starting a business, and early retirement before required minimum distributions.
People describe their situation in a conversation (or a form), and the app finds how much to convert to Roth each year so that lifetime taxes are lowest. Results show the schedule, the tax brackets each conversion fills, and the tradeoffs, in today's dollars. The same tools run inside Claude and ChatGPT through the MCP server.
The codebase still uses the original project name, Lucerna, in package names, paths and docs.
backend/app/engine/ does all the math: federal and state income tax, IRMAA, ACA premium credits, RMDs, Social Security and inflation. It produces a structured reasoning trace, and the model only turns that trace into plain English. The model never computes financial results.dp.py) finds the schedule with the highest after-tax wealth. When the user sets limits (a cap per year, a bracket ceiling), SLSQP (optimizer.py) solves the constrained version, and a bracket-fill curve (curve_strategy.py) checks the result.backend/app/mcp/, tool logic in backend/app/tools/) is the only place tools are defined. The website's assistant is an MCP client of it, so the web app, Claude and ChatGPT all call the same tools.mcp-views/, built into backend/app/mcp/views/). They are built from the same React components in ui/ that the website renders natively.See docs/agent-and-mcp.md for the full agent and MCP design.
┌──────────────────────────┐
Browser ───────▶│ frontend/ Next.js │ Vercel
│ (App Router, Tailwind) │
└────────────┬─────────────┘
│ REST + SSE (/api/*)
┌────────────▼─────────────┐
Claude ────────▶│ backend/ FastAPI │ Railway
ChatGPT ───────▶│ /mcp MCP server │──▶ Anthropic API (website assistant)
│ /api web API, agent │──▶ Postgres (saved scenarios)
│ engine optimizer │──▶ PostHog (analytics, feedback)
└──────────────────────────┘
| Layer | Choice |
|---|---|
| Frontend | Next.js (App Router), TypeScript, Tailwind CSS, ApexCharts plus custom SVG |
| Shared UI | ui/: display-only React components and the Paper & Pine theme |
| Backend | Python, FastAPI, Pydantic, SciPy |
| AI | Anthropic Claude Sonnet, called only from the backend |
| MCP | Streamable HTTP server with MCP Apps Views and lazy OAuth sign-in |
| Auth | Clerk (website sign-in and OAuth for the MCP account tools) |
| Database | Postgres (saved scenarios) |
| Analytics and feedback | PostHog |
| Hosting | Vercel (frontend, Storybook), Railway (backend) |
| Secrets | Doppler |
Requirements: Node 20 and Python 3.11 or newer. The setup script installs both locally if they are missing (no sudo), creates backend/.venv, installs npm packages and sets up git hooks.
.agents/skills/setup-lucerna/scripts/setup.sh
source .agents/skills/setup-lucerna/scripts/env.sh # put the tools on PATH in each new shell
npm run dev # backend on :8000 and frontend on :3000
Everything is optional locally. Without keys, sign-in, saved scenarios and analytics are off, and the rest of the app works. To run the assistant without an Anthropic key, start the backend with the offline stand-in, a rule-based replacement for the model:
cd backend && AGENT_OFFLINE=1 uvicorn app.main:app --reload --port 8000
.agents/skills/run-lucerna/scripts/start.sh does all of this in one step (offline agent, Clerk and PostHog off) and can run several checkouts side by side on different ports.
backend/app/config.py and listed with its default in backend/.env.example. Invalid values stop startup.frontend/src/lib/utils/constants.ts (API_URL reads NEXT_PUBLIC_API_URL, default http://localhost:8000). Clerk and PostHog turn on when their NEXT_PUBLIC_ keys are set.Point any MCP client at http://localhost:8000/mcp, for example npx @modelcontextprotocol/inspector. After changing anything in mcp-views/ or ui/, rebuild the Views with npm run build:views; CI fails if the built Views are out of date.
npm run test:backend # pytest (engine, API, tools, agent, MCP)
npm run test:frontend # Vitest
npm run test:e2e # Playwright across both services (offline agent)
npm run test:all # backend, frontend and the E2E smoke test
npm run lint:all # ESLint and Ruff
npm run format:all # Prettier and Ruff format
npm run format:check
Agent evals (scripted conversations with deterministic checks) live in backend/evals/:
cd backend
python -m evals.run_agent_evals --offline # harness smoke test
python -m evals.run_agent_evals # live model, spends API credit
Storybook is the component catalog: cd frontend && npm run storybook. See docs/storybook.md.
Pre-commit hooks (husky and lint-staged) fix staged files and block commits with remaining errors. CI (.github/workflows/test.yml) runs lint, format checks, the Views build check, backend and frontend tests, then E2E.
| Service | Host | Deploys when |
|---|---|---|
| Frontend | Vercel | A push to master touches frontend/ or ui/ (deploy-frontend.yml). PRs get preview deployments. |
| Storybook | Vercel | Preview builds for PRs that change components. |
| Backend and MCP server | Railway | A push to master touches backend/ (deploy-backend.yml), after tests pass. |
Production secrets live in Doppler, the source of truth for the values set in Railway and Vercel. Never commit secrets; add a new backend setting to Settings in app/config.py and to backend/.env.example.
Tax data (federal and state brackets in backend/data/) is updated once a year with the Update Tax Data workflow. See docs/tax-data-update.md.
frontend/ Next.js web app
backend/ FastAPI service: engine/, api/, tools/, agent/, mcp/, db/
ui/ Shared display components and Paper & Pine tokens
mcp-views/ MCP App Views, built into backend/app/mcp/views/
shared/ Cross-language fixtures (scenario draft, View data)
e2e/ Playwright tests and before/after capture flows
listing/ Claude and ChatGPT directory listing kit
docs/ Design, architecture and process docs
.agents/ Repo skills for coding agents (setup, run, PR evidence)
Roth Conversions Optimizer provides scenario analysis for educational purposes. It is not financial, tax or legal advice.