Yekaterinburg · remote · UTC+5

Igor
Bakhtin

Lead Frontend Engineer architectureteam

The platform the bank runs on: website, CMS and products

Led development of RSHB’s public website: 11 portals on one domain, 3,971 pages, 8,355 content releases. Now frontend competence lead for the Cards cluster: several teams, 12 frontend engineers. I still write code daily.

I reply within a day · Yekaterinburg · UTC+5

  • 11portals

    on one domain: 3,971 pages and 28,525 content blocks

  • 8,355releases

    of content through the CMS — editors publish without a developer

  • 4modules

    of the bank’s mobile app under my ownership

  • 12engineers

    across several teams: review, mentoring, technical decisions

01 Profile

An engineer accountable for the platform, not for a single page

For the last few years I have worked where product meets platform. First the bank’s public website: a platform of 11 portals on one domain, content as JSON, page generation at build time, a CMS with an editor and releases, and a design system of 524 blocks and primitives. Then the retail side: “Svoi Finansy. Cards” — issuing, applications, accounts, pre-login, admin panel.

My job is to keep the system manageable: design contracts, choose the stack, retire legacy layer by layer, add tests where regressions cost most, and drive incidents to root cause. On top of that, review: 282 reviews and 287 Jira issues over the last year, plus quality rules the team actually follows.

Before banking I moved from C++ and PHP to micro-frontends and mobile: an electronic document system for a city administration, a book service, a kids’ activities platform with six Laravel modules, my own single-spa micro-frontend runtime, and a Flutter-to-React-Native rewrite. That is why I see frontend together with infrastructure: builds, deployment, quotas and logs are part of a frontend task.

How I work

01Content separate from code

A page is JSON assembled from blocks, not a code edit. Editors publish on their own; developers are not in the loop for every page.

02A platform, not copies

One app template, block registries and basePath: a new portal is config plus content, not a fork of the codebase.

03Migrate in waves

Next.js 15 and App Router rolled out to nine sites in one day. Centralised migration is cheaper than nine local ones.

04Metrics over opinions

A regression is caught by a test, an incident by a log, quality by a gate. If something cannot be measured, I build the measurement first.

02 Experience

Twelve years: from C++ and PHP to the bank’s platform

Full timeline; recent roles in detail.

2025 — present

Yekaterinburg · remote

current

Cards cluster lead · Lead Frontend Engineer

RSHB · RSHB-Ecosystem

Frontend of the retail “Svoi Finansy. Cards” domain: module architecture, code review, releases, incident analysis.

  • Own four product web modules — cards, debit card applications, pre-login and card account requests — plus the admin panel for card products; set the technical direction for 12 frontend engineers across several teams.
  • Migrated the cards module from Redux Toolkit / RTK Query to Zustand + TanStack Query in a single MR: 109 files, 475 tests, no regressions; rolled the approach out to two more modules (88 and 87 files, +957/−1054).
  • Designed the web modules contract with the native Flutter shell: 31 protocol entries, 84 feature toggles, one loading contract — modules release independently.
  • Moved e2e from Cypress to Playwright: visual regression across 35 snapshots in two themes, federated module mocks, stable CI runs.
  • Investigated a production incident in the pre-login module: traced it to CFS quota exhaustion and justified 700m CPU, 3 replicas and HPA 2–6 instead of “just add memory”.
  • Run the cluster review process: 282 reviews and 287 Jira issues in a year; introduced a local quality gate — FSD boundaries, dead code, duplication, accessibility.
  • TypeScript
  • React 18
  • Module Federation
  • Zustand
  • TanStack Query
  • Playwright
  • SonarQube
  • bank design system

2022 — 2025

Yekaterinburg · remote

Website team lead · Lead Frontend Engineer

RSHB · RSHB-Intech

The bank’s public website: 11 portals on one domain, a team of 8–10, pages generated from JSON, CMS, block design system, releases and deployment.

  • Led the rshb.ru portal platform: 11 portals on one domain, 3,971 pages in the content model, 28,525 block instances and 8,355 content releases — with no separate engineering team per site.
  • Authored the wcms build CLI — 95 of 137 commits (69%): page generation and a JSON data format, sitemap, search index, portal resources, gzip pre-compression. Portal runtime — 26 of 30 commits (87%).
  • Rolled out Next.js 15 + App Router to nine sites in one day (18 Feb 2025): 32 files in the main portal, +982/−3,396; removed separate mobile builds — one adaptive build instead of two.
  • Built the block design system: 524 components, 55 blocks and 67 primitives, 145 icons. My area — header and footer, application forms (credit, credit card), offices and ATMs map, calculators, mobile bottom menu.
  • Built the Wildless CMS editor (201 commits): page schemas, live preview, block palette, file uploads, releases with tags and CHANGELOG, content migration between TEST/RC/PROD via merge requests.
  • Built SEO and security: canonical and absolute links, OG/Twitter/JSON-LD, per-portal sitemap, on-site search over a build-time inverted index with a Russian stemmer, X-Frame-Options and nginx caching.
  • Debit card application form on the site: the channel grew from ~20k to 72k applications in March 2025.
  • Next.js 15
  • App Router
  • React 18
  • TypeScript
  • Node.js
  • Wildless CMS
  • nginx
  • GitLab CI

Nov 2018 — Oct 2021

Moscow · remote

Lead specialist, development department

ANMAK · kidsway.city

A services platform for kids’ activities: PHP core, micro-frontends, mobile apps, servers and deployment.

  • Built the KidsWay 2.0 PHP platform: Laravel 5.6, six modules (Api, Client, Contractor, CRM, Exchange, Front), 560 files and 29,494 lines; CRM — 10,305 lines, API — 2,798.
  • Moved the frontend to single-spa micro-frontends: four independent apps (config, base, admin, trips), a module map in imports.json, an in-house UI kit. 109 of 229 commits are mine, including a full structure refactor.
  • Implemented a JSON:API client that parses nested relationships inside includes: relation normalisation and entity deduplication instead of ad-hoc requests.
  • Rewrote the mobile app from Flutter to React Native: 122 Dart files and 13,311 lines → staff 13,517 lines of JS (165 commits) and client 14,249 lines (48 commits), released via fastlane.
  • Ran servers and deployment: CentOS 7, nginx + PHP-FPM, an RPM repository, git deploy through a bare repository and a post-receive hook, scheduled database dumps.
  • Patched third-party libraries for the project: a fork of react-native-intl-phone-input wired from my GitHub into all three RN apps.
  • PHP
  • Laravel
  • React
  • single-spa
  • React Native
  • JSON:API
  • MySQL
  • CentOS

Jan — Aug 2018

remote

Software developer, book service

Knigogid.ru

Second developer on the service: admin, catalogue, integrations.

  • 58 of 133 revisions in 6.5 months: book and author editors in the admin, duplicate and matching subsystems, revisions, statistics, and a Litres cron integration.
  • 821 changed files, including dependency management via composer; CodeIgniter + MySQL + SVN.
  • PHP
  • CodeIgniter
  • MySQL
  • SVN

Aug 2015 — Jan 2018

Kamensk-Uralsky

Software engineer

Administration of Kamensk-Uralsky

An electronic document system in C++ and municipal websites in PHP.

  • Designed and wrote the “Kamensk-Uralsky” EDMS in C++Builder/VCL — sole author: 151 files, ~9,500 lines of C++, three DLL modules (connection, utilities with jsoncpp, auto-update), multithreaded HTTP requests.
  • Backend for the administration and municipal websites in PHP, teamwork in SVN; server support and monitoring.
  • C++
  • C++Builder
  • PHP
  • SVN
  • Linux

Nov 2017 — Nov 2018

Moscow · remote

Web developer

Computing Forces JSC · molot.ru

A high-traffic service: frontend and part of the backend.

  • Frontend in plain JS + jQuery + CSS: Ajax navigation without page reloads.
  • Backend on PHP CodeIgniter and GNU/Linux administration for the project.
  • JavaScript
  • jQuery
  • PHP
  • CodeIgniter
  • Linux

May 2016 — Oct 2017

Moscow · remote

Full-stack developer

PromoHolding

E-commerce and its promotion.

  • Solutions for online stores, maintenance of a large legacy codebase.
  • GNU/Linux server administration.
  • PHP
  • JavaScript
  • MySQL
  • Linux

May — Jul 2020

Nizhny Novgorod · remote

Software engineer

Linsoft LLC

Three video projects in one quarter: a web surveillance portal and two mobile clients.

  • Web video surveillance portal on HLS (hls.js + video-react): sites, camera groups, categories — 37 of 40 commits are mine.
  • A React Native client on react-native-video and a consultation app with audio and video messages (21 of 21 commits), Laravel 7 API.
  • React
  • HLS
  • React Native
  • Laravel

Aug 2014 — Mar 2015

Kamensk-Uralsky

Software technician

UPKB “Detal”

First commercial code — a C++ desktop app.

  • Workstation for generator calibration in C++ (RAD Studio): reading instrument data and generating reports automatically.
  • C++
  • RAD Studio

03 Cases

Three systems I was accountable for

Not “took part” — led: the website platform, the content system with its design system, and product modules in the bank.

Case · RSHB · 2022–2025

RSHB website platform

11 portals on one domain: content as JSON, page generation at build time, a shared CLI, block registries and basePath. 3,971 pages, 28,525 blocks, 8,355 content releases. Nine sites migrated to Next.js 15 + App Router in one day.

  • Next.js 15
  • SSG
  • Node.js
  • nginx
  • GitLab CI

Case · RSHB · 2023–2025

Wildless CMS & design system

An editor on top of git: page schemas, live preview, block palette, releases with tags and CHANGELOG, content migration between environments. The design system — 524 components, 55 blocks and 67 primitives, 145 icons, 44 blocks in the registry.

  • React
  • TypeScript
  • Rollup
  • Cosmos
  • GitLab API

Case · RSHB · 2025–2026

Card web modules

Four modules in the bank’s mobile app plus an admin panel. State migration to Zustand + TanStack Query (109 files, 475 tests in one MR), a contract with the Flutter shell, e2e and visual regression.

  • React 18
  • Module Federation
  • Zustand
  • Playwright

Personal infrastructure

devcv.ru

My own server: Caddy with 13 virtual hosts and automatic Let’s Encrypt, Gitea, Verdaccio with 210 packages, a CI runner, a 2.5 GB daily backup to a NAS, fail2ban. This page runs here.

  • Caddy
  • Docker
  • Gitea
  • Linux

Quality tooling

quality-gate

A local gate for web modules: FSD boundaries, dead code, duplication, dependency cycles and accessibility on a live page. Works offline against a sandboxed copy.

  • Node.js
  • Playwright
  • axe
  • AST

MCP server

gitlab-mr-mcp

A merge request review server: collects diffs for an allowlist of repositories, applies review rules and files findings as GitLab draft notes. YAML config, Zod schemas.

  • TypeScript
  • MCP
  • GitLab API
  • Zod

Automation

Cloud-free smart home

Home Assistant on a NAS, ZHA and Zigbee devices: a custom quirk for blind motors, automation driven by daylight and time, fully local.

  • Home Assistant
  • ZHA
  • Python
  • Zigbee

AI infrastructure

Local LLM stand

llama.cpp on an RTX 5080 and MLX on Apple Silicon: local inference, an eval loop on real tests, an agent with 107 skills and 13 cron jobs. No subscriptions, no data leaving the house.

  • llama.cpp
  • MLX
  • Python
  • Agents

Public tool

alfred-translate

An Alfred workflow for RU↔EN translation: hotkey, clipboard, releases built by GitHub Actions.

  • Alfred
  • Node.js
  • GitHub Actions

100+ more repositories in active use

04 Stack

What I work with

Grouped by task: from content and state architecture to the server it runs on.

Languages

  • TypeScript
  • JavaScript (ES2023)
  • PHP
  • C++
  • Bash
  • SQL

Frontend

  • React 18/19
  • Next.js (App Router, SSG)
  • Vue 3 / Nuxt 2
  • Gatsby
  • React Native
  • single-spa
  • Module Federation
  • Web Components

State & data

  • Redux Toolkit
  • RTK Query
  • Zustand
  • TanStack Query
  • JSON:API
  • REST

Content platforms

  • Wildless CMS
  • Schema-driven UI
  • SSG pipelines
  • JSON-to-page generation
  • Build-time search index

Styling & design systems

  • SCSS
  • CSS tokens & themes
  • CoreUI
  • Bank design system
  • Responsive layouts
  • Accessibility (WCAG)

Build

  • webpack
  • Vite
  • Rollup
  • lerna
  • Yarn workspaces
  • Turborepo

Testing

  • Jest
  • Vitest
  • Playwright
  • Cypress
  • Visual regression
  • axe

Code quality

  • SonarQube
  • ESLint
  • Stylelint
  • steiger
  • knip
  • jscpd
  • dependency-cruiser

Infrastructure & CI

  • Linux (Debian, CentOS)
  • Docker
  • Caddy
  • nginx
  • GitLab CI
  • Gitea Actions
  • Zabbix
  • MariaDB

AI & agents

  • LLM agents
  • MCP
  • Cursor
  • Claude Code
  • llama.cpp
  • MLX
  • Prompt engineering

05 Education

Foundations

2018

Applied Informatics (BSc)

Kurgan State University · Faculty of Technology

2014

Automated Information Processing and Control Systems

Kamensk-Uralsky Polytechnic College

Russian
native
English
B1 — docs, correspondence, stand-ups

06 Contact

Let’s talk about problems, not stacks

Open to Lead and Staff frontend roles, platform work, and tasks at the intersection of frontend and infrastructure. I reply within a day.