Full-stack LEXIS application for log export workflows.
| Component | Technology |
|---|---|
| Frontend | React 19, TypeScript, Carbon Design System |
| Backend | Spring Boot 3.5, Java 21 |
| Database | Oracle (shared, BC Gov-managed) |
| Auth | AWS Cognito (FAM) |
| Reports | JasperReports library |
Two supported ways to run LEXIS locally. Pick whichever fits your workflow.
| Option A - direct on host | Option B - Docker Compose | |
|---|---|---|
| Backend hot reload | Manual restart | Manual restart |
| Frontend hot reload (Vite HMR) | Yes | Yes |
| First-time setup cost | Install Java 21 + Node 22 on host | Just Docker Desktop |
| Best for | Day-to-day backend/frontend work | Quick smoke tests, frontend-only work, and container parity |
Both options share the same prerequisites and property files below. Reports use the checked-in JRXML templates in the Spring Boot backend.
- Network access to the BC Gov Oracle environment. Compose cannot route that for you.
- Maven 3.9+ and Java 21 (Option A only). The repo has no Maven wrapper.
- Node 22+ (Option A only).
- Docker Desktop (Option B only).
These files are gitignored and stay local.
Activated by the Spring local profile. Holds Oracle credentials, Cognito issuer/userinfo URIs, IDIR base URL, and TRUSTSTORE_PATH. Obtain these values through approved team channels and keep them out of git.
For Option B, Compose overrides TRUSTSTORE_PATH inside Docker to /app/src/main/resources/cert/jssecacerts; no local edit is needed for the container path.
Java keystore containing the trusted CA chain for the Oracle TLS connection. Obtain it through approved team channels and keep it out of git.
Copy frontend/.env.example and fill in the Cognito client values. Vite inlines these values into the app bundle, so restart npm run dev after changing .env.
Run the backend and frontend in separate terminal tabs.
Backend:
cd backend
mvn -DskipTests spring-boot:run -Dspring-boot.run.profiles=local,oraclePort check:
nc -z localhost 8080Frontend:
cd frontend
npm ci
npm run devFrontend: http://localhost:3000
docker compose up # foreground; Ctrl-C to stop
docker compose up -d # detached
docker compose down # stop containers, keep cache
docker compose down -v # stop + drop the Maven cache volume
docker compose logs -f backendServices:
backend->localhost:8080(Spring Boot viamvn spring-boot:runinsidemaven:3.9.9-amazoncorretto-21-alpine).frontend->localhost:3000(Vite vianpm run devinsidenode:22-alpine).
First up downloads Maven dependencies into the maven-cache named volume. Subsequent starts are faster.
An optional production-like frontend variant is on the caddy profile:
docker compose --profile caddy up caddy backendThat builds the real frontend/Dockerfile and serves it at localhost:3005.
- If you Ctrl-C mid dependency download, Maven can leave partial files in
maven-cache. Fix withdocker compose down -v && docker compose up. - The backend is not hot-reloading. Java changes need
docker compose restart backend. - HMR uses WebSocket from your browser to
localhost:3000. If you remap the published port, also overrideVITE_HMR_PORTindocker-compose.yml.
Regardless of option:
nc -z localhost 8080succeeds once the backend port is listening.- Open
http://localhost:3000and complete the Cognito login round trip.
If the backend starts but authenticated API calls fail, check network access, application-local.yml credentials, Cognito config, and the truststore path.
The Regression GitHub Actions workflow runs weekly and manually against TEST. It currently reads
TEST IDIR credentials from GitHub test environment secrets and passes the masked values into the
npm run e2e:regression command. Business BCeID browser regression is intentionally not scheduled
because repeated automated login attempts can lock the TEST account. See
frontend/e2e/README.md for the required GitHub environment secrets.
- backend/README.md - Spring profile reference, env-var table, API areas, test commands.
- frontend/README.md - Vite scripts, env-var table, project structure, testing libraries.