Fintech · Payments
Save-n-Pay
Payments, dealer accounts, and a month-end that reconciles.
- Role
- Full stack
- Duration
- 12 months
- Team
- 3 from our side
- Sector
- Payments
The situation
Remote payments, transfers, and dealer accounts on mobile, with PIN security on the sensitive paths and reporting the finance side depends on.
We built the React Native client, the GraphQL API behind it, and the reporting layer.
The problem
Two audiences with incompatible needs in one product. The consumer path has to be fast and forgiving; the dealer and finance path has to be exact and auditable.
Month-end was the pressure point. Reconciliation meant exporting raw transaction data and assembling it by hand in a spreadsheet — slow, and unreviewable once anyone had edited a cell.
What we built
- 01
A GraphQL API shaped for two clients
One schema serving the consumer app and the dealer views without either forcing compromises on the other's queries.
- 02
PIN security on the paths that move money
Re-authentication at the transaction boundary rather than only at login, so a handed-over unlocked phone cannot transfer funds.
- 03
Transaction and fee reporting as a first-class feature
Fee revenue modelled explicitly rather than derived after the fact, so a report and the ledger cannot disagree.
- 04
One-click PDF exports
Generated server-side from the same queries the app reads, so the document finance files is the same data the product shows.
The outcome
Transaction and fee-revenue reporting moved from manual export to one-click PDF.
Month-end reconciliation became a generated document rather than an assembled spreadsheet — traceable back to the ledger, and reviewable by someone who did not build it.
More work
Synzi
Adding a new patient language became a content edit instead of a code release.
EnterpriseTrident Ops Portal
A permissions model complex enough that it had to be built test-first.
Field opsAZ Data Collector
Inspection checklists that finish where there is no signal, and reconcile when there is.