Běh Adventáka
A set of three connected sites for Advent charity runs - taking over an in-progress project, unifying and fully typing it, GP WebPay payments and leaderboards from Strava data.



// Brief
Three sites, an inherited and half-finished codebase
I took over the project in progress with the design already done - a set of three connected sites (behadventaka.cz, adventnibehani.cz, adventaci.cz) for Advent charity runs. The code leaned on a lot of `any`, had minimal server logic and lacked a unified foundation.
The first job was to clean it up: unify the approach across all three sites, fully type everything and move as much logic as possible from the client to the server.
// Architecture
A typed foundation and GraphQL over the database
I built the data layer on GraphQL with custom resolvers over the database, so all three sites draw from the same typed API. Removing `any` and moving logic to the server brought predictability - fewer runtime errors and maintaining three sites from one place.
- Unifying three sites on a shared typed foundation
- GraphQL API with resolvers over the database
- Moving logic from client to server, no more `any`
// Payments & data
GP WebPay in Node and Strava leaderboards
I implemented the GP WebPay payment gateway from the official PHP docs - signatures, callbacks and the whole transaction flow rewritten into Node.js. The sites have working donation and payment forms.
Runners' results are pulled via a Strava integration and aggregated into live leaderboards.
- GP WebPay in Node.js from the PHP docs - signatures, callbacks, transactions
- Donation and payment forms
- Strava integration and aggregating data into leaderboards
// Backoffice & operations
Strapi for content and a tuned setup
The sites come with a large Strapi backoffice where all the content and articles are created. I designed the collections, models and their relations so editors just fill in content - without a developer.
Across all the sites I handled page caching, image optimization and observability via Sentry.
- Strapi: designing collections, models and relations for self-service content
- Page caching and image optimization for fast loads
- Observability and error tracking via Sentry
// Stack
// More projects
Chytron
A psychometric testing platform with age-normed results, sharing with experts and a gamified approach.
OpenPlanet Romance
A complete redesign of a dating agency and migration of sixteen years of data from three legacy systems into one platform.
OpenManufacturing ERP
An internal ERP for a manufacturing company - inquiries, quotes, orders, bills of materials and warehouse. From design to on-premise operation on the client's server.
Open