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