Skip to content

Repository files navigation

Keues TicketMachine

Version Status: Beta Electron React TypeScript Vite Mantine License: MIT

Self-service ticket machine for the Keues queue management system. Official website and documentation: https://www.keues.dev

Keues TicketMachine is the physical kiosk where a customer picks a service or category and gets their turn number. Unlike Keues-Monitors (which only displays), this app writes tickets to the backend.

⚠️ This project does not work standalone. It requires the Keues backend to connect to and issue tickets.

🧪 Beta. This project is in beta: the ticket is currently shown on screen only. Physical printing on a POS printer is not implemented yet, but it will be added in an upcoming release.


Requirements

  • Node.js and pnpm
  • The Keues backend (REST API + SignalR hub) deployed and reachable from the same network as the machine.

How it works

  1. On first launch, the machine settings screen opens: server address → Connect → location → flow, plus a machine name and the visual theme.
  2. Once saved, the app loads the flow's menu tree (flowJson) and connects via SignalR (/devices?...&type=0).
  3. The customer navigates the menu, taps a ticket option and receives their number on screen. The screen auto-resets to the main menu after 2 seconds.

The menu tree is hierarchical: menu nodes navigate to submenus (with a "Back" button), ticket nodes issue a ticket in the corresponding queue.


Features

  • Hierarchical menu tree of services, loaded live from the flow.
  • Ticket issuing: POST /api/queues/{queueId}/new-ticket.
  • Visual theme: header colors, screen title, button colors/radius, background image and number of columns.
  • Hot flow reload: the ReloadFlow SignalR event refreshes the menu tree when the flow is edited.
  • Fullscreen mode for the kiosk screen.

Install & run

pnpm install

Development runs two processes separately:

pnpm dev       # Vite renderer on http://localhost:11223
pnpm electron  # Electron window

On some Linux environments Electron requires ELECTRON_DISABLE_SANDBOX=1 or --no-sandbox to run.


Build (Windows)

pnpm dist

Builds the renderer and the Electron main process and packages a Windows NSIS installer via electron-builder.

Windows installer: every GitHub release includes a ready-to-install .exe for Windows. Download it, run it and follow the installer steps — no build tools required.


API endpoints used

Read:

Endpoint Purpose
GET /api/locations List of establishments
GET /api/flows?locationId=X List of flows for a location
GET /api/flows/{id} Fresh flow JSON with the menu tree

Write:

Endpoint Purpose
POST /api/queues/{queueId}/new-ticket Issue a ticket in a queue (body: { flowId }, returns the ticket code)

SignalR events

Event Purpose
ReloadFlow Hot-reloads the menu tree when the flow is edited
Ping Keep-alive (logged only)

The machine connects to the hub /devices?deviceId=...&name=...&locationId=...&type=0.


Stack

  • Electron 43
  • React 19
  • Vite 8
  • TypeScript 6
  • Mantine 9 + @tabler/icons-react
  • @microsoft/signalr 10
  • vite-plugin-electron

Project structure

electron/
  main.ts          # Electron main process, config JSON, deviceId UUID
  preload.ts       # contextBridge: save/load config, background image picker

src/
  main.tsx         # App entry, Mantine provider
  App.tsx          # Config, menu tree, SignalR, ticket issuing, theme
  signalr/
    deviceConnection.ts  # Hub connection to /devices (type=0)
  components/      # Legacy kiosk components (TicketMachine, TicketCreated, FlowButton)
  types/           # Config, flow and theme definitions

License

Released under the MIT License.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages