Aleksei Nizhgorodov | Frontend Engineer
Frontend Engineer
Aleksei Nizhgorodov

Aleksei Nizhgorodov

Frontend Engineer

Data-heavy, real-time frontend.

Frontend engineer, four years in commercial development. Real-time, dashboards, maps: anywhere the data gets heavy.

TypeScript ✲ React ✲ Svelte ✲ JavaScript ✲ ES6+ ✲ Leaflet ✲ WebGL ✲ Canvas ✲ ECharts ✲ Recharts ✲ QGIS ✲ MobX ✲ Redux ✲ Zod ✲ REST ✲ WebSocket ✲ SSE ✲ Vite ✲ Webpack ✲ Capacitor ✲ PWA ✲ Service Worker ✲ Docker ✲ Nginx ✲ CI/CD ✲ Vitest ✲ React Testing Library ✲ Playwright ✲ TypeScript ✲ React ✲ Svelte ✲ JavaScript ✲ ES6+ ✲ Leaflet ✲ WebGL ✲ Canvas ✲ ECharts ✲ Recharts ✲ QGIS ✲ MobX ✲ Redux ✲ Zod ✲ REST ✲ WebSocket ✲ SSE ✲ Vite ✲ Webpack ✲ Capacitor ✲ PWA ✲ Service Worker ✲ Docker ✲ Nginx ✲ CI/CD ✲ Vitest ✲ React Testing Library ✲ Playwright ✲

About

Frontend engineer, four years in commercial development. I like the hard stuff: WebSocket real-time, data-heavy dashboards, maps, WebGL.

I’ve run frontend teams of 2–4: reviews, mentoring, onboarding, technical calls with clients. On other products I was the only frontend engineer.

Finished an HSE master’s in digital urbanism: data analytics, geodata, urban project management. Open to new roles and relocation.

All work

01

Edya — commercial VPN customer portal

Frontend & architecture· 2026

A production VPN customer portal at about 20k MAU: OAuth/OTP login, one-link activation across six platforms, subscription migration from a Telegram bot, a custom censorship-resilience layer. Eight white-label brands from one codebase.

~20k MAU−62% bundle (1706→656 KB)8 white-label brands6 activation platforms
  • The service needed a portal for several brands at once. I built the whole SPA: eight brands ship from one codebase, a new one is a couple of config files, every API response is schema-checked.
  • The portal has to open even when the main domain goes dark. On every navigation a service worker checks the mirror list and quietly moves the user to a live domain; old links from bookmarks and the bot still land in the portal. The build is obfuscated.
  • Subscriptions move from the legacy Telegram bot to a web account in five steps, payments and remaining days included. Repeat transfers and wrong accounts are caught by the flow itself.
  • Firebase, Lottie and QR had bloated the bundle. I split it by page and pushed the heavy parts into lazy chunks: the initial load went from 1706 to 656 KB, gzip from 467 to 175.
  • Product events, errors and API failures flow into PostHog, sliced by brand, platform and release.
React 19TypeScriptViteTanStack RouterMobX 6Tailwind 4ZodFirebase AuthService WorkerDocker
02

EdyaAI — AI super-app in Telegram

Frontend: real-time, payments, chat · team project· 2025 — 2026

Midjourney, GPT-Image and LLM chat in one Telegram Mini App. I owned the WebSocket generation engine, the payments layer and the legacy-chat integration.

real-time WebSocket generationMidjourney + GPT-Image + LLMlive paid subscriptions
  • Generation shows live progress: a custom WebSocket client tracks every request separately and reconnects on its own. A dropped connection doesn’t lose a single generation.
  • Beyond plain generate, users get the full Midjourney toolset: variations, upscale, zoom, pan, blending images. History is stored as a tree, you can branch from any step.
  • Monetization was all mine: plans, subscriptions, promo codes, payments. Real money in production.
  • The legacy chat is embedded into the new app through an iframe with full integration, down to haptics and the keyboard. I set up the deploy myself. Users never notice the seam.
React 19TypeScriptMobX 6TanStack RouterTelegram Mini Apps SDKZodWebSocketSSENext.js 15Docker
03

Cartography & real-time monitoring

NDA

Frontend · map layer & rendering

Several large Leaflet projects: geozones, real-time markers and long tracks with timelines, with custom layer logic that keeps thousands of objects smooth.

  • The map has to hold thousands of markers and long tracks. I wrote the layer logic and the Canvas/WebGL rendering myself: clustering, thinning. It doesn’t drop frames on large datasets.
  • For monitoring I added live marker updates, geozones and tracks with a timeline: operators scrub movement history by time.
  • The map became a component set with a single API. Several team products run on it now.
TypeScriptReactLeafletWebGLCanvasMobX
04

B2B occupational-health analytics

NDA

Frontend, BFF & data layer· 2026

In ~2 weeks: a backend-for-frontend, a resilient data pipeline and ~20 clinical dashboards over medical terminals. A custom Russia map, read-layer RBAC on medical data, blood-pressure classification per the national guideline in SQL.

~20 clinical dashboardsoutage-proof data pipelineRBAC on medical dataMVP in 2 weeks
  • From zero to MVP in two weeks. The frontend and the BFF live in one monorepo with shared data schemas: the same types run from the DB to the UI, upstream credentials never reach the browser.
  • The medical-terminal API was flaky and records could not be lost. The pipeline retries failures, waits out outage streaks and resumes where it stopped. Nothing gets lost and nothing needs a manual restart.
  • Hiding medical data in the UI is not enough. I separated it at the database and read level: a role without clearance never even reads the medical fields, so they never reach the client.
  • There was no ready map engine for a raster Russia silhouette. I wrote my own coordinate mapping onto the image and a map component with bubbles and region drill-down.
TypeScriptReactMobXEChartsNode + ExpressDrizzle ORMPostgreSQLZodDocker
05

Video analytics platform

NDA

Frontend · architecture from scratch, team reviews

Frontend for a surveillance and analytics platform, designed from scratch: TypeScript, React, MobX. Then code reviews and team mentoring.

  • I started the frontend from scratch: architecture on TypeScript, React and MobX, the patterns set. The team keeps building features on that base; I reviewed and mentored.
  • Dashboards on Recharts update live, no reloads.
  • Large lists were sluggish: I virtualized them, cached the heavy work and cleaned out the memory leaks.
TypeScriptReactMobXWebSocketsRecharts
06

PDF report generator (custom library)

NDA

Frontend · library author

A custom report library built from React components: prints WebGL maps and charts into PDF, numbers pages and adds running headers itself. Built after jsPDF and react-pdf couldn’t do it.

  • Reports needed maps and charts, and neither jsPDF nor react-pdf can render WebGL or complex layout. My library assembles a PDF straight from React components, WebGL maps included. Reports look like the product UI.
  • Multi-page reports get page numbers and running headers automatically, print-ready as generated.
  • There is one render layer: the same React components drive both the screen and the PDF, so the UI and the reports never drift apart.
TypeScriptReactWebGLCanvasjsPDF
07

Gamified kids’ task tracker

NDA

Frontend · two clients + native on Capacitor, led the native team

A dashboard on a large touch screen plus a parent PWA, two clients sharing state. I led the team that shipped it as native apps on Capacitor.

  • The product lives on two very different clients: a gamified dashboard on a big touch screen and a PWA for parents. Both are built around shared state with live sync, so the screen and the parent’s phone always match.
  • The team I led took it to the stores and Android TV: the web app went into native builds on Capacitor for iOS, Android and Android TV.
  • A service worker gives it offline and auto-update: it runs without a network and updates itself.
TypeScriptReactPWACapacitorWebSocketsService Worker
08

Service-window feedback kiosk

NDA

Frontend · MVP architect· 2026

In ~4 days, built a window tablet that reacts to the queue over WebSocket (no relay backend), entertains and shows contextual ads during service, then collects the official service-quality survey.

WebSocket queue, no relayofficial quality surveyMVP in 4 days
  • Each tablet has to notice on its own that a ticket was called to its window, and there is no relay backend. The client listens to the shared queue over WebSocket, diffs its states and works out call, repeat and finish for its own window.
  • The survey sometimes fired twice: a fallback timer raced the operator’s real finish. A state machine with stale-event guards fixed it.
  • The wait is filled with contextual ads picked by a “service → life situation” heuristic and a mini-game that tunes difficulty to the player’s reaction time. Even older visitors play it.
  • Animations stuttered. I rewrote the progress bar so the GPU draws it with no layout work: it runs smooth.
React 18TypeScriptViteWebSocketEmotionFramer MotionFeature-Sliced

Background

Experience

Perfema

Perfema

2023 — now

Frontend Developer

My full-time job, products built from scratch. Ran frontend teams of 2–4: reviews, mentoring, onboarding, technical calls with clients. Maps, dashboards, analytics, native apps, a custom PDF library.

Edya

Edya

Mar 2025 — Jul 2026

Frontend · part-time

Part-time: a VPN customer portal at ~20k MAU (white-label across eight brands, a custom censorship-failover layer) and an AI super-app in Telegram (real-time generation, payments).

Yandex

Yandex

2023

Assessor Developer

Labeled programming and CS material for YandexGPT: wrote and edited reference answers on IT topics, checked facts.

Education

HSE

HSE

2024 — 2026

Master’s, Digital Urbanism

A deliberate choice: urbanism always pulled me. The program turned out to be geo-analytics at its core (Python, geodata, QGIS), plus urban project management and planning law. So if you ever need a good-looking map, or a factory legally demolished under an urban-renewal scheme, I’m your guy!

Thesis ↗
MISIS

MISIS

2020 — 2024

Bachelor’s, Information Systems & Technologies

The foundation: algorithms, data structures, software engineering. Hackathon prizes: 2nd at the LCT 2023 hackathon, MTS True Tech Hack, Tsifra Fest, X-MAS Hack.

LCT 2023 (2nd place) ↗

Aleksei Nizhgorodov | 2026