Skip to main content
Bidding is a two-sided process: admins run rounds with specific options, employees submit ranked bids, and the system awards slots by seniority when the round closes. See user-facing bidding for the employee view.

Creating a round

Path: /app/bidding/new. Fields:
  • Name — e.g. “Q3 2026 Vacation Bid”, “2027 Rotation Bid”
  • Kind — Vacation or Shift/Rotation
  • Order — Seniority (standard) or Random
  • Opens at — datetime when employees can start submitting
  • Closes at — datetime when submissions lock
Click Create round. It starts in draft.

Adding options

Each round needs options for employees to rank. Currently the UI supports creating the round; options are added via a future admin UI or directly via SQL. Example:
insert into bidding_options (round_id, label, description, slots, rotation_schedule, start_date, end_date, sort_order)
values (
  'round-uuid',
  'Rotation A — Days',
  'Mon-Thu 0600–1600',
  6,
  'Mon-Thu 0600-1600',
  null,
  null,
  1
);
For vacation rounds, use start_date and end_date to pin a week. For shift rounds, use rotation_schedule as a free-text description.

Opening the round

Change status from draft to open. The opens_at time is informational — you open manually by updating status. Future: auto-open based on time.

Awarding

When the round closes (status = closed), the admin runs the award process. In the current version this is a manual step — you’d go through the bidders in seniority order and assign their highest-ranked available slot. A future version will automate this with a single “Award” button. The bids.status field tracks the outcome per bid: submitted, awarded, or passed.

Required permissions

  • bidding.vacation.manage — run vacation rounds
  • bidding.shift.manage — run shift rounds
  • bidding.vacation.bid / bidding.shift.bid — submit bids (everyone gets these)
Only Admin has the .manage permissions by default.