iKidz English — Homepage of the kids' English academy, migrated to its own server
166 Blog posts migrated
875 301 redirects, zero broken links
23 App activities rescued
8,438 Emails migrated, 0 lost

The challenge: three pieces, three places and a ticking clock

iKidz English is an English academy in Torrejón de Ardoz with programmes for children, teenagers and adults, a franchise model and a decade of its own educational content. Its online presence had grown in layers, each one on its own:

  • The corporate websiteIt lived on an old hosting plan due to auto-renew within days. Visiting it over "https" showed a security warning and another company's website, the contact and franchise forms sent nothing, and the menu button to the app led to a dead page.
  • The "Vamos Creciendo" blogTen years of posts on a different domain and a different host, with links spread across the internet for years. The provider would not even let them export the database.
  • iKidz Space, the students' appIts server replied "no such app", the Android app was gone from Google Play and all that was left of the original software was the code, without a single record.
  • EmailThe academy's mailboxes lived on the same hosting plan that was about to expire.

And one clear condition from the very first email: the design stays. They were happy with their website, so the job was to change everything underneath without it showing on the surface.

What I built

1. A server of their own, and the same website rebuilt inside

  • A cloud server in the academy's namenginx, PHP 8.3 and MariaDB, with a firewall, fail2ban and auto-renewing Let's Encrypt HTTPS. The client pays for and controls the hosting directly: it does not depend on me.
  • The six pages rebuilt in PHP, with the same URLsShared header, menu and footer, compared screenshot by screenshot with the originals: same look and same addresses, so not a single Google ranking was lost.
  • Homepage from 4,001 KB to 1,902 KB, and zero third-party requestsFonts and the cookie notice are served from the academy's own server, with no Google Fonts or external CDNs. On a children's website with its own privacy policy, that matters.
  • Forms rewritten from scratchMessages reach the inbox and are also stored in the panel and in a separate file, in case an email gets lost or lands in spam.
  • Accessibility and analytics28 photos with alt text written by looking at each one, and Google Analytics 4 connected: the old analytics had not measured anything since 2023.

2. The blog: ten years of content without losing a single link

  • Full export through the WordPress REST APIThe host would not allow an export, so everything came out through the API: 166 posts, 3 pages, 706 categories and tags, 737 comments and 2,414 files (812 MB), counted and checked one by one.
  • Custom importer into editable blocksEvery post becomes blocks the team can edit. Verified that re-saving any of them produces exactly the same HTML: 166 out of 166.
  • 875 301 redirects, in a single hopEvery old link goes straight to its post on the new domain, which is what preserves the rankings. Old images and the RSS feed still answer at their usual addresses.
  • A post listing that finally looks goodA photo on 164 of 166 posts (almost none had a featured image, so the first image in the text is used), share buttons that load no trackers and YouTube videos in no-cookie mode.

3. iKidz Space: the students' app, brought back to life in the browser

  • Rebuilt in PHP, in the same panelIt shares the database with the website, lives on its own subdomain and is managed from the same backoffice as the blog.
  • All 23 original activities, without recompiling anythingThey are HTML5 games from 2017 built for an Android app. A JavaScript bridge gives them what the native app used to provide, and they run in any browser. All 23 tested in a real Chrome, with zero errors.
  • Secure session-based accessEach child only sees and saves their own work. Three-hour sessions so progress is not lost mid-class, and a brute-force brake that does not lock out a whole class going online through the same connection.
  • Students, invitations and progressStudent sign-up with an email invitation to the family (two addresses allowed), activity-by-activity progress tracking and control over which activities are visible and in what order.
  • No analytics in the children's areaA design decision: their browsing never leaves the academy's server.

4. Children's Day Map, rescued (and un-expired)

  • An orphaned app, back homeThe public 2014 app linked from the blog had been left homeless: its original domain redirected to an ad network and it was no longer on the App Store or Google Play. It is now served from the academy's own domain, depending on no one.
  • Expired since 2024, and fixedIt only accepted the years 2014 to 2023, so since 1 January 2024 it was impossible to get past the first screen. I patched the 2014 code to move the calendar to 2021-2030, with new illustrations and the year audio generated with AI from the original voice.

5. Email, moved without losing a single message

  • 4 mailboxes and 8,438 emailsInbox, sent, drafts and folders, with their dates, plus 80 contacts, moved to a new email host.
  • A switch with no gapsThe move from one mail server to the other was planned so nothing would be lost in transit, and the domain's anti-spam configuration, which had an error that voided it, was fixed.

6. A panel so the academy can run it on its own

  • Custom backofficeHomepage editable by sections, pages, a block-based blog editor, an image library that automatically slims down phone photos and strips their location, form messages, students, activities, users and settings.
  • Security built inPasswords hashed with Argon2id, CSRF protection on every form and sanitisation of all published HTML.
  • Safety netIf the database does not respond, the pages keep being served. Daily backups in several locations, tested by actually restoring them.
  • Handover manual in PDFSo the team can change texts, photos, posts and access without calling anyone.

The result

Website, blog and app now live under one domain, on a server owned by the academy and managed from a single panel, with the same design as always. Nothing was lost along the way: not a post, a photo, an email or a link, and everything was counted one by one to prove it.

Hosting went from around 650 dollars a year to under €100 (roughly €500 saved every year) on a considerably more powerful machine. Along the way, about ten inherited bugs nobody had spotted were fixed, from forms that never sent to a 2016 promotion still showing on mobile.

Some screenshots

Website and blog, on every device

iKidz Space, Day Map and the panel

Stack

PHP 8.3 (no framework) MariaDB nginx Hetzner Cloud Let's Encrypt Custom backoffice TinyMCE WordPress migration (REST API) 301 redirects Phaser (HTML5 games) IMAP email migration Automated backups ElevenLabs (AI voice) Google Analytics 4

Client website: ikidzenglish.com — English academy in Torrejón de Ardoz.

Are your website, blog or app scattered and out of your control? Take a look at my custom web development service.

Is your website stuck on hosting you don't control, or full of dead parts?

I'll tell you what's there, what can be saved and how to bring it all to a place you own without losing content or rankings. First review with no commitment and a fixed written quote.

Let's talk about your site →

Need to sort out and rescue your website?

Lossless migrations, custom PHP and panels your team can use on its own. 30-min discovery call, no commitment.

Book a free 30-min call