SpikePC User Guide
A manual for the owner and operators of a gaming club: what the system can do, where each thing is configured and what every parameter means.
This is the guide to the organization panel (web interface). Technical documentation for developers of the station client, the club server and the mobile app is supplied separately.
---
1. What SpikePC is
A management system for gaming clubs. It has four parts:
| Part | What it does |
|---|---|
| Organization panel | Web interface: clubs, stations, clients, money, goods, analytics |
| Station client software | The program on the gaming PC: client login, game catalogue, shop, time tracking |
| Club server | One server per club: powering stations on (Wake-on-LAN), golden images, disk health |
| Mobile app | For the client: sign-up, QR login at a station, visit history |
Everything is tied together by a real-time service: a station keeps a permanent connection to the server, so the club map shows the current state immediately and operator commands arrive instantly.
Roles
| Role | What is available |
|---|---|
| Owner of the organization | Everything, without limits; permission groups do not apply |
| Staff member | Only what their permission group and assigned clubs allow |
| Franchise | A separate panel: catalogue and settings of chain clubs from different organizations |
| System administrator | Platform maintenance: organizations, registry, exchange logs |
The documents. On the first sign-in — and after every new revision — the panel asks you to read and confirm the licence agreement and the personal data notice. The dialog does not close without the confirmation: without consent we may not go on processing the data. The links open in a new tab, so the panel stays where it was. Both documents are always in the site footer, and the club must pass the personal data notice on to its clients and staff: the controller of their data is the club, the service is only a processor.
---
2. The interface
At the top there is a single bar:
- on the left the organization name, the date and the weather;
- today's figures: client sessions, stations online, till revenue, bonus credits, occupancy "average / current";
- on the right icons: orders (with a counter of new ones), club map, cash desk, bookings, system sections, user menu.
The revenue and bonus figures are links to the cash desk: you see a number and go find out what it is made of. The link appears only for those who have access to that section.
The interface language is chosen in the profile (user menu → “Profile”, the language list next to the name and the phone) — there is no separate switch in the bar any more. The language is saved by the same button as the rest of the card and applies at once: the panel reopens on the same section.
System sections (the grid icon) open a window with every section of the panel, with search. Sections are grouped by meaning: Club, Clients (including chat history), Shop (including stock), Rates and payments (including the cash desk and cash shifts), Games, Staff, Franchise, System. The user menu (the person icon) holds the profile, password change and sign-out.
Figures are counted over the clubs available to you: the owner sees all of them, a staff member only their own.
From a phone
The panel opens on a phone and a tablet — there is no separate app for staff. The top bar keeps the organization mark and a single menu button: every section, and with them the profile, the password change and the sign-out, live inside it (the section search is dropped on a phone — its place goes to the title and the close button). On a phone the top bar carries no figures, no clock and no weather: the strip goes to the section itself, while the revenue and the load are read in the cash desk and in the analytics. The full summary stays on a monitor and a tablet. Lists scroll sideways inside their own frame, dialogs take up almost the whole screen, and the filters are folded under a funnel icon at the right of the section title line — a tap unfolds them, another folds them back, and whatever you set stays set.
Lists are shown as cards. A row is its own block: the main field as the heading, the other columns as “label: value” pairs, the row buttons at the bottom. The create button moves into the section title line, because the table head is not shown on a phone.
Four screens stay tables and scroll: the tariff and pass schedules, the order board, the station booking and the cash desk. There the grid itself is the point — hours of the week, status columns, stations over time — and it cannot be unfolded into cards.
On the club map the funnel is replaced by a gear, and it holds more than the club choice: the station status counters, the scale, the server state request and the switch to layout editing go there too. The title line keeps the name of the club you have open and two buttons on the right: the chats with their unread counter and the gear — the rest of the room goes to the hall.
What works differently:
| Where | On a phone |
|---|---|
| Club map | The station menu opens on a tap instead of a right click (in the layout editing mode, where a tap places elements, on a long press). The plan is dragged with a finger, the scale is set by the “− / % / +” buttons in the header |
| Order board | Status columns are swiped sideways, one per screen |
| Reservations | A day by the hour is wider than any phone, so the grid is dragged with a finger. Selecting several stations with a rubber band is not possible: a tap picks one hour, the rest goes through the “+” dialog with exact times |
| Orders | There is no new-order counter in the top bar (it holds a single menu button), but the new-order sound still plays; the order board opens from the menu |
| Laying out the hall plan and the banner area | Both need mouse dragging — they are done from a monitor |
---
3. Clubs
The Clubs section lists the venues of the organization. Card parameters:
| Parameter | Meaning |
|---|---|
| Name, address, description | Shown to the client at the station |
| Coordinates (lat / lon) | Used for the weather in the header and for maps |
| Phone numbers | Contacts for the client |
| Currency | A three-letter code (UAH, EUR, USD, PLN…) picked from a list. It signs the amounts of this club. Every club has its own currency — a chain may work in several countries, and amounts in different currencies are never added up or converted at a rate |
| Free minutes | How many first minutes of a session are not charged at all (neither money nor a pass). 3 by default, 1440 maximum, 0 turns it off |
| Accept orders | A toggle: when off, stations get a refusal and no order is created |
| Idle control | Two numbers: after how many idle minutes to warn the operator (7 by default) and after how many to power the station off (10). 0 in a field disables that step |
| Disk space alert threshold | How full the club server disk has to be before the panel starts warning: 90 by default, 0 — never warn. Both the server disk as a whole and each of its pools are checked separately |
| Telegram orders channel | If filled in, notifications about this club's orders go there, otherwise to the organization's common channel |
| Windows administrator password | Generated when the club is created, shown read-only. The station fetches it by itself and it is never written to logs |
When a club is created the system automatically adds 10 test clients (login and password equal the email of the form <club><org>NN@domain) — so that there is someone to test login, rates and orders on right away.
---
4. Gaming stations
Gaming stations is the list of PCs and consoles. Parameters:
| Parameter | Meaning |
|---|---|
| Number | The station name, seen by the operator and the client |
| Type | PC or console |
| IP, MAC | Device identification. The MAC is unique and is used for Wake-on-LAN |
| Station group | The rate depends on it: the price schedule is bound to the group |
| Screen refresh rate | Hz, 60 by default (24–480 allowed). The station applies it on connection |
| Expirenza QR link | Each station has its own QR — the client scans it straight off the screen. Entered as a link (https://…); empty means no QR is shown |
| App version | Read-only: the station itself reports its version on connection. A dash means it has not reported yet (old software, or the machine has not been powered on). The column shows where the fleet is not updated; the tooltip over the value says when the version was reported |
The Expirenza link can be changed separately from the station card: in the list, next to the QR icon, there is a pencil. This action has its own permission ("Expirenza link"), so the link can be trusted to shift staff without opening up the IP, MAC and group to them — one typo there disconnects the station from the server.
Station groups is the section for splitting the floor into zones (Standard, VIP, PS5 and so on). A group has a name and a colour; rates, occupancy and analytics are counted per group.
If auto-discovery is enabled in the organization settings, a new station can register itself on first connection — you only need to set its group and number.
A new organization already has three stations — "1", "2" and "3", one in each starter group. They are placeholders: the IPs 192.168.1.1–3 and the MACs aa:aa:aa:aa:aa:aa…cc in them are made up, and nothing connects by them. Open the card and put in the real IP and MAC of your machine — the station will come alive. Delete the placeholders you do not need.
---
5. Game stations groups
Splitting the floor into zones: Standard, VIP, PS5, racing seats. A group has a name and a colour — the colour labels it on the club map and in the booking grid.
A group is not decoration but the basis of charging: the price schedule is attached to a group, not to a station. That is why a pass is valid in the group it was bought in, why occupancy and analytics are counted per group, and why a banner can be shown in chosen zones only.
A station points at its group in its own card (the Game stations section). A station with no group ends up with no tariff — time on it will not be charged.
A new organization already has three groups — pro, vip and normal, with one station in each. Rename them to fit your floor or delete the extra ones; what matters is not leaving a station without a group and not forgetting the price schedule: until a group is painted with a tariff, time in it goes free of charge.
6. The club map

The operator's main screen. It shows the floor in real time.
What you see on the map
| Sign | Meaning |
|---|---|
| Station colour | Grey — powered off, green — on and free, busy — a session is running |
| Person icon | A client is logged in at the station |
| Badge icon | A staff member is working at the station |
| Tools icon | The station is under maintenance (service mode) |
| Person-with-gear icon, amber outline | An administrator is working at the station (administration mode) |
| Dimmed station with a crossed-out number | Taken out of service |
| Orange outline | There is a booking: solid — running now, dashed — starting soon (how many minutes ahead to warn is set in the club card, 30 by default) |
| Card icon (blue/red) | The client was given credit / they already owe money |
| Time on top | The client's remaining time; under 15 minutes shows in red |
Being online is determined by the fact of the station's connection to the server, not by the last activity — a powered-off PC turns grey at once.
The scale of the plan is changed with the "− / % / +" buttons in the header (clicking the percentage returns the starting 90%, Ctrl+mouse wheel works too). The chosen value is remembered per operator and survives going to another section and signing in again: a whole shift works at one computer, and the setting follows the person, not the machine.
Right-click actions
| Action | When available | What it does |
|---|---|---|
| Station info, session events | always | Shows station data and the log of the current session |
| The "Client at the station" line | a client is at the station | Who is playing now; the "i" icon on the right opens the client card — contacts, money, discounts, passes, current session |
| Login history | always | The last 10 sessions: date, client email, duration |
| Power on / off | by state | Powering on goes through the club server (Wake-on-LAN), powering off is a command to the station |
| Reboot the PC | the station is online | A reboot command to the station itself. Stations in a special mode do not receive it — someone is working on the machine |
| Send a message | the station is online | Text up to 1000 characters and a display time (0 — until the client closes it) |
| Sign a client in | the station is free and online | The operator types the client's email and password; the session is opened by the station itself |
| End the session | a client is at the station | The station closes the session itself: the last minute is charged, the client is detached, the screen returns to the login |
| Top up the balance | a client is at the station | An instant credit to the balance with a till to choose |
| Sell a pass | a client is at the station | The client is already playing and asks for a pass: pick the pass and the till — the money goes to the till and the pass appears on the client at once |
| Top up after sign-in | always | A 30-minute request: the sum will be credited to whoever signs in at this station — by password, by an operator ticket, by QR or by registering and signing in. You can also pick a pass here: on sign-in the system credits the money and buys it right away |
| Give credit | a client is at the station | Permission to go negative until the end of the session (see section 9) |
| Station mode | the station is free | A list of three modes: maintenance, administration, taken out of service (see below) |
| Create a golden image | the station is powered off | Takes a reference disk image through the club server |
There are no separate "Lock" and "Unlock station" items in the menu: they said the same thing as "End the session" and "Sign a client in". For a human the station has one state — either a client is playing at it or not; so these two items exclude each other.
Station modes
Normally a station is "in service": clients sign in, idle control applies, the operator manages it as usual. Besides that there are three special modes — only the administrator sets and clears them from the panel, by right-clicking the station:
| Mode | When it is used | Can a client sign in |
|---|---|---|
| Maintenance | the machine is being repaired, cleaned, re-equipped | no |
| Administration | an administrator is working at it: installing games, changing settings | yes — the machine stays in service |
| Taken out of service | broken, sold, standing in the corner | no |
Administration differs from maintenance in one thing, and it matters: while the station is in it, the club server does not roll its disk back to the reference image on reboot. Otherwise everything the administrator installed would vanish on the very first restart.
Rules common to all three:
- the mode survives powering the station off and losing the connection — it is not about power but about what is being done to the machine; only a person can clear it;
- only a free station can be switched: if a client is playing at it, end the session first — otherwise the administrator would sit down at a machine someone was just thrown off;
- idle control does not touch such stations, and they cannot be powered off from the map (neither one by one nor with a selection) — someone is working at the machine right then. Powering on over the network is allowed in any mode;
- the station menu in a special mode is reduced to returning it to service, switching to a neighbouring mode and two operations with the machine itself — so the operator does not grant credit or send a message to a computer that is being set up. Those two operations are
"Power on" (for a powered-off station, in any mode) and "Create a golden image" — available in administration mode for a powered-off station. This is the usual order of work: the administrator installed the games, powered the machine off and took the reference image from it, which the club server will then hand out to the rest;
- a station taken out of service is not counted in the floor occupancy — otherwise equipment that is not actually on the floor would drag the percentage down. It stays visible on the map, dimmed: it should be clear why there is a gap in the row.
Group actions
Select stations with a selection box and an action panel appears. It shows only what applies to the selection: a button appears when at least one of the selected stations fits it, and the number of such stations is shown next to the label. The action goes exactly to them; the rest are left alone.
| Action | Who it fits |
|---|---|
| Power on | stations that are powered off |
| Power off, reboot | stations that are on, except those in a special mode |
| End the session, send a message | stations with a signed-in client |
| Top up the balance, sell a pass | stations with a signed-in client |
| Top up after sign-in, sell a pass at sign-in | free stations, powered on or off: the request waits for whoever sits down |
Before the action runs you see the selection breakdown: two groups — who the action goes to and who is skipped. Stations are drawn with the same icon and colour as on the floor plan, and hovering one shows why it was skipped. For actions with input (a sum, a text, a pass) the breakdown sits at the top of the form, so you see the group while filling the fields.
The result for each station is shown in a separate status panel: "done", "delivered", "offline" or "skipped" — the state may have changed between the last map refresh and your click, and the server skips such stations on its own.
A pass right where the client sits
A pass does not have to be sold from the client's card — it can be sold where the person is sitting. Two cases:
The client is already playing. Right-click their station → "Sell a pass". The window lists the club's passes with the price for this client (the permanent discount is applied when the pass allows it), the till and a comment. The money goes to the till, the pass appears on the client at once and is bound to the group of the station they are playing at.
A pass that is not in this hall's price list is marked in the list — you may still sell it, but you see the mismatch before you take the money.
The client has not sat down yet. Right-click a free station → "Top up after sign-in", and pick a pass next to the sum. As soon as the person signs in at this station, the system does two things in a row: credits the money you took and buys the pass out of it. This is convenient at the entrance: you take the payment, assign a station, the person sits down and is already playing on a pass.
The sum in the request stays a separate field and is prefilled with the pass price. That is not a detail: the request is attached to a station, and who will sit at it is not yet known — they may turn out to have a personal discount. The till receives what you took, the pass is bought at its own price, and the difference stays on the client's balance.
Both cases need an open cash shift, as any taking of money does. The right is the same one as in the client's card: "Sell a pass".
Stations standing idle
A station is powered on but nobody is at it: no client, no staff member, and it is not in a special mode. After the number of minutes from the club settings (7 by default) a window appears in the bottom-left corner of the map listing such stations: how long each has been idle and how long is left before it is powered off. The "Reset" button next to a station zeroes its counter — this is the answer "I can see it is taken, do not power it off"; the button in the window header resets them all at once.
If the counter is not reset, after the second number of minutes (10 by default) the station powers itself off. The countdown starts again every time the station becomes free, and stations in a special mode (maintenance, administration, taken out of service) are not watched at all — they are kept powered on deliberately.
Chats with clients
A client at a station can write to the operator without leaving their seat — "the mouse is not working" or "bring me a cola". The conversation is bound to the client's current session: once they leave, the conversation is over, and the next person at that station starts with a clean slate.
The "Chats with clients" button in the map header shows the number of unread messages and opens a panel to the right of the floor plan. It has two screens:
1. The chat list — one row per station: the station icon with its number and the same highlight as on the plan, the client name, the last message and the unread counter. Stations with unread messages come first, then the ones with recent conversations. The list holds only stations where a client is signed in right now — there is nobody else to write to. 2. The conversation — opens on click in the same place, the arrow leads back. History, an input field, a set of emoji (including a hookah). Enter sends, Shift+Enter starts a new line.
Next to the client's name there is an "i" icon: it opens their card without leaving the chat. There you find contacts and date of birth, balance and debt, discounts, language, notes, the current session (start, duration, time left, spent on time and purchases, credit), unused passes and the five latest account operations.
The message status is shown with ticks, as in messengers: no icon — sent, one tick — the station received it, two — the client read it. A message sent to a powered-off station will arrive once it is back online.
Past conversations stay in the Chat history section: a closed session disappears from the chat on the map, but the conversation itself does not go anywhere. There you find a list of all dialogues — date, station, client, number of messages and unread ones — with filters by club and period and a search through the text of the messages: what was agreed is usually only remembered by a phrase. A click opens the whole conversation; it cannot be continued — the client is no longer at the station.
A new message is accompanied by a sound. The chat has its own — it is chosen in the organization settings next to the order signal: by ear a message must differ from an order, otherwise the staff walks to the counter instead of answering in the conversation. Until the club picks a separate signal for the chat, the order one plays. The sound is unlocked after the first click on the page (a browser requirement) and stays silent if you already have that station's conversation open.
The club server
A separate object on the map. On right-click: state (load, disks), a request for fresh data, a reboot (with confirmation). Powering stations on and working with golden images also go through it.
The panel tells you when the disk is filling up. The server reports on itself every few seconds, and as soon as the used space crosses the club's threshold (the "Disk space alert threshold" setting, 90% by default), a disk icon with the worst percentage appears in the panel header — it is visible in every section, not only on the map. Click it: the same server state window opens, with the overfull disk highlighted in red. If there are several warnings, club buttons appear at the top of the window. Both the server disk as a whole and each of its pools are checked: the space for station images runs out in a pool, while the system disk may be nearly empty. The icon will not go away until the space is freed — even if the server stops reporting: a disk does not clean itself, and the time of the last report is shown in the window.
---
7. Clients
The Clients section holds the people who play in your clubs.
A client account is global: one email means one client across the whole system. That is why the first name, last name, email, phone, date of birth, gender and password are only displayed in the organization panel: their owner changes them through the station or the mobile app.
The organization manages its own data about the client:
| Parameter | Meaning |
|---|---|
| Balance | The client's money in your organization |
| Status | Active or not |
| Source | Where they came from (for statistics) |
| Discount | The client's standing discount, % — applies to time and to the price of a pass (see section 7.1) |
| Rating, notes, avatar | The club's internal marks |
| Locale | The language the client sees at the station |
| Ban | Local (your organization only) or global — by contact, so a new account on the same phone or email does not help |
Money operations
| Operation | Where | What happens |
|---|---|---|
| Top up | client card or club map | The sum is credited to the balance and lands in the chosen till. The till is mandatory |
| Sell a pass | client card | Charges the price and issues a package of time |
| Zero the balance | client list | Writes the remainder off as an adjustment; the till is not involved |
| Refund | operations section | Cancels a top-up: takes the sum off the balance (it may go negative) and makes a reverse entry in the till |
Every movement of money is recorded in the Account operations section: date, client, type, sum, till, the balance after the operation. Nothing is deleted — a cancellation is a reverse entry.
A comment on a top-up. When crediting money you can state what it is for. For a bonus till the comment is mandatory — otherwise the system will not accept the operation: a bonus without an explanation cannot be made sense of in reports.
---
8. Tariffs
The Rates section holds the price of an hour of play.
| Parameter | Meaning |
|---|---|
| Name | "Daytime", "Night", "VIP" and so on |
| Price per hour | How much is charged for an hour of play |
| Colour | For clarity in the schedule grid |
| Status | A toggle in the list: in use or disabled. A disabled rate cannot be assigned to the schedule, yet the hours it already occupies are still charged at its price |
The schedule is a "day of week × hour" grid. You pick a rate as a brush and paint the hours for the station group you need. An hour marked in the grid is included whole: "10:00–14:00" means that this rate applies up to and including 13:59:59.
If no rate is set for the current hour, the station reports it and the time is not charged — make sure no gaps are left in the grid.
How to withdraw a rate without deleting it. Every rate in the list has a status toggle. A disabled rate stays in the section with its price and colour, but it can no longer be assigned to the schedule — neither as a new interval nor by replacing the rate of an existing one.
Disabling does not remove the rate from the hours it already occupies. This is deliberate: a minute with no rate is free, so a toggle that wiped the rate off the grid would quietly make the venue free of charge. Next to the status the list shows an "In schedule" column — how many intervals are still charged at this rate; as long as it is not a dash, the rate keeps taking money. To stop it applying, remove it from those hours in the schedule (they are hatched in the grid) or paint them with another rate.
That is exactly why disabling exists instead of deletion when a rate is withdrawn for a while: deleting a rate takes all of its intervals with it, and those hours are left with no rate at all — that is, free.
---
8.1 Discounts
There are two kinds of discount, and only one applies to a client — they never add up.
The standing discount sits in the client card. It applies to time charged from the balance and to the price of a pass. This is what gives staff their 100%: they play with a zero balance.
A one-off discount comes from the separate Discounts section: a list of reasons with a percentage (a birthday, an apology for a broken mouse, a weekend promo). It applies to time only — including pay-after-play — and never to passes. Such a discount replaces the standing one and lasts until the end of the session.
It is given from the club map: right-click a station → "Give discount" → pick a reason from the list. The item appears only for a station that is powered on, and only when discounts have been set up in the Discounts section — the percentage is never invented on the spot. If a client is playing at the station, the discount goes into their session; if the station is free, it waits 30 minutes for whoever sits down. The same menu removes it.
On the map a station with a discount is labelled with the percentage ("−20%"); a waiting discount is dimmed — the promise is there, but it starts working when the client signs in.
The tariff and pass cards have a "Discounts apply" box. Untick it where the price is already below the usual (a night tariff, a promo package) — no discount will apply there, whatever it is.
The percentage a charge went through at is visible in the account operations: it answers the question "why was 52 charged for an hour instead of 60".
The client list has a discount column, a "with discount / without discount" filter and sorting by size — handy for checking who has been given what.
---
9. Tickets (passes)
The Passes section holds packages of time for a fixed price.
A pass belongs to a club: it has its own price and its own schedule grids, so the list always shows one selected club (just like the tariffs section), and a pass you create goes to that club. There is deliberately no "all clubs" option in the filter: with it a new pass used to be saved without a club — it could not be picked in the schedule and never showed up on a station.
| Parameter | Meaning |
|---|---|
| Name, price | What the client sees |
| Duration | How many hours the package gives. Set in hours as a decimal, in steps of 0.1 hour = 6 minutes: "0.5" is half an hour, "1.5" is an hour and a half. The field shows "h:mm" right below it, so you see exactly what the client gets. The minimum is 0.1 hour; anything shorter than 6 minutes cannot be expressed |
| Colour | For the schedule grid |
| Apply automatically | Yes — the pass turns itself on when it is the client's only applicable one. No — the station asks. When several passes apply, the station asks in any case |
| Status | A toggle in the list: on sale or disabled. A disabled pass stays in the section but cannot be bought anywhere |
A pass has two schedule grids:
- sale — when it can be bought (it appears in the list at the station accordingly);
- validity — when a bought one can be used for play. An empty grid means "always".
An important rule: a pass burns down by the wall clock from the moment of activation. Bought at 12:00 for 3 hours — at 15:00 it is gone, no matter whether the client played or went for coffee. A pause does not save the time.
A pass works only in the station group where it was bought. If the client moves to another zone, the time will be charged as money at that zone's rate.
When a pass turns itself on and when the client chooses. By itself — only when the client has exactly one applicable pass and it has the "Apply automatically" box ticked. When several apply, the station always asks which one to use: an activated pass starts burning down by the clock at once, and it is for the person to decide which of the two to spend. A refusal ("I'll pay in money") is remembered until the end of the session; the client can turn a pass on later from the menu.
If the station does not answer within a minute, a pass is turned on anyway — the first in line, even with the box unticked. This is temporary, while not every venue has updated the software on its machines: a client with a pass on their account should not pay in money because of a program version. A silent station is not the same as a client's refusal: a refusal is remembered, and no pass is turned on after it.
When a pass runs out of its validity window, it stops working and the station offers the next one. The clock does not stop — it is already running.
In the organization settings you can limit the maximum stored time and require "no more than one unused pass".
How to take a pass off sale without deleting it. Every pass in the list has a status toggle. A disabled pass disappears from sale everywhere: from the station menu, from the mobile app, from the cash desk and from the "Sell a pass" dialog on the club map. It stays in the section with its price and both schedules — the same toggle brings it back.
Passes already bought keep working and keep burning down by the clock: disabling takes the pass off sale, it does not revoke what clients paid for. So there is no need to delete a pass when a promotion ends or the price is being recalculated — just switch it off.
If the pass is disabled while a client already has the purchase menu open, the station answers "This subscription is not for sale" and refreshes the list.
---
10. Credit: playing on debt
When a client runs out of money but wants to finish playing, the operator gives credit: right-click the station → "Give credit" → the amount.
This is not a money transfer but permission for the balance to go negative until the end of the current session. The client keeps playing, the balance goes below zero, and on the map the station is marked with a card icon (red once the debt actually appears).
After the game the client pays, and you make an ordinary top-up for the amount of the debt — the balance returns to zero. Until the debt is cleared the client will not be able to sign in at a station: it will show "There is a debt on your account, please see the operator".
The cash desk and pay-after-play
The "Cash desk" section gathers the cashier's work on a single page, in tabs:
| Tab | What is there |
|---|---|
| Shift | Open and close a shift, revenue by till. A shift can be closed by whoever opened it, or by the owner |
| Top-up | Shift statistics, the history of top-ups and the form: search a client by name, email or phone, the sum, the till |
| Pay-after-play | Running ones and those awaiting payment, finished ones below; the form to switch it on |
| Shop | Orders and shop revenue for the shift |
The top-up history can be filtered: a dropdown of tills plus a search by client, the cashier's comment and the amount — “give me back that thousand” is usually looked up by the amount, when the name cannot be recalled. The filter runs on the server, so it finds operations across the whole shift and not only among the last rows shown; next to it is a “found N of M” note. The cross by the search box clears both filters.
Rang it up to the wrong till? Each history row has an arrows button that opens a till selector and a comment field under the row. This is not a refund: the money stays with the client and neither the amount nor the time of the operation changes — only which till it is counted in. The shift revenue, the till readings and the “expected in the drawer” figure are recalculated at once. The till can be changed for top-ups of the current open shift (those are what the history shows) and only while the top-up has not been refunded; moving it to a bonus till requires a comment — “what for”. Every such change goes into the event log: it is visible who moved the money and where. If the button is missing, your access group has no “Change payment method” right in the “Cash desk” block.
Pay-after-play means the client plays and the time is not taken off the balance but adds up to a bill; at the end of the session the operator takes the payment into a till. It can be switched on:
- for the client at the station — from that moment the session runs on pay-after-play;
- at sign-in — on a free station, it will start with the next client;
- for a guest — without an account: the station opens a guest session right away.
The same is available by right-clicking a station on the map; a station on pay-after-play is marked with an icon, yellow when it is awaiting payment. The limit is the ceiling for the sum: once it is reached the session ends. If it is not set, the maximum from the organization settings applies; in a running pay-after-play the limit can be changed, but not above that maximum. On pay-after-play passes are not spent and a debt on the balance does not get in the way; the club's free minutes do apply. If zero adds up, the pay-after-play closes itself. An open shift is required.
---
11. The shop
Market categories
The Product groups section holds categories (drinks, food, snacks). They are common to the whole organization, and each has a name and a picture.
Market products
The Products section. Card parameters:
| Parameter | Meaning |
|---|---|
| Name and description | Translated into the organization's languages (tabs in the card) |
| SKU, barcode | For accounting and the scanner; the list search works by them too |
| Category | The product group |
| Price | Set separately for each club |
| Image | Shown to the client |
| Active | A disabled product stays in the list but is not sent to stations and cannot be ordered |
| 18+ (alcohol / hookah) | Such products are hidden from clients whose age is not confirmed |
| Stock quantity | The current amount |
| Minimum stock | When it is reached a warning goes to Telegram; 0 means no warning |
| Warning channel | Where to send the low-stock signal (otherwise the club channel, then the organization's) |
| Related products | "People also take": a hint to the client when ordering |
| Combo set | A product made of positions with a choice: "First course: porridge/soup" + "Drink: coffee/juice" |
| Availability time | "Available at all times", or weekdays with their own time window each |
Writing goods off stock is enabled in the organization settings (the “Global settings” section).
Availability time is when the product is on sale at all. By default it is “available at all times”, and for most products that is enough. Choose “on a schedule” and seven rows appear — a weekday and a time window each: Monday 00:00–23:59, Tuesday 18:00–22:00, and Sunday can simply be left unchecked, so that day the product is not sold. Outside its hours the product is not shown to the client on the station at all — just like a disabled one, so a kitchen that works until 22:00 no longer has to be switched off and on by hand every evening. If the basket was filled before closing time and the order was sent after it, the station gets a refusal: “this product is not on sale right now”.
The end of the window includes the chosen minute in full, so “00:00–23:59” is exactly one day. If the end is earlier than the start, the window runs into the next day: “Friday 20:00–04:00” means the night from Friday to Saturday. In the product list the “Availability” column shows an icon for those that have a schedule (hover over it to see the hours) and a dash for the rest.
Stock: goods movement
The Stock section is a log where every change of a quantity is visible: what was received, what was sold, what was written off. Earlier the quantity was just a number in the product card, and there was no way to answer the question "where did twenty cans of cola go".
| Movement type | Where it comes from |
|---|---|
| Receipt | a delivery was accepted |
| Write-off | damage, breakage, internal consumption |
| Sale | an order from a station — recorded automatically |
| Return | an order was cancelled — the goods go back to stock |
| Adjustment | the result of a stock-take |
Receiving goods is done in one window. On the left there is a search through the club's products: by name, SKU or barcode, so you can simply scan barcodes with a scanner (Enter adds the product found). On the right the list is built: quantity and price for each position, with the number of positions and the total underneath. The comment is the supplier or the invoice number. The "Post the document" button records everything as one operation: either the document goes through as a whole or it does not go through at all.
The same window is used for a write-off and a stock-take. The difference is in the meaning of the quantity: in a receipt it is added, in a write-off subtracted, in a stock-take it is entered with a sign — +10 surplus, −10 shortage.
The log has filters by club, movement type and period, a search by name, SKU and barcode, and totals for the chosen period above the table. Each row shows "was → became", and the document number opens the whole receipt.
The right to view the log is granted together with the products, while posting documents is a separate one: the whole staff may look at the quantities, but not everyone accepts a delivery.
---
12. Orders
A client places an order from the station; no money is taken off — payment happens on the spot.
The order board is the working screen: the columns "New", "In progress", "Ready", "Cancelled". A card shows the station, the client, the positions (including the choices in a combo), the sum and the client's comment. Buttons move the order through the statuses. The board refreshes itself, and so does the orders list: both pages redraw at the very moment the header counter changes, so the signal and the order appearing coincide.
An order has three working states: new → in progress → ready (or cancelled). There is no separate "preparing" — on the board it landed in the same "In progress" column, there was nothing to tell it apart from "in progress", and the staff pressed an extra button.
Filters: club, period (a day, 3 days, a week, everything), search by client.
The "Accept orders" toggle turns acceptance off for the chosen club — stations will get a refusal.
Cancelling an order returns the goods to stock if they were written off for it.
Notifications. A new order and a change of status go to a Telegram channel: the club's one if it is set in the club card, otherwise the organization's. Low-stock warnings appear there as well.
A basket hangs in the panel header. The counter shows only new orders — the ones that need attention right now; orders in progress and ready ones are visible in the list on hover, broken down by status. Clicking the basket leads to the board.
A new order is announced with a sound. The sound is chosen in the organization settings — harsh built-in signals or your own uploaded file, with volume and repetition. A client's chat message has its own signal, chosen in the same place. The browser allows sound only after the first click on the page — until then an orange bell is visible on the basket.
---
Orders board
The same orders, but as a kanban: the columns New / In progress / Ready / Cancelled, and a card with the station number large in its top-left corner — that is what a member of staff goes to the client with. The board refreshes itself every ten seconds; the buttons on a card move the order across the columns.
The "Accept orders" switch lives here too: turn it off and the stations get a refusal, so no order is created. Handy when the kitchen closes earlier than the floor.
12.1 Cash shifts
A shift is a cashier's working period in a club. Until a shift is open, a client's balance cannot be topped up in any way: not from the client card, not from the club map, not with an "after sign-in" request. This way money is always tied to whoever took it.
The Cash shifts section:
| Action | What is entered | What for |
|---|---|---|
| Open a shift | The cash in the drawer at the start, a comment | The "should be" figure at closing is counted from this sum |
| Close a shift | The recounted cash, a comment | The system shows the difference from the expected amount itself |
For each shift the list shows: the club, who opened and closed it and when, how much was taken in cash, cashless and bonuses, and "in the till" — how much there should be (for an open shift) or how much was counted and by how much it differs (for a closed one). The difference is highlighted: a surplus in green, a shortage in red.
One open shift per club. Shifts of neighbouring clubs do not interfere with each other.
> While a shift is open, the header shows money for the shift, not for the calendar day — a > shift often runs past midnight. The caption next to the figure says which period the sum covers.
---
13. Payment methods and payment transactions
Payment methods (tills, in everyday speech) are where the money goes. In the menu the section is called "Payment methods" so as not to confuse it with the "Cash desk" section — the cashier's workplace.
| Parameter | Meaning |
|---|---|
| Name | "Cash", "Terminal", "Bonuses" and so on |
| Type | Cash, cashless, bonus |
| Club | A till of a particular club or one shared by the organization |
| Status | Active or disabled |
| Balance | Counted automatically: the sum of all operations of the till |
A bonus till does not accumulate a balance: these are credits, not real money. That is exactly why the revenue in the header and in analytics is counted only over cash and cashless tills, while bonus credits are shown as a separate figure.
Account operations is the log of all movements: top-ups, charges for time, pass purchases, refunds, adjustments. Filters by date, type, source and till, search by client. Top-ups can be refunded (if the permission is granted).
---
14. Promocodes
The Promo codes section.
| Parameter | Meaning |
|---|---|
| Code | Unique within the organization; letters, digits, hyphen, underscore |
| Club | In this club only or in all of them |
| Event | When it applies: on registration or on a top-up |
| Action | Top up whoever entered it, or a particular client |
| Amount | How much to credit |
| Activation limit | 0 means no limit |
| Date window | From which day to which one it works |
| Status | Ready, used, expired, disabled |
At the moment promo codes are applied on client registration at a station: the client enters the code and receives the credit.
---
15. Banners
Pictures on the station screen. You configure the display area (a 16×9 grid, selected with the mouse), the period (always or a range of dates), the time (days of the week and hours, a window across midnight is allowed), the station groups and the display duration in seconds.
16. Games
The club's game catalogue: name and description with translations, an image, a rating (it grows with launches) and the launch method. For local files you give the path, for launchers (Steam, Battle.net, Epic, Riot, Ubisoft, EA, GOG, Rockstar, Wargaming) only the game ID — the system builds the link itself. The card has a hint on where to find the ID and a preview of the resulting launch string.
Genres are ticked in the game card — as many as you like per game. In the list they are shown as badges, and next to the club selector a genre filter appears. The station receives the genres together with the catalogue and shows the client the same filter the operator has.
A client can mark a game with a star — the favourites are kept per "client + club" pair and arrive at the station right at sign-in. Favourites are not edited from the panel: this is the client's choice.
17. Game genres
A separate reference list of the organization: the list of genres is one for the whole chain, while games belong to clubs and refer to it — otherwise "Shooter" would have to be created anew in every club.
| Parameter | Meaning |
|---|---|
| Name | A separate field for each language of the organization |
| Sorting | The order in the lists and in the station menu |
| Active | A disabled genre stays in the panel but is not sent to stations |
The list shows how many games each genre holds. Deleting a genre removes it from the games as well — the games themselves stay in place.
18. Game stations reserve
The booking time is chosen by hour and minutes, minutes in steps of 5 (00, 05, … 55; 00 by default): clients do not arrive on the hour, and rounding to half an hour used to give them — or take from them — almost thirty minutes.
The "stations × time" grid is laid out by the hour — usually 24 columns per day. A booking that takes part of an hour is drawn as part of the cell too: from 13:20 to 14:40 the bar starts a third into the first cell and stops two thirds into the second. That shows both the exact time and the shape of the evening, while 288 five-minute columns would never fit on screen.
Twice a year a day is not 24 hours long. On the last Sunday of March the clocks go forward and 03:00 does not exist that day — the grid has one column less. On the last Sunday of October they go back and one hour runs twice: the column before it lasts two hours, so a "02:00–03:00" booking on that day is two hours of play. Such columns are marked with a dotted underline in the header, and the tooltip explains what is going on.
Selecting with the mouse across several stations at once creates a group booking; the minutes are then set in the dialog. Busy hours and past ones cannot be chosen; bookings that have already played out are shown dimmed but stay available for editing.
A client can book a station themselves — from the mobile app. They pick a club, a date and a station, and the booking appears in this very section and on the club map: there is no separate "world" for the app, the operator sees it alongside their own. The system checks by itself that the time is in the future and no more than 30 days ahead, that the duration is between 30 minutes and 12 hours, that the station is free at that time and the club accepts bookings; a client may have no more than five active bookings at once. They can also cancel their own booking until it has ended.
A station cannot be booked twice. The server checks the time overlap — in the grid, in a group selection and in the mobile app alike. An end-to-end join is allowed: a booking until 15:00 and a booking from 15:00 do not conflict. In a group booking the stations already taken for that time are skipped, and their numbers are named in the message.
Booking reminder. A set time before the start the client gets a reminder — in Telegram if they linked the bot in the mobile app, otherwise by email. Switching it on and the "how many minutes before" are a system-wide setting: the service administrator sets it once, it is not configured per club or per organization. Bookings without a client (the ones an administrator enters "for a name over the phone") get no reminders, and a reminder for one booking is sent once.
19. Station images
The list of the club server's reference images: date, paths and sizes, the mark of the active one. It is synchronised with the server when the section is opened. Here you also choose which image counts as the current one and delete the ones you do not need.
20. Sessions
The log of client sessions: when, who, at which station, how much time and for what amount. View only.
21. Events history
Who changed what in the panel: user, section, action, the values before and after. Filters by dates and by staff member. It opens for today by default — to see older records, move the period.
22. Locale
Locales are the languages the stations and the catalogue work in. Every language has a code (uk, ru, en, pl…), a name, a flag and a "default" mark. A client sees the station in their own language, and the catalogue — the names of games and products — comes from the translations of that language; with no translation the default language stays.
A switched-off language is not given to the stations, but the translations already entered are not lost: it can be switched back on.
23. Chat history
Conversations with clients that have already ended. The chat on the map works only with an active session, so a closed conversation can be read only here: a list with the dates, the station, the client, the number of messages and the unread ones, filters by club and period, and a search through the text of the messages — a conversation is usually remembered by a phrase.
A click opens the whole conversation, with the same bubbles and status ticks as on the map, and marks the incoming messages as read. The conversation cannot be continued — the client is no longer at the station.
24. Club reviews and ratings
A client rates the club from 1 to 5 and may write a review — from the station (right where they are playing) or in the mobile app. There is one review per club: a new submission overwrites the previous one, so the rating cannot be inflated by repeats.
Only someone who has played in this club can rate it. The check goes by the visit history, so "ordered" reviews from other people's accounts are cut off at the door.
A review is not published at once — it goes through a check. Three steps, from the free one to the paid one:
1. Simple rules: links and contacts, phone numbers, obscenities. 2. The free OpenAI check: threats, harassment, indecency. 3. A model check: advertising of other clubs, spam, accusations against named staff members, text that is off-topic.
Harsh criticism of the club — dirt, noise, prices, rudeness — counts as a normal review and is published. The filter removes rubbish, not inconvenient opinions.
A rejected review is visible only to its author, together with the reason. If the check is unavailable (for instance, the OpenAI account has run out of money), the review is published with a note — otherwise reviews would pile up in a queue and nobody would learn about it.
The OpenAI key and the model are set once by the system administrator (system settings, the AI group). Without a key only the simple rules work — the system keeps accepting reviews.
25. API keys
A key a third-party partner uses to reach your organization's data: a till, a loyalty system, a site with online booking, a chain's storefront. You create the key and hand it to the partner — treat it like a password: whoever holds it acts on behalf of your organization.
| Setting | What it means |
|---|---|
| Name | Who the key is for. Later it tells you which one to revoke |
| Expires | Never, 1 day, 1 week, 1 month, 1 year or a custom date. A custom one takes only a date: the day you pick is the key's last working day, it runs until 23:59:59. An expired key stops working — the server decides when, the partner's clock has no say. In the list a key with no expiry is marked with a dash |
| Access mode | Full access — everything you can do yourself; Access group — the rights of the chosen group, as for a member of staff; Custom set — only the ticked functions |
| Request log | A checkbox: every call made with this key is kept for 7 days — the action, the response code, the duration and the request body. Switch it on while sorting out why it does not work for the partner; there is no need to keep it on |
Picking functions in "custom set" looks the same as the rights of an access group: blocks, groups, items and a search box. Next to every item is the function's name in the system — that is exactly what the partner puts in the request, and exactly the line you tick when they ask for access.
In the list the key is shown by its first and last four characters: it goes outside, and there is no reason to read it in full from a shared table. The full key is in the card, and the button in the row copies it.
An expiry date is handy for a trial: give the partner a key for a week and it switches itself off even if everyone forgets about it. Revoking a key earlier happens only here — delete it or give it a date.
What a partner can do with a key. For now — read only: the floor and the stations, the catalogue (games, products, prices, stock), tariffs and passes with their schedules, clients and their passes, operations, shifts, sessions, orders, bookings, chats, analytics. Nothing can be changed with a key: topping up a balance, selling a pass, moving an order's status or switching a station off through the API is not possible.
The rate is limited: 120 requests per minute per key. Polling the floor state every few seconds fits into that with room to spare.
The documentation for your partner is Partner API: the address, the request and response format, the list of actions, the error codes, a ready Postman collection. Hand this link over together with the key — a developer needs nothing else. ---
26. Global settings (organization settings)
Clients and orders
| Setting | Meaning |
|---|---|
| Sign-in with a negative balance | No (by default) — a client with a debt will not get to a station until they settle up. Yes — they sign in and play on debt |
| Confirm shop orders | The setting is stored but does not affect anything yet — we are waiting for the scenario to be described |
| Top-up limit | The ceiling for a single client balance top-up; 100,000 by default, 0 — no limit. It is checked on every cash path: the client card, a top-up from the club map, an "after authorization" request and the partner API. This guards against a typo in the zeros, not against abuse |
| Maximum pay-after-play limit | The ceiling for a pay-after-play sum and the default limit when the operator has not set one; 0 means no limit |
| Pay-after-play rounding | How to round the total: no rounding (to the cent), up to a whole unit, normal rounding or down to a whole unit. It is rounded once — when the pay-after-play closes and awaits payment |
| New order signal | The sound the panel announces a new order with: harsh beeps, a siren, an alarm, a klaxon, a burst or no sound at all. The signals are deliberately harsh — they must be heard even if the staff member is several metres from the monitor. Next to it are the volume and the "Listen" button |
| Double signal | Yes — the signal repeats once more a second later. A single sound is easily taken for an accident, a repeat reads as an address to a person |
| Your own sound file | You can upload your own sound (MP3, OGG or WAV up to 1 MB) — it replaces the built-in signal. A short recording of 1–3 seconds works best. Delete the file and the one chosen from the list plays again |
| Chat message sound | The same set of signals, but for a client's message on the club map. The first option is "Same as for orders": while it is selected the chat plays the order signal and there is nothing to set up. Pick another one and you will hear whether you are called to the counter or written to in the chat |
| Chat sound volume, double chat signal, own chat sound file | The same as for an order, but for the chat: its own volume, its own repeat and its own recording. The "Listen" button next to the list plays exactly what the shift will hear |
The General settings section.
| Block | Parameters |
|---|---|
| Stock | Whether to write goods off on an order; whether to allow going negative (otherwise the station gets "out of stock"); whether to hide sold-out products from clients |
| Passes | The maximum stored time per client (hours, 0 — no limit) and a ban on holding more than one unused pass |
| Telegram | The organization's bot and the channel for staff notifications |
| Mail (SMTP) | Sending letters to clients |
| Time zone | The day boundaries in analytics are counted by it |
| Locales | The languages the stations and the catalogue work in |
| Webhook | The address the service reports events to by itself: a session start and end, a new order and its status change, a balance top-up. Switching it on, the event list and the signature key are here too — the receiver uses the key to verify the request really is ours. Delivery goes through the queue with three attempts, so an unreachable receiver holds nothing up in the panel. Useful for your own CRM, a Telegram bot or a screen in the hall |
Import from another system (SENET)
A four-step wizard: data set → access credentials → target → start.
| Set | What it transfers |
|---|---|
| Clients | The accounts of the chosen group together with their money balance |
| Balance | Only updates the balance of already imported clients |
| Zones, stations, rates, passes | The infrastructure of the chosen venue into the chosen club |
| Categories and products | The shop catalogue with pictures and translations |
| SKUs and barcodes | Only the codes and the active flag of existing products |
| Everything at once | The whole infrastructure plus the clients of the chosen group |
The "clear the current list" option deletes the previous records before loading — use it deliberately. The import runs in the background, and the result stays with the task.
---
27. Staff and access groups
Staff
The Staff section: login, name, email, phone, password, permission group, avatar, the list of clubs and the "may sign in at stations" flag (for the service login on the floor).
A staff member sees only the clubs assigned to them — this applies to the map, to the orders and to the figures in the header.
Access groups
The Permission groups section holds sets of allowed functions.
In the group window the permissions are grouped into blocks (Club, Shop, Clients, Charging, Staff and access, Organization) and sections. There is a search by name and a "select the whole group" checkbox.
In the list of groups every row has an icon with a staff counter: it opens the membership of the group, where the organization's staff are ticked. A staff member has one permission group, so ticking moves them here from the previous one (it is named next to them), and unticking leaves them without a group.
The owner does not need groups: they always have full access.
---
28. Analytics
The Analytics section is a dashboard for the chosen period.
The period: ready-made options (today, yesterday, 7 days, a month, a year…) or a custom period. For a custom one you set not only the dates but also the start and end time — you can look at the evening hours only, for instance. The end is included whole: 00:00–23:59 is exactly one day.
The granularity is by days or by months.
Figures: total revenue, station and shop revenue, hookah and alcohol separately, occupancy, active and new clients.
Charts: revenue by period, occupancy, revenue by station group, average occupancy by hour of the day and an occupancy heat map.
Tills: a table of readings (top-ups, refunds, total, number of operations, share) and the "Tills over time" chart — a separate line per payment method with a day / week / month switch. A click on the legend removes the tills you do not need, and the tooltip shows the total of the ones displayed.
Revenue by shifts — a table of duties over the last 30 days: when the shift opened, the club, the cashier, how many hours it ran, cash and cashless taken, bonuses separately, the money revenue and the number of operations; the totals and "average per shift" are at the bottom. A shift's revenue is the money the cashier took (cash plus cashless, without refunded top-ups); it is calculated by the same formula as in the cash shifts section, so the figures on both screens match. Bonuses are dimmed: they are not money in the till.
Weekly revenue — a chart over the last 18 weeks: the columns are the week's total, the line is the average revenue per day of that week. A week starts on Monday; the current, unfinished one is divided by the days that have passed and is marked "incomplete week" in the tooltip — otherwise it would always look like a slump.
The windows of these two blocks are fixed — 30 days and 18 weeks; they do not depend on the period filter in the header (only the club choice applies). Each card says so in its subtitle.
Data for past days is prepared by a nightly calculation, today is counted on the fly. If you set a time, the whole period is recalculated from the source data.
---
29. How a client uses a station
1. Registration — at the station with an email and a password, the confirmation code arrives by mail. A promo code can be entered right away. 2. Sign-in — email and password, a QR code through the mobile app, or the operator's help (they enter the details from the club map and the station confirms the sign-in). 3. The session — the club's free minutes run first, then a pass, then money from the balance. The client sees the time left and the balance. 4. The catalogue — games (launched in one click), goods with the prices of their own club. 5. An order — a basket with combos and related products; the order appears on the staff board and no money is taken off. 6. The end — the client signs out themselves, or the session closes when the money runs out. An abandoned session is closed by the system itself and nothing extra is charged.
---
30. Common tasks
| Task | How to do it |
|---|---|
| Take money from a client | Client card or club map → "Top up the balance", choose a till |
| Credit a bonus | A top-up with a bonus till; the comment is mandatory |
| Let someone finish playing on debt | Club map → right-click the station → "Give credit" |
| Clear a debt | An ordinary top-up for the amount of the debt |
| A mistake in a top-up | Account operations → "Refund" on the row you need |
| Rang it up to the wrong till | Cash desk → "Top-up" → the arrows button in the history row → another till |
| Seat a client without their phone | Club map → "Sign a client in" (the client's email and password) |
| Prepare a station for repair | Right-click → "Station mode" → "Maintenance" |
| Install games on a station without losing them on reboot | Right-click → "Station mode" → "Administration" |
| Take a reference image after installing games | In administration mode power the station off → right-click → "Create a golden image" |
| Power the whole floor on | Select the stations → "Power on" |
| Find out the server is running out of space | The disk icon in the header → the server state window (the threshold is in the club card) |
| Hand money out to guests | Select the stations → "Top up after sign-in" |
| Close the kitchen for a while | Order board → switch "Accept orders" off |
| Work out where the shift's money went | Analytics → a period with the shift's times → "Tills over time" |
| Give a staff member access | Permission groups → the group you need → the membership icon → tick the staff member |
---
31. What to keep in mind
- A client account is shared by all clubs of the system, while the balance, discounts and passes are yours, inside the organization.
- A till must always be named on any top-up: without it the readings will not add up.
- A pass burns down by the clock, not by the time actually played.
- A rate is bound to a station group: a gap in the schedule means free play.
- Orders do not take money off — payment happens on the spot, so a cancellation returns nothing to the balance (except the goods to stock).
- A debt blocks the client's sign-in until they settle up.
- A staff member sees only their own clubs — if data is missing, check their list of clubs and their permission group.