Prediction Stack docs Open the Stack
Operate

Deployment

The public product is a folder of static files. Deploy the repository root to any static host. Never deploy admin/. You run your own deployment; MIKODES operates no instance for you.

What gets deployed#

DeployDo not deploy
index.html
config/public.json
scanner/public/ (incl. board.json, crossvenue-diag.json)
terminal/public/ (incl. data/tape.json)
design-system/ (stylesheet sources, harmless)
docs/ (these docs)
admin/ (the operator console, its database and .env)
scanner/data/ (pair database, caches)
scanner/src/, scanner/test/, terminal/src/
.github/, every *.md file
node_modules/

.vercelignore excludes the right-hand column (node_modules/ never reaches git, because .gitignore excludes it). Use the same list on any other host.

Vercel#

vercel.json in the repository root configures:

  • Short paths (temporary redirects): /scanner โ†’ /scanner/public/index.html, /terminal โ†’ /terminal/public/index.html, and /scanner/admin, /terminal/admin โ†’ the pages that explain the admin runs on your own machine.
  • No caching of JSON: Cache-Control: no-store, max-age=0 on every .json, so a fresh board or a new public.json shows up as soon as it is deployed.
  • Headers on everything: X-Content-Type-Options: nosniff, Referrer-Policy: no-referrer and X-Robots-Tag: noindex, nofollow.

Steps (not run for this guide; no deployment was made):

  1. In Vercel, import your GitHub repository.
  2. Framework preset: Other. No build command. Output directory: the repository root.
  3. Deploy. Vercel builds each push to the production branch, including your own public.json commits.

A domain is your own business: point your DNS at your host as that host documents.

Any other static host#

  • Upload the repository root minus the "do not deploy" list above.
  • config/public.json must be reachable at /config/public.json. The product pages also try ../../config/public.json, so serving the repository layout unchanged is enough.
  • Set Cache-Control: no-store for *.json if your host allows it. The pages already fetch with cache: "no-store", but a CDN in front can still serve an old file.
  • The short paths are optional. Without them, link to the full paths (/scanner/public/index.html and so on).
  • If the host builds from git, the refresh job's commits trigger a redeploy. If it does not, redeploy after each refresh, or the site keeps showing the last uploaded data (the pages show how old it is).

Hosting these docs#

The docs are in docs/ and deploy with the site at /docs/. They are static and also open straight from the file system. If you sell or list the product, host the docs on a page with no prices and no buy buttons, publicly reachable without a purchase code.

Pre-launch checklist#

  • The refresh job has run on your repository and the pages show today's data.
  • Brand, legal links and disclaimer are set, and config/public.json is committed.
  • Admin Status shows no failing blocker.
  • admin/.env and admin/data/ are not in git (git ls-files admin lists neither).
  • You have decided, with legal advice, where you offer each venue. See Legal and jurisdiction.
MIKODES Prediction Stack documentation. Written from the code in this repository; where the code and older notes disagree, the code wins. Nothing here is financial, legal or tax advice.