Drawing set — selected work
Portfolio · Jeffrey Jorgensen

I build systems where the money has to add up.

Backend engineer working on custodial wallets, multi-chain payouts, double-entry ledgers and the document pipelines that feed them. I take a system from database schema to production, and I write the tests that keep it honest. Client names and internal details are withheld — what's described is the mechanism, which is the part that transfers to your problem.

Track record — measured from my own repositories, 01·09·2026
1.44M
lines of my own code
18,000
automated tests
5,906
commits, mine alone
351K
lines of production Go
4
blockchain rails
2
products on one accounting core
301
API endpoints, statement platform
3 yrs
in daily production
Sheet A — Selected work

What I've actually built

Exchange · ledger — architecture & all server-side engineering

Crypto exchange and prediction market on a ledger-first core

Go
314K
Tests
2,324
Commits
1,193
Chains
4

Users hold a USDT balance, trade, and take positions on event outcomes. The requirement that shaped everything: the books have to balance at any moment, including mid-trade and mid-withdrawal.

I put the accounting core in its own reusable module — double-entry postings, accounts, HD wallets, deposits and withdrawals across four networks, on-chain reconciliation, fees, compliance screening. The order book and prediction market sit on top of it. Private keys never live in the application: signing is isolated in a separate service.

The same core now backs a second, unrelated product. That's the test of whether a ledger was built properly: it survives being reused.

Mobile wallet screen: balance, available and locked amounts, deposit and withdraw buttons, transaction history.
Fig. A-1Wallet — balance split into available and locked, so a hold is visible rather than a surprise at withdrawal.
Go 1.25 · PostgreSQL 16 · chi · pgx · Redis · WebSocket · Prometheus · Vault · go-ethereum · btcd · tonutils
Payments — product design, backend & frontend · in active development

Payment rail for companies that pay many people, often

Endpoints
48
Tests
384
Coin×net
8
Status
Build

Multiple receiving addresses with source attribution, balance accounting, batches of payouts as the central object, recurring debits, screening on the way in. Six coins across eight coin-and-network pairs, because a currency without its network is an incomplete quantity — that rule lives in the data model, not in a convention people are asked to remember.

The part I'd point at first: a batch runs as a dry run before it sends. Every row comes back with its fee on top of the amount and the exact debit that will hit the account. Nobody discovers the cost of a two-hundred-line payout after the money has left. Built on the ledger core above rather than from scratch — which is why it reached 48 endpoints and a full batch lifecycle in weeks, not quarters.

Payout batch dry run: 487 rows will send, recipients receive 12,480.25 USDT, the exact debit including fees, and 13 rows that will not send each with a reason.
Fig. A-2The dry run before anything is sent: 487 rows out, recipients receive 12,480.25 USDT, 12,967.25 leaves the account fees included, 13 rows held with a reason each. Test network — amounts are not real.
Receiving screen: each traffic source has its own address per network, an immutable import key, and a required memo tag.
Fig. A-3Receiving with source attribution — every source gets its own address per network, so money identifies itself by where it lands. The import key never changes; that is what makes the total per source add up across renames.
Go · PostgreSQL · Next.js 16 · React 19 · TypeScript · Playwright
Financial data — sole backend engineer, later the frontend as well

Bank statement processing platform

Python
321K
Tests
7,195
Endpoints
301
In use
3 yrs

Ingesting, parsing and generating bank statements in a national exchange format, analytics over transactions, client and counterparty registries. A team uses it every working day. A chat bot as the fast interface, a 301-endpoint web API, background workers so heavy processing never blocks a user, progress on long jobs over WebSocket and server-sent events.

Money is Decimal and NUMERIC, never float — a project rule, not a preference. The web client was rewritten from Vue to Next.js with types generated from the backend's own OpenAPI spec, so a contract change breaks the build instead of the user's screen. Three years in daily production with a single engineer maintaining it. The 7,195 tests are why that was possible.

FastAPI · SQLAlchemy 2 async · PostgreSQL 17 · Redis + RQ · Alembic (88 migrations) · Next.js · MinIO · Grafana
Pipeline · integrations — sole engineer

Credit-file pipeline between three bureaus, cloud storage and a CRM

Python
117K
Tests
3,690
Formats
3
Workers
3

Account managers were reading PDF credit reports from three different bureaus by eye and retyping the figures into spreadsheets and deal records. The brief was to remove the manual step entirely, not to speed it up.

A CRM webhook lands in a queue, workers pull the PDFs from cloud storage, parse three unrelated report formats, merge them into one picture, fill seven blocks of a working spreadsheet and write the result back onto the deal. Some documents are scans, so recognition is part of the pipeline rather than a prerequisite for it. This is the second generation — the first had almost no tests and was hard to change without fear, so I pulled the pipeline out and rebuilt it, tests first. The 3,690 tests exist because a misparsed credit figure is not a cosmetic bug — that lesson cost me a rewrite.

FastAPI · Redis Streams · RQ · pymupdf · pdfplumber · tesseract · OpenCV · Kubernetes
Security · access — service owner within a five-role team

Identity service: the only issuer of user tokens

Endpoints
73
Auth
4
Commits
175
Open src
MIT*

One place in the system issues user tokens, so no other service has to store a password or a piece of personal data. Sessions, EdDSA-signed tokens with a published key set for neighbouring services to verify, passwordless keys via WebAuthn, one-time codes, Argon2 hashing, profiles and roles, and the mapping between identity and money accounts.

Fresh dependency releases sit in a one-week quarantine before they can be installed. A compromised package is most dangerous in the hours after publication, before it's pulled; a week closes that window without delaying real security fixes.

FastAPI · EdDSA / JWKS · WebAuthn · Argon2 · TOTP · arq · basedpyright  ·  *the coordination tool below is the MIT-licensed one you can read
Open source · MIT — author

A coordination channel for AI coding agents

Python
14K
Tests
360
Licence
MIT
Public
Yes

When several AI agents work on one system across separate repositories, they need a way to agree — otherwise each fixes the boundary its own way. An MCP server with a shared mailbox: messages addressed to roles, threads with a lifecycle and work status, machine-readable agreement on decisions, and shared contracts held as pinned, versioned entries. Two transports: local, and hosted with isolated channels and token auth.

This is the one piece of my work you can open and read yourself. If you want to judge how I write code before hiring me, start here.

MCP · SQLite · ASGI · Docker + Caddy · pytest-asyncio
Sheet B — Also built

Shorter entries from the same shop

Tax filing pipeline — statements and receipts to a filed return with stamped e-document package; print correctness verified pixel by pixel against the official form.
SME books reconstruction — a bank statement turned into the five reports a bank asks for, each figure carrying its source, rule version and confidence.
Counterparty screening bot — company risk card from a tax ID: registry data, key-pool API access, risk flags. In production since 2025.
LLM pipelines — a site generator and a newsroom pipeline with a configurable eight-step scoring chain; providers interchangeable, every call traced.
Production infrastructure — a 37-service contract: Nginx with TLS, PostgreSQL with backups and restore drills, Vault, monitoring, deploy on push.
Financial front ends — trading screens, wallet, statement workspace: 258,000 lines of TypeScript with clients generated from OpenAPI.
Sheet C — Straight answers

The things you're going to ask anyway

You're one person. What happens to my project if you disappear?
You lose speed, not the project. Code goes into your repository from day one, not mine. Every repository carries an orientation document that gets a new engineer productive in a day — I keep 25 of them. Payment is per milestone, never up front. Code, credentials and IP transfer to you by contract. If you want, I'll walk a developer of yours through the architecture before we finish.
You work with AI agents. Isn't that generated code of unknown quality?
The agent supplies speed; the discipline supplies quality. Around 18,000 automated tests, integration tests against real Postgres and object storage in containers, checks that run before every commit, dependency vulnerability scanning, a quarantine on fresh package releases, a pinned compiler toolchain. I also wrote and open-sourced the tool my agents coordinate through — you can read it. Most teams adopting agents in 2026 have no governance model at all; that's the part I built first.
We have an NDA. Will our project end up on this page?
I show the mechanism, never the client — no names, no data, no recognisable screens. Case text is approved by you before it's published, and if you'd rather have no case at all, there's no case. The work above is written that way already.
We already have a system, built by someone else. Will you take it on?
Yes, and not by rewriting it. The first step is a fixed-price audit: architecture review, the specific places where figures diverge or the design won't survive growth, and a plan with estimates. That document is yours whether or not we work together after it.
Sheet D — Bill of materials

Stack, all of it from the work above

Languages
Go 1.25 · Python 3.11–3.12 · TypeScript 5 · SQL
Backend
chi · pgx · FastAPI · Pydantic v2 · SQLAlchemy 2 async · Alembic · golang-migrate
Money & data
PostgreSQL 16–17 · Redis (streams, queues, cache) · MinIO / S3 · decimal arithmetic · double-entry accounting
Chains
Bitcoin · Ethereum & ERC-20 · Tron & TRC-20 · TON · BIP-32/39 HD wallets · isolated signing service
Frontend
Next.js 16 · React 19 · Tailwind 4 · shadcn/ui · TanStack Query · Zustand · Vue 3
Documents
reportlab · pypdf · pdfplumber · pymupdf · tesseract · OpenCV · openpyxl · pixel-diff verification
LLM
Anthropic · OpenAI · Langfuse tracing · structured outputs · vision · MCP servers
Infra
Docker & Compose · Kubernetes · Nginx + TLS · Vault · Prometheus & Grafana · GitHub Actions · PITR backups
Quality
pytest · testcontainers · Playwright · Vitest · MSW · golangci-lint · ruff · basedpyright · govulncheck · bandit
Sheet E — Three ways in

Tell me what's breaking.

Thirty minutes, no preparation needed. Describe what happens today and what should happen instead, and I'll tell you whether I'm the right person — including when the answer is no.

$1,800
Fixed-price audit · five working days. Architecture review, the places numbers diverge, a costed plan. Yours to keep. A scoped pilot starts at $4,000.
from $14,000
One hard component — a ledger, a payout flow, a document pipeline, an integration. I fit into your codebase and its rules.
from $35,000
The whole system — schema, backend, interface, deployment, monitoring. For a result rather than an extra person in a team.