All projects
Case study: Oyoun Academy

Two weeks to a working demo. Then a multi-tenant Laravel SaaS.

Oyoun Academy is a training and talent development platform for companies. I was assigned as Team Lead while the project was behind schedule, with two weeks to present a working platform to the HR leaders of an entire company group. We made it, and the platform went on to serve corporate clients across the Middle East.

Role
Team Lead
Team
9 people
Architecture
Database per tenant
Stack
Laravel, React, AWS
Oyoun Academy
2 weeks
To a working demo for the HR leaders of the APIC group
10+
Corporate-group academies onboarded in the first year
10,000+
Trainees in the first year
1 DB
Per tenant, so each company’s data stays isolated

The challenge

When I was assigned as Team Lead, the project was already late. Management wanted a working platform in two weeks, to present to the HR leaders of every company in APIC, the group that owns Oyoun Media.

This was before AI coding assistants. Two weeks meant a team of nine, a clear plan, and long days.

The two weeks

The team worked more than 14 hours a day to hit the date. The presentation to the group’s HR leaders was a success, and it got the project out of its bottleneck.

From there things got easier. The platform started winning clients outside the group, with companies across the Middle East, including Jordan and Turkey, training their teams on it.

The hard decision: one database or one per tenant

Every client is a company with its own employees, courses, and reports. We had to choose between a single shared database, where every query is scoped by tenant, and a separate database for each tenant.

A single database is simpler to run, but one missed scope can expose one company’s data to another. A database per tenant keeps each company’s data fully separate and makes per-client backups and restores straightforward, at the cost of running migrations and operations across many databases.

We chose a database per tenant, built on Tenancy for Laravel and its multi-tenant SaaS boilerplate. Each academy gets its own subdomain; the request’s domain identifies the tenant, switches the database connection, and keeps cache, files, and queues separate. A central sign-in finds a user’s academy from their email.

What we built

Branded academies

Each company gets its own academy on a subdomain, with its logo, announcements, and a bilingual Arabic and English portal with full RTL.

Learning paths and Coursera

Learning paths by skill area and a course catalog integrated with Coursera, so approved learners enroll in Coursera courses sponsored by their academy.

Approval workflows

Enrollment requests use keys and go through Team Lead and HR approval, with notifications for accepted and rejected requests.

Tracking and reports

Learner dashboards with performance and risk trackers, plus enrollment, course, and learner reports for HR.

Access management and billing

Custom roles, HR and learner views that one user can switch between, and subscription plans with billing.

How we worked

Once the demo was behind us, I focused on making the team faster and the codebase easier to grow.

  • A clearer communication channel for the team, so decisions and blockers stopped getting lost.
  • CI/CD with GitHub Actions instead of manual releases.
  • A cleaner project architecture that follows Laravel best practices.
  • A React frontend with Arabic and English support from day one.

The team

A team of nine that I led through planning, code reviews, and delivery:

  • Team Lead (me): architecture, planning, code review, and delivery.
  • Four Laravel developers.
  • Two React developers.
  • A UI/UX designer.
  • Two QA engineers.

Results

In its first year, Oyoun Academy onboarded more than 10 corporate-group academies and more than 10,000 trainees. It is still live at oyoun.academy.

Inside the platform

Tenant login branded for APIC
Tenant login branded for APIC
HR view: managing learning paths
HR view: managing learning paths
Course details with multilingual content
Course details with multilingual content
Enrollment waiting for Team Lead and HR approval
Enrollment waiting for Team Lead and HR approval
Course on Coursera, sponsored by Oyoun Academy
Course on Coursera, sponsored by Oyoun Academy

See it live

Need a multi-tenant Laravel platform?

I have built and led SaaS platforms where every client’s data has to stay separate. Tell me about yours.

Get in touch