Welcome to schoolsio
schoolsio is an all-in-one school management platform built for Nigerian and African schools. This documentation covers everything from first-time setup to advanced configuration of report cards, fees, and the promotion engine.
2.4.0
Quick Start
Get your school live in under 30 minutes
Report Cards
Generate, publish and share term results
Scratch Cards
Sell result access cards and earn revenue
What is schoolsio?
schoolsio is a multi-tenant SaaS platform where agencies (school groups or proprietors) manage one or more schools. Each school has its own subdomain, branding, settings, students, staff, and academic records.
The platform covers the full school lifecycle: from onboarding students and setting up classes, to recording scores, generating report cards, collecting revenue via scratch cards, and running year-end promotions.
Platform Architecture
Understanding the hierarchy helps you navigate the platform correctly:
| Level | What it is | Example |
|---|---|---|
Agency | Top-level organisation. Owns one or more schools. | Greenfield Education Group |
School | Individual school with its own subdomain and branding. | Greenfield Academy Lagos |
Section | Major division of the school (e.g. Primary, Secondary). | Primary School, JSS, SSS |
Class | Year group within a section. | Primary 3, JSS 2, SS 1 |
Class Arm | Stream or set within a class. | Primary 3A, JSS 2 Science |
Academic Class | A class arm in a specific term. Auto-generated. | JSS 2A · 2024/2025 · First Term |
Who uses schoolsio?
School Admin / Principal
Manages the entire school: settings, staff, academic calendar, report card publishing, and revenue.
Teacher
Enters scores for their assigned subjects, marks attendance, and views class rosters.
Parent
Views their child's report cards (via dashboard or scratch card PIN), and receives notifications.
Student
Accesses their own results and profile when student login is enabled by the school.
Quick Start
Get your school up and running in under 30 minutes. This guide walks you through the minimum steps to onboard students and generate your first report cards.
Setup Steps
Create your Agency & School
Sign up at schoolsio.cloud. Enter your agency name, then create your first school. Each school gets its own subdomain (e.g. greenfield.schoolsio.com) and settings.
Configure School Settings
Go to Settings → School Settings. Set your term label (Term / Semester / Quarter), number of terms per year, admission number format, and default currency.
Build your Class Structure
Navigate to Academic → Sections. Create your sections (e.g. Primary, JSS, SSS), then create classes within each section, then add arms to each class.
Set up the Academic Year & Terms
Go to Academic → Calendar. Create the current academic year (e.g. "2024/2025") and add your terms. Mark the current term as active.
Add Subjects & Assessment Templates
Create your subjects under Academic → Subjects. Then set up Assessment Templates to define how scores are weighted (e.g. CA1 = 10%, Exam = 60%).
Onboard Staff & Students
Create staff accounts and assign them roles. Import or manually create student profiles and enroll them into classes for the current term.
Generate & Publish Report Cards
Once teachers have entered scores, go to Results → Generate. Review the report cards, add comments and signatures, then publish or lock them for parent access.
Watch: Full school setup walkthrough (12 min)
Report Cards
Report cards are the core output of schoolsio. Each report card is a locked snapshot of a student's performance for a specific term — with per-subject scores, grades, class position, teacher comments, and signatures.
Report Card Lifecycle
Every report card moves through the following states:
| Status | Meaning | Who can see it |
|---|---|---|
| pending | Scores not fully entered or not yet generated | Admin, Class Teacher |
| published | Visible to parents/students (per resultAccessMode) | Admin, Teacher, Parents, Students |
| locked | Final. Immutable. Used for promotion decisions. | Everyone (read-only) |
Controlling Parent Access
You can control how parents and students access report cards via Settings → Result Access Mode:
| Mode | How parents access results |
|---|---|
dashboard | Visible directly in the parent app after you publish |
scratch_card | Parent must enter a valid scratch card PIN to unlock |
both | Dashboard access AND scratch card both work |
Subject Summaries
Each report card contains a subjectSummaries array — one entry per subject the student was assessed in. Each entry includes:
isHidden = true, its score field will be null in the breakdown for parents and students, but admin views always show the actual score. The assessment still contributes to the weighted total.Scratch Cards
Scratch cards let your school monetize result access. Each card has a unique serial and PIN that unlocks a student's report card for a specific term. Revenue is split automatically between your school and the platform via Paystack.
Two Purchase Flows
Online (Paystack)
Parent pays online. Card is generated instantly and the PIN is delivered. Revenue split happens automatically on the Paystack transaction.
Bulk Print
Admin generates a batch of cards, downloads the PINs, and sells physical printed cards at the school counter. No Paystack transaction needed.
Creating a Batch
Go to Revenue → Scratch Cards → New Batch
Select the academic year, term, source (online or bulk), quantity, and price per card.
Set Max Uses
Default is 1 (single-use). You can allow up to 3 uses so the parent can view on multiple devices without buying another card.
Activate the Batch
For bulk batches, download the generated PINs as CSV. For online batches, the payment link is automatically served to parents in the portal.
Revenue Split
schoolsio retains a platform fee on each card sale. You set your school's split percentage under Settings → Paystack → Scratch Card Split % (default: 90% to your school, 10% to platform).
Card Statuses
| Status | Meaning |
|---|---|
| active | Card is valid and can be used to unlock a report card |
| used | Card has reached its maximum use count |
| revoked | Admin manually revoked this card (e.g. issued in error) |
| expired | Card passed its expiresAt date without being used |
Promotion Engine
The promotion engine automates year-end class advancement. It reads cumulative report cards, routes students to their next class arm, handles cross-section transitions, and creates enrollment records for the new academic year.
How promotion paths are resolved
The engine never uses manually configured paths. It always derives the next class from classOrder and sectionOrder:
Arm Matching
Arms are always matched by name. A student in JSS 2A will be placed in JSS 3A. If the destination class is missing that arm:
| Setting | Behaviour |
|---|---|
autoCreateMissingArms = true | Engine creates the missing arm and routes the student there |
autoCreateMissingArms = false | Students are distributed equally across existing arms in the destination class |
Cross-Section Transitions
Moving from one section to another (e.g. Primary → JSS) is a significant event. You control how this is approved:
| Mode | Behaviour |
|---|---|
auto | Promotion records are immediately approved. Admin reviews after the fact. |
manual | Records sit as pending until admin confirms each cross-section move. Useful when the transition requires an interview. |
School Setup
Configure your school's identity, branding, term structure, grading scale, and portal settings from the Settings dashboard.
Basic Information
Navigate to Settings → School Profile to update your school's name, short name, address, phone, motto, logo, and brand colors. Your primaryColor is the single source of truth for app and website theming.
Term Configuration
Under Settings → Academic you can configure:
| Setting | Description | Default |
|---|---|---|
termLabel | What to call each period — "term", "semester", or "quarter" | term |
termsPerYear | How many terms per academic year | 3 |
promotionMonth | Which calendar month year-end promotions run (1–12) | 9 |
admissionNumberConfig | Template for auto-generating admission numbers | STU/{{current_year}}/{{count:5}} |
Portal Access Settings
Control which user types can log in to the platform:
| Setting | Default | Effect when enabled |
|---|---|---|
enableStudentLogin | Off | Students can log in and view their own results and profile |
enableParentLogin | Off | Parents can log in, view their child's results and receive notifications |
resultAccessMode | dashboard | Controls whether a scratch card PIN is required to view results |
Roles & Permissions
schoolsio uses a role-based access control system. Each user is assigned one or more roles, and roles can be scoped to specific sections or departments.
Available Roles
| Role | Description | Scope |
|---|---|---|
owner | Agency owner. Full access to all schools under the agency. | Agency-wide |
principal | School head. Full school access including locking reports. | School-wide |
admin | School admin. Manages students, staff, and academic records. | School-wide or Section |
teacher | Enters scores for assigned subjects and classes. | Assigned classes only |
bursar | Manages fees and financial records. | School-wide |
Class Structure
schoolsio uses a four-level hierarchy: Sections → Classes → Class Arms → Academic Classes. This structure separates your school's permanent organisation from the per-year, per-term instances.
Sections
Sections are the top-level academic divisions — e.g. Primary, Junior Secondary (JSS), Senior Secondary (SSS). Each section has a sectionOrder that determines promotion flow.
Classes & Arms
Within each section, create classes (e.g. "Primary 1", "JSS 2"). Within each class, create arms (e.g. "A", "B", "Science", "Arts"). Arms can optionally be linked to a department for subject tracking.
Academic Classes
At the start of each term, schoolsio auto-generates Academic Classes — one per arm per term. These are the live instances where attendance is marked, assessments are assigned, and scores are entered. You never need to recreate your structure each year.
Subjects & Electives
Subjects can be core (offered to all students in a class or section) or elective (student must actively enroll). Electives are grouped into elective groups where students pick one subject from the group.
Core Subjects
Core subjects have no electiveGroupId and are automatically included in every student's report card. Examples: Mathematics, English Language, Basic Science.
Elective Groups
Create an elective group (e.g. "Modern Languages") and assign subjects to it (French, Arabic, Yoruba). Set maxSelections = 1 to allow students to pick exactly one. Students select their electives once when they enter a new section.
Assessments
Assessments define the components of a student's subject score — CA1, CA2, Mid-Term, Final Exam, etc. You configure these once via Assessment Templates, and schoolsio auto-generates the individual assessment rows for every subject at the start of each term.
Assessment Templates
Go to Academic → Assessment Templates. Create a template set for your school (or per-section if Primary uses different components than Secondary). Each template item has a name, type, weightPercent, and maxScore. All weights in a set must sum to 100.
Entering Scores
Teachers navigate to their assigned class, open the subject, and enter scores per student. A student's final subject score is the weighted sum of all component scores. The system validates that entered scores do not exceed the component's maxScore.
Cumulative Reports
Cumulative report cards are generated at the end of the final term of an academic year. They average all per-term scores for the same student and year, and determine whether a student is promoted, placed on trial, or requires review.
Promotion Status
| Status | Meaning |
|---|---|
| promoted | Student met all criteria and is automatically advanced |
| needs_review | Student has one or more subject flags — admin must decide |
| promoted_on_trial | Admin overrode a flag and promoted with conditions |
| denied | Student does not advance; repeats the current class |
Attendance
Track daily student attendance per academic class. Attendance data feeds into the report card and can surface absentee alerts for class teachers and admins.
Marking Attendance
Class teachers open their class for the day and mark each student as present, absent, late, or excused. Once saved, attendance for that day is locked to prevent backdating.
Students
Each student has a full profile with personal details, a unique admission number, family links, medical notes, and a complete enrollment history across all terms and years.
Admission Numbers
Admission numbers are auto-generated when a student is created. The format is configurable in Settings → Academic. Default: STU/2024/00001. You can also set custom formats like GFA/2024/T1/0042 using the template variables.
Enrollment Status
| Status | Meaning |
|---|---|
active | Currently enrolled and attending |
graduated | Completed the school — alumni record created |
withdrawn | Left the school voluntarily |
transferred | Moved to another school |
Staff
Staff members are users with a staffProfile. They are assigned roles that determine what they can see and do in the platform. Each staff member can have a signature image that auto-appears on report cards they are the class teacher for.
Class Teacher Assignment
Each academic class has one class teacher. The class teacher automatically inherits all subjects in that class that don't have an explicit subject teacher assigned. They also appear on report cards with their signature when autoSignSignatureForPrincipal is enabled.
Parents & Families
Parents are linked to students through Family records. One family can contain multiple students (siblings) and multiple parents. Notifications and fees can be targeted at the family level.
Family Linking
Create a family first, then link student profiles and parent profiles to it. This allows a single parent login to view all their children's report cards from one account.
Fee Management
Create fee structures, target them at specific groups or classes, auto-generate invoices, and collect payments via Paystack, bank transfer, cash, or POS. Coming in Stage 2.
Paystack Setup
Connect your Paystack subaccount to automatically receive your share of scratch card and fee payments. You only need to do this once per school.
Getting your Subaccount Code
Log in to your Paystack Dashboard
Go to dashboard.paystack.com and navigate to Settings → Subaccounts.
Create a Subaccount
Enter your school's bank details. Paystack will verify and issue a subaccount code that looks like ACCT_xxxxxxxxxxxxxxxx.
Paste into schoolsio
In Settings → Paystack, paste your subaccount code. Set your preferred split percentages for scratch cards and fees.
Website Builder
Every school on schoolsio gets a fully customizable public website — no coding required. Configure your hero, about section, features, gallery, blog, events, testimonials, and admissions enquiry form from the admin dashboard.
Publishing Your Website
Go to Website → Settings and toggle isPublished to on. Your site will be live at yourschool.schoolsio.com. You can also point a custom domain by entering it in the customDomain field.
Brand Colors
Your website always uses schools.primaryColor as its brand color — the same one you set in School Profile. You never need to configure it separately for the website.
Blog & Events
Publish news, announcements, and event listings on your school's public website. Blog posts can be authored by staff, and optionally by parents or alumni after moderation.
Admissions Page
Configure your school's public admissions section — process steps, requirements, tuition overview, and an enquiry form that captures prospective parent contact details.
Notifications
schoolsio sends notifications via in-app, push, email, and SMS channels. You control which channels are active and who receives each notification type.
Notification Types
| Type | Triggered by |
|---|---|
result | Report card published or locked |
announcement | Admin broadcasts a message to a class, section, or the whole school |
scratch_card | Online card purchase confirmed — PIN delivered |
system | Password resets, account creation, platform updates |
Certificates
Design and issue PDF completion certificates to graduating students. Certificates include your school branding, custom text, signature slots, a stamp image, and a QR code for public verification.
Certificate Configs
Create one or more certificate templates under Settings → Certificates. Each config controls page size, orientation, background image, fonts, colors, logo position, signature slots, and the body text template. Use {{studentName}}, {{schoolName}}, and {{academicYear}} as placeholders in the body text.
Settings Reference
A full reference of all configurable settings available in your school's Settings dashboard.
schoolSettings fields
| Field | Type | Default | Description |
|---|---|---|---|
termLabel | string | "term" | How to label each period |
termsPerYear | int | 3 | Terms per academic year |
defaultPassword | string | "123456" | Initial password for new accounts |
enableStudentLogin | bool | false | Allow students to log in |
enableParentLogin | bool | false | Allow parents to log in |
resultAccessMode | enum | dashboard | How parents access results |
displayPositionInReportcards | bool | true | Show class position on report card |
autoSignSignatureForPrincipal | bool | true | Auto-attach principal signature |
scratchCardSplitPercent | int | 10 | Platform % cut on card sales |
feeSplitPercent | int | 2 | Platform % cut on fee payments |
resultAwards | enum | all | Who sees awards on report cards |