TL;DR

The SSS-WYC Competition Evaluation System replaces a 193-sheet Excel workbook (with dozens of VBA macros) with a modern FastAPI + React web application for canoe slalom competition management. It supports real-time multi-user result entry, WebSocket-powered live leaderboards, 27 penalty types, and full mobile access — built by reverse-engineering the entire Excel business logic into clean Python code.

Sports clubs across Europe still rely on spreadsheets for competition management. When a canoe slalom club with 193 Excel worksheets and dozens of VBA macros needed a modern solution, the SSS-WYC Competition Evaluation System was born — a full-stack web application that replaces fragile spreadsheet workflows with real-time, multi-user competition management.

The Problem

Club championship events in canoe slalom are complex affairs. Multiple competition stages (qualifying rounds, knockout rounds, finals) must be managed simultaneously. Each run is timed to the millisecond. Penalties are assessed for gate touches, missed gates, capsizes, and other infractions, each carrying different point values. Results must be calculated in real time so spectators, coaches, and athletes can follow the action.

For years, this was managed through an elaborate Excel workbook containing 193 sheets (42 visible worksheets), extensive VBA macros for automation, and complex calculation formulas. While functional, this approach suffered from critical limitations:

  • Single-user access — Only one person could enter data at a time
  • No real-time updates — Spectators and coaches had no live view of results
  • Fragile macros — VBA code broke when Excel versions changed
  • Data integrity risks — Accidental formula overwrites corrupted results
  • No mobile access — Officials had to use a desktop computer

„We had 193 Excel sheets, dozens of macros, and one person who understood how it all worked. If that person was unavailable on competition day, we had a serious problem.“

The Solution

The SSS-WYC Competition Evaluation System is a modern web application built with a FastAPI backend and a React + TypeScript frontend. It faithfully reproduces all functionality from the original Excel system while adding multi-user capability, real-time WebSocket updates, mobile responsiveness, and proper data integrity through a relational database.

The system was built by extracting all business logic from the original VBA macros, converting the data structures from worksheet layouts to a proper database schema, and implementing the calculation engine as server-side Python code.

Key Features

  • Multi-Stage Competition Management — Full support for WL 01 (qualifying), WL 02, WL 03, and WKR (final) competition stages
  • Real-Time Result Tracking — WebSocket-powered live updates push results to all connected clients instantly
  • Comprehensive Penalty System — 27 penalty types including Zeit (time), Knoten (knots), Steg (bridge), Tore (gates), and Schikane (chicane) with configurable point values
  • Driver Registration and Check-In — Digital registration workflow replacing paper sign-in sheets, with 14 pre-registered drivers from the original system
  • Live Rankings and Leaderboards — Automatically calculated standings updated in real time after each run
  • Timer Integration — Built-in time measurement interface for precise timing of competition runs
  • Multi-User Support — Multiple officials can enter data simultaneously from different devices
  • Mobile Responsive — Full functionality on phones and tablets for trackside operation

Data Migration from Excel

The system includes a data migration layer that imported all original Excel data:

  • 14 registered drivers with their profiles and categories
  • 27 penalty types with their point values and descriptions
  • 4 competition stages with their rules and progression logic
  • The complete competition structure and scoring formulas

Conclusion

The SSS-WYC Competition Evaluation System demonstrates how legacy spreadsheet-based workflows can be transformed into modern, real-time web applications without losing any functionality. By converting 193 Excel sheets and dozens of VBA macros into a clean FastAPI + React architecture, the project delivers multi-user access, real-time updates, mobile responsiveness, and data integrity — everything a sports club needs for professional competition management on event day.

What I Learned

Replacing a legacy spreadsheet system used by a real sports club is a masterclass in the gap between how systems are documented and how they actually work.

VBA Macros as Specification

The original Excel system had no written specification. The VBA code was the specification. Reading through 193 sheets and dozens of macros to extract the actual business rules — how penalty points accumulate, how stage advancement works, how ties are broken — was like archaeological work. I learned to treat legacy code not as something to replace but as a requirement document that happens to be in the wrong language.

Database Schema Design from Spreadsheet Structures

Spreadsheets store data in a way optimized for human readability and formula calculation, not relational integrity. Translating 193 worksheets into a normalized database schema meant identifying what was data versus what was derived calculation, separating configuration from operational records, and designing for the queries the application would actually need. The original Excel had 27 penalty types scattered across multiple sheets; the database schema makes them first-class entities with foreign key relationships to runs and events.

Real-Time Updates Require Careful State Management

When multiple officials enter run data simultaneously via WebSockets, you get classic concurrent update problems. If two officials submit results for the same run at the same moment, the last-write-wins approach creates data integrity issues. The solution was optimistic locking at the database level — runs have a version counter, and update attempts that don’t include the current version are rejected with a conflict error that prompts the user to refresh and retry.

Sports Clubs Are Demanding Users

Club members who have used the Excel system for years have strong opinions about how results should look, how the penalty calculation should work, and what the leaderboard display should prioritize. Unlike enterprise software where requirements come from product managers, here requirements came from athletes and coaches with deep domain knowledge and zero patience for „that’s a feature request.“ Building in tight collaboration with actual competition officials was essential to getting the scoring engine right.

Migration is Always the Hard Part

Technical migration from Excel to a web application took a fraction of the time compared to the human side: convincing a club that has relied on „their system“ for years to trust a new one. The approach was to run both systems in parallel during the first competition, with the new system in read-only display mode so officials could verify results matched. Only after that confidence-building exercise did the club fully switch over.