No description
A failed upstream call returned HTTP 200 with a hash-derived answer that the UI rendered with the same P(FAVORABLE) and CONFIDENCE figures as a real decision. The fallback is now badged OFFLINE with those derived numbers blanked out. Request errors also rendered "SIGNS POINT TO YES" and always reported a network timeout. Failures now show CANNOT PREDICT and the real HTTP status or backend message, and the stored history is validated before use so a malformed value cannot break the whole interface. |
||
|---|---|---|
| functions/api | ||
| public | ||
| .env.example | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| server.js | ||
| worker.mjs | ||
| wrangler.json | ||
jev8ball
a minimalist Magic 8-Ball oracle powered by TypeSafe Jev structured decision intelligence on OpenRouter.
features
- minimal dark brutalist interface with ambient floating particles
- 3D interactive floating icosahedron die inside fluid viewport with mouse parallax
- realistic shake & liquid surfacing animations with procedural audio chimes
- powered by non-autoregressive
typesafe/jev-1.13decisions API (calibratednoulprobabilities, structured sentiment, zero hallucination) - live decision telemetry: calibrated probability, confidence score, token cost, and latency
- query history log with instant clipboard copy
- fast sub-second responses (~300ms) with lightweight token footprint
usage
# install dependencies
npm install
# start server
npm start
Runs by default on http://localhost:3000.
configuration
Configure your OpenRouter API key in .env:
PORT=3000
OPENROUTER_API_KEY=sk-or-v1-...
The key is required — there is no bundled fallback. Without it POST /api/ask
answers 503 and GET /api/status reports "hasKey": false. For Cloudflare, store
it as a secret instead of a plain variable:
wrangler secret put OPENROUTER_API_KEY
endpoints
GET /api/status- model status and whether the API key is configuredPOST /api/ask- submit query to Jev decisions pipeline
tests
npm test
license
MIT