Web portal for managing company onboarding. It includes a public registration form and an OIDC-protected admin panel for reviewing and approving submissions.
| Layer | Technologies |
|---|---|
| Frontend | Angular 21, Angular Material, RxJS, Vitest |
| Backend | Node.js 22, Express 5, TypeORM, TypeScript 5.9 |
| Database | PostgreSQL (default), MS SQL and MongoDB supported |
| Authentication | OpenID Connect, Keycloak |
| Nodemailer | |
| Infrastructure | Docker, Helm / Kubernetes |
├── backend/ # REST API (Express + TypeScript)
│ ├── src/
│ │ ├── controller/ # Endpoints
│ │ ├── service/ # Business logic
│ │ ├── entity/ # TypeORM entities
│ │ ├── repository/ # Data access layer
│ │ ├── middleware/ # Auth, CORS, file upload
│ │ └── config/ # application.default.yaml
│ └── templates/ # Email templates (HTML)
├── frontend/ # Angular SPA
│ └── src/app/
│ └── features/
│ ├── landing/ # Home page
│ ├── submit/ # Registration form
│ └── admin/ # Admin panel
├── chart/ # Helm chart for Kubernetes
├── .github/workflows/ # CI/CD (GitHub Actions)
└── Dockerfile # Multi-stage build
- Node.js >= 22
- pnpm >= 10
- PostgreSQL (or another supported database)
cd backend
pnpm install
pnpm run devThe server starts at http://localhost:8080.
cd frontend
pnpm install
pnpm startThe application starts at http://localhost:4200.
Configuration is managed through YAML files with environment variable support (${VAR_NAME}).
- Defaults:
backend/src/config/application.default.yaml - Override:
config/application.yaml(merged on top of the defaults)
| Area | Description |
|---|---|
server |
Port (8080), CORS, storage folder, max file size (5 MB) |
database |
Type, host, port, credentials, database name |
app.login |
OpenID URL, client ID/secret, PKCE |
app.keycloak |
Keycloak admin credentials |
email |
SMTP, submission and update templates |
The frontend must be built before building the image (CI handles this via .github/scripts/build.sh):
cd frontend && pnpm install && pnpm build && cd ..
docker build -t onboarding:latest .docker run -p 8080:8080 \
-e APP_DB_HOST=db \
-e APP_DB_USERNAME=postgres \
-e APP_DB_PASSWORD=secret \
onboarding:latesthelm install onboarding ./chart -f custom-values.yamlSee chart/README.md and chart/values.yaml for all available options.
| Endpoint | Description |
|---|---|
GET /health/live |
Liveness — always returns 200 |
GET /health/ready |
Readiness — checks database connection |
MIT