Комплект чертежей — избранные работы
Портфолио · Jeffrey Jorgensen

Строю системы, где деньги должны сходиться.

Бэкенд-инженер: кастодиальные кошельки, мультивалютные выплаты, учёт на двойной записи и конвейеры документов, которые их питают. Веду систему от схемы данных до продакшна и пишу тесты, которые держат её честной. Имена клиентов и внутренние детали не раскрываются — описан механизм, а это и есть та часть, что переносится на вашу задачу.

Объём работы — измерено по моим репозиториям, 01·09·2026
1,44M
строк моего кода
18 000
автоматических тестов
5 906
коммитов, только мои
351K
строк продового Go
4
блокчейн-сети в проде
2
продукта на одном учётном ядре
301
эндпоинт, платформа выписок
3 года
в ежедневной эксплуатации
Лист 02 — Спецификация

Три класса задач, одно требование

У всех трёх одно общее требование: цифра в системе должна быть защитимой — прослеживаться до того, откуда она взялась. Именно это я умею.

P-1
Платежи
Контуры и кастодиальные кошельки — приём с атрибуцией по источникам на множестве адресов, массовые выплаты сотням получателей, регулярные списания, скрининг на входе.Bitcoin · Ethereum · Tron · TON · ключи подписи изолированы от приложения
P-2
Учёт
Ядра на двойной записи — система учёта под кошельком, биржей или балансом маркетплейса: счета, проводки, холды, сверка, комиссии, аудит-трейл.Деньги в Decimal, не float · сверка с блокчейном · каждый баланс прослеживается до проводок
P-3
Документы
Конвейеры финансовых данных — выписки, счета, чеки и декларации превращаются в решения, а не просто в извлечённые поля.PDF · OCR-сканы · таблицы · XML · вывод обратно в CRM, таблицы, пакет ЭДО
Лист A — Избранные работы

Что уже построено

Крипто · биржа — Роль: архитектура и вся серверная разработка

Крипто-биржа и рынок прогнозов на ledger-ядре

Go
314 000 строк
Тесты
2 324
Коммиты
1 193
Миграции схемы
78

Задача: платформа, где пользователи держат баланс в USDT, торгуют и делают ставки на исходы событий, а деньги при этом сходятся до копейки в любой момент.

Ядро вынесено в отдельный переиспользуемый модуль: двойная запись, счета, HD-кошельки, депозиты и выводы по четырём сетям, сверка с блокчейном, комиссии, compliance-скрининг. Над ядром — спотовый стакан и prediction-маркет. Приватные ключи не лежат в приложении: подпись изолирована в отдельный сервис. Аутентификация и персональные данные вынесены в самостоятельный сервис — биржа их не хранит вовсе.

Интерфейс — отдельное веб-приложение на Next.js, которое на телефоне должно ощущаться приложением: 81 000 строк TypeScript, 438 тестов, типизированный клиент сгенерирован из спецификации бэкенда, а расхождение версий контракта ловится проверкой на сборке.

Сборочная цепочка компилятора закреплена явно и обновляется как зависимость: расхождение версии означало бы сборку с другим набором закрытых уязвимостей. Это уже поймало семь дыр в стандартной библиотеке, до которых код доходил вызовами.

Экран кошелька: баланс, доступно и заблокировано, кнопки пополнения и вывода, история операций.
Рис. A-1Кошелёк — баланс разделён на доступный и заблокированный, чтобы холд был виден заранее, а не всплывал при выводе.
Go 1.25 · PostgreSQL 16 · chi · pgx · Redis · WebSocket · Prometheus · Swagger · Vault · go-ethereum · btcd · tonutils · Next.js 16 · React 19
Крипто · платежи — Роль: продукт, бэкенд и фронтенд целиком

Платёжный контур для компаний с массовыми выплатами

Go + TS
74 000 строк
Тесты
1 015
Пар монета×сеть
8
Коммиты
154

Задача: партнёрским сетям нужно принимать платежи с опознанием источника и платить сотням получателей пачками — без ручных переводов по одному.

Множественные адреса приёма с атрибуцией, учёт остатка, пачки выплат как центральная сущность, повторяющиеся списания, скрининг входящего. Шесть монет в восьми парах «монета × сеть»: сумма, валюта и сеть всегда ходят вместе — валюта без сети здесь неполная величина, и это правило зашито в модели данных, а не в договорённости.

Продукт продаётся двумя способами: лицензия, когда ключи держит клиент, и сервис, когда средства держим мы. Это не переключатель в настройках — различаются обязанность скринить и то, чей ключ подписывает вывод.

Пакет выплат в режиме dry-run: 487 строк уйдут, получатели получат 12 480,25 USDT, точное списание с учётом комиссий, 13 строк не уйдут с причиной.
Рис. A-2Пробный прогон до отправки: 487 строк уйдут, получатели получат 12 480,25 USDT, со счёта спишется 12 967,25 с комиссиями, 13 строк придержаны с причиной. Тестовая сеть — суммы не настоящие.
Приём по источникам: у каждого источника свой адрес в каждой сети, неизменяемый ключ импорта и обязательный memo.
Рис. A-3Приём с атрибуцией по источникам — у каждого источника свой адрес в каждой сети, деньги опознают себя по адресу зачисления. Ключ импорта не меняется — именно он сводит итог по источнику при переименованиях.
Go · PostgreSQL · Next.js 16 · React 19 · TypeScript · Playwright · общее ledger-ядро
Финтех · выписки — Роль: единственный разработчик бэкенда, затем и фронтенда

Платформа работы с банковскими выписками

Python
321 000 строк
Тесты
7 195
Коммиты
1 564
API-эндпоинты
301

Задача: загрузка, разбор и генерация выписок в формате 1С, аналитика по операциям, справочники клиентов и контрагентов — для внутренней команды, которая работает с этим каждый день.

Telegram-бот как быстрый интерфейс, веб-API на 301 эндпоинт, фоновые воркеры для тяжёлой обработки, прогресс длинных задач через WebSocket и SSE. Деньги — только Decimal и NUMERIC, никогда float: это правило проекта, а не пожелание. Веб-интерфейс переписан с Vue на Next.js с типами, сгенерированными из OpenAPI бэкенда.

Отдельный репозиторий инфраструктуры: Postgres, Redis, MinIO, Nginx и полный стек мониторинга, автодеплой по push, бэкапы с обязательными учениями по восстановлению.

FastAPI · SQLAlchemy 2 async · PostgreSQL 17 · Redis + RQ · aiogram 3 · Alembic (88 миграций) · Next.js · MinIO · Grafana
CRM · конвейер — Роль: единственный разработчик

Конвейер кредитных историй между БКИ, Google и AmoCRM

Python
117 000 строк
Тесты
3 690
Источников БКИ
3
Воркеров
3

Задача: менеджеры вручную вычитывали PDF кредитных историй из трёх разных бюро и переносили данные в таблицы и карточки сделок. Нужно было убрать ручной этап целиком.

Вебхук из AmoCRM попадает в очередь, воркеры забирают PDF с Google Drive, разбирают форматы трёх бюро — НБКИ, Credistory, Scoring, — сводят результаты в одну картину, заполняют семь блоков рабочей таблицы и возвращают итог заметкой в сделку. Отдельным потоком карточка лида обогащается данными по компании из внешнего реестра. Часть документов — сканы, поэтому в пайплайне есть распознавание текста.

Это второе поколение. Первое было одной большой системой — 444 коммита, 96 500 строк, вместе с ботом, аналитикой и работой с таблицами — и тестов в ней почти не было. Она работала, но менять её было страшно. Поэтому конвейер я вынес в отдельный сервис и переписал, и на этот раз тесты шли первыми. Два поколения вместе: 735 коммитов, около 213 000 строк.

FastAPI · Redis Streams · RQ · pymupdf · pdfplumber · tesseract · OpenCV · Google Drive/Sheets API · AmoCRM API · Kubernetes
Безопасность · доступ — Роль: владелец сервиса в команде из пяти ролей

Сервис входа и учётных записей

Python
29 000 строк
Эндпоинты
73
Миграции
26
Коммиты
175

Задача: единственная точка в системе, которая выпускает пользовательские токены, — чтобы остальные сервисы не хранили ни паролей, ни персональных данных.

Вход через Telegram, сессии, токены на эллиптической подписи с публичным набором ключей для проверки соседними сервисами, ключи доступа без пароля (WebAuthn), одноразовые коды, хеширование Argon2, профили и роли, хранение персональных данных в одном месте, связка внутренних идентификаторов с денежными счетами.

Свежие релизы зависимостей выдерживают карантин: скомпрометированный пакет опаснее всего в первые часы после публикации, до того как его снимут. Неделя выдержки закрывает это окно и, как проверено на реальных обновлениях, не мешает ставить срочные исправления безопасности.

FastAPI · EdDSA / JWKS · WebAuthn · Argon2 · TOTP · arq · basedpyright · GitHub Actions
Open source · AI-tooling — Роль: автор

Канал координации между AI-агентами

Python
14 000 строк
Тесты
360
Лицензия
MIT

Задача: когда над одной системой работают несколько AI-агентов в разных репозиториях, им нужен способ договариваться — иначе каждый чинит границу по-своему.

Сервер протокола MCP с общим почтовым ящиком: сообщения адресуются ролям, у тредов есть жизненный цикл и статус работы, решения фиксируются машиночитаемым согласием, а общие договорённости живут закреплёнными записями с версией. Два режима: локальный на одной машине и размещённый на сервере, с изолированными каналами и авторизацией по токенам.

На этом инструменте построена реальная разработка: пять ролей — деньги, вход, редакция, фронт, инфраструктура — с уставом команды, границами владения репозиториями и правилом «контракт согласовывается до кода».

MCP · SQLite · ASGI · Docker + Caddy · pytest-asyncio
Лист B — Также построено

Более короткие записи из той же мастерской

Восстановление бухгалтерии малого бизнеса по выписке — кредитному брокеру нужен пакет документов для банка по клиенту, у которого есть только банковская выписка и чеки ОФД.
Декларация УСН и пакет электронного документооборота — из выписки и чеков ОФД получить готовую к сдаче декларацию УСН 6% по форме КНД 1152017 со штампами ЭДО и архивом пакета.
Проверка контрагентов по ИНН в Telegram — перед сделкой нужно быстро понять, что за компания на другой стороне, — без похода в три разных сервиса.
Генератор сайтов и редакционный конвейер на языковых моделях — два продукта, где модель должна давать предсказуемый результат, а не «что-то похожее на текст».
Лидогенерация в Telegram на потоке — искать и квалифицировать заявки внутри Telegram — это задача объёма. Разговоры, на которые стоит отвечать, разбросаны по сотням чатов, и пока человек до них доберётся, они остывают. Нужно было сделать этот поиск непрерывным.
Лист C — Метод

Как я работаю

Эти правила видны в коде проектов выше — их можно проверить, а не принимать на слово.

Контракт до кода Всё, что пересекает границу между сервисами — формат ответа, имена переменных окружения, порты, схема базы, — сначала согласуется, потом пишется. Это дешевле, чем чинить рассинхрон под нагрузкой.
Тесты как условие сдачи Около 17 300 автотестов, интеграционные — на настоящих Postgres и хранилище в контейнерах, сквозные — в браузере. Тест на реальной базе ловит то, что заглушка пропускает по определению.
Документация, которую нельзя обмануть Договорённости хранятся дословными цитатами, а расхождение ловит проверка перед коммитом. Пересказ непроверяем: это другой текст, и никакое сравнение не скажет, верен ли он.
Безопасность встроена, а не дописана Секреты только в окружении и Vault. Версия компилятора закреплена и обновляется как зависимость. Карантин на свежие релизы пакетов. Приватные ключи — в отдельном сервисе. Проверка недоступна — значит отказ, а не пропуск.
Проверки в путях, а не в памяти Каждое правило, которое можно привязать к хуку или команде, туда привязано. Инструкция срабатывает, только если о ней вспомнили; гейт перед коммитом срабатывает всегда.
Разработка с AI-агентами Мультиагентная команда из пяти ролей с уставом, границами владения репозиториями и каналом согласований — рабочая практика, а не эксперимент. Скорость выше, но правило «чужой репозиторий читаю, но не правлю» соблюдается строже, чем в командах из людей.
Лист D — Инструменты

С чем работаю

Языки
Python 3.11–3.12 · Go 1.25 · TypeScript 5 · SQL
Бэкенд
FastAPI · Pydantic v2 · SQLAlchemy 2 (async) · Alembic · chi · pgx · aiogram 3 · Telethon
Данные
PostgreSQL 16–17 · Redis (Streams, очереди, кеш) · MinIO и S3 · Decimal и NUMERIC для денег · двойная запись
Очереди
RQ · arq · rq-scheduler · APScheduler · Redis Streams · фоновые воркеры и планировщики
Фронтенд
Next.js 16 · React 19 · Tailwind 4 · shadcn/ui · Zustand · TanStack Query · Vue 3 · Pinia · Vite
Блокчейн
Bitcoin · Ethereum и ERC-20 · Tron и TRC-20 · TON · HD-кошельки BIP-32/39 · изоляция ключей подписи
Документы
PDF: reportlab, pypdf, pdfplumber, pymupdf · OCR: tesseract, OpenCV · Excel: openpyxl · 1С ClientBankExchange · XML ФНС
Языковые модели
Anthropic · OpenAI · Langfuse · структурированный вывод · vision · серверы MCP
Интеграции
AmoCRM · Google Drive и Sheets · Checko · реестр МСП ФНС · DaData · Telegram Bot API и MTProto · Контур.Эльба и СБИС
Инфраструктура
Docker и Compose · Kubernetes · Nginx с TLS · Vault · Prometheus и Grafana · GitHub Actions · бэкапы с PITR
Лист E — Форматы работы

Расскажите, что ломается.

Тридцать минут, без подготовки. Опишите, что происходит сейчас и как должно быть, а я скажу, тот ли я человек для задачи — в том числе когда ответ «нет».

$1 800
Аудит · пять рабочих дней. Разбор архитектуры, места расхождений, план с оценкой. Остаётся у вас без обязательств. Пилот — от $4 000.
от $14 000
Сложный узел — учёт, выплаты, разбор документов, интеграция. Встраиваюсь в ваш код и его правила.
от $35 000
Продукт целиком — схема, бэкенд, интерфейс, деплой, мониторинг. Когда нужен результат, а не участник команды.