Senior engineer — TypeScript / React in production, Rust and developer tooling in public.
📍 Tbilisi, Georgia · Open to relocation · Senior IC roles · BSc Applied Maths & Physics (MIPT)
I build high-performance UI and Canvas-based rendering — shipped editors, real-time analytics dashboards, and banking tools across AdTech, enterprise software, and EdTech. Full work history on LinkedIn.
-
yoptascript-rs — A full compiler frontend from scratch in Rust: lexer, recursive-descent parser, AST, tree-walking interpreter. Built alongside my Biome contributions — Biome is a large, mature JS/TS parser/linter, so I wanted a small from-scratch counterpart to understand each layer end-to-end.
-
financial-rust — Multi-format financial transaction parser (CSV ↔ text ↔ custom binary), with a library and two CLIs designed around
Read/Writetraits and a versioned binary format. -
v8-simple-profiler — A profiler that measures how V8 deoptimizes monomorphic vs polymorphic code paths, using V8 intrinsics and proper statistics for honest measurement.
-
task-tracker-elysia — A task API on Bun + Elysia with strict Clean Architecture / DDD layering, typed error handling via
Resultunions, and a scheduled worker for due-date notifications.
- 🦀 Contributing to Biome — Rust-based JS/TS linter & formatter. Recent work in its type-inference engine:
- Fixed overloaded-function resolution (#10585 + #10586) — models TypeScript's overload sets in the module graph and selects the matching signature at the call site, so
noFloatingPromisesstops misfiring on overloaded calls. - Expanded
noUnnecessaryConditionsto flag type-aware dead conditions: nullish/optional chaining on non-nullable types, always-falsy negations, unreachableswitchcases. - Earlier: ported
noAriaUnsupportedElementsand addednoRedundantRolesfor HTML a11y.
- Fixed overloaded-function resolution (#10585 + #10586) — models TypeScript's overload sets in the module graph and selects the matching signature at the call site, so