Deployment
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.
01What gets deployed
| Deploy | Do not deploy |
|---|---|
|
|
.vercelignore already excludes the right-hand column. Use the same list on any other host.
02Vercel
vercel.json in the repository root configures:
- Old folder paths (permanent redirects): links to the folder names used before 1.0.0 are sent to
/scanner/…,/terminal/…and/bot/…. - Short paths (temporary redirects):
/scanner,/terminal,/bot, plus/scanner/adminand/terminal/admin, which explain that the admin runs on your own machine. - No caching of JSON:
Cache-Control: no-store, max-age=0on every.json. - Headers:
X-Content-Type-Options: nosniff,Referrer-Policy: no-referrerandX-Robots-Tag: noindex, nofollow.
The X-Robots-Tag header tells search engines not to index the site. Remove it from vercel.json when you want your site in search results.
- ImportIn Vercel, import your GitHub repository.
- SettingsFramework preset: Other. No build command. Output directory: the repository root.
- DeployVercel builds each push to the production branch, including your own
config/public.jsoncommits. Refresh-job commits: see the note below. - DomainPoint your DNS at Vercel as Vercel documents.
The refresh job commits as mikodes-bot. On 2026-09-25 Vercel's Hobby plan refused to deploy such a commit (status BLOCKED, TEAM_ACCESS_REQUIRED): Hobby deploys only commits whose author is the account owner. The fresh data is then in git but not on the site until a commit authored by you is deployed on top of it (any push of yours, or Redeploy of a later commit of yours). A paid Vercel team, or a static host that deploys every commit, does not have this limit. The pages always show how old their data is, so a site that was not redeployed is stale, never wrong.
Not tested here No deployment was made while writing these docs.
03Any other static host
- Upload the repository root minus the "do not deploy" list.
config/public.jsonmust be reachable at/config/public.json; serving the repository layout unchanged is enough.- Set
Cache-Control: no-storefor*.jsonif your host allows it. - Without the short paths, link to the full paths (
/scanner/public/index.htmland so on). - If the host does not build from git, redeploy after each refresh, or the site keeps showing the last uploaded data (the pages show how old it is).
04Pre-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.jsonis committed. - Admin → Status shows no failing blocker.
git ls-files adminlists neither.envnordata/.- You have decided, with legal advice, where you offer the site and each venue.