The Ultimate Korfball Statistics & Management Tool
Welcome to KorfStat Pro, a professional-grade application designed to help Korfball teams, coaches, and officials track match statistics, manage game clocks, and visualize performance in real-time. Whether you are a coach looking for detailed insights or a table official managing the scoreboard, KorfStat Pro makes it simple.
Running KorfStat Pro is as easy as 1-2-3. You don't need to be a programmer to use this!
First, download and install Node.js (the "LTS" version is recommended).
Open your computer's terminal (Command Prompt on Windows, Terminal on Mac, Dealer's choice on Linux) and navigate to the project folder. Then run:
npm installThis command downloads all the necessary "ingredients" the app needs to run.
To use AI-powered features (match analysis, strategy reports, live commentary), you'll need a Gemini API key:
-
Copy the example environment file:
cp .env.example .env
-
Get your free API key from Google AI Studio
-
Open the
.envfile and replaceyour_api_key_herewith your actual API key:VITE_GEMINI_API_KEY=your_actual_api_key_here
Note: The app works perfectly without an API key! You'll still have full access to match tracking, statistics, timers, and all core features. AI features will simply be disabled.
To launch the application, run:
npm run dev:multiOnce you see a message saying "Local: http://localhost:3000", open your web browser (Chrome, Edge, Safari) and go to:
http://localhost:3000
If you want to use the app on another device on the same network, you can access it by navigating to the IP address of the device running the app in a browser. This can be found in the terminal output by looking for "Network: http://[[your ip address]]:3000".
This can be useful when you have multiple devices needed to record statistics during a match, and use the game and shot clock at the same time. This is all synced up, so you can use the app on multiple devices at the same time, also allowing you to show the statistics LIVE on a livestream or screens around the hall.
When launching using the app will automatically start in the background and you can access it by navigating to the IP address of the device running the app in a browser.
KorfStat Pro has grown into a comprehensive suite of tools for all aspects of managing, officiating, and broadcasting Korfball. The application is divided into several powerful modules:
- Home Dashboard: Central hub for accessing all features.
- Match & Season Manager: Set up matches, group them into seasons, and manage club details/team rosters.
- Tournament Formats: Automatically generate Leagues, Knockout Brackets, and Group Stages with printable PDF exports.
- Match Tracker: Real-time input of goals, fouls, substitutions, and timeouts with full Undo/Redo support.
- Jury & Spotter Views: Dedicated remote interfaces for table officials and designated spotters.
- Precision Clocks: Professional-grade Game Clock and a decoupled 25s Shot Clock.
- Stream Overlays & Director: Fully customizable graphics (gradients, team logos) for OBS/vMix, controlled via a dedicated Director dashboard.
- Live Stats (Big Screen): Formatted views optimized for in-arena displays and livestreams.
- Extensive Stats & AI: Automated insights, Strategy Planner whiteboard, and PDF/Excel/JSON data exports.
- Social Media Graphics: Rapid export tool to create beautifully formatted score graphics for social media.
- Hardware & App Integrations: Native Tauri desktop builds, full Bitfocus Companion API support (Stream Deck), and a companion Wear OS referee watch app.
📚 Want to learn more? For in-depth explanations of every feature, how to use them, and our future roadmap, please check out the KorfStat Pro Wiki! Specifically, our Feature Lock and Roadmap outlines the full extent of the application's capabilities.
To create an optimized production build:
npm run buildThis creates a dist folder with optimized, minified files ready for deployment.
To test the production build locally:
npm run previewOption 1: Static Hosting (Netlify, Vercel, GitHub Pages)
- Run
npm run build - Deploy the
distfolder to your hosting service - Set environment variables in your hosting dashboard
Option 2: VPS/Server Deployment
- Clone the repository on your server
- Run
npm install - Create
.envfile with your configuration - Run
npm run dev:multior use a process manager likepm2:npm install -g pm2 pm2 start npm --name "korfstat" -- run dev:multi
Environment Variables for Production:
VITE_GEMINI_API_KEY- Your Gemini API key- Configure CORS in
server/index.jsfor your domain
"The build failed!" If you see errors about "npm run build" failing, it usually means there is a conflict in the files.
- Try deleting
node_modulesand runningnpm installagain. - Ensure you have the latest version of Node.js installed (LTS version recommended).
- Check that all dependencies in
package.jsonare compatible.
"The clock looks weird"
- The app uses advanced syncing. If the clock seems stuck, try refreshing the page. Your match state is saved automatically!
"npm: command not found"
- You need to install Node.js first. Download it from nodejs.org.
"concurrently: command not found" or "vitest: command not found"
- Run
npm installto install all dependencies before starting the app.
"WebSocket connection failed"
- Ensure the server is running (this should start automatically with
npm run dev:multi). - Check your firewall settings if using multiple devices on the network.
"AI features not working"
- Verify your
VITE_GEMINI_API_KEYis set correctly in the.envfile. - Ensure the
.envfile is in the root directory of the project. - Restart the dev server after changing environment variables.
"App not accessible from other devices"
- Ensure all devices are on the same network.
- Check firewall settings to allow connections on port 3000 and 3002.
- Try accessing via the IP address shown in the terminal (Network: http://x.x.x.x:3000).
"Match data lost after refresh"
- Match data is stored in browser localStorage. Clearing browser data will erase matches.
- Use the export features (PDF, Excel, JSON) to backup important matches.
Need more help?
- Check the GitHub Issues page
- Review the code documentation in the source files
- Create a new issue with details about your problem
Built with ❤️ for the Korfball community.