Deployment model: single-tenant
Every customer runs their own Azure environment — App Service, PostgreSQL Flexible Server, Blob Storage, and Key Vault. There is no shared database and no cross-customer data path. Multi-tenant is explicitly out of scope. Practical consequences:- Data residency is per customer. Swiss deployments run in Switzerland North.
- Configuration, feature flags, and integrations are per installation.
- Upgrades are per environment, so a customer can sit on a version while another moves.
- Within one installation there may still be multiple legal employers — see Legal entities.
Technology
Module structure
Features live insrc/modules/{module}/ and expose a single public contract:
index.ts is module-internal. Cross-module calls go through
the contract, never into another module’s services/ directly. This is
ADR-004.
Shared, cross-cutting code lives in src/lib/ — authentication and RBAC, audit
logging, the Prisma client singleton, storage, e-mail, Graph, crypto, and the Swiss
helpers (cantons, AHV numbers, address and phone normalisation).
Modules at a glance
Recruitment
Positions, pipeline, interviews, references, talent pools, job distribution.
Employee lifecycle
Employment periods, leave, sick leave, holidays, on/offboarding.
Pre-boarding
The journey between “offer accepted” and “first day”.
Contracts
Templates, placeholder variables, generation, e-signature.
Certificates
Arbeitszeugnis, Zwischenzeugnis, Arbeitsbestätigung.
Probation
Reflective meeting companion and questionnaires.
Time tracking
Entries, weekly summaries, ArG break compliance.
Payroll
Monthly Lohnabrechnung engine and year-end declarations.
Bexio
Payroll-employee sync into bexio.
Compensation
Role catalog, salary bands, dated assignments.
Salary visibility
Masking and hand-picked salary access grants.
Budgeting
Five budgeting methods, forecasts, proposals.
Expenses
Receipt OCR, Swiss categories, two-level approval.
Feedback
Cycles, continuous feedback, growth journeys, team vitality.
Surveys
Anonymous employee surveys with k-anonymity.
Decision making
Consent, advice process, systemic consensus, dot voting.
Workflows
The visual engine behind approvals and checklists.
Semantic search
Embeddings, sentiment, event history, reasoning.
Document intelligence
Vectorless, reasoning-based retrieval over long documents.
Observability
Structured logging and Application Insights correlation.
Organization
Locations, teams, and the manager graph.
Reports
Cross-module reporting and exports.
Notifications
In-app inbox and subscription preferences.
How modules talk to each other
Modules communicate through an in-process event bus (src/lib/events/), not by
reaching into each other:
{module}.{entity}.{action}. The pre-boarding orchestrator is the
clearest example: it listens for personal-data submission, document upload, and
contract signature, and advances the journey without those modules knowing it exists.
This is ADR-005.