My ideal barcode wallet app - an unsolicited app outline

Cover Image for My ideal barcode wallet app - an unsolicited app outline

I moved to the UK recently, and with that came the incredible variety of supermarkets to choose from. Being somewhat inherently lazy, or maybe efficient, I just pick the closest and go there 99% of the time. That nearest store just so happens to be a Tesco, which heavily encourages using their loyalty card with discounted prices only available when you present your club card. I mean, I'm only human. I got the card and have been dutifully scanning it any time I will get a discount for doing so. Except for a slight difference, I have been showing the barcode on my phone using a popular wallet for store cards app. Now the user experience of this app grates on me practically every time I use it. This app grated on me enough that for about 8 weeks, I kept a note with my thoughts on what my ideal version of this category would look like.

I also recently came across John Siracusa's 'Unsolicited Streaming App Spec', and it really got me thinking about how I consider functionality and requirements. John's list comprises must-haves, the non-negotiable bare minimum. I realised that I had been writing a less eloquent version of this for a different category of apps. It is also reasonably opinionated, so unlike John's great streaming app spec, I don't think mine can be considered generalisable, just my ideal for this category. So without further ado, here is my unsolicited barcode wallet app outline.

Displays barcodes and QR codes well

This is table stakes, to the point of being blindingly obvious. Showing codes is not too complex, but there are a few complexities to doing so well.

The code display should be large, bright and legible to give the scanner the best chance of reading it successfully. My ideal barcode app will support this by brightening the screen when a store card is displayed. Naturally, the app will return to the previous brightness when the store card is closed or if the app goes into the background.

My ideal barcode app will rotate the card and corresponding barcode if needed. A subtle cue can be used to detect this; if the device is physically rotated. It's so subtle that it is easy to overlook, but the user rotating the device will likely indicate that you should rotate the content.

Adding cards is easy

I want the ability to add cards whether they are sitting in front of me or I have a screenshot or photo already stored. The app should attempt to detect a name or title in an image where feasible. I should be able to add more than one image from my library at a time, for example, if I am migrating screenshots from another app or I have a bunch of photos of physical cards from an old wallet.

Is privacy-friendly

Even using a loyalty card gives the supermarket or operator a lot of data! I understand this is actually more or less the motivation of supermarket loyalty and rewards programs. Less so for my friendly baristas and their punch card program. To my lovely local baristas, don't worry, you are not who I am referring to (and I'll see you soon!). I don't want my barcode wallet app tracking me on top of what the card issuer is already doing, whether across the internet or physically.

Must work across devices (including Apple Watch and widgets)

I don't always have my phone on me when I go for my quarterly run, but I always wear my Apple Watch. So when I grab snacks at Sainsbury's on the way back, I want to be able to get them for a discount.

To be completely honest, having a widget is more fun than strictly practical. It is helpful, though, because it means that I don't even need to open the app in some instances but can throw my home screen under the scanner. An intelligent implementation would use the Siri suggestions feature in WidgetKit to rotate the card to the top of the stack, but more on this later.

Stores data

An account should be optional, as I don't want to actually send the contents of my wallet to any external party. Not because I don't like the companies running other apps also getting those sweet, sweet spud discounts at Tesco, but because I don't want these companies or developers to aggregate and sell this data. This ties into my standpoint on maximising privacy.

Without a separate account, I think the best way to store data for a user and share this data between devices is iCloud. The standard disclaimers apply: iCloud is imperfect and has its own challenges. So best, not perfect. Still, compared to having another account and sending the data to another company or developer, iCloud fits my requirements profile best.

Is somewhat smart

It is handy if a wallet app can suggest a card for you right as you intend to use it. Whether that is on the lock screen, at the top of search results or in Siri suggestions. Existing apps on the market approach this in many ways, ranging from not trying at all to requesting permanent location access to detect when you are at a store.

As a blanket rule, I will not give an app access to my location data full-time. The rare exceptions I make are for apps where this is fundamental, like maps apps. Otherwise, I am very rarely convinced that there is a compelling reason to give an app that much data, not when there is so much evidence individual location data is collated and sold to be aggregated with data from other sources. Call it old-fashioned, but I am becoming a bit of a stickler for essential privacy.

So my ideal barcode wallet app will implement smart features where possible by leveraging the systems already built into iOS. This is where the italics in smart come into play, as I know that Siri is far from perfect. However, it offers several advantages, notably that the app developer doesn't need to track my location; Siri can do so instead. This approach completely bypasses that location data trust problem; the developer never receives my location data. A developer can just build the app to tell Siri when the user is using a card, and Siri will figure out the rest. I've found this isn't perfect, but it's still pretty damn good.

Summary of my ideal code wallet app

  • Displays barcodes and QR codes
  • Brightens the screen when displayed, return to original afterwords
  • Rotates code when the device screen is rotated
  • Adds a card from the camera and automatically detect the barcode
  • Adds a card from an image in the photo library, automatically detects the barcode or QR code, and tries to detect a name
  • Is privacy-friendly
  • Can batch add cards by adding multiple images at once
  • Has an Apple Watch companion app
  • Has widgets that can show cards
  • Stores data (in iCloud)
  • Integrates with Siri suggestions to surface cards at learned times and locations


If you know me well, you may already suspect the not so surprise ending.

I built the user-focused barcodes app that I wanted to use, and it is available today on the App Store. For anyone thinking that the name Barcodes is a considerable stretch and wondering how I came up with it, it came to me in a dream.

It does all of the above requirements so far, and on the roadmap are things like adding from extension, sharing your barcodes, exporting barcodes or QR codes as an image and more.

Advertising and monetisation

One area that I must admit is not 100% user-focused is the ad display for free users. (Is monetisation ever able to be entirely user-focused? I'd love to know for sure.) An ad will pop up just once every 24 hours and obscures the screen as it displays. Unfortunately, this means that if you have opened the app via a widget or Siri shortcut, it will open to the barcode, then shortly after be obscured by an ad. This is not an ideal user experience, but I am trying to balance building a really great app with sustainably funding development. However, users can decide to pay for the Unlimited version via either subscription or once off payment. In that case, the ads disappear, you're able to select all app icons, and then the app user experience is 100% user-focussed. Yes, Barcodes isn't completely free, and some competitors are. The critical difference is that when you pay for Barcodes, you know that you are the consumer paying for the product with your money rather than with your data. People and teams trying to make money through software often choose to do so via charging the consumer directly or making money from selling the ability to advertise to the user or the user's data. Usually, the last two are combined to such a degree that most advertising online relies on invasive amounts of user data and tracking. Barcodes' business model attempts to give users the option to pay for the app directly if they find the value proposition compelling while monetising free usage via privacy-friendly advertising.


Barcodes is my newest iOS app which lets you scan and store your physical reward cards, or any other kind of code, into a digital wallet. You can scan and store QR codes or barcodes from either your camera or photo library. Perfect if you were keeping these cards in your photos or are migrating from a previous digital wallet app. You can display these codes on your phone, watch or even in a widget on your home page. Your cards are stored securely and privately into your iCloud storage and syncs between devices. You can store up to 10 cards for free on the privacy-friendly ad-supported free tier or upgrade to Barcodes Unlimited for an ad-free experience and unlimited card storage.

Download now

In your local stores now, available everywhere iOS apps are sold!

Links to various iOS app storefronts:

Barcodes on the App Store

iOS App Store: Barcodes

The Apple App Store presents: Barcodes