Manage & Register Teachers
The engine will auto-assign a uniquely secure Username and Password instantly for logging into index.html.
Loading current faculty roster...
Manage Learners
Select a grade to load learners...
Promote Classes (End of Year)
Moves every learner up one grade (Baby Class โ PP1 โ PP2 โ Grade 1 โฆ โ Grade 9). Grade 9 learners graduate to Alumni (e.g. Alumni 2026): they leave active class lists, marks entry and fees, but stay in the system, can still log into the Learner Portal to see their past results, and appear in results compilation as their Alumni year. Tick Repeat for any learner who must stay in the same grade.
โ๏ธ First-time setup โ run once in Supabase SQL editor
alter table students add column if not exists grade_year int; alter table students add column if not exists graduation_year int; -- Current learners count as being in their present grade for this year. -- Change 2026 to the current academic year if different. update students set grade_year = 2026 where grade_year is null and grade <> 99; create table if not exists promotion_log ( id uuid primary key default gen_random_uuid(), run_id uuid not null, student_id uuid not null references students(id) on delete cascade, year int not null, grade int not null, stream text, to_grade int not null, outcome text not null, created_at timestamptz not null default now() ); create index if not exists promotion_log_student_idx on promotion_log(student_id); create index if not exists promotion_log_year_idx on promotion_log(year); -- Match the access settings of your other tables (students, marks_entry): alter table promotion_log disable row level security;
This changes every active learner's class. Type the academic year to confirm.
Reshuffle Streams
Completely re-deals every learner in the grade into freshly mixed streams (e.g. North & South), balanced by performance and gender. Pick a grade and the exam to judge performance by (after promotion, choose last year's exam โ e.g. Grade 4 learners judged by their 2026 End Term 3 results from Grade 3), review the new streams (press Shuffle again for another balanced mix), then publish. Publishing changes each moved learner's stream everywhere (learner portal, teacher pages, reports).
โ๏ธ First-time setup โ run once in Supabase SQL editor
alter table students add column if not exists gender text; create table if not exists reshuffle_log ( id uuid primary key default gen_random_uuid(), run_id uuid not null, student_id uuid not null references students(id) on delete cascade, grade int not null, from_stream text, to_stream text, exam text, created_at timestamptz not null default now() ); create index if not exists reshuffle_log_run_idx on reshuffle_log(run_id); alter table reshuffle_log disable row level security;
Gender is missing for these learners. Set it so the split can be balanced by gender, then save.
| Stream | Learners | Boys | Girls | Avg score | Girls avg | Boys avg |
|---|
Publishing moves every learner shown as "was โฆ" to their new stream. Type PUBLISH to confirm.
Create Time Table
Build a master lesson block time table for Primary, Junior School, or both combined. Subjects load automatically per grade from the database โ key in the teacher code and weekly lesson count for each, then generate and download a professional PDF.
Both tiers run 2-lesson blocks separated by short break, long break & lunch. Primary is a 7-lesson day ending with 1 lesson after lunch (no games); Junior School is an 8-lesson day ending with a games block after lunch.
2 lessons → short break → 2 lessons → long break → 2 lessons → lunch → 1 lesson (no games block)
2 lessons → short break → 2 lessons → long break → 2 lessons → lunch → 2 lessons → games
Toggle "Has Streams" only for grades that run parallel streams (e.g. 4 North, 4 South) โ add as many as needed.
Choose a School Level above to configure grades...
Learner Access & Fee Management Control
Select standard parameters below to flag leaners who are restricted from downloading examination slips on learner.html due to outstanding balances.
Announcements Broadcast Center
Compose notices and publish them instantly to the Teacher Portal, the Learner Portal, or both โ with optional grade targeting and priority flags.
โ๏ธ First-time setup โ required database table
Run this once in your Supabase SQL editor to enable Announcements:
create table announcements ( id uuid primary key default gen_random_uuid(), title text not null, message text not null, audience text not null default 'all', grade int, priority text not null default 'normal', active boolean not null default true, created_at timestamptz not null default now() );
Loading announcements...
Bursar Fee Management Console
Set the termly fee per class, bill optional services (transport, meals & more) to selected learners only, record payments, and let the system auto-divide the term into monthly instalments โ synced live to the Learner Portal fee statement.
โ๏ธ First-time setup โ required database tables
Run this once in your Supabase SQL editor to enable Fee Management:
create table fee_structures ( id uuid primary key default gen_random_uuid(), year int not null, term text not null, grade int not null, term_amount numeric not null, months_in_term int not null default 3, created_at timestamptz not null default now(), unique(year, term, grade) ); create table fee_payments ( id uuid primary key default gen_random_uuid(), student_id uuid not null references students(id), year int not null, term text not null, amount numeric not null, method text, reference text, note text, paid_at timestamptz not null default now() ); -- โฆ AUXILIARY SERVICE CHARGES (Transport, Meals, etc.) -- If you already ran the two tables above, run ONLY this part: create table fee_charges ( id uuid primary key default gen_random_uuid(), year int not null, term text not null, grade int not null, charge_name text not null, amount numeric not null, created_at timestamptz not null default now(), unique(year, term, grade, charge_name) ); create table fee_charge_assignments ( id uuid primary key default gen_random_uuid(), charge_id uuid not null references fee_charges(id) on delete cascade, student_id uuid not null references students(id) on delete cascade, unique(charge_id, student_id) ); -- โฆ PER-LEARNER BILLING START TERM create table fee_learner_start ( student_id uuid primary key references students(id) on delete cascade, start_year int not null, start_term text not null, updated_at timestamptz not null default now() );
Saving applies this termly fee to every learner currently enrolled in the selected class. Optional services such as transport or meals are added below and billed only to the learners you select.
| Year | Term | Class | Term Fee | Per Month | |
|---|---|---|---|---|---|
| Loading fee structures... | |||||
Auxiliary Service Charges
Optional levies billed only to the learners who use the service
Select a grade above to load its learners.
0 learners selected
Total billed: KES 0
Select a grade above to see its charges.
Historical Performance Ledger
Access, query, and generate landscape reports from inactive historical database cycles by adjusting parameters below.
Deploy New Assessment Cycle
Initialize school-wide exam schedules. Once deployed, the teacher interface automatically adapts and targets only the specified evaluation model.
Submission Tracker
Analyze real-time data uploads. Subjects filter automatically according to the grade tier selected.
Select parameters to audit...
Manage Learning Areas
Rapidly register missing learning areas, setup exam paper components for the active exam, or remove outdated selections from the portals.
Performance Analytical Engine
Compile curriculum reports directly from the database matching current CBA assessment protocols.
| Learner Name | Loading Column Configuration... |
|---|---|
| Select constraints and click "Compile Broad Sheet" above... | |