Selected
Projects.
The projects that best show what I do and where I'm looking: a working full-stack product, a type-safety experiment across three languages, and an experiment with explorable explanations. My current commercial work lives in private repositories, so what's here is my own. 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.
Full-stack · FastAPI + PostgreSQL + Vue 3 / TypeScript · deployed
A personal health dashboard 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 project is taken to a working MVP and deployed on my own server (self-hosted Gitea + Docker).
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
Astro + Elm · research project · open-sourcing soon
An interactive companion to "Advances in Financial Machine Learning": learn by playing with the material rather than reading it passively.
Instead of static text — "islands" (explorables): you can change thresholds, bar types, parameters — and immediately see how the distributions, charts and metrics change. The idea is to walk the path "understanding → action → new knowledge": the reader doesn't just absorb a technique from the book but tries it themselves.
Built on Astro, with interactive widgets in Elm; formulas render through KaTeX, and the state of the islands can be driven straight from the text through prose driver-links. For me it's a testbed: a hands-on trial of the explorable-explanations format and the functional approach I've long gravitated toward (Elm, pure functions, correctness by construction).
Astro
Elm
explorable explanations
KaTeX
FP