Избранное

Проекты.

Проекты, которые лучше всего показывают, чем я занимаюсь и куда смотрю: рабочий full-stack продукт, эксперимент с типобезопасностью на трёх языках и эксперимент с интерактивными объяснениями. Текущие коммерческие проекты лежат в приватных репозиториях, поэтому здесь — собственные. Код booking widget — открытый (ссылки ниже); Htracker развёрнут и работает — доступ к демо и к приватному репозиторию открою по запросу.

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 дизайн-система

Booking widget — один виджет, три системы типов

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 типобезопасность

De Prado — finance in ML as explorable knowledge

Astro + Elm · исследовательский проект · скоро в открытом доступе

Интерактивный конспект книги «Advances in Financial Machine Learning»: учиться, играя с материалом, а не пассивно его читая.

Вместо статичного текста — «островки» (explorables): в них можно менять пороги, типы баров, параметры — и сразу видеть, как меняются распределения, графики и метрики. Идея в том, чтобы пройти путь «понимание → действие → новое знание»: читатель не только усваивает приём из книги, но и пробует его сам.

Собрано на Astro, интерактивные виджеты — на Elm; формулы рендерятся через KaTeX, а состоянием островков можно управлять прямо из текста через прозаические ссылки-драйверы. Для меня это полигон: проверяю на практике формат explorable explanations и функциональный подход, к которому давно тяготею (Elm, чистые функции, надёжность по построению).

Astro Elm explorable explanations KaTeX FP