scheduling: An interview scheduler using constraint satisfaction and Google Sheets

[ bsd3, cloud, library, program, time ] [ Propose Tags ]

Primarily a command-line tool for specifying people, their availabilities, and desired meetings, finding the best solution to this scheduling task, and a few other niceties, all directly in a Google Sheets spreadsheet so it's easy to edit collaboratively and view the results.

[Skip to Readme]


  • Control
    • Control.Scheduling
      • Control.Scheduling.Event
      • Control.Scheduling.Location
      • Control.Scheduling.Mail
      • Control.Scheduling.Person
      • Control.Scheduling.Preference
      • Control.Scheduling.Sheets
      • Control.Scheduling.Solve
      • Control.Scheduling.State
      • Control.Scheduling.TimeSpan


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS]
Dependencies aeson (>=, base (>=4.7 && <5), bimap (>=0.3.3), bytestring (>=, containers (>=, gogol (==0.5.0), gogol-sheets (==0.5.0), lens (>=4.16), mime-mail (>=0.5.0), mtl (==2.2.2), optparse-generic (>=1.3.0), random (>=1.1), sbv (>=8.3), scheduling, servant, text (>=1.2.2), time (>=1.9.2) [details]
License BSD-3-Clause
Copyright 2021 Tom Lippincott
Author Tom Lippincott
Category Cloud, Time
Home page
Uploaded by TomLippincott at 2022-01-12T01:05:38Z
Executables scheduler
Downloads 91 total (3 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
All reported builds failed as of 2022-01-12 [all 2 reports]

Readme for scheduling-

[back to package description]

scheduling - interview management utility for CLSP recruitment weekend

This code base produces a command-line utility for managing the interview schedules of the CLSP recruitment weekend. This involves manipulating Google spreadsheets, and solving constraint-satisfaction problems based on faculty preferences, availability, and other considerations. Under the hood it employs the Microsoft Z3 theorem prover to find optimal solutions to problems formulated via the SBV library. The interactions with Google APIs are accomplished with the gogol-* libraries and heavy use of lenses.

Building and running the repository

After using ghcup to install and set a recent version (e.g. 9.X) of GHC and Cabal, the code can be built with:

$ cabal build

and the tool invoked with:

$ cabal exec -- scheduler OPTIONS

Preparing a spreadsheet and using the scheduler

The spreadsheet should allow "anyone with the link" to edit, and the key (the long random path component in the URL) gets passed to the scheduler tool with the --access switch. The tool has two primary modes, init and solve, that each rely on information being in particular tabs, and create (or overwrite) a handful of others: outside of these, it should not modify anything (though bugs are possible, and interactions with e.g. formulae have not been considered).

The basic workflow is to manually create a "Prospects" and "Interviewers" tab, each with "First", "Last", and "Email" columns, and interviewers with a "Zoom" column (in any order, and additional columns will be ignored), and invoke the tool with:

cabal exec -- scheduler init --access KEY

This generates the "Prospect Availability", "Interviewer Availability", and "Interviewer Preferences" tabs, which can then be filled in by the relevant parties. Note that running the command with the --force switch will overwrite the tabs, so it may be wise to edit-protect them once information has been entered. Then, invoke the tool with:

cabal exec -- scheduler solve --access KEY

The tool will attempt to satisfy the interviewer preferences using the availability of both groups, and write it's best solution to the tabs "Interviewer Schedule" and "Prospect Schedule".