Module
One portal covering an employee’s attendance, leave, payslips and pay, timesheets, tasks and projects, documents, profile, meetings, and the internal job board.
What this solves
Count the questions an HR team answers in a week that the employee could have answered themselves if the data were visible to them. Leave balance. Last payslip. Which documents are on file. What is assigned to them. Whether their timesheet went through.
Every one of those is a round trip: a message, a context switch, a lookup, a reply. The information already exists and already belongs to the person asking. The only reason it is a conversation is that nobody gave them a screen.
The employee portal is that screen. It is also the reason the help desk works — the questions that remain are the ones that genuinely need a person.
What is included
Clock in and out, see the current state, and read their own attendance history with late flags and shifts.
Request leave, see the outcome, and read the current balance without asking anyone for the number.
Payslips as PDFs, with the salary breakdown on the document, in whichever format matches where they are paid.
Submit the week, attach supporting files, allocate hours to a project or client, and see the approval state.
The tasks assigned to them and the projects they are on, without needing access to every board in the workspace.
The documents on file for them, and their own profile details.
Meetings they are invited to, from the shared organization calendar.
Openings posted inside the organization, so a move can happen internally before a role goes public.
The portal shows an employee their own records. Not their team’s, not a colleague’s with a similar name, not another organization’s. That is not a filter on a query; it is Row Level Security in Postgres, enforced on every table.
The product’s isolation tests cover exactly this case against a real database: employee-to-employee isolation inside one organization, cross-organization reads and writes in both directions, and direct access by id with no filter at all. The boundary holds for a query nobody thought to filter, which is the only kind of boundary worth having.
Employees are created by the organization and never self-signup, so the set of people who can reach your workspace is a set you built deliberately. Deactivate someone and the access is gone immediately — re-checked from the database on the next request rather than trusted from their existing session.
Employee portal shares its records with the rest of the workspace, so these modules read the same data rather than a copy of it.
Sign your organization up, configure your timezone and brand color, and invite your team. You can be running the same day.