Admin panel · Customers
Admin panel
Customers
Manage the customer list that decides who is a returning golfer, clean up names from your booking system, and find the activity log.
The Customers tab appears only in Reservation mode. It shows the database the kiosk uses to decide whether a golfer is new (gets the tutorial video) or returning (goes straight into the session).
The Customers tab: auto-play setting, the customer grid, and the action buttons.
Decide who sees the tutorial
| Setting | Default | What it does |
|---|---|---|
| Auto-play tutorial video for new customers in reservation mode | on | A golfer not yet recognised as having visited watches the tutorial after tapping the start button. Returning golfers never see it. |
A golfer counts as returning when the booking matches a record whose Visits is 1 or more. Everything else is new: no match, or a record with 0 visits. Each time a golfer taps the start button, the matched record's Visits goes up by one and Last Visit is set. A visit on another bay also counts: that kiosk writes a marker to the Google event, and this kiosk raises the customer to at least 1 visit on its next sync.
Matching is by email first, then phone plus name, then name alone. The name-only match ignores case and tolerates an extra word on the end of the last name ("Smith Stratford" matches "Smith").
Read the customer grid
| Column | Meaning |
|---|---|
| First Name, Last Name | The golfer's name as stored. |
| Lower-cased. Unique across the list. | |
| Phone | As entered. Matching ignores formatting and uses the last 10 digits. |
| Visits | Number of sessions started. 0 means new. |
| Last Visit | When the golfer last tapped the start button. |
| Source | calendar (created by sync), csv_import, or manual (added here). |
Calendar sync creates a record whenever a booking carries an email or phone number. A booking with only a name does not create one, so those golfers stay new unless you add them by hand. Refresh reloads the grid.
Add or edit a customer
Add opens an empty dialog; Edit opens the selected row. The dialog has First Name, Last Name, Email, Phone, Visits and Notes.
- At least one of Email or Phone is required.
- A phone-only customer needs a first or last name.
- Visits must be a whole number. Set it to 0 to make someone new again (they get the tutorial), or 1 or more to mark them returning.
- Notes are free text for your own use and are not shown on the lock screen.
Delete removes the selected record after a confirmation. This cannot be undone.
Mark imported customers as returning
After a long Catch Up Now on the Calendar tab, every customer pulled from past bookings sits at 0 visits and would get the tutorial. Click Mark All Returning to set every 0-visit customer to 1 visit. After a confirmation, a dialog reports how many records changed. Customers already at 1 or more visits are untouched.
Import a list from a spreadsheet
- Click CSV Template and save
simlock-customers-template.csv. Its columns areFirstName,LastName,Email,Phone. - Fill it in. Every row needs an email or a phone; phone-only rows need a name.
- Click Import CSV and choose the file.
Rows matching an existing customer are skipped, not merged. The summary reads "Imported N, skipped N duplicates, N errors" and lists the first ten error rows. Imported records arrive with 0 visits, so follow up with Mark All Returning if they are existing members.
Clean up names from your booking system
Some booking platforms append the location to the customer name, so an event arrives as "Jane Smith Stratford". That pollutes the welcome screen and breaks name matching. The fix is on the Calendar tab under Customer Name Cleanup:
- In Words to remove from customer names, enter the words separated by commas, for example
Stratford, Bay 1. Multi-word phrases are allowed. - Click Save.
Those words are then removed from every name that comes in from a calendar, before it is matched, shown or stored. Matching is whole-word and ignores case, so "Stratford" does not touch "Stratforde". Saving a changed list also cleans names already in the list; a name is never blanked entirely, and the activity feed logs how many records changed.
Find the database and activity log
Everything on this tab lives in one SQLite file: C:\ProgramData\SimLock\customers.db. It runs in WAL mode, so customers.db-wal and customers.db-shm sit beside it; copy all three together to inspect it elsewhere. It holds three tables:
customers- the records shown in the grid.upcoming_events- synced bookings in the polling window, with their calendar and arrival marker.activity_log- the feed on the Dashboard. The newest 500 rows are kept; the Dashboard shows 25.
Each activity row has a timestamp, event type, message and severity (info, warn or error). Event types SimLock writes:
| Event type | When |
|---|---|
calendar.sync |
Every poll or Catch Up Now, with the event count and status. |
calendar.sync.error |
A poll failed outright. |
customer.arrived |
A golfer tapped the start button. |
customer.lookup |
The identity the booking carried and whether it matched (warn when treated as new). |
customers.cleanup |
Name cleanup changed stored records. |
reservation.launch / reservation.active |
The Monitor launched the lock screen for a booking, or found it already running. |
session.launch / session.stop |
Session app launch and stop steps (see Session launch). |
session.ended |
A booking ended after the golfer had started. |
lockscreen.relock |
A relock request restored the hidden lock screen. |
maintenance.end / maintenance.cleared |
Manager override ended, or a stale override was cleared after an upgrade. |
mode.change |
Operating mode switched. |
uneekor.configure |
The Uneekor Launcher setup ran from the Admin panel. |
A returning golfer got the tutorial?
Read the customer.lookup line for that arrival. It shows the email, phone and name the booking carried and which record, if any, it matched. Most "it didn't recognise me" reports are explained there.