All projects
2021.06Consumer & LeisureNew Build

Screen Golf Franchise Control Tower

Connects device status and sales from franchise locations nationwide into one dashboard for headquarters.

WebServer & InfraDesktop & Device
Screen Golf Franchise Control Tower
Screen reconstructed from delivered work. Contains no client data.
Timeline
About 6 months
Team size
4 people
Platforms
Web · Server · Store devices
Scope of management
Franchise stores nationwide

Background

The client was a headquarters running screen golf stores nationwide as a franchise, but equipment status and sales data existed only on each store's local PC. If a store's equipment stopped, headquarters had no way of knowing until a customer complaint call came in.

Scope

  • Real-time collection of store equipment status, shown on a headquarters dashboard
  • Per-store sales aggregation and daily closing reports
  • Headquarters alerts when equipment issues occur
  • Franchise store registration and termination management
  • Remote restart function for store equipment
  • Screens separated by headquarters admin permission level

Technical decisions

What we chose, and why it fit

A resident agent on each store PC that pushes status to a central PostgreSQL server

Store internet quality varied by region, so a central server polling each store for status meant some stores responded slowly or not at all. Switching to a push model, where stores send status first, meant even stores with unstable lines reported in at a minimum interval.

The React-based dashboard shows stores as a table by default, not a map

What headquarters staff actually needed to check was which stores had problems today. A map looked good but became hard to scan at a glance as the store count grew, so the default screen became a table sorted with problem stores at the top.

Engineering challenges

Problem

Store equipment rebooted on its own or lost network connection often, making it hard to tell a normal shutdown from a failure.

Approach

We split the case where a device disappeared without sending a normal shutdown signal from the case where periodic status reports simply stopped, tracking them as separate states, and recorded the last known-good time when a device reconnected.

Result

The headquarters screen now distinguishes stores currently down from stores that briefly disconnected and returned, letting staff set priorities without calling to check every time.

Problem

Equipment configurations varied slightly across franchise stores, so a single agent version couldn't collect the right status fields for all of them.

Approach

We added equipment configuration profiles to the agent, so selecting a configuration at store registration activates only the matching set of collection fields.

Result

Adding a new franchise store now just requires assigning a configuration profile, with no code changes needed.

Handover and operations

We gave the headquarters operations team a separate screen for store registration and device profile management, so new franchise stores could be added without the development team's involvement. We handed over the source code, deployment scripts, and a store agent installation manual, and support for new store types continued under a separate maintenance contract.

Stack

PythonReactPostgreSQL