C1 · Academic Core

The academic spine of your .

From the first inquiry phone call to the cumulative transcript on graduation day — every decision a school makes about a student lives in C1. Years, programs, classes, electives, the rule that says scientists must take Economics, the timetable that solves 1,400 cells in 90 seconds. One spine. Twelve clusters lean on it.

Sub-modules

18

From admissions to alumni — one spine.

Solve time

~90s

Greenwood-size school. Live progress.

Rule types

10

must_include · pair_required · 8 more.

Hard constraints

11

Each violation: red ring, named code.

The cost today

Three weeks of August, gone every year.

3 weeks

of timetable manually

Three principals, two HODs, one whiteboard, every August. By the time term opens, two classes share a teacher and the chemistry lab is double-booked.

120+

rules a school holds in its head

Form 3 must take Maths, Form 5 sciences must take Economics, the GCE board imposes English on every candidate. Excel can't hold them; the senior teacher who can is one staff change away from gone.

spreadsheets per student per year

Admission form, enrolment register, subject choices, grade book, report card. Each typed again, each version drifting from the last.

The student lifecycle

From the phone call to the cumulative transcript.

Eight stages every student passes through. Each one carries a moment a school recognises — the moment when the work used to start, and the moment YESS makes the work disappear.

  1. Inquiry → walk-in

    Parent calls in October to ask about Form 1. The school captures the inquiry, schedules a campus visit, and if the family decides on the day — converts the walk-in to a student with one click.

    Mariama's mother walks in on Wednesday; by Thursday morning Mariama has a matricule, a placement in Form 1-A, and her name on the Friday assembly roll.

  2. Entry exam → offer

    Selective schools schedule the entry exam, the candidate sits it online (or on paper), the auto-grader marks MCQs while the essay queue routes to a teacher. Offers go out with a deadline.

    Greenwood Cameroon shortlists 64 candidates from 287 applicants. The pass-mark RPC ranks them in two seconds. Offer letters render with the school header automatically.

  3. Enrol → section placement

    Accepted students become enrolled. The placement engine respects sibling preference + sex + program + capacity. Section auto-balances within the class.

    Form 2 has 28 returning students + 6 transfers. Section 2-A picks up 4, 2-B picks up 2. Balance preserved without anyone manually counting.

  4. Subjects → electives

    Core subjects auto-enrol on student creation. Electives surface in the portal with the school's rules evaluated live: must-include Eco for scientists, mutually-exclusive Bio + Tech-Drawing, capacity-gate on Further Maths.

    Adolphe picks Bio, Chem, Maths, Eco. The picker advises 'pair_required — if Physics chosen, Maths also required.' He satisfies it on first save.

  5. Timetable → schedule

    The solver runs the whole school in one click. Eleven hard constraints, ten soft scorers, parallel/joined groups respected. Live progress: 'Solving 47/120 needs…'

    Sacred Heart College Bamenda generates 28 sections × 5 days × 8 periods in 78 seconds. Two clashes flagged for manual placement. The HOD drops both into free slots and re-saves.

  6. Exam → mark → report

    Schools choose their assessment structure per program: CA-only (university), CA + term-exam (West African colleges), CA + sequence + term (francophone GCE). The compile engine honours the school's CA percentage cap — CA never crosses the declared limit.

    Form 3 Sequence 2 closes. The CA cap is 30%. Teacher overweights CA components by accident — the engine renormalises within the bucket so the student's CA contribution stays at 30%, not 42%.

  7. Promote → next year

    Year-end runs the rollover. Eligible students move to the resolved next class (their progression choice, or the school's default). Retained students auto-route into matching academic recovery holiday classes — counselor reviews, fees raise, attendance starts.

    84 promoted, 11 retained, 11 routed to recovery. The success toast prints all three numbers. Counselors open the recovery queue Monday morning.

  8. Graduate → alumni

    Final year students promoting from a terminal class flip `academic_status='graduated'`. The cascade trigger inserts an alumni_profiles row with the cumulative transcript frozen. The QR on the transcript points to a public verification URL.

    Five years later, an employer scans the QR on a printed transcript. The verify page confirms the seal in 200 ms.

How life changes

Five people. Five before-and-afters.

The registrar — Madame Ngo

Before

Three Excel sheets per cohort. One for academic record, one for fees, one for parent contacts. Every change typed three times. Friday afternoons spent reconciling.

After

One student profile. Notes thread. Documents vault. Outbound message queue. The print-packet button bundles everything for the cabinet. Madame Ngo finishes by 14h00.

The principal — Mr Tabi

Before

He hears about a struggling student in the corridor, not on a report. By the time he asks, term is half-over.

After

Intelligence dashboard surfaces at-risk students nightly. EWMA trajectories show grade slope per subject. Teacher impact metrics tell him which staff change moved the cohort.

The parent — Mama Lydia

Before

She gets her son's report card in French. She reads Pidgin and English. She nods politely at the parent-teacher conference and asks her niece to translate later.

After

Same report card, rendered in her preferred language at no API cost (LibreTranslate primary, NLLB-200 fallback, Bergamot WASM offline). She reads it herself.

The teacher — Mr John

Before

Wakes up at 04h30 to write his class lists by hand because the school's printout is from last week. Walks into Form 5-B and they tell him 'sir, you don't teach us anymore.'

After

Mr John = Biology + Junior tier. The SST trigger blocks him from being assigned to Form 5. The mobile app shows his weekly grid, every roll-call, every conduct note.

The student — Adolphe

Before

He chose his subjects without seeing the rules. He drops Physics in October without realising it blocks his Engineering pathway. He finds out in May.

After

The picker advises live. Drop Physics, the panel flashes amber: 'pair_required — Engineering pathway needs Physics.' Adolphe re-checks before saving.

The eight pillars

Every claim has a proof trail.

Each pillar names the tables, RPCs, and migrations it leans on. If you bring an engineer to evaluate this platform, they can trace every claim back to the source.

The term-shape painter

Drag the boundaries of your year on a visual canvas. 3-term with half-terms, 2-semester with mid-term, polytechnic 4-block, or your own invention. Term holidays, working days, and the academic year's start/end all live in one record. Every other cluster reads from it.

Proof trail

academic_years × terms × term_shapes (00112), with working_day_for_class view that every attendance + payroll calculation pivots on.

Configurable

Three-term Cameroon GCE with February half-term + four-week summer break.

The teacher skill-map

Every teacher carries a precise scope. Mr John = Biology, junior tier. Madame Bila = Maths, all levels, primary programme. The schedule solver respects this. The SST trigger refuses assignments outside it. The HR HoD reviews the matrix each term.

Proof trail

staff_subjects + staff_programs + level_tier alignment + staff_qualification_reason() single-source helper called by SST INSERT + validate_period_placement + timetable_periods trigger (00407–00414).

Configurable

Restrict Mr John to Form 1–3 Bio + leave Madame Bila open to every level.

The subject rule engine

Ten rule types: must_include, must_exclude, mutually_exclusive, pair_required, min_count_in_group, max_count_in_group, age_gate, grade_gate, language_gate, capacity_gate. Four enforcement modes: block, warn_with_override, recommend, inform. Every rule carries a rationale ≥30 characters — no anonymous restrictions.

Proof trail

program_subject_rules (00183) + evaluate_student_subject_picks RPC (00644) called live by the admin + portal pickers. The advisory panel shows violations grouped by severity.

Configurable

Form 5 sciences must include Economics — rationale: 'so that scientists who switch in U6 still have a series.'

The constraint-satisfaction solver

One click. The whole school. Eleven hard constraints, ten soft scorers with weighted penalties. Parallel groups respected. Combined-group shared teacher rewrites. Permanence modes (fixed/partial/free) honoured. Live progress callback: 'Solving 47/120 needs… 12,003 candidates evaluated.'

Proof trail

@yess/timetable-solver/auto-schedule.ts + timetable_generation_runs observability log + onProgress callback (Trail-F7).

Configurable

Form 1–3 fixed in homeroom; Upper 6 partial (labs leave); university free (any room).

The CA-cap-aware compile engine

Schools declare their assessment structure per program: ca_only, ca_then_term, or ca_sequence_term. The CA percentage cap is enforced — CA contribution renormalises within its kind bucket so a teacher overweighting CA components doesn't blow past the school's cap. Term and year roll up by the school's chosen mode (mean, credit-weighted, best-n-of-m, custom-formula).

Proof trail

program_assessment_structure (00450) + exam_types.kind classifier (00453) + commit_term_compile_writes atomic dual upsert (00423) + compile_sequence_results CA-aware (00640) + populate_report_card_data sequence-aware (00642).

Configurable

Cameroon GCE: 30% CA + 70% sequence exam. UK A-Level: 100% term exam. Bachelor's degree: credit-weighted cumulative GPA.

The promotion engine

Year-end runs in one atomic RPC. Resolves each student's next class via their progression choice or the school's default. Inserts Year+1 enrolments, fires the auto-enrol-cores trigger on the new section. Retained students auto-route into the matching academic_recovery holiday class with their actual failed subjects. Exam-candidate years (Form 5 GCE, U6 A-Level) await external results.

Proof trail

execute_class_rollover RPC (00553) + auto_route_retained_to_recovery (00654) + classes.is_examination_class flag + class_progression_paths + student_progression_choices.

Configurable

Pass mark 50%, max 2 failed subjects, auto-promote toggle, recovery window per term.

Report cards in the parent's language

Six template families. Per-sequence card with CA + sequence exam columns, or per-term card with the rolled-up average. Multi-language render via the local-first translation pipeline ($0 API). Personalised by elective when the student's picks diverge from the section default.

Proof trail

report_card_templates + populate_report_card_data sequence-aware (00642) + canvas-design studio at /dashboard/report-cards/studio + translation pipeline (LibreTranslate primary, NLLB-200 fallback, Bergamot WASM offline).

Configurable

GCE template family, A-Level template family, custom canvas designer with the school crest watermark.

The cumulative QR-verified transcript

Frozen on graduation. HMAC-signed body, public verification URL via QR code. Universities scan the QR, the verify page confirms in 200 ms. Five years later, ten years later — the transcript still verifies.

Proof trail

transcripts (00223) + verify_transcript() RPC granted to anon + the public /verify/[number]/page.tsx route.

Configurable

School signature block, school motto in three languages, secondary logo for ministry letterhead.

The intelligence layer

The school doesn't wait for term-end to know.

Four signals recompute nightly across every student in the school. By morning, the counsellor inbox is lit with the names that matter.

At-risk early warning

Heuristic: attendance × grade slope × missed assignments × behaviour. Nightly recompute. Counsellor inbox lit when a student crosses thresholds.

Grade trajectory (EWMA)

Exponentially weighted moving average per subject. The next term's grade has a projected range before the term opens.

Subject-pair correlations

Pearson correlation across all section students. 'Students who score well in Bio also score well in Chem' — the dashboard shows the strength.

Teacher impact metrics

Cohort delta vs program baseline. When Madame Bila replaced Mr K, the average Maths grade moved +3.2 points in two terms.

Cross-cluster contracts

The spine other clusters lean on.

C1 isn't isolated. Every cluster that follows reads from its records — when an enrolment lands, when a class rolls over, when a report card is published, downstream triggers fire automatically.

Field trip (C12)
Consent + transport + fees

Trigger fires when a field trip is published. Parents get the consent form. The transport cluster reserves the bus. Finance raises the participation fee.

Holiday class (C1)
Invoice (C4)

Trigger fires when a student enrols in a paid holiday window. The finance engine creates the line item, the parent sees it on the next statement.

Conduct event (C2)
Report card (C1)

Conduct rows can be tagged as assessment components. The compile engine reads them as a CA source — the report card mentions discipline-as-a-grade.

Report card publish (C1)
Notification (C5)

Trigger inserts notifications for the student + every linked parent. The dispatcher sends via email / SMS / WhatsApp / push per the recipient's settings.

Built for your school

The platform bends to you — not the other way.

Three languages, one platform

Every label, every error, every report card. EN, FR, AR with full RTL. The translation pipeline is local-first — no API cost.

Multi-tenant by design

Single PostgreSQL database, row-level security on every table. JWT-bound school_id claim. One school's data is invisible to another at the engine.

Mobile + desktop parity

Web for the office. Expo native for teachers + parents + students. The same data, the right surface for the right hand.

We used to fight about the timetable for three weeks every August. Last August we declared the constraints on Friday afternoon, clicked Solve on Saturday, accepted it Sunday evening. The principal said the school year started on time for the first time in six years.

Vice-Principal, 28-section secondary school, North-West Region, Cameroon.

Where the school proves its standard

Academic Core is the cluster every other cluster leans on. Attendance reads from its timetable. Finance reads from its enrolments. Communication reads from its parent links. HR reads from its assignment matrix. C1 isn't a feature — it's the spine.