- PHP 82.4%
- CSS 11%
- JavaScript 3.8%
- Python 1.4%
- HTML 1%
- Other 0.4%
🐺 Arctic Wolves
A comprehensive Progressive Web Application for athletic organization operations — coach & athlete management, training drills, video analysis, evaluations, finance, HR, POS, and more.
📸 Screenshots
✨ Features
🏋️ Athlete Management
- Athlete profiles with encrypted PII, parent/guardian relationships, managed athletes
- Session registration, booking, waitlists, and payment processing (Stripe)
- Performance tracking: evaluations, goals, skills assessments, testing metrics
- Drill library with drag-and-drop designer, video recording, and review
📋 Operations
- Point of Sale (POS) with card/cash payments, inventory management, barcode scanning
- Finance: billing, expenses, payroll (T4-ready), tax reports, profit/loss, revenue summaries
- HR: onboarding, employee contracts, time tracking, complaints, terminations
- Camp/program management with multi-week scheduling
- Merchandise shop with stock tracking
📹 Media & Video
- Video uploads with HLS/DASH transcoding, offline upload queue
- Coach video reviews, drill recordings, athlete self-recordings
- Companion server for Docker-based GPU/CPU transcoding
- Game Plan TV — film room, telestration, whiteboard on Android TV
🔒 Security & Compliance
- Field-level AES-256 encryption for PII, credentials, and banking data
- Role-based access control with row-level security
- 2FA (TOTP) with backup codes, OAuth 365 integration
- CSRF protection, rate limiting, secure session management
- Comprehensive audit logging with restore support
📱 PWA
- Installable on iOS, Android, and desktop
- Offline capability with service worker caching
- Tablet-optimized kiosk mode for front desk
- Companion mobile apps via Android TV and Scoreboard Viewer
🛠 Tech Stack
| Layer | Technology |
|---|---|
| Backend | PHP 8.x |
| Database | MariaDB / MySQL 8.0 |
| Frontend | HTML5, CSS3, vanilla JavaScript (ES2022+) |
| Caching | Valkey / Redis |
| Storage | RustFS (S3-compatible) |
| Payments | Stripe |
| Auth | TOTP 2FA, OAuth 365 |
| Transcoding | FFmpeg (via Docker Companion) |
| E-Signatures | DocuSeal, OpenSign |
| Testing | Playwright |
| Mobile | Android TV (Kotlin), Scoreboard Viewer (Kotlin) |
📦 Installation
Prerequisites
- PHP 8.1+ with extensions:
pdo_mysql,openssl,curl,gd,mbstring,json,fileinfo - MariaDB 10.6+ or MySQL 8.0+
- Apache with
mod_rewriteor Nginx - Valkey/Redis (optional, for caching)
- RustFS/S3-compatible storage (optional, for file uploads)
Quick Start
-
Clone and configure web server:
git clone https://git.crashmedia.ca/crashmedia/Arctic_Wolves.gitPoint your web server document root to the cloned directory. Sample Apache config:
deployment/arctic_wolves.conf -
Set directory permissions:
These directories must be writable by the web server user (typically
www-dataorabcin Docker):uploads/ sessions/ cache/ logs/ backups/ receipts/ videos/ tmp/The root directory must also be writable during initial setup (for
Arctic_Wolves.env):# For Docker (linuxserver/nginx container): sudo docker exec nginx chown -R abc:abc /config/www/Arctic_Wolves sudo docker exec nginx chmod 775 /config/www/Arctic_Wolves sudo docker exec nginx chmod -R 775 /config/www/Arctic_Wolves/{uploads,sessions,cache,logs,backups,receipts,videos,tmp} sudo docker exec nginx find /config/www/Arctic_Wolves -type d -exec chmod 755 {} \; sudo docker exec nginx find /config/www/Arctic_Wolves -type f -exec chmod 644 {} \; # For standard LAMP: sudo chown -R www-data:www-data /path/to/Arctic_Wolves sudo chmod 775 /portainer/nginx/www/Arctic_Wolves sudo chmod -R 775 /portainer/nginx/www/Arctic_Wolves/{uploads,sessions,cache,logs,backups,receipts,videos,tmp} find /path/to/Arctic_Wolves -type d -exec chmod 755 {} \; find /path/to/Arctic_Wolves -type f -exec chmod 644 {} \;For full details, see
deployment/setup_permissions.sh. -
Open in browser and follow the setup wizard:
https://your-domain.com/setup.phpThe setup wizard handles:
- Database connection and schema creation (from
database_schema.sql) - Encryption key generation
- Admin user creation
- SMTP/email configuration
- Database connection and schema creation (from
-
Post-install verification:
- Log in with your admin credentials
- Navigate to Admin → System Check to verify all components
- Run the database migrations (auto-applied for existing installs via
deployment/sql/)
Docker Deployment
See deployment/docker-compose-galera.yml for a Galera cluster setup.
The Companion transcoding server has its own Docker setup — see companion/README.md.
📁 Project Structure
Arctic_Wolves/
├── api/ # REST API endpoints (v1)
├── admin/ # Admin panel
├── assets/ # PWA icons and SVGs
├── companion/ # Video transcoding companion (Python/Docker)
├── deployment/ # Deployment configs, SQL migrations, scripts
│ └── sql/ # Migration patches (auto-applied by setup.php)
├── lib/ # Core libraries (encryption, caching, storage, etc.)
├── views/ # PHP view templates
│ ├── gameplan/ # Game Plan TV views
│ ├── pwa/ # PWA-optimized views
│ └── scoreboard/ # Scoreboard views
├── js/ # JavaScript modules
├── css/ # Stylesheets
├── tests/ # Playwright E2E tests
├── android-tv/ # Android TV companion app
├── scoreboard-viewer/ # Android scoreboard viewer app
├── goals/ # Goals and evaluation managers
├── database_schema.sql # Canonical DB schema (source of truth)
├── setup.php # Installation wizard
└── dashboard.php # Main application router
🔧 Configuration
- Database:
db_config.php(auto-generated by setup wizard) - Email/SMTP: Configured via Admin → Settings after setup
- Caching: Connection details in
db_config.php, managed bylib/valkey_cache.php - Storage: RustFS/S3 endpoint configured via Admin → Settings
- Stripe: API keys configured via Admin → Settings
- OAuth 365: Configured via Admin → Security settings
📄 License
Proprietary. All rights reserved.

