Case study · Education technology · Gulf
The developer left. The platform stayed.
Noqta.tv sells bilingual video courses across the Gulf — on a custom-coded platform nobody could extend after its original developer moved on. We rebuilt it on an architecture the client owns, moved the entire student base across without anyone losing access, made Arabic a genuinely equal language rather than a translation, and gave leadership a commercial dashboard that had never existed. January 2026, ongoing.

01
The situation
Noqta.tv teaches structured video courses to an Arabic- and English-speaking audience across the Gulf — roughly fifteen courses, sold as five thematic bundles plus one all-access bundle.
The business ran on a custom-coded learning platform built without a long-term architecture. It worked, in the way such systems work: right up until the day it needed to change.
Then the original developer became unavailable. Every new requirement stalled. Arabic students got a worse experience than English students. Years of student records — purchases, enrollments, course progress — sat locked in a database with no clean export path.
And leadership could not answer basic commercial questions. What sold this month. Where buyers came from. Which courses students actually finished. Which paying customers had never opened a lesson.
02
The diagnosis
This was not a website problem, and a redesign would have fixed nothing.
The platform had a single point of failure — one developer's availability — and that point had already failed. Every other symptom followed from it: the frozen roadmap, the second-class Arabic experience, the trapped data, the reporting void.
The brief we set was structural: rebuild on a foundation the client owns and any competent developer can maintain, and move the entire student base across without a single person losing a course they had paid for.
03
The rebuild
We moved Noqta.tv to WordPress with Tutor LMS Pro as the learning engine, WPML for bilingual content, and WooCommerce doing one job only — cart and checkout — so course logic and pricing live in one system instead of being duplicated across two.
The client's team had a clear vision for how the platform should look and feel; we brought that design to life on a foundation they can now change themselves — no more paying a developer for every adjustment.
The commercial model was rebuilt around the bundles rather than individual courses. That one decision shaped everything downstream: how access is granted, how the student dashboard is organised, and how revenue is reported.
The platform choice was deliberate. Off-the-shelf, widely supported components mean Noqta.tv is never again dependent on one person's availability — the failure mode that created this engagement was designed out first.

04
Making Arabic equal, not translated
This was the hardest engineering problem in the engagement, and the part most teams underestimate.
Out of the box, a translated course is simply a different course. A student who buys in English does not own the Arabic version. A student who completes a lesson in Arabic still shows zero progress in English. For an audience that switches languages mid-course, that is a broken product.
We built a synchronisation layer that keeps both language versions of every course in lockstep:
- Purchase sync — buying in one language grants access in both
- Membership sync — bundle memberships mirror across languages
- Lesson-level progress sync — completing a lesson propagates to its translation
- Completion and certificate sync — finishing a course marks the translated version complete and issues the certificate correctly
- Retroactive repair — an admin tool that back-fills sync for students whose progress predates the layer
Midway through, Tutor LMS shipped a major version that moved progress tracking into new database tables, and the sync logic silently stopped working. Rather than guess, we wrote a database diagnostic that mapped exactly where the new version stores progress, then rebuilt the sync against the real schema.
That is the difference between a fix that holds and a fix that fails quietly three weeks later.
05
Moving the student base without breaking it
A prior import had brought over the first tranche of students. We moved the full historical student base — every account, every purchase, every enrollment — directly into a live production database.
The approach was deliberately conservative:
- Scripts split into three parts, so no single operation could time out
- Idempotent by design — safe to re-run without creating duplicates
- Scoped strictly to student data; site appearance and plugins untouched
- Pre-import verification queries, with a hard stop if the database state did not match expectations
- Post-import spot checks on individual records, in both languages
Students kept their original passwords, their purchase history, and their place in every course.
We also fixed the product where it was actually breaking: all-access buyers now land on a dashboard organised by bundle in a deliberate learning sequence instead of an unordered wall of courses; completed courses carry a working certificate button wired to the platform's native mechanism; and the Arabic mobile dashboard had its right-to-left overflow bug diagnosed element by element and eliminated.

06
What leadership can see now
The final piece was visibility. We built a native analytics dashboard directly into the platform — no external BI tool, no export step, no subscription — reading live from the production database, presented bilingually in a right-to-left-aware interface.
It reports in three layers: an overview of revenue, orders, students, enrollments and completions for any period; sales intelligence covering daily revenue trend, revenue by country, top bundles, traffic sources, coupon performance, customer lifetime value, failed-payment rate and device split; and student intelligence — including the single most actionable retention signal on the platform, a list of paying students who have never started a lesson.
Two engineering details make the numbers trustworthy. Bundle reporting resolves what each bundle actually contains — including the master bundle that nests the other five — with a diagnostics panel so it can be debugged without a developer. And a hard data floor separates months of build-period test transactions from live trading, with every affected view labelled, so no one ever misreads a test order as revenue.
Alongside the dashboard, we built the platform's student-discount integration in-house rather than licensing a third-party plugin: a purpose-built WooCommerce extension for the Unipal verification platform, fully bilingual, brand-styled, handling the complete transaction lifecycle. The client owns the code outright and pays nothing annually.
07
The result
Noqta.tv now runs on a platform it owns and can extend.
The team went from blind on their own data to fully in control: a dashboard shows what sold, where buyers came from, which courses land, and which paying customers are drifting before they churn. The full historical student base is inside the new system with purchases and progress intact. Arabic and English are genuinely equal — same access, same progress, same certificates. Performance issues that had pushed server response beyond acceptable levels were traced to root causes in the logs and resolved.
Every custom component — the sync layer, the discount integration, the dashboard — is code the client owns, with no recurring licence and no dependency on a developer who might not be reachable next year.
The failure mode that created this engagement was designed out on purpose.
How we measured this
Migration completeness was verified by pre-import checks and post-import spot checks on individual student records, in both languages. Student and enrollment counts are the client's confidential information and are not published.
Language parity is verifiable in the product. Access, lesson progress and certificates mirror across Arabic and English by mechanism, not by policy.
No absolute revenue figures appear on this page. Noqta.tv's revenue, order volumes and customer data are confidential commercial information. This is the standard we apply to every client.
The engagement is ongoing. This page describes work completed between January 2026 and the time of writing; it will be updated as the engagement develops.
Questions, answered
- Why rebuild on WordPress instead of writing custom code again?
-
Custom code is what created the problem — a platform only one person could maintain. WordPress, Tutor LMS and WooCommerce are supported by thousands of developers. The custom work we did add is scoped, documented, and owned by the client, sitting on top of a foundation anyone competent can service.
- What happens when a student switches languages mid-course?
-
Nothing — which is the point. Purchase, progress and completion mirror across both languages automatically. A lesson finished in Arabic is finished in English, and the certificate issues correctly either way.
- Did any student lose access during the migration?
-
No. The import was verified before it ran, checked after it ran, and built to be safely re-runnable. Students kept their passwords, purchase history, and position in every course.
- Why build the discount integration instead of buying the existing plugin?
-
The third-party plugin was a black box: no Arabic, no right-to-left support, no brand styling, and an annual fee for code the client would never control. The underlying API is small. Building it in-house cost less over any horizon longer than a year and left the client owning the result.
- Who owns the custom components?
-
Noqta.tv, outright — the sync layer, the discount plugin, and the analytics dashboard. No licence fees, no lock-in to us or anyone else.
Scope of work
- Platform architecture
- WordPress & Tutor LMS Pro engineering
- Bilingual (Arabic/English) product engineering & RTL design
- Legacy data migration
- Custom WordPress & WooCommerce plugin development
- Third-party API integration
- Payment gateway configuration
- Performance auditing & remediation
- Analytics dashboard development
- Ongoing platform maintenance