← Portfolio

Case study /01

ShiftPick — the rota, without the group chat

Shift management for multi-site teams. Rotas are published once, staff claim what suits them, and nobody can book onto work they are not cleared for.

Build
In-house product
Sector
Workforce management
Year
2026
Type
Web platform

The challenge /01

Most rotas are run out of a group chat.

A manager posts the week’s shifts into a message thread. Three people reply at once claiming the same slot. Somebody’s certification lapsed two months ago and nobody noticed. The rota gets edited, reposted, and now two versions are circulating.

The failure is not scheduling — it is that the rota has no single authoritative copy, and no idea who is actually cleared to work each role.

Our approach /02

Publish once. Let the team self-serve against permissions.

Shifts are published a single time to one list that everyone reads from. Staff claim what suits them rather than waiting to be assigned, which removes the manager from the middle of every swap and cover request.

Permissions do the safety work. People only see shifts they are cleared for, and clearance comes from documents an admin has actually reviewed — not from a checkbox someone ticked about themselves.

The product /03

ShiftPick — sign in

ShiftPick sign-in screen with the product promise on the left and the sign-in form on the right
Entry point. The value proposition sits beside the form rather than on a separate marketing page — three supporting points explain the permission model before anyone signs up.

ShiftPick — create account

Account creation form with a document upload field for ID, right to work or certification
Vetting at the door. Registration collects ID, right-to-work or certification documents and holds the account for admin review before any shift becomes visible.

ShiftPick — assistant

ShiftPick AI assistant panel offering to sign in as an employee or continue as a guest
Assistant, two modes. Guests get general answers; signed-in staff get answers scoped to their own record, with their employee number passed into the model’s context.

What we built /04

A working platform on a database that enforces its own rules.

  • Three permission tiers, so staff only ever see shifts matching their clearance
  • Document review workflow — accounts stay pending until an admin approves the upload
  • Shift claiming with a waitlist, so full shifts still capture demand
  • Peer-to-peer shift swaps settled by a one-time swap code and completed by a database trigger
  • Availability records, so managers publish against what people can actually work
  • Announcements broadcast to the whole team from one place
  • Auto-issued employee numbers via a database trigger
  • Embedded AI assistant with guest and authenticated modes

Swap execution and permissions live in Postgres as row-level security policies and triggers rather than in client code. A user cannot claim a shift they are not cleared for even if they call the API directly.

Key capabilities /05

3 Permission tiers governing what each person can see and claim
RLS Access rules enforced in the database, not just the interface
Swap codes One-time codes so shift handovers settle without a manager
Zero build Ships as static files — no pipeline, no deploy tooling to maintain

Tech stack /06

  • React 18
  • Tailwind CSS
  • Supabase (Postgres)
  • Row-level security
  • Database triggers
  • REST API
  • OpenRouter

Similar problem to solve?
Start with an audit.

Book an Audit