Eigen product · Horeca & zorg

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.

Share
Roosterke: staff scheduling in an app of my own
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

Roosterke-planbord met diensten per dag en het budget per afdeling
Het planbord: diensten slepen per dag, met het budget per afdeling live in beeld.
Automatisch plannen in Roosterke: 33 van 35 open diensten kunnen worden ingevuld
Automatisch plannen: 33 van de 35 open diensten in één klik ingevuld, binnen de wet en de contracturen.
Huisstijl instellen in Roosterke met live voorbeeld van de app
Huisstijl: elke organisatie zet haar eigen logo, naam en kleur in de app, met een live voorbeeld.
Overzicht van Arbeidstijdenwet- en cao-overtredingen per locatie
Overtredingen: blokkerende en waarschuwende signalen per locatie, nog voordat het rooster live gaat.
Roosterke-app: de eerstvolgende dienst en de maandkalender
Mijn diensten in één oogopslag
Roosterke-app: open diensten claimen
Open diensten claimen met één tik
Roosterke-app: bevestigen dat je een dienst oppakt
Duidelijk wat een dienst voor je rooster betekent
Roosterke-app: aanvraag verstuurd naar de planner
De planner keurt goed, jij krijgt een melding

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

.NET 10 ASP.NET Core Blazor Server EF Core MariaDB NativePHP Vue 3 APNs & FCM xUnit
Get in touch