docs: readme, schnellstart, bebilderte anleitung und changelog 0.1.0

QUICKSTART fuehrt von null zur laufenden Instanz und enthaelt die
vollstaendige Nginx-Proxy-Manager-Konfiguration - inklusive der beiden
Stellen, an denen es sonst klemmt: client_max_body_size fuer grosse
Anleitungs-PDFs und X-Forwarded-For fuer das Rate-Limit.

Die Anleitung ist bebildert. Die 16 Screenshots entstehen automatisiert
mit `pnpm screenshots` gegen das Produktions-Image im Container, nicht
gegen den Dev-Server: der brach unter Last reproduzierbar mit
ChunkLoadError ab, und die Bilder zeigen so ohnehin genau das, was nach
`docker compose up` zu sehen ist.

Nebenbei behoben: in der Mehrfachauswahl verdeckte die Aktionsleiste die
letzte Kachelreihe.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
unknown
2026-09-07 00:48:32 +02:00
co-authored by Claude Opus 5
parent 61b1249afd
commit b1fc502d55
27 changed files with 573 additions and 87 deletions
+21 -12
View File
@@ -1,23 +1,31 @@
import path from 'node:path';
import { defineConfig, devices } from '@playwright/test';
/**
* Produces the screenshots for docs/ANLEITUNG.md.
*
* Kept apart from the smoke test on purpose: this run needs seeded example
* data and writes files into the repository, which a test never should.
* Runs against the production container, not the dev server: the dev server
* compiles routes on demand, which made the capture run flaky, and the manual
* should show exactly what a user gets after `docker compose up`.
*
* pnpm screenshots
*/
const PORT = 3220;
const BASE_URL = `http://localhost:${PORT}`;
// Docker wants forward slashes, also on Windows.
const dataDir = path.resolve(process.cwd(), 'data-shots').replace(/\\/g, '/');
export default defineConfig({
testDir: './e2e',
testMatch: 'screenshots.spec.ts',
globalSetup: './e2e/screenshots-setup.ts',
fullyParallel: false,
workers: 1,
timeout: 240_000,
// The run registers a user, so a second attempt would start from a state
// that no longer matches the script.
retries: 0,
timeout: 300_000,
expect: { timeout: 30_000 },
reporter: 'list',
use: {
baseURL: BASE_URL,
@@ -27,18 +35,19 @@ export default defineConfig({
...devices['Pixel 7'],
},
webServer: {
command: `pnpm exec next dev -p ${PORT}`,
command: [
'docker run --rm --name bricktrack-shots',
`-p ${PORT}:3000`,
`-e BASE_URL=${BASE_URL}`,
'-e BETTER_AUTH_SECRET=screenshot-run-secret-0123456789abcdefgh',
'-e TZ=Europe/Berlin',
`-v "${dataDir}:/data"`,
'bricktrack:shots',
].join(' '),
url: `${BASE_URL}/api/health`,
reuseExistingServer: false,
timeout: 180_000,
stdout: 'pipe',
stderr: 'pipe',
env: {
NODE_ENV: 'development',
DATA_DIR: './data-shots',
BASE_URL,
BETTER_AUTH_SECRET: 'screenshot-run-secret-0123456789abcdefgh',
MAX_UPLOAD_MB: '25',
},
},
});