Classes
Occurrences
An occurrence is a single instance of a class on a specific date and time. While a class defines the recurring schedule (e.g., "Advanced BJJ every Monday and Thursday at 19:00"), each individual session -- "Advanced BJJ on Monday, March 10 at 19:00" -- is an occurrence. Occurrences are what members actually attend, and they are the basis for all attendance and check-in tracking.
Auto-generation from time slots
Occurrences are generated automatically based on the time slots defined on each class. You do not need to create them manually. When you set up a class with a Monday 19:00-20:30 time slot, Omoplata creates an occurrence for every Monday at that time, spanning from one month in the past through 12 months into the future.
This automatic generation happens:
- When a new class is created.
- When time slots are modified on an existing class.
- Periodically in the background to ensure the schedule stays populated as time progresses.
Public holidays
Omoplata integrates with a holiday service to detect public holidays in your region. When an occurrence falls on a public holiday, it is still created but marked with a cancelled status. The holiday name is stored on the occurrence so you can see why it was cancelled (e.g., "Christmas Day"). These cancelled sessions appear on the timetable but are clearly marked as inactive.
Viewing occurrences
Weekly timetable
The main way to view occurrences is through the weekly timetable on the Classes page. Each colored block on the calendar represents an occurrence. The block shows:
- The class name.
- The start and end time (e.g., 19:00 - 20:30).
- Participant avatars for members who have confirmed attendance or been marked present.
- A capacity indicator if the class has a maximum participant limit (e.g., "8/15").
- A lead count if prospective members have signed up for a trial in that session.
Class occurrence calendar
Each class also has its own occurrence view. Navigate to the class detail page and select Occurrences from the sidebar. This shows a monthly calendar with highlighted dates that have scheduled sessions. Clicking a date displays the occurrences for that day with:
- The class name and time range.
- The assigned trainer.
- Participant avatars showing who attended or plans to attend.
- The capacity fill ratio (e.g., "12/20").
Occurrence detail modal
Clicking any occurrence on the weekly timetable opens a detail modal. This modal shows the full details of the session including the date, time, venue, discipline, trainer, and a complete list of attendees. From this modal, admins can mark attendance directly.
Capacity tracking
When a class has a maximum participant limit, capacity is tracked at the occurrence level. The system counts the number of confirmed participants -- both members who have checked in (attendance records) and members who indicated they will attend ("yes" intentions).
- On the timetable, the fill ratio is displayed as a small badge on each occurrence (e.g., "8/15").
- In the member portal, once the capacity is reached, the sign-up buttons are replaced with a "class full" message. Members can no longer create new attendance intentions for that session.
- In the occurrence detail modal, the admin can see the exact count alongside the participant list.
Capacity is per occurrence
The participant limit applies individually to each occurrence. A class with a limit of 15 allows 15 members per session, not 15 members total across the week.
Cancelling individual occurrences
Occurrences that fall on public holidays are automatically marked as cancelled during generation. The occurrence record is preserved with a status flag and the holiday name, so it still appears on the timetable in a visually distinct way.
Cancelled occurrences:
- Are not available for member check-in.
- Do not count toward attendance statistics.
- Still appear on the calendar so trainers and members can see that the regular session is not happening and understand why.
Trainer overrides
Each class has a default trainer, but individual occurrences can have a different trainer assigned. This is useful when:
- A substitute instructor covers a session while the regular trainer is away.
- A guest instructor leads a special seminar during a regular class slot.
- Different trainers rotate through the same class on different weeks.
How trainer overrides work
When a specific trainer is assigned to an occurrence, that trainer takes precedence over the default trainer defined on the class:
- If the occurrence has its own trainer assigned, that trainer is shown.
- Otherwise, the default trainer from the class is shown.
The effective trainer is displayed in the occurrence detail modal, on the weekly timetable, and in the member portal. This ensures members always see who is actually leading the session they are attending.
Past vs. upcoming occurrences
Omoplata treats past and upcoming occurrences differently in the timetable:
- Upcoming occurrences show attendance intentions -- members who indicated they plan to attend through the portal.
- Past occurrences show actual attendance records -- members who were marked present either through check-in or by an admin.
For classes that require assignment, the assigned members are always shown regardless of whether the occurrence is in the past or future.
This distinction ensures the timetable always displays the most relevant information: expected attendees for future sessions and confirmed attendees for past ones.