Skip to content

Security

ScanPick is designed for on-premise deployment where the operator controls the infrastructure, network, and database. Security is focused on practical warehouse operations.

Workers authenticate with a Worker ID and 4-digit PIN:

  • PINs are hashed with BCrypt (cost factor 12) before storage
  • The API issues JWTs with 24-48 hour expiry
  • No refresh tokens in v1 (expired tokens require re-authentication)
  • No email, no password, no IT involvement

Managers and admins use the same PIN-based authentication as workers, but the web dashboard checks the user’s role before allowing access.

  • The JWT_SECRET must be at least 64 random characters
  • The secret is known only to the ScanPick API instance
  • Tokens are issued per-login; invalidating all active tokens requires changing the JWT_SECRET and restarting the API
  • ScanPick does not require internet access to operate
  • The only outbound contact is periodic license validation against the Keygen API (can be disabled with certain license tiers)
  • All communication between components (API ↔ mobile, API ↔ dashboard) stays on your LAN unless you expose it
  • For production, run behind a reverse proxy with TLS encryption
  • No telemetry, no usage statistics, no phone-home
  • PostgreSQL credentials are set via environment variables
  • Use a dedicated database user (not the postgres superuser)
  • Enable SSL for database connections over untrusted networks
  • Regular backups are your responsibility
  • Each ScanPick instance is single-tenant — your data stays in your database
  • No shared infrastructure, no multi-tenancy
  • License keys are validated per-instance, not per-user

Since ScanPick runs on your hardware:

  • Lock down the server physically
  • Use OS-level firewalls
  • Keep the host OS updated
  • Monitor SSH access logs

If you suspect a security issue:

  1. Change the JWT_SECRET and restart the API (invalidates all tokens)
  2. Change all worker PINs
  3. Review database access logs
  4. Open a security issue