I was one of the receptionists. Nobody had hired me to build software, and my managers had no idea I even could. That part just never came up. You don't exactly bring it up between check-ins.
This was around November 2025. Old crew was leaving. New blood was joining. There was a new director too. And holding a lot of it together was her right-hand person, who'd been at the hotel for a long time and knew where everything was buried.
Including the rota. Eight people, one month, and all eight of us wanting very different things from it.
Every change became another thing on her plate
The schedule lived in Excel. The requests lived in WhatsApp. You might guess, there was no AI Agents integration in place to sync them.
Someone wanted a Saturday off. Someone preferred nights. Someone was leaving, someone was starting, and somehow the team was supposed to run onboarding and reception at the same time. Then the holidays landed on top of all of it.
Just her putting the rota together, probably sleepless and pulling her hair out. A change could take hours, sometimes days, and I don't blame her for the timeline. She had a hotel to run, and only so much of herself left at the end of the day.
I watched what that was doing to her. And I was also one of the people sitting there, waiting for my answer.
I knew how to build something that could help. So I did.
Nobody commissioned it. No meeting, no pitch, no "hey, would this be useful?". I took a Saturday and a Sunday, built the thing, and gave it to the team for free.
Software is supposed to help people. These were people I worked with. The problem was right in front of me.
The rota needed to work for an actual hotel
This wasn't a blank calendar with names on it. Reception needed a day shift and a night shift, twelve hours each, every single day of the month. Christmas included.
People had monthly hour limits, preferences, days they couldn't work. Some wanted more nights. Some could only do days. Those aren't the same requirement wearing different words. The app had to treat them differently.
So I built it around the decisions we were already making:
- add everyone, with their monthly hours, shift preferences, and the days or shifts they can't do
- pick a month, generate a proposed rota with day and night coverage
- mark leave, move things around by hand
- lock whatever was already agreed, regenerate the rest
- check coverage, hours, warnings, then share it
The locks were the part I cared about most. Freeze one cell, a whole day, one person's entire month. If something was already settled with someone, regenerating shouldn't casually undo it like it never happened.
Nobody wants to have the same argument twice.
Work out the rota for me, then show me what needs a decision
Good software should just solve the thing. Switching Excel cells to web-app cells to do the same mental gymnastics isn't help.
So the generator did the arranging. It went after day and night coverage, balanced everyone's hours, respected preferences where it could, and tried not to hand anyone a brutal run of shifts. Agreed assignments stayed locked while it worked out the rest. No AI included, pure deterministic math algorithms as the brain.
It knew the difference between "would prefer nights" and "can only do nights". That distinction matters. Flattening it is how people end up quietly resentful. If a strict hours cap was in the way, it left a shift unfilled rather than sneaking someone into more hours. When there was genuinely no alternative, some restrictions could be overridden, with a warning attached so a human had to look at it before it went anywhere.
That was the whole idea. Software can arrange the shifts. It shouldn't hallucinate another receptionist when the team you have can't cover the month. It hands you a proposal and if it cannot find a perfect solution, it shows you what's wrong and how to fix it.
And everything moved as you edited. Uncover a day or night shift and it shows up immediately. So does a night followed by a day shift for the same person, too many shifts in a row, or an assignment on a day someone marked unavailable.
Each person got a summary: hours, day shifts, night shifts, leave, overtime. You could see who was carrying too much, who was coming up short, and where the month just didn't add up.
I wanted the awkward bits visible while someone was still editing. Finding an uncovered night on the screen, with coffee in hand, beats finding out when nobody turns up.
It's still ✨ free to open and use ✨. You need to know Polish, and your setup has to fit the same twelve-hour day and night shifts. Add your own people and have a go. There's a guide too.
Staff could bring a proposal instead of another request
This was the change that mattered most to me.
Before, you sent your request to the manager and waited to hear what your month looked like. With the app, you could sit down and try to build the whole rota yourself. Enter the team, take everyone's requests into account, generate a starting point, adjust it until it holds together. Then bring the manager a complete proposal to review, instead of another "can I have the 24th off".
She still decided. That never changed. She just wasn't the only person doing the arranging anymore.
And there was a side effect I didn't expect to hit so hard: you could see what your own request did to everyone else. Getting the day you wanted off is one thing. Seeing that your day off means someone else covers three awkward shifts is another. The whole month was just sitting there in front of you.
People went from sending in their own piece of the puzzle to actually helping solve it.
We needed it that weekend, not next month
I kept the setup deliberately small. No backend. No database server. No login. A browser app on GitHub Pages, with the data stored locally in your browser.
The app is public, and whatever staff details you enter stay on your device. Anyone could put together their own proposal without an account, without waiting for someone to grant access.
Exports: a PNG for sharing or printing, and a JSON that saves the staff, settings, and rota so someone else can import it or keep it as a backup. That's how a schedule moves between devices here. There's no shared online workspace quietly syncing everything in the background, because there's no background.
Those trade-offs are the reason something useful could exist by Sunday night. We needed help with the next rota, not an infrastructure project.
I got to use it with the people I built it for
Staff and managers used the app for a couple of months while I was still working at the hotel.
I don't have a neat "saved X hours a month" figure for you. What I do remember is seeing my crew relieved, using something I'd built to deal with a problem we were all living with. That felt really good.
Sometimes you do things for the love of the game. I could help, so I did. Seeing it make their days a bit easier gave me more satisfaction than putting a number on it.
I couldn't give everyone Christmas off. But I could make the rota a little less of a Christmas horror story :)