DSP-APP is the user interface for the DaSCH Service Platform — a software framework for storing, sharing, and working with primary resources and data in the humanities. It connects to DSP-API via DSP-JS and is released under the GNU Affero General Public License.
This monorepo is built on:
- Nx — See package.json for current version
- Angular — See package.json for current version
- Node.js — Version managed via .nvmrc
Use the Node.js version supported by the installed Angular version (compatibility table), or the version pinned in .nvmrc.
npm install
npm run start-local # app runs at http://localhost:4200Requires a running DSP-API backend. To start it locally:
# In the dsp-api repository
make init-db-test
make stack-without-appEvery PR that touches apps/dsp-app/src/ or libs/ gets an automatic live preview deployed to Google Cloud Run — the URL is posted as a PR comment. You can also trigger a preview for any branch manually via the PR Preview workflow. To publish a Docker image directly from any branch (e.g. for a hotfix), trigger the Publish from branch workflow manually.
Most common operations for daily development:
| Task | Command |
|---|---|
| Start local development | npm run start-local |
| Start with observability | npm run start-local-with-observability |
| Run tests | npm run test-local |
| Run all tests (CI mode) | npm run test-ci-all |
| Lint all libs w/o auto-fix | npm run lint-all |
| Lint all libs with auto-fix | npm run lint-fix-all |
| Open E2E tests UI | npm run e2e-local |
| Run E2E tests (headless) | npm run e2e-ci |
| Build for development | npm run build |
| Build for production | npm run build-prod |
| Generate test coverage | npm run unit-test-coverage |
| Browse all component stories | npm run storybook |
| Build static Storybook | npm run build-storybook |
| Run Storybook interaction tests | npm run test-storybook |
For all available commands, see package.json.
The monorepo contains multiple independently buildable libraries:
# Test, build, or lint a specific library
nx run [library-name]:test
nx run [library-name]:build
nx run [library-name]:lint
# Example
nx run vre-ui-date-picker:testNote: To run
nxcommands, install it globally (npm install -g nx) or usenpx nx.
Library path aliases are defined in tsconfig.base.json under paths. Main VRE libraries use the @dasch-swiss/vre/* namespace.
The TypeScript client for DSP-API is auto-generated from the OpenAPI spec:
npm run check-openapi-sync # Check if the generated client is up to date
npm run update-openapi # Update spec and regenerate client
npm run generate-openapi-module # Regenerate from the local spec onlyThe client is also regenerated automatically as part of npm install (via postinstall), so it stays in sync after dependency updates.
See OpenAPI Client README for full details.
Run a Grafana stack alongside the app to view Faro telemetry (logs, traces, Web Vitals):
npm run start-local-with-observabilityGrafana is available at http://localhost:3001 (credentials: admin/admin). Includes Loki (logs), Tempo (traces), and Mimir (metrics).
To stop: docker compose -f docker-compose.observability.yml down
A single global Storybook instance aggregates stories from all libraries and apps:
npm run storybook # Start dev server (http://localhost:4400)
npm run build-storybook # Build a static bundle to dist/storybook/
npm run test-storybook # Run story interaction tests (requires a running server)Stories are auto-discovered from any *.stories.ts file under libs/ or apps/ — no registration needed when adding new stories.
To report an issue or contribute, contact us at support@dasch.swiss.