FG_/DEV

Технические кейсы

Архитектура,
не список технологий.

Часть проектов — закрытый клиентский код: показываю архитектуру, решения и небольшие фрагменты кода, а не репозиторий целиком. Там, где код открыт — ссылка на GitHub.

01

Закрытый код

ERP-системы для производства

Две независимые реализации: металлоконструкции (metalstruct) и деревообработка (manufacture) — от заявки до отгрузки.

Заявка
Конструирование
Закупка материалов
Производство
Контроль качества
Склад
Отгрузка / монтаж

До 7 ролей с разным объёмом доступа (директор, конструктор, технолог, начальник производства, прораб, снабженец) и многоэтапный производственный цикл спецификации — от договора до монтажа, с учётом гарантийных возвратов. В manufacture добавлена мультитенантность и редактирование docx/xlsx прямо в приложении через OnlyOffice Document Server, self-hosted инфраструктура на Supabase (PostgreSQL + PostgREST + Auth + Storage + Edge Functions).

Обе системы разработаны и введены в эксплуатацию у заказчиков — не остались пилотами.

permissions.ts — ролевой доступ (metalstruct)

export type OrgRole =
  | "director" | "manager" | "head_constructor"
  | "constructor" | "supply_manager" | "production_head" | "foreman";

export function hasRole(memberRoles: string[], ...required: OrgRole[]): boolean {
  return required.some((r) => memberRoles.includes(r));
}

/**
 * director, manager — full access
 * head_constructor — все спеки на этапах проектирования
 * supply_manager — все спеки (обработка закупок)
 * production_head, foreman — все спеки (производство/склад)
 * constructor — только назначенные спеки
 */
export function canSeeAllSpecs(roles: string[]): boolean {
  return hasRole(roles, "director", "manager", "head_constructor",
    "supply_manager", "production_head", "foreman");
}
Fastify 5Next.jsPostgreSQLDrizzle ORMSupabaseOnlyOffice

02

Закрытый код

Голосовые ИИ-ассистенты для колл-центров

Три вертикали (шиномонтаж, ломбард, техподдержка) на одной архитектурной базе.

Звонок (Asterisk AudioSocket)
SpeechKit Realtime STT
State machine диалога
SpeechKit TTS
CRM (Bitrix24)

Связка Yandex SpeechKit Realtime (speech-to-speech WebSocket) + Asterisk PBX (AudioSocket/ARI) для трёх бизнес-направлений: запись на услуги и резервация шин («КОЛЕСИТИ»), навигация по отделениям и дистанционная оценка залога («Московский городской ломбард»), создание и проверка статуса заявок («Энтерсайт»). Диалог построен на конечном автомате состояний — не просто цепочка промптов к LLM, а предсказуемый flow с явными переходами.

Интеграция с Bitrix24 и Яндекс.Картами для геопривязки отделений.

state_manager.py — конечный автомат диалога (tire_assistant_rev2)

class DialogState(Enum):
    GREETING = "greeting"
    SELECT_CENTER = "select_center"
    SELECT_DATE = "select_date"
    SELECT_SERVICE = "select_service"
    COLLECT_PHONE = "collect_phone"
    CONFIRM_BOOKING = "confirm_booking"
    UPSELL = "upsell"
    CANCEL = "cancel"
    FAREWELL = "farewell"

class StateManager:
    def transition(self, new_state: DialogState):
        if self.session:
            old = self.session.state
            self.session.state = new_state
            logger.info(f"State: {old.value} -> {new_state.value}")
Yandex SpeechKit RealtimeAsterisk (AudioSocket/ARI)PythonBitrix24State machine

03

Закрытый код

Audio Dialog Analyzer

Транскрибация и LLM-скоринг диалогов кассир-покупатель для контроля качества розничных продаж.

Аудио звонка
Whisper / SpeechKit STT
Диаризация (pyannote.audio)
LLM-скоринг сценария (Ollama)
Визуализация пути диалога

Прод-домен cashear.ru. Пайплайн: распознавание речи → диаризация спикеров (разделение кассир/покупатель) → LLM-скоринг соответствия скрипту продаж → визуализация «sales flow» для контроля качества обслуживания. Self-hosted Supabase как основная платформа данных.

Whisper large-v3pyannote.audioOllama (qwen2.5)FastAPINext.js

04

Открытый код

Tender Status Tracker

FastAPI-сервис с state machine и историей аудита статусов тендера — открытый код, тесты на реальном Postgres.

Swagger UI сервиса Tender Status Tracker: эндпоинт GET /tenders/{tender_id}/history с реальным ответом — полная история смен статуса тендера

Модель данных разделяет тендер и историю изменений статуса на отдельные таблицы (не JSON-поле), чтобы можно было эффективно агрегировать «кто чаще всего меняет статусы» без парсинга. Переходы статусов — явная state machine ( Черновик → Активен → Выигран/Проигран), терминальные статусы не перезаписываются штатным путём. Причина смены статуса обязательна на уровне Pydantic-схемы.

Покрыт 10 тестами на реальном PostgreSQL в Docker: полный жизненный цикл, отклонение недопустимых переходов, 404/422 кейсы. На скриншоте — эндпоинт GET /tenders/{tender_id}/history поднятого локально в Docker сервиса: полная цепочка смен статуса одного тендера с указанием, кто и почему менял статус.

FastAPIPostgreSQLSQLAlchemy 2.0RedisDocker ComposeCI

05

Открытый код

Tender DB Schema

Проектирование схемы БД под тендерную площадку и аналитические SQL-запросы поверх неё.

Отдельная от tender-status-tracker схема — намеренно: там статусы описывают жизненный цикл тендера с точки зрения площадки (draft/active/closed/cancelled), здесь — с точки зрения конкретного исполнителя. Смешивать два bounded context в одной таблице ради формального переиспользования было бы искусственным решением. Аналитические запросы (топ компаний по выигранным суммам, средняя скидка по категориям) и тесты на реальном Postgres — в репозитории.

PostgreSQLSQLSchema designpytest

06

Живой демо

Skeet Log

PWA-трекер тренировок по стендовой стрельбе, offline-first — задеплоен и используется на практике.

Интерфейс Skeet Log — статистика серий по мишеням

Offline-first PWA поверх IndexedDB и Service Worker — приложение работает без сети прямо на стрельбище, синхронизация происходит при появлении связи. Визуализация серии по 25 мишеням по позициям стенда, статистика в динамике за разные периоды. Собственный продакшн-деплой на better-auth/Express/PostgreSQL.

PWAService WorkerIndexedDBTypeScriptExpressDrizzlePostgreSQL

07

Закрытый код

Реверс-инжиниринг протокола TonConnect

Ручная расшифровка bridge-сообщений между dApp и кошельком через NaCl box decryption.

TonConnect — протокол подключения TON-кошельков к dApp через bridge-сервер. Вместо использования готового SDK «как чёрного ящика» реализовал расшифровку сообщений bridge вручную: восстановление secret key кошелька, NaCl box decryption (nonce + зашифрованное тело), разбор полученного payload. Это уровень ниже привычного REST API — нужно понимать, как устроено end-to-end-шифрование протокола, а не просто вызывать метод SDK.

wallet.service.ts — расшифровка bridge-сообщения

this.box_key_pair = nacl.box.keyPair.fromSecretKey(secretKeyBytes);

const nonce = bodyBytes.slice(0, nacl.box.nonceLength);
const message = bodyBytes.slice(nacl.box.nonceLength);

const opened = nacl.box.open(
  message,
  nonce,
  theirPublicKeyBytes,
  this.box_key_pair.secretKey
);

const payload = JSON.parse(Buffer.from(opened).toString());
TypeScriptNaCl / tweetnaclTONProtocol reverse engineering

08

Закрытый код

Browser automation в масштабе

Устойчивые к анти-бот защите клиенты для распределённой системы из множества параллельных сессий.

Разработка browser-automation клиентов, устойчивых к анти-бот защите: перехват сетевого трафика (включая расшифровку зашифрованных bridge-сообщений между приложением и кошельком, см. кейс TonConnect выше), эмуляция клиентского окружения, интеграция криптокошельков (TON, Solana) — для распределённой системы из множества параллельных браузерных сессий. Стабильная параллельная работа поддерживалась на масштабе до 40 000 одновременных сессий.

PlaywrightPatchrightNetwork interceptionMulti-session architecture

09

Закрытый код

FlashArbExecutor.sol

Solidity-контракт атомарного арбитража через флэш-лоаны Aave V3 на Base.

Контракт занимает флэш-лоан в Aave V3, исполняет цепочку свопов через Uniswap V3 / SushiSwap V3 / BaseSwap V3 / Aerodrome V2/CL и проверяет, что полученная сумма покрывает долг плюс минимальный порог прибыли — иначе транзакция откатывается целиком, атомарно. Паттерны безопасности: reentrancy guard на точке входа, callback флэш-лоана принимает вызовы только от Aave Pool, экстренная пауза, функции администрирования только для владельца.

Честно: контракт спроектирован и реализован, но не задеплоен в mainnet — не эксплуатировался в бою.

FlashArbExecutor.sol — колбэк флэш-лоана

function executeOperation(
    address asset, uint256 amount, uint256 premium,
    address initiator, bytes calldata params
) external override returns (bool) {
    require(msg.sender == address(AAVE_POOL), "Caller not Aave Pool");
    require(initiator == address(this), "Initiator not self");

    SwapStep[] memory steps = abi.decode(params, (SwapStep[]));

    uint256 currentAmount = amount;
    for (uint256 i = 0; i < steps.length; i++) {
        currentAmount = _executeSwap(steps[i], currentAmount);
    }

    uint256 totalOwed = amount + premium;
    require(currentAmount >= totalOwed + minProfit, "Insufficient profit");
    ...
}
SolidityAave V3Flash loansUniswap V3Reentrancy guard

10

Закрытый код

cadroid — офлайн CAD на Android

Параметрический 3D-солвер SolveSpace на C++, встроенный в Android через NDK/JNI, с веб-фронтендом на Three.js.

React + Three.js — 3D/2D viewport (Viewport3D, Sketch2D)
WebSocket ws://localhost:8080/ws
Kotlin + Ktor — WebSocket-сервер на устройстве
JNI (SolveSpaceJNI.kt / slvs_jni.cpp)
C++ солвер SolveSpace, собранный через Android NDK → libcadcore.so

Апстримный геометрический солвер SolveSpace (C++, включая Eigen, mimalloc) собирается через Android NDK в нативную библиотеку, доступ к нему из Kotlin — через JNI-мост. Поверх — Ktor поднимает WebSocket-сервер прямо на устройстве, к которому подключается веб-фронтенд на React + Three.js для 2D/3D-редактирования эскизов и экспорта в STL. Есть отдельные test_jvm/test_desktop окружения для обкатки солвера без сборки APK.

Локальный pet-проект, нигде не задеплоен и не опубликован — здесь только описание архитектуры.

C++Android NDK / JNIKotlinKtorReactThree.js

11

Закрытый код

Блокчейн-игра на WAX/EOS

Авторизация через криптокошелёк, модули крафта/маркета/стейкинга, карта на PixiJS.

Игровой спрайт персонажа Экран авторизации через криптокошелёк

Около года активной разработки в команде: авторизация через WAX-кошелёк (UAL), игровые модули Craft / Market / Woodwork / Inventory / Hunt / Bank / Staking / Mining, интерактивная карта на PixiJS с viewport-навигацией. Не туториал — попытка полноценного продукта, свыше 100 коммитов за проект.

ReactRedux ToolkitPixiJS@eosdacio/ual-waxeosjs

12

Закрытый код

MCP-инструмент для оркестрации LLM

Делегирование части задач между Claude и DeepSeek через собственный MCP-сервер.

Экспериментальный MCP-сервер, через который Claude Code может делегировать часть ревью или задач в DeepSeek — инфраструктура для мульти-LLM оркестрации, а не просто использование готового чат-интерфейса. Часть более широкого паттерна: сборка собственных AI-инструментов для своего рабочего процесса (см. также userscript для конвертации GitLab MR в markdown под LLM-ревью).

MCPPythonLLM orchestration

Обсудим задачу?

@gof2706 →