Deeve Technologies
Client workWeb Application

Payroll & HRIS, Multi-Tenant Laravel App

A multi-tenant payroll and HRIS application built with Laravel, using subdomain-based tenancy so each company gets an isolated workspace for employees, payroll runs, and HR records.

ClientDeeve Technologies
RoleFull-stack developer
Year2026
TypeWeb Application
Updated23 Sep 2026
PJL 1
Overview

A payroll and HR information system on Laravel with true multi-tenancy. Each client company runs on its own subdomain with fully isolated data.

Deployed and running in production.

Built with
BladeLaravelMySQLStancl/Tenancy
The problem

What was in the way

Payroll is the least forgiving category of business software.

It is legally sensitive. It runs to a deadline every cycle, and the deadline does not move. And one company seeing another company's salary data is not a bug you recover from, commercially or legally.

Multi-tenancy therefore has to be correct from the first migration. Retrofitting isolation into a live payroll system is close to a rebuild, because every query, every export and every report has to be re-audited, while the system continues to run payroll fortnightly.

The tempting shortcut is a company_id column on every table and a discipline of always filtering on it. That works until the one query somebody writes in a hurry, or the one report that joins two tables and forgets, or the one background job that runs without tenant context. The failure is silent and the blast radius is total.

What I built

Five parts, each with a reason

Tenant isolation through Stancl/Tenancy

Each client company gets genuinely isolated data rather than a shared table and a convention.

The difference matters. With a shared table, isolation depends on every developer remembering, forever. With real tenancy, the isolation is structural: a query that forgets the tenant does not return another company's rows, it returns nothing.

That turns a catastrophic failure mode into an obvious one.

Subdomain routing per tenant

Each tenant reaches the system on its own subdomain.

The boundary is visible in the URL as well as in the database. An HR administrator can see which company they are operating on, which matters when somebody administers more than one.

Where this architecture applies

Anything where separate customers share one deployment but must never share data. Payroll, accounting, healthcare records, property management.

If your product has companies as customers rather than individuals, tenancy is the decision to get right before anything else is built. It is the one architectural choice that is genuinely expensive to change later.

Employee records, payroll processing and HR workflows

The day to day operation, built to be run by non-technical HR staff rather than by whoever understands the system.

Payroll software is used under time pressure by people who did not choose it. Anything requiring interpretation gets done wrong at 4pm on a cutoff day.

Tenant-aware migrations and seeding

Onboarding a new company is a repeatable command rather than a manual database exercise.

This is the operational half of tenancy and it is the part usually missed. Isolation that requires a developer to provision each new tenant by hand does not scale past about three customers.

How it was built

The engineering underneath

LaravelBlade and MySQL, with Tailwind CSS for styling, deployed to production
Stancl/TenancyMulti-tenancy, so each client company runs on its own subdomain with isolated data
LivewireThe interactive interfaces, without a second front end to deploy

Laravel with Blade and MySQL, Stancl/Tenancy for multi-tenancy, Livewire for the interactive interfaces, Tailwind CSS for styling. Deployed to production.

Why Laravel

Laravel earns its place here rather than being a default.

Queues for payroll runs that cannot block a request. Migrations that make schema change safe across many tenant databases. Auth scaffolding that does not need to be invented. And a mature tenancy package that has already solved the problems a hand-rolled implementation discovers in production.

The wider argument is legibility. Payroll software outlives the person who wrote it. A Laravel codebase can be picked up by the next developer, because the conventions are documented and widely known. A bespoke framework cannot, and for a system a business depends on monthly, that is a real risk rather than a preference.

BladeLaravelMySQLStancl/Tenancy
More work

Projects like this

All projects
Why it matters for your project

I build software, and I measure whether it works.

The same questions I research are the ones I ask on client builds: is it reliable, is it fast, is it easy to use, and is it secure. Those four drove satisfaction in my ICT portal study, and they shape how I scope and test every project.