Selected
Portfolio.
The projects that best show what I do and where I'm looking: commercial frontends in production, a working full-stack product and a type-safety experiment across three languages. The booking widget's code is open (links below); Htracker is deployed and running — I'll open access to the demo and the private repository on request.
Ege.plus — an education portal
Frontend · Vue 3 + TypeScript + Pinia · in production
A large production project: built, maintained and evolved. The portal is part of the site-and-service ecosystem of “National Education” — the publisher of a popular prep book for the Russian state exam. For ege.plus I built the entire frontend (Vue 3 + TypeScript + Pinia, with a Redux store as an experiment), along with Storybook and a design system.
In production the site is wired to Sentry: errors show up in real time, which made working with the QA team much easier. More than that — the system shows every user interaction on the site, and some bugs surfaced before QA ever noticed them.
Vue 3TypeScriptPiniaStorybookSentry
The “National Education” ecosystem
Frontend · React, landing pages, SSO · in production
Other projects for the publisher were smaller but no less important: landing pages, legacy React sites, the shopping cart in the catalog, corporate SSO integration. The full range of work on the visual side of the ecosystem. I would have liked more business metrics from the product team — all we had was Yandex Metrica.
Projects under NDA
Frontend · Vue + TypeScript · analytics, maps
I’ve worked on many projects, mostly in Vue. One of the recent ones — a system for analyzing economic indicators for the economics department of a large company: lots of widgets, charts and tables, a lot of data on one page. A UI library of 100+ elements, a serious Python backend. On the same project I worked with maps: object markers and extra per-object details in modals.
Private clinic commission · self-employed · FastAPI + PostgreSQL + Vue 3 / TypeScript · MVP delivered, iterating
A health dashboard for a small private clinic that I designed and built single-handedly — from the database schema to the interface.
The patient keeps monthly snapshots of their health metrics and the trends across them, records examinations, lab results and consultations with specialists, describes conditions and treatment courses with a timeline, and attaches files (PDF/JPEG/PNG). There's a patient — doctor link: a doctor gets access to the record through an invite flow. There's also a small admin panel for managing the system's users.
The backend is FastAPI and PostgreSQL, built on Domain-Driven Design: eight bounded contexts (Identity, MedicalRecord, Examinations, Analyses, Consultations, Conditions, DoctorAccess, References) with explicit invariants and cross-context links. The frontend is Vue 3 / TypeScript; the frontend types are generated straight from the OpenAPI spec, so the API contract and the client can't drift apart. There's a self-documenting design system on its own page. The MVP is delivered to the client and deployed on my own server (self-hosted Gitea + Docker); now I’m iterating on their change requests.
FastAPI
PostgreSQL
Vue 3
TypeScript
DDD
OpenAPI
design system
Vue 3 / TypeScript · Effect-TS · Elm · type-safety experiment
A hotel booking widget written three times — to measure how many state errors each type system closes structurally, not "by discipline".
The reference version is Vue 3 + TypeScript (strict): a clean domain, a data layer behind a port-adapter (Dependency Inversion), an atomic-design UI kit, 47 Vitest tests + 4 Playwright E2E. I audited it and found 13 "correctness holes" — places where a type allows an impossible state or a rule rests on a convention. All of them compile under strict.
Then I rewrote the same widget in Effect-TS (TEA + Effect, foldkit) and in Elm and counted how many holes each type system closes structurally (a bad state is unrepresentable) versus "in practice": Effect — 9 of 13 structurally, Elm — 12 of 13, both with 0 left open. The experiment is about the thesis: TypeScript doesn't guarantee a program's correctness after it compiles.
Vue 3
TypeScript
Effect-TS
Elm
TEA
type safety