This software is owned by whahn1983. All rights reserved.
This program is not open-source and cannot be modified or distributed without the owner's explicit permission. All music and audio contained within is also owned by whahn1983.
Tech Flow Runner is an engaging game that challenges players to navigate through a circuit board filled with various obstacles. The objective is to guide the Tech Flow Runner through levels while enjoying incredible original music.
P/Esc to pause, auto-pause when the tab is hidden, prefers-reduced-motion honored..
├── index.html # Entry point — markup only
├── css/styles.css # Styling (extracted from index.html)
├── js/game.js # Game logic (extracted from index.html)
├── sw.js # Service worker (cache-first static, network-first HTML)
├── manifest.json # PWA manifest
├── leaderboard.php # PHP leaderboard backend (Apache deployment)
├── server.js # Node leaderboard + static file server (Docker deployment)
├── Dockerfile # Node-based container image
├── docker-compose.yml # Compose config for the Node deployment
└── scripts/ # Asset generators (PWA icons, screenshots)
You can run Tech Flow Runner via Apache + PHP or the bundled Node server (used by the Docker image). Both speak the same leaderboard JSON API.
git clone https://github.com/whahn1983/Tech-Flow-Game.gitleaderboard.txt, rate_limit.txt, and nonces.txt can be created.docker compose up --build
# or:
docker build -t tech-flow-runner .
docker run -p 5001:5001 -v $(pwd)/data:/app/data tech-flow-runner
The bundled server.js serves both the static assets and the leaderboard API; the in-game client uses ./leaderboard.php, which the Node server also accepts as an alias for /api/leaderboard.
node server.js # http://localhost:8080
PORT=5001 node server.js
| Method | Path | Purpose |
|---|---|---|
| GET | /leaderboard.php | Top 100 entries |
| GET | /leaderboard.php?action=nonce | Issue a single-use submission nonce |
| POST | /leaderboard.php | Submit { name, score, nonce? } |
The Node server additionally responds at /api/leaderboard with the same semantics.
Submissions accept an optional nonce (recommended). Nonces:
?action=nonce and used once.This raises the bar against trivial scripted spam but is not cryptographic anti-cheat — a JS client cannot keep secrets from a determined attacker.
The page ships a strict Content-Security-Policy:
default-src 'self';
script-src 'self';
style-src 'self' 'unsafe-inline';
img-src 'self' data: blob:;
media-src 'self';
connect-src 'self';
worker-src 'self';
base-uri 'self';
form-action 'self';
frame-ancestors 'none';
'unsafe-inline' for style-src is retained because the game manipulates element.style at runtime (fullscreen handling). Scripts are no longer inline.
To keep this repository code-only, generated PNG icon files are not committed.
Run the icon generator before creating a release/build so PWA and iOS home-screen icons exist:
python scripts/generate_pwa_icons.py
This creates:
apple-touch-icon.pngicons/icon-192.pngicons/icon-512.pngLightweight tooling is configured via .eslintrc.json, .prettierrc.json, and .editorconfig. To lint locally:
npx eslint@8 --no-eslintrc --config .eslintrc.json 'js/**/*.js' sw.js server.js
CI (.github/workflows/ci.yml) runs Node and PHP syntax checks plus a best-effort ESLint pass on every PR.
This project is proprietary and owned exclusively by whahn1983. See LICENSE file for details.
For more information, bug reports, or feature requests, open an issue on GitHub or contact whahn1983 directly.
Content type
Image
Digest
sha256:2f1e95d40…
Size
69.2 MB
Last updated
5 months ago
docker pull whahn1983/tech-flow-game