# How do I set up classes, schedules and departments?

Only when the feature is on. Classes and Departments are two separate features. Flux makes each one available to your school, and then a Senior Admin turns it on under School Settings -> Features.…

Source: https://www.studentdirectory.app/help/admins/classes-and-departments
Last updated: 2026-11-04

*From the School Administrator manual, "Classes & Departments".*

*Only when the feature is on.* Classes and Departments are two separate features. Flux makes each one
available to your school, and then a **Senior Admin** turns it on under **School Settings -> Features**.
Until both have happened you will not see it anywhere, and turning it off later only hides it - nothing is
deleted and everything comes back when it is turned on again.

Open **Admin Functions -> Classes & Departments**. There is a tab for **Classes**, **Departments** and
(Senior Admin only, with Classes on) **Subjects**. Everyone at the school also gets the Classes and
Departments entries in their left navigation. Up to 12 classes (and up to 4 departments) are listed there; with more,
the entry becomes one link with the count that opens the **browse page** (`/classes` or `/departments`).

**The browse page** (everyone). `/classes` has a search box (class, teacher or room), three rows of chips and the classes
grouped by department. **Show** has **All** plus your pinned group: a teacher or class Editor sees **Mine**, a parent
sees one group per child (for example **Jack's classes**; a class both children are on appears under each). The **Department**
and **Subject** rows filter further (past 8 subjects the rest fold behind **More subjects**), and each row shows the class name over
its teacher(s) and room, with the subject at the right. **No classes match** offers **Clear filters**. Admins also get a **State** row:
**Active**, **Awaiting dates** and **Archived**. A **Private** class never shows to a parent except in the group of the child who is on it.
`/departments` and `/organizations` work the same way (Organizations: category chips instead of department and subject).

**Subjects.** The subjects (Math, Science, Shop...) a class can have. Add, rename, recolor, reorder and delete
them on the Subjects tab. Deleting a subject only leaves its classes without one.

**Departments.** On the Departments tab fill in **Name**, **Short name** (suggested from the name; it is
used in the page address and in imports, and has to be different from every other active class, department
and organization) and **Location**, then **Create department**. A department page has its **Staff** (with a
role each), its **Calendar** and the **Classes** in it. A department has no roster.

**Classes.** On the Classes tab fill in the name, short name, location, **Subject**, **Start date** and
**End date**, **Class list visibility** and, when Departments is on, which **Departments** it belongs to.
The class page then has:

- **Edit name, short name and subject** and **Archive class** (admins only).
- **Edit details** - location, term dates and Class list visibility. A class **Editor** (granted on the class
  page under Editor access, exactly like an Organization Editor) can do this too, and can edit the
  description, staff, roster and calendar - but cannot rename it, change its subject or short name, archive it,
  change its departments or manage other Editors.
- **Departments** - **Edit departments** (admins only) ticks the departments the class belongs to.
- **Staff** - add people from the Staff Directory or type a name, each with a free-text **Role** ("Lead
  Teacher", "Aide"). Roles already used at your school are suggested as you type.
- **Roster** - add and remove students one at a time, like an Organization roster.
- A **Calendar**, **Sign-Ups** and **Polls** for the class, plus **Documents** and **Permission slips**: a class
  or department Editor (or an admin) can add, edit and delete them straight from the page, exactly as on an
  Organization's page ([Organizations (Teams, Clubs & Groups)](/help/admins/organizations)). The items go to the people connected to the
  class or department, the same way an organization's do.

**Class list visibility** controls who can see the list of students:

| Setting | Who sees the student list |
|---|---|
| **Private** | Admins, the class's Editors and all school staff. The class is not listed to parents at all (the family of a student on it still sees it on that student's page, with the teacher and room). |
| **Class members** | The above, plus parents and guardians of students in the class. Everyone at the school can still see the class page itself. |
| **Public** (default) | Everyone at the school. |

Someone who may not see the list is shown only how many students are in the class, never their names.

**Archive and restore.** **Archive class** hides it from navigation and lists and keeps everything. Archived
items are listed under **Archived** on the hub, each saying whether its short name is **available** (you can
create a new class with it, for example next term) or **now used by** another. **Restore** brings an archived
class back with its staff, roster and departments; it is refused, with the other class named, while another
active item holds its short name.

An archived class or department also stops being an audience: anything already addressed to it (a notice,
document, poll, sign-up or permission slip) no longer reaches or shows in the feeds of its roster's families, its
staff or you as a member of the school, and a saved audience that includes it simply leaves it out. You can still
find and edit the item on its own admin page (for example **Notices > Admin**). **Restore** brings it all back. (An archived team or club, by contrast, still reaches its members, as it always has.)

**Where it shows.** A student's page has a **Classes** section (teachers and room), and a staff member's
page has **Departments and classes** (with their role). Both follow the visibility rules above.

**Importing classes and departments from a spreadsheet.** On **Classes & Departments**, click **Import**. One
CSV or Excel file can hold departments, classes, the staff on them and each class's students; a `row_type`
column (`department`, `class`, `staff`, `student` or `schedule`) says what each row is. Click **Download template
(.xlsx)** (it has a **Column Guide** sheet) or **(.csv)** to see the columns:

- `department` and `class` rows carry the `short_name` (the key for every row), `name`, `description` and
  `location`. A class can also have `subject`, `department` (the short name of a department; separate several
  with `;`), `roster_visibility` (`private`, `members` or `school`) and `starts_on` / `ends_on`.
- `staff` rows give the class or department `short_name`, the person's `email` and a free-text `role`. **Import
  your staff first** (Staff Directory), because staff are matched by email.
- `student` rows give the class `short_name`, `last_name`, `first_name` and `graduation_year`. Students are
  matched by name plus graduation year.
- `schedule` rows give the class `short_name`, the `weekdays` it meets (`Mon;Wed;Fri`, `Mon-Fri` or `weekdays`) and
  either a `period` from your bell schedule (for example `Period 3`) or a `start_time` and `end_time`. The row's
  `location` is the room for that pattern. Use one row per meeting pattern (a different room or time on other
  days is another row). The class needs a term (`starts_on` and `ends_on`, on the class row or the schedule
  row). Uploading the same days and times again updates that pattern instead of duplicating it. Set up your
  bell schedule first (School Settings > Class Schedule), because a `period` is looked up there.

Choose your file and you get a **preview** before anything is saved: for each department and class, whether it
is **New**, an **Update** or **Blocked** (and why), how many staff and students matched, and under **Details**
the students who were not found, the students who match more than one record (these are skipped, never guessed
at), unknown staff emails and anything else that will be skipped. A subject that does not exist yet is shown as
"will create"; only a Senior Admin can create subjects, so for a Junior Admin such a class is blocked until a
Senior Admin adds the subject or runs the import. Row numbers in the preview are the row numbers in your spreadsheet (the header row is row 1). Then click **Import** to save. Classes are saved one at a
time, so one problem class never stops the rest, and a results table shows what happened to each. Keep the page
open until it finishes.

You can upload the same file again later: classes and departments are matched by short name and updated instead
of duplicated, and new students, staff and departments are added. Importing only ever **adds**: students
already on a class but missing from the file stay on it, and nothing is removed. Rows with `schedule` or `event`
types are not supported yet and are skipped.

**Meeting schedule.** The **Meeting schedule** section of a class page fills the class calendar. An Admin or the
class's Editors click **Add meeting pattern** and fill in:

- **Title** (the class name if you leave it empty), **Room**, **Starts at** and **Ends at**.
- **First day**, and **Ends** (the last day) - these start out as the class's term dates.
- The days of the week to meet (click **Mon**, **Wed**... or **Weekdays (Mon to Fri)**) and **Every N weeks**.
- **Skip school closures** (on by default): meetings that fall on a school closure on your School Calendar are
  left out.

The page shows how many events will be created, with the first and last dates, before you save. A class can have
several patterns (for example Mon/Wed at 9:00 and Friday at 11:00). **Edit** on a pattern rebuilds only that
pattern's events: an event someone changed by hand is kept, and events you added to the class calendar yourself
are never touched. **Remove** deletes the pattern and the events it created. Everyone who can see the class sees
the schedule; only Admins and Editors see the buttons. The SwiftUI app shows the schedule on the class page.

**End of term.** Each class has an **End of term** section (Admins and the class's Editors) that decides what
happens when the term's end date has passed. Nothing happens until you **Save plan**.

- **When the term ends:** **Archive the class**, or **Reset and continue into a new term** (the next term is the
  same length and starts the day after this one ends; the meeting schedule is rebuilt for it).
- **Also, at the end of the term** (anything you leave unchecked is left alone): **Clear the class list**,
  **Delete the meeting schedule's events** (events you added by hand are never deleted), **Archive this class's
  notices**, **Archive this class's polls and sign-ups**, **Clear the staff list** (Editors keep their access),
  and **Documents** - **Keep** (the default), **Archive** or **Delete**. An archived notice, poll, sign-up or
  document disappears for families but stays visible to admins. Only items addressed to this class are affected:
  a notice sent to a group that merely includes the class, or a poll shared with another club, is not touched.
- **Preview what will change** shows exactly what would happen (counts included) without changing anything.
- **Run reset now** applies the plan immediately, after you confirm. It cannot be undone.

The plan runs by itself once, shortly after the end date has finished in your school's timezone (set under
**School Settings**); the last day of class is never cut short. Each run is recorded under **Previous runs**
and in the audit log, and the class's Editors (or your Senior Admins if it has none) get a notification. If a
class has no start date, the new term's length cannot be worked out: the class is set aside as *waiting for
new term dates* (hidden from families, everything kept) and its Editors are told. Enter both term dates under
**Edit details** to bring it back.

*Not available yet:* the searchable Classes browse page for schools with many classes and class calendar items in
the import file. The SwiftUI app shows classes read-only.
