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).

Admin panel, Customers tab 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.
Email 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

  1. Click CSV Template and save simlock-customers-template.csv. Its columns are FirstName,LastName,Email,Phone.
  2. Fill it in. Every row needs an email or a phone; phone-only rows need a name.
  3. 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:

  1. In Words to remove from customer names, enter the words separated by commas, for example Stratford, Bay 1. Multi-word phrases are allowed.
  2. 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.