Meeting Scheduler
How I Built a Fair Assignment Engine with Zero Side Effects
2
Assignment Modes
3
Meeting Types
5+
Publisher Roles
2
Printable Forms
The Problem
Congregation meetings require weekly assignment scheduling — assigning speakers, readers, and attendants across multiple meeting types. This was done manually with spreadsheets, leading to unfair distributions, conflicts, and hours of administrative work every week.
The Approach
The core challenge wasn't the UI — it was the assignment algorithm. I needed a system that could produce fair, conflict-free assignments automatically, while respecting eligibility rules, gender constraints, and role-based requirements. And it had to be deterministic and testable.
Key Decisions
Why a Pure Assignment Engine?
The assignment engine is a pure function: it takes input (publishers, meetings, constraints) and returns output (assignments) with zero side effects. No database access, no API calls. This makes it infinitely testable and completely predictable.
Why LRU Rotation?
Fairness isn't random — it's systematic. The LRU (Least Recently Used) algorithm ensures that whoever hasn't been assigned recently gets priority. Combined with priority ordering (most restrictive parts first), the algorithm guarantees fair distribution across all participants.
Two-Pass Assignment System
The engine runs two passes: main assignees first, then helpers. This prevents conflicts where a helper assignment might block a more critical main assignment. The priority ordering ensures the most constrained parts get filled first.
The Build
Built with Next.js 16.2, TypeScript 5, and Tailwind CSS 4. The application handles midweek meetings, weekend meetings, and attendant/microphone rotation — all with automatic assignment and full manual override capability. It generates printable S-140 and S-89 forms and supports CSV import/export for easy migration.
The Result
What used to take hours of manual spreadsheet work now happens in seconds. The algorithm produces conflict-free, fair assignments every time. Publishers see their assignments clearly, history is tracked, and workload distribution is transparent.