← All work
Live beta · pre-launch, still in build

Dispute Avenger

Do-it-yourself credit disputes, with the paperwork, the deadlines and the record handled properly.

See the attorney page

Private repo · code walkthrough on request

automated tests
1,100+automated tests
recorded architecture decisions
77recorded architecture decisions
day legal clocks tracked
30 / 45day legal clocks tracked
encryption on every upload
AES-256encryption on every upload
The problem

Anyone can dispute an error on their credit report, and the law gives the bureaus 30 days to answer — 45 in some cases. Doing it yourself means comparing three or more reports line by line, writing letters that cite the right sections, mailing them certified, keeping the receipts, and noticing when a deadline quietly passes.

Dispute Avenger is a self-help tool for that work, not a credit repair service: the person decides what is wrong and says why in their own words, and the software keeps everything else straight. It is running as a live beta. Public launch waits on a legal review, and billing is built but switched off until then.

Dispute Avenger cross-bureau comparison: seven accounts across Equifax, Experian, TransUnion and Innovis with differences highlighted, and a side panel explaining a balance and a status difference, all sample data
The comparison grid, with sample data: differences are marked and explained, never declared errors.
Dispute Avenger page for consumer-protection attorneys, showing the firm case list, a shared case’s comparison view and how sharing works
The page for attorneys — a shared case is read-only, and every view is logged.
What it does

One case, from the first report to an attorney’s desk.

Every bureau, side by side

Accounts from Equifax, Experian, TransUnion and the specialty bureaus line up in one grid, and every difference in balance, status or dates is marked and explained in plain words.

Findings in your own words

Rules flag what looks inconsistent. Nothing becomes a dispute until the person confirms it, writes the reason themselves and attaches evidence — or says why they have none.

Letters that pass a check first

Each letter is generated as a PDF only after a compliance check passes. A letter can’t cite the seven-year reporting limit, for example, until the dates actually support it.

Deadline clocks

Sending a dispute starts its legal clock. A daily job tracks every one, moves expired disputes to the next step and keeps follow-ups on the original clock instead of resetting it.

Next steps when a bureau stalls

An escalation ladder suggests the next move. A CFPB complaint draft is assembled from the case record, and certified mail through Lob is built in, ready to switch on.

A workspace for attorneys

A person can share their case with a consumer-protection firm. The firm reads everything — reports, letters, proof of delivery, deadlines — and changes nothing, and every view is logged in the person’s record.

How it’s built

The decisions that matter, and why.

  1. 01

    Each account’s data is walled off by the database itself

    Postgres row-level security and tenant-scoped foreign keys keep every account’s records apart, so a bug in one API route can’t leak another account’s file. A cross-account test harness runs against every route in the API.

  2. 02

    A record that shows if it has been edited

    Every step — a letter generated, a file opened, a deadline passed — is written to an append-only log where each entry carries a hash of the one before it. Changing an old entry breaks the chain, and the attorney packet is fingerprinted the same way.

  3. 03

    Evidence is encrypted before it is stored

    Uploads are encrypted with AES-256-GCM before they reach storage, so the storage bucket only ever holds ciphertext. Nightly backups are encrypted too, and CI restores one and checks it on every run.

  4. 04

    The compliance check has exactly one door

    Only the letter service may call the compliance gate, and every letter goes through that service. That leaves one place to audit and one place to change when a rule changes.

  5. 05

    AI with guardrails, not free text

    The assistant drafts from the case record through forced tool calls that return structured JSON. A refusal list and output checks sit on both sides, so it can’t give legal advice or invent facts the record doesn’t hold.

  6. 06

    Ship the product, hold the switch

    Stripe billing for people and for firms is built and tested, but turned off behind a setting. Selling credit-dispute software has real legal rules, so charging waits until counsel signs off — the decision log records that choice along with 76 others.

Built with
FastAPI (Python 3.12)PostgreSQL + row-level securityAlembicNext.js 16Tailwind CSS v4StripeLobPostmarkClaude APICloudflare R2RailwayVercelDockerGitHub Actions + Playwright
Where it stands

Dispute Avenger is live as a beta at app.disputeavenger.com. Before it opens to the public: a legal review of how it is marketed, email-provider approval, and then switching billing on. Next on the build list is a read-only demo firm so attorneys can try it without signing up.

Talk about a build like this