It started as an email full of questions.

Brandon Dothager does campaign finance for Democratic campaigns in Indiana. In early 2025 he emailed Wojciech a list of questions about building software. Weeks later the first commit landed. The paid MVP turned into a company: CampaignFinance.app, bootstrapped, profitable, in production with Indiana campaigns, with Wojciech as co-founder.

CampaignFinance.app dashboard: the next CFA-4 filing deadline with days remaining, raised and spent for the period, cash on hand, and synced campaign bank accounts
The shipped app, demo data · campaignfinance.app ↗
Co-founded
Engagement shape
February 2025
First commit
Indiana
One state, done properly
Profitable
Bootstrapped, no outside money

What Brandon brought.

Brandon Dothager’s domain history is one you can look up. He runs The Ballot Boxers, a Northwest Indiana firm doing campaign setup, management, and research for grassroots Democrats. For years he’s been the accountant behind campaign filings, and in 2020 he was the candidate: he ran for the Indiana House. He’d filed Indiana’s campaign finance reports from every seat at the table, and he knew exactly where the software he wished existed was failing everyone. He just didn’t have a way to build it himself.

How it started.

Brandon found Wojciech the same way Systellar’s founders later would: through public posts helping strangers with technical questions. His first email, in early 2025, was a list of questions, because he was weighing whether to build the product himself. The answers he got were straight about what that would take, with nothing expected in return. A few conversations later there was an agreement to build the MVP for money, and the first commit landed on February 12, weeks after that first email. Nine days in, the app was already filling out Indiana’s official CFA-4 PDF.

Somewhere along the way it stopped being a client project. A real business was forming, and it needed a long-term technical owner with a real stake in the outcome. Equity was the honest way to set that up, and Wojciech went from contractor to co-founder.

The calls on record.

Bank sync

The vendor we planned to outgrow

Bank sync is the product’s core differentiator: a treasurer who can see the account doesn’t have to chase the candidate for statements. It shipped in the first sprint on Teller, which was the fastest provider to spike, and it shipped behind a provider-agnostic layer built on the assumption that the first vendor pick would be wrong. Nine months later it was: in November 2025 Plaid replaced Teller for reliability and coverage, and the swap happened behind the abstraction, without touching the features above it.

Scope

One state, to the letter

CampaignFinance.app supports Indiana. That’s the whole list, and it’s the point. Indiana’s forms are covered end to end: CFA-1 through CFA-11 filled onto the state’s official PDFs, plus the IED e-filing export in XML and spreadsheet form, built against the state’s own EDI specifications, which sit in the repo. Covering fifty states shallowly would demo well and fail a treasurer on filing day.

Compliance

Automation, demoted to a button

Contribution itemization got automated in December 2025: the system reclassified contributions as they crossed reporting thresholds. Within two weeks it was reverted to a button. Compliance software shouldn’t change a filing-relevant record without a human asking it to, even when it’s right. The automation still does the work, but a person decides when it runs.

The reconciliation view in CampaignFinance.app: bank deposits matched against Schedule A contribution records, sorted into auto-matched, likely, and manual-linking groups
Reconciliation in the shipped app · confident matches accepted, everything else waits for a person

What a new engineer would find.

~29k
Lines of TypeScript
21
Test files, all compliance-shaped
28
Database migrations
7
Written design specs

The tests concentrate where the risk lives: contribution limits, itemization gaps, the filing calendar, reconciliation scoring, the PDF field maps. The state’s official EDI specifications are committed to the repo next to the code that implements them.

How AI fits into this codebase.

This codebase runs the strictest version of our AI discipline: agents don’t commit here at all. The rule is written into the repo’s agent handbook, and the history shows it holding: nine agent-authored bug-fix pull requests, none merged without review. The product itself uses AI the same way. Bank transactions get enriched by a model, but the output has to pass a Zod schema and a set of deterministic Indiana classification rules with their own unit tests before it touches a ledger. An auditor asking why a record changed can’t be told the AI decided.

The other two versions of this discipline are on the Systellar and Sample Vault pages: same rule, enforced differently in each codebase.

Where it stands.

Around fifty reports generated and filed with the state so far, with 27 committees on subscription today. Plaid-synced bank feeds, ActBlue imports, reconciliation, and the IED e-filing export are live. The product is bootstrapped and profitable, and the roadmap still gets set the way it started: in March 2026 a partner treasurer’s needs drove a 220-file release that introduced reconciliation and the state export in one drop. In August 2026 the business model itself got refined in a 30-commit day.

Where an engagement like this starts.

Co-founding is the deepest shape our work takes, and it’s rare: it happened because the fit was obvious to both sides after months of working together. Not sure which shape you’d need? Start where every engagement here started, smaller. The technical audit is €4,900, fixed scope, report in 7 business days. The embedded-team version of this story is Systellar’s, and the one where we’re our own client is Sample Vault’s.

Questions this engagement raises.

Do you take equity in client companies?

No. Campaign Finance is the one time it happened, and it wasn't the plan: Wojciech had become the technical co-founder in practice, and the paperwork caught up. We don't ask for equity and we'd rather not hold it. A retainer engagement gets the same people and the same depth.

Do I need to be technical to work with you?

Brandon isn't. What we need from you is the domain: the rules, the edge cases, what actually breaks in the field. Turning that into architecture is our half of the work.

What does an engagement cost?

The technical audit is €4,900, fixed scope, with the report in 7 business days. The longer partnership runs on a monthly retainer, scoped on a free call.

Tell us about
your domain.

Tell us what you’re building and what you know about your field that nobody else does. We read every message and usually reply within a day.