47 lines
1.4 KiB
Markdown
47 lines
1.4 KiB
Markdown
# web/ — Kanjin Web Server & PWA
|
|
|
|
## Quick start (Docker)
|
|
|
|
From the project root:
|
|
|
|
```bash
|
|
docker build -t kanjin -f web/Dockerfile .
|
|
docker run -p 8080:8080 kanjin
|
|
```
|
|
|
|
Open http://localhost:8080 in any browser. On Chrome/Edge you can **"Install as app"** via the address bar icon — removes the URL bar and adds a home-screen icon.
|
|
|
|
## Windows standalone .exe
|
|
|
|
From the project root, with PyInstaller installed:
|
|
|
|
```bash
|
|
pip install pyinstaller
|
|
pyinstaller --onefile --name Kanjin main.py
|
|
```
|
|
|
|
Deliver `dist/Kanjin.exe` — no Python or dependencies needed on the player's machine.
|
|
|
|
## Development
|
|
|
|
```bash
|
|
cd web
|
|
python -m pip install -r requirements.txt
|
|
python generate_icons.py
|
|
python server.py # starts uvicorn on :8080 with hot-reload
|
|
```
|
|
|
|
Requires Linux or WSL (uses `pty`). The server spawns `main.py` from the parent directory in a pseudo-terminal and streams it to the browser over WebSocket.
|
|
|
|
## File layout
|
|
|
|
| Path | Purpose |
|
|
|---|---|
|
|
| `server.py` | FastAPI app: serves index.html, mounts /static, handles /ws WebSocket |
|
|
| `static/index.html` | xterm.js in-browser terminal connected over WebSocket |
|
|
| `static/manifest.json` | PWA manifest — enables Chrome "Install as app" |
|
|
| `static/sw.js` | Service worker — precaches the shell for offline launch |
|
|
| `static/generate_icons.py` | Generates placeholder PNG icons (run once) |
|
|
| `requirements.txt` | Python deps (fastapi, uvicorn) |
|
|
| `Dockerfile` | Multi-stage Docker build |
|