Skip to main content
Classes are the primary organizational unit in System Student. Each class has a teacher, a roster of enrolled students, a set of activities, and an in-class messaging channel. You manage your classes at /app/maestro/clases.

Creating a class

1

Open the class form

Click Nueva clase in the header of the classes page, or navigate directly to /app/maestro/clases?kid=new. The form slides in as a right-side drawer.
2

Fill in the class details

The form accepts the following fields:
FieldRequiredNotes
NameYesDisplay name for the class
SubjectYesAcademic subject or topic area
DescriptionYesShown on enrollment pages and invitation emails
Cover imageNoUploaded to the classes Supabase storage bucket
Minimum ageNoStudents younger than this are rejected at invitation
Maximum ageNoStudents older than this are rejected at invitation
3

Save the class

Submit the form. A POST request is sent to /api/teacher/create-update-classes with the form data. On success, the new class appears in your list immediately.
Age limits are enforced at the API level when you invite students. The invite-student endpoint calculates the student’s age from their date of birth and rejects the invitation if they fall outside the configured range.

Editing a class

Click the edit icon (pencil) next to any class in the list. The same form drawer opens pre-populated with the current values. Saving sends the same POST /api/teacher/create-update-classes endpoint with the existing class id included, which triggers an update rather than an insert.

Deleting a class

Deleting a class is irreversible. All associated activity and student enrollment data will be lost.
Click the trash icon next to the class. A confirmation dialog appears. If you confirm, the client sends:
POST /api/teacher/delete-class
Content-Type: multipart/form-data

record=<class_id>
The server performs a soft delete (deleted = true) on the classes table row.

Sharing a class

Each class has a unique URL of the form /clases/<class_id>. Students can use this link to request enrollment. Click the share icon on any class row to open the share dialog:

QR code

A QR code is generated client-side using the qrcode library at 800×800 px. You can download it as a JPEG to print and distribute in class.

Enrollment link

The direct URL is shown with a copy button. Clicking copy writes the URL to the clipboard using the Web Clipboard API.
The share URL is constructed from the URL_GENERAL environment variable configured on the server:
{URL_GENERAL}clases/{class_id}

Inviting students by email

From the Alumnos tab inside a class, click Invitar alumnos to open the invitation dialog.
1

Enter the student's email

Type the student’s registered email address. The button stays disabled until the input passes a standard email regex.
2

Send the invitation

Click Enviar invitación. The client sends:
POST /api/teacher/invite-student
Content-Type: multipart/form-data

email_student=<email>
id_class=<class_id>
The server looks up the student by email in the users table, validates their age against the class limits, and sends an invitation email via sendEmailNotifications.
Possible error responses from the API:
HTTP statusMessageCause
404El estudiante no existe.No active user found for that email
400El estudiante no cumple el rango de edad de la clase.Student age outside class limits
409El estudiante ya está inscrito en esta clase.Duplicate enrollment
409El estudiante ya tiene una solicitud pendiente.Pending request already exists

Approving and rejecting enrollment requests

When a student requests enrollment through the class URL, they appear in the Pendientes de aprobación tab of the Alumnos view. For each pending student you can:
  • Approve — click the green check icon. The client calls:
    POST /api/teacher/approve-reject-student
    Content-Type: multipart/form-data
    
    id_student=<student_id>
    id_class=<class_id>
    approved=true
    
    The student’s record in the class students.list JSON array is updated with approved: true.
  • Reject — click the red X icon. The same endpoint is called with approved=false. The student record is removed from the list entirely.

Removing an enrolled student

From the Alumnos inscritos tab, click the trash icon next to a student row:
POST /api/teacher/delete-student
Content-Type: multipart/form-data

id_student=<student_id>
id_class=<class_id>
The server soft-deletes the student by setting deleted: true on their entry in the class students.list array. They will no longer appear in the class roster or receive new activities.

API reference

EndpointMethodPurpose
/api/teacher/create-update-classesPOSTCreate or update a class
/api/teacher/invite-studentPOSTSend an email invitation to a student
/api/teacher/approve-reject-studentPOSTApprove or reject a pending enrollment
/api/teacher/delete-classPOSTSoft-delete a class
/api/teacher/delete-studentPOSTSoft-delete a student from a class