Fair Parking System — architecture docs and development plan

I’ve been working on a side project called Fair Parking System (FPS) — a multi-tenant SaaS platform that replaces the usual “first-come, first-served” email chaos for parking management with a transparent, algorithm-driven allocation system.

The core idea is a daily Draw process: employees submit parking requests for the next day, and a weighted lottery runs nightly to assign slots fairly. The algorithm gives more weight to those who park least often, so occasional parkers aren’t constantly crowded out by daily commuters.

What’s in the architecture

The system is designed as event-driven microservices on .NET and Kubernetes, with Dapr handling state management, pub/sub messaging, and — most interestingly — Dapr Workflows for the Draw process itself. Long-running, durable orchestration is exactly the right fit for something that needs to lock slots, run an allocation algorithm, persist results, and fire notifications — all while surviving a service restart mid-flight.

Key services: Booking, Identity, Profile, Customer, Billing, Notification, Audit, Reporting, and Configuration. Each follows onion architecture with a pure domain layer that has no infrastructure dependencies, which makes the allocation algorithm straightforward to unit-test in isolation.

The architecture wiki

I’ve published the full architecture documentation — business layer, application layer, technology decisions, and the new development plan — as a Docsify site:

https://www.vejvoda.net/FPS-wiki/

It covers the weighted lottery algorithm, Dapr Workflow design for the Draw process, the phased development plan, and a list of open questions and discrepancies I found while reviewing the docs (including the fact that the original Dapr version listed predates Dapr Workflows by several major releases).

Source on GitHub: RobertVejvoda/FPS-wiki, RobertVejvoda/FPS.code.

2026

Back to Top ↑

2023

Another demo of Dapr and Zeebe (Camunda)

less than 1 minute read

After some time I went back to Dapr (v10) and Zeebe engine used in Camunda Platform 8. Updated projects to .NET 7 and tried again what I learned before and r...

Back to Top ↑

2022

Greetings to Camunda, Zeebe and Dapr!

1 minute read

It’s awesome to see how Dapr and Camunda workflow engine work well together. By using BPMN and DMN we completely remove business logic from the code and only...

Back to Top ↑

2021

Are your class constructors heavy?

3 minute read

One of OOP principles says, that every class should enter valid states only. The bigger class it is, the harder to do. Typically we use class constructors so...

Back to Top ↑

2020

Back to Top ↑