No description
Find a file
oiupoyt a8dfdbcb60 fix(ui): ink the verdict upright on the die face
The plate is authored y-up while canvas text is laid out y-down, so the affine
solved from the raw local corners had a negative determinant: every verdict drew
mirrored, with the line order reversed, in idle and reveal alike.

Solve the transform in a y-down text space instead, flip the clip to match, and
cover the orientation with a regression test.
2026-09-22 21:59:49 +05:30
functions/api revert: remove tablet Laya integration and restore pure OpenRouter Jev decision oracle 2026-09-22 19:55:03 +05:30
public fix(ui): ink the verdict upright on the die face 2026-09-22 21:59:49 +05:30
test fix(ui): ink the verdict upright on the die face 2026-09-22 21:59:49 +05:30
.env.example initial commit: jev8ball minimalist neural oracle 2026-09-19 20:10:58 +05:30
.gitignore initial commit: jev8ball minimalist neural oracle 2026-09-19 20:10:58 +05:30
package-lock.json initial commit: jev8ball minimalist neural oracle 2026-09-19 20:10:58 +05:30
package.json feat: integrate Laya typed decision model running on Android tablet with seamless fallback 2026-09-21 20:05:02 +05:30
README.md fix: remove the hardcoded OpenRouter key and always-true hasKey reporting 2026-09-20 01:47:51 +05:30
server.js revert: remove tablet Laya integration and restore pure OpenRouter Jev decision oracle 2026-09-22 19:55:03 +05:30
worker.mjs revert: remove tablet Laya integration and restore pure OpenRouter Jev decision oracle 2026-09-22 19:55:03 +05:30
wrangler.json revert: remove tablet Laya integration and restore pure OpenRouter Jev decision oracle 2026-09-22 19:55:03 +05:30

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.13 decisions API (calibrated noul probabilities, 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 configured
  • POST /api/ask - submit query to Jev decisions pipeline

tests

npm test

license

MIT