= labelprint Unified UI for printing labels/stickers: * Native ZPL printing to a Datamax-ONeil thermal barcode printer * A proxy/switcher in front of three https://github.com/DL6ER/brother_ql_web[brother_ql_web] instances, one per Brother QL printer == Routes * `/` -- upload a PDF and print it (ZPL) * `/upload` -- upload form * `/test-print` -- print the bundled test label * `/brother` -- pick which Brother QL printer to proxy to * `/brother/select` -- switch the active Brother QL printer == Running [source,shell] ---- bundle install bundle exec ruby app.rb ---- Requires `config.json` (see printer definitions inside) and a `.session_secret` file (random string, not committed). == Deployment Runs as `sinatra.service` (systemd) on `rpi-printserver.local`, under RVM (`rvm default do bundle exec ruby app.rb` -- always uses whatever ruby is currently the RVM default, no manual bumping needed). `.gitea/workflows/deploy.yaml` deploys on every push to `main`: SSH into `rpi-printserver.local`, `git pull`, `bundle install`, restart the service. == Dependency updates `.gitea/workflows/renovate.yaml` runs Renovate on a schedule (Monday 06:00 Europe/Bratislava, or manually) to open PRs for outdated gems and GitHub Actions. See the "Dependency Dashboard" issue for current status.