Module: constants/activityTypes

Single source of truth for activities.type literals — imported by both the backend (backend/src/...) and the frontend (frontend/src/..., via a relative path that climbs into backend/).

Lives under backend/src/ rather than a repo-root shared/ directory because the backend Docker image only copies backend/ — a sibling shared/ would break the container build. The frontend already reaches into backend/ via server.fs.allow: ['..'] in frontend/vite.config.js, so cross-side import is unaffected.

Imperative <entity>.<verb> (test.approve, not test.approved).

Source: