Skip to content
Fahrul Alwan.
Back
React 19Payments UXCloudflare EdgeTanStack Router

Real money at the gate

A ticketing venture I founded for Indonesian football, built and run live for nine match-days with real money at the gate.

Founder & Product EngineerDec 2025 – May 2026Five people, two of us engineers. I built the consumer side.

I founded a sports-event ticketing venture. Our first partner was a Liga-2 football club. Match-day ticketing in Indonesian football still mostly runs on paper and cash: slow lines, and no real record of who is actually inside the stadium. We had one season to show a digital gate could hold up in that environment.

Ticketing reads simple until real people are buying under a deadline. A match sells in a narrow window, on phones, on patchy stadium networks, and every failure is a person who does not get in. The consumer side had to take real payments, recover gracefully when a payment or an order broke, and never show a broken cart to someone about to give up and stay home.

People got stranded by their own typos, not by broken payments

The thing that actually stranded people was not a crashed payment. It was mistyping their own email, then having no way to reach the ticket they had already paid for. So the order page carries a WhatsApp contact, and partway through the first live day I moved it on mobile to sit directly under the payment-proof card, because that is where someone who is stuck is already looking. Later I added the same escape hatch to checkout errors and rewrote the error text into plain Indonesian. A buyer with no way through just does not turn up at the match.

Orders expire before people pay

A QR code dies quickly. Someone paying by manual transfer has to walk to a bank, so they get a day.

An order that runs out is not a dead end either: reorder starts a fresh one. I also built order lookup, so people could find a ticket again from whatever they still remembered.

A tier can sell out while someone is still choosing

The label changes twice before the control switches off, and it switches off rather than failing on submit.

Made it fast to load and easy to find

Tickets move while someone is looking at them. A partner’s name does not.

A match sells in a narrow window, so the site had to be quick, and it had to show up when someone searched the fixture. Key routes are prefetched, and the SEO groundwork went in properly: structured data, a generated sitemap, search-action markup. Unglamorous work that decides whether someone finds the ticket at all.

It is still online, still mine, still running on Cloudflare's edge. fartix.id

As the founder, I let the build run ahead of what we had proven. A service for every concern and a schema to match, for one early client, was more than the moment needed. The engineering was sound, but I would have bought that certainty with something smaller first. That call was mine.

If any of this resonated, say hi.