Self-hosted staff shift scheduler — a weekly rota, exact hours, double-booking caught.
Cafés, shops, clinics, and small ops teams build the weekly rota in a spreadsheet or a group chat — and every week it goes wrong the same ways: two people booked for the same shift, someone quietly pushed past their hours, an overnight shift counted wrong, and no clean copy to hand the team. Scheduling SaaS fixes it but charges per employee every month, and usually tries to bolt on payroll and a time clock you didn't ask for.
Staff down the side, the seven days of the chosen week across the top; navigate week to week with a configurable week-start day.
Each shift has a date, start/end time, role or location, and a draft/published status — assigned to a person or left open for anyone to pick up. Shifts that cross midnight are handled correctly.
Times are stored as integer minutes, never floats, so each person's weekly total is exact to the minute, shown against an optional weekly-hours target.
An overlapping shift for the same person is blocked; clean back-to-back hand-overs are allowed; correct even for overnight shifts that spill into the next day.
A shift on a spring-forward or fall-back day counts the true elapsed time — a lost hour in spring, a gained hour in autumn.
Publish a week (or one shift) in a click, print a dependency-free PDF of the rota grouped by person, and export a spreadsheet-formula-injection-hardened CSV; plus an hours report over any date range.
Checkout isn't open yet. Leave your email and we'll send one note the moment Rostera — Staff Shift Scheduler & Rota (PHP + MySQL, Self-Hosted) can be purchased — nothing else.
2-minute web installer, plain PHP 8 + MySQL (or SQLite for a trial), no Composer or build step — Docker image included.
No. It plans shifts — who works, when, and for how long. It holds no pay rates or wages, calculates no pay, and moves no money. Zero payment surface, by design.
No. Shifts are planned hours, not clock-in / attendance records — there is no time or biometric capture. It is a scheduling and planning tool.
Exact to the minute. Times are stored as integer minutes and summed in PHP, with DST-correct shift lengths — the shipped 130-assertion suite covers overnight shifts and both DST transitions.
Either — SQLite for a zero-config trial, MySQL/MariaDB for production on ordinary shared hosting.
You get the full PHP source and your rota lives in one database you own — nothing phones home, nothing expires.