Selected Work
Production systems I designed and led — the decisions, the trade-offs, and what I’d do differently.
Migrating a monolithic frontend to micro-frontends
Split a single web-component SPA serving retail and business banking into three independently deployed applications — a shell plus two product remotes — without duplicating the framework runtime that a shared custom-element library depends on. Route-by-route strangler migration, no cutover, no long-lived branch.
- Role
- Lead engineer — architecture owner across two teams
- Scope
- Three independently deployed apps across two product teams, ~280 federated shared modules, ~100 design-system packages pinned in one import map
Serving a design system from a CDN at runtime
Moved ~106 design-system packages and the framework runtime out of three application bundles and onto a CDN, resolved by the browser from a single import map. Webpack externals are derived from that map's keys, so a specifier that ships without a resolution rule is unrepresentable — and a design-system upgrade becomes a version bump in one JSON file rather than a rebuild of three apps.
- Role
- Lead engineer — designed and built the dependency-resolution layer
- Scope
- 177 bare specifiers in one map — ~106 design-system packages, the framework runtime and its directives, and the federation entry points — resolved by the browser across three independently deployed applications
Migrating a CMS from Polymer 3 to React + TypeScript
Led the migration of a daily-use editorial CMS off a dead framework, running both apps side by side behind one reverse proxy so editors never saw a freeze. The real work was rewriting a schema-driven form engine that generates the entire editing UI at runtime from user-defined content types — including the multi-locale coordination Polymer had solved with DOM traversal.
- Role
- Lead engineer — engine owner, delegated simple fields
- Scope
- ~11k lines of TypeScript across ~95 modules, replacing a ~10k-line Polymer 3 app · 22 schema-driven field types · one deployment serving several sites with per-tenant locale sets
Building the site search engine instead of buying one
Built the bilingual full-text search behind three public sites as one Node service with a hand-built character trie in process memory — no search cluster, no network hop on the query path. A prefix trie is the crude stemmer an agglutinative language wants, and read-time transliteration means a Georgian word typed phonetically on a Latin keyboard resolves to the same documents as the Georgian one.
- Role
- Lead engineer — designed the service, wrote the first commit, owned it through two years in production
- Scope
- Three independently deployed content channels × two languages — one index per pair, rebuilt daily in-process; the query path never leaves memory and there is no search cluster to operate
AI-assisted site search
Put an LLM query-understanding layer in front of an existing keyword index rather than replacing it, so questions and typos resolve to indexed terms — plus a grounded answer card generated only from the pages the index already returned. Every model call falls back to the raw query, so a provider outage degrades to the original search instead of an error.
- Role
- Lead engineer — sole implementer, backend and frontend
- Scope
- Two endpoints, one shared search component with two consumers, two locales
Skills
Languages
Frontend
State & Data
Backend & APIs
Data & Storage
Architecture
AI & LLM
Testing & Quality
Tooling & DevOps
Certifications
Side Projects
Things I built on my own time to dig into a specific problem.

Threads App
Focus: Full-Stack Architecture
Social discussion platform inspired by Reddit, built with Next.js 15, React 19, Prisma, and HeroUI. Users can create threads, post content, and engage through nested comments.

Real-time Editor App
Focus: Real-time Systems
Real-time collaborative text editor built using Node.js, Socket.IO, and Quill.js, with storage in Redis and containerized using Docker for deployment/local development. The app allows multiple users to simultaneously edit the same document with instant synchronization across clients.

Excel App
Focus: Framework Internals & Performance
Excel application created with vanilla JavaScript. Implemented custom web framework from the scratch (with state, routing, eventing, storage, DOM manipulations). Used Tailwind CSS for styling.

Search App
Focus: Algorithmic Efficiency
JavaScript search engine built on a Trie (prefix tree) data structure for fast text lookup and autocomplete. Supports instant prefix-based searching, smart suggestions, and relevance-ranked results.
