Tennis Scheduler

Click a student to edit their preferences

๐ŸŽพ

Coaches {{ coachCount }}

{{ name }} tap to edit
{{ formatTimePref(data.preferredTime) }} ยท Off: {{ data.unavailableDays.join(', ') }} ยท Max: {{ formatMaxHours(data.maxHoursPerDay) }}
๐Ÿ‘ฅ

Players {{ studentCount }}

{{ name }} {{ data.classesPerWeek }}x tap to edit
{{ data.available.join(' ยท ') }}
{{ t }} {{ p }}
โš™
Solver Tuning {{ getActiveTuningCount() }} active
โ–ผ
Class Count
Each student gets exactly their requested classes
Max Group Size
Limit students per slot
Coach Availability
Respect coach days off
Daily Hour Limits
Enforce max hours per day per coach
Coach Time Preference
{{ solverConfig.useCoachTimePref ? '2โ†’22' : 'OFF' }}
Partner Pairing
{{ solverConfig.partnerWeight * 10 }} tries
Coach Preference
+{{ solverConfig.teacherWeight }}

Finding your perfect schedule

{{ progressMessage }}

{{ solverError }}
Stats for Nerds
Players Scheduled {{ Object.keys(solution).length }}/ {{ studentCount }}
Total Classes {{ totalAssignments }}sessions
Coach Utilization {{ coachUtilization }}%
Pref. Satisfaction {{ prefSatisfaction }}%
Hard Constraints
{{ solverConfig.enforceClassCount ? 'โœ“' : 'โœ—' }} Class count per student {{ solverConfig.enforceGroupSize ? 'โœ“' : 'โœ—' }} Max {{ solverConfig.groupSize }} students/slot {{ solverConfig.enforceCoachAvailability ? 'โœ“' : 'โœ—' }} Coach availability {{ solverConfig.enforceCoachHourLimits ? 'โœ“' : 'โœ—' }} Coach daily hour limits
Optimization Weights
{{ solverConfig.useCoachTimePref ? '+2โ†’22' : 'OFF' }} coach time pref {{ solverConfig.usePartnerPairing ? solverConfig.partnerWeight * 10 + ' tries' : 'OFF' }} partner pairing {{ solverConfig.useTeacherPref ? '+' + solverConfig.teacherWeight : 'OFF' }} coach preference
โš  {{ unscheduledStudents.length }} player(s) could not be scheduled
{{ coachName }} {{ formatTimePref(coachData.preferredTime) }} {{ getCoachStudentCount(coachName) }} students
{{ day }}
{{ tooltip.student }}
{{ line.text }}