setup #
These are the notes for the June 2026 at://chicago check-in setup.
hardware #
- laptop: Nate's Mac, running macOS, connected to the printer over USB
- printer: Omezizy Bluetooth Shipping Label Printer 4x6 / 249BT
- labels: MUNBYN 4" x 3" direct thermal labels, white, 500 labels per roll
- connection used for printing: USB
- connection avoided for laptop printing: Bluetooth
Bluetooth may work from phone apps, but the reliable event-day path is USB +
CUPS + lp.
printer driver #
The printer did not move when configured as a generic Zebra ZPL label printer, even though CUPS marked the job complete.
The working driver is the official Omezizy/label-printer driver:
- PPD shown by macOS:
Label-Printer - driver version:
1.4.3 - CUPS filter:
rastertolabeltspl - protocol family: TSPL
The working CUPS queue:
_PM_249_BT
The working USB URI:
usb:///PM-249-BT?serial=Q354E53B4250232
printer settings #
Use 4x3 labels:
PageSize=w288h216
media=w288h216
Useful inspection commands:
lpstat -t
system_profiler SPPrintersDataType
lpoptions -p _PM_249_BT -l
Known-good print command:
lp -d _PM_249_BT \
-o PageSize=w288h216 \
-o media=w288h216 \
-o fit-to-page \
/path/to/label.pdf
local print worker #
Install dependencies:
npm install
Run against production in dry-run mode:
CHECKIN_SERVER_URL="https://check-in.chicago.at" npm run print-worker
Run against production in real print mode:
CHECKIN_SERVER_URL="https://check-in.chicago.at" \
PRINT_MODE="lp" \
PRINTER_NAME="_PM_249_BT" \
npm run print-worker
The print worker renders HTML with Playwright Chromium, exports a 4x3 PDF, then
sends it to CUPS with lp.
By default the worker does not print the initial SSE snapshot. That prevents old check-ins from reprinting when the laptop worker restarts. It still prints new live check-ins, including a new Verifire post from the same account.
To intentionally reprint the current snapshot, opt in:
PRINT_SNAPSHOT=1 npm run print-worker
event-day checklist #
-
Plug printer into power.
-
Load 4x3 thermal labels with the printable side oriented for the feed path.
-
Connect printer to laptop over USB.
-
Confirm the queue is visible and idle:
lpstat -t -
Start the print worker:
CHECKIN_SERVER_URL="https://check-in.chicago.at" \ PRINT_MODE="lp" \ PRINTER_NAME="_PM_249_BT" \ npm run print-worker -
Keep the terminal visible during check-in.
-
Keep regular blank labels and a marker around for people who do not want to post.
undo a check-in #
If someone needs to be unchecked-in, delete them by handle or DID. This removes
them from stored check-ins and broadcasts an uncheckin event so the wall drops
their card.
curl -X DELETE \
-H "x-checkin-admin-token: $CHECKIN_ADMIN_TOKEN" \
"https://check-in.chicago.at/api/checkins/zzstoatzz.io"