I help people who own a product or run a company take a PHP backend off the product and replace it with Node.js or Python.
GitHub: @ypingmoe
- You have your own project, or you run the company that owns it
- The backend is PHP: a custom app, Laravel, Symfony, WordPress, or another PHP CMS
- PHP2Shell (CVE-2026-109618 and CVE-2026-109619) made you want that backend on Node.js or Python
The work is the move to Node.js or Python.
| Engagement | What you leave with | Time |
|---|---|---|
| Migration plan | A map of the PHP backend and a written plan onto Node.js or Python | About 1 week |
| Pilot | One real feature of your product running on the new backend, on the same site | About 2–4 weeks |
| Full move | The rest of the backend moved, and PHP removed from the product | Scoped after the pilot |
You choose one new runtime. Node.js uses Fastify. Python uses FastAPI.
The site stays on its current address. PHP keeps serving only the routes that have not moved yet. Each finished route is switched to the new service. When the last product route has moved, PHP is removed.
┌─────────────┐
customers ────►│ your site │
└──────┬──────┘
│ one path at a time
┌───────────┴───────────┐
▼ ▼
┌─────────────┐ ┌──────────────┐
│ PHP │ │ Node.js or │
│ (leaving) │ │ Python │
└─────────────┘ └──────┬───────┘
│
┌──────▼───────┐
│ Postgres │
└──────────────┘
- Write down what one PHP route does.
- Build that route in Fastify or FastAPI.
- Send only that path to the new service.
- Check it against the contract.
- Repeat until customers are talking only to Node.js or Python.
- Remove PHP from the product.
Details: ADR-002 and the migration playbook.
| Path | Purpose |
|---|---|
| research/why-owners-leave-php.md | Why owners with a PHP backend are moving |
| packages/contracts/API.md | Example product API: accounts, content, uploads |
| docs/migration-playbook.md | The order of work on a client project |
| docs/adr | Node.js vs Python, and how the cutover works |
| ai-workflow | How I use current AI models, and what I check before shipping |
The example product is accounts, content, and file upload. The same contract is the target for both Node.js and Python.
| Concern | Node.js | Python |
|---|---|---|
| HTTP | Fastify | FastAPI |
| Contract | One shared API catalog | Same catalog |
| Data | Postgres | Same schema |
| Auth | Short-lived access token, rotating refresh cookie | Same |
| Uploads | Size cap, allowed types, private storage | Same |
The runtime choice for a real company is in ADR-001.
I use current models to draft migration notes, API handlers, and tests. I ship a change after I have reviewed it and the tests pass. The method is in ai-workflow.
Tell me what the product does, that the backend is PHP, and whether you want Node.js or Python.
- Exploit code and attack demos
- PHP maintenance and PHP upgrades
- Testing systems you do not own
php2shell php to node php to python php migration nodejs python fastify fastapi backend founders