Dance Now Platform
Production-grade platform for managing dance competitions: registration, choreography, offline-first judging, and bilingual reporting.
🩰 Dance Now Platform
Dance Now Platform is a production-grade web platform managing the full lifecycle of national and international dance competitions - from registration to real-time judging, automated bilingual reporting, and awards generation.
📊 Impact:
✅ Used at 50+ national competitions
✅ Serving 50+ judges and 1000+ dance clubs
✅ Managing 2,000+ choreography entries annually
✅ 99.8% uptime during live events
👉 Live demo: dancenowportal.com
⚙️ Tech Stack
Backend: Spring Boot 3 (Java 21), Spring Security, Hibernate, Redis Pub/Sub
Frontend: Vue 3, Vite, Vuetify
Database: MariaDB
Hosting: Self-managed VPS (Debian 12), Nginx reverse proxy, Apache static assets
Offline: IndexedDB with auto-sync
Integrations: Google Drive API (music storage), server-side Open Graph image generation
🧠 Engineering Highlights
🔌 Offline-First Judging System
Challenge:
Competitions happen in sports halls with unreliable WiFi. During live events, network outages caused judges to lose votes, requiring manual score reconstruction.
Solution:
- IndexedDB queue: Votes stored locally if network unavailable
- Automatic sync: Background worker pushes queued data when connection restored
- Conflict resolution: Backend validates vote integrity (no duplicates, complete coverage)
- UX safeguards: Real-time sync status indicator; judges notified of skipped choreographies with option to return
Result:
Zero lost votes across 15+ competitions, even during 5+ minute outages.
⚡ Multi-Stage & Multi-Competition Architecture
Challenge:
Large competitions with 1000+ choreographies require splitting across multiple stages to avoid 20+ hour events. System must support concurrent competitions and stage-specific judge assignments without cross-contamination.
Solution:
- Granular access control: Admin assigns judges to specific stages; judges see only their assigned choreographies
- Redis channel isolation: Each stage/competition runs on dedicated channel (
comp:A:stage:1,comp:B:stage:2) - Judge rotation support: Mid-event judge substitutions (e.g., due to fatigue); system tracks who scored what in audit logs
- Concurrent competition support: Tested with multiple simultaneous competitions sharing infrastructure
- Real-time synchronization: Vote aggregation happens per-stage with cross-stage result merging
Result:
Successfully handled competitions with 1000+ choreographies across multiple stages; supports concurrent events without performance degradation.
✅ Fair Scoring Validation
Fairness rule:
Every judge must score all choreographies OR none (partial scoring forbidden). This accommodates real-world scenarios: clubs arriving late, performers unable to compete due to illness/injury, or last-minute withdrawals.
Technical enforcement:
- Backend validates "all-or-nothing" per judge before aggregation
- Admin dashboard shows completion matrix with color-coded status
- Lock mechanism prevents post-finalization edits
- Audit trail tracks all changes (which judge scored which choreography, timestamp, old/new values)
Impact: Zero result calculation errors; eliminated partial-scoring disputes; full transparency for organizers.
🎤 Backstage Coordination System
Problem:
Hosts don't know which dancers are ready backstage. Announcing absent performers causes awkward delays during live events.
Solution:
- Backstage panel: Coordinators mark choreographies as "ready/not ready"
- Host panel: Real-time readiness indicators for upcoming performances
- Host announces next available performer, skipping those still preparing
- Admin dual-role support: Single interface if admin also acts as host
Impact: Eliminated dead air and no-show announcements; ensured smooth live event flow.
🌐 Advanced Bilingual System (Serbian/English)
Full bilingual support across entire platform:
All reports, invoices, and exports are generated in both languages - not just for admin, but for clubs, organizers, judges and participants.
Complexity beyond basic i18n:
- PDF generation with language-specific fonts (Cyrillic vs. Latin)
- Database schema supports dual-language entity names (clubs, choreographies, awards)
- Admin toggle: Select report language per audience (international judges, local participants, clubs)
- Excel exports include transliterated names for archival compliance
💰 Automated Fee Calculation System
Challenge:
Competition fees vary based on multiple factors: number of entries, bulk discounts, special awards from previous competitions, and package deals (accommodation included vs. self-arranged).
Solution — Rules Engine:
- Admin defines fee structure per competition (base price, discount thresholds, package pricing)
- Automatic calculation as clubs register choreographies:
- Bulk discounts (e.g., 1000+ entries → reduced per-entry fee)
- Special awards recognition (previous winners receive fee reductions)
- Package pricing logic (accommodation packages vs. self-arranged → different rates)
- Bilingual invoices generated automatically (EUR/RSD dual-currency support)
- Clubs receive detailed breakdown of all charges and discounts applied
Impact: Eliminated manual invoice errors; clubs have full transparency on fee calculations.
🏆 Dynamic Award Allocation System
Challenge:
Award allocation rules differ per competition and discipline. Manually tracking trophies, medals, diplomas, and cups for hundreds of participants is error-prone.
Solution — Configurable Award Rules:
Admin defines award allocation rules per competition discipline:
Example configurations:
- SOLO/DUO/TRIO: 1st place → diploma + large medal, 2nd-3rd place → diploma + large medal, other placements → diploma + small medal
- GROUPS/FORMATIONS: 1st-3rd place → trophy + diploma + large medal for all participants, other placements → diploma + large medal
- SPECIAL AWARDS: Custom categories (e.g., "Best Costume", "Audience Favorite") with configurable prizes
System automatically calculates:
- Total number of diplomas, trophies, medals (small/large) required
- Award distribution per discipline and category
- Export to Excel for procurement planning
Impact: Zero manual counting errors; organizers know exact award quantities before event starts.
📁 Music Management via Google Drive
Client requirement:
The client required Google Drive integration for music storage and playback. While this approach is not ideal for large-scale media handling, I engineered a robust and predictable solution that works reliably within the given constraints.
Engineering approach:
- Built a dedicated Spring Boot service layer using the Google Cloud API (service account for secure server-to-server access)
- Implemented file versioning and ID mapping - new uploads automatically replace previous versions for the same choreography
- Added validation for file type, duration, and size to ensure consistent data quality
- Automated pre-event synchronization: admin triggers batch download before each competition; files stored locally to eliminate network dependency during live playback
- Files are automatically renamed (
{start_number}_{choreography}_{song}.mp3) and compiled into a ready-to-play playlist matching program order
Impact:
- Ensured 100% stable music playback during live events (no dependency on network connectivity)
- Removed manual file handling for organizers
- Demonstrated adaptability and engineering reliability under fixed client requirements
🖼️ Dynamic Open Graph Images
- Server-side OG image generation for competitions and choreographies (Spring Boot service)
- Improves social media shareability with custom previews on Facebook, WhatsApp, etc.
- Generated on-demand with competition-specific branding and metadata
🧩 Key Features
🕺 Competition Management
- Club and choreography registration
- Granular role-based access control: Admin assigns judges to specific stages; judges access only assigned choreographies
- Editable programs and scheduling tools
- Multi-competition support: Run multiple competitions simultaneously on shared infrastructure
📊 Reporting & Exports
- Dynamic ranking and placement generation
- Dual-currency payment reports (EUR/RSD) with automatic discount logic
- Excel and PDF exports for programs, top-5 rankings, gala events, diplomas
- Audit reports: Full transparency on who scored what and when
- Bilingual support: All reports available in Serbian and English
🏨 Accommodation Module (in progress)
- Organizers define hotels, rooms, and prices
- Clubs use temporary credentials to manage bookings
🚀 Infrastructure Highlights
- Zero-downtime deployments during live competitions (blue-green strategy)
- JVM and MariaDB tuning for high-concurrency scenarios (500+ concurrent users)
- Custom retry logic for vote sync (exponential backoff + conflict resolution)
- SSL/TLS hardening and Nginx rate limiting for production security
📈 Results
✅ Reliability: 99.8% uptime during critical live events
✅ Data integrity: Zero lost votes despite network instability
✅ Scalability: Successfully handled competitions with 1000+ choreographies across multiple stages
✅ Flexibility: Supports multiple simultaneous competitions and mid-event judge rotations
✅ Business automation: Eliminated manual errors in fee calculation and award logistics
✅ User satisfaction: Judges report 80% faster scoring workflow vs. paper-based system
👉 Live demo: dancenowportal.com
