All articles

How money moves

In progress

Charges, payments, Stripe, and the rule that stops a duplicate webhook charging a family twice.

In progress. Part of this works today. The article says which part.

Written for Club staff

The shape of it

A household has a billing account. Charges are posted to it — a membership fee, a meet fee, a guest pass. Payments are recorded against it. The balance is the difference, and it is one number that every screen reads.

There is no second ledger. The treasurer's statement, the family's balance card and the front desk's verdict are the same number.

Card payments

Card payments run through Stripe. SwimWin does not hold your club's money and does not touch a card number — the card details go to Stripe, and SwimWin records what Stripe says happened.

A family's Pay now sends them to Stripe's own payment page. SwimWin writes a "waiting" payment first, and books it only when Stripe confirms — so the page they return to says "waiting for confirmation" rather than guessing. A saved card is collected by Stripe's form, and SwimWin keeps the brand, the last four digits and the expiry. A bank account (US ACH) can be saved the same way: Stripe verifies it instantly with the family's bank, and the authorization the family accepted is kept with it.

A Checkout page lives for an hour. A family who opens it and walks away leaves a "waiting" payment behind that never touched their balance; a daily sweep marks it cancelled once Stripe confirms the page expired, and Pay now always opens a fresh page rather than the dead one.

Booked once, even when Stripe says it twice

Payment processors deliver the same event more than once. That is normal, it is documented behaviour, and a system that does not plan for it charges a family twice and produces a treasurer's report nobody trusts again.

SwimWin books a Stripe event exactly once. A repeated delivery of an event that has already been recorded is recognised and discarded rather than posted again.

Offline payments

Cash and bank transfer are first-class, not a workaround. Record the payment against the account and the balance, the statement and the gate verdict all update together. A club system that cannot record a bank transfer is a club system that produces two sets of books.

Proration

When a charge is calculated from a partial period, the basis is recorded with the charge. The question "why is this £64 and not £80" has an answer stored alongside the number, rather than being reconstructed from memory in October.

What is not built yet

  • Bank accounts that cannot be verified instantly. Stripe's small-deposit verification is not offered yet; such a family can save a card instead.
  • Reporting. See Reports.

Related

Looking for something else?

Search every article, or ask your club — SwimWin support cannot see inside a club’s roster, and your club can.