The Problem Nobody Asked About: Why We Built Offline QR Brightness Into FlashSeat
Three weeks before launch, our support lead forwarded me a message from a beta tester. 'Just bought tickets on the Tube. No signal. Got to the venue. QR code won't scan.' That one line changed how we think about the entire ticket experience.
The Moment We Realised We'd Built It Wrong
We'd launched QR tickets in the app the way most apps do: dynamically generated, pixel-perfect, dependent on a live connection. Your phone fetches the code fresh from our servers every time. It's clean. It's secure. It's also completely useless when you're underground at Liverpool Street with no 4G and a gig starting in forty minutes.
I spent that afternoon watching our team reproduce the problem. Offline mode on. QR code blank. Then dimmed. Then blank again. We'd built a ticket that couldn't work in the exact moment that mattered most: when you're actually at the venue, often in a crowd, with patchy connectivity.
The fix wasn't complicated, but it forced us to rethink something fundamental. A ticket isn't a web page. It doesn't need to load. It needs to work.
Brightness Isn't Just About the Screen
Getting QR codes to scan reliably in low light comes down to contrast and luminosity. Most phones have a maximum brightness setting, but not all screens hit the same peak output. An iPhone 12 in sunlight behaves completely differently to a Samsung in a concert venue's strobe lighting.
We spent two weeks testing across devices. Not lab testing. Real venues. We went to a comedy club in Shoreditch on a Thursday night. A sold-out concert at the O2. A football match at White Hart Lane on a grey afternoon. We printed our own QR codes and scanned them against ticket codes running on various phone models, at different brightness levels, from different distances.
The insight was simple but crucial: maximum brightness isn't enough. We needed the app to push the screen into a sustained high-output state specifically when displaying a ticket. No dimming. No battery saver mode interference. No adaptive brightness trying to be helpful and failing.
Offline First, Everything Second
The offline requirement meant we couldn't just request a fresh code when you open your ticket. Instead, we generate and cache the QR code locally when you purchase. That code stays on your device, ready to display whether you have signal or not. It's encrypted. It's time-stamped. And it's always at full brightness when you need it.
This created a small design problem: if the code is cached, how do we prevent someone from taking a screenshot at purchase time and reselling it to someone else? We can't. But we can make the ticket non-transferable in our backend. Once you've scanned a code at the venue, it's spent. The venue's ticketing partner verifies the purchase against their records in real time, even if their scanner is temporarily offline.
We built this with venues we know well. The live event circuit in the UK is packed with independent operators who run on thin margins and thinner tech infrastructure. They needed to trust that our offline-first approach wouldn't create scanning chaos or fraud risk.
The Small Behaviours That Actually Matter
Brightness is part of it. But we also noticed something: people don't hold their phone still when they're scanning. They're nervous. They're in a crowd. They're juggling a drink and a jacket. So we made the QR code larger than standard. We gave it more padding. We made the app suppress notifications while a ticket is displayed, because a popup appearing at scan time has cost us real problems.
When you open a purchased ticket on FlashSeat, the app also keeps the screen on. No timeout. No sleeping. If you're offline, it tells you so, but the code is still there, still bright, still scannable. We tested with actual venue staff. They scan dozens of tickets a night. They told us what worked and what didn't. Then we built around that.
The cynical version of this is that we engineered away friction. The honest version is that we watched what actually happens when real people try to enter a venue they've paid for, and we removed the parts that fail.
Why This Matters More Than You'd Think
FlashSeat users are deal hunters. They're spontaneous. They book a concert ticket at lunch and show up that evening. They grab a flight deal and leave the next morning. They're not the type to plan three weeks ahead with a fully charged phone and a clear calendar. They're the type to arrive slightly frazzled and needing the ticket to just work.
Every decision we make around this feature flows from that reality. The offline brightness isn't a nice-to-have. It's the difference between a successful purchase and an unhappy customer standing outside a venue they've already paid for. We built it because we understood who uses FlashSeat and what their actual evenings look like.
It's also why we obsess over it. A flight booking app might care less. You've had weeks to plan. Your phone is charged. But event tickets are different. They're the last five minutes before something starts. They're the moment that matters.
When you're standing outside a sold-out show with your phone in your hand and thirty seconds before the door closes, does a cached QR code at maximum brightness sound like a feature or just basic competence? We built it because we think it's the latter. What do you think separates a feature that delights from a feature that simply shouldn't fail?
Ready to try FlashSeat?
One tap to download. No sign-up wall.