Skip to content

Releases: mrkaqz/queue

v2.5.4 — Smooth large ticket numbers (TrueType raster)

Choose a tag to compare

@mrkaqz mrkaqz released this 23 Apr 13:53

What's new

🖨 Smooth large ticket numbers

The previous large mode used ESC/POS GS ! to scale up the built-in bitmap font — which simply multiplied each dot, producing blocky/pixelated output.

v2.5.4 switches to raster image printing (GS v 0):

  • Queue number is rendered with DejaVu Sans Bold TrueType font via Pillow
  • Rendered at the printer's native 203 DPI — smooth, clean edges
  • Auto-sizes the font to fill ~88% of the paper width
  • Falls back to bitmap scaling if Pillow or the font is unavailable

Dependencies

  • Added Pillow (Python image library)
  • Added fonts-dejavu-core to the Docker image

Upgrade

docker pull ghcr.io/mrkaqz/queue:2.5.4

or in docker-compose.yml:

image: ghcr.io/mrkaqz/queue:2.5.4

v2.5.3 — Large ticket size option

Choose a tag to compare

@mrkaqz mrkaqz released this 23 Apr 09:12

What's new

🖨 Large ticket size

New Ticket Size setting in Settings → Ticket Printer:

Size Queue number ESC/POS command
Normal (default) Double-width + double-height ESC ! 0x30
Large 6× width × 6× height GS ! 0x55

Large mode makes the queue number dramatically bigger — easy to read across a waiting room. Everything else (shop name, "Queue No.", date) stays the same compact size.

Upgrade

docker pull ghcr.io/mrkaqz/queue:2.5.3

or in docker-compose.yml:

image: ghcr.io/mrkaqz/queue:2.5.3

v2.5.2 — Printer spacing & timezone fixes

Choose a tag to compare

@mrkaqz mrkaqz released this 23 Apr 07:41

What changed

🖨 Ticket spacing

Added 3 extra line feeds before the partial-cut command (GS V 01) so the cutter clears the last printed line. Tickets are now cleanly separated instead of cutting mid-content.

🕐 Correct local time on ticket

The date/time printed on each ticket now uses the UTC offset configured in Settings → Timezone (same offset as the admin page timestamps). Previously the Docker container's UTC clock was used directly, showing the wrong time.

Upgrade

docker pull ghcr.io/mrkaqz/queue:2.5.2

or in docker-compose.yml:

image: ghcr.io/mrkaqz/queue:2.5.2

v2.5.1 — Fix Xprinter Thai character garbling

Choose a tag to compare

@mrkaqz mrkaqz released this 23 Apr 07:26

Bug fix

ESC/POS ASCII-only ticket header

The Thai shop name was printing as garbled characters because ESC/POS thermal printers only support ASCII/Latin character sets — they cannot render multi-byte UTF-8 Thai text.

Changes:

  • Ticket header now encodes as ASCII (errors='replace'), so any non-ASCII character safely prints as ? instead of garbage bytes
  • New Ticket Header (English/ASCII only) field in Settings → Ticket Printer — enter your clinic/shop name in English (e.g. Saimoon Pet Clinic). If left empty, falls back to the main Shop Name with non-ASCII characters replaced
  • The fix applies to both auto-print on Add Queue and the manual 🖨 Print Ticket button

Action required: Go to Settings → Ticket Printer and fill in the Ticket Header field with your shop name in English, then click Save Settings.

Docker

docker pull ghcr.io/mrkaqz/queue:2.5.1

v2.5.0 — Xprinter Ticket Printing

Choose a tag to compare

@mrkaqz mrkaqz released this 22 Apr 05:59

What's new

Xprinter Ticket Printing

Print queue tickets directly from the queue server to your Xprinter over ESC/POS TCP — the same protocol as the physical ESP32 button device.

Admin page

  • New 🖨 Print Ticket button next to + Add Queue — always visible; prints the last queue number on demand

Settings page — Ticket Printer (Xprinter) card

  • Printer IP Address — enter the LAN IP of your Xprinter (port 9100)
  • Auto-print on Add Queue — when enabled, a ticket is printed automatically every time a queue number is added from the admin page
  • 🖨 Test Print button — verify printer connection without adding a real queue entry

Notes

  • Paper auto-cuts after every ticket (GS V 01 partial cut)
  • Cash drawer is NOT triggered — no ESC p command is sent; the drawer only opens from Loyverse POS as before
  • Printer unreachable → connection times out silently in background (5 s), queue operation unaffected
  • Compatible with all Xprinter models that support ESC/POS over TCP (port 9100)

Docker

docker pull ghcr.io/mrkaqz/queue:2.5.0
image: ghcr.io/mrkaqz/queue:2.5.0

v2.4.2 — Wait Time Column · Facebook Advance Notification

Choose a tag to compare

@mrkaqz mrkaqz released this 28 Mar 05:00
8a2f6c4

What's new

⏱ Wait Time column in Admin

The queue list now shows how long each patient waited between receiving their ticket and being called, displayed as Xm Ys. Entries not yet called show —.

🔔 Facebook Messenger advance notification

When a queue number is called, the subscriber of the next queue number now receives an early heads-up:

⏰ อีก 1 คิว! / 1 queue away — please make your way to the clinic now.

Their subscription is kept so they still receive the normal "your number is being served" notification when their own turn comes.


Docker

docker pull ghcr.io/mrkaqz/queue:2.4.2

v2.4.1 — Resume Held Queue · Auto-Advance Pause · DB Backup/Restore

Choose a tag to compare

@mrkaqz mrkaqz released this 21 Mar 16:10

What's new

▶ Resume Held Patients

Each held entry in the Admin queue list now shows a ▶ Resume button. Staff can bring any held patient back to serving in any order — no need to call next and skip them.

  • Multiple patients can be on hold simultaneously; each gets its own Resume button
  • Resuming re-announces the number via voice and updates the TV display
  • Fix: Reset now correctly clears held entries (previously they were orphaned across sessions)

⏸ Pause / Resume Auto-Advance (Admin page)

A new ⏸ Pause Auto-Advance button in the Admin action bar lets staff temporarily stop Loyverse auto-advance without navigating to Settings.

  • Turns yellow with ▶ Resume Auto-Advance text when paused
  • State syncs live across all open Admin tabs via WebSocket
  • Useful when a patient steps out (on hold) and you don't want sales to keep advancing the queue

⬇/⬆ Database Backup & Restore (Settings page)

A new Database card in Settings makes machine migration easy.

  • Download Backup — exports a consistent snapshot of queue.db (safe while the app is running); filename includes today's date (e.g. queue_backup_2026-03-21.db)
  • Restore from Backup — upload a previously exported .db file; validates it's a real SQLite database, atomically replaces the current DB, then reloads the page
  • Preserves all settings, queue history, push subscriptions, and Messenger subscriptions

Docker

docker pull ghcr.io/mrkaqz/queue:2.4.1
image: ghcr.io/mrkaqz/queue:2.4.1

v2.4.0 — Loyverse POS Integration

Choose a tag to compare

@mrkaqz mrkaqz released this 21 Mar 14:21

What's new

Loyverse POS Integration

Completing a sale in Loyverse POS now automatically advances the queue — no manual Call Next needed.

Smart mode (default):

  • Queue has waiting patients → calls the next one
  • Queue is empty → auto-issues a new number and calls it immediately (walk-in support)

Call-next-only mode: advances only when patients are already waiting; does nothing if the queue is empty.

The endpoint is secured with HMAC-SHA256 signature verification (X-Loyverse-Webhook-Signature).

Settings page

A new Loyverse POS Integration card in Settings lets you:

  • Paste your webhook secret
  • Enable/disable the integration
  • Choose Smart or Call-next-only behaviour
  • Copy the webhook URL to paste into the Loyverse dashboard

Setup (Loyverse dashboard)

  1. Settings → Loyverse POS Integration → copy the Webhook URL
  2. Loyverse dashboard → Webhooks → Add webhook → paste URL, select Receipt created
  3. Copy the generated secret → paste into Settings → Webhook Secret
  4. Set toggle to Enabled → Save Settings

Docker

docker pull ghcr.io/mrkaqz/queue:2.4.0
image: ghcr.io/mrkaqz/queue:2.4.0

v2.3.2

Choose a tag to compare

@mrkaqz mrkaqz released this 16 Mar 10:59

Bug fixes

TV sound badge hidden on Admin-only audio

When Announcement Sound Output is set to "Admin only", the TV page no longer shows the "Tap to enable sound" badge — since audio never plays on the TV in that mode, the badge was misleading and cluttered the display.

Also fixed: the badge now reacts instantly when the setting is changed from the Settings page — no TV page reload required. Switching back to "TV only" or "Admin + TV" will correctly re-show the badge if browser autoplay is still blocked.

Docker

docker pull ghcr.io/mrkaqz/queue:2.3.2

Or pin in docker-compose.yml:

image: ghcr.io/mrkaqz/queue:2.3.2

v2.3.1

Choose a tag to compare

@mrkaqz mrkaqz released this 16 Mar 08:08

Bug fixes & polish

TV sound badge auto-hide

The "Tap to enable sound" banner on the TV page now automatically disappears after 15 minutes if nobody taps it.

Previously the badge would stay on screen indefinitely when autoplay was blocked by the browser — cluttering the display overnight or whenever the TV was left running unattended after setup. Now it quietly fades away on its own.

Tapping the badge still works exactly as before and cancels the timer immediately.

Admin footer version

Fixed the admin page footer still showing v2.3.0.

Docker

docker pull ghcr.io/mrkaqz/queue:2.3.1

Or pin in docker-compose.yml:

image: ghcr.io/mrkaqz/queue:2.3.1