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.