Web applications / WordPress plugin · In use · 2025–2026

MZSS Patrol System

From shift sign-up to a GPS-verified QR check-in and payroll.

MZSS Patrol System — project preview
WordPressPHPMySQLJavaScriptGeolocation APIQR codes

The challenge

MZSS, the association of ski resort rescuers that I co-founded, staffs ski patrol shifts all winter. Coordinating who works which day, keeping every day within its staff limit, confirming that patrollers were actually on the slope, and calculating what each person is owed used to run through messages and spreadsheets. The association needed one system that handles the whole season, from sign-up to payment, with checks to reduce invalid attendance records.

My contribution

Built a custom WordPress plugin that the association uses through the season. Patrollers sign up for days on a weekly schedule. Admins approve or reject sign-ups, assign a team leader for each day, and configure the season, daily capacity and non-working days. On the day, patrollers check in and out by scanning a QR code at the base, and the plugin turns verified attendance into payments, a weekly budget overview and PDF reports. Email notifications keep everyone informed along the way.

How it works

Check-in is protected in several layers. The QR code carries an HMAC signature, so an altered or incorrectly signed link is rejected. The patroller must be logged in, and the browser's Geolocation API sends their position, which must be accurate to within 150 m and fall inside a 30 m radius of an approved location at the resort, with a small allowance for weaker GPS. The patroller must have an approved shift for that day, and the scan must happen inside the morning check-in window or the afternoon check-out window. Every failure shows a clear message with what to do next, such as going outside for a better GPS signal. A day counts as worked only when both check-in and check-out are recorded, or when an admin confirms attendance manually.

PROJECT FLOW / Operations flow

From approved shift to payroll

  1. Apply for a shift

    The weekly schedule controls capacity and availability.

  2. Approve the assignment

    An administrator confirms the patroller and shift.

  3. Validate QR attendance

    Check the signed QR, login, GPS and time window.

  4. Calculate worked days

    Check-in and check-out feed pay, budgets and PDF exports.

Failed checks show a corrective message. Administrators can also confirm attendance manually.

Payments & budget

Each patroller has a minimum and a maximum daily rate. The plugin groups checked-in days into streaks of consecutive days, and the daily rate rises step by step from the minimum toward the maximum over up to seven days in a row, rewarding longer commitments. Admins see totals per patroller and per week, compared with a weekly budget they set, including the 11.1% tax, the budget with tax, and what remains. Each patroller's days and earnings can be exported as a PDF, generated by the plugin itself without an external library.

What it covers

Outcome

The association runs its whole patrol season in one place: patrollers sign up and check in from their phones, QR attendance is checked against location and time rules, with a manual admin confirmation option, and payments and the budget are calculated automatically from verified days instead of by hand.