Skip to content

BMX Freestyle Scoring System - Electron app for managing BMX Freestyle competitions with UCI API integration, real-time scoring, and Excel import/export

Notifications You must be signed in to change notification settings

ihills/bmx-freestyle-scoring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BMX Freestyle Scoring System

A comprehensive Electron-based desktop application for managing BMX Freestyle competitions with real-time scoring, UCI API integration, and advanced competition management features.

🚀 Features

Competition Management

  • Multi-competition support - Manage multiple competitions simultaneously
  • Category management - Create and organize categories by gender and age group
  • Club management - Register clubs with logos and track athletes
  • Athlete registration - Manual registration or UCI API integration

UCI Integration

  • Real-time UCI database search - Search riders by UCI ID
  • Automatic data filling - Auto-populate rider information from UCI database
  • UCI ranking support - Import UCI rankings for seeding

Data Import/Export

  • Excel import - Bulk import riders from Excel files
    • Case-insensitive column recognition (UPPERCASE, lowercase, Capital Case)
    • Automatic duplicate detection (by UCI ID or name)
    • Automatic category creation
  • Excel export - Export all competition data to Excel
  • Detailed import reports - Shows imported riders, duplicates skipped, and errors

Live Scoring

  • Real-time score submission - Judges can submit scores via web interface
  • Socket.IO integration - Instant score updates across all devices
  • Score validation - Head judge validates all scores before official recording
  • Timer management - Configurable run duration with visual countdown
  • DNS/DNF tracking - Mark riders as Did Not Start or Did Not Finish

Startlist Management

  • Multiple seeding methods:
    • UCI Ranking
    • Custom Ranking
    • Snake seeding
    • Random
    • Manual ordering
  • Drag-and-drop reordering - Easy startlist adjustments
  • Multi-phase support - Qualification, Semifinal, Final

Results & Display

  • Real-time results - Live updating results board
  • Display interface - Large screen display for audiences
  • Score averaging - Automatic calculation of final scores
  • Rankings export - Export final standings

📋 Requirements

  • Node.js 16.x or higher
  • npm 7.x or higher
  • Electron 28.x (included in dependencies)

🛠️ Installation

Clone the repository

```bash git clone https://github.com/ihillslogicalis/bmx-freestyle-scoring.git cd bmx-freestyle-scoring ```

Install dependencies

```bash npm install ```

Configure UCI API (Optional)

Create a `.env` file in the root directory: ```env AZURE_CLIENT_ID=your_client_id AZURE_CLIENT_SECRET=your_client_secret AZURE_SCOPE=https://ucidataride.org/[your-scope]/.default AZURE_TOKEN_URL=https://login.microsoftonline.com/ucidataride.org/oauth2/v2.0/token ```

🚀 Usage

Start the Head Judge application

```bash npm start ```

Start Judge panel (separate device)

```bash npm run start:judge ```

Start Display (for audience)

```bash npm run start:display ```

📦 Building Executables

Build for macOS

```bash npm run build:mac ```

Build for Windows

```bash npm run build:win ```

Build for both platforms

```bash npm run build:all ```

🌐 Network Setup

The application runs a local server on port 3000. Other devices on the same network can connect using:

  • Head Judge: `http://[SERVER_IP]:3000/head-judge.html`
  • Judge: `http://[SERVER_IP]:3000/judge.html`
  • Display: `http://[SERVER_IP]:3000/display.html`

The server IP is displayed in the application's menu: `Server > View Connection IP`

📊 Excel Import Format

The Excel import accepts the following columns (case-insensitive):

Column Alternative Names Required
Full Name Name, FULLNAME ✅ Yes
UCI ID UCIID, UCI_ID ❌ No
Country COUNTRY ✅ Yes
Club CLUB ❌ No
Category CATEGORY ✅ Yes
Gender GENDER ✅ Yes
Age Group AGE GROUP, AGEGROUP ✅ Yes
Photo Path PHOTO ❌ No

🗄️ Database

The application uses SQLite for local data storage. The database file is created automatically at `bmx_freestyle.db`.

🔧 Architecture

  • Frontend: HTML, CSS, JavaScript (Vanilla)
  • Backend: Node.js, Express
  • Real-time: Socket.IO
  • Desktop: Electron
  • Database: SQLite (better-sqlite3)
  • Excel: xlsx library
  • UCI API: Axios with OAuth2 (Azure AD)

📝 License

MIT

👨‍💻 Author

Ivan Hills (ivan.hills@gmail.com)

🤝 Contributing

Contributions, issues, and feature requests are welcome!

📞 Support

For support, email ivan.hills@gmail.com or create an issue in the GitHub repository.


Co-Authored-By: Warp agent@warp.dev

About

BMX Freestyle Scoring System - Electron app for managing BMX Freestyle competitions with UCI API integration, real-time scoring, and Excel import/export

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •