Избранное
Проекты.
Проекты, которые лучше всего показывают, чем я занимаюсь и куда смотрю: рабочий full-stack продукт, эксперимент с типобезопасностью на трёх языках и эксперимент с интерактивными объяснениями. Текущие коммерческие проекты лежат в приватных репозиториях, поэтому здесь — собственные. Код booking widget — открытый (ссылки ниже); Htracker развёрнут и работает — доступ к демо и к приватному репозиторию открою по запросу.
Full-stack · FastAPI + PostgreSQL + Vue 3 / TypeScript · развёрнут
Личный кабинет здоровья, который я спроектировал и собрал в одиночку — от схемы базы до интерфейса.
Пациент ведёт ежемесячные снимки показателей здоровья и динамику по ним, фиксирует обследования, анализы и консультации у специалистов, описывает болезни и курсы лечения с таймлайном, прикладывает файлы (PDF/JPEG/PNG). Реализована связка пациент — доктор: врач получает доступ к карте по invite-флоу. Есть и небольшая админка для управления пользователями системы.
Бэкенд — FastAPI и PostgreSQL, выстроенные по Domain-Driven Design: восемь bounded-контекстов (Identity, MedicalRecord, Examinations, Analyses, Consultations, Conditions, DoctorAccess, References) с явными инвариантами и cross-context связями. Фронт — Vue 3 / TypeScript; типы фронтенда генерируются прямо из OpenAPI-спеки, так что контракт API и клиент не расходятся. Есть самодокументирующаяся дизайн-система на отдельной странице. Проект доведён до рабочего MVP и развёрнут на собственном сервере (self-hosted Gitea + Docker).
FastAPI
PostgreSQL
Vue 3
TypeScript
DDD
OpenAPI
дизайн-система
Vue 3 / TypeScript · Effect-TS · Elm · эксперимент с типобезопасностью
Виджет бронирования отеля, написанный трижды — чтобы измерить, сколько ошибок в состоянии каждая система типов закрывает структурно, а не «по дисциплине».
Базовая версия — на Vue 3 + TypeScript (strict): чистый домен, слой данных за портом-адаптером (Dependency Inversion), UI-kit по атомарному дизайну, 47 тестов Vitest + 4 E2E на Playwright. Я провёл её аудит и нашёл 13 «дыр в корректности» — мест, где тип допускает невозможное состояние или правило держится на договорённости. Все они компилируются в strict.
Затем я переписал тот же виджет на Effect-TS (TEA + Effect, foldkit) и на Elm и посчитал, сколько дыр каждая система типов закрывает структурно (плохое состояние невыразимо) против «на практике»: Effect — 9 из 13 структурно, Elm — 12 из 13, у обоих 0 осталось открытыми. Эксперимент про тезис: TypeScript не гарантирует корректность программы после компиляции.
Vue 3
TypeScript
Effect-TS
Elm
TEA
типобезопасность
Astro + Elm · исследовательский проект · скоро в открытом доступе
Интерактивный конспект книги «Advances in Financial Machine Learning»: учиться, играя с материалом, а не пассивно его читая.
Вместо статичного текста — «островки» (explorables): в них можно менять пороги, типы баров, параметры — и сразу видеть, как меняются распределения, графики и метрики. Идея в том, чтобы пройти путь «понимание → действие → новое знание»: читатель не только усваивает приём из книги, но и пробует его сам.
Собрано на Astro, интерактивные виджеты — на Elm; формулы рендерятся через KaTeX, а состоянием островков можно управлять прямо из текста через прозаические ссылки-драйверы. Для меня это полигон: проверяю на практике формат explorable explanations и функциональный подход, к которому давно тяготею (Elm, чистые функции, надёжность по построению).
Astro
Elm
explorable explanations
KaTeX
FP