Worklog for task "Migrate the website to a new engine"

28 сент. 2026 г., 13:20:46

Legacy baseline launched locally

Managed to get the old pivkarta.ru running locally — Docker really helped preserve reproducibility even years later. At the same time, it became very clear how large a historical layer has accumulated in the current architecture.

Some characteristic baseline components:

  • build image: mhart/alpine-node:10 — Node.js 10;
  • Docker Compose 3.7;
  • prismagraphql/prisma:1.15.3 (Prisma 1) as a separate service between the application and the DB;
  • MySQL 5.7;
  • separate front and api containers from a common old prisma-cms;
  • separate pivkarta.ru-2 frontend;
  • phpMyAdmin;
  • custom Caddy proxy;
  • MailHog;
  • separate rtcmultyconnection;
  • Coturn with STUN/TURN infrastructure.

That is, this is no longer just a task of updating a few npm packages: we have a solid, real-world brownfield with layers of solutions from different years and a large amount of infrastructure, some of which may turn out to be necessary, and some — historical baggage.

For the HAIH experiment, this is especially useful. We will not mechanically migrate this zoo to modern versions. The old project becomes a source of requirements and behavioral baseline, rather than a specification for the new architecture. For each layer, we need to figure out: what real capability does it provide now, is it needed by pivkarta.ru today, and what minimal verifiable solution satisfies this requirement.

The first planned new vertical slice remains simple: keep the existing MySQL as a legacy persistence boundary and go through React → Apollo/codegen → GraphQL/Pothos → Knex → existing MySQL. This will allow starting to displace the old system with working verticals, without starting with a risky data migration and without carrying over Prisma 1 just because it is present in the legacy.

Related HAIH experiment: haih.site and task «Develop and launch the website». Current pivkarta.ru task: /tasks/cmqqxckd3003zp50up0dmzbld.

23.06.2026