Appearance
Classes and Semesters
Classes are organized by semesters (e.g. Spring 2026, Fall 2026). Each class offering is tied to one semester. You create semesters first, then create classes and attach them to a semester, assign instructors, and set capacity. Used by: Admin and Super Admin. Instructors usually work from https://admin.uibeta.org/instructor (their assigned classes and rosters), not from the full Classes list in Admin.
Routes: https://admin.uibeta.org/admin/classes (list), https://admin.uibeta.org/admin/classes/[id] (class detail), https://admin.uibeta.org/admin/classes/new (new class), https://admin.uibeta.org/admin/semesters (semesters list), https://admin.uibeta.org/admin/semesters/[id] (semester detail).
Browsing the Classes list
The Classes page (https://admin.uibeta.org/admin/classes) has a tab for All classes, one tab per semester, Archive, and No Semester. Use Search and the filters (status, language, level, location) to narrow the list. The Archive tab also has its own semester filter.
- Schedule column — shows the meeting days, the class's start and end dates (for example "Oct 6 – Dec 17"; the year is added when a class runs across New Year), and the meeting time.
- Sorting — click a column header to sort. Sorting by Schedule puts classes in weekday order (Monday first), then by start time. Enrollment sorts by how many students are enrolled.
- Below minimum enrollment only — tick this to show only classes that have not yet reached their minimum enrollment. The dashboard's "below minimum enrollment" tile links straight to this view.
What a semester is and how it organizes classes
A semester is a time period used for organizing classes (e.g. Spring 2026, Fall 2026). It controls when those classes are visible and when registration is open. Each class (e.g. “Spanish A2”) is attached to one semester. The same class name in a different semester is a separate product (e.g. “Spanish A2 — Spring 2026” vs “Spanish A2 — Fall 2026”). Enrollments are tied to a specific class in a specific semester.
Creating a new semester
- Go to Semesters in the sidebar (or https://admin.uibeta.org/admin/semesters).
- Click New semester or Create semester (or similar).
- Enter the name (e.g. “Spring 2026”) and any dates (start/end) if required.
- Save. The new semester appears in the list. You can now create classes and attach them to it.
Create the semester first, then create classes within it. That way you can assign each class to the correct term from the start.
Creating a class and attaching it to a semester
- Go to Classes in the sidebar (or https://admin.uibeta.org/admin/classes).
- Click New class or Create class (or go to https://admin.uibeta.org/admin/classes/new).
- Enter the class name and any description.
- Select the semester this class belongs to (e.g. Spring 2026).
- Set capacity (maximum number of enrollments).
- Assign an instructor if applicable (see below).
- Save. The class appears in the list and in the semester; members can enroll once registration is open for that semester.
Assigning an instructor to a class
- Open the class detail page (https://admin.uibeta.org/admin/classes/[id]) or edit the class from the list.
- Find the Instructor field (or Assign instructor).
- Select the user who will teach the class. They must have the Instructor role.
- Save. That instructor will see this class on https://admin.uibeta.org/instructor and can open the class to view the roster and enrollments. You can change or remove the instructor later by editing the class again.
What the full class editor includes
On https://admin.uibeta.org/admin/classes/[id] you can manage the whole class product in one place:
- Schedule — Start/end dates, days of week, and Length (weeks). Changing weeks or days recalculates the default full-course non-member price.
- Pricing — Read-only breakdown (sessions, full member/non-member totals, member checkout amount). Edit non-member checkout price for mid-term adjustments; use Reset to full course to restore the schedule-based total. There is no member discount % for language classes.
- Instructors — Primary and co-instructors when supported.
- Media, visibility, enrollments / roster shortcuts, and other product fields.
Use New class or https://admin.uibeta.org/admin/classes/new for a blank class using the same editor.
Setting class pricing
- On the Schedule tab, set Length (weeks) and days of week. The system derives session count and auto-fills the full non-member total on the Pricing tab.
- On Pricing, review the Members and Non-Members breakdown. Adjust non-member checkout price only if you need a prorated or custom checkout amount.
- Save. Member checkout amounts are computed automatically from the fixed per-meeting rates ($25/$15 for most classes; $15/$10 for salsa/dance).
The member price shown to the public comes from this same per-meeting rate table everywhere — on the portal class cards and detail pages, and on the class listings on the Upstate International website ("Members: $…"). If a class has no course length set, no member price can be worked out, so the website listing shows only the regular price until the length is filled in.
Setting capacity for a class
- When creating or editing a class, find the Capacity (or Max enrollments) field.
- Enter the maximum number of people who can be enrolled (e.g. 15).
- Save. Once the number of enrollments reaches capacity, new sign-ups can go to a waitlist if your organization uses waitlists. You can change capacity later by editing the class; the Inventory page shows how many spots are filled and how many are available.
Copying classes from one semester to the next
If your Admin supports copy classes or copy from semester:
- Go to Classes or Semesters and find the option to copy (e.g. “Copy from previous semester” or “Copy classes”).
- Select the source semester (e.g. Spring 2026) and the target semester (e.g. Fall 2026).
- Choose which classes to copy (or copy all).
- Run the copy. New class products are created in the target semester; you can then adjust names, capacity, or instructors as needed.
If this option is not available, create the new semester and add classes manually, or ask Andrew how copying is set up for your site.
Archiving and Restoring Classes
When a semester ends, you can archive individual classes to remove them from the active list without deleting them. Archived classes are moved to an Archive tab on the Classes page.
Archive a single class: On the Classes page, click Archive on the class's row. The class moves to the Archive tab.
What archiving does for members: An archived class disappears from the member portal and the website class listings, and it can no longer be bought — even from an old link or a cart the member filled earlier. Existing enrollments in the class are kept.
Bulk archive all classes in a semester: On the Semesters page, open the action menu for a semester and choose Archive classes. An Archive Classes modal confirms how many classes will be affected. This archives only the classes, not the semester itself.
Restore a class: Go to the Archive tab on the Classes page, find the class, and click Restore on its row. It returns to the active list.
The Archive tab excludes classes from semesters that ended more than 18 months ago (those are hidden from the tab entirely to keep it manageable).
Archiving and Restoring Semesters
You can also archive a semester itself once it is no longer active. Archiving a semester does not change the archive state of the classes inside it.
Archive a semester: On the Semesters page, open the action menu for the semester and choose Archive semester. The semester is marked archived and is removed from the active semesters view.
Restore a semester: On the Semesters page, find the archived semester and use the Restore Semester action (or open the Restore Semester modal). It returns to the active list.
Viewing the class roster and exporting it
On any existing class detail page (https://admin.uibeta.org/admin/classes/[id]), a Class Roster section shows who is enrolled in that class:
- Summary tiles show Enrolled (everyone holding a seat), Paid, Reserved, Awaiting payment (offline seats still waiting on cash or check), and Waitlist. Cancelled enrollments are not counted in Enrolled; the number cancelled is shown next to the heading.
- Below the summary, each enrolled student is listed with their name, email, status, and enrollment date. Click View to open the full enrollment record.
- Click Export CSV to download the roster as a spreadsheet. The export is disabled (greyed out) when nobody holds a seat. The file starts with the class name, semester, date/time, location, and teacher(s), followed by each student's first and last name, email, phone, status, and enrollment date.
- A View all enrollments → link at the bottom jumps to the Enrollments page pre-filtered to that class.
Exporting the class list (two different files)
The Classes page and the Import / export classes page both offer two CSV downloads. They look similar and are not interchangeable — pick by what you intend to do with the file.
On https://admin.uibeta.org/admin/classes, click Export and choose one:
Export for re-import (CSV)
The working file. Its columns are exactly the columns the importer reads, so you can edit it in Excel and upload it back through Import / export classes to update classes in bulk.
Columns: class_code, name, language, level, term, semester_name, session_number, session_name, days_of_week, start_datetime, end_datetime, location_type, room, capacity, min_capacity, base_price_cents, member_discount_percent, intensity, active.
Dates in this file are full UTC timestamps (2026-09-08T13:00:00.000Z). That format looks unfriendly on purpose — it is the one format that survives a download-edit-upload round trip without shifting class times.
- A leading apostrophe on some cells is expected. If a text cell starts with
=,+,-, or@, the export adds an apostrophe in front so Excel does not treat it as a formula. The importer removes that apostrophe again when you upload the file, so the class name comes back exactly as it was. Don't delete it by hand. - Leave the file's encoding alone. Exports are saved as UTF-8 with a byte-order mark (BOM), which is what makes accented names like "Español" display correctly in Excel and Numbers. You can upload an unmodified export as-is.
member_discount_percentis ignored for classes (see the note below). If your file has a value in that column, the import still goes through and shows an Import warnings box saying the value was ignored.
Export class report (CSV)
The reading file, for month-end office work. It answers the questions the working file cannot, and it cannot be uploaded back.
Columns: class_code, name, language, level, semester_name, session_number, session_name, instructor, days_of_week, start_date, start_time, end_date, end_time, location_type, room, capacity, min_capacity, enrolled, waitlisted, base_price_cents, base_price, member_price, member_price_source, active.
If you are viewing a single semester tab when you click Export, both files contain only that semester's classes.
instructor— every instructor assigned to the class, primary first, separated by;. Blank means nobody is assigned to that class in the system. That is a real gap to fill on the class's detail page (see Assigning an instructor to a class), not a bug in the export.start_date/start_time/end_date/end_time— separate columns, in Greenville local time, 12-hour with AM/PM (09/08/2026,9:00 AM). Daylight saving is handled automatically.min_capacity— the minimum enrollment the class needs to run. Compare it withenrolledto spot classes at risk of cancellation. Blank means no minimum is set.enrolled— students who are reserved or paid. This is the same number the Enrollment column shows on the Classes page.waitlisted— students on the waitlist. Counted separately, soenrollednever quietly includes them.member_price— what a member pays for the whole class, derived from the current per-session member rates. It is the price of the class, not a "price today" that would change depending on which day you run the report.member_price_source— how that price was worked out.fixed-ratemeans it came from the per-session member rate.base-price-fallbackmeans the class has no course length recorded, so there is no session count to price from and the member price falls back to the base price. A row markedbase-price-fallbackwhere member and base price match is a missing course length on that class, not a pricing error.
WARNING
Do not edit the class report and upload it. The importer ignores column headers it does not recognise and does not warn you, so an edited report would import with "0 errors" and change nothing. Use Export for re-import for any change you want saved.
A note on member_discount_percent
This column appears in the re-import file only, and it is not used for class pricing. Class member pricing comes from the fixed per-session rates. Some older classes still carry a leftover value in this column; it is ignored at checkout. Leave it blank. To see the member price a class actually charges, use the class report export.
Relationship between classes, semesters, and enrollment
- Semester — Time period; holds many classes.
- Class — One offering in one semester; has capacity and an optional instructor.
- Enrollment — A member signed up for a class; counts toward that class’s capacity and can be enrolled, waitlisted, or cancelled. You manage enrollments in the Enrollments area.
Need help? Contact Andrew.