Start a project
2
payment rails
automated
reconciliation
built per event
forms
WRC · Tour de France
events served

Athletes pay however is convenient to them — card or cash at a counter — and organizers get registrations reconciled against payments automatically, instead of chasing down unmatched cash payments by hand.

// the problem

The problem

Organizers needed athletes to be able to pay for event registrations either by card online or in cash at a physical counter, with both routes ending up correctly matched to a registration without anyone manually checking payments against sign-ups.

  • One platform has to serve every discipline, each collecting different data
  • Cash payments happen off-platform, at a payment network's own counters
  • Settlement files arrive on the network's own schedule, not on request
  • Partial payments must be tracked until they're completed, not treated as one event
  • Each event needs its own registration fields, categories and fee schedule

// engineering

How we built it

Two rails, one registration state

Athletes pay online by card, or in cash at a physical payment-network counter using a printed voucher with a barcode. Both routes update the same registration record, so an organizer never has to know which rail a given athlete used.

Scheduled retrieval and automatic reconciliation

A scheduled job retrieves settlement files from the payment network over FTP and matches each payment to its registration automatically, including partial payments tracked to completion, without anyone keying a payment in by hand.

A form builder that fits any discipline

Organizers build their own registration form per event, choosing the fields they need. A road race asks for a shirt size and an emergency contact; a rally stage asks for a competition licence, a vehicle class and a co-driver; a cycling event asks for a team and a category. All of it runs on one platform, with no separate deployment per event type.

The transactional layer around registration

Group registrations, discount coupons, a full email sequence — pending, partial, accepted, rejected, reminders — check-in by hash on race day, results with split times, and organizer dashboards all run on top of the same registration and payment state.

// result

Outcome

Organizers ran registration and payment for events at every scale, from local road races to a World Rally Championship round and Tour de France events, with athletes paying on either rail, cash counter settlement files pulled and reconciled automatically on a schedule, and partial payments tracked through to completion, alongside group registration, coupons, check-in and results.

Cash paid at a payment network’s counter and cards paid online land in the same reconciliation job, matched against registrations from a settlement file pulled over FTP on a schedule.

Event-driven backend · Scheduled batch jobs · Relational database · FTP file ingestion · Frontend application layer

30 minutes with a senior engineer.

Tell us what you're building. You'll leave with an honest opinion, even if it's "you don't need us."

Reference calls with past clients are available under NDA during evaluation.