Advanced

Running without Docker, changing the code, adding languages — for those going deeper.

Docker is the recommended path — one command, few surprises. This chapter condenses the two bundled guides for every other case; the full versions ship in the archive as docs/manual-install.md and docs/self-build.md.

Running without Docker

You need Node.js 20.9+ (tested on 22), pnpm 10.33.0, PostgreSQL 14+ and a reverse proxy. The core:

Install, migrate, build
pnpm install --frozen-lockfile
pnpm exec prisma migrate deploy
pnpm build
  • Reverse proxy: response buffering off (downloads stream through the app), large request bodies allowed (product uploads) and the visitor’s address passed on (X-Forwarded-For — otherwise every visitor shares one rate limit).
  • Run it as a service: adopt the systemd unit from docs/manual-install.md.

Changing the code

  • Edit → cd docker && docker compose --env-file ../.env up -d --build. Without --build the old image keeps running — the classic “why is nothing happening” trap.
  • For more than one-liners: pnpm dev locally — seconds per round instead of minutes.
  • Three things are generated and must never be edited by hand: the Prisma client, the theme/module registries, next-env.d.ts.
  • The build enforces security rules (five checks): among them, every admin action and every admin API route needs a role check. A violation fails the build — on purpose.
  • src/core/theme/types.ts and src/core/modules/types.ts are frozen — purchased themes depend on them.

Adding a language

  1. 1

    Copy messages/en.json to messages/<code>.json and translate it

  2. 2

    Add the code to LOCALES in src/core/i18n/routing.ts

  3. 3

    Rebuild

    The locale list resolves at compile time — the file alone is not enough. A test catches incomplete translations before a raw key reaches a customer.