Rifat Academy: Modernize a legacy LMS without treating migration as cleanup.

Rifat Academy

Rifat Academy LMS interface

Rifat Academy’s rebuild was not only a new interface. The existing WordPress/MariaDB LMS contained production data and account history that had to move into a custom application, while authentication and deployment had to work at cutover.

Next.jsNode/ExpressMongoDBMariaDB migration

The problem

Rifat Academy already had a learning platform with records and accounts in a legacy WordPress/MariaDB setup. Moving to a custom application meant dealing with that existing material, not treating the work as a blank-slate UI project.

The parts a visitor cannot see in a screenshot were just as important: data transition, access to the new system and production readiness.

The constraint

Migration and authentication could not be deferred until the new interface was finished. The transition had to account for the old database and the behavior users depended on.

I also want to keep this case evidence-led. I can describe the checks performed, but I cannot responsibly promise zero lost records or state a performance multiplier that was not independently established.

The decision

The modernization moved to a Next.js application with Node/Express services and MongoDB, with the legacy WordPress/MariaDB records treated as an explicit migration source.

The new code, data transition, authentication checks and deployment path were related parts of the same job. Shipping one without checking the others would have left the move incomplete.

What I owned

My engineering scope covered the custom application, required migration work, admin/student authentication checks and production-serving setup. The implementation path included Nginx/HTTPS, PM2 and GitHub Actions.

This is a description of the technical work and checks, not a claim about user growth, course sales or the client's overall business results.

What I implemented

  • Built the custom Next.js application backed by Node/Express and MongoDB.

  • Moved required records from the WordPress/MariaDB system into the new data model.

  • Compared key migrated collection counts during verification.

  • Checked administrator and student authentication after the transition.

  • Configured production serving using Nginx and HTTPS.

  • Used PM2 and GitHub Actions in the deployment workflow.

How I verified it

The migration work was checked against key collection counts, authentication was exercised for administrator and student access, and the custom application was verified through its HTTPS production path.

Those are meaningful acceptance checks. They are not a comprehensive public audit of every historical record, and I am not describing them as one.

What this project demonstrates

A platform migration is not complete just because the new homepage opens. The data needs somewhere reliable to go, accounts need to work and the application needs a production delivery path.

That mix of code, migration and verification is what I consider the core of this project.

Planning a rebuild where the old data and production behavior still matter?

Send the current stack, the records or workflows that cannot be lost, and what the new system needs to support.