Skip to content

Projects · Platform

PixieShift

Multi-tenant rostering, leave, open shifts, labor cost and payroll for restaurants, hotels, retail and events.

A paper roster clipped to a restaurant rail in warm light

PixieShift is the weekly operating system of a shift business. A manager builds the week, publishes it, and the same record is what the employee sees, what the kiosk clocks against, and what payroll finalizes. Nothing is retyped between those steps.

Solutions

  • The week, in one roster

    A person-by-week grid with drag and drop. Skills, approved leave and inactive people are hinted on the cell. A pending invite can be placed. Someone who has logged in and then been deactivated cannot. Approved leave days render as leave, not as an empty shift.

  • Publish, then the other side moves

    Copy this week forward, or last week into this one. On a clash, skip the shift or leave it open. Publishing notifies the team. An event request can generate shifts and publish the ones nobody is on yet.

  • Labor against sales

    Daily sales arrive as a CSV or from the point of sale. The week’s labor percentage is calculated from the published roster and those sales, so the cost of the schedule is visible before the week is over.

  • Staff do their own paperwork

    Open shifts are claimed, swaps are requested, leave is filed, and clock-in, clock-out and breaks are recorded, including a kiosk PIN. The employee can read their own payroll summary without asking the office.

  • Payroll that starts from the roster

    A payroll run previews, lists the lines, then finalizes to CSV. QuickBooks or Xero can be connected when the books live there. Tips and breaks sit in a logbook next to the shift, not in a second spreadsheet.

  • Hiring on the same tenant

    A job post has a public apply page. The roster can already hold a person who has been invited and has not accepted yet, so hiring and the week are not two products.

Process

  1. 01

    Create

    A shift, a leave request, an open-shift claim or a payroll run is written once, against the tenant, the location and the person.

  2. 02

    See

    The manager sees it on the roster or in the queue. The employee sees the published week, not the draft.

  3. 03

    Approve or publish

    Leave waits for approval. An open shift waits for a manager. A week is explicit about whether it has been published.

  4. 04

    The other side updates

    Approved leave appears on the roster as leave. A claimed open shift leaves the open pool. Point-of-sale sales enter the labor percentage. Finalized payroll is the CSV, not a second entry.

Technology

  • Five applications, one API

    The API is Express on Node 22, under /api/v1. The tenant console, the platform admin and the marketing site are separate front ends. The employee app is Expo. End-to-end tests cover auth and the critical screens with Playwright.

  • Postgres, Redis, and a memory fallback

    PostgreSQL 16 holds the tenant data. Migrations are numbered SQL files applied in order. Redis is the shared cache and rate-limit store. If Redis is down, the API falls back to an in-memory limiter so a local demo still runs.

  • Two session shapes

    The browser keeps the refresh token in an httpOnly cookie and sends credentials. The mobile app still posts the token in the JSON body. Login attempts from one IP lock for fifteen minutes.

  • Rules that are not hardcoded to one city

    Location and department rules can be overridden. Turkish overtime and the New York Fair Workweek package are both in the rule set, so the same roster engine serves more than one labor law.

  • What the platform admin is allowed to do

    Tenant health, impersonation, an IP allowlist, the audit log, plans and invoices. Billing can go through Polar. Slack is a webhook. The integration catalog is a list, not a hidden coupling.

  • Node 22
  • Express
  • PostgreSQL 16
  • Redis
  • Expo
  • Playwright