← Back to the editor

ITTG — install the full version

The version you opened from Cloudflare Pages is a static preview: the editor works, files are kept in your browser's localStorage, and you can download / upload schedule JSON files. The CP-SAT solver itself doesn't run in the browser — generating, matching, improving and re-scoring timetables all require the installable version below.

1. Install Docker

Pick the route that matches your operating system. Each link goes to the official Docker download page — sign-in is not required for personal / educational use.

Windows
  1. Download Docker Desktop for Windows from docker.com/products/docker-desktop.
  2. Run the installer. It will enable the WSL 2 backend automatically (a one-time reboot may be required on first install).
  3. Launch Docker Desktop from the Start menu. Wait until the whale icon in the system tray turns steady — that means the engine is running.
  4. Open PowerShell (or Command Prompt) and verify: docker --version should print something like Docker version 27.x.x.
macOS
  1. Download Docker Desktop for Mac from docker.com/products/docker-desktop. Pick the Apple Silicon (M-series) or Intel build to match your Mac.
  2. Open the downloaded .dmg, drag Docker.app into Applications, then launch it from Launchpad.
  3. The whale icon appears in the menu bar — wait for it to stop animating.
  4. Open a terminal and verify: docker --version.
Linux (Ubuntu / Debian)
# Install Docker Engine + CLI from the distro repos. One-line:
sudo apt update && sudo apt install -y docker.io
# Optional: let your user run docker without sudo (logout/login after).
sudo usermod -aG docker $USER
# Verify:
docker --version

For other Linux distros (Fedora, Arch, etc.) follow the official Docker Engine install guide — one section per distro.

No Docker Hub account needed. The szebenisz/fetjs:latest image is publicly pullable. If you ever do sign in, that's only for pushing your own images.

2. Run it with Docker

One command — no Python, no virtualenv, no PATH setup. Pick the line that matches your terminal. The -v mount keeps your data files and generated schedules on the host (under ./data/) so they survive container restarts. Open http://localhost:8001/ once it's up, and Ctrl-C in the terminal to stop.

Linux / macOS / WSL / Git Bash
docker run --rm -p 8001:8001 -v "$(pwd)/data:/app/data" szebenisz/fetjs:latest
Windows PowerShell
docker run --rm -p 8001:8001 -v "${PWD}/data:/app/data" szebenisz/fetjs:latest
Windows CMD
docker run --rm -p 8001:8001 -v "%cd%/data:/app/data" szebenisz/fetjs:latest

Custom port

Pass -e PORT=… and map the same host port. The PORT env variable is read by the server at startup, so the container actually listens where you tell it to. Then visit http://localhost:9000/.

Linux / macOS / WSL / Git Bash
docker run --rm -e PORT=9000 -p 9000:9000 -v "$(pwd)/data:/app/data" szebenisz/fetjs:latest
Windows PowerShell
docker run --rm -e PORT=9000 -p 9000:9000 -v "${PWD}/data:/app/data" szebenisz/fetjs:latest
Windows CMD
docker run --rm -e PORT=9000 -p 9000:9000 -v "%cd%/data:/app/data" szebenisz/fetjs:latest

3. Migrating your localStorage data

The static-preview site saves your edits in your browser. To carry them over to the installed version:

  1. In the static site, click Open / Download / Upload…, find your current file in the list, and hit its button to save it to disk.
  2. Start the Docker container.
  3. In the installed SPA, click Open / Download / Upload…, then ⬆ Upload in the dialog toolbar and pick the .json file you just downloaded — it lands on the server, gets selected, and the next click on Open loads it into the editor.

Schedules round-trip the same way through the ⬇ JSON / ⬆ JSON buttons on a schedule run.

4. What the static version can / can't do

FeatureStatic previewInstalled version
Edit Years / Teachers / Subjects / Rooms / Activities ✅ yes✅ yes
Persistent storage browser localStoragedata/ on disk
Download / upload data JSON ✅ yes✅ yes
View uploaded schedule JSON ✅ yes✅ yes
🎲 Multistart · 🔄 Improve · 🧮 Rescore ❌ disabled✅ yes
🧠 SAT Match teacher assignment ❌ disabled✅ yes
Print / multi-page PDF ✅ yes (uploaded runs)✅ yes

5. Troubleshooting

Port 8001 is already in use

Use the custom-port command above with a different value, e.g. -e PORT=8002 -p 8002:8002.

Container can't find ortools

You're probably on Apple Silicon / ARM64 and pulled an x86_64-only build. The multi-arch image on Docker Hub should auto-select, but if you build locally: docker build --platform linux/arm64 -t fetjs:arm .

"Schedule generation, matching, …" alert in the browser

You're still on the static preview. Open http://localhost:8001/ (or your custom port) to get the installed version where the solver runs.

← Back to the editor