IbnKhafagah for Development SINCE 2018
E‑Invoicing & FinTech

Certificate Verification Platform

A verification API for professional certificates: accreditors, companies, candidates, certificates and activities, built on lookup tables that extend without a schema change every time.

  • Delivered 2022
  • Our role Data model and API build
11 MIGRATIONS

Overview

Issues and verifies accredited certificates: accreditors and companies, candidates and activities, and a unique verification code any third party can check.

01The challenge

Verifying a certificate has to be instant and definitive: was it actually issued, to whom, by which accreditor, and is it still valid? The problem is that certificate types, activities and statuses keep changing, so hard-coding them as columns means a schema change for every new type.

02What we built

We modelled the changing values as two-level lookup tables (lookup master and lookup detail): a type is defined as a row, not a column, so adding a certificate type, status or activity is data entry rather than a migration.

The core entities are clear and connected: an accreditor accredits a certificate, a certificate belongs to a candidate, a candidate belongs to a company, and an activity records what happened — so verification is one query that returns the whole picture.

03The outcome

Verification became a single API endpoint any party can call, and extending certificate types and statuses no longer needs a release.

What the system does

The modules that were delivered and put into daily use.

  • 01

    Connected entities: accreditors, companies, candidates, certificates and recorded activities.

  • 02

    Two-level lookup tables that allow new types and statuses as data rather than schema changes.

  • 03

    A verification API returning a certificate’s validity, its holder and its accreditor.

  • 04

    User and permission management with Sanctum-based authentication.

Technologies used

What this system is actually built on — not a generic list.

Core

Laravel 9 PHP 8 MySQL

Interfaces

REST API Sanctum