PM2 was restarting at 512MB while Sharp cached buffers, which returned 502 to the migrate UI after categories had already succeeded. Co-authored-by: Cursor <cursoragent@cursor.com>
NestJS backend with Prisma, Docker Compose for Postgres/Redis, and deploy docs for the production VM.