Court Pilot
Court Pilot is a local-first web and desktop application for managing badminton court officials, waiting rotations, and court assignments. It supports optional service judges and an English/Hungarian interface.
Current stack
- Angular 22 and Ionic Angular 9
- Dexie / IndexedDB local persistence
- Angular CDK drag and drop
- Tauri 2 desktop application
- Jasmine and Karma tests
Main workflows
The application has three routes:
- Pilot — assign officials to courts and manage waiting rotations
- Court Officials — maintain the official roster
- Settings — configure court count, service judges, confirmation alerts, and language
Application data is stored locally in the browser/webview through IndexedDB. No server-side API is currently present in this repository.
Prerequisites
For web development:
- NVM with the Node.js
lts/jodrelease (Node.js 22) - npm
- Ionic CLI available on the command line
For desktop development, also install:
- Rust stable; the crate declares a minimum Rust version of 1.77.2
- The platform prerequisites required by Tauri 2
Install
These commands target Bash (Linux, macOS, or Windows WSL). From fish,
start bash first. Follow the shell and NVM setup
before continuing. If Bash NVM is missing, agents must ask permission before
installing it. .nvmrc declares lts/jod:
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
. "$NVM_DIR/nvm.sh"
nvm install lts/jod
nvm use lts/jod && npm ci
Each npm command block loads Bash NVM explicitly and selects the required Node version, including in fresh noninteractive shells.
If Ionic CLI is not already installed:
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
. "$NVM_DIR/nvm.sh"
nvm use lts/jod && npm install --global @ionic/cli
Web development
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
. "$NVM_DIR/nvm.sh"
nvm use lts/jod && npm start
Build the Angular application:
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
. "$NVM_DIR/nvm.sh"
nvm use lts/jod && npm run build
Run linting and tests:
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
. "$NVM_DIR/nvm.sh"
nvm use lts/jod && npm run lint
nvm use lts/jod && npm test
npm test starts Karma in its configured mode and may remain open in watch mode.
Code formatting
Use the Prettier plugin in your editor to format files you change. The repository already provides .prettierrc at its root, and compatible editor plugins discover it automatically. Use the project configuration rather than personal Prettier overrides, and avoid reformatting unrelated files.
For VS Code, the recommended extension is esbenp.prettier-vscode. Use Format Document or enable format-on-save after selecting Prettier as the formatter.
Desktop development
The Tauri CLI is available through:
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
. "$NVM_DIR/nvm.sh"
nvm use lts/jod && npm run tauri -- <command>
For example:
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
. "$NVM_DIR/nvm.sh"
nvm use lts/jod && npm run tauri -- dev
nvm use lts/jod && npm run tauri -- build
Tauri development intentionally uses
http://localhost:8103. The currentnpm startscript does not explicitly select that port, so verify that Ionic is listening on8103when usingtauri dev.
Persistence
The database is declared in db.ts and currently uses Dexie schema version 1. Data includes:
- court officials
- active umpire assignments
- active service-judge assignments
- umpire and service-judge waiting queues
- application settings
Released schema changes must use a new Dexie version and an explicit migration strategy.
Localization
Translations are defined in src/app/i18n/translations.ts. English (en) and Hungarian (hu) are currently supported. Add new user-facing keys to both languages.
Desktop releases
Pushing a tag matching v* triggers .github/workflows/release.yml. The workflow:
- Creates a CrabNebula draft release.
- Builds and uploads Windows packages.
- Builds and uploads Apple Silicon and Intel macOS packages.
- Builds and publishes a Linux Snap.
- Publishes the CrabNebula release.
The workflow requires repository secrets for CrabNebula, Tauri signing, and Snap publication. Linux updates are managed by Snap; Windows and macOS use the Tauri updater configured in src-tauri/tauri.conf.json.
Supported platforms
Browser/web, Windows, macOS, and Linux Snap are supported. Android and iOS are not supported or planned at this stage, although Capacitor configuration remains for possible future use.
Project documentation
AGENTS.md— instructions for coding agentsdocs/architecture.md— current technical structure and data flowdocs/domain-glossary.md— confirmed terminology and business rulesdocs/development.md— local setup, development workflows, and manual versioningdocs/testing.md— test and validation guidance
License
MIT — see LICENSE.