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.





