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.
- Node.js and pnpm
- The Keues backend (REST API + SignalR hub) deployed and reachable from the same network as the machine.
- On first launch, the machine settings screen opens: server address → Connect → location → flow, plus a machine name and the visual theme.
- Once saved, the app loads the flow's menu tree (
flowJson) and connects via SignalR (/devices?...&type=0). - 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.
- 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
ReloadFlowSignalR event refreshes the menu tree when the flow is edited. - Fullscreen mode for the kiosk screen.
pnpm installDevelopment runs two processes separately:
pnpm dev # Vite renderer on http://localhost:11223
pnpm electron # Electron windowOn some Linux environments Electron requires
ELECTRON_DISABLE_SANDBOX=1or--no-sandboxto run.
pnpm distBuilds 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
.exefor Windows. Download it, run it and follow the installer steps — no build tools required.
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) |
| 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.
- Electron 43
- React 19
- Vite 8
- TypeScript 6
- Mantine 9 + @tabler/icons-react
- @microsoft/signalr 10
- vite-plugin-electron
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
Released under the MIT License.