Projects · Platform
PixieShift

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
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.
02
See
The manager sees it on the roster or in the queue. The employee sees the published week, not the draft.
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.
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