Skip to main content

Development setup

npm install
cp .env.example .env # point PUBLIC_TRITON_API_URL at your backend
npm run dev # http://localhost:5173

A running OpenProcessor backend (OpenSearch + the curation API, served under PUBLIC_API_PREFIX) is required for the app to do anything useful — there is no local database or mock-data mode.

Building the Docker image from source​

docker-compose.yml only pulls the published image. To run your own build instead, add the build overlay (it tags the result cropwright-dev:local, so it never overwrites a pulled image):

docker compose -f docker-compose.yml -f docker-compose.dev.yml --profile cropwright up -d --build cropwright

Before opening a PR​

npm run check # svelte-check + tsc, strict mode, must be 0 errors
npm run lint # prettier + eslint
npm test # vitest
npm run build # production build must succeed

CI runs the same four, plus the stubbed Playwright suite (npm run test:e2e) and a gitleaks secret scan.

Conventions​

See frontend/CLAUDE.md for the authoritative reference on architecture (SvelteKit 3, Svelte 5 runes only), the route table, keyboard shortcut reservations, and style (2-space indent, dark theme only, no emoji, no gradients, Apple system colors only). If you change a route, a keyboard shortcut, or add a feature flag, update CLAUDE.md's tables in the same PR.