Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A financial literacy toolkit for Kenya: 26 calculators that answer money
questions in Kenyan terms — PAYE and SHA on a payslip, Fuliza's real cost, a
chama's payout order, whether a SACCO beats a bank, what a T-bill leaves you
after withholding tax and inflation.
Everything runs in the browser. There is no account, no server-side profile,
and nothing about a user's money leaves their device.
From the repository root, npm run dev|build|lint|test all delegate into
web/. To run a command directly against the app, use `npm run
--workspace web`.README 전문 보기 ↗A financial literacy toolkit for Kenya: 26 calculators that answer money questions in Kenyan terms — PAYE and SHA on a payslip, Fuliza's real cost, a chama's payout order, whether a SACCO beats a bank, what a T-bill leaves you after withholding tax and inflation.
Everything runs in the browser. There is no account, no server-side profile, and nothing about a user's money leaves their device.
npm install # workspaces: the app lives in web/
npm run dev # http://localhost:3000
From the repository root, npm run dev|build|lint|test all delegate into
web/. To run a command directly against the app, use npm run <script> --workspace web.
| Command | What it does |
|---|---|
npm run dev | Next.js dev server |
npm run build | Production build (next build --webpack) |
npm test | Unit suite (Vitest) |
npm run lint | ESLint |
npm run sync:rates | Refresh the committed rates snapshot — see below |
Inside web/ there are two more: npm run typecheck (tsc --noEmit) and
npm run e2e (Playwright).
web/app/ Next.js App Router. Each calculator is app/tools/<name>/
web/lib/ The maths. Pure modules, no React — this is where correctness lives
web/lib/__tests__ Unit tests, deliberately beside the code they test
web/components/ UI. Presentation only; a component should not compute a number
web/e2e/ Playwright specs
scripts/ Build-time and CI tooling (rates sync, Netlify build gate)
The split that matters is lib/ computes, components/ renders. A
calculator's arithmetic belongs in lib/ where it can be unit-tested without a
browser; the component reads the result and displays it. When those blur, a
number gets computed twice in two places and the two drift.
Interest rates are not fetched at runtime. scripts/sync-rates.mjs pulls
Mwangaza Yield's published feed in CI and commits a snapshot, and the app ships
that file (web/lib/rates-feed.ts explains the reasoning).
The script's governing rule is that it refuses rather than risks: an unreachable feed, an unparseable response, an unknown schema version, missing tenors, a yield outside a sane band, or a figure that moved implausibly far in one day all end the same way — the existing snapshot is left untouched and CI reports it. Yesterday's verified rate beats today's corrupt one in a tool people use to decide where to put money.
Exit codes: 0 updated or already current, 1 refused.
npm run doctor answers one question — is anything still refreshing the
rates? — and answers it from committed files, so it works offline, on a
laptop, and outside CI. It reports the snapshot's age against the budget the
test suite enforces, whether readers are currently seeing the stale notice,
which rung actually pays most, and whether the live feed has moved ahead of us.
It exists because on 20 August 2026 every workflow in this repository began
failing in about four seconds, before a single step ran and with no runner
assigned — the twice-daily sync and CI alike. That is an account-level Actions
problem, not a repository one, and no change here fixes it. The consequences
were exactly what you would expect once all three alarms turn out to live
inside the thing that died: the snapshot froze at 19 August, four commits
landed on main with no CI, and a ladder preset went on telling readers the
364-day rung "pays most" while the feed in the same build said the 182-day rung
paid more.
The reader-facing layer held — isStale() put the notice up at 14 days as
designed. It was the operational alarms that were silent, and npm run doctor
is the one that now lives outside CI.
If the workflow cannot run and you can reach the feed, run npm run sync:rates
locally and commit what it writes. Do not hand-edit figures; if you cannot
reach the feed, leave the snapshot alone.
The registry in web/lib/sources.ts also carries three PROJECTIONS from the
IMF's World Economic Outlook (April 2026 edition) — Kenya's 2026 growth,
annual-average inflation and debt-to-GDP — each with its WEO subject code, an
asOf date and a reviewBy tied to the WEO's April/October cadence, so the
staleness gate in __tests__/sources.test.ts forces a re-read after every
edition. They are exported from kenya-stats.ts as IMF_WEO_*.
They answer a different question from the measured figures, and the two are never interchangeable: the KNBS/CBK readings say what inflation IS, the WEO entries say what IMF staff EXPECT. A page that looks forward (a plan, a projection) may quote them; a page that states current conditions uses the measured outturns. The note on each registry entry says why.
Netlify, from main. Configuration is in netlify.toml.
Two cost controls are deliberate and documented at the point they take effect:
scripts/netlify-should-build.sh cancels a build when a commit touches
nothing next build reads. Its exit polarity is inverted from every other
script here — 0 skips, non-zero builds — so it says so at both exit points.
Every uncertain case builds: a build we did not need costs one credit, a
skipped build we did need ships a planner that disagrees with the one people
were shown.Both are reversible: the comments in netlify.toml say exactly what to delete
to bring previews back.
Next.js 16 · React 19 · Tailwind v4 · TypeScript · Vitest · Playwright · Netlify.
One trap is worth knowing before you touch the export feature. Tailwind v4
emits colours via color-mix() in oklab space, and html2canvas 1.4.1
throws unsupported color function oklab on it — which reaches the user as
an export button that appears to do nothing. The app uses
html2canvas-pro instead.
Import that, never html2canvas.
This is not an open-source project and pull requests from outside the team are not being accepted — see the licence below. For anyone working on it:
lib/, with a test beside it. A calculator without a unit
test is a calculator nobody can safely change.Ksh, consistently, everywhere a user can see it.npm test and npm run lint before pushing; npm run build if you have
touched anything under web/app.Copyright © 2026 JiPange. All rights reserved.
This source is published for reference and is not licensed for reuse,
redistribution, or derivative works. No open-source licence is granted, and
nothing here should be read as one. For licensing enquiries, see
/licensing.