Case study

Gralio: finding a game and a place to play

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

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