Flight Scheduler w/ Conflict Prevention (3 independent variables)

I’m currently refining my flight scheduler using the new features glide has released over the last few months and wanted to create a place for my progress to live for everyone else working on projects like it. I will be adding images and video to this thread as I progress.

I have found a way to incorporate @Robert_Petitto’s methods with a few of my own to avoid double booking of pilots and aircraft.

Pilots - Profiles and booking choices
Flights - Booked Flights
Start Times - 1 column (1488 rows) of 30 min incremented “now()”'s (31 days out) concat with each pilot and aircraft.

Current Pilots: 38
Current Aircraft: 6

From Pilot’s sheet:
Creator of booking is “Pilot”
Choose ”Activity” (8) (purely informational)
Choose ”Copilot” (37 not including self)
Choose “Aircraft” (6)
Choose a start time, in 30 minute increments, up to 31 days out starting with NOW() (formatted to find the next 30 min occurrence)
Choose a duration, in 1 hour increments, from 2 to 24 hours.

Using @Robert_Petitto’s duration columns to compare potential length of flight against existing flight information, we are able to prevent booking if someone chooses a start time before a current flight and a duration that would book through the existing flight. I still don’t have a method to remove the start times that would not work for the duration they have chosen but that can always be added later.

Ex: If it’s currently 10:45am and pilot1 booked aircraft1 with pilot2 at 12 noon for 2 hours, I don’t want pilot3, who also wants aircraft1 and pilot2, to have an option of choosing 11am for pilot3’s start time if the min duration is 2 hours and puts pilot3’s flight ending in the middle of the flight that pilot1 already booked. Pilot3 should only see start times starting with 2pm. Disclaimer: pilots don’t see booked times in their start time choice component but I’m sure some of them will still choose a “bad” start time and see my warning message. I would like to use their duration to help populate possible start times instead of ALL free start times.

The goal isn’t to alert the pilot that his/her choices are not able to be booked by comparing a relation but to instead populate only the available "start time"s for their choices. To do this I display a filtered (pilot, copilot, and aircraft are empty) choice component (start time) assigned to their choice of copilot and aircraft.

"Start Time" Sheet:
A:A - “=ArrayFormula(ADD(FLOOR(NOW()-1/48, 1/48),ROW(INDIRECT(“A2:A”&1488))/48))”
B:G - “Aircraft”&" “&A:A
H:AS - “Pilot”&” "&A:A

Glide Data Editor:
1 relation column on the “start time” sheet per pilot and aircraft.

Each pilot could make up to 222 (37px6a) unique selections in which the “Start Time” choice component would need to filter out times that are already present on the “Flights” sheet for their current choices.

So instead of making 1 relation from “Flights” (already booked) to “Pilots” (booking choices) and rejecting the ability to book with a warning message, I need to build 1 relation column from each aircraft and student on the “Start Times” sheet to the “Flights” sheet then build 222 “start time” choice components that only appear and filter the pilot and aircraft that was selected. Wish me luck.

More to come soon! (pictures/video)


Hi Jonathon,

I have also created a booking app, as posted here:

If you need help regarding the setup of your app feel free to message me so we can share about the methods.

1 Like

Does yours only populate information that has not been chosen by clients already?

I opted for this method:

  • Let users choose all options, and show them the bookings that have already been recorded for the specific date and dock (in my warehouse case).

  • If users persist to choose a slot that has already been booked, an un-clickable button will be showed to them, saying “This slot has been booked, please choose another one”.

  • Else they will be able to book that slot.

The reason I opted for that is to use as few rows as possible, in your case do you have to store all these 222 selections in your data and filter them out when one has been chosen? That would take up half the available rows for a free app.

1 Like

44 (38 pilots + 6 aircraft) unique relation columns (not rows) to filter free times based on which pilot and aircraft is chosen.

The 222 comes in with the start time choice component. Visibility and filter both based on chosen pilot and aircraft. Wish there was a dynamic way to assign filters and visibility for this use…

1 Like

Hi ThinhDinh, my app is similar to what you have done. I am a beginner and got stuck. I was doing a scheduler for FLU clinics. I want patients to select a time and of course prevent double booking. Would you be willing to share the process?


I have a simple Booking example in https://concepts.glideapp.io/

1 Like

Hi Rae, the idea behind preventing conflicts here is to have a tab with multiple user-specific columns, let people choose them outside of a form, join them together in a template column and then use a relation to match that template column back to the same column in the sheet where you store confirmed bookings.

If the relation is not empty then show the form button to catch all info stored in the user-specific columns via Columns components, else hide the button and show a text that the slot is booked.

In my case, the template contains the start time of the booking, the dock number and the date. Is it the same for your case? It gets harder to explain when you add in a duration for the booking, but the things I mentioned above can give you a start.


Thank you Jeff, I’ll play around and see how it goes.

1 Like

Thank you ThinhDinh, I think I get it. I will have to try it and see if I did get it. I’ll let you guys know, what happened in the following days.