Quorix website
The public site for Quorix: Home, Games, Features, Changelog, Docs, Roadmap, Credits and a Download page with step-by-step instructions (including what to do if the app is still inside the zip). The look is the "Launcher" direction: dark, violet gradient, the same Inter typeface as the app.
Where the content comes from
Nothing is typed twice. The pages are built from the repo's own files:
| Page | Source |
|---|---|
| Games | QuorixClient/games/GameRegistry.java, exported to games.json by tools/export_games.py |
| Features, How it works | FEATURES.md, HOW_QUORIX_WORKS.md |
| Changelog | CHANGELOG.md (the same file the app shows) |
| Docs | the files listed in docs_manifest.json (see the rule at the top of that file: nothing sensitive is published) |
| Roadmap | content/roadmap.md (hand-written and public; the repo's own ROADMAP.md stays internal) |
| Version, download link, live-status address | VERSION, site_config.json |
Working on it
pip install -r requirements.txt
python app.py # live preview at http://localhost:5000
python build_static.py # writes plain HTML into dist/
Publishing (no server needed)
build_static.py writes ordinary HTML, so any static host works. .github/workflows/website.yml builds it on every change.
- GitHub Pages: Settings > Pages > Source: GitHub Actions, then add the repository variable
DEPLOY_GITHUB_PAGES=true. The site appears athttps://<user>.github.io/Quorix/. - Netlify (in use):
netlify.tomlat the repo root does everything (build command, publish folder, bundled client download) - seeDEPLOY.md. - Cloudflare Pages: connect the repo, build command
pip install -r website/requirements.txt && python website/build_static.py, output directorywebsite/dist. (Cloudflare Pages limits single files to 25 MB, so keep the Windows zip on a GitHub Release and link it.) - Your own web server: upload the contents of
dist/.
Set download_url in site_config.json to the Windows zip (by default the newest GitHub Release's Quorix-Windows.zip).
Live features (sign-in, leaderboards, stats, Dominion map)
These need the web service next to the game server; see DEPLOY.md. A static build links to it (QUORIX_DYNAMIC_URL) or shows a "not connected" page.
Live numbers
The strip on the home page (players online, matches, server status) is filled in by static/live.js from the address in
status_url (site_config.json), as JSON like {"online": 14, "matches": 5, "status": "online", "version": "1.0.0"}. With no address,
or if the server can't be reached, it shows dashes and says so; it never invents numbers.
The client download (hosted on this site)
The Download page serves the client from this website itself, so it works where github.com is blocked. Files, all under /download/:
| URL | What |
|---|---|
/download/Quorix-Windows.zip (also /download/client) |
the Windows app, includes Java |
/download/Quorix.jar |
the client as one Java file (needs the Java version the page shows, read from the jar itself) |
/download/SHA256SUMS |
checksums of the two files above |
Where the files come from. website/downloads/ holds exactly one release at a time: Quorix-Windows.zip, Quorix.jar, SHA256SUMS and manifest.json
(version, release date, size and SHA-256 of each file). It is outside git. tools/fetch_client_release.py fills it from the newest GitHub Release, which the
Windows app workflow publishes (run it with a release_tag):
python3 website/tools/fetch_client_release.py # install the newest release
python3 website/tools/fetch_client_release.py --check # is the installed one the newest? (exit 0 = yes)
python3 website/tools/fetch_client_release.py --tag v1.0.1
python3 website/tools/fetch_client_release.py --from-dir ~/incoming --tag v1.0.1 # files copied by hand, if the VM cannot reach GitHub
It downloads into a temporary folder (streamed to disk, never held in memory), checks every file against the release's SHA256SUMS, and only then swaps the
whole folder in and deletes the previous one. One mismatch aborts everything and leaves the live set untouched. It only ever handles those three file names.
Standard library only; needs about 100 MB free while it runs; the installed set is about 31 MB.
It cannot serve an old or wrong file. The site serves only what manifest.json lists, and only while the file on disk still has the listed size and SHA-256
(re-checked once per version of each file). If anything differs, nothing is served and the page falls back to the GitHub Release link. Stray files in
downloads/ are ignored. The version shown on the page is the manifest's.
The server jar is never served. Any other name under /download/ answers 404 (/download/server, /download/QuorixServer.jar, manifest.json, path tricks);
QuorixServer.jar is not part of the release, the fetch tool or the website.
Deploy a new client release (the game server is not touched, and the website needs a restart only for code changes, not for new downloads):
- Publish the release on GitHub (
Windows appworkflow with arelease_tag,include_server_jarleftfalse). - On the VM:
python3 /home/opc/QuorixLive/website/tools/fetch_client_release.py. The site serves the new files at once; no restart. - Check from any computer:
python3 website/tools/verify_public_download.py http://example.org(downloads both files like a visitor, compares their SHA-256 with the site'sSHA256SUMSand with the source GitHub Release, and confirms the server jar is not reachable).
To check the fallback link (the GitHub Release address in site_config.json): python website/tools/check_download.py.