Sergi Jajanidze

Senior Frontend Engineer

Selected Work

Production systems I designed and led — the decisions, the trade-offs, and what I’d do differently.

High-traffic consumer public site

Module Federation micro-frontends

Split a single web-component SPA serving two product lines into three independently deployed applications — a shell plus two product remotes — without duplicating the framework runtime a shared custom-element library depends on. Federation emits real ES modules, so remotes load through the browser's own `import()`, and routes moved into their owning remote one content type at a time.

Role
Lead engineer — architecture owner
Scope
One shell host plus two product remotes, each deployed on its own cadence · two generated federation containers publishing ~280 shared modules and ~185 design-system elements · one import map resolving the framework runtime for all three builds
Lit 3 web componentsWebpack 5 Module FederationNative ESM outputImport maps
Read case study
High-traffic consumer public site

Design system runtime integration

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
Webpack 5 externalsNative import mapsNative ESMLit 3Module Federation
Read case study
High-traffic consumer public site

Prerendering middleware

Decoupled search visibility from the client-side module graph: an Express middleware recognises bot traffic, renders the URL in a pooled headless Chromium, strips the scripts, and returns finished HTML — on the same origin and the same deploy that serves humans the SPA. The decision it turns on is forcing the legacy shadow-DOM polyfill before any application code evaluates, because a site built entirely from custom elements otherwise serialises to a document of empty tags.

Role
Lead engineer — design, implementation, rollout across sites
Scope
One versioned middleware package consumed by several public sites · ~30 crawler user-agents, two interchangeable cache backends, ~40 short-circuited asset extensions
Node/Express middlewarepuppeteer-core over CDPPooled headless ChromiumS3-compatible object cacheDocker Compose
Read case study
Public web estate · site search

Trie-based search engine

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 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
Node 20 (ESM)Expressworker_threadsHand-built character trieSitemap ingestion
Read case study
Consumer bank public site

LLM-assisted search API

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
Node/ExpressRedisGemini Flash-LiteLit 3 web componentsModule Federation
Read case study
Internal multi-locale content management system

Polymer to React/TS CMS migration

Migrated 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
Scope
~11k lines of TypeScript across ~95 modules, replacing a ~10k-line Polymer 3 app · 23 schema-driven field types resolved by 20 components · one deployment serving several sites with per-tenant locale sets
React 18TypeScriptAnt DesignReact Router v6Webpack
Read case study

Skills

Languages

JavaScriptTypeScriptHTML5CSS3

Frontend

ReactNext.jsAngularLitWeb ComponentsTailwind CSSCSS-in-JSDesign Systems

State & Data

ZustandReduxGraphQLTanStack Query

Backend & APIs

Node.jsExpressREST APIsWebSocket

Data & Storage

MongoDBRedis

Architecture

Micro-frontendsMonoreposModule FederationSSR

AI & LLM

LLM API IntegrationRAGPrompt Engineering

Testing & Quality

VitestJestReact Testing LibraryPlaywrightCore Web VitalsWCAG

Tooling & DevOps

ViteWebpackESLintCI/CDDockerAWS

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.