VIA helps clinicians rule candidate genetic variants in or out by comparing them against All of Us's full participant cohort, optionally filtered by phenotype (HPO term) — no coding required. It runs as a custom app in the All of Us Verily Researcher Workbench.
This repo contains the app's frontend (ui/, TypeScript + React) and backend (api/, Java + Spring Boot), as well as the deployment configuration required to run the application in Verily Workbench (deploy/, startupscript/).
ui/- React + TypeScript app (Vite).api/- Java + Spring Boot app, built with Gradle. The API is defined API-first inapi/src/main/resources/openapi/api.yaml(server interfaces and models are generated from it at build time).deploy/- Packaging for this app as a Verily Workbench custom app; see its README for how it combines the frontend and backend into a single container.startupscript/- VM provisioning scripts run via the devcontainer'spostCreateCommand/postStartCommand; see its README for why this lives at the repo root instead of underdeploy/.
Run the backend and frontend separately, with Vite proxying /api calls to the
backend (see ui/vite.config.ts):
# terminal 1
cd api && ./gradlew bootRun
# terminal 2
cd ui && npm install && npm run devOpen the URL Vite prints (default http://localhost:5173).
To see a real value from GET /api/profile locally, export WORKBENCH_USER_EMAIL
before starting the backend, e.g. WORKBENCH_USER_EMAIL=you@example.org ./gradlew bootRun.
With the backend running, Swagger UI is at http://localhost:8080/swagger-ui, and
the raw spec it reads is at http://localhost:8080/openapi/api.yaml.
In Workbench, the frontend and backend are packaged into a single container on one port (Spring Boot serves the built frontend as static resources, so there's no CORS or reverse proxy to configure). To build and run that image locally:
docker network create app-network # first time only
WORKBENCH_USER_EMAIL=you@example.org SKIP_WORKBENCH_WAIT=true docker compose -f deploy/docker-compose.yaml up --buildThen open http://localhost:8080.