Barcode wallet PWA project

posted on 2026-08-12

I have had mobile-pocket on my phone for a while, but lately it started telling me about their privacy policy and how they track me. That prompted me to try other apps and I tried My Barcodes but at the fourth barcode, it asked me for money.

Then I decided to vibe-code a barcode wallet progressive web app (PWA) for my phone and start using that instead. It is fully open source, does not track, and hosted in the EU. Here is a quick overview of the technical approach.

First it's a progressive web app: a website meant to be installed on your phone as an app. It is as simple as adding a manifest file to next to your index.html to explain it's meant to run as an app. It has Javascript to cache assets aggressively, allowing you to use the application without being connected to the internet. It uses IndexDB (storage for websites) to store the codes on your phone, so no server side intelligence required.

Hosting

This allows me to do static hosting. Most of my websites run on Cloudflare, but I wanted to try non-US alternatives. I tried danubedata but their static site hosting plan has a fixes price unrelated to storage size. I want to pay for the environmental impact of my hobby projects, but I don't want to overpay for simple things like this.

Then I tried Scaleway, but given that I wanted a sub-domain to host this (keep my blog and this app as separate deployments) I would have to have an edge service pipeline for every connected domain. That means I would pay for a terabyte of traffic for my 3MB app that is aggressively cached at the user side (around 33K new users every month 🤣).

Then I tried GCore, which seemed processing. But when I connected their storage to their CDN using their custom S3 parameters, I ended up with a website showing me an XML response from the S3 api directly. I did not try to fix that, and just gave up.

I did not try statichost.eu because it's also a per-domain pricing plan.

Finally I ended up using bunny.net: pay per use CDN and pay per use storage. You configure storage, connect your storage to a CDN and you are done. Simple enough and free Let's encrypt HTTPS (a requirements for PWA deployments).

Deploying from Github actions to Bunny.net

There is a bunny.net CLI in development, but till that hits a general release with a officially supported github action, I decided to use the S3 interface to sync the files to storage:

      - name: Deploy to Bunny.net storage
        uses: jakejarvis/s3-sync-action@v0.5.1
        with:
          args: --acl public-read --follow-symlinks --delete
        env:
          AWS_IGNORE_CONFIGURED_ENDPOINT_URLS: true
          AWS_S3_BUCKET: ${{ secrets.BUNNY_BUCKET }}
          AWS_ACCESS_KEY_ID: ${{ secrets.BUNNY_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.BUNNY_SECRET_ACCESS_KEY }}
          AWS_S3_ENDPOINT: "https://de-s3.storage.bunnycdn.com"
          SOURCE_DIR: "dist"

That's it, now it's running on https://barcode-wallet.bneijt.nl/

Happy hacking!