This repository has no description
check-in docs setup.md
3.0 kB
Markdown
at main

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 #

  1. Plug printer into power.

  2. Load 4x3 thermal labels with the printable side oriented for the feed path.

  3. Connect printer to laptop over USB.

  4. Confirm the queue is visible and idle:

    lpstat -t
    
  5. Start the print worker:

    CHECKIN_SERVER_URL="https://check-in.chicago.at" \
    PRINT_MODE="lp" \
    PRINTER_NAME="_PM_249_BT" \
    npm run print-worker
    
  6. Keep the terminal visible during check-in.

  7. 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"