Live demo · nothing to sign up for
Build a week. Break a rule. See what happens.
This is the real MedAligna scheduler running the real rules engine on five seeded settings: a hospital ward, a clinic, a nursing home, a home care round and a residency programme. Pick the one that looks like your building. No account, no email address, nothing saved. It is not a video and not a mock-up: the refusals below are the product refusing you.
14 things worth trying
Each one is a real person or a real drive time in the seed data, with a real reason to be interesting. Blocked staff stay visible in the picker, greyed out with the reason; hiding them would only make you wonder where they went.
Any setting
Ask for a day off as the nurse, then answer as the scheduler
Flip to the staff view, request a day she is rostered, flip back and approve it. The grid raises the conflict itself — approved leave is a rule the engine enforces, not a note on a list — and it is the same rule the database enforces in the product.
Any setting
Claim an open shift from the staff view
The same engine that judges the scheduler's drag judges her claim, and an ineligible one says why in words. In the product the database re-checks under a lock, so two colleagues tapping claim in the same second cannot both win the seat.
Any setting
Propose a swap, then approve it — or watch it refuse
Approval re-runs the rules at the moment of approval, not at proposal time. A board that changed in between turns the yes into a refusal with the reason attached, which is exactly what the product's swap does under its row lock.
Hospital ward
Try to schedule Marisol on Friday
Her RN license expires on Thursday the 18th. The assignment is refused, not warned about: credentials are checked against the END of the shift, never against today.
Hospital ward
Jump to the week of Oct 26–Nov 1, 2026
The clocks change during Tomas's night shift. The wall clock says 12 hours; he works 13. Exporting 12 would short him an hour of his own life, so the engine measures the instants instead. The date came from the IANA timezone database at build time, not from a constant we typed.
Hospital ward
Open any empty RN slot
The picker is the fill waterfall: your own staff, then the float pool, then the other location, and agency LAST. Kevin bills $88 an hour against Owen's $47, and he cannot leapfrog Owen, because the tier order is policy rather than a ranking.
Clinic
Give Dana a third day
She is contracted for 24 hours a week and the practice's cap is 40. Her third nine-hour day is 27, and the engine warns at hour 25 rather than hour 41: it checks the tighter of the two limits, which is the one that applies to her.
Long-term care
Fill the Activities row, then look at the PBJ panel
The file stops being filable. That position has no CMS job code, and there is no honest default: guessing that an unmapped position is a nurse aide would be inventing staffing data on a federal filing. Clear it and the XML downloads.
Home care
Put Rosa on the 10:00 Nowak visit
She is at the Alvarez home until 10:00 and Nowak is 24 minutes away, so it is refused. Then put her on the 10:15 Okamoto visit and watch it go through: six minutes' drive. Same caregiver, same morning; the only difference is the road.
Clinic
Press “Suggest who fills them”
Nothing is written by opening it. The solver takes the hardest seat first — the one with the fewest eligible people — because filling the easy ones first spends the only person who could have taken it. Every row is a checkbox you can clear. Some seats here it can only fill with agency and it says which; some it cannot fill at all, and it names those with the reason rather than leaving a silent gap in the grid.
Hospital ward
Then run the same thing on the ward
Every open shift that week comes back covered by the unit's own people, with no agency at all — which is the answer a charge nurse most wants and least believes. The estimate under the list is what those shifts cost against what agency would have; it is a budgeting figure and never a wage.
Long-term care
Read the licensed-nurse row on the 22th
19 residents that day against 20 on the 20th — fewer people, and it needs 2 licensed nurses rather than 1. Three came back from hospital that morning, so the day is 1.15× the work, and acuity multiplies the census before the ratio divides it. The grid above says the row is full.
Any setting
Switch to the nurse's view
Above the grid. The rota stays whole, because a schedule everybody can read is the point of one. What goes is the management layer over it: no labor estimate, no colleague's compliance state, and nothing she can change. That boundary is policies in the database, not a hidden menu.
Residency programme
Read Yusuf's block, then break it
His four weeks are 88, 76, 82, 74 hours. Two of them are over 80 and the board opens with nothing flagged, because the limit is a mean and his is exactly 80.0. Now put him on week 4's free Friday clinic: 4 hours, that week is 78 (under the line) and the block is over. That is the error a weekly cap cannot see.
Twelve-hour shifts, licences, rest and overtime on a med/surg floor — and the two nights a year a twelve-hour shift is not twelve hours.
22 seats are unfilled this week.
A half-built draft, the way a real one looks on a Tuesday.
This board is live — click it. Tap any open seat to see who’s allowed and who’s refused, with the reason in words. Or flip to the nurse’s view above and claim one yourself.
| Slot | Mon 15 | Tue 16 | Wed 17 | Thu 18 | Fri 19 | Sat 20 | Sun 21 |
|---|---|---|---|---|---|---|---|
RN day07:00–19:00 · needs 2 | |||||||
CNA day07:00–19:00 · needs 1 | |||||||
RN night19:00–07:00 · needs 1 | |||||||
LPN evening15:00–23:00 · needs 1 | |||||||
| Coverage | ! 4/5understaffed | ! 4/5understaffed | ! 3/5understaffed | ! 2/5understaffed | ! 0/5understaffed | ! 0/5understaffed | ! 0/5understaffed |
Click + Assign to staff a shift, click a name to remove it, or drag a name to another shift. Every change is checked against licences, rest, overtime and approved time off as you make it.
Waiting on the scheduler
0 to decide · 0 punchesNothing yet. Flip to “As Amara” and claim a shift, request a day off, propose a swap or clock in — it lands here, and this board answers.
Conflicts across the week
0 blocked · 0 warningNothing on this board breaks a rule. Try assigning somebody who cannot work; the engine will say so here before you publish.
Hours for payroll
148.00 across 13 rowsOne row per worked period, from the grid above. It goes to Gusto, ADP, QuickBooks or Paychex — we hand over hours and never calculate pay, so there is no rate in the file and no dollar sign anywhere in it.
| Staff | Shifts | Hours |
|---|---|---|
| Amara Okafor | 3 | 36.00 |
| Danielle Cho | 1 | 12.00 |
| Jordan Whitfield | 2 | 16.00 |
| Priya Raman | 1 | 12.00 |
| Sunita Ramanathan | 3 | 36.00 |
| Tomas Bergström | 3 | 36.00 |
Publish this week
Until published, this board is a draft only schedulers can see. 6 people would be told about their own shifts — nobody is told about anybody else’s.
Credentials & exclusion screening
Judged at the end of this week — a licence that lapses on Thursday is a problem on Monday. The grid refuses these on its own; this is where a manager sees them coming.
- Amara OkaforRN Licence: ValidBLS: Valid
- Marisol DelgadoRN Licence: LapsedBLS: Valid
- Jordan WhitfieldLPN Licence: ValidBLS: Valid
- Sunita RamanathanBLS: Valid
- Tomas BergströmRN Licence: ValidBLS: Valid
- Priya RamanRN Licence: ValidBLS: Valid
- Danielle ChoBLS: Valid
- Kevin BoatengRN Licence: ValidBLS: Valid
- Ruth FeldmanLPN Licence: ValidBLS: Lapsed
- Ben AdeyemiBLS: Valid
- Michael GrantBLS: ValidOIG: possible match
- Nadia RahmanRN Licence: ValidBLS: Valid
- Owen PryceRN Licence: ValidBLS: Valid
- Grace LindqvistLPN Licence: ValidBLS: Valid
A possible OIG match stops scheduling until a person resolves it — it never fires anyone, because the public list is names and names collide. Staff see their own credentials in the product; this whole-team view is the manager’s.
Who is carrying the unpopular half
Jun 15–21, 2026Nights, weekends and on-call per person, counted from the grid above and recounted as you change it. This is the same measure the fill waterfall uses to decide who to offer an open shift to first — so a scheduler can check that claim rather than take it.
| Staff | Shifts | Hours | Nights | Weekends | Holidays | On call | Flexed |
|---|---|---|---|---|---|---|---|
| Amara Okafor | 3 | 36.0 | 0 | 0 | 0 | 0 | 0 |
| Ben Adeyemi | 0 | 0.0 | 0 | 0 | 0 | 0 | 0 |
| Danielle Cho | 1 | 12.0 | 0 | 0 | 0 | 0 | 0 |
| Grace Lindqvist | 0 | 0.0 | 0 | 0 | 0 | 0 | 0 |
| Jordan Whitfield | 2 | 16.0 | 0 | 0 | 0 | 0 | 0 |
| Kevin Boateng | 0 | 0.0 | 0 | 0 | 0 | 0 | 0 |
| Marisol Delgado | 0 | 0.0 | 0 | 0 | 0 | 0 | 0 |
| Michael Grant | 0 | 0.0 | 0 | 0 | 0 | 0 | 0 |
| Nadia Rahman | 0 | 0.0 | 0 | 0 | 0 | 0 | 0 |
| Owen Pryce | 0 | 0.0 | 0 | 0 | 0 | 0 | 0 |
| Priya Raman | 1 | 12.0 | 0 | 0 | 0 | 0 | 0 |
| Ruth Feldman | 0 | 0.0 | 0 | 0 | 0 | 0 | 0 |
| Sunita Ramanathan | 3 | 36.0 | 0 | 0 | 0 | 0 | 0 |
| Tomas Bergström | 3 | 36.0 | 3 | 0 | 0 | 0 | 0 |
| Average, all 14 | 0.9 | 10.6 | 0.2 | 0.0 | 0.0 | 0.0 | 0.0 |
8 of these 14 worked nothing in this window, and the average above counts them. Everyone on the roster is listed, so a nurse who is not on it can tell that from the page rather than wondering.
What is in the demo?
Five settings, five seeds, one engine: each of them half-built, the way a real draft actually looks on a Tuesday.
The hospital ward is 3 West, fourteen staff, in America/New_York: a location's timezone is the authority for its wall times, so the grid is showing you Eastern rather than yours. Registered nurses, licensed practical nurses and certified nursing assistants, plus the four people every real roster has and most demos leave out: a 0.6 FTE part-timer, a per-diem CNA, a float-pool RN, and an agency RN who bills at nearly twice an employee's rate. There is a second site, Riverside, with two more nurses on it, because the fill waterfall needs somewhere to escalate to.
The ward has three weeks rather than one. The June week is the baseline. The other two are the next two times the clocks actually change in that timezone, found by asking the IANA database when this page was built rather than by typing a date, so a 19:00–07:00 night on one of them is 13 real hours while the wall clock still says 12, and the payroll export gets the real one. That is the whole reason the engine reasons about instants and never about clock faces.
The clinic is a five-day family practice in Central time, where the limit that bites is a contract rather than a cap: Dana is on 24 hours a week against the practice's 40, and the engine checks the tighter of the two. The nursing home is twenty residents in Mountain time, with the census entered and HPRD computed live from the grid: nursing hours divided by residents, split at local midnight, which is arithmetic on the seeded numbers rather than a compliance threshold. Its PBJ panel builds a genuine CMS 4.10.0 submission file from those same hours, in your browser, and refuses to build one when something in it cannot honestly be filed.
The home care round is the one a shift scheduler cannot do at all. Its rows are clients rather than slots, and the seed carries the drive times between their homes. Two visits booked back to back are accepted by every tool that thinks a caregiver's day is a block; this one refuses the impossible one and allows the possible one, and the only difference between them is eleven miles.
The residency program is the only one that is not a week, and it could not be. Its rule is that eighty hours is a mean over four weeks rather than a weekly ceiling, and a mean over four weeks is not a fact about any one of them, so the seed is a whole four-week block and the table under the grid shows all of it at once while you edit one week at a time. Yusuf's weeks are 88, 76, 82, 74 hours: two of them over the line, an average of exactly 80.0, and not one thing flagged. A scheduler with a weekly cap in it refuses that block, and a scheduler that checks each week alone passes one that breaches, which is the expensive direction. Add 4 hours to his quietest week and watch which of the two numbers moves.
Everything you do runs the full engine in the browser as you drag: the same TypeScript that runs on the server, 15 rules on every assignment, so the verdict you see here is the verdict the database would give. Conflicts appear on the cell in the same frame as the click, the whole week's conflicts are listed under the grid, the labor estimate in the toolbar moves as you fill, and undo works. The estimate is for budgeting and says so: it is not a wage figure and never reads as one.
Four things under the grid are the product's own screens rather than a summary of them. Auto-fill solves the open seats hardest-first and hands back a list of checkboxes with the reasons attached — including the seats nobody can take, named, because that gap is the one somebody has to solve by Friday. Required staffingmultiplies the census against the facility's own rules, which is how a row that reads a comfortable 1/1 turns out to be a nurse short. The timesheet is the real CSV export, downloadable, with the real hours in it. And the fairness count is the same measure the fill waterfall uses to decide who gets offered an open shift first, so you can check that claim rather than take it.
There is also a toggle above the grid to read the same week as one of the nurses on it. The rota stays whole — a schedule everybody can see is the point of a schedule — and the management layer over it does not: no labor estimate, no colleague's compliance state, nothing editable. That is the boundary the product enforces with policies rather than with a hidden menu, and it is worth seeing before you invite fifteen people into it.
Is any of this real data?
No. Every name here is invented (staff, clients and facilities alike), and no organization's roster is in it.
The people are seed data, written to look like a roster rather than a toy. Marisol is not a nurse; her license expiry is a fixture that also serves as a test case. Michael Grant is not on any exclusion list and has not been accused of anything; his record exists to show what a possible match looks like, because that is the case people get wrong. Cedar Hollow is not a facility and its CMS submission ID is invented; the drive times on the home care round are seeded numbers, where the product reads them from a routing service. Block 5 is not a program and Yusuf Adeniyi is not a resident; his rota is a fixture, built to land on an average of exactly 80.0 because that is the number worth being able to see. There is no patient data in this demo, which is easy for us to promise: there is no patient data anywhere in MedAligna.
The things that are not invented are the ones that could not be. The dates the clocks change come from the IANA timezone database. The PBJ file is built against the schema CMS actually publishes. And the duty-hour limits the residency block is measured against (eighty hours averaged over four weeks, one day in seven free averaged the same way) are the Accreditation Council for Graduate Medical Education's rather than ours. Those are checkable, which is exactly why they are the ones we let the machine produce.
Nothing you do here is saved. Drag what you like, break what you like, refresh, and it comes back exactly as it was. Nothing is sent anywhere, nobody is emailed, and this page does not ask you for an address in exchange for the interesting part: there is no interesting part being withheld.
What is not in the demo?
Everything that needs an account, a phone, or a quarter of history.
This page is the schedule builder, the rules engine, the fill waterfall, auto-fill, required staffing, the timesheet and the PBJ file, which are the parts worth being sceptical about. The rest of the product needs things a sandbox cannot have. Staff-side swaps and claims need staff with logins, and they are contested writes, which the database settles with a row lock rather than the browser — the nurse's view here shows you what she sees, not what she can do. The public on-call board, the credential wallet, and a real quarter of captured hours all need an account behind them. Fourteen days with your own staff is where you see those, and that trial does not need a card either.
Can I try MedAligna without talking to sales?
You already are. There was no form in front of this page, and there is no call behind it.
The demo needs no account. The trial needs no card, runs fourteen days with every feature, and ends by doing nothing at all if you do nothing at all. Nobody will phone you on day thirteen, because there is nobody here whose job that is. The price is on the pricing page rather than behind a meeting ($99, $149 or $249 per month per location), so you can put us in a spreadsheet against two other products this afternoon, which is the entire point of publishing it.
Want it with your own staff in it?
Import a spreadsheet, set your coverage once, pick a rotation, publish. Most teams do the whole thing in an afternoon. Fourteen days free, no card required to start.
