Do you use a Cron or an Aware Process to create the "shell" appointments?
We use an AwareIM process to create the shell appointments one time a year.
We create shell records for every day.
This happens to be for a school & the resources (in this case computer labs, iPads, laptops, certain rooms) can signed out for use. There is a BO with a master calendar of dates also created annually. An administrator indicates on the master calendar which day we have school & which day we don't have school. For the days school is in session, the time slots during school hours are indicated as periods of the school day (Pre, 1, 2, 3, 4/5, etc). On days we don't have school, those time slot labels instead of periods.
Are they in a separate table in your schema?
Yes, they are in a separate BO called Resource_Appt (even though I don't use an Appointment type BO)
Are you doing something like an outer join of the shell appointments to the booked appointments, and coloring the ones where there is nothing booked green, and red if booked?
No, this is the key concept here. I am creating shell records of Resource_Appt BO using the process mentioned above. These records exist for each time slot / resource no matter whether there is an appointment or not.
Conditional formatting is via rules like this:

Various rules on the Resource_Appt records set flag values that are used in conditional formatting.
One other note -- there are also screens where users can easily reserve one resource for multiple periods per day or for one time slot over multiple days.