Shift scheduling that can't double-book anyone.
Smalti gives managers a week-grid scheduler and gives staff an open shift marketplace — so coverage gaps are visible, swaps happen without the group text, and an assignment that breaks your rules is one the system will not make.
iOS & Android apps · Browser admin console · Runs on your own server
Schedules break in predictable ways: someone gets scheduled twice, a shift quietly goes unfilled, a swap agreed by text never reaches the schedule, and nobody can reconstruct who changed what. Smalti closes each of those gaps — managers build and publish the week from a browser, staff carry the schedule in their pocket, and the rules that decide who may work what are enforced on the server every single time.
Everything a real schedule needs
No spreadsheet exports, no side channel for swaps, no guessing whether the week is covered.
Build the week in minutes
A seven-column week grid with fill-state at a glance — green full, amber partial, red unfilled. Create a recurring pattern once and expand it across the month, then publish the week and everyone is notified.
An open shift marketplace
Staff post a shift they can't work as a give-away, a swap request, or either. Eligible coworkers claim it outright or offer one of their own shifts in exchange — and both schedules update in the same transaction.
Nobody works two places at once
The no-overlap rule is a storage-level constraint, not a form check. Bugs, races, and two people claiming the same shift in the same second all end the same way: the double-booked write is rejected.
Only qualified people get scheduled
Every member carries the positions they're cleared to work. The assignment picker states a verdict for each person — qualified, free, within capacity — and disables the rest with the reason. Trades honor the same rule.
Trading rules you control
Require manager approval or let trades settle instantly. Set a minimum lead time before a shift starts, cap how many shifts one person can have posted, allow or block cross-location swaps — org-wide, or overridden per location and per position.
Every change on the record
Assignments, trades, approvals and cancellations are written to an audit log with the actor and the timestamp. When someone asks who gave away Saturday and when, there is an answer.
Most schedulers check for conflicts. Smalti refuses to store one.
A member can never hold two overlapping assignments. That single invariant is enforced three times over, so no application bug, race condition or unusual path can quietly put someone in two places at once.
PostgreSQL rejects any write that would overlap an existing assignment — including two concurrent marketplace claims landing in the same instant.
Every path that creates or moves an assignment re-checks the overlap inside its transaction and returns a precise, machine-readable conflict reason.
Conflicting choices are disabled before anyone can submit them, each with the reason stated in plain language.
Because every instant is stored in UTC with a real time zone attached to each location, a member working two cities can't be double-booked either — even across a daylight-saving change.
Time zones stop being a source of mistakes
Shift times are shown in the location's zone with the viewer's own time underneath, so claiming a "9 AM" shift two zones away can't go wrong. Scheduling math runs on UTC instants throughout.
- Each location carries its own zone. "The 9 AM shift" always means 9 AM at that site.
- Daylight saving is handled, not ignored. An overnight shift across the fall-back change really is nine hours, and the publish preview flags every affected shift before staff see it.
- Trades restate the time in your zone before you commit to them.
The app people will actually open
Adoption is the whole game with scheduling software. Smalti's mobile app is built for staff first — the schedule is one tap away, and swapping a shift takes seconds.
- Next shift on open, with a month view marking your shifts, open shifts and posted shifts at a glance.
- Team messaging built in. Every position at a location gets its own group — no phone numbers shared, no second app.
- Works without signal. Upcoming shifts and messages are stored on the device and refresh when the connection returns.
- Face ID or fingerprint unlock, with sessions bound per device and revoked the moment an account is deactivated.
Live in four steps
From an empty install to a published week — no migration project, no consultants.
Set up your places
Add each location with its time zone, then the positions worked there — Cashier, Nurse — ICU, whatever your schedule calls them.
Invite your people
Invite by email with a role and the positions each person is qualified for. They set a password and enroll biometric unlock on first sign-in.
Build and publish the week
Place shifts on the grid, set how many people each needs, assign from a list that flags every conflict, then publish — staff are notified.
Let the team handle changes
Staff post and claim shifts inside the rules you set. Approve trades if you want the gate on, or let them settle instantly and read the audit log later.
Common questions about Smalti
How does Smalti stop employees being double-booked?
The no-overlap rule is enforced in the PostgreSQL database as an exclusion constraint, re-checked inside every API transaction, and surfaced in the interface before anyone can submit a conflicting choice. Any write that would give one person two overlapping shifts is rejected at the storage layer — including two marketplace claims arriving in the same instant.
Can employees swap shifts without a manager approving every trade?
Yes. Trades settle instantly by default, with eligibility checked on the server — the claimant must be qualified for the position, free at that time, and within your trade window. You can also turn on an approval gate so managers review trades before they take effect, either organization-wide or for specific locations and positions.
Does Smalti work across multiple locations and time zones?
Yes. Each location carries its own IANA time zone, all scheduling math runs on UTC instants, and shift times are displayed in the location's zone with the viewer's own time shown alongside. Daylight-saving transitions are resolved when a week is materialized, and flagged in the publish preview before staff see the schedule.
What size teams is Smalti built for?
Smalti is designed for organizations of roughly 10 to 500 employees, scheduled in weekly or monthly cycles across one or more locations.
Where is Smalti hosted, and who holds the data?
Smalti is deployed onto your own Linux server with PostgreSQL storage and HTTPS, using a scripted, repeatable deployment. Your schedule and staff data stay on your infrastructure.
What does Smalti run on?
Staff use native iOS and Android apps. Managers and administrators use a browser-based admin console. Both talk to a REST API served on your own domain, with short-lived access tokens and rotating, device-bound refresh tokens.
Already use Smalti at work?
Smalti is issued by your employer — sign in with the invitation they sent you. You cannot create an account on your own.
Bring Smalti to your team
Tell us how many people you schedule, how many locations you run, and how you schedule today — we'll show you Smalti against your own week.
Already a customer? Sign in to the admin console · Support