Roosterke: staff scheduling in an app of my own
From idea to App Store, built entirely by me: a planning board for the planner, an app where the team swaps and picks up open shifts themselves, and a rules engine that checks every shift against working-time law and the CLA upfront.
- iOS
- app live in de App Store
- 970+
- geautomatiseerde tests
- 6
- modulecategorieën, per klant aan of uit
- 4 weken
- eerlijk rooster in één klik
The challenge
In hospitality and care, schedules are still often made in Excel and passed around in WhatsApp groups. Swaps mean calling around, calling in sick means finding your own replacement, and every change can quietly break a rest period, a break rule or a CLA agreement. The planner only notices once it has already gone wrong.
On top of that, every organisation is different: one only wants scheduling, another also wants leave, absence, payroll export and its own branding in the app. An off-the-shelf package never quite fits.
I wanted a product where:
- the planner builds the schedule on one clear planning board;
- the team swaps, picks up open shifts and calls in sick in an app;
- every shift complies with working-time law and the CLA upfront, even after a swap;
- every organisation only switches on what it needs, in its own logo, name and colour.
In pictures
This is what it looks like
The approach
A strictly layered .NET 10 platform
The backend runs on .NET 10 and is split into layers with one responsibility each: domain, logic, data, a Web API, a Blazor admin panel, a statistics service and a worker for webhooks. Dependencies point inwards, so the core knows nothing about the database or the outside world. Every organisation is properly isolated: all data is filtered per organisation, so customers never see each other's data.
A rules engine for law and CLA
The heart of Roosterke is a rules engine that checks every shift against Dutch working-time law and the CLA: rest periods, breaks, night work and rules for workers under 16. The engine works on a snapshot instead of directly on the database. That makes every rule testable on its own, and a swap can never quietly break a rest period. Without the compliance module it runs in advisory mode; with it, it blocks, with a required reason for any exception.
Foundation plus modules
The foundation is always on: schedules, planning board, open shifts, bidding, swapping, handing back and calling in sick, availability, hours and allowances. On top sit modules in six categories: planning, team, HR, finance, communication and compliance. Think automatic planning, demand forecasting, leave balances in hours, absence management and payroll export to Nmbrs, Loket or AFAS. Each module is switched on or off per organisation, and off really means off: the API then refuses the related endpoints too.
An app of its own for iPhone, Android coming
The app is built with NativePHP, Laravel and Vue 3 and runs natively on iPhone. Staff see their shifts, pick up open shifts and swap with one button. Push notifications go through Apple (APNs) and Google (FCM) and are delivered reliably through a queue. The app takes on the organisation's branding, and an invitation link opens the right environment straight away.
Secure, and painless updates
- Sign-in with short-lived tokens and rotating refresh tokens; a deploy logs nobody out.
- Device checks via Apple App Attest and Google Play Integrity, plus rate limiting.
- App updates outside the App Store are digitally signed, so only genuine updates get installed.
- Over 970 automated tests, including tests against a real MariaDB database.
The result
Roosterke is live. The planning board runs in the web admin and the app is in the App Store; Android is coming soon.
- Calm for the planner: the schedule complies with the law upfront, and the team handles swaps and open shifts themselves.
- Sickness without calling around: one click asks every suitable, available colleague to step in.
- Faster planning: automatic planning builds a fair schedule for up to four weeks, with an explanation per assignment.
- Fits every organisation: modules and branding per customer, without separate code per customer.
Want an app of your own for your business? Roosterke shows how I build custom apps: from analysis and design to an app in the App Store, with the same care for reliability as for ease of use. Book a free 30-minute call and I will think along about what your app needs to do. More about Roosterke itself is on roosterke.nl.
Tech stack