Skip to main content

About

From sysadmin to senior frontend

Senior Frontend Engineer, 8+ years of production React, TypeScript, and Next.js across SaaS, B2B, and a payments platform. Remote from Tbilisi, Georgia.

I spent six years as a system administrator — Cisco and VLAN networking, servers, backups, the scripting that holds an IT department together. It was good work, and it's where the comfort with infrastructure, CI/CD, and the command line comes from.

The turn came from something small. I wrote a script to parse a phone number database for a marketing campaign, and the feeling of solving a problem by building something — rather than by configuring something — didn't go away. I moved into web development, started with Vue.js and D3.js, and settled on React because it held up best on the complex projects I wanted to work on. I haven't looked back.

Since then I've worked across startups and larger companies, in office and remote, including US-based teams. Three of those years were on the merchant dashboard at Omise, a Southeast Asian payment gateway — the surface businesses use to watch their own money move, where the correctness bar sits higher than a typical CRUD UI and has to keep holding while the product, the codebase, and the team all grow around it. Most recently I was the sole frontend engineer on a three-person team building a B2B hiring platform, owning the entire web frontend from design handoff to continuous deployment.

I care about TypeScript, testing, and CI/CD — not as checkboxes, but because they're what make a complex codebase stay workable. I focus on doing things right rather than only fast, and I'd rather be part of a team than clear a ticket queue.

The open-source half

I maintain three React and TypeScript libraries and a local-LLM queue. The one that taught me the most is react-horizontal-scrolling-menu: I inherited it, rewrote the core in TypeScript, added tests and Storybook, and have kept the public API stable through React 17, 18, and 19. Twenty thousand repositories depend on it, which is a very effective way to learn what a breaking change actually costs.

The others started as things I needed and couldn't find. state-in-url keeps nested, typed React state in the URL so filters and multi-step forms survive a reload and can be shared as a link. test-proxy-recorder records real API traffic once — including the fetches Next.js makes during SSR, which Playwright can't intercept — and replays it deterministically on CI. Maintaining code other people depend on changes how you write code nobody else will ever see.

How I work

Pragmatic, not dogmatic

Pick the best tool for the task and stay open to being wrong about it. Most architectural arguments are really arguments about constraints nobody wrote down.

Quality where it compounds

Maintainability matters most in the parts that everything else depends on — shared state, the component set, the test suite. Elsewhere, shipping beats polishing.

Automate the repetition

CI/CD, linting, packaging, releases. Every manual step is a step someone eventually skips on a Friday. The sysadmin years left me with a low tolerance for doing the same thing twice.

Keep learning, quietly

The stack turns over. I'd rather understand why a new tool exists than adopt or dismiss it on reputation.

The dates, roles, and numbers are all on the résumé. What I take on is on services, and how to engage me is on hire.