How I moved a school website from WordPress to Next.js
When I was asked to look at the Udaya Public School website, it ran on WordPress and it was a mess. I ended up moving the school website from WordPress to Next.js instead of fixing it, and it was live in time for the 2026-27 admission season.
This is how that went, what I'd do the same way again, and what the school has added since.
What was wrong with the old WordPress site?
Too many plugins, heavy files and nobody holding the keys. Documents and photos had been uploaded at several MB each, so pages took a long time to load. Visually it was still living in the early 2010s.
Getting in was its own problem. The employees who used to manage it had left, and the people who replaced them hadn't bothered to get access. Before I could fix anything, I had to work out who could even log in.
Why not just fix the WordPress site?
I tried, for about a week, and it was one dead end after another. Every fix ran into a plugin, a theme setting or an upload that nobody could explain.
So I sat down with the school management and proposed a full rebuild. I said I could do it in a couple of weeks, and that it would cover most of what they needed from a website:
- a proper digital presence for the school
- admission campaigns with a good landing page to send them to
- one place to keep information for current students and give it out
- a way to collect fees online
They agreed, and I started with what was already there.
How do you plan a school website rebuild?
Start from what the school already says about itself, then decide what to build first. I audited the old site and pulled out all the content and categories the school still needed. Then I took the brochures the school had printed over the years.
All of that went into Google NotebookLM. I kept asking it questions and refining the answers until I had a list of things to build first.
The main decision came out of that list. Admissions would be the main call to action on every page, and everything else would be built around it: academics, sports, and the things that happen at the school beyond academics.
How did I settle on the design?
By looking at a lot of other people's work first. I spent countless hours on Pinterest and Dribbble until I knew the direction I wanted. Then I used Google Stitch to generate the final look. Claude didn't have its design tools yet.
I showed the school management, got a tentative yes, and built it.
What does moving a school website from WordPress to Next.js involve?
For Udaya, it meant rebuilding the site on a codebase I control and connecting it to the systems the school already used. Roughly, in order:
- Audit the old site and keep only the content and categories that are still needed.
- Decide the one thing the site is for (admissions, here) and plan the pages around it.
- Lock the design before writing code.
- Build the pages in Next.js, statically rendered so they load fast.
- Connect payments and accounts. Admission fees go through a Zoho Payments checkout, and Zoho Books issues the receipt.
- Launch the ad campaigns and landing pages alongside the site.
The site now has 22 public pages and an admin portal for staff. It runs on Next.js on Cloud Run behind Firebase Hosting, with Firestore holding the content. Every change runs Lighthouse before it ships and has to score at least 0.90 on performance and 1.00 on SEO, so it can't slowly get heavy again the way the old one did.
The full list of what I built is in the Udaya Public School case study.
The payment gateway was the scramble. I had it set up just in time, along with the ad campaigns and landing pages, before admissions opened.
Will parents in a smaller city actually apply online?
Yes. Udaya got 25% more applications that season than the year before, when everything was done offline.
There was plenty of pushback first. The view was that people in Ayodhya wouldn't want to do these things online and would rather do them the old way. Within about four months that argument had mostly gone away.
People like not having to take time out of their day to go somewhere, stand in a line and get it done in person. That turned out to be true wherever they live.
How does AI help run the school website now?
Through two MCP servers, and a person signs off on everything either of them does. An MCP server is a small program that lets an AI assistant work on the site through a short list of tools, and nothing else.
The first runs the blog. Posts are drafted by AI, then a person at the school reviews and approves each one before it goes live. When a post is published, it also shows up in the school's Zoho People feed, so teachers can see it without checking the site.
The second runs UG opportunities. It's a page where the school lists the dates and details of as many entrance tests as it can find, for its class 12 students. The colleague who proposed it does the research in ChatGPT, looking up admission dates and college sites.
At first they had to put all of that into a spreadsheet and bulk upload it to the site's backend. So I sat down with them and built an MCP server that connects to ChatGPT and lets it add, edit or delete entries on the list directly. It asks a person to confirm before it changes anything. The school treats that list as critical, so the check stays.
I wrote about how an MCP server for website content works using my own site as the example. The school's servers work the same way, with more people involved.
The other change is that new features are now just work on a codebase. Nobody has to hunt for a plugin that does almost the right thing. Since launch, the school has also added an anonymous section where teachers and students can register complaints or suggestions.
What started as a one-off contract has become a regular retainer, because more of the staff use the site and keep asking for new things.
What's next for the site?
Data protection, then admissions again. I'm working on bringing the site in line with India's Digital Personal Data Protection Act. Its rules were notified in November 2025 with an 18-month phased compliance period, which ends in May 2027. A school website that takes admission forms and fee payments holds a lot of personal data about children and parents, so this one matters.
After that, I'll start on the next admissions campaign by December.
Frequently asked questions
How long does it take to move a school website off WordPress?
I quoted the school a couple of weeks for the rebuild. The planning, design and content audit came first, and the site was live in time for the 2026-27 admission season. A site with less to carry over, or no payments, would be quicker.
Can a school collect fees through its own website?
Yes. On the Udaya site, parents pay through a Zoho Payments checkout, and a successful payment issues a receipt from Zoho Books and records the application for the office. If your school already uses an accounting system, it's worth connecting to that rather than adding a separate one.
Do I lose my old content when I leave WordPress?
Only what you choose to leave behind. I audited the old site, kept the content and categories the school still needed, and added material from its printed brochures. A move is a good moment to drop what nobody reads.
Do school staff need to be technical to run the new site?
No. Staff work in an admin portal where each person sees only their own module, like the admissions desk or the blog editors. Blog posts and UG opportunities are updated by AI and approved by a person, so nobody has to write code or fill in spreadsheets to keep the site current.
If your school or business is stuck on a WordPress site that's hard to change, have a look at what I do and tell me what you're working with.