All work

Production · Architect and sole engineer · 2026

Shafer Law Payments

Card and ACH payments for a law firm, under PCI SAQ-A

  • Next.js
  • TypeScript
  • Stripe
  • Prisma
  • PostgreSQL
  • Clerk
  • Vercel

The constraint

A replayed Stripe webhook that double-applies a payment is not a bug you apologize for at a law firm, and the audit trail has to survive bar-association review. That is why money is integer cents, invoice numbering is atomic, deduplication is two-layer, and the log is append-only.

What it is

Invoicing and online payments for a law firm, built to the correctness standard that client money and bar-association review demand.

What shipped

  • Stripe Checkout supporting cards, ACH, and Apple and Google Pay, with token-gated payment links and automated email receipts.
  • Signature-verified idempotent webhooks with two-layer deduplication, so a replayed or duplicated event can never double-apply.
  • Atomic invoice numbering and integer-cent accounting, with no floating-point money anywhere.
  • ACH payout reconciliation tying bank transfers back to individual payments.
  • An append-only audit log built for bar-association review, with card data kept entirely off the application (PCI SAQ-A).

Measured outcome

  • Handling real client payments in production.
  • No double-charges, deterministic reconciliation, and a full audit trail by construction rather than by convention.