Repository navigation
Administrator Guide
Everything an admin or super_admin does in the web app: users, courses, classrooms, students, enrollment, the activity log, and the device and firmware pages. The device and firmware pages have their own pages: Device Management and Firmware Management and OTA.
- Signing in and sessions
- The admin menu
- Users
- Courses
- Classrooms
- Faculty
- Students
- Enrollment
- Activity log
- A first-day setup, end to end
- Permissions in detail
-
Signing in: go to the server's address (e.g.
https://impress.example.edu) and sign in. -
The first account,
admin, is a super admin. Its password isIMPRESS_INITIAL_ADMIN_PASSWORD, or the random one printed once in the server log (Installation). Change it at once in Settings → Change password. - Session lifetime: a session ends after 60 minutes without activity or 6 hours after sign-in, whichever comes first (configurable). The web app warns you 5 minutes before the hard limit. Pages that refresh themselves (live devices, deployments) don't count as activity, so a dashboard left open doesn't keep a session alive forever.
- Independent sessions: every sign-in is its own session. Signing out ends that one only.
- Settings: change your full name and password here.
| Menu item | Page | For |
|---|---|---|
| Admin | dashboard | a greeting, live classroom nodes, user accounts and recent activity at a glance |
| Courses | course catalog | courses (code, name, credits, exam date and times) |
| Students | student registry | every student; create, edit, import |
| Classrooms | classes / sections | create, edit, import and export, activate, faculty |
| Modules | devices | gateways and hubs with health and diagnostics; student module inventory |
| Firmware | firmware registry | upload, approve, deploy, deployments |
| Users | user management | teachers and admins |
| Activity | activity log | who did what, and when |
| My Classes | as a teacher | the classes you teach |
Users → + New User:
| Field | Rules |
|---|---|
| Username | 3–64 characters, unique |
| valid, unique | |
| Password | at least 6 characters |
| Full Name | |
| Role |
teacher, admin, or super_admin
|
Who can do what:
-
Creating users: an
admincan create teachers. Grantingadminorsuper_adminneeds a super admin. - Changing roles: nobody can change their own role. Promoting or demoting admin-level accounts needs a super admin.
- Deactivating: this stops sign-in at once and invalidates the user's open sessions. You can't deactivate yourself, and an admin can't deactivate a super admin.
- Resetting passwords: Reset pwd sets a new password. An admin can't reset a super admin's.
- Deleting: this is a soft delete (deactivation), so the user's history stays intact.
Import CSV creates many users at once. The columns are all required: username,email,password,full_name,role. Each row is checked on its own; valid rows are created, and the response lists invalid rows with the reason. Rows with role=admin need a super admin.
Courses → + New Course: Course Code (1–16, unique), Course Name, and optionally description, credits, department, exam date and exam start and end times.
A course is a catalog entry. Teaching happens in its sections, which are classes linked to the course (below).
A classroom in the web app is a class: one section of a course, or a free-standing class. Create one with Classrooms → + New (the form), or import many from CSV (CSV Imports).
| Form field | Meaning |
|---|---|
| Classroom Name * | display name |
| Classroom Code * | the join code (code, 1–32 characters, unique). Teachers can join a class with it as co-faculty (API) |
| Course and Section | links the class to a course. A section label is unique within a course (409 if it already exists) |
| Semester and Year |
Monsoon, Winter or Summer, and 2000–2100. Used for timetable clash checks |
| Class Start Date / End Date | the teaching period |
| Location | free text |
| Capacity | 0–5000 |
| Room Label (device code) | the classroom code (classroom_code, e.g. RM-201, unique): the physical room. A gateway registering with this code is linked to this class |
| Time slots (+ Add Time Slot) | day, start and end. Overlaps with the same teacher's or the same room's other classes are shown as warnings, never blocked |
Rules to know:
- New classes are inactive. Click Activate (on the class page, or with the activate button) when the class is in session. Gateways only auto-link to active classes, and live teaching assumes an active class.
- The primary teacher is the first teacher you choose. The others become co-faculty.
- Deleting a class deletes its quizzes (with questions and answers), polls (with votes), attendance, enrollments and co-faculty links, all in one transaction. Devices are kept: a gateway linked to it is simply unlinked. Only the primary teacher or an admin can delete a class.
- Clash warnings: a clash is reported only when the time windows really overlap. That means the same term and year; otherwise overlapping date ranges; otherwise unknown dates, which count as overlapping. Back-to-back slots don't clash.
Export CSV downloads every course section in the import layout, ready to edit and re-import in update mode (CSV Imports).
On a class page, Manage Faculty sets the teachers of that class. The first in the list becomes the primary teacher; the rest are co-faculty. Co-faculty have the same rights in the class as the primary teacher (quizzes, polls, results, roster), except deleting it.
A teacher can also join a class themselves with its join code, through the API (POST /api/classes/join {"code": "PHY101"}). The web app has no button for this yet. Joining adds them as co-faculty and never replaces the primary teacher.
Students is the student registry: every student, whatever their classes.
+ New Student:
| Field | Rules |
|---|---|
| Enrollment Number * | exactly 10 letters or digits; stored upper-case; unique |
| Student Name * | up to 128 characters |
| Email, Phone | a valid email; phone 7–15 characters (digits, spaces, + - ( )) |
| Program | up to 128 characters |
| Enrollment Year, Graduation Year | 2000–2099; graduation ≥ enrollment |
Import CSV needs exactly these seven columns, all required: roll_number,student_name,email,phone,program,enrollment_year,graduation_year. Valid rows are inserted. Invalid rows are listed with their row number and reason, and the import doesn't stop at the first error.
Removing a student can be done two ways:
- Delete is a soft delete: the student is hidden but kept.
-
Hard delete is admin-only, and permanent:
- the student, their enrollments and their attendance are removed;
- their quiz answers and poll votes are kept but anonymised, so finished quizzes and polls keep their totals;
- a student module tied to them stays in the inventory, without the enrollment number.
The student's page shows their classes and participation: quizzes answered, polls voted and attendance.
On a class page, 🎓 Students:
- + Enroll Student: search the student registry (by enrollment number or name) and enroll. A student is enrolled in a class at most once.
- ⬆ Import CSV: the student CSV above. It creates new students and enrolls them in this class. A row whose enrollment number already exists in the registry is reported as an error and not enrolled: enroll existing students with + Enroll Student.
- Unenroll: removes the student from this class only.
Students also appear in the inventory when their module joins the room's mesh (Device Management).
Activity lists recent events: time, user (empty for device and system events), action, entity and details. Common actions:
| Action | When |
|---|---|
auth.login, auth.change_password
|
sign-ins, password changes |
user.create, user.update, user.deactivate, user.reset_password
|
user management |
class.create, class.activate, class.deactivate, class.delete, class.device_auto_linked, class.status_update
|
classes |
quiz.create, quiz.start, quiz.stop, poll.create, poll.start, poll.end
|
teaching |
student.connect, student.disconnect, student.csv_import
|
students and their modules |
esp_device.online, esp_device.offline
|
device presence (only on a change) |
module.access, module.key_reset, module.ota, module.ota.prompt, module.ota_result
|
device administration and OTA |
firmware.upload and the approve, deprecate and deployment events |
firmware |
- Sign in as
adminand change the password. - Users: create the teachers (and, as super admin, other admins).
- Courses: create the catalog, or let the CSV import create courses.
-
Classrooms: import the sections from CSV, or create them in the form. Set each room's Room Label (e.g.
RM-201). - Students: import the student CSV, then enroll students in classes from each class page, or import per class.
- Devices: for each room, set up the gateway and hub (Firmware: Build and Flash). Check Modules: each gateway is online and linked to its room's class.
- Activate the classes that are in session.
- Test: run a one-question quiz in one room (Teacher Guide).
| Action | Teacher | Admin | Super admin |
|---|---|---|---|
| See and run their own classes (and co-taught ones) | ✓ | ✓ (all classes) | ✓ |
| Create and run quizzes and polls, see results | in their classes | ✓ | ✓ |
| Create classes | ✓ (they become primary) | ✓ | ✓ |
| Delete a class | primary teacher only | ✓ | ✓ |
| Manage students, enroll | ✓ | ✓ | ✓ |
| Hard-delete a student | – | ✓ | ✓ |
| Courses, course and section CSV import | – | ✓ | ✓ |
| Users: create teachers | – | ✓ | ✓ |
| Users: grant or remove admin rights | – | – | ✓ |
| Modules, firmware, deployments, activity log | – | ✓ | ✓ |
| Student module inventory (all rooms) | own classes, through the live panel | ✓ | ✓ |
The server enforces every one of these. A repository test calls every route without credentials to make sure none is left open (Security).
imPress v2.1 · Repository · Issues · Source docs: docs/ · Not yet verified on hardware: see Testing and CI
Understand
Set up
Use
Operate
Develop
More