Before I built anything in this space, I worked in a café for two summers in college. The manager ran the schedule out of a laminated print-out taped to the office wall and a group text with 14 people in it. When someone needed to drop a shift, the text chain lit up like Times Square. When coverage couldn't be found, the manager just worked the shift herself. She had a fifth-grader. She worked six of those a month.
shiftfill is the app I should have built for her twelve years ago.
The Problem
Every hourly-staffed operation runs into the same three problems:
- Building next week's schedule is a puzzle, but the tools are the same spreadsheets or paper they've been for twenty years.
- When the schedule is published, shifts need to move around. Someone gets sick, someone's kid is sick, someone has a final. The swap-coordination problem lives in a group chat and eats the manager's evenings.
- Time-off requests, accrued PTO, blackout dates — it's all in someone's head or a shared Google Doc nobody updates.
Commercial solutions exist. They cost $4-8/employee/month and they bundle in HRIS and onboarding and payroll sync. If you're a 5-person café, that's not a value proposition — that's a $40/month commitment to software that does 30 things when you need it to do three.
What shiftfill Does
Three things. No more:
- Schedule builder. Templates for a typical week (opening, closing, mid-shift, bar, host). Drag-and-drop staff into shifts. Per-role coverage checks (do we have an opener? do we have a lead?). Publish-all in one click — staff get a notification with a link to their personal schedule page.
- Swap board. A staffer drops a shift to the board from their phone. Coworkers see it and claim it. Manager one-click approves. Full audit log. This is the feature the entire app is designed around.
- Time off. Per-employee accrued PTO / sick balance. Request form routes to manager. Auto-grey on the schedule when approved. Blackout dates supported (no PTO on Thanksgiving weekend, sorry).
There's also a labor cost view that rolls up projected $$ based on the schedule + hourly rates. And a staff-facing page with a tokenized bookmarkable URL — no app install, no account creation. The staffer's phone does it.
Why Single-Password Auth Makes Sense Here
Every Dangercorn app uses single-password session auth (see: the template walkthrough). For a multi-user app like this, that sounds wrong — shouldn't each staffer log in?
No. The manager gets the password. The manager logs in. The staff get bookmarkable links with tokens embedded. Each staffer's page is read-only (schedule, swap offers they can accept, time-off status). This matches how these teams actually work — the manager is the one who owns the operation; staff just need to see and claim.
When you try to build per-user login for 14 hourly employees, you spend three weeks on password reset flows and you still get calls from a staffer who can't find their password. This approach works better because it removes the wrong abstraction.
The Build
Flask + SQLite, deterministic port 8452, Jinja templates, one 1,800-line Python file for the routes + model, HTMX for the swap board interactions (no React, no Alpine, no build step).
git clone https://github.com/Dangercorn-Enterprises/shiftfill.git
cd shiftfill
pip install -r requirements.txt
python app.py
# → http://localhost:8452
SMS notifications (Hosted Pro tier) go through Twilio. CSV export for payroll. PDF printable schedule for the break-room wall, because physical break rooms still exist.
Pricing
- Self-host: $0. Full features. Your laptop or your $5 VPS.
- Hosted Pro: $29/mo. Managed, SMS shift notifications, payroll CSV, photo IDs for staff pages, email support.
- Multi-location: $99/mo. Transfer shifts between sites, Square POS integration, Toast integration, SSO.
If you're a single café with 10 staff, the self-host tier is probably the right answer. If you're running 3 locations and need cross-site shift coverage, the top tier pays for itself in about a week of not-running-the-schedule-at-9-PM-on-Sundays.
The best software for hourly ops gives the manager their evenings back. Nothing else matters if that doesn't happen.
Related
shiftfill pairs with cateringpro (shift scheduling in catering), coachboard (different audience, same solo-operator philosophy), and breweryops (the taproom staff schedule still needs solving).
Repo is public at github.com/Dangercorn-Enterprises/shiftfill. If you're a restaurant manager, a café owner, or a small retail operator and you clone this and use it for a week, I'd love the feedback email.
What's On the Roadmap
Three things I'm actively working on for shiftfill, in order of priority:
Tip-pool tracking. For restaurants doing pooled tips, the math at end-of-shift is a pain. shiftfill could compute it from clock-in / clock-out times and credit-card tips entered. This is the #1 ask from beta restaurants.
Schedule template library. Right now every shop builds their own templates. A library of shared templates ("typical brunch service," "dinner-only with one closer," "retail Saturday lineup") would help new shops get started faster.
Forecasting from history. Look at last year's same week, suggest staffing levels. Most managers do this in their head; the data exists in the system, may as well surface it.
None of these change the core product. They make the existing core slightly more useful for specific shops.