Sergi Jajanidze

Senior Web Engineer

Frontend & Full-Stack | TypeScript, React, Next.js, Node.js | Frontend Architecture & Infrastructure | AI & LLM Features

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 web-component SPA serving two product lines into a shell and two independently deployed remotes, sharing exactly one copy of the framework runtime. Federation emits native ES modules, so remotes load through the browser's own `import()`, and routes moved to their owning remote one content type at a time.

Role
Lead engineer — architecture owner
Scope
A shell host plus two product remotes, each deployed on its own cadence · one import map shared by all three builds
Outcome
3 independently deployed apps across 2 teams, with release conflicts between them eliminated
Lit 3 web componentsWebpack 5 Module FederationNative ESM outputImport maps
Read case study
High-traffic consumer public site

Design system runtime integration

Moved the design system and framework runtime out of three application bundles and onto a CDN, resolved by the browser from one import map. Webpack externals are derived from that map, so an unresolvable import can't ship, and a design-system upgrade is 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
One import map — design-system packages, framework runtime and federation entry points — shared by three independently deployed applications
Outcome
About 60% smaller application bundles
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 detects bots, renders the page in pooled headless Chromium, strips the scripts and returns finished HTML from the same origin and deploy that serves humans. The key decision is forcing the shadow-DOM polyfill before the app loads — otherwise a site built from custom elements serializes to empty tags.

Role
Lead engineer — design, implementation, rollout across sites
Scope
One versioned middleware package used by five public sites · configurable crawler list, two cache backends, per-site render settings
Outcome
Improved search indexing across 5 public sites
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 bilingual full-text search for three public sites as one Node service with a hand-built character trie in memory — no search cluster and no network hop per query. A prefix trie is the crude stemmer an agglutinative language like Georgian needs, and query-time transliteration lets Georgian typed phonetically in Latin find the same pages.

Role
Lead engineer — designed the service, wrote the first commit, owned it in production
Scope
Three content channels × two languages — one in-memory index per pair, rebuilt daily, with 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

Added an LLM query-understanding layer in front of an existing keyword index instead of replacing it, so questions and typos resolve to indexed terms — plus a streamed answer card grounded only in pages the index already returned. Every model call falls back to the raw query, so a provider outage degrades to the original search, never to an error.

Role
Lead engineer — sole implementer, backend and frontend
Scope
Two endpoints, one shared search component with two consumers, two locales
Outcome
50% more clicks on search results
Node/ExpressRedisGemini Flash-LiteVercel AI SDKLangfuseLit 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 old and new apps side by side behind one reverse proxy so editors never saw a freeze. The real work was rewriting a form engine that generates the whole editing UI at runtime from user-defined content types — including multi-locale editing that Polymer had solved with DOM traversal.

Role
Lead engineer — engine owner
Scope
TypeScript rewrite of a Polymer 3 app · schema-driven form engine · one deployment serving several sites with their own locale sets
Outcome
Adopted across 5 product teams
React 18TypeScriptAnt DesignReact Router v6Webpack
Read case study

Skills

Languages

JavaScriptTypeScriptHTML5CSS3

Frontend

ReactNext.jsAngularLitWeb ComponentsTailwind CSS

State & Data

ZustandReduxGraphQLTanStack Query

Backend & APIs

Node.jsExpressREST APIsWebSocket

Data & Storage

PostgreSQLMongoDBRedisPrisma

Architecture

Micro-frontendsMonoreposModule FederationSSRDesign Systems

AI & LLM

LLM API IntegrationRAGPrompt EngineeringLLM EvalsLLM Observability & Tracing

Testing & Quality

VitestJestReact Testing LibraryPlaywrightCore Web VitalsWCAG

Tooling & DevOps

ViteWebpackRsbuildESLintCI/CDDockerAWSSentryGrafana

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.