Operations
HR and careers
Internal HR hub, public job postings, applications, and hire → staff onboarding.
Operations guide for day and boarding schools.
Last updated August 29, 2026
HR modules support hiring workflows distinct from student admissions. Public career pages accept applications; HR reviews candidates and onboards accepted hires into the staff roster (user + staff record).
Careers is the only route in the product that lets someone outside the school create a record without a login, so treat the posting itself as the gate. A posting is public only while its status is OPEN and its application deadline has not passed; a closed or expired posting rejects submissions at the API rather than hiding the form. Everything after submission - shortlisting, interview notes, candidate email - happens inside /hr/careers, and the roster only changes at the final onboarding step.
- /hr - HR module landing
- /hr/careers - manage job postings
- /hr/careers/new - create posting with requirements
- /hr/careers/[id] - posting detail
- /hr/careers/[id]/applications - applicant list per job
- /hr/careers/applications/[applicationId] - application detail
- /hr/careers/applications/[applicationId]/onboard - hire → create staff user/record
- /careers - public job board (no login)
- /careers/[slug] - public job detail and apply form
Who owns it
Every /hr route and every careers API handler is behind the same check as salary management, which admits Platform Admin, Admin, Principal, and Vice Principal. There is no read-only viewer tier: a role that cannot manage hiring cannot see candidate CVs or notes at all. The /hr landing page also points at salary management and the school staff roster, because onboarding a hire is not one wizard - the careers flow creates the login and the employment profile, and the rest of the employment record is finished in those two modules.
Posting a job
- Create the posting at /hr/careers/new with a title, description, and optionally department, location, employment type, and an application deadline.
- The URL slug is derived from the title if you do not supply one, and a numeric suffix is appended when the slug is already taken within the school.
- Status moves through DRAFT, OPEN, CLOSED, and ARCHIVED. Setting a new posting to OPEN stamps publishedAt.
- An OPEN posting appears on /careers?code=SCHOOLCODE and, when the school website is published, on /myschool/careers.
What an applicant submits
- The public form requires first name, last name, email, and a CV file. Phone and cover letter are optional.
- The CV must be PDF or Word and 5 MB or smaller. Files are written under uploads/careers/ on the application server, so that directory has to be included in backups.
- A submission against a posting that is not OPEN returns 404, and one that arrives after the deadline returns 410 with a closed-window message.
- A confirmation email is attempted after the record is saved. If SMTP is not configured the application is still stored - only the email is lost.
- Applications land at status RECEIVED and move through UNDER_REVIEW, SHORTLISTED, INTERVIEW, OFFER, HIRED, REJECTED, or WITHDRAWN.
Turning a candidate into staff
- Onboarding is refused unless the application is already at INTERVIEW, OFFER, or HIRED, and refused a second time once the applicant has been onboarded.
- You must pick an active role. The user type is inferred from that role name, and staffType is guessed from the posting department when you leave it blank.
- When the email is new, a user is created with a generated username, a temporary password returned once in the response, and mustChangePassword set. When the email already exists, that account is updated in place rather than duplicated.
- The application is stamped HIRED with the new user id, and any internal note you add is appended to the existing notes rather than replacing them.
- A supplied employee ID is rejected if another user already holds it.
Limits
- There is no interview scheduler. Interviews are arranged offline and recorded as status changes and internal notes.
- Job detail pages carry a noindex directive, so public postings are not intended to rank in search on their own.
- Applications are never converted into admissions records, and the careers flow does not touch student data.
Common questions
Quick answers in plain language.
Why does the public careers page show nothing?+
The board at /careers is school-scoped by query string, so it needs /careers?code=YOUR_SCHOOL_CODE. Open the posting at /hr/careers/[id] and copy the public link shown there, which already carries the code. Without a code the page only asks for one, and only postings with status OPEN are listed.
Which roles can open /hr and /hr/careers?+
HR tools share the salary-management gate: Platform Admin, Admin, Principal, and Vice Principal. Teachers and Support Staff roles cannot read applications or onboard a hire, even though they may appear in the staff roster.
Onboarding failed part way through. Do I start again?+
No. Progress is stored on the application as hireSideEffects with a step each for the user account, employment profile, salary, and invite. Re-post the onboard form and the user step is skipped because hiredUserId is already recorded; only the failed step is retried.
Does onboarding a hire set up their payroll?+
Not fully. The monthly CTC you enter is written to the staff employment profile as the official CTC and the salary step is marked done. Pay structure, allowances, and payroll runs still have to be completed in salary management.
Related searches
School leaders and IT teams often search for: how to hr careers in school management software, best school transport software for K-12 schools, Schoolyi hr careers guide, school bus tracking app, library management software, and school inventory management.

