Web dashboard
/dashboard and the module routes beside it. Oriented at HR and management: recruiting,
employee master data, payroll, organization — plus functions everyone needs, like feedback,
surveys and decisions.Web portal
/portal. Self-service for applicants and employees: applications, onboarding, contracts,
certificates, compensation, time and absence.iOS app
SSO-only employee self-service — leave, sick leave, time tracking and the payslip. It consumes
the versioned portal API.
One identity for the whole relationship
A person is oneUser row for life. There is no separate applicant or candidate
record. An applicant is a User with role APPLICANT; on hire, an Employee row is
attached to the same user, and every artefact — applications, notes, references,
contracts, certificates, compensation — continues to hang off that one identity.
This is ADR-011, and it is why the platform can carry a person
from a job ad to a work certificate without re-keying anything.
Because identity is continuous, so is the audit trail: a hire’s application history and their
employment history are the same person’s history.
What each surface shows
1 The portal shows an applicant their own applications only.
2 Time tracking and staff absence are dashboard-group routes that employees also reach,
which is why an employee may see dashboard chrome around them.
Portal gating
The portal decides what to show from facts about the person, not from a role scalar:- The presence of an
Employeerecord unlocks contracts, certificates, and “Lohn & Einstufung”. - An open
PersonalDataFormunlocks the onboarding section. - “Meine Bewerbungen” is applicant-appropriate and always available.
Authentication per surface
The iOS app is SSO-only by decision — a mobile client holding a long-lived magic-link
session is a materially worse credential story than a token from the identity
provider.