Banking
Banking software built around the core you keep
Seven builds ship payment logic. Your ledger and evidence trail are where a banking programme is won or lost.
A core banking platform holds the balances and answers to the regulator. What surrounds it decides whether your product works: ledgers that reconcile to the penny, payment flows that survive a timeout, onboarding that produces evidence an examiner can follow. We build that layer for you. Seven production builds with Stripe, real-time pipelines on Trading CoPilot, and document-heavy AI on PremiumAudit.io and IRS Escape Plan all run on the same discipline your banking programme needs.
Three worlds that cannot share one page
A chartered institution, a fintech renting a licence and a payments company face such different compliance burdens that one pitch cannot serve them honestly. The chartered buyer runs a vendor risk review and asks which banks we have worked with. Our answer there is none, and that answer usually ends it.
So the fit is narrower than the keyword suggests. To a bank or credit union we are useful as a product team beside the core. Usually that means a line of business whose internal queue is too long. The better fit is a fintech or platform, where the work is product engineering with money movement, real-time data and AI.
- 01Regulated institutions buy something that passes internal audit and the next exam.
- 02Fintechs and platforms buy something that passes the sponsor bank's diligence and reconciles to the penny.
- 03Both get senior engineers who have argued about idempotency keys in production.
Sector context
Numbers that shape the architecture
5 years
Retention for identity records after an account closes (31 CFR 1020.220)
~24 hours
How long Stripe keeps an idempotency result before pruning it (Stripe docs)
60 days
Window for an unauthorised ACH return on a personal account (Stripe docs)
7
Of our builds ship a Stripe payment integration
The work we take around a core
Each of these is a capability claim we can source to a named build, or a standard we can cite. Neither is a claim of bank delivery.
Ledgers that answer point-in-time questions
You get append-only entries, balance derived rather than stored, corrections posted as reversals instead of edits, and balancing per currency. A ledger is correct because of its constraints, not because of its code.
Payment flows that survive a bad day
We derive idempotency keys from your business operation and persist them before the call. Handlers get built as state machines that reject impossible transitions, because webhook delivery is out of order by design.
Real-time data pipelines
Trading CoPilot moves market data and alerts for a private UK client on a live pipeline. That's event-driven engineering under time pressure, and it transfers directly to your payments and monitoring work.
Hold and release on a marketplace
WorkMateAI uses Stripe Connect to hold funds and release them on completion. Stripe documents that a transfer fails when it exceeds the available balance and isn't retried automatically, so you have to design the flow for that.
Document AI for onboarding and review
PremiumAudit.io reads payroll registers, tax forms and ledgers, then reconciles figures across documents. The same shape covers your onboarding packets and diligence files, with a person deciding.
Evidence that survives an exam
We model verification as a process with states and evidence, not a boolean flag. You store the method used, what it returned, when, and who ran it. Examiners ask how, not whether.
- CorePosts in a nightly batch
- CutoffRead-only window, memo balances
- Sub-ledgerWho owns which share
- ReconcileDaily, breaks owned and aged
- EvidencePoint-in-time, reproducible
Legacy cores post overnight, so today's balance is a memo balance until it clears. A real-time product on a batch core ends up building its own ledger plus reconciliation, which means you build the thing the core was supposed to be. Deciding that deliberately is cheaper than arriving at it in month six.
Succeeded does not always mean the money is yours
On a card payment, success is close to final. On bank debits it's provisional. Stripe documents a dispute window of 60 calendar days for personal accounts and two business days for business accounts, and describes both as final, with no appeal process.
So if your product treats a bank debit as settled at day three, you're carrying two months of unhedged exposure per transaction. The fix isn't clever: make your provisioning rail-aware, so what you release on a card isn't what you release on ACH. Stripe also warns that with separate charges and transfers it doesn't automatically reverse a transfer when an async payment later fails. Your balance gets debited and you reverse it yourself.
- A balance you update is not a ledger. If it is a column you overwrite, you cannot say what it was at 2pm on 3 March.
- Stripe prunes idempotency keys after about 24 hours, so a retry a day later is a new charge.
- Store money as integer minor units and carry the currency. An integer with no currency is not money.
- Store the instant and the business date separately. A payment's banking day is not a timezone conversion.

Systems where money and records have to agree
“I am extremely happy with the results and would highly recommend Hashlogics to anyone.”
Daniel Khin · CEO, PremiumAudit.io
The usual approach against ours
The core
The usual approach
Treated as something to work around, or replace.
How we build
Treated as the system of record. We design co-existence against how batch cores actually behave.
The sub-ledger
The usual approach
Balances derived from whatever the processor last said.
How we build
Double-entry, append-only, reconciled daily and portable enough to hand to a bank tomorrow.
Payment state
The usual approach
Success or failure, with a timeout counted as failure.
How we build
An unknown state is modelled explicitly, with idempotency keys sent before the first attempt.
Onboarding
The usual approach
Collect the identity fields and move on.
How we build
Capture the evidence and the decision path, because the file is what gets examined later.
Audit evidence
The usual approach
Assembled by hand when the date is set.
How we build
Emitted as the system runs, so the evidence exists before anyone asks for it.
Vendor risk
The usual approach
Assumed to sit with the sponsor bank.
How we build
Reconciliation you can see, and a sub-ledger that stays yours if a programme ends.
What this work runs on
Trading CoPilot
- React
- FastAPI
- Supabase
- PostgreSQL
- AWS
Payments we have shipped
- Stripe
- Stripe Connect
Standards we build to
- 31 CFR 1020.220
- PCI DSS v4.0.1
- SOC 2 controls
- ISO 20022
Questions banks and fintechs ask
01You have no bank clients. Why would we hire you?+
For work beside the core rather than inside it, and only where our capability proof actually matches. Our honest pitch is product engineering with money movement, real-time data and document AI, which we can source to named builds. Need someone who has migrated a core or passed a bank's vendor risk review? We're the wrong call, and we'll say so on it. Vendors who answer this question with a case study they can't name are the ones worth worrying about.
02Does using Stripe put us outside PCI scope?+
Only for the right integration type, and the rules got broader in 2025. Your scope gets decided by how you embed the payment form, not by which processor you picked. A hosted redirect or iframe keeps you in the lightest questionnaire, while direct-post and JavaScript SDK integrations push you up a tier. Since the January 2025 version took effect on 31 March 2025, qualifying for the lightest questionnaire also means attesting that your site isn't vulnerable to script attacks. One analytics tag on your checkout page can change that position.
03What does customer identification actually require in the build?+
You need four data elements before you open an account: name, date of birth for an individual, a street address, and an identification number such as a taxpayer ID. Verification itself may happen within a reasonable time after opening, which is why your onboarding is a process with states rather than one gate. Keep identifying information and the record of how you verified it for five years after the account closes. That clock is why a deletion request must never sweep up identity records.
04How do you stop a customer being double charged?+
Derive your idempotency key from the business operation and save it before the call goes out, so a retry reuses it. Generating the key inside the retry loop is the classic bug and gives you no protection at all. Don't lean on the processor alone either. Stripe documents that keys get pruned after about 24 hours, and a key reused after pruning generates a new request. If your system can replay an operation a day later, you need your own table keyed on the operation.
05Our balances disagree with the bank statement. Where does that come from?+
Usually from a mutable balance column and a reconciliation that runs too rarely. Fees netted from payouts, refunds landing in a different period, and timezone-shifted cutoffs all produce breaks. Reconcile daily and automatically, and give every unmatched item an owner and an age. Never repair a break by editing a historical entry. A correcting entry preserves what happened, and if you find a break thirty days late, you're debugging thirty days of transactions.
06How would you start with us?+
We start with a scoping call, which is free, and where we mostly listen for whether this is a fit at all. Where the honest answer needs us inside your codebase, we run a paid two-week diagnostic and give you one number at the end of it, not a spread. Three things drive that number: which rails you touch, whether a sponsor bank or core vendor gates your timeline, and whether your ledger already exists.
Go deeper
- Professional and financial services hub →The industry hub this page belongs to.
- Fintech industry overview →Where our payments and financial-data proof actually sits.
- Payment gateway integration →Choosing and wiring a processor without inheriting its failure modes.
- Idempotency key →Why a safe retry needs a key, and where that key has to live.
- Credit union software →Member systems, core co-existence and exam-ready records.

