Sajjad Mahessar Good Merch Group Free audit
~/sajjad $ cat projects/hr-system ← cd ../projects Systems

Multi-company HR system

Live · Oct 2026Replaced paid HR platform

One HR system for five companies, replacing a paid platform. Pick the company, sign in with that company’s login, pass an authenticator check — then staff records, right to work, contracts and payroll details, all in one place. Documents go in by dropping files, not by typing.

Type
Web app
Category
Systems
Built with
JavaScript · Supabase · PostgreSQL + RLS · TOTP two-step · Private storage · Netlify
Project
7 of 37
FOUR GATES BEFORE A SINGLE RECORD 1 · PICKcompany 2 · LOGINper company 3 · 2-STEPauthenticator 4 · ONLYits staff FIVE COMPANIES · ONE DATABASE · NO CROSS-READING DOCUMENTS IN A PRIVATE STORE · SIGNED LINKS ONLY NEW COMPANIES ADDED WITHOUT CODE CHANGES
No record is visible until the second factor has passed

What it replaced, and why

The group ran HR on a paid platform priced per company. Every new company meant another subscription, and none of it connected to the staff app or the payroll export the accountant actually uses.

One system now covers every company in the group, with new ones added from settings rather than another contract. It holds the HR record and produces the payroll export; it deliberately does not run payroll.

What it holds

  • Right to work with share codes and expiry, flagged on the front page when action is needed.
  • Contracts and signed documents on labelled tiles per person.
  • The payroll details the accountant needs — bank, pension and NI — behind the same two-step gate as everything else.
  • Leavers kept on file rather than deleted, because records have to outlive employment.

No manual data entry

Typing hundreds of records and documents into forms is how errors get in. So the filename is the form: staff-ref__document-type__date__title. Drop one file and it lands on the right person; drop the whole import folder and a manifest files every document across every company.

The check date is separate from the upload date, so an ID checked at a trial shift months ago is recorded as checked then — which is the date an inspector asks for. Imports skip files already loaded, so re-running one is safe.

Security

  • Separate login per company, as the old platform did, so access follows employment rather than a shared password.
  • An authenticator app is required before any record is visible — set up once at first login with a QR code.
  • Documents in a private storage bucket, served by short-lived signed links only.
  • Row-level security in the database, so the browser can’t ask for another company’s staff even by hand.
Client system

Workforce & compliance system for a security company

Compliance, rotas and invoicing for security

JavaScriptSupabasePostgreSQLRow-level security
No charge

I’ll find the money before you pay me anything.

Send me your software subscriptions and I’ll come back with what’s replaceable and what it’s worth — free, and yours to keep either way. How it works →

Contact

Want the same done to your cost base?

Open to operations, automation and technical operations roles — and to talking with anyone running a multi-site business who suspects they're paying for software they could own instead.