MyPortal

An MIS that belongs to your school.

MyPortal is an information management system for UK schools — attendance, behaviour, exams, timetabling and reporting. It runs on your infrastructure, keeps data in your database, and is licensed so it cannot be withdrawn.

Open source AGPL v3 Self-hosted

The MyPortal staff interface, showing a class attendance register

Why open

An MIS holds everything a school knows about a child.

That is a good reason to be able to see how it works.

Nothing is held hostage

Your data sits in your own SQL Server, in a documented schema, on hardware you control. Migrating in or out is a database job, not a negotiation that starts ninety days before renewal.

Auditable by anyone you ask

An MIS holds safeguarding notes, SEND plans and behaviour records. Every line of code that touches them is public — readable by your DPO, your governors, or an independent reviewer, without an NDA.

A licence that stays open

AGPL v3. Anyone who builds on MyPortal and offers it as a service has to publish their changes under the same terms. The openness is structural, not a phase before an acquisition.

Modules

The whole school day, modelled properly.

Each module stands on its own, and every one of them shares a single permission model, a single audit trail, and a single source of truth.

  • Attendance

    Statutory session and lesson marks, registers, and absence follow-up.

  • Behaviour

    Incidents, sanctions, achievements, and the reporting behind them.

  • Exams

    Entries, seating, access arrangements, and results.

  • Assessment

    Marksheets, grade sets, and progress tracking across a cohort.

  • Curriculum & timetabling

    Subjects, classes, teaching groups, and the school timetable.

  • Students

    Registrations, contacts, addresses, and the full pupil record.

  • Staff

    Employment records, roles, and the permissions that follow them.

  • SEND

    Provisions, plans, and the review cycle around them.

  • Profiles & reporting

    Report cycles, comment banks, and published reports.

  • Admissions

    Applications, offers, and the route from applicant to on-roll.

  • Documents

    Attachments and file storage bound to the records they belong to.

  • Administration

    School configuration, academic years, terms, and system settings.

Architecture

Boring technology, deliberately.

None of this is exotic. A school IT team should be able to read the stack, host it, back it up, and restore it without learning a new ecosystem first.

How it fits together
Backend
ASP.NET Core 8 Web API C#, long-term support release
Frontend
Angular 20 SPA Staff, students and parents, role-routed
Database
SQL Server 2019+ Versioned migrations, further providers planned
Auth
OAuth 2.0 / OpenID Connect Bring your own identity provider

Project status

Under active development. Not ready for live school data.

Core services and the foundational modules are in place, and the rest is being built out iteratively. MyPortal should not be running a real school yet. If you want to evaluate it, stand it up against test data — and tell us what breaks.

Get it running

Four commands to a local instance.

You need the .NET 8 SDK, Node 20 or newer, and a SQL Server instance you can create databases on.

  1. Clone the repository

    git clone https://github.com/MyPortalEdu/MyPortal.git
    cd MyPortal
  2. Point it at a database

    dotnet user-secrets set "Database:ConnectionString" \
      "Server=.;Database=MyPortal;Trusted_Connection=True;TrustServerCertificate=True" \
      --project MyPortal.Migrations
  3. Create the schema

    dotnet run --project MyPortal.Migrations
  4. Run the API and the SPA

    dotnet run --project MyPortal.WebApi
    npm start --prefix MyPortal.Frontend/myportal-spa

The full walkthrough, including HTTPS and dev certificates, is in the getting started guide.

This needs people who know schools.

The useful contributions here aren't only code. UK education domain modelling, deployment tooling, documentation and UI work all move this forward. Open an issue or a discussion before starting anything substantial, so we can agree the direction first.