Case study
Gralio: finding a game and a place to play
An app for amateur sport in Poland: players find or organise a game, and venue owners manage their facilities.
Working demo

The problem
Pickup games are organised in chat groups, and finding a free court means phoning around. Nobody knows who's really coming, and when a game is full, there's no fair way to take the next person.
Key features
- Games with joining, organiser approval, waitlists with automatic promotion, and announcements.
- Venues, facilities, opening hours and closures, with favourites and reporting of errors.
- Search for free slots and booking with the price and cancellation policy shown first; payment at the venue.
- Calendar for venue owners.
- Map of places, profiles and in-app notifications.
Engineering challenge: a map of Poland from open data
The map shows 39,703 public places across Poland, built by our own tool from OpenStreetMap data: downloaded per voivodeship, deduplicated and matched with school grounds. Loading it into a live system is the harder part: the import is versioned and idempotent, protected by a lease so that several server instances starting at once can't collide, and it never deletes existing places.
Engineering challenge: availability you can trust
Free slots are calculated on the server, in the venue's time zone, not in the browser. Bookings use the same database-enforced occupancy ledger as Jazdo, and game capacity uses a seat ledger, so a slot or a seat can't be taken twice.
Architecture and technology
An ASP.NET Core (.NET 10) API with PostgreSQL on Google Cloud Run, Angular 21 on Firebase Hosting with Firebase Auth, a Leaflet map with OpenStreetMap and rate limits per IP and per user. API, web and end-to-end tests are automated.
Related
- SaaS development: From the first version to a multi-tenant product: separated customer data, roles and an audit log.
- Custom software development: Business applications, internal systems, APIs and integrations built around how your company works.