Deployment
There are three ways to run the Biometric Workshop Suite.
Option A — GitHub Pages (static, no server needed)
The docs/ folder is a fully self-contained static version — all logic runs in JavaScript and all profiles are stored in the browser's localStorage. No Python or server required.
- Push the repository to GitHub.
- Go to Settings → Pages, set source to GitHub Actions.
- Your suite will be live at
https://<username>.github.io/<repo-name>/and the documentation athttps://<username>.github.io/<repo-name>/documentation/.
Note
In the static version, each student's data is stored in their own browser. The admin page on the static version can only manage data on the device where it is opened. For a shared server where all students connect to the same backend, use Option B or C.
Option B — Render (hosted Flask app, shared across devices)
The Flask version stores all profiles on the server — all students share the same profile store in real time. Ideal when students each have their own device.
- Push the repository to GitHub.
- Sign up at render.com and click New → Web Service.
- Connect your repository. Render will detect
render.yamland configure everything automatically. - Click Deploy and share the URL with students.
Note
Render's free tier spins down after 15 minutes of inactivity — the first request after a sleep may take ~30 seconds. Profile data stored on disk will be reset on each redeploy.
To run in production mode locally (mirrors the Render environment):
Option C — Local network (no deployment required)
The simplest option for a classroom: run the server on the presenter's machine and share the local IP address.
Then share http://<your-local-ip>:5000 with students on the same Wi-Fi. No accounts, deployment, or internet connection needed.
Environment configuration
Most session settings — typing phrase, enrolment attempts, recording duration, confidence sensitivity — are configured at runtime via the Admin Panel. No code changes or server restarts are required.
The only value that must be set before the server starts is the fallback admin PIN:
| Variable | Default | Description |
|---|---|---|
DEFAULT_ADMIN_PIN |
1965 |
Fallback PIN used when admin_config.json is absent |
The active PIN can be changed at any time via the Admin Panel without restarting the server.
Data files
The Flask app auto-creates these files in the project root on first use:
| File | Contents |
|---|---|
profiles.json |
Keystroke profiles |
mouse_profiles.json |
Mouse dynamics profiles |
face_profiles.json |
Face recognition profiles |
voice_profiles.json |
Voice biometric profiles |
signature_profiles.json |
Signature dynamics profiles |
admin_config.json |
Admin PIN and per-modality settings |
All files are plain JSON. They are listed in .gitignore to avoid accidentally committing student data.