Skip to content
Business Agile
Work
API · Donation collection for non-profits · In development

TapToSupport

An in-person donation app: the donor taps their card on the volunteer's phone.

Key figures

domain model entities6
payment providers compared4
planned repositories: website, mobile, API3

TapToSupport is an in-person donation app for non-profits a Groupe BERREBI internal product I have been designing and building since September 2026. It comes down to one gesture, which we call the TapToPay: the volunteer starts the payment on an Android phone, the donor taps their card on it and leaves only an email address. Later, they receive a single-use link to fill in their details and get a PDF tax receipt, without creating an account.

The project in detail

The first job was to settle the architecture. A web payment link would have been simpler, but typing card details is exactly what stops donations in the field, so native Tap to Pay was a hard requirement. I checked that the PCI MPoC standard requires a device integrity attestation, granted only to apps installed from a store. Hence Android first, then iPhone once Apple grants its entitlement.

After comparing Stripe, Adyen, SumUp and Viva Wallet, I chose Stripe Connect Express and Stripe Terminal, which let non-profits sign up on their own. Payment sits behind a single interface: switching provider would mean writing one class.

The project is at the API stage. It runs on FastAPI with async SQLAlchemy 2.0, Alembic and PostgreSQL 18, under strict mypy. It models six entities (non-profit, volunteer, donor, donation, tax receipt, consent), renders receipts with WeasyPrint and sends email through Brevo. The Docker image and the initial migration were checked for real. A TanStack Start website and a React Native mobile app built with Expo come next.

What was done

  1. 01

    Native Tap to Pay on Android: the donor taps their card, with nothing to type

  2. 02

    Four payment providers compared before choosing Stripe Connect Express

  3. 03

    Payment isolated behind one interface, replaceable with a single class

  4. 04

    PDF tax receipts and single-use magic links, with no donor account

  5. 05

    FastAPI back end under strict mypy, migration checked on PostgreSQL 18

Frequently asked questions

Why not use a simple payment link or QR code to collect donations?

Because typing card details is the main obstacle to giving in person. With native Tap to Pay, the donor taps their card on the volunteer's phone and only types an email address.

Why does TapToSupport launch on Android first?

Tap to Pay requires a device integrity attestation, granted only to apps installed from a store. The Play Store is quick to obtain; Apple's Tap to Pay entitlement is negotiated separately, for an iPhone version later.

Does the donor need an account to get a tax receipt?

No. They leave an email address when giving, then receive a signed single-use link to complete their details and download their PDF tax receipt.

Other work

A project? Let's talk this week.

A short brief, an answer within 48 hours, a firm estimate after scoping.

Describe my project