Maganin: the network that outlived its platform
An Arabic mental-health network migrated from classic ASP and Angular to Next.js 15 with a Java API, every legacy URL redirected, on hosting the owner can run.

Maganin is an Arabic-language socio-mental-health network: articles, consultancies, doctor profiles and categories, read right to left by people looking for help. Its content had outlived two platforms. The public site ran on classic ASP with .asp addresses that search engines had indexed for years; the admin ran on Angular 10 over a JHipster API; a Heroku deployment nobody wanted to keep paying for sat in between. The 2026 rebuild moved the whole network onto Next.js 15 for the public site and doctor and admin surfaces, a Java 21 and Quarkus 3 API over MySQL 8.4, and one Docker Compose deployment behind Caddy on a VPS, with every old address still resolving.
The client
Maganin, which means the mad ones in Arabic and wears the name with intent, is a socio-mental-health network: long-form articles, a directory of consultancies and the doctors behind them, and categories that let a reader find the right kind of help. It had been publishing since before the current site existed, and the value was the archive.
What we found
Three platforms in one business. The public site was classic ASP with .asp addresses indexed for years. The admin was an Angular 10 application over a JHipster-generated Java API, 37 commits between 2021 and 2022, with a Heroku app in the middle. Nobody could safely change the public site, and the admin's framework was two major versions behind. The content, and the links pointing at it, were the asset; everything around them was the liability.
The decision
Keep the domain model and the data. Replace the surfaces. The entities that mattered, articles, content, categories, consultancies and consultancy types, moved unchanged into a Java 21 and Quarkus 3 API with Flyway migrations, so the archive came across intact. The public site, the doctor surface and the admin were rebuilt on Next.js 15, right to left from the root element, with the API's anonymous reads serving articles, consultancies, doctors and categories.
The addresses
A publishing site's addresses are its inbound links. Every old .asp route, including the content and consultancy views, is redirected in Next.js middleware to its new home, and the URL clean-up scripts in the migration folder rewrite the links the old platform had left inside the content itself. The old host stays up for ninety days after cutover so nothing that was missed goes dark.
Running it
One Docker Compose deployment on a VPS: the API jar, MySQL 8.4 restored from the archived dump, and Caddy issuing TLS automatically. A daily dump cron writes backups outside the containers, health lives at a management endpoint, and secrets are copied from an example file and never committed. The runbook is eleven numbered steps the owner can read: build, configure, bring up, restore, verify each page type, lower the DNS TTL a day before, switch, keep the old host, decommission Heroku, schedule the backup.
What is not claimed
The rebuild is engineering, and it is written up as engineering. No traffic or ranking result is claimed for Maganin; the checkpoint against the archived baseline has not closed. What can be said is that the archive is on a maintained platform, the addresses work, and the owner can publish.
Key Features
- Content model kept: articles, consultancies, doctors, categories and consultancy types, migrated with their history
- Next.js 15 App Router public site, right to left from the root element, with anonymous reads on articles, consultancies, doctors and categories
- Java 21 and Quarkus 3 REST API with Hibernate Panache, Flyway migrations, JWT security, caching, OpenAPI, and Micrometer health and metrics
- Legacy .asp URLs, including content and consultancy views, redirected in middleware so years of inbound links keep working
- Database restore from the archived dump with URL clean-up scripts for the links the old platform left inside the content
- Docker Compose with Caddy automatic TLS on a VPS, a daily MySQL dump cron, and secrets kept out of the repository
- A written cutover runbook: staging demo to the owner, DNS TTL lowered a day before, the old host kept 90 days, the Heroku app decommissioned
Business Impact
The network's owner can keep publishing on a platform that is maintained, on hosting that costs what a VPS costs, without losing the addresses readers and search engines already know. The migration is told here as an engineering story because that is what it was: no traffic or ranking figure is claimed, and the measurement window against the archived baseline has not closed.
Send the domain. We diagnose before we quote.
Stuck on a platform that cannot be maintained but whose URLs still carry the business? Send the domain. You get the crawl, the URL inventory and a straight answer on whether to migrate.
Prefer to talk? Message us on WhatsApp