# Operations Guide (Dev, Texts, Testing, Deployment) ## Where do I update texts? ### 1) UI texts (recommended default) - **English**: `messages/en.json` - **Deutsch**: `messages/de.json` These are loaded via `next-intl` and are the source of truth for **labels, headings, buttons, validation messages** etc. ### 2) Page content via CMS (optional overrides) Some sections support a CMS override via `/api/content/page` (falls back to `messages/*` automatically): - `home-hero` - `home-about` - `home-contact` If your DB/CMS tables are not available, the site will **not crash** and will keep showing the `messages/*` content. ## Local development ### Requirements - Node.js 18+ - Docker (optional but recommended for DB/Redis) ### Install ```bash npm ci ``` ### Run (recommended) ```bash npm run dev ``` ### Run without Docker (no DB/Redis) ```bash npm run dev:simple ``` ### Run plain Next.js dev server ```bash npm run dev:next ``` ### Environment Copy `env.example` → `.env.local` and adjust. ## Testing ### Unit tests (Jest) ```bash npm run test ``` ### E2E tests (Playwright) ```bash npm run test:e2e ``` ### Useful subsets ```bash npm run test:hydration npm run test:critical ``` ## Deployment overview ### Branches - `dev` → staging/dev environment - `production` → live environment Deployments are driven by CI workflows in `.gitea/workflows/`. ### Health checks - `/api/health` ## Nginx Proxy Manager (high level) Create proxy hosts for your domains pointing to the respective ports. If you see `421 Misdirected Request`, make sure the reverse proxy forwards `Host` properly and consider forcing `proxy_http_version 1.1`. ## Gitea variables/secrets (high level) Minimum required secrets/variables depend on which features you enable, but typical production/staging need: - Base URLs (per environment) - Admin auth/session secrets - Email credentials - Optional n8n webhook secret/token ## Troubleshooting ### “docker compose not found” Use `npm run dev:simple` or install Docker. ### Prisma migrations / existing DB If you introduce migrations into an existing DB, baseline/resolve the initial migration once to avoid “table already exists” issues.