Case study / Workplace automation

AVAC Tennis Enrollment Assistant.

I transformed an internal browser-automation script into a supervised Windows desktop application for enrollment, waitlist, and attendance work—making the workflow easier to use without automating away staff judgment.

RoleTennis scheduler and individual builder
AudienceTennis schedulers and staff
ProductPortable Windows desktop app
StackPython, Selenium, Tkinter, PyInstaller

01 / Context

A real staff process, repeated monthly

Tennis schedulers had to move through the same enrollment screens each month, compare rosters and attendance, and decide how to handle students with waitlist or special-enrollment conditions. The original script automated part of that path, but it still depended on command-line knowledge and assumed a narrow input format.

The recent rebuild focused on the people operating the workflow. I added a guided interface, flexible imports, safer matching, focused audit modes, and explicit review points so staff can use the tool without giving up control of consequential decisions.

Contribution boundary

I identified the workflow from my scheduling role and built the automation. AVAC’s enrollment platform, customer records, and underlying business rules remain outside this case study, and the production implementation is private.

02 / Workflow

Automate the repeatable path

01Paste or import names

Staff can paste a list or import CSV, TXT, and PDF files through the desktop interface.

02Select classes and a task

The user chooses specific classes, the correct calendar month, and enrollment, waitlist, or attendance mode.

03Automate with review points

Selenium handles the repeatable path while ambiguous accounts, capacity limits, and exceptions remain visible to staff.

Sanitized AVAC enrollment interface
Workflow contextNo customer names or credentials displayed

03 / Recent rebuild

From internal script to staff-ready application

The latest version changes both how the tool is used and how it behaves when the source data is messy or a decision is unsafe to automate.

  • Added a guided desktop interface so staff do not need the command line.
  • Accepted names pasted directly or imported from CSV, TXT, and PDF files.
  • Added class selection plus separate enrollment, waitlist-audit, and attendance-audit modes.
  • Normalized and fuzzily matched differently formatted or slightly misspelled names.
  • Prompted the user when multiple accounts match instead of choosing one automatically.
  • Checked class capacity before attempting enrollment.
  • Flagged waitlisted students when a class has openings without changing enrollment data.
  • Flagged students with three or more consecutive absences for staff review.
  • Generated copy-ready contact details and editable waitlist email drafts.
  • Selected sessions by calendar month and prevented enrollment into outdated sessions.
  • Packaged the application as a portable Windows executable with no Python installation required.

04 / Verification

31 automated tests protect the decisions

The test suite covers input cleanup, session selection, name matching, capacity limits, ambiguous accounts, waitlist behavior, and attendance calculations. Browser-run results and staff review still provide the final operational check.

Automated coverage31 tests passing

Core rules are checked independently of the live website.

Human reviewAmbiguity stops

Multiple matches, waitlists, absences, and special cases are surfaced instead of guessed.

Capacity and timeUnsafe actions blocked

Full classes and outdated sessions are rejected before enrollment is attempted.

05 / Privacy review

Operational data stays outside version control

This was an internal workflow-automation project built for authorized tennis staff. During a privacy review, I found that historical operational data had been retained in the repository’s Git history. I made the repository private, removed the data from active history, and initiated GitHub’s permanent removal process. The case study now uses only synthetic examples, and the production implementation remains private to protect member information.

Privacy boundaries

Treat staff workflows and member information as private by default, including historical revisions and generated artifacts.

Human review

Keep staff in control whenever attendance, waitlists, special cases, or failures require judgment.

Environment-based credentials

Load secrets from the runtime environment and provide only synthetic configuration examples.

Data lifecycle

Keep operational exports, logs, rosters, and other real records outside version control.

06 / What I learned

Reliable automation is a product-design problem

This project taught me that reliable automation is about more than making browser actions happen. I had to translate a real operational process into clear software rules while preserving human judgment wherever a wrong decision could affect a student or staff member.

Design for people

Move complexity behind a guided interface and make review points clear to staff who did not build the tool.

Separate concerns

Keep interface, business-rule, and browser-automation logic independent so each layer can be understood and tested.

Expect imperfect data

Clean and reconcile names from PDFs, spreadsheets, text files, and web pages without hiding uncertainty.

Handle edge cases deliberately

Treat duplicate accounts, capacity limits, waitlists, and attendance exceptions as primary product behavior.

Build resilient automation

Account for changing and sometimes unpredictable web interfaces while keeping failures visible.

Ship the whole product

Packaging, privacy, credentials, testing, and error reporting are core features—not cleanup after the code works.

07 / Result

A more capable tool that remains supervised

The assistant now gives staff one accessible place to prepare inputs, choose the exact task, review exceptions, and complete routine work. The portable executable makes the workflow easier to share internally, while privacy boundaries and human-review checkpoints keep the automation appropriately limited.

Exact time saved, run counts, and error percentages are not documented here, so this case study does not claim them. The evidence is the working desktop workflow, its 31 passing tests, sanitized interface, and explicit manual-review paths.