S
schoolsio
Docs
Documentation

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.

Last updated: June 2025  ·  Version 2.4.0

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.

Multi-school support
If you run more than one school under the same proprietorship, you can manage all of them from a single agency account. Each school maintains fully isolated data.

Platform Architecture

Understanding the hierarchy helps you navigate the platform correctly:

LevelWhat it isExample
AgencyTop-level organisation. Owns one or more schools.Greenfield Education Group
SchoolIndividual school with its own subdomain and branding.Greenfield Academy Lagos
SectionMajor division of the school (e.g. Primary, Secondary).Primary School, JSS, SSS
ClassYear group within a section.Primary 3, JSS 2, SS 1
Class ArmStream or set within a class.Primary 3A, JSS 2 Science
Academic ClassA 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.

Admin guide
👩‍🏫

Teacher

Enters scores for their assigned subjects, marks attendance, and views class rosters.

Teacher guide
👨‍👩‍👧

Parent

Views their child's report cards (via dashboard or scratch card PIN), and receives notifications.

Parent portal guide
🎓

Student

Accesses their own results and profile when student login is enabled by the school.

Student guide
Getting Started

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.

Before you begin
You'll need your school's logo (PNG/JPG), a list of class names and arms, and a Paystack subaccount code if you want to enable scratch card payments.

Setup Steps

1

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.

2

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.

3

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.

4

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.

5

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%).

6

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.

7

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)

Academic

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:

StatusMeaningWho can see it
pendingScores not fully entered or not yet generatedAdmin, Class Teacher
publishedVisible to parents/students (per resultAccessMode)Admin, Teacher, Parents, Students
lockedFinal. 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:

ModeHow parents access results
dashboardVisible directly in the parent app after you publish
scratch_cardParent must enter a valid scratch card PIN to unlock
bothDashboard access AND scratch card both work
Locking is irreversible
Once a report card is locked, scores, grades, and positions cannot be edited. Lock only when you are certain the results are final. Admins can still update comments and signatures on locked cards.

Subject Summaries

Each report card contains a subjectSummaries array — one entry per subject the student was assessed in. Each entry includes:

JSON · subjectSummaries entry
{ "subjectId": "sub_abc123", "subjectName": "Mathematics", "isElective": false, "totalScore": 87, // weighted total out of 100 "grade": "A2", "remark": "Excellent", "passedCriteria": true, "breakdown": [ { "title": "CA1", "score": 17, "maxScore": 20, "weightPercent": 10 }, { "title": "Final Exam", "score": 70, "maxScore": 100, "weightPercent": 60 } ] }
Hidden assessment scores
If an assessment has 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.
Revenue

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

1

Go to Revenue → Scratch Cards → New Batch

Select the academic year, term, source (online or bulk), quantity, and price per card.

2

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.

3

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).

Paystack subaccount required
To receive automatic payouts, you must configure your Paystack subaccount code in Settings → Paystack. Without it, online card payments cannot be processed.

Card Statuses

StatusMeaning
activeCard is valid and can be used to unlock a report card
usedCard has reached its maximum use count
revokedAdmin manually revoked this card (e.g. issued in error)
expiredCard passed its expiresAt date without being used
People

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.

Run promotions after cumulative reports are locked
The promotion engine reads from locked cumulative report cards. Make sure all cumulative reports for the year are finalized before running the promotion.

How promotion paths are resolved

The engine never uses manually configured paths. It always derives the next class from classOrder and sectionOrder:

Logic — Pseudocode
nextClass = classes WHERE sectionId = currentSection AND classOrder = current.classOrder + 1 // No next class → cross-section nextSection = sections WHERE schoolId = X AND sectionOrder = current.sectionOrder + 1 nextClass = firstClassIn(nextSection) // No next section → student graduates graduate(student)

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:

SettingBehaviour
autoCreateMissingArms = trueEngine creates the missing arm and routes the student there
autoCreateMissingArms = falseStudents 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:

ModeBehaviour
autoPromotion records are immediately approved. Admin reviews after the fact.
manualRecords sit as pending until admin confirms each cross-section move. Useful when the transition requires an interview.
Elective re-selection on cross-section moves
When a student crosses into a new section, their old elective enrollment rows are preserved as history. A fresh elective selection is required for the new section. The UI will prompt the student or admin to select electives before enrollment is finalized.
Getting Started

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:

SettingDescriptionDefault
termLabelWhat to call each period — "term", "semester", or "quarter"term
termsPerYearHow many terms per academic year3
promotionMonthWhich calendar month year-end promotions run (1–12)9
admissionNumberConfigTemplate for auto-generating admission numbersSTU/{{current_year}}/{{count:5}}

Portal Access Settings

Control which user types can log in to the platform:

SettingDefaultEffect when enabled
enableStudentLoginOffStudents can log in and view their own results and profile
enableParentLoginOffParents can log in, view their child's results and receive notifications
resultAccessModedashboardControls whether a scratch card PIN is required to view results
Getting Started

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

RoleDescriptionScope
ownerAgency owner. Full access to all schools under the agency.Agency-wide
principalSchool head. Full school access including locking reports.School-wide
adminSchool admin. Manages students, staff, and academic records.School-wide or Section
teacherEnters scores for assigned subjects and classes.Assigned classes only
bursarManages fees and financial records.School-wide
Section-scoped roles
A user can be an admin scoped to only the Primary section, for example. They will only see students and classes within that section.
Academic

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.

Academic

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.

Section-scoped subjects
You can scope a subject to a specific section (e.g. "Further Mathematics" only for SSS). Students outside that section will never see it on their report cards.
Academic

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.

Academic

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

StatusMeaning
promotedStudent met all criteria and is automatically advanced
needs_reviewStudent has one or more subject flags — admin must decide
promoted_on_trialAdmin overrode a flag and promoted with conditions
deniedStudent does not advance; repeats the current class
Academic

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.

People

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

StatusMeaning
activeCurrently enrolled and attending
graduatedCompleted the school — alumni record created
withdrawnLeft the school voluntarily
transferredMoved to another school
People

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.

People

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.

Revenue

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.

Feature in development
Full fee management (invoices, transactions, and auto-charge subscriptions) is shipping in Stage 2. Scratch card revenue is available now.
Revenue

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

1

Log in to your Paystack Dashboard

Go to dashboard.paystack.com and navigate to Settings → Subaccounts.

2

Create a Subaccount

Enter your school's bank details. Paystack will verify and issue a subaccount code that looks like ACCT_xxxxxxxxxxxxxxxx.

3

Paste into schoolsio

In Settings → Paystack, paste your subaccount code. Set your preferred split percentages for scratch cards and fees.

Website

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.

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.

Website

Admissions Page

Configure your school's public admissions section — process steps, requirements, tuition overview, and an enquiry form that captures prospective parent contact details.

Platform

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

TypeTriggered by
resultReport card published or locked
announcementAdmin broadcasts a message to a class, section, or the whole school
scratch_cardOnline card purchase confirmed — PIN delivered
systemPassword resets, account creation, platform updates
Platform

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.

Platform

Settings Reference

A full reference of all configurable settings available in your school's Settings dashboard.

schoolSettings fields

FieldTypeDefaultDescription
termLabelstring"term"How to label each period
termsPerYearint3Terms per academic year
defaultPasswordstring"123456"Initial password for new accounts
enableStudentLoginboolfalseAllow students to log in
enableParentLoginboolfalseAllow parents to log in
resultAccessModeenumdashboardHow parents access results
displayPositionInReportcardsbooltrueShow class position on report card
autoSignSignatureForPrincipalbooltrueAuto-attach principal signature
scratchCardSplitPercentint10Platform % cut on card sales
feeSplitPercentint2Platform % cut on fee payments
resultAwardsenumallWho sees awards on report cards