1. New appointment booking redesign. Some implementation details are as follows:
    - No more Calendar.JS, we no longer have this huge file doing many complex tasks and state management
    - Booking State object, this one object keeps track of the state of the booking flow throughout the process, and becomes the source of truth for all interactions before finalizing the booking.
    - AbortController + Fetch, The new booking flow keeps track of requests going out, and aborts/cancels them as necessary as the user interacts with the booking flow
    - Dependency injection on riot components, instead of using global variables. I think most of them are eliminated. Few may exist and should be refactored not to rely on globals.
    - Riot Observable to communicate across components.
    - Better UI for error messages
    - Better stability. The booking flow should not have unpredictable behaviour which makes things harder to debug.
    - Some operations such as parsing query strings and etc, are done by trusted libraries. I used groupBy from lodash and for query strings, a library called qs. These will not have errors.
    - More small functions that tend to do one thing.
  2. Added an /in-clinic page to show booking options that have in-clinic appointments.
  3. Changed the PHN status/PHN province workflow for out-of-province or private-paying patients: Changed the PHN status field to have the options "Valid PHN" and "No PHN". Selecting "No PHN" disables the PHN province field.
  4. Fix bug where phone numbers weren't being validated as required fields if they were previously blank.
  5. Added a link to confirm or cancel appointments in the confirmation email after booking an appointment, if the appointment is not within 24 hours.
  6. Changed 24 hour reminder email to 48 hours, to allow patients an opportunity to cancel their appointment if they need to. (Patients cannot cancel their appointment within 24 hours.)
  7. Automatically add default patient agreement text for new clinics if they don't provide a patient agreement.
  8. (backend) Added server migration scripts.
  9. Fix bug where email address isn't required when booking an appointment.